Skip to main content
Skills are the unit of reusable agent knowledge in DecimalAI. The SDK has two flows: sync (push your local SKILL.md files to the platform during install()) and pull (download platform skills to disk). At runtime, the Skill Router is what your agent talks to — it picks which skills to load on every query and emits the telemetry that powers per-skill effectiveness. This page covers the SDK surface; the Router page covers strategies, response shape, and the routing-id → trace join.

Sync skills from code to platform

The skill_dirs argument is supported by all framework install() calls — OpenAI Agents, LangChain, LlamaIndex, etc.

Pull skills from platform to disk

Pull a public skill — no signup required

For consumers who just want to read a published skill without forking it into an org, the CLI’s pull command works against the public registry endpoint with no auth:
pull is read-only — no fork is created, no activation telemetry is recorded. Use install() (Python) once you sign up to get the full lifecycle. In the SDK, install() = fork + write SKILL.md to disk (plus per-trace activation tracking); use fork() for the workspace copy without the disk write.

SkillRouter — full CRUD

For programmatic skill management, instantiate SkillRouter directly:
See the Skills API reference for the underlying REST surface.

On-demand bodies: the load_skill tool

The routed menu carries names + descriptions; bodies load on demand. On the openai_agents and pydantic_ai adapters, install(enable_skill_loader=True) also registers a native load_skill(name) tool on every agent — the model reads the menu, calls the tool with a skill’s exact name, and the full instructions arrive as the tool result mid-turn. Nothing to wire manually:
Body loads are budgeted per turn so they can’t blow the context window: Re-loading an already-loaded skill is free. Each load is recorded on the trace (skills_loaded_by_agent), closing the offered-vs-loaded join server-side. The anthropic and langchain adapters have no tool loop to route a result through, so they stay on prompt injection — their inject_skill_body=True path applies the same trim and budget. Disable the tool everywhere with decimalai.init(load_skill_tool=False) or DECIMALAI_LOAD_SKILL_TOOL=0. You can also call the primitive directly:

What’s next

Skills guide

File format, registry, and SkillScore for skill effectiveness.

Skills Observability tutorial

Real-world example of measuring skill impact with experiments.