Create clean, atomic commits that follow the project's conventions. One logical change per commit.
Do not include references to Claude or AI in commit messages. Do not add Co-Authored-By lines or AI attribution signatures.
Commit Format
Use the project's commit format if defined under ## Commit conventions in CLAUDE.md.
If no project format is specified, use conventional commits:
<type>(<scope>): <short description>
<optional body explaining why>
<optional footer with ticket references>
Types: feat, fix, ref, docs, test, chore
- Title 50 characters or less
- Imperative mood ("Add feature" not "Added feature")
- Focus on the "why", not the "what" -- the diff shows the what
- Reference tickets when applicable (
Refs PROJ-1234)
Security Check
Before staging any file, check for potential secrets.
File patterns to block:
.env,.env.*credentials.*,secrets.**_key.pem,*.p12
Content patterns to detect:
API_KEY=,SECRET_KEY=,PASSWORD=,TOKEN=-----BEGIN (RSA |EC |OPENSSH )?PRIVATE KEY------ AWS access keys (
AKIA...) - GitHub tokens (
ghp_...,gho_...) - Stripe keys (
sk_live_...) - Database connection strings with embedded passwords
- High-entropy strings that look like credentials
If potential secrets are found:
- Do NOT stage the file
- Explain what was detected and why it's risky
- Suggest adding the file or pattern to
.gitignore - Ask the developer how to proceed
Process
1. Review changes
- Run
git statusto see all changed files - Run
git diffto see staged and unstaged changes - Understand what changed and why
- If changes span multiple unrelated concerns, ask the developer if they should be separate commits
2. Stage files
git add <specific files>-- nevergit add .- Group files by logical change
- Run the Security Check on every file before staging
- If changes span multiple logical units, split into multiple commits
3. Draft commit message
- Follow the Commit Format section above
- Reference tickets when applicable (e.g.,
Refs PROJ-1234) - Keep the body concise -- avoid long paragraphs
4. Confirm with the developer
- Show the staged files and proposed commit message
- Wait for approval before executing
- Never commit without confirmation
5. Execute and verify
- Create the commit
- Run
git log -1to confirm the commit was created - Run
git statusto verify clean state
Examples
Feature Commit
feat(auth): add password reset flow
Implements forgot password functionality with email verification.
Users can now request a password reset link sent to their email.
Refs PROJ-1234
Bug Fix Commit
fix(api): handle null response in user endpoint
The user endpoint could return null for soft-deleted accounts,
causing dashboard crashes when accessing user properties.
Fixes PROJ-5678
Refactor Commit
ref: extract validation logic to shared module
Moves duplicate validation code into a shared validator class.
No behavior change.
Key Principles
- Atomic -- one logical change per commit
- Never commit secrets -- check for .env, credentials, API keys
- No AI references -- do not mention Claude or AI in commit messages, no Co-Authored-By
- Confirm first -- always show the developer what you're about to commit
- Message explains why -- the diff shows what changed, the message explains the reason
- Project conventions win -- if CLAUDE.md specifies a format, use it