--- name: commit-changes description: Create thoughtful git commits with conventional commits format. Invoke when user says "commit", "commit these changes", "create a commit", "save my changes", or after completing a task. tools: - mcp__serena__* - Bash:git * - Read - Grep - AskUserQuestion - TodoWrite --- # Commit Changes Skill ## Purpose Create well-structured git commits following conventional commits format with project-aware module emojis. This skill analyzes changes, crafts meaningful commit messages, and ensures commits are atomic and purposeful. ## Natural Language Triggers This skill activates when the user says things like: - "Commit these changes" - "Create a commit" - "Commit this" - "Save my changes" - "Make a commit for this work" - After completing a scratchpad task: "Done with this task, commit it" ## Workflow Execution ### Phase 1: Gather Context (Parallel) Execute these in parallel for efficiency: 1. **Project Context:** - Read project's `CLAUDE.md` for module emojis and conventions - Identify current development phase/priorities 2. **Git Context:** - `git status` - See staged/unstaged changes - `git diff --cached` - Review staged changes (if any) - `git diff` - Review unstaged changes - `git branch --show-current` - Current branch - `git log --oneline -5` - Recent commits for style reference ### Phase 2: Analyze Changes 1. **Categorize Changes:** - Which files are modified/added/deleted? - Which module(s) are affected? - What type of change is this? (feat, fix, refactor, docs, etc.) 2. **Staging Decision:** - If nothing staged but changes exist: Determine what should be staged together - Group logically related changes - Don't mix unrelated changes in one commit - If multiple logical changes exist, use `AskUserQuestion` to ask which to commit first 3. **Validate Commit-Worthiness:** - Ensure changes represent one logical unit of work - Check for debugging code, console.logs, temp files - Verify no secrets or sensitive data included ### Phase 3: Craft Commit Message **Format:** ``` {module emoji}{change type emoji} {type}({scope}): {description} {optional body explaining what and why} ``` **Components:** 1. **Module Emoji:** From project's CLAUDE.md - Check `## Project Modules` section for project-specific emojis - Default examples: 🌐 api, 🎨 frontend, đŸ—„ī¸ database, 🔐 auth, 📚 docs - Use the most specific module that applies 2. **Change Type Emoji:** - ✨ feat: New feature - 🐛 fix: Bug fix - 📝 docs: Documentation - 💄 style: Formatting/style - â™ģī¸ refactor: Code refactoring - âšĄī¸ perf: Performance improvements - ✅ test: Tests - 🔧 chore: Tooling, configuration - 🚀 ci: CI/CD improvements - đŸ”Ĩ fix: Remove code or files - 🎨 style: Improve structure/format - đŸš‘ī¸ fix: Critical hotfix - 🎉 chore: Begin a project - đŸ—ī¸ refactor: Architectural changes - đŸˇī¸ feat: Add or update types - âš°ī¸ refactor: Remove dead code 3. **Type:** Conventional commit type (feat, fix, docs, style, refactor, perf, test, chore, ci) 4. **Scope:** Module name from CLAUDE.md (e.g., api, frontend, skills) 5. **Description:** - Imperative mood ("Add feature" not "Added feature") - No period at end - Under 50 characters - Focus on capability/value added 6. **Body (optional):** - Explain what and why, not how - Context for the change - Reference issue numbers if applicable ### Phase 4: Confirm with User Use `AskUserQuestion` to confirm the commit: ``` AskUserQuestion: question: "Ready to commit with this message?" header: "Commit" options: - label: "Yes, commit" description: "Create the commit with this message" - label: "Edit message" description: "I want to modify the commit message" - label: "Stage more files" description: "I need to include additional files" - label: "Cancel" description: "Don't commit right now" ``` Display the proposed commit message clearly before asking. ### Phase 5: Execute Commit 1. **Stage files** (if not already staged): ```bash git add ``` 2. **Create commit** using HEREDOC for proper formatting: ```bash git commit -m "$(cat <<'EOF' {module emoji}{type emoji} {type}({scope}): {description} {body if present} EOF )" ``` **IMPORTANT:** Do NOT add Claude attribution (e.g., "Co-Authored-By: Claude") to commit messages. 3. **Confirm success:** ```bash git log -1 --oneline ``` ### Phase 6: Report Result Display: ``` ✓ Committed: {short hash} {commit message first line} 📊 Stats: {files changed}, {insertions}+, {deletions}- đŸŒŋ Branch: {branch-name} ``` ## Smart Staging Logic When unstaged changes exist across multiple areas: 1. **Single logical change:** Stage all related files automatically 2. **Multiple logical changes:** Present options via `AskUserQuestion`: ``` question: "Multiple changes detected. Which to commit first?" options: - "Module A changes (3 files)" - "Module B changes (2 files)" - "All changes together" - "Let me specify" ``` 3. **Mixed concerns:** Warn and suggest splitting: - "These changes span unrelated modules. Recommend separate commits." ## Quality Checks Before committing, verify: - [ ] No `console.log` or debug statements (unless intentional) - [ ] No TODO comments that should be addressed first - [ ] No secrets, API keys, or sensitive data - [ ] Changes are complete (no half-finished work) - [ ] Commit message accurately describes changes ## Error Handling ### Nothing to Commit If no changes exist: ``` â„šī¸ No changes to commit. Working tree is clean. ``` ### Merge Conflicts If conflicts exist: ``` âš ī¸ Cannot commit: merge conflicts present. Resolve conflicts first, then commit. ``` ### Detached HEAD If in detached HEAD state: ``` âš ī¸ Warning: You're in detached HEAD state. Consider creating a branch before committing. ``` ## Integration with Other Skills **Called by:** - `do-work` skill - After completing each scratchpad task - User directly via natural language **Works with:** - Project CLAUDE.md - Module emojis and conventions - Scratchpad - Context for what was being worked on ## Project-Specific Adaptations The skill reads the project's CLAUDE.md to determine: - Module names and their emojis - Commit message conventions (if custom) - Scope naming patterns **Example from a project CLAUDE.md:** ```markdown ## Project Modules - **api** 🌐: REST API endpoints - **frontend** 🎨: React UI components - **database** đŸ—„ī¸: Database layer ``` This skill would then use 🌐 for api changes, 🎨 for frontend changes, etc. ## Best Practices ### ✅ DO: - Create atomic commits (one logical change) - Write meaningful commit messages - Reference issues when applicable - Stage related files together - Use project-specific module emojis ### ❌ DON'T: - Commit unrelated changes together - Use vague messages like "updates" or "fixes" - Include debugging code - Commit secrets or credentials - Skip the body when context is needed - Add Claude attribution to commit messages --- **Version:** 1.0.0 **Last Updated:** 2025-12-29 **Maintained By:** Escapement **Converted From:** commands/commit.md