Back to skills
SKILL.md
Commit 7
ASecuritySmart commit creation with conventional commits, emoji, and GPG signing. Use when user says "commit" or requests committing changes. Handles staged file detection, suggests splits for multi-concern changes, and applies proper commit format.
- 2 stars
- 0 votes
- 0 copies
- 0 views
- Added September 27, 2026
Security analysis
100/100npx -y skills add David-Li0406/meta-skill-evloving --skill commit-7 --agent claude-codeAre you the author of Commit 7?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/david-li0406-commit-7)---
name: commit
description: Smart commit creation with conventional commits, emoji, and GPG signing. Use when user says "commit" or requests committing changes. Handles staged file detection, suggests splits for multi-concern changes, and applies proper commit format.
allowed-tools: "Bash(git *)"
version: 1.0.0
---
# Commit Skill
Creates well-formatted commits following conventional commit standards with emoji prefixes.
## When to Use
- User says "commit", "commit these changes", or uses `/commit`
- After code changes are ready to be committed
- Need help with commit message formatting
- Want automatic detection of multi-concern changes
## Core Features
- **GPG signing** with cached passphrase (if `$GPG_PASSPHRASE` set)
- **Staged vs unstaged detection** - commits only staged files when present
- **Split suggestions** - analyzes diffs for multiple logical changes
- **Conventional commits** - `<emoji> <type>: <description>` format
- **Pre-commit hook integration** - respects Husky/other hooks
- **Always --signoff** - DCO compliance
---
## Process
### 1. Environment Check
```bash
# Check GPG passphrase availability
if [ -n "$GPG_PASSPHRASE" ]; then
# Cache passphrase
gpg --batch --pinentry-mode loopback \
--passphrase-file <(echo "$GPG_PASSPHRASE") \
--clearsign >/dev/null 2>&1 <<< "test"
USE_GPG="yes"
else
USE_GPG="no"
fi
```
### 2. Analyze Changes
```bash
git status --short
# Prefer staged files if any exist
if ! git diff --staged --quiet; then
git diff --staged --stat # Staged changes
else
git diff HEAD --stat # All changes
fi
```
### 3. Multi-Concern Detection
Suggest split if:
- **Different patterns**: `src/` + `test/` + `docs/`
- **Mixed types**: feat + fix + docs
- **Unrelated concerns**: auth logic + UI styling
- **Large changeset**: >500 lines
**Ask user:**
```
Multiple concerns detected:
1. Auth changes (src/auth/*)
2. UI updates (src/components/*)
3. Docs (README.md)
Split into 3 commits?
- β¨ feat: add JWT authentication
- π style: update login UI
- π docs: update auth documentation
[split/all]
```
### 4. Create Commit
Format: `<emoji> <type>: <description>`
**Rules:**
- Imperative mood ("add" not "added")
- First line <72 chars
- Atomic (single purpose)
- Use body for "why" if needed
```bash
git commit --signoff ${USE_GPG:+--gpg-sign} -m "<emoji> <type>: <description>"
```
### 5. Handle --no-verify
If user requests `--no-verify`:
```
β οΈ Requested to skip pre-commit hooks.
Bypasses: linting, tests, formatting
Reason: [ask user]
Approve? [yes/no]
```
Only proceed if confirmed.
---
## Commit Types & Emoji
| Type | Emoji | Use Case |
|------|-------|----------|
| feat | β¨ | New feature |
| fix | π | Bug fix |
| docs | π | Documentation |
| style | π | Formatting, styling |
| refactor | β»οΈ | Code restructure |
| perf | β‘ | Performance |
| test | β
| Tests |
| chore | π§ | Build/tools |
| ci | π | CI/CD |
| security | ποΈ | Security fix |
| build | ποΈ | Build system |
| revert | βͺοΈ | Revert changes |
| wip | π§ | Work in progress |
**Extended emoji map:**
π move | β add-dep | β remove-dep | π± seed | π§βπ» dx | π·οΈ types | π business | πΈ ux | π©Ή minor-fix | π₯
errors | π₯ remove | π¨ structure | ποΈ hotfix | π init | π release | π ci-fix | π pin-deps | π· ci-build | π analytics | βοΈ typos | π license | π₯ breaking | π± assets | βΏοΈ a11y | π‘ comments | ποΈ db | π logs | π remove-logs | π gitignore | πΈ snapshots | βοΈ experiment | π© flags | π« animations | β°οΈ dead-code | π¦Ί validation | βοΈ offline
---
## Split Decision Examples
### β Bad - Mixed concerns
```diff
+ src/auth/login.ts (feat)
+ src/components/Button.css (style)
+ README.md (docs)
```
**Split into:** 3 separate commits
### β
Good - Single concern
```diff
+ src/auth/login.ts
+ src/auth/middleware.ts
+ tests/auth.test.ts
```
**One commit:** β¨ feat: add authentication
### β Bad - Mixed types
```diff
+ Add export feature (feat)
+ Fix date bug (fix)
```
**Split into:** 2 commits by type
### β Bad - Large multi-feature
```diff
300+ lines: auth system
200+ lines: UI components
150+ lines: database
```
**Split into:** 3 commits by feature
---
## Critical Rules
### NEVER
- β Add Claude signature to commits
- β Commit without checking staged status
- β Skip split suggestions for multi-concern
- β Use past tense ("added" β "add")
- β Make first line >72 chars
- β Bypass hooks without asking
### ALWAYS
- β
Use --signoff flag
- β
Check GPG passphrase first
- β
Analyze diff before commit
- β
Suggest splits when appropriate
- β
Use imperative mood
- β
Pick correct emoji + type
- β
Ask approval for --no-verify
---
## Integration Notes
### With CLAUDE.md
CLAUDE.md references this skill: "Use `/commit` or say 'commit changes'"
### With spec-kit
Reference planning docs in commit body:
```
β¨ feat: add user authentication
- JWT token validation
- Protected routes middleware
- Tests cover happy/error paths
Related to Stage 2 of PLAN.md (User Story 1.2)
```
### With Husky
Hooks run automatically unless --no-verify used (requires approval).
---
## Example Sessions
### Simple commit
```
User: "commit these changes"
Process:
1. Check GPG β
2. Analyze: src/auth/login.ts (modified)
3. Single concern β
4. Create: β¨ feat: add login endpoint
5. Execute: git commit --signoff --gpg-sign -m "..."
```
### Split required
```
User: "commit"
Process:
1. Detect: auth + UI + docs
2. Suggest split (3 commits)
3. User confirms "split"
4. Commit each separately with proper emoji/type
```
### Skip hooks
```
User: "/commit --no-verify"
Response:
"β οΈ Skip hooks? Bypasses linting/tests.
Reason: [wait]"
User: "hotfix for production"
Action: Proceed with --no-verify
```
---
## Troubleshooting
### GPG fails
```bash
echo $GPG_PASSPHRASE # Check set
gpg --clearsign <<< "test" # Test manually
# If fails: commit without --gpg-sign
```
### Hook fails
Check output β fix issue β retry
Critical case only: ask about --no-verify
### No changes
```bash
git status
# No changes: inform user
# Unstaged only: "Stage files first?"
```
---
## Progressive Disclosure
Keep this main file under 500 lines. For extensive reference:
- Emoji cheatsheet β See `emoji-reference.md` (if needed)
- Advanced patterns β See `advanced-commits.md` (if needed)
Current approach: All essential info in this file for immediate use.
---
Attribution
Comments
Loading commentsβ¦