{"id":"771ddfc8-b6ce-488e-aefa-a4bfb2fd6042","shortId":"avVuGd","kind":"skill","title":"Git Commit Writer","tagline":"Generates conventional commit messages from staged changes or a diff.","description":"# Git Commit Writer\n\n## What this skill does\n\nThis skill directs the agent to read a git diff (or a plain description of changes) and produce a well-formed commit message following the [Conventional Commits](https://www.conventionalcommits.org/) specification. It chooses the right type (`feat`, `fix`, `chore`, `docs`, `refactor`, `test`, `style`, `perf`, `ci`), picks an appropriate scope, writes a concise subject line, and — when the change is large enough to warrant it — adds a descriptive body.\n\nUse this when you want consistent, meaningful commit history without having to remember the format every time.\n\n## How to use\n\n### Claude Code / Cline\n\nCopy this file to `.agents/skills/git-commit-writer/SKILL.md` in your project root.\n\nThen ask the agent:\n- *\"Write a commit message for my staged changes using the Git Commit Writer skill.\"*\n- *\"Here's a diff. Use the Git Commit Writer skill to produce a commit message.\"*\n\nFor Claude Code, you can also run `git diff --staged` first and paste the output into the chat.\n\n### Cursor\n\nAdd the contents of the \"Prompt / Instructions\" section below to your `.cursorrules` file, or paste it into the Cursor AI pane before asking for a commit message.\n\n### Codex\n\nPaste the diff into the Codex chat along with the instructions from the section below. Codex works best when you include the full diff rather than a summary.\n\n## The Prompt / Instructions for the Agent\n\nWhen asked to write a commit message, follow these steps:\n\n1. **Read the diff.** If not provided, ask for `git diff --staged` output. Understand every file changed.\n\n2. **Determine the commit type** using these rules:\n   - `feat` — a new feature or behavior visible to users or callers\n   - `fix` — a bug fix\n   - `refactor` — code restructuring with no behavior change\n   - `perf` — performance improvement\n   - `test` — adding or fixing tests\n   - `docs` — documentation only (README, comments, etc.)\n   - `style` — formatting, whitespace, lint (no logic change)\n   - `chore` — build scripts, dependencies, tooling\n   - `ci` — CI/CD pipeline changes\n\n3. **Choose a scope** (optional but recommended). The scope is the part of the codebase most affected, in lowercase: `auth`, `api`, `ui`, `db`, `parser`, etc. Use the folder name or module name if unsure.\n\n4. **Write the subject line** (first line of the commit):\n   - Format: `type(scope): short description`\n   - Max 72 characters\n   - Use the imperative mood: \"add\", \"fix\", \"remove\" — not \"added\", \"fixing\", \"removes\"\n   - Do not capitalize the first word after the colon\n   - Do not end with a period\n\n5. **Write the body** if the change needs explanation:\n   - Leave a blank line between subject and body\n   - Explain *why* the change was made, not *what* (the diff shows what)\n   - Wrap lines at 72 characters\n   - Use bullet points for multiple distinct changes\n\n6. **Add a footer** if applicable:\n   - Breaking changes: `BREAKING CHANGE: description`\n   - Issue references: `Closes #123` or `Fixes #456`\n\n7. **Output format:**\n\n```\ntype(scope): short imperative description\n\nOptional body explaining the why behind the change.\nCan be multiple paragraphs. Wrap at 72 chars.\n\nOptional footer: Closes #123\n```\n\nIf the diff contains multiple unrelated changes, flag this and suggest splitting into separate commits.\n\n## Example\n\n**Input to Agent:**\n> \"Here's my staged diff. Write a commit message using the Git Commit Writer skill.\n>\n> ```diff\n> diff --git a/server/auth.ts b/server/auth.ts\n> index 3a1b2c..9f4e5d 100644\n> --- a/server/auth.ts\n> +++ b/server/auth.ts\n> @@ -42,6 +42,12 @@ export async function login(email: string, password: string) {\n>    const user = await db.users.findOne({ email });\n>    if (!user) throw new AuthError('User not found');\n> +\n> +  if (user.lockedUntil && user.lockedUntil > new Date()) {\n> +    throw new AuthError('Account is temporarily locked. Try again later.');\n> +  }\n> +\n>    const valid = await bcrypt.compare(password, user.passwordHash);\n>    if (!valid) {\n> +    await incrementFailedAttempts(user.id);\n>      throw new AuthError('Invalid password');\n>    }\n> ```\"\n\n**Output from Agent:**\n```\nfix(auth): lock accounts after repeated failed login attempts\n\nAdds a check for the `lockedUntil` field before attempting password\ncomparison. Also increments a failed-attempt counter on each bad\npassword so the locking mechanism has data to act on.\n```\n\n## Notes\n\n- If you paste a large diff with changes spanning many files and concerns, the agent may suggest splitting it. That is intentional behavior — large atomic commits make history harder to read.\n- The skill does not run `git commit` automatically. It only produces the message text for you to review and use.\n- For monorepos, use the package or workspace name as the scope (e.g., `feat(api-gateway): ...`).","tags":["git","commit","writer","openagentskills","notysoty","agent-skills","claude","claude-code","claude-skills","cline","cursor","llm"],"capabilities":["skill","source-notysoty","skill-git-commit-writer","topic-agent-skills","topic-claude","topic-claude-code","topic-claude-skills","topic-cline","topic-cursor","topic-llm","topic-llm-skills","topic-skills"],"categories":["openagentskills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Notysoty/openagentskills/git-commit-writer","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Notysoty/openagentskills","source_repo":"https://github.com/Notysoty/openagentskills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 8 github stars · SKILL.md body (4,783 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:13:21.913Z","embedding":null,"createdAt":"2026-05-18T13:20:42.854Z","updatedAt":"2026-05-18T19:13:21.913Z","lastSeenAt":"2026-05-18T19:13:21.913Z","tsv":"'+42':535 '-42':533 '/)':51 '1':246 '100644':530 '12':536 '123':456,487 '2':263 '3':323 '3a1b2c':528 '4':357 '456':459 '5':401 '6':442,534 '7':460 '72':373,433,482 '9f4e5d':529 'a/server/auth.ts':525,531 'account':566,595 'act':630 'ad':297,383 'add':86,174,379,443,601 'affect':339 'agent':25,125,235,506,591,647 'agents/skills/git-commit-writer/skill.md':117 'ai':193 'along':209 'also':160,612 'api':343,698 'api-gateway':697 'applic':447 'appropri':69 'ask':123,196,237,253 'async':538 'atom':657 'attempt':600,609,617 'auth':342,593 'autherror':554,565,586 'automat':671 'await':547,575,581 'b/server/auth.ts':526,532 'bad':621 'bcrypt.compare':576 'behavior':276,291,655 'behind':473 'best':219 'blank':412 'bodi':89,404,417,469 'break':448,450 'bug':284 'build':315 'bullet':436 'caller':281 'capit':388 'chang':10,36,79,133,262,292,313,322,407,421,441,449,451,475,494,640 'char':483 'charact':374,434 'chat':172,208 'check':603 'choos':54,324 'chore':60,314 'ci':66,319 'ci/cd':320 'claud':110,156 'cline':112 'close':455,486 'code':111,157,287 'codebas':337 'codex':201,207,217 'colon':394 'comment':305 'commit':2,6,15,43,48,97,128,137,147,153,199,241,266,366,502,514,519,658,670 'comparison':611 'concern':645 'concis':73 'consist':95 'const':545,573 'contain':491 'content':176 'convent':5,47 'copi':113 'counter':618 'cursor':173,192 'cursorrul':185 'data':628 'date':562 'db':345 'db.users.findone':548 'depend':317 'descript':34,88,371,452,467 'determin':264 'diff':13,30,143,163,204,225,249,256,427,490,511,522,523,638 'direct':23 'distinct':440 'doc':61,301 'document':302 'e.g':695 'email':541,549 'end':397 'enough':82 'etc':306,347 'everi':105,260 'exampl':503 'explain':418,470 'explan':409 'export':537 'fail':598,616 'failed-attempt':615 'feat':58,271,696 'featur':274 'field':607 'file':115,186,261,643 'first':165,362,390 'fix':59,282,285,299,380,384,458,592 'flag':495 'folder':350 'follow':45,243 'footer':445,485 'form':42 'format':104,308,367,462 'found':557 'full':224 'function':539 'gateway':699 'generat':4 'git':1,14,29,136,146,162,255,518,524,669 'harder':661 'histori':98,660 'imper':377,466 'improv':295 'includ':222 'increment':613 'incrementfailedattempt':582 'index':527 'input':504 'instruct':180,212,232 'intent':654 'invalid':587 'issu':453 'larg':81,637,656 'later':572 'leav':410 'line':75,361,363,413,431 'lint':310 'lock':569,594,625 'lockeduntil':606 'logic':312 'login':540,599 'lowercas':341 'made':423 'make':659 'mani':642 'max':372 'may':648 'meaning':96 'mechan':626 'messag':7,44,129,154,200,242,515,676 'modul':353 'monorepo':685 'mood':378 'multipl':439,478,492 'name':351,354,691 'need':408 'new':273,553,561,564,585 'note':632 'option':327,468,484 'output':169,258,461,589 'packag':688 'pane':194 'paragraph':479 'parser':346 'part':334 'password':543,577,588,610,622 'past':167,188,202,635 'perf':65,293 'perform':294 'period':400 'pick':67 'pipelin':321 'plain':33 'point':437 'produc':38,151,674 'project':120 'prompt':179,231 'provid':252 'rather':226 'read':27,247,663 'readm':304 'recommend':329 'refactor':62,286 'refer':454 'rememb':102 'remov':381,385 'repeat':597 'restructur':288 'review':681 'right':56 'root':121 'rule':270 'run':161,668 'scope':70,326,331,369,464,694 'script':316 'section':181,215 'separ':501 'short':370,465 'show':428 'skill':19,22,139,149,521,665 'skill-git-commit-writer' 'source-notysoty' 'span':641 'specif':52 'split':499,650 'stage':9,132,164,257,510 'step':245 'string':542,544 'style':64,307 'subject':74,360,415 'suggest':498,649 'summari':229 'temporarili':568 'test':63,296,300 'text':677 'throw':552,563,584 'time':106 'tool':318 'topic-agent-skills' 'topic-claude' 'topic-claude-code' 'topic-claude-skills' 'topic-cline' 'topic-cursor' 'topic-llm' 'topic-llm-skills' 'topic-skills' 'tri':570 'type':57,267,368,463 'ui':344 'understand':259 'unrel':493 'unsur':356 'use':90,109,134,144,268,348,375,435,516,683,686 'user':279,546,551,555 'user.id':583 'user.lockeduntil':559,560 'user.passwordhash':578 'valid':574,580 'visibl':277 'want':94 'warrant':84 'well':41 'well-form':40 'whitespac':309 'without':99 'word':391 'work':218 'workspac':690 'wrap':430,480 'write':71,126,239,358,402,512 'writer':3,16,138,148,520 'www.conventionalcommits.org':50 'www.conventionalcommits.org/)':49","prices":[{"id":"2fe24779-a013-488a-baae-8242c0d150ef","listingId":"771ddfc8-b6ce-488e-aefa-a4bfb2fd6042","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Notysoty","category":"openagentskills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:20:42.854Z"}],"sources":[{"listingId":"771ddfc8-b6ce-488e-aefa-a4bfb2fd6042","source":"github","sourceId":"Notysoty/openagentskills/git-commit-writer","sourceUrl":"https://github.com/Notysoty/openagentskills/tree/main/skills/git-commit-writer","isPrimary":false,"firstSeenAt":"2026-05-18T13:20:42.854Z","lastSeenAt":"2026-05-18T19:13:21.913Z"}],"details":{"listingId":"771ddfc8-b6ce-488e-aefa-a4bfb2fd6042","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Notysoty","slug":"git-commit-writer","github":{"repo":"Notysoty/openagentskills","stars":8,"topics":["agent-skills","claude","claude-code","claude-skills","cline","cursor","llm","llm-skills","skills"],"license":"mit","html_url":"https://github.com/Notysoty/openagentskills","pushed_at":"2026-03-28T06:50:19Z","description":"A  community-driven library of reusable AI agent skills for Claude Code, Cursor, Codex, Cline, and more.","skill_md_sha":"99197db330734ccf1865358ed8d79052c3668287","skill_md_path":"skills/git-commit-writer/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Notysoty/openagentskills/tree/main/skills/git-commit-writer"},"layout":"multi","source":"github","category":"openagentskills","frontmatter":{"name":"Git Commit Writer","description":"Generates conventional commit messages from staged changes or a diff."},"skills_sh_url":"https://skills.sh/Notysoty/openagentskills/git-commit-writer"},"updatedAt":"2026-05-18T19:13:21.913Z"}}