SKILL.md, that an agent can load during a run. Its id is a 16-character base62 string with no prefix, and most routes also accept its slug. For how skills reach a run, see Plugins and skills.
States
A skill has no status field. Two conditions are derived.- On for an agent. A run gets the skill when the agent’s override, or else
enabledByDefault, istrue. A plugin skill also needs its plugin on.effectiveEnabledon the agent override list shows the result. - Unavailable.
unavailableReasonisnot_materializedorbundle_unreadablewhen a run could not place the skill. It returns tonullonce a run places it.
Fields
string
required
Always
skill.string
required
16-character base62 id.
string
required
Stable name. Up to 64 characters of
a-z, 0-9, _ and -.string
required
Display name.
string
Short description. Null when unset.
integer
required
Starts at 1. Goes up by one on each bundle replace.
string
required
builtin, imported, shared, marketplace or plugin. A skill added from a git repo reports imported. The list route finds those with sourceType=repo.boolean
required
Workspace default for every agent without an override.
integer
required
Files in the bundle.
integer
required
Bundle size in bytes.
integer
Approximate tokens in
SKILL.md. Null when not counted yet.object
The plugin that owns the skill. Null for a standalone skill.
not_materialized or bundle_unreadable. Null when healthy.string
required
Install time, ISO 8601.
string
required
Last change time, ISO 8601.
skill get and GET /api/v1/skills/{skillId} add these:
string
Plugin namespace. Null for a standalone skill.
string
Content hash of the stored bundle. Null when none is stored.
object
Null when unspecified.
object[]
required
Each file’s
path, and kind: instruction for SKILL.md, reference for the rest. No contents.object
required
type and a readable label, such as the repo URL.isShareable, false for a plugin skill, and latestShareId.skillId, slug, name, enabled, workspaceEnabled, pluginEnabled and effectiveEnabled. enabled is null when the agent follows the workspace default.
CLI
skill add looks for SKILL.md at the repo root and in skills/, .agents/skills/ and .claude/skills/. For your own skill, pass --source-type imported. A skill created as builtin cannot be deleted.
API
The workspace comes from your credentials, except on the install-from-repo route.
Who can do what:
- An agent can create a skill. It starts off for the workspace and on for that agent. Sending
enabledByDefault: truefails. - An agent can set or clear only its own overrides.
- An agent’s update, delete, bundle replace, repo install or share install becomes an approval request. The call returns HTTP 202.
- A plugin skill accepts only
enabledByDefaultchanges. You cannot delete it, replace its files or share it. - Installing a shared skill copies it as
shared. A taken slug gets a-2,-3suffix.
installed, skipped with a reason for each, and resolvedSha.
Errors
Shared codes are in API errors.
Limits
- A bundle holds at most 200 files.
- A file preview reads at most 1,048,576 bytes.
- A slug holds up to 64 characters. A name holds up to 256.
- A list page returns 25 skills by default and 100 at most.
- The
qsearch takes up to 200 characters. - A share preview allows 60 requests per minute per IP address.
Plugins and skills
How skills reach a run.
Install a plugin
Install plugin skills and fork one.
Plugin
The plugin that owns a skill.
Agent
Where overrides apply.