git-commit · eduardo-sl — Claude Code skill: Conventional Commits for Go projects
A skill that makes your agent write commit messages in Conventional Commits style: typed, scoped, imperative. Useful when the repo history has turned into noise.
npx skills add eduardo-sl/go-agent-skills --skill git-commit -a claude-codeWhat git-commit does
The skill hands your agent a fixed shape for commit messages in Go codebases. A subject looks like <type>(<scope>): <description>, where the type is one of feat, fix, refactor, perf, test, docs, chore, ci or style, and the scope names a package or module. The body explains why the change was needed; the footer carries issue references and breaking-change notes.
What's inside: a type table, subject-line limits, worked examples for small fixes and for breaking changes, plus a section on atomic commits. Each commit should build and pass tests on its own. Before committing, the skill runs goimports -w ., golangci-lint run, go build ./..., go test -race ./... and go mod tidy. For rebases it prepares fixups without an editor, then hands the last step back to you, since git rebase -i opens $EDITOR and an agent can't drive that.
You need git installed; the verification steps assume a Go toolchain with the linter available. A project-level rule that explicitly overrides git-commit wins over this skill, so it's worth checking your repo config before relying on it.
What it helps with
- keep commit messages in one consistent format
- split a large change into atomic commits
- document a breaking change with
BREAKING CHANGE - prepare fixup commits ahead of a rebase
- run build and tests before committing
Example prompts for the agent
- Commit the changes in
internal/service/user.gousing Conventional Commits - Split this change into atomic commits and write the messages
- Prepare fixup commits against
mainbefore I open a PR
How to install git-commit
1Skills CLI (Vercel)
npx skills add eduardo-sl/go-agent-skills --skill git-commit -a claude-code2Manually: put the files in place
~/.claude/skills/git-commit/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/git-commit/
1Skills CLI (Vercel)
npx skills add eduardo-sl/go-agent-skills --skill git-commit -a codex2Manually: put the files in place
.agents/skills/git-commit/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add eduardo-sl/go-agent-skills --skill git-commit -a cursor2Manually: put the files in place
.cursor/skills/git-commit/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install eduardo-sl/go-agent-skills git-commit2Manually: put the files in place
.github/skills/git-commit/SKILL.md1Skills CLI (Vercel)
npx skills add eduardo-sl/go-agent-skills --skill git-commit -a gemini-cli2Platform CLI
gemini skills install https://github.com/eduardo-sl/go-agent-skills --path 'skills/(workflow)/git-commit'Manually: put the files in place
.devin/skills/git-commit/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add eduardo-sl/go-agent-skills --skill git-commit -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about git-commit
How do I install git-commit in Claude Code?
Run npx skills add eduardo-sl/go-agent-skills --skill git-commit -a claude-code, then check that ~/.claude/skills/git-commit/SKILL.md is in place.
What does the git-commit skill do?
It gives the agent rules for Conventional Commits: type and scope, an imperative subject, a body that explains the reason, and a footer with issue links.
How is git-commit different from a code review skill?
This one covers commit messages and PR preparation only. Reviewing code and generating changelogs sit outside it.
Source text
SKILL.md · MIT
--- name: git-commit description: > Structured git commit messages following Conventional Commits format for Go projects. Generates well-scoped, atomic commits with clear descriptions. Use when committing changes, writing commit messages, preparing PRs, or reviewing commit history quality. Trigger examples: "commit these changes", "create commit", "commit message", "prepare PR", "squash commits". Not for: code review (go-code-review), changelog generation. user-invocable: true license: MIT compatibility: Designed for Claude Code or similar AI coding agents. Requires git. allowed-tools: Read Glob Grep Bash(git:*) metadata: author: eduardo-sl version: "1.2.2" --- # Git Commit Standards Commits tell the story of your codebase. A good commit history is worth more than any amount of documentation — because it's always up to date. > Community default. A project skill or agent-config rule that explicitly > supersedes `git-commit` takes precedence over this one. ## 1. Conventional Commits Format ```text <type>(<scope>): <description> [optional body] [optional footer(s)] ``` ### Types: | Type | When | |---|---| | `feat` | New feature (correlates with MINOR in semver) | | `fix` | Bug fix (correlates with PATCH in semver) | | `refactor` | Code change that neither fixes a bug nor adds a feature | | `perf` | Performance improvement | | `test` | Adding or correcting tests | | `docs` | Documentation changes only | | `chore` | Build process, tooling, dependencies | | `ci` | CI/CD configuration changes | | `style` | Formatting, whitespace (not CSS — code formatting) | ### Scope: Use the package name or module area: ```text feat(auth): add JWT refresh token rotation fix(store/postgres): handle connection pool exhaustion refactor(service): extract validation into dedicated package test(handler): add table-driven tests for user endpoints chore(deps): bump go.uber.org/zap to v1.27.0 ``` ### Breaking changes: ```text feat(api)!: change pagination from offset to cursor-based BREAKING CHANGE: The `offset` and `limit` query parameters are replaced by `cursor` and `page_size`. All existing clients must migrate. ``` ## 2. Commit Message Rules ### Subject line: - Imperative mood: "add feature", NOT "added feature" or "adds feature" - Lowercase after type prefix - No period at the end - Max 72 characters - Must describe WHAT changed, not HOW ### Body (when needed): - Blank line between subject and body - Explain WHY the change was necessary - Explain WHAT is different at a high level - Wrap at 72 characters ### Footer: - Reference issues: `Fixes #123`, `Closes #456`, `Refs #789` - Co-authors: `Co-authored-by: Name <email>` - Breaking changes: `BREAKING CHANGE: description` ## 3. Examples ### Simple change: ```text fix(handler): return 404 instead of 500 for missing user ``` ### With body: ```text refactor(service): replace manual SQL with sqlx named queries The raw SQL string concatenation for dynamic WHERE clauses was error-prone and difficult to maintain. sqlx named queries provide the same flexibility with automatic parameter binding. No behavior change — all existing tests pass. ``` ### Breaking change: ```text feat(config)!: migrate from YAML to environment variables BREAKING CHANGE: Configuration is now loaded from environment variables instead of config.yaml. See README.md for the full list of supported variables. Closes #234 ``` ### Dependency update: ```text chore(deps): upgrade pgx to v5.5.0 Picks up connection pool improvements and fixes for COPY protocol handling. See release notes: https://github.com/jackc/pgx/releases/tag/v5.5.0 ``` ## 4. Atomic Commits Each commit should be ONE logical change that: - Compiles on its own (`go build ./...` passes) - Tests pass (`go test ./...` passes) - Can be reverted independently without breaking other changes ### Split large changes: ```text # ❌ Bad — one commit doing everything feat(user): add user management with CRUD, validation, auth, and tests # ✅ Good — atomic, reviewable commits feat(domain): add User entity and validation rules feat(store): implement PostgreSQL user repository feat(service): add user service with create and get operations feat(handler): add REST endpoints for user management test(service): add table-driven tests for user creation docs(api): document user endpoints in OpenAPI spec ``` ## 5. Pre-Commit Verification Before committing, run: ```bash # Format and lint goimports -w . golangci-lint run # Build go build ./... # Test go test -race ./... # Tidy modules go mod tidy ``` If any step fails, fix before committing. Never commit broken code with "will fix later" — you won't. ## 6. Commit Workflow ```bash # Stage specific files (not git add .) git add internal/service/user.go git add internal/service/user_test.go # Review staged changes git diff --staged # Commit with message git commit -m "feat(service): add user creation with email validation" # Or use editor for longer messages git commit # opens $EDITOR ``` ### Interactive rebase before PR: Interactive rebase opens `$EDITOR`, so an agent cannot drive it. Prepare fixups non-interactively, then hand the final step to the developer: ```bash # Mark a commit as a fixup of an earlier one (no editor) git commit --fixup <sha> # Collapse them automatically (no editor with --autosquash + GIT_SEQUENCE_EDITOR) GIT_SEQUENCE_EDITOR=: git rebase -i --autosquash main ``` For reordering or rewording, tell the developer to run `git rebase -i main` themselves rather than attempting it. ## 7. What NOT to Commit - Generated files (`*.pb.go` unless required, `mocks/`) - IDE configuration (`.idea/`, `.vscode/` — use global gitignore) - OS files (`.DS_Store`, `Thumbs.db`) - Binaries and build artifacts - `.env` files with secrets - `vendor/` (unless explicitly required by project policy)
© eduardo-sl · MIT · eduardo-sl/go-agent-skills
Similar skills
All skills for Git and GitHub →git-commit by other authors comes first.