Learn · Configuration & workflows · CCAR-F task 3.2
Custom commands and skills
Turn a repeated prompt into /review for the whole team, and package occasional procedures as skills that load only when used.
Key ideas
- Project commands live in .claude/commands/ and are shared through Git; personal ones in ~/.claude/commands/.
- Skills live in .claude/skills/<name>/SKILL.md and can bundle scripts, templates and reference docs.
- Only a skill's name and description are in context until it is used (progressive disclosure).
- Claude can auto-invoke a skill whose description matches; disable-model-invocation: true makes it user-only.
- Frontmatter: description, argument-hint, allowed-tools, model, context: fork (isolated subagent).
- Arguments arrive as $ARGUMENTS or $0, $1… (0-based).
- CLAUDE.md for every-session rules; a skill for a procedure used sometimes.
Worked example: A shared /review command
Committed as .claude/commands/review.md (or as a skill), it gives the whole team the same /review, with pre-approved read-only tools for the run.
Exam traps
- Putting a shared command in ~/.claude/commands/: teammates won't get it.
- Putting a long, occasional procedure in CLAUDE.md, where it costs context every session.
- Thinking $1 is the first argument: positional arguments are 0-based, so $0 is first.
- Forgetting that a skill's description drives whether Claude invokes it automatically.
Official docs
Practise CCAR-F questions · Next lesson: Plan mode vs direct execution