← All packs
Free pack

Commit Message & PR Description Writer

Turn a git diff into a Conventional Commits message and a reviewer-friendly pull request description, built only from what the diff actually shows.

Free below. Want the full setup? App Builder Agent Pack ($19) or all 5 premium packs for $29.

What it does

Paste a diff (git diff --staged, or the PR diff) plus one line on why you made the change. You get a Conventional Commits message (type, scope, a short imperative subject, a body that explains why, and a BREAKING CHANGE footer only when the diff really breaks something), a pull request description with summary, changes, how to test, risks and screenshots-needed notes, and a split suggestion when the diff mixes unrelated changes. It only describes what is in the diff and flags anything it can't confirm, so it never claims tests or fixes that aren't there.

Who it's for

Developers and vibe coders whose history is full of “fix stuff” and “updates”, anyone reviewing big agent-written diffs, and teams that want Conventional Commits without thinking about it.

The prompt

Raw markdown for agents: /packs/commit-pr-writer.md. Paste the system prompt into your model's system/custom instructions (or a Cursor/Claude Code rules file), then use the template for each request.

System prompt

You write commit messages and pull request descriptions from a git diff.

Inputs: a diff, the author's one-line reason (may be missing), and optional context (ticket ID, repo conventions).

Rules:
- Describe ONLY what the diff shows. Never claim tests were added, run, or passing unless test files appear in the diff; never claim a bug is fixed unless the reason or the diff shows it.
- If the reason is missing, infer it from the diff and mark it (inferred). If you can't tell why, say so in one line instead of guessing.
- Commit message follows Conventional Commits:
  type(scope): subject
  - type: feat, fix, refactor, perf, docs, test, build, ci, chore, style, revert
  - scope: the main module or folder touched, lowercase; omit if the change is repo-wide
  - subject: imperative mood ("add", not "added"), no period, 50 characters or fewer, 72 hard limit
  - body: wrapped at 72 columns, explains WHY and any side effects, not a line-by-line list of WHAT
  - add "!" after the type/scope and a "BREAKING CHANGE:" footer only if the diff removes or renames a public API, config key, CLI flag, route, env var, or database column
  - footers: "Refs" or "Closes" with the ticket ID only if one was given
- If the diff mixes unrelated changes (for example a feature plus formatting plus a dependency bump), say so and propose a split into separate commits, each with its own message.
- Point out anything a reviewer must know: secrets or .env values in the diff, debug prints, commented-out code, TODOs, lockfile-only changes, migrations, very large generated files.

Output:
## Commit message
(in a code block, ready to paste)
## Split suggestion (only if needed)
## Pull request description
### Summary (2 sentences)
### Changes (bullets, grouped by area)
### How to test (numbered steps a reviewer can actually run)
### Risks and rollback
### Reviewer notes (red flags found, or "None found")

User message template

Why I made this change: {{one line, or leave blank}}
Ticket / issue: {{e.g. #123, or none}}
Repo conventions: {{e.g. Conventional Commits, scopes = folder names, or none}}

Diff:
"""
{{paste the output of: git diff --staged}}
"""

Example

Input

Why: users got logged out when the access token expired mid-session.
Ticket: #214

Diff (abridged):
src/auth/session.ts: adds refreshIfExpired() that calls /api/token/refresh when exp is under 60s away; getSession() now awaits it
src/auth/session.ts: removes exported function clearLegacyCookie()
src/components/Header.tsx: whitespace and quote-style changes only
.env.example: adds TOKEN_REFRESH_URL=

Output (abridged)

## Commit message
```
fix(auth)!: refresh access token before it expires

Users were logged out when the access token expired mid-session.
getSession() now refreshes the token through /api/token/refresh when
it is under 60 seconds from expiry.

BREAKING CHANGE: clearLegacyCookie() is no longer exported.
Closes #214
```

## Split suggestion
Header.tsx only has formatting changes. Commit it separately as:
style(header): apply formatter

## Pull request description
### Summary
Refreshes the access token shortly before expiry so sessions don't drop. Removes the exported clearLegacyCookie() helper.
### How to test
1. Set TOKEN_REFRESH_URL in .env (new key, see .env.example).
2. Log in, wait until the token is within 60s of expiry, then load a page; you should stay logged in.
### Reviewer notes
- No test files in this diff; refresh behaviour is untested.
- New env var TOKEN_REFRESH_URL must be set in every environment before deploy.

Tips

FAQ

What is Conventional Commits?

A simple convention for commit messages: type(scope): subject, an optional body, and footers such as BREAKING CHANGE. Tools like semantic-release and changelog generators read it to bump versions and write release notes.

Will it make up what my change does?

It is told to describe only what the diff shows, to mark guesses as (inferred), and to say when it can't tell why. It also won't claim tests exist unless test files are in the diff.

Does it work with GitHub, GitLab and Bitbucket?

Yes. The commit message is plain git, and the PR description is plain Markdown that renders on all three. 'Closes #123' auto-closes issues on GitHub and GitLab when merged to the default branch.

Can my coding agent use it automatically?

Yes. Paste the system prompt into AGENTS.md, CLAUDE.md or a Cursor rule and ask the agent to draft the commit message and PR description from git diff --staged before it commits. Keep a human look before pushing.

Which models does it work with?

Any capable chat model: Grok, ChatGPT, Claude, Gemini or a local model. Long diffs need a model with a large context window.

Premium · $19

Go further: App Builder Agent Pack

Want your agent to work in small, clean commits from the start? The App Builder Agent Pack gives you six Cursor rules files (.mdc), a CLAUDE.md and an AGENTS.md with a verify-before-done agreement, plus a plan-then-build workflow where every step ends in a checked, committable change and a handoff note.

Get the App Builder Agent Pack — $19 Or all 5 for $29

Free: Agent Done-Check Kit

Get the free Agent Done-Check Kit (Stop hook, rules and CI job) on Payhip.

Get the free Agent Done-Check Kit on Payhip

Pay what you want, from $0. Payhip may ask for your email to deliver the download. We do not run a mailing list.

More free packs