Claude Code custom commands: build your own /deploy, /review, and /standup
Claude Code's built-in slash commands are useful. But the real power comes from building your own.
Custom commands let you encode your team's workflow into repeatable, one-line prompts. Here's how to build them.
Where custom commands live
Custom commands are markdown files inside .claude/commands/ in your project root:
my-project/
.claude/
commands/
deploy.md
review.md
standup.md
src/
package.json
Each file becomes a slash command. deploy.md → /deploy. review.md → /review.
Your first custom command: /review
Create .claude/commands/review.md:
Review the staged changes in this PR. For each file:
1. Check for logic errors and edge cases
2. Flag any missing error handling
3. Note security concerns (SQL injection, XSS, auth bypass)
4. Check test coverage for the changed code
5. Suggest a one-line PR description
Be concise. No praise. Only actionable feedback.
Now in Claude Code:
/review
Claude reads your staged diff and gives you a structured code review.
A /deploy command
Create .claude/commands/deploy.md:
Prepare this branch for deployment:
1. Run `npm test` — fix any failures before continuing
2. Run `npm run lint` — fix any errors
3. Check git log for uncommitted changes
4. Write a conventional commit message summarizing all changes
5. Create a git tag with today's date: v$(date +%Y-%m-%d)
6. Output the deployment checklist as markdown
Do not push. Just prepare and report.
Run /deploy before every release. Claude handles the pre-flight checklist.
A /standup command
Create .claude/commands/standup.md:
Generate my standup update:
1. Run `git log --since='24 hours ago' --author='$USER' --oneline`
2. Summarize what was completed in plain English (2-3 bullets)
3. Check open TODO comments in changed files
4. List any failing tests or lint warnings as blockers
Format: Yesterday / Today / Blockers
Keep it under 100 words.
Now /standup writes your daily update automatically.
Passing arguments with $ARGUMENTS
Custom commands can accept arguments using the $ARGUMENTS placeholder:
Create .claude/commands/ticket.md:
Create a new feature branch and scaffold for ticket: $ARGUMENTS
1. Create branch: feature/$ARGUMENTS
2. Create file: src/features/$ARGUMENTS/index.ts with basic exports
3. Create test file: src/features/$ARGUMENTS/index.test.ts
4. Add TODO comment with ticket reference
5. Stage all new files
Usage:
/ticket AUTH-247
Claude creates the branch feature/AUTH-247, scaffolds the files, and stages them.
A /debug command for production issues
Create .claude/commands/debug.md:
Debug this production issue: $ARGUMENTS
1. Search codebase for files related to: $ARGUMENTS
2. Check recent git changes to those files (last 7 days)
3. Look for error handling gaps
4. Check if there are existing tests covering this path
5. Propose 3 likely root causes ranked by probability
6. Suggest the minimal fix for the most likely cause
Usage:
/debug users seeing 500 on checkout
Sharing commands with your team
Commit .claude/commands/ to git. Everyone gets the same commands:
git add .claude/commands/
git commit -m "add team Claude Code commands"
New teammates onboard in seconds. /review, /deploy, /standup are part of the project from day one.
Global commands (personal, not shared)
For commands that are personal (not team-wide), use ~/.claude/commands/ instead:
~/.claude/
commands/
explain.md # explain code to a junior dev
refactor.md # my personal refactoring style
commit.md # my commit message format
These are available in every project but never committed to git.
Pro tip: chain commands with hooks
Custom commands + hooks = fully automated workflows.
In your .claude/settings.json:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{"type": "command", "command": "npm run lint --fix"}
]
}
]
}
}
Now every time Claude writes a file, lint runs automatically. Combine with /deploy and you have a zero-touch release pipeline.
Rate limits break automation
The one thing that breaks custom command workflows: rate limits.
If Claude hits a rate limit mid-command, your /deploy checklist stops halfway. Your /review cuts off before security checks.
Fix it with ANTHROPIC_BASE_URL:
export ANTHROPIC_BASE_URL=https://simplylouie.com
SimplyLouie is a ✌️2/month Claude proxy that removes rate limits. Your custom commands run to completion every time.
# In your .bashrc or .zshrc
export ANTHROPIC_BASE_URL=https://simplylouie.com
export ANTHROPIC_API_KEY=your-simply-louie-key
Now /deploy never gets interrupted. /review never cuts off. ✌️2/month.
Summary
| Command | What it does |
|---|---|
/review |
Structured code review of staged changes |
/deploy |
Pre-flight checklist before release |
/standup |
Auto-generate daily standup from git log |
/ticket AUTH-247 |
Scaffold new feature branch |
/debug users seeing 500 |
Root cause analysis with fix suggestions |
Custom commands are the most underused Claude Code feature. Build three this week and you won't go back.
Using ANTHROPIC_BASE_URL to avoid rate limit interruptions? SimplyLouie is ✌️2/month — 7-day free trial, no commitment.
Top comments (0)