Claude Code Plugins

Community-maintained marketplace

Feedback

Generate standards-compliant commit messages following Conventional Commits with emojis. Use this when creating commits, reviewing commit messages, or ensuring consistent commit history.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name commit-message-creator
description Generate standards-compliant commit messages following Conventional Commits with emojis. Use this when creating commits, reviewing commit messages, or ensuring consistent commit history.
license MIT

Commit Message Creator

This skill guides agents in creating clear, standards-compliant commit messages that follow the Conventional Commits specification with meaningful emojis.

When to Use This Skill

Use this skill when:

  • Creating a commit message for code changes
  • Reviewing or improving existing commit messages
  • Asked to "commit", "write a commit message", or "create a commit"
  • Ensuring consistent commit history
  • Generating release notes from commits
  • Following semantic versioning practices

Prerequisites

  • Understanding of the code changes being committed
  • Knowledge of related issue numbers or tickets
  • Familiarity with the project's scope naming conventions
  • Git repository with staged changes

Instructions

1. Identify the Commit Type

Choose the appropriate type with emoji:

Type Emoji Use When
feat Adding a new feature for users
fix 🐛 Fixing a bug for users
docs 📚 Documentation only changes
style 💎 Code style/formatting (no functional change)
refactor ♻️ Code change that neither fixes a bug nor adds a feature
perf 🚀 Performance improvements
test Adding or updating tests
build 🔧 Build system or dependency changes
ci 👷 CI/CD configuration changes
chore 🔨 Other changes (tooling, etc.)
revert Reverting a previous commit

2. Determine the Scope (Optional but Recommended)

Add contextual scope in parentheses:

For this project (nomos-provider-terraform-remote-state):

  • provider - gRPC provider service implementation
  • backend - Backend implementations (local, Azure, etc.)
  • state - State parsing and handling logic
  • config - Configuration management
  • deps - Dependency updates
  • spec - Specification/documentation in specs/ folder
  • api - gRPC API contract changes

General common scopes:

  • auth - Authentication
  • api - API endpoints
  • ui - User interface
  • db - Database
  • core - Core functionality

3. Write the Description

Follow these rules:

  1. Use imperative, present tense

    • ✅ "add feature" NOT "added feature" or "adds feature"
    • Think: "This commit will..."
  2. Don't capitalize first letter

    • ✅ "add two-factor authentication"
    • ❌ "Add two-factor authentication"
  3. No period at the end

    • ✅ "fix race condition in user updates"
    • ❌ "fix race condition in user updates."
  4. Maximum 72 characters

    • Keep it concise and scannable
  5. Be specific and descriptive

    • ✅ "prevent race condition in user updates"
    • ❌ "fix bug"

4. Add Body (When Needed)

Include a body when:

  • The change requires explanation beyond the subject
  • You need to explain the "why" not the "what"
  • Multiple related changes need listing
  • Context is important for future maintainers

Body formatting:

  • Separate from subject with a blank line
  • Wrap at 72 characters
  • Use bullet points for multiple items
  • Explain what and why, not how

5. Add Footer (When Appropriate)

Include footer for:

Issue references:

Fixes #123
Closes #456, #789
Refs #999

Breaking changes:

BREAKING CHANGE: The /auth/login endpoint now requires email
instead of username. Update all API clients accordingly.

Co-authors:

Co-authored-by: Name <email@example.com>

6. Construct the Complete Message

Format:

<emoji> <type>[optional scope]: <description>

[optional body]

[optional footer]

Examples

Simple Feature

✨ feat(backend): add Azure Blob Storage backend support

Implements Azure backend for remote state storage using
Azure Storage SDK. Supports authentication via environment
variables following Azure standard patterns.

Closes #42

Bug Fix

🐛 fix(state): prevent panic on malformed state files

Add validation for state format version before parsing.
Return proper error instead of panicking when state file
is corrupted or has unsupported version.

Fixes #156

Documentation

📚 docs: update quickstart with Azure backend example

Add step-by-step guide for configuring Azure backend
including required environment variables and permissions.

Refactoring

♻️ refactor(provider): extract port discovery to separate function

Move port printing logic into dedicated function for
better testability and separation of concerns.

Performance

🚀 perf(state): optimize output parsing with lazy evaluation

Defer parsing of nested module outputs until accessed.
Reduces memory usage by 60% for large state files.

Tests

✅ test(backend): add integration tests for local backend

Cover file reading, missing file handling, and workspace
selection. Tests use temporary directories for isolation.

Build/Dependencies

🔧 build(deps): upgrade go to 1.25

Update go.mod and CI workflows to use Go 1.25.
Required for new generics features in state parser.

CI Changes

👷 ci: add race detection to test workflow

Run all tests with -race flag to catch concurrency issues.
Increases test time but catches critical bugs.

Breaking Change

✨ feat(api): change GetOutput to return typed values

BREAKING CHANGE: GetOutput now returns Value message with
type information instead of raw strings. Clients must
handle new Value structure.

Migration: Replace response.value with response.value.string_value
for string outputs. See migration guide in docs/.

Closes #234

Multiple Issues

🐛 fix(provider): resolve gRPC error handling issues

- Return proper gRPC status codes for all error cases
- Add NotFound for missing outputs
- Use InvalidArgument for configuration errors

Fixes #123, #124, #125

Revert

⏪ revert: "feat(backend): add S3 backend support"

This reverts commit abc123def456.

S3 backend implementation caused memory leaks in
long-running processes. Needs redesign before merge.

Refs #999

Best Practices

Do's ✅

  • Use emoji prefix for visual context
  • Keep subject line under 72 characters
  • Use imperative mood ("add" not "added")
  • Reference related issues/PRs
  • Group related changes in single commit when logical
  • Write for future maintainers
  • Capitalize proper nouns (OAuth, HTTP, API, gRPC)
  • Be specific about what changed and why

Don'ts ❌

  • Don't use vague messages ("fix bug", "update code")
  • Don't commit multiple unrelated changes together
  • Don't use past tense ("fixed", "added")
  • Don't capitalize first letter of description
  • Don't add period at end of subject
  • Don't forget to reference issues
  • Don't commit directly to main branch
  • Don't include debugging code or commented code

Semantic Versioning Impact

Your commit type affects version bumps:

  • feat → Minor version (0.1.0 → 0.2.0)
  • fix → Patch version (0.1.0 → 0.1.1)
  • BREAKING CHANGE → Major version (0.1.0 → 1.0.0)

Git Workflow

# Stage your changes
git add <files>

# Commit with proper message
git commit -m "✨ feat(provider): add Azure backend support"

# For messages with body and footer, use editor
git commit
# Then write full message following format

Validation

Check your commit message:

  • Emoji and type are correct
  • Scope is appropriate (if used)
  • Description uses imperative mood
  • Description is lowercase
  • No period at end of subject
  • Subject is under 72 characters
  • Body explains "why" not "how" (if present)
  • Issue references included (if applicable)
  • Breaking changes documented (if applicable)

Enforcement

Use commitlint for automated validation:

# Install
npm install --save-dev @commitlint/{config-conventional,cli}

# Configure .commitlintrc.json
{
  "extends": ["@commitlint/config-conventional"],
  "rules": {
    "type-enum": [2, "always", [
      "feat", "fix", "docs", "style", "refactor",
      "perf", "test", "build", "ci", "chore", "revert"
    ]]
  }
}

# Add to husky pre-commit hook
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'

Troubleshooting

Issue: Commit message too long Solution: Move details to body, keep subject focused and under 72 chars

Issue: Unsure which type to use Solution: Use "feat" for user-facing changes, "refactor" for internal improvements

Issue: Multiple unrelated changes Solution: Split into separate commits - one logical change per commit

Issue: Forgot issue number Solution: Use git commit --amend to update message

Resources