A skill is an instruction bundle (SKILL.md with name/description/category
frontmatter and a body) that the agent loads on demand to prime itself for a task.
This note explains where skills are discovered and how a bare name resolves —
useful when a skill is unexpectedly "not found".
The catalog is assembled in backend/cli/src/skill/skill.ts from several sources,
keyed by skill name:
- Project
.claude/skills/— skills committed to the repo being worked in, plus~/.claude/skills/(opt out withOPENSCIENCE_DISABLE_CLAUDE_CODE_SKILLS). - The Atlas skill catalog — released builds fetch the index from
/api/cli/skills(name + description only; content is fetched lazily on first use) and cache it. This is the primary source of the bundled library in a shipped binary, which carries no skills of its own. - Dev / bundled tree — when running from source, the repo's
skills/directory is loaded directly. - System skills — a small set the product invokes directly (e.g.
initialize-atlas-graph, which the canvas and research agent run) is embedded in the binary and materialized locally when the catalog omits it, so it resolves in every install. - Learned skills — distilled from prior runs (RSI), synced from the cloud and cached under the data directory.
- User skills — authored locally via
openscience skill new, private by default.
All of steps 2–4 respect the OPENSCIENCE_DISABLE_BUNDLED_SKILLS opt-out.
Skill.get(name) looks up the assembled name→skill map. Earlier sources win on a
name collision, so a local or system skill shadows a catalog entry of the same
name. If a name isn't present, the skill tool returns a "not found" error with the
closest fuzzy matches.
openscience skill new leakage-checks --description "Checklists for spotting data leakage"
openscience skill validate leakage-checks
openscience skill list --all # everything discovered on this installPin extra skill folders per project with skills.paths in openscience.json.