- Progressive disclosure every skill’s name + one-line description sits in the system prompt at near-zero token cost; the full instructions body only loads when the model calls
use_skill, keeping a large skill library cheap to carry - Shared by chat and Orchestrator one skill library,
~/.coder/skills/<name>/SKILL.md, available to the interactive chat agent and every Orchestrator stage (PM, builders, reviewer) alike - Managed in the Prompts panel a “Skills” section lists every skill with its description, alongside a create (+) button and per-skill delete; clicking a skill opens its
SKILL.mdfor editing like any other file - Just markdown a skill is a folder with a
SKILL.md(YAML frontmatter forname/description, then free-form instructions below); no code or registration required to add one
Layout
Built-in skills
Coder ships with a small set of default skills, seeded into~/.coder/skills/ on first launch:
These stay in sync with the
coder-skills repo — a periodic and manual sync keeps ~/.coder/skills/ current as new default skills are added there.
Adding a built-in skill for code quality or a Coder feature
Thecoder-skills repo is where a new default skill is authored before it ships. Two categories worth knowing about when deciding whether something belongs there:
- Code-quality skills — e.g.
lint, which dispatches to the real linter per language (ESLint, PHPStan, golangci-lint, Clippy, RuboCop) rather than approximating one tool’s rules with another. These matter most when a user asks the agent to “scope a new project” — a good default skill here means the agent reaches for the real tool with a sane starter config instead of guessing. - Coder-feature skills — teaching the agent to use a capability specific to this app (e.g. writing a
.mindmap.md, generating LaTeX for KaTeX rendering). Skip this path for anything the agent should have access to unconditionally rather than only when a task matches a skill description — see the docs-tool note below.
Custom overrides
A user (or the Orchestrator) can fork any built-in skill without losing future updates to it. The convention is a sibling directory prefixedcustom-:
- First edit forks automatically. Editing a pristine shipped skill in the Prompts panel deep-copies it to
custom-<name>and the original underneath is left untouched as the sync target — you never edit the shipped copy directly. - The custom directory always wins. Both the model’s
use_skilllookup and the Skills sidebar resolve<name>tocustom-<name>when it exists; nothing else needs to know a fork exists. - Sync respects the fork. A background/manual sync from
coder-skillsonly updates the shipped copy underneath a fork, never thecustom-directory — your edits are never overwritten by an upstream change. If you create a brand-new skill whose name collides with one newly added upstream, the sync skips it rather than overwriting your work. - A skill you create fresh (no built-in with that name) is just a plain
~/.coder/skills/<name>/directory — thecustom-prefix only matters for overriding something built-in.
How the model sees skills
Two tool tiers, modeled on Claude Code’s own skill system:- Listing (always in context) — every skill’s
name+description, one line each, injected into the system prompt. Both built-in and custom skills are included, already collapsed to whichever one wins per the override rule above — the model never sees “shipped vs custom,” only the winning name and description. use_skill({name})— loads the fullSKILL.mdbody (frontmatter stripped) on demand, once the model decides a skill’s description matches the task at hand.read_skill_file({skill_name, path})— fetches a bundled reference file a skill body links to (e.g.engineering’sPHP.md). Read-only: a skill can bundle a script or template, but the agent can only read it, never execute it — if a skill needs a command run, itsSKILL.mdshould instruct the agent to run that command directly via its normal tools, not rely on a bundled script being executable.
list_docs/read_doc) are the example: always-on tools, not something the agent has to guess it should reach for.