DEV Community

brian austin
brian austin

Posted on

Claude Code custom commands: build your own /deploy, /review, and /standup

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
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

Now in Claude Code:

/review
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Usage:

/ticket AUTH-247
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Usage:

/debug users seeing 500 on checkout
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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"}
        ]
      }
    ]
  }
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)