Automatically generates, formats, organizes, and improves git commit messages by analyzing your staged changes using AI. Use this skill when you want to create, write, review, or refine commit messages - whether you need to save time, maintain consistent formatting, or better describe your code changes.
/plugin marketplace add appleboy/CodeGPT/plugin install appleboy-commit-message@appleboy/CodeGPTThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Run the install script to download and set up CodeGPT:
bash < <(curl -sSL https://raw.githubusercontent.com/appleboy/CodeGPT/main/install.sh)
Configure your AI provider in ~/.config/codegpt/.codegpt.yaml:
openai:
provider: openai # or: azure, anthropic, gemini, ollama, groq, openrouter
api_key: your_api_key_here
model: gpt-4o
Stage your changes:
git add <files>
Generate and commit with AI-generated message:
codegpt commit --no_confirm
Note:
--lang to specify a different language.git diff to review your changes. CodeGPT automatically reads the staged changes and analyzes them to generate an appropriate commit message.Set language: Use --lang to specify output language (default: en)
codegpt commit --lang zh-tw --no_confirm # For Traditional Chinese
codegpt commit --lang zh-cn --no_confirm # For Simplified Chinese
To change the default language permanently:
codegpt config set output.lang en # or zh-tw, zh-cn
Use specific model: Override the default model
codegpt commit --model gpt-4o --no_confirm
Exclude files: Ignore certain files from the diff analysis
codegpt commit --exclude_list "*.lock,*.json" --no_confirm
Custom templates: Format messages according to your team's style, including Jira issue tracking
# Basic custom format
codegpt commit --template_string "[{{.summarize_prefix}}] {{.summarize_title}}" --no_confirm
# With Jira issue number using template variables
codegpt commit --template_vars "JIRA_NUM=GAIA-2704" \
--template_string "{{.summarize_prefix}}{{if .JIRA_NUM}}({{.JIRA_NUM}}){{end}}: {{.summarize_title}}\n\n{{.summarize_message}}" \
--no_confirm
Available built-in template variables:
{{.summarize_prefix}} - Conventional commit type (feat, fix, docs, etc.){{.summarize_title}} - The commit title{{.summarize_message}} - The full commit message bodyYou can define custom variables with --template_vars "KEY=VALUE" and use them as {{.KEY}}
Amend commit: Update the previous commit message
codegpt commit --amend --no_confirm
Input:
# After making changes to add user authentication
git add src/auth.go src/middleware.go
codegpt commit --no_confirm
Output:
feat: add user authentication middleware
Implement JWT-based authentication system with login and token validation
middleware for protecting API endpoints.
Input:
# After fixing a null pointer error
git add src/handlers/user.go
codegpt commit --no_confirm
Output:
fix: resolve null pointer exception in user handler
Add nil checks before accessing user object properties to prevent crashes
when processing requests with missing user data.
[Preview shown, waiting for confirmation...]
Input:
git add docs/README.md
codegpt commit --lang zh-tw --no_confirm
Output:
docs: 更新專案說明文件
新增安裝步驟說明以及使用範例,讓新使用者能夠快速上手。
Input:
# Stage your changes
git add Dockerfile docker-compose.yml
# Generate commit with Jira issue number using template variables
codegpt commit --template_vars "JIRA_NUM=GAIA-2704" \
--template_string "{{.summarize_prefix}}{{if .JIRA_NUM}}({{.JIRA_NUM}}){{end}}: {{.summarize_title}}
{{.summarize_message}}" \
--no_confirm
Output:
feat(GAIA-2704): update trivy scan for cicd
- Add appuser (uid=1000) to run containers as non-root user
- Fix trivy scan DS002: Image user should not be 'root'
- Create /.app directory with proper ownership for externalimage
Tip: Save the template in config file to avoid typing it every time:
# Set the template once
codegpt config set git.template_string "{{.summarize_prefix}}{{if .JIRA_NUM}}({{.JIRA_NUM}}){{end}}: {{.summarize_title}}
{{.summarize_message}}"
# Then just provide the Jira number when committing
codegpt commit --template_vars "JIRA_NUM=GAIA-2704" --no_confirm
Input:
git add .
codegpt commit --exclude_list "package-lock.json,yarn.lock,go.sum" --no_confirm
Output:
refactor: reorganize project structure
Move utility functions into separate packages and update import paths
throughout the codebase for better modularity.
(Lock files excluded from analysis)
Issue: Running codegpt commit without staging any changes.
Solution: Stage your changes first:
git add <files>
codegpt commit
Issue: Large changesets may cause API timeouts.
Solution: Increase timeout or commit changes in smaller batches:
codegpt commit --timeout 60s --no_confirm
Issue: Lock files or generated code affecting commit message quality.
Solution: Exclude these files from analysis:
codegpt commit --exclude_list "package-lock.json,yarn.lock,*.min.js,dist/*" --no_confirm
Issue: Error message about missing API key.
Solution: Set up your API key in the config file:
codegpt config set openai.api_key "your-api-key-here"
Issue: Team requires specific commit message format with Jira issue tracking numbers.
Solution: Use --template_vars with custom templates.
Basic usage:
codegpt commit --template_vars "JIRA_NUM=GAIA-2704" \
--template_string "{{.summarize_prefix}}{{if .JIRA_NUM}}({{.JIRA_NUM}}){{end}}: {{.summarize_title}}
{{.summarize_message}}" \
--no_confirm
# Result: feat(GAIA-2704): update trivy scan for cicd
Save template in config for convenience:
# Set the template once
codegpt config set git.template_string "{{.summarize_prefix}}{{if .JIRA_NUM}}({{.JIRA_NUM}}){{end}}: {{.summarize_title}}
{{.summarize_message}}"
# Then just provide the Jira number
codegpt commit --template_vars "JIRA_NUM=GAIA-2704" --no_confirm
Or edit ~/.config/codegpt/.codegpt.yaml:
git:
template_string: "{{.summarize_prefix}}{{if .JIRA_NUM}}({{.JIRA_NUM}}){{end}}: {{.summarize_title}}\n\n{{.summarize_message}}"
Create a shell function for convenience:
Add to your ~/.bashrc or ~/.zshrc:
function commit() {
if [ -z "$1" ]; then
echo "Usage: commit <JIRA-NUM>"
return 1
fi
codegpt commit --template_vars "JIRA_NUM=$1" --no_confirm
}
# Usage: commit GAIA-2704
Auto-extract from git branch name (advanced):
If your branch follows naming convention like feature/GAIA-2704-add-security-scan:
# Add to ~/.bashrc or ~/.zshrc
function commit-auto() {
local branch=$(git rev-parse --abbrev-ref HEAD)
local jira_num=$(echo "$branch" | grep -oE '[A-Z]+-[0-9]+' | head -1)
if [ -z "$jira_num" ]; then
echo "No Jira issue found in branch: $branch"
codegpt commit --no_confirm
else
echo "Detected Jira issue: $jira_num"
codegpt commit --template_vars "JIRA_NUM=$jira_num" --no_confirm
fi
}
# Usage: commit-auto (auto-detects GAIA-2704 from branch name)
Issue: API calls fail due to corporate firewall.
Solution: Configure proxy settings:
codegpt commit --proxy http://proxy.company.com:8080
# Or for SOCKS proxy
codegpt commit --socks socks5://127.0.0.1:1080
This skill should be used when the user asks to "create a hookify rule", "write a hook rule", "configure hookify", "add a hookify rule", or needs guidance on hookify rule syntax and patterns.
Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.