Feature Comparison
| Surface | Best For | Where It Lives |
|---|---|---|
| Commands | Built-in session control such as /help, /compact, /model, /mcp, /hooks, and /code-review | Claude Code CLI session |
| Slash commands | Fast command entry from the prompt or SDK, including built-in commands and custom commands | Start a message with / |
| Custom commands | Reusable project or personal prompt files for workflows like review, PRD, tests, changelog, or commits | .claude/commands/*.md or ~/.claude/commands/*.md |
| Hooks | Automatic lifecycle actions before/after tools, on notifications, at stop, or around session events | .claude/settings.json or ~/.claude/settings.json |
| Skills | Reusable workflows with lazy-loaded instructions and optional supporting files | .claude/skills/<name>/SKILL.md or ~/.claude/skills/<name>/SKILL.md |
| Plugins | Shareable bundles of commands, skills, hooks, agents, and MCP servers | Installed Claude Code plugin marketplace or plugin source |
Recommended Cluster Structure
Build this topic as a connected cluster instead of isolated pages. The commands hub should define the vocabulary, then link to generators and template pages for the workflows developers actually copy.
- Use /claude-code-commands/ as the topic homepage for claude code commands.
- Use /claude-code-hooks-generator/ for claude code hooks settings JSON.
- Use /claude-code-custom-commands/ for claude code custom commands markdown.
- Use /claude-code-slash-commands/ for reusable claude code slash commands templates.
Starter Project Command Block
Put stable project commands in CLAUDE.md so Claude Code knows what to run before and after generated changes.
## Project Commands - Install: npm install - Dev: npm run dev - Lint: npm run lint - Test: npm test - Typecheck: npm run typecheck - Build: npm run build
When To Use Each Surface
Pick the smallest surface that makes the workflow repeatable. A one-off prompt does not need a plugin, and a deterministic safety check should not rely on Claude remembering to run it.
- Use a slash command when a human chooses the moment to run the workflow.
- Use a custom command or skill when the prompt is reused across projects or team members.
- Use a hook when the action must run at a specific lifecycle event.
- Use a plugin when multiple pieces need to be installed and updated together.
Official Claude Code References
Claude Code documentation now treats built-in commands, bundled skills, custom commands, hooks, and plugins as related extension surfaces. Check the official references before publishing config examples.
Common Errors
Most command workflow problems come from mixing up timing, storage location, or permissions.
- Putting an automatic check in a custom command when it should be a hook.
- Creating legacy .claude/commands files when a skill would be easier to share and maintain.
- Forgetting that a slash command must start the message to be recognized.
- Letting hook commands change files or call networks without clear team review.
FAQ
Are Claude Code custom commands and skills the same?
They now overlap. Existing .claude/commands/*.md files still work, while skills are the recommended format for richer reusable workflows.
Do hooks replace slash commands?
No. Slash commands are user-triggered. Hooks run automatically at lifecycle events and should be kept deterministic and auditable.
Where should team commands live?
Use project-scoped .claude/commands or .claude/skills for shared workflows, and document core validation commands in CLAUDE.md.