Skip to main content

Author a custom skill in 10 minutes

This walks through the canonical flow: scaffold a SKILL.md from the CLI, fill it in, upload, assign to an agent, invoke, and iterate. No browser, no API key required (for the offline path).

1. Scaffold

Pick a slug (kebab-case) and a category, then run init:
This writes ./invoice-classifier/SKILL.md with the canonical body sections and frontmatter. It is fully offline — no network round-trip, no credential needed.

2. Edit

Open the scaffold in your editor. Three things to focus on: Description (frontmatter) — the LLM uses this to decide if the skill is relevant. Make the trigger phrase concrete:
## When to use — restate the trigger and add at least one near-miss the skill should NOT activate on. Without a negative example the agent over-fires.
## Steps — concrete, ordered actions:
## Output format — be precise. The LLM follows whatever shape you spell out:

3. Upload

Output:
The import gates run automatically: SPDX license check, prompt-injection scanner, body size cap, BUNDLED-overwrite refusal. If anything fails the import is rejected with a specific reason — no half-state. Verify:
You should see scan_status: CLEAN, spdx_license: MIT, and maturity: COMMUNITY.

4. Assign

For one agent:
For a whole crew:
After this, the next time the agent runs, the orchestrator:
  1. Renders the skill body into the agent’s [SKILLS AVAILABLE] system-prompt block.
  2. Materialises SKILL.md at the right path for whichever CLI the agent uses (.claude/skills/invoice-classifier/SKILL.md, .opencode/skills/..., etc.).

5. Invoke

Trigger the skill from the user side via crewship run:
If the trigger description matched, the agent’s reply will follow the output-format YAML and stay within the guardrails you wrote. Use --dry-run to inspect the assembled prompt without spending tokens:

6. Iterate

Pull the current SKILL.md back from the registry, edit, re-upload:
The import path upserts by slug — re-importing keeps the same id and preserves every agent_skills row, so assigned agents pick up the new body on their next run with no re-assignment needed.

When to bump the version

The version frontmatter field is currently informational — the upsert is “last write wins” by slug regardless of version. Bumping it is still useful for human reviewers. Plans for a future release: surface a warning when an import would replace a higher version with a lower one.

When to use skill create instead

If you have an Anthropic API key (workspace credential type=API_KEY, not OAuth), you can ask the platform to draft the SKILL.md for you:
The server runs a condensed version of Anthropic’s skill-creator system prompt against Sonnet. Output goes straight into the registry with source=GENERATED. Use this for first drafts, then skill export to edit + iterate normally. If you don’t have an API key, or you want the agents themselves to capture the workflows they discover, see Agent-authored skills — the agent writes the SKILL.md with its own runtime model (no API key) and it lands in a review queue instead of going live directly.

Sharing a skill with another workspace

There’s no marketplace yet. The simplest pattern:
Or commit the SKILL.md to a git repo and bulk-import: