Skip to main content
A skill is a versioned bundle of files, led by 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, is true. A plugin skill also needs its plugin on. effectiveEnabled on the agent override list shows the result.
  • Unavailable. unavailableReason is not_materialized or bundle_unreadable when a run could not place the skill. It returns to null once a run places it.
A share link has three states, derived from its timestamps.

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.
string
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.
object
required
isShareable, false for a plugin skill, and latestShareId.
Each row of an agent’s override list has 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: true fails.
  • 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 enabledByDefault changes. You cannot delete it, replace its files or share it.
  • Installing a shared skill copies it as shared. A taken slug gets a -2, -3 suffix.
A repo install returns 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 q search 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.