Conventional commits writing
Skill event4u-app/agent-config/dist/agent-src/skills/conventional-commits-writing
Universal AI Agent OS — audited skills, governance rules, replayable state. One contract, every host agent.
npx -y skills add event4u-app/agent-config --skill conventional-commits-writingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 7 stars7 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when writing commit messages or squash-merge titles — `feat:`, `fix:`, `chore:`, scopes, breaking changes — even when the user just says 'commit this' without naming Conventional Commits.
SKILL.md
4.8 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
conventional-commits-writing
When to use
Use this skill when:
- Generating a commit message from staged changes
- Generating a squash merge title from a PR
- Deciding the correct Conventional Commit type for a change
- Reviewing whether a commit message is correct
- Splitting one vague change into multiple commit messages
Do NOT use when:
- Only explaining the Conventional Commits standard (just reference the rule)
- The message is already correct and does not need review
- Following the Git workflow (use
git-workflowskill)
Procedure: Generate commit message
1. Identify the actual intent
Determine whether the change is:
- New behavior →
feat - Bug fix →
fix - Structural cleanup →
refactor - Docs only →
docs - Tests only →
test - CI/build/tooling →
ciorbuild - Maintenance →
chore - Performance →
perf - Formatting only →
style
Classify by user-visible or system-relevant intent, not by file type alone.
2. Detect mixed concerns
Check whether the change includes more than one unrelated concern.
If yes:
- Suggest splitting into multiple commits
- Or choose the dominant net effect for squash merge title
3. Choose scope
Add a scope only if it improves clarity:
- Jira ticket ID:
DEV-1234 - Module/area:
api,auth,skills,rules,ci
4. Write the description
- State the intent clearly
- Avoid generic filler (
update stuff,fix things) - Stay concise — max 72 chars total for first line
- Imperative mood: "add", "fix", "remove" — not "added", "fixed", "removed"
5. Check for breaking change
If compatibility is broken, add ! after type/scope:
feat(api)!: rename invoice status values
Or add BREAKING CHANGE: in the commit body/footer.
6. Validate
- Type matches intent?
- Scope is useful (not noise)?
- Description is specific (not generic)?
- Not hiding multiple unrelated changes?
- Breaking changes are marked?
Procedure: Review existing commit message
- Parse the message into type, scope, description
- Check type accuracy against the actual diff
- Check scope usefulness
- Check description clarity and specificity
- Suggest corrections if any check fails
Procedure: Generate squash merge title
- Read all commits in the PR
- Identify the net effect — what does the PR accomplish overall?
- Write a single Conventional Commit message summarizing the net effect
- Do not list every internal commit — summarize
Output format
- Recommended commit message(s)
- Brief rationale for type choice
- Split suggestion if the change should be multiple commits
Gotcha
- The model tends to overuse
choreandrefactor— classify by intent, not by effort - File type alone does not determine commit type (e.g. a
.mdchange can befeatif it's a new feature doc) - Squash merge titles should describe the net effect, not every internal detail
refactormeans NO behavior change — if behavior changes, usefeatorfix
Frugality Standards
Apply the Frugality Charter to every commit message you author.
Examples in this artifact:
- Per the charter's default-terse rule, the subject states the change in 50 chars; no scaffolding ("This commit will…").
- Per the post-action summary suppression, the body lists changed surfaces in bullets — no closing paragraph re-summarizing them.
- Per the cheap-question check, never propose a
featvs.chorenumbered choice when the type is decidable from the diff.
Pre-save self-check:
- Does the subject line carry filler ("various improvements", "general updates")?
- Does the body re-narrate the diff instead of stating intent?
- Are co-author / attribution footers present without explicit user
request (per
no-attribution-footers)? - Is the type / scope chosen from the diff, not from the asker's framing?
Do NOT
- Do NOT use vague messages:
update stuff,fix bug,changes - Do NOT use
refactorfor bug fixes - Do NOT use
chorefor meaningful behavior changes - Do NOT hide multiple unrelated concerns in one message
- Do NOT omit breaking-change markers when compatibility changes
References
- Rule:
commit-conventions— base format, types, scope, examples - Guideline:
docs/guidelines/php/git.md— type selection rules, anti-patterns, decision checklist - Command:
/commit— uses this skill for message generation