Two artifacts, each with the same project/user scope split as CLAUDE.md:
| Artifact | Project scope | User scope |
|---|---|---|
| Slash commands | .claude/commands/ — shared via git |
~/.claude/commands/ — personal |
| Skills | .claude/skills/ — shared |
~/.claude/skills/ — personal |
SKILL.md frontmatter fields worth knowing cold:
| Field | Effect |
|---|---|
context: fork |
Runs the skill in an isolated sub-agent context so its output doesn't pollute the main conversation |
allowed-tools |
Restricts tool access during execution — e.g. file writes only, preventing destructive actions |
argument-hint |
Prompts the developer for required parameters when invoked bare |
context: fork is the highest-value field in this task statement. Reach for it whenever a skill produces verbose output or exploratory context — a codebase-analysis skill that emits thousands of tokens of intermediate exploration is the textbook case. The trap to recognize: compacting more often, or shortening the skill's own instructions, both treat the symptom (context getting crowded) without addressing the actual cause (a verbose skill running in the main conversation instead of an isolated one).
Skills vs. CLAUDE.md is a placement decision, not a preference: if a piece of guidance applies to every request, it belongs in CLAUDE.md (always loaded); if it applies to a specific task, it's a skill (invoked on demand). Putting a command definition inside CLAUDE.md itself, or in some imagined .claude/config.json commands array, isn't how either mechanism actually works.
A one-glance version of the same decision:
| Use CLAUDE.md | Use a Skill | |
|---|---|---|
| Applies to | Every request | Specific tasks only |
| Loading | Always loaded | Loaded on demand |
| Typical content | Standards, conventions | Procedures, workflows |
| Sharing | Shared via git (project scope) | Shared or personal (project or user scope) |
Cross-module link:
context: forkisolating a skill's verbose exploration from the main conversation is the same underlying idea as Module 1's subagent context isolation — a fresh, unpolluted context reasons more reliably than one carrying a pile of exploration it doesn't need to carry forward.
A caveat worth carrying into the exam room, stated plainly: slash commands and skills have largely converged in current Claude Code, and new work is generally expected to land in .claude/skills/. The exam nonetheless tests .claude/commands/ specifically for a team-shared command scenario — know the current-product direction so you don't build the wrong thing at work, but answer the exam item the way it's actually asked.