Skip to content

v0.18.0

Choose a tag to compare

@basepointer basepointer released this 19 Oct 16:44

Changed (breaking): OpenAI Agents SDK agents get their prompt and skills from load_agent()

  • New: decimalai.openai_agents.load_agent(name, fallback=..., on_unavailable="continue")
    returns instructions (the agent's saved prompt, with {{placeholders}} filled from
    Runner.run(context=...), then its skill list) and tools (load_skill, limited to the
    agent's skills), which you pass into your own Agent(...). Every run is routed on its own
    latest message (read from RunContextWrapper.turn_input; without it, a fixed order and one
    warning): the first run before its model call, later runs from a local copy while their own
    decision is recorded in the background, and an agent whose menu is cut to fit before every
    model call. The prompt is re-read in the background at most once a minute. The prompt
    version, its placeholder names (not values) and any skill outage are on the agent's span,
    and the trace is filed under the load_agent() name. An unknown agent name raises.
  • Removed: every patch on the Agents SDK — Agent.__init__, Agent.get_system_prompt,
    Agent.get_all_tools, agents.run_internal.turn_resolution.check_for_final_output_from_tools
    and the sandbox Skills.load_skill / Skills.instructions. They gave every agent in the
    process skills and relied on SDK internals that may change in any patch release.
  • init(openai_agents=True) and instrument() now trace only. openai_agents.instrument() no
    longer takes enable_skill_loader, and init()'s skills= applies to the langchain, adk
    and crewai flags only.
  • DecimalAI's skills turn off for one agent, with one warning, when its tool_use_behavior
    is "stop_on_first_tool" (a skill's text would become the answer), it loads skills with the
    sandbox Skills capability, it has another tool named load_skill, or its instructions are
    support.instructions but its tools leave out *support.tools. The prompt still runs.
  • The tool's kill switch still works: with DECIMALAI_LOAD_SKILL_TOOL=0 or
    init(load_skill_tool=False), the text of the skills picked for each run's message goes into
    the instructions instead (inject_skill_body, which defaults to on once the tool is off).
  • init(enabled=False) after load_agent() stops routing and skills for that config; the
    prompt it read keeps running.
  • init(openai_agents=True) and instrument() read the project's own SKILL.md files (and
    sync the ones you wrote) only when asked: disk_sync=True, skill_dirs=, or the harness
    skill authority.
  • sandbox_skills() still records what it lists and loads, in its own Skills subclass; a
    plain Skills(...) is no longer observed.
  • decimalai init --framework openai-agents writes the new shape.

Migration:

# before
decimalai.init(openai_agents=True, agent_name="support")
agent = Agent(name="support", instructions=BASE_INSTRUCTIONS, tools=[lookup_order])

# after
from decimalai.openai_agents import load_agent

support = load_agent("support", fallback=BASE_INSTRUCTIONS)
agent = Agent(name=support.name, instructions=support.instructions,
              tools=[lookup_order, *support.tools])

Removed (breaking): what only existed to ease the move from older releases

  • install(), the deprecated alias of instrument(), in all nine framework modules
    (adk, anthropic, autogen, claude_agent_sdk, langchain, llamaindex,
    openai_agents, otel, pydantic_ai). Call instrument().

  • The 0.14 disk verbs, deprecated since 0.15. There is one way a registry skill reaches
    disk: decimalai skills add (router.export(name) in Python).

    removed use
    decimalai skills export <ref>, decimalai skills install <ref> decimalai skills add <ref>
    SkillRouter.install(), install_skill(), export_to_disk() router.export(name)
    SkillRouter.pull_missing() decimalai skills install
    SkillRouter.pull_skill() router.preview(name)
    export(agents=..., scope=...) nothing: there is one root, .agents/skills
    decimalai.disk_export (export_skill_to_disk(), export_skills_to_disk(), AGENT_PATHS) decimalai skills add

    decimalai skills install with no name is unchanged; its hidden 0.14 options --agent,
    --scope and --out are gone.

  • The version 1 lock fallback. router.export() and router.update_skills() refuse a
    project whose .decimal/skills.lock decimalai 0.14 wrote, as every decimalai skills
    command already did, and name the fix: run decimalai skills migrate once.

  • SkillRouter.search_registry, a second name for search().

  • skill_router.should_auto_pull_to_disk(), which nothing called, and the one-time warning
    that instrument(disk_sync=True) no longer writes skills to disk. disk_sync decides
    whether the project's own SKILL.md files are read and synced; it never wrote registry
    skills in 0.15 or later.

  • project=, deprecated since 0.10.0 and never read by the platform (traces are scoped
    by the API key; group them with workspaces): on decimalai.init(), DecimalAIClient(), the
    LangChain CallbackHandler, ADK's DecimalaiPlugin(), and the Claude Agent SDK's
    trace_stream() and traced_query(), plus the CLI's hidden --project option.
    (decimalai init --project <dir>, which writes a Support project, is unchanged.) The trace
    schema keeps its project field, unset.

  • annotate_trace()'s text= (pass notes=), and annotation_type= and span_id=, which
    the endpoint never accepted.

  • decimalai.skills.detect_skill_activations(), the deprecated alias of
    detect_skills_present_in_prompt(): matching prompt text shows a skill was present, not
    that it was activated.