Anything you find yourself asking Claude Code for repeatedly is a candidate for a custom command — a saved, reusable prompt instead of retyped instructions.
1A Custom Command Is a Prompt File You Can Invoke by Name
A Markdown file under .claude/commands/ becomes a slash command with the same name. Running it sends its content as the prompt, optionally substituting arguments — turning a repeated multi-line instruction into a two-word invocation that runs identically every time.
2Skills Bundle Instructions With Resources, Loaded When Relevant
A Skill is a directory with instructions and optionally scripts or reference files, only pulled into context when the task actually matches what the skill covers — avoiding the context-rot problem from Module 2 for capabilities that aren't needed in every session.
3Step-by-Step Breakdown
Typing the Same Instruction Every Session. Every Fixly session so far has ended with the same request: run the full test suite, check for lint errors, and summarize what changed. Typing that out each time is exactly the kind of repetition a custom slash command exists to remove.
A Custom Command Is a Saved Prompt. A file at .claude/commands/wrapup.md turns that repeated request into /wrapup — a slash command Claude Code runs like any built-in one. Custom commands can also take arguments, so /wrapup could accept a scope like /wrapup src/export.js.
What's the main benefit of turning a repeated request into a custom slash command like /wrapup?
- →It saves retyping the same instruction and makes it consistent every time — the exact same checklist runs whether you remember every step or not.
- →It gives Claude Code access to capabilities it wouldn't otherwise have.
Design a Custom Command for a Real Repeated Task. Fixly's team also always wants a specific checklist run before opening a pull request. Draft the custom command file for it.
Skills: The Same Idea, With More Structure. A Skill goes further than a saved prompt — it can bundle instructions with scripts and reference files Claude Code loads only when the skill is actually relevant, keeping that detail out of every session's context until it's needed. Next lesson: subagents, for delegating a focused sub-task without polluting the main session's context at all.
Level Up 🚀
Advanced cheat sheets, SEO tricks, and interview prep for this topic.
Browser Support
N/A — commands and skills are files read by the CLI.
N/A — commands and skills are files read by the CLI.
N/A — commands and skills are files read by the CLI.
N/A — commands and skills are files read by the CLI.
Accessibility (A11y)
1Name Commands for What They Do, Not How They Work
A command named /pr-ready is clearer to any teammate reading a session transcript than one named /check1 — the name itself documents intent.
/pr-ready (not /check1)SEO Implications
- 1
Target 'Claude Code custom commands' and 'Claude Code Skills' as separate searches
Users search for the simpler saved-prompt feature and the more structured Skills feature as distinct capabilities at different points in adoption.
Best Practices
Turn Any Request You've Typed Three Times Into a Command
Repetition is the clearest signal a request belongs in a reusable command file — it removes both the retyping effort and the risk of forgetting a step the third or fourth time.
Frequent Bugs
Manually retyping the same multi-step instruction (run tests, run lint, summarize) at the end of every session, with steps sometimes forgotten.
Save the instruction once as a custom command under .claude/commands/, and invoke it by name every time instead.
Real-World Examples
The Forgotten Lint Step
A developer manually asked for tests and a summary at the end of several sessions, but occasionally forgot to also ask for lint — letting a style issue slip into a diff. Turning the full checklist into /wrapup made every session's wrap-up identical and complete.
// Manual, inconsistent: sometimes skips lint
// /wrapup: always runs tests, lint, and summary