From johnfink-skills
Use whenever writing a git commit message, drafting a PR title, or generating release notes. Enforces a terse, informal commit-message style — hints at the diff rather than restating it, no trailers. Apply on every commit, including auto-generated ones after edits.
How this skill is triggered — by the user, by Claude, or both
Slash command
/johnfink-skills:commit-preferencesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**One terse, informal sentence. Hint at what's in the diff — don't restate it. No `Co-Authored-By` trailers.**
One terse, informal sentence. Hint at what's in the diff — don't restate it. No Co-Authored-By trailers.
That's the whole rule. Everything below is just clarification.
Good:
pull the retry loop out into its own helperfix the off-by-one in the pagination guardbump pydantic, mostly type stubs churnkill the unused websocket fallbackBad (too formal / restates the diff):
Refactor: extract retry logic into separate helper functionFix off-by-one error in pagination boundary check by adjusting comparison operatorchore(deps): bump pydantic from 2.5.0 to 2.6.1Lowercase first letter is fine. No period at the end is fine. Conventional Commits prefixes (feat:, fix:, chore:) are NOT wanted unless the repo already uses them.
The diff is right there — anyone reading the commit will see what changed. The message should answer what was the move, not what lines changed. If the message reads like a description of the patch, it's too literal.
add null check to user.email access in send_inviteguard send_invite against the no-email caseDo not append:
Co-Authored-By: Claude <...>🤖 Generated with Claude CodeSigned-off-by: (unless the repo's CI requires it — check first)If a default template wants to add one, strip it.
Default to single-line. Use a body only when the why genuinely won't fit in one sentence and isn't obvious from the diff — e.g. "we tried X first and it deadlocked, so this is Y instead." Even then, keep the body short.
Same rule applies, with a small allowance for PR bodies: they can be a little more verbose than a commit message, but the principle is unchanged — let the code stand for itself, don't list every detail.
Bad PR body (restates the diff):
This PR adds a new
RetryPolicyclass withmax_attemptsandbackoffparameters. It updatesHttpClient.__init__to accept aretry_policyargument. It modifies thesendmethod to use the new policy. It also updates the tests intest_http.pyto cover the new behavior.
Good PR body:
Pulls retry logic out of
HttpClientinto aRetryPolicyso callers can swap strategies. Left exponential backoff as the default since that's what we use everywhere — easy to override per-call when we need to.
If the PR description template demands a list-of-changes section, fill it tersely; never use it as an excuse to re-narrate the diff.
If the user asks for a longer message, conventional commits, a specific trailer, etc. for a particular commit, follow that. The rule above is the default, not a hard constraint.
npx claudepluginhub johnfink8/skill-repo --plugin johnfink-skillsProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.