- Home
- Skills
- Code Quality & Review
- Writing Pull Requests — Conventional Titles & Descriptions
Works with the AI Agents you already use
Writing Pull Requests — Conventional Titles & Descriptions
Writes a conventional-commit PR title, commit message and short description from your diff, printed in chat to paste.
Free
Writing Pull Requests — Conventional Titles & Descriptions
Example session with this skill installed
Write the PR for this branch.
diff --git a/src/auth/password-reset.ts b/src/auth/password-reset.ts
@@ -21,6 +21,9 @@ export async function resetPassword(token: string, newPassword: string) {
const record = await resetTokens.findByHash(sha256(token));
if (!record) {
throw new InvalidTokenError();
}
+ if (record.expiresAt.getTime() <= clock.now()) {
+ throw new InvalidTokenError();
+ }
await users.updatePassword(record.userId, newPassword);
}
diff --git a/src/auth/password-reset.test.ts b/src/auth/password-reset.test.ts
@@ -42,0 +43,11 @@ describe('resetPassword', () => {
+ it('should_reject_token_when_expired', async () => {
+ const token = await givenResetToken({ expiresAt: minutesAgo(1) });
+
+ await expect(resetPassword(token, 'N3w-passw0rd!')).rejects.toThrow(InvalidTokenError);
+ });
+
+ it('should_reject_token_when_now_equals_expiry', async () => {
+ const token = await givenResetToken({ expiresAt: clock.now() });
+
+ await expect(resetPassword(token, 'N3w-passw0rd!')).rejects.toThrow(InvalidTokenError);
+ });
- Read your context and instructions
- Compiled the writing pull requests
Summary. One intent: password reset tokens were accepted after their expiry time. The type is fix, the scope is auth (both files are under src/auth/), and the change is a single PR with no split needed. Diff inspected:
$ git diff --stat main..HEAD
src/auth/password-reset.test.ts | 11 +++++++++++
src/auth/password-reset.ts | 3 +++
2 files changed, 14 insertions(+)
TITLE: fix(auth): Reject expired password reset tokens
COMMIT MESSAGE: fix(auth): Reject expired password reset tokens
DESCRIPTION:
## Objective
Stop accepting password reset links after their expiry time, so a leaked or old reset link can no longer change a user's password.
## Changes
- Reject reset tokens whose expiry time has passed, including the exact expiry instant
- Return the same invalid-token error used for unknown tokens, so expired and unknown tokens look identical
- Add tests for an expired token and for the boundary at the expiry instant
## Notes
- Root cause: `expiresAt` was stored when the token was issued but never checked on redemption.
- Users holding an expired link from before this deploy must request a new one.
Title length: 47 characters (limit 72). Description: about 100 words (limit 150).
Next steps
- Paste the block into your PR. Nothing was written to a file, and no
git commit,addorpushwas run. - Consider a follow-up PR to make reset tokens single-use. It's a separate intent, so keeping it out of this PR keeps the title free of "and".
Connects securely to your tools. The creator never sees your data.
About this skill
PR titles like "Fix bug" and descriptions that list every changed file waste reviewers' time. Agents add two more problems: they commit for you and add AI footers. This skill produces a title, commit message and description a reviewer can read in seconds, and leaves committing to you.
Workflow:
- Inspect the diff with
git statusandgit diff --statagainst the base (or--cachedfor staged changes), and identify the affected module and the dominant intent. - Pick one type from the conventional-commit table (
feat,fix,docs,style,refactor,perf,test,chore). If two types tie, the change is mixed and it asks whether to split the PR. - Pick a scope from the diff paths, or omit it. It never invents one.
- Write the title in imperative mood, 72 characters or fewer, capitalized after the colon, with no trailing period and no "and".
- Write the description: a one-sentence Objective (the outcome, not the implementation), up to 5 verb-led Changes bullets, and Notes only when needed. Notes become mandatory for migrations, flags and breaking changes. 150 words maximum.
- Print the block in chat.
Reference files:
templates.md: variants for feature, fix, refactor, perf, test, docs, chore, revert and breaking change (!syntax).examples.md: common mistakes next to corrected versions, such as vague titles, multi-purpose titles, wrong tense, restating the diff, and burying the why.shared/.../communication.md: answer-first writing, so the first line says what the PR does and why it's safe to merge.
It pushes back on empty or mixed diffs. A learnings/ folder holds project-specific scopes and vocabulary.
Hard rules: output goes to the chat, never to a file. It never runs git commit, add or push, and never adds AI attribution, Co-Authored-By trailers or "Generated with" footers.
Free and MIT-licensed, part of the claude-skills-czl collection.
Source on GitHub: this skill · full repository
How to use
Skills on Agensi run inside your AI agent. Copy the prompt, paste it into your agent, and it connects to Agensi and installs this skill for you. If a payment is needed, your agent shows it to you first.
Reviews
No reviews yet
Be one of the first to try it. Every listed skill passes our trust checks below.
Security scanned
Passed our 8-point scan before listing
Fresh listing
Recently published to Agensi
Free forever
No account required to browse
Trust & safety
Security scanned
Verified clean 11 days ago
- Free to download with an account