Commit Type Detection Skill
Expert knowledge for detecting the optimal conventional commit type.
Detection Algorithm
Step 1: Gather Data
# Get modified files
git diff --name-only
git diff --staged --name-only
# Get change statistics
git diff --stat
git diff --staged --stat
# Check for keywords in diff
git diff | grep -i "fix\|bug\|error" | head -5
Step 2: Categorize Files
| Category |
File Patterns |
| docs |
*.md, *.txt, *.rst, README*, CHANGELOG* |
| test |
*.test.*, *.spec.*, __tests__/*, test/* |
| config |
*.json, *.yml, *.yaml, *.toml, .*rc |
| ci |
.github/*, .gitlab-ci.yml, Jenkinsfile |
| build |
package.json, Makefile, webpack.*, vite.* |
| style |
Only whitespace, formatting changes |
| src |
*.ts, *.js, *.py, *.go, *.rs, etc. |
Step 3: Apply Rules
IF only docs files changed:
→ docs
IF only test files changed:
→ test
IF only config/build files changed:
→ chore
IF only CI files changed:
→ ci
IF diff contains "fix", "bug", "error", "issue", "resolve":
→ fix
IF new files added with business logic:
→ feat
IF files renamed/moved without logic change:
→ refactor
IF performance keywords ("optimize", "perf", "speed", "cache"):
→ perf
IF formatting only (whitespace, semicolons):
→ style
DEFAULT:
→ Use /commit-pro:commit for smart analysis
Step 4: Determine Scope
Extract scope from primary directory:
src/components/Button.tsx → ui or button
src/api/auth.ts → auth
lib/utils/date.ts → utils
server/routes/user.ts → user
Quick Reference
| Type |
When |
Version Bump |
feat |
New functionality |
PATCH |
fix |
Bug correction |
PATCH |
docs |
Documentation only |
PATCH |
style |
Formatting only |
PATCH |
refactor |
Code restructure |
PATCH |
perf |
Performance |
PATCH |
test |
Tests only |
PATCH |
build |
Build/deps |
PATCH |
ci |
CI/CD config |
PATCH |
chore |
Maintenance |
PATCH |
MINOR/MAJOR bumps are manual user decisions, never automatic.
Post-Commit Actions
See the post-commit skill for universal CHANGELOG, version bump, and tag logic (works for all repos).
Examples
Example 1: Only README changed
Files: README.md
→ /commit-pro:docs
Example 2: New component + test
Files: src/Button.tsx, src/Button.test.tsx
→ /commit-pro:feat (primary is new feature)
Example 3: Fix in existing file
Files: src/api/auth.ts
Diff contains: "fix login bug"
→ /commit-pro:fix
1---2name: commit-detection3description: Detects optimal commit type from git changes. Use when analyzing commits, determining commit type, or before committing.4---56<objective>7Detects the optimal conventional commit type (feat/fix/docs/style/refactor/perf/test/build/ci/chore) from staged and unstaged git changes, using file-pattern categorization (docs/test/config/ci/build/src) plus diff-keyword heuristics ("fix", "bug", "optimize", etc.), and derives a scope suggestion from the primary changed directory (e.g. `src/api/auth.ts` → `auth`). Covers the full detection algorithm, the rule cascade, scope extraction, and worked examples. Does not perform the commit itself — routes to the matching `/commit-pro:<type>` command, or to the `commit` skill for full smart analysis when no rule matches cleanly.8</objective>910# Commit Type Detection Skill1112Expert knowledge for detecting the optimal conventional commit type.1314## Detection Algorithm1516### Step 1: Gather Data1718```bash19# Get modified files20git diff --name-only21git diff --staged --name-only2223# Get change statistics24git diff --stat25git diff --staged --stat2627# Check for keywords in diff28git diff | grep -i "fix\|bug\|error" | head -529```3031### Step 2: Categorize Files3233| Category | File Patterns |34|----------|---------------|35| docs | `*.md`, `*.txt`, `*.rst`, `README*`, `CHANGELOG*` |36| test | `*.test.*`, `*.spec.*`, `__tests__/*`, `test/*` |37| config | `*.json`, `*.yml`, `*.yaml`, `*.toml`, `.*rc` |38| ci | `.github/*`, `.gitlab-ci.yml`, `Jenkinsfile` |39| build | `package.json`, `Makefile`, `webpack.*`, `vite.*` |40| style | Only whitespace, formatting changes |41| src | `*.ts`, `*.js`, `*.py`, `*.go`, `*.rs`, etc. |4243### Step 3: Apply Rules4445```46IF only docs files changed:47 → docs4849IF only test files changed:50 → test5152IF only config/build files changed:53 → chore5455IF only CI files changed:56 → ci5758IF diff contains "fix", "bug", "error", "issue", "resolve":59 → fix6061IF new files added with business logic:62 → feat6364IF files renamed/moved without logic change:65 → refactor6667IF performance keywords ("optimize", "perf", "speed", "cache"):68 → perf6970IF formatting only (whitespace, semicolons):71 → style7273DEFAULT:74 → Use /commit-pro:commit for smart analysis75```7677### Step 4: Determine Scope7879Extract scope from primary directory:8081```82src/components/Button.tsx → ui or button83src/api/auth.ts → auth84lib/utils/date.ts → utils85server/routes/user.ts → user86```8788## Quick Reference8990| Type | When | Version Bump |91|------|------|-------------|92| `feat` | New functionality | PATCH |93| `fix` | Bug correction | PATCH |94| `docs` | Documentation only | PATCH |95| `style` | Formatting only | PATCH |96| `refactor` | Code restructure | PATCH |97| `perf` | Performance | PATCH |98| `test` | Tests only | PATCH |99| `build` | Build/deps | PATCH |100| `ci` | CI/CD config | PATCH |101| `chore` | Maintenance | PATCH |102103> MINOR/MAJOR bumps are **manual user decisions**, never automatic.104105## Post-Commit Actions106107See the `post-commit` skill for universal CHANGELOG, version bump, and tag logic (works for all repos).108109## Examples110111**Example 1: Only README changed**112```113Files: README.md114→ /commit-pro:docs115```116117**Example 2: New component + test**118```119Files: src/Button.tsx, src/Button.test.tsx120→ /commit-pro:feat (primary is new feature)121```122123**Example 3: Fix in existing file**124```125Files: src/api/auth.ts126Diff contains: "fix login bug"127→ /commit-pro:fix128```