Crush builtin-skills
Use when creating a new builtin skill for Crush, editing an existing builtin skill (internal/skills/builtin/), or when the user needs to understand how the embedded skill system works.
install
source · Clone the upstream repo
git clone https://github.com/charmbracelet/crush
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/charmbracelet/crush "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.agents/skills/builtin-skills" ~/.claude/skills/charmbracelet-crush-builtin-skills && rm -rf "$T"
manifest:
.agents/skills/builtin-skills/SKILL.mdsource content
Builtin Skills
Crush embeds skills directly into the binary via
internal/skills/builtin/.
These are always available without user configuration.
How It Works
- Each skill lives in
.internal/skills/builtin/<skill-name>/SKILL.md - The tree is embedded at compile time via
in//go:embed builtin/*
.internal/skills/embed.go
walks the embedded FS, parses eachDiscoverBuiltin()
, and sets paths with theSKILL.md
prefix (e.g.,crush://skills/
).crush://skills/jq/SKILL.md- The View tool resolves
paths from the embedded FS, not disk.crush:// - User skills with the same name override builtins (last occurrence wins
in
).Deduplicate()
Adding a New Builtin Skill
- Create
with YAML frontmatter (internal/skills/builtin/<skill-name>/SKILL.md
,name
) and markdown instructions. The directory name must match thedescription
field.name - No extra wiring needed —
picks up new directories automatically.//go:embed builtin/* - Add a test assertion in
inTestDiscoverBuiltin
to verify discovery.internal/skills/skills_test.go - Build and test:
go build . && go test ./internal/skills/...
Existing Builtin Skills
| Skill | Directory | Description |
|---|---|---|
| | Crush configuration help |
| | jq JSON processor usage guide |