Skills and Plugins
Equip CrabCode with task-specific capability bundles: UI design, browser automation, code review, skill authoring. Sources include bundled, user/project dirs, and the official marketplace.
What it is
A skill is a SKILL.md plus optional scripts/assets that teaches CrabCode how to handle a specific task ("when doing UI design, follow these principles", "for browser automation, drive this CLI"). At startup CrabCode indexes available skills by their frontmatter description; the model picks one when relevant.
A plugin is a release unit that bundles one or more skills, slash commands, and hooks together. Installing one plugin may register several skills.
When you see this doc
- The
/pluginbrowse / install / manage screen /skillslisting currently loaded skills/initrecommendingfrontend-design/playwright/skill-creator- A
/plugin install foo@barerror or marketplace parse failure
Four sources of skills
CrabCode loads skills from four places at startup:
| Source | Path / form | When |
|---|---|---|
| Bundled | Ships with the CLI, no path | verify / debug / skillify / simplify / remember / keybindings / updateConfig / loremIpsum / batch / browserAutomation, etc. — no install needed |
| User directory | ~/.crabcode/skills/<name>/SKILL.md | Follows you across projects |
| Project directory | <repo>/.crabcode/skills/<name>/SKILL.md | This repo only; can be committed to share with the team |
| Plugin (marketplace) | Installed via /plugin install | Third-party / Acosmi official |
Tools exposed by MCP servers also surface in the available-skills list with an
mcpsource tag — see MCP.
Install official plugins
The official marketplace is crabcode-plugins-official — registered automatically once signed in, no manual setup.
/plugin # Main menu
/plugin install # Browse all
/plugin install frontend-design@crabcode-plugins-official
/plugin install playwright@crabcode-plugins-official
/plugin install skill-creator@crabcode-plugins-official/plugin # Main menu
/plugin install # Browse all
/plugin install frontend-design@crabcode-plugins-official
/plugin install playwright@crabcode-plugins-official
/plugin install skill-creator@crabcode-plugins-officialCLI alternative (non-interactive):
crabcode plugin install <plugin>@<marketplace>
crabcode plugin uninstall <plugin>
crabcode plugin enable|disable <plugin>
crabcode plugin update [<plugin>]
crabcode plugin listcrabcode plugin install <plugin>@<marketplace>
crabcode plugin uninstall <plugin>
crabcode plugin enable|disable <plugin>
crabcode plugin update [<plugin>]
crabcode plugin listFeatured official plugins
| Plugin | Purpose |
|---|---|
frontend-design | Drives CrabCode toward distinctive UI; avoids generic AI aesthetics |
playwright | Real-browser automation so CrabCode can screenshot and verify its own UI |
skill-creator | Build / refine your own skills with evals; after install run /skill-creator |
code-review / review | PR code review |
security-review | Security audit |
crabcode-api | When writing Acosmi-API code, auto-applies prompt-caching best practices |
Browse the full catalog with /plugin install.
Write your own skill
Directory layout
~/.crabcode/skills/<skill-name>/
SKILL.md # Required: frontmatter + prompt body
helpers/ # Optional scripts / assets (reference via @ in the prompt)~/.crabcode/skills/<skill-name>/
SKILL.md # Required: frontmatter + prompt body
helpers/ # Optional scripts / assets (reference via @ in the prompt)For a project-scoped skill, swap the root for <repo>/.crabcode/skills/<skill-name>/ and commit it alongside .crabcode/settings.json so teammates pick it up.
SKILL.md frontmatter fields
| Field | Required | Meaning |
|---|---|---|
name | ★ | Invocation name (also becomes the /<name> slash command) |
description | ★ | One-liner — the model decides whether to use the skill based on this |
when_to_use | Longer human note on when to trigger (not used by the model selector) | |
allowed-tools | Restrict tools this skill can call, e.g. Read,Edit,Bash(git*) | |
argument-hint | Argument hint shown when invoking /skill-name | |
arguments | Explicit argument name list | |
model | Force a specific model for this skill; inherit follows the current session | |
effort | Thinking effort: off / high / max or integer | |
user-invocable | false hides it from /<skill-name> (model-pick only) | |
disable-model-invocation | true makes it user-only — model won't auto-select | |
paths | Glob list; activates only when matching files appear in this session (conditional skill) | |
version | Version string you manage yourself | |
hooks | Skill-local hook config (same shape as settings.json hooks) | |
shell | Default shell for command-type hooks | |
context | fork to run in a forked sub-context | |
agent | Run via a specific agent type |
Everything after the frontmatter is the prompt body injected into the model.
Full example
---
name: ship-checklist
description: Prep changes for release — run lint, check changelog, verify PR template
when_to_use: User says "prep release" / "PR health check", or after git commit before opening a PR
allowed-tools: Read,Bash(bun*),Bash(cargo*),Bash(git status*)
effort: high
---
## Steps
1. Run the project's `bun run lint` / `cargo clippy`
2. Check CHANGELOG has an entry for this version
3. Check commit message matches project conventions
4. Warn if there are uncommitted changes---
name: ship-checklist
description: Prep changes for release — run lint, check changelog, verify PR template
when_to_use: User says "prep release" / "PR health check", or after git commit before opening a PR
allowed-tools: Read,Bash(bun*),Bash(cargo*),Bash(git status*)
effort: high
---
## Steps
1. Run the project's `bun run lint` / `cargo clippy`
2. Check CHANGELOG has an entry for this version
3. Check commit message matches project conventions
4. Warn if there are uncommitted changesSaving the file takes effect immediately. Run /skills to confirm it loaded, then /<skill-name> to invoke it manually and verify the prompt injection.
Not sure where to start? Run the bundled
skillifyskill — it walks you through generating a SKILL.md interactively.
Priority and conflict resolution
At startup CrabCode loads skills in this order (earlier wins; later same-name entries are dropped):
- Managed (org-level
policySettings) - User (
~/.crabcode/skills/) - Project (
<repo>/.crabcode/skills/) - Additional (extra working directories)
- Plugin / Bundled / MCP
Duplicate same-name skills are logged as Skipping duplicate skill '<name>' to the debug log; launch with --debug to see the full loader trace.
Skill vs Hook vs MCP
All three extend CrabCode, but with different semantics:
| Form | Triggered by | Good for |
|---|---|---|
| Skill | Model picks based on description, or user runs /<name> | "Workflow / approach for task X" |
| Hook | CrabCode auto-fires on lifecycle events (PreToolUse / PostToolUse / ...) | "Force Z when event Y happens" (block / audit / auto-format) |
| MCP server | Model calls tools exposed by the server | "Give the model a new capability" (DB queries, API integrations, ...) |
Mixing is common — one plugin can ship a skill (teaches the model the approach) + a hook (PreToolUse to block dangerous ops) + an MCP server (adds new tools).
Custom marketplaces
Register your team's skill repo as a marketplace, then /plugin can install from it:
crabcode plugin marketplace add my-team/skills # GitHub owner/repo
crabcode plugin marketplace add git@example.com:.../repo # Any git URL
crabcode plugin marketplace add ./local/path # Local directory
crabcode plugin marketplace list
crabcode plugin marketplace update [<name>]
crabcode plugin marketplace remove <name>crabcode plugin marketplace add my-team/skills # GitHub owner/repo
crabcode plugin marketplace add git@example.com:.../repo # Any git URL
crabcode plugin marketplace add ./local/path # Local directory
crabcode plugin marketplace list
crabcode plugin marketplace update [<name>]
crabcode plugin marketplace remove <name>Or declare in settings.json:
{
"extraKnownMarketplaces": {
"my-team": {
"source": "github",
"repo": "my-team/skills",
"ref": "main"
}
}
}{
"extraKnownMarketplaces": {
"my-team": {
"source": "github",
"repo": "my-team/skills",
"ref": "main"
}
}
}Supported marketplace source values: github / git / url / npm / file / directory / settings (inline manifest).
Limits and caveats
- Read SKILL.md before installing: plugins may ship scripts and hooks — inspect the manifest first
- Refresh:
/plugin marketplace update <name>pulls latest; plugin bodies update via/plugin update - Scope:
--scope user|project|localcontrols where it installs — project scope is committed via.crabcode/settings.jsonso teammates share it - Collisions: same-name skill loaded later overrides earlier (project > user > bundled)
- Org policy: organizations can lock down allowed marketplaces and installable plugins via
policySettings /pluginsis an alias for/plugin