Skip to main content

orun skills

Skills are your organisation's playbooks, versioned and shared with every agent the same way standards are shared with every repository. orun skills is the human and CI face of the skill registry: hosted, content-addressed agent playbooks — the Sourceplane defaults, shadowed by anything your workspace publishes. Agents consume the same registry through skills_list and skill_get on the platform MCP, and orun agent run and serve materialize it automatically before a session starts. This group reads the registry; publishing stays with the console, and nothing here writes to it.

orun skills list
orun skills pull [name] [--rev sha256:<hex>] [--dir <dir> | --client <client> [--project]]
orun skills status [--dir <dir> | --client <client> [--project]]

All three take the shared cloud flags: --workspace <org id|slug> (defaults to the linked repository's workspace), --backend-url <url>, and --json. You need a login (see orun auth).

list​

Prints every skill's latest revision: name, the short revision, the source (default for a Sourceplane default, org for one your workspace published), and who published it.

$ orun skills list
NAME REV SOURCE PUBLISHED BY
orunbase 18f73d0c default -
software-factory 2bbb7cde default -
review-pr 0a9b8c7d org usr_01J8…

--json emits the registry response as-is.

pull​

Writes each revision as a native skill bundle — <dir>/<name>/SKILL.md, the project-skill layout coding-agent clients discover on their own, with a frontmatter block over the canonical body — plus the files the skill carries: references/* (loaded on demand) and templates/* (copied). The frontmatter carries name, description when the skill has one, the pinned orun-rev, and orun-source, so a skill on disk always names the revision it is.

A pull is a sync of the registry's copy, not a merge: a bundle file an earlier pull wrote that the new revision no longer carries is removed (.orun-files beside SKILL.md records what was written), and anything else in the directory — a skill you wrote yourself, a note beside one — is left alone.

FlagMeaning
[name]Pull one skill. With no name, pull the whole registry.
--rev sha256:<hex>An exact revision. Only valid with a name.
--dir <dir>Target directory (default .claude/skills).
--client <client>Resolve the directory from the client instead: claude-code, codex, cursor or vscode. Mutually exclusive with --dir.
--projectWith --client: the repository's skills directory rather than the user's.
--clientuser-level--project
claude-code~/.claude/skills.claude/skills
codex~/.codex/skills.codex/skills
cursor~/.cursor/skills.cursor/skills
vscode~/.copilot/skills.github/skills
orun skills pull --client claude-code # everything, into ~/.claude/skills
orun skills pull --client vscode --project # into .github/skills of this repository
orun skills pull software-factory --rev sha256:2bbb… # one skill, pinned
orun skills pull --dir ./agent-skills
$ orun skills pull --client claude-code
wrote /home/dana/.claude/skills/orunbase/SKILL.md (18f73d0c)
wrote /home/dana/.claude/skills/software-factory/SKILL.md (2bbb7cde) + 7 file(s)

--json returns {"dir": …, "skills": [{"name", "rev"}, …]} — the pins.

status​

Compares the skills on disk — the orun-rev each SKILL.md carries — with the registry's latest revisions, and exits 1 when anything is not current, so a session-start hook can run it and pull only when it says to.

StatusMeaning
currentThe local copy is the registry's latest.
staleA real revision, since superseded — pull again.
unknownA revision the registry never published: the file was edited, or came from elsewhere.
missingA registry skill with no local copy.
$ orun skills status --client claude-code
NAME LOCAL LATEST STATUS
mcp-tools 9983f000 9983f000 current
orunbase 18f73d0c 4c1e9a02 stale
task-branch-pr - 3c53498c missing
✕ orun skills status: 2 skill(s) not current in /home/dana/.claude/skills — `orun skills pull --dir /home/dana/.claude/skills` refreshes them

--json returns {"dir": …, "skills": [{"name", "local", "latest", "status"}, …], "current": bool}.

How sessions use the registry​

A claude-code session pulls the whole registry into the harness working directory before launch and records the pins it ran under in .orun/agent-mcp/skills.json. orun pr open reads that file and names the revisions in the PR's manifest block, so a review can always re-read the playbook the agent followed. The materialization is best-effort: a workspace that is not linked, not logged in, or offline warns and the session continues without skills.

The orunbase skill — the registry's entry point — starts every session by comparing its own orun-rev with skill_get orunbase and following the live body when they differ, so a stale copy is never the one that decides.

Exit codes​

CodeMeaning
0Listed, pulled, or every local copy is current.
1No workspace or login could be resolved, the registry request failed, --rev without a name, --dir together with --client, a file could not be written, or (status) a skill is stale, unknown or missing.