Skip to main content

crewship skill

Skills are reusable instruction playbooks that get injected into an agent’s system prompt as a [SKILLS AVAILABLE] block and materialised on disk in each CLI’s discovery convention (.claude/skills/, .opencode/skills/, .factory/skills/, .agents/skills/, .cursor/rules/). The CLI is the canonical authoring + iteration path; the web UI is a surface over the same API.

Subcommands at a glance


The CLI authoring loop

The intended flow for a custom skill is:
init is intentionally offline — it doesn’t talk to the server, so it works for users who only have a Claude Code OAuth token and cannot reach the Anthropic Messages API directly (the path crewship skill create needs).

crewship skill init

Write a SKILL.md scaffold to disk so you can edit it locally and upload.
The scaffold writes the canonical body sections (When to use, Steps, Output format, Guardrails, optional Verification) and frontmatter fields the parser accepts.

crewship skill list

Examples:

crewship skill get

Show metadata for one skill — name, slug, category, version, source, author, tool count, created-at. The markdown description body renders below the metadata block via glamour for human formats; JSON / YAML / quiet outputs include it raw inside the serialized struct.
Backed by GET /api/v1/skills/{id} after resolving <slug-or-id> to the skill’s id.

crewship skill export

Recover the SKILL.md body from the workspace and write it to disk or stdout.
Without --output, prints to stdout (pipe-friendly). With --output set to a directory, writes <slug>.md inside it.

crewship skill import

Import a single SKILL.md (URL or file) or walk a whole git repo.

What runs on every import

  1. SSRF check — URL/host must be public; private IPs blocked (single + bulk).
  2. License gate — frontmatter license: is matched against the SPDX allowlist below.
  3. Prompt-injection scanner — body scanned for “ignore previous instructions”, role hijack, large base64 blobs, etc. Status stored in scan_status (CLEAN / FLAGGED).
  4. Size cap — single fetch ≤ 512 KB; bulk per-file same; bulk total ≤ 500 SKILL.md files.
  5. BUNDLED protection — re-importing a slug already owned by a BUNDLED skill is refused.

SPDX allowlist

MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC, CC0-1.0, MPL-2.0, Unlicense, 0BSD. Pass --unsafe-license to bypass for one batch (audited via the license column).

crewship skill create

LLM-authored SKILL.md via Anthropic Messages.
Requires an active Anthropic credential of type API_KEY in the workspace (Settings → Credentials). An OAuth token from claude /login is not sufficient (it’s a Bearer for claude.ai, not the Messages API). Users without an API key should reach for skill init instead.

crewship skill delete

Remove a skill from the workspace registry. Cascades to agent_skills.
Cascades to agent_skills — every agent loses the skill. BUNDLED skills cannot be deleted (they re-seed on every server start).

crewship skill assign

The fan-out variant is idempotent: agents that already have the skill are treated as success, and per-agent failures are reported but don’t abort the rest.

crewship skill unassign

Same target shapes as assign:
After unassign, the next time the agent runs, the orchestrator prunes the skill folder from the agent’s container (.claude/skills/<slug>/, .cursor/rules/<slug>.mdc, etc.) so a CLI auto-discovery walker can no longer pick it up.

crewship skill proposed

Operator-side HITL surface for the memory→Skills bridge. When the consolidator sees a learned rule with sustained recall (default ≥ 10 recall events, composite score ≥ 0.85) it stages an Anthropic-format SKILL.md under .memory/{crew-slug}/topics/.proposed/skill-<slug>.md. These three verbs let an operator inspect and decide.
Each proposed verb requires OWNER, ADMIN, or MANAGER role.

crewship skill proposed list

Output columns: FILE, NAME, CATEGORY, DESCRIPTION (truncated to 60 chars), QUALITY (ok when the server didn’t flag it). Backed by GET /api/v1/skills/proposed?crew_id=<id>.

crewship skill proposed approve

Run the staged file through the canonical skill importer — same path as URL-based imports, so the SPDX license check and prompt-injection scan apply. On success the staging file is deleted and an EntryMemorySkillApproved journal entry fires.
Backed by POST /api/v1/skills/proposed/approve. Output: approved <file> -> skill <id> (<slug>, created|updated).

crewship skill proposed reject

Discard the staging file without importing. Idempotent — rejecting an already-deleted file returns success, and an EntryMemorySkillRejected journal entry fires either way.
Backed by POST /api/v1/skills/proposed/reject.

Per-CLI filesystem materialisation

When a skill is assigned, the orchestrator writes its SKILL.md into the discovery convention each adapter knows. This way the same skill works for whatever CLI the agent is configured with: The system-prompt block is the authoritative surface — filesystem layout is the bonus discovery path for adapters that walk it natively.