pr-style

$npx mdskill add fredrikaverpil/dotfiles/pr-style

Formats PR titles and descriptions with Why/What/Notes sections.

  • Ensures PR titles and bodies follow a consistent, concise style.
  • Works with gh CLI, GitHub MCP tools, or GitHub API.
  • Applies rules for draft PRs, assignment, linking, and code snippets.
  • Outputs structured PR descriptions with bullet lists and no AI attribution.

SKILL.md

.github/skills/pr-styleView on GitHub ↗
---
name: pr-style
description: >-
  This skill should be used when creating or editing a GitHub pull request
  title or description, regardless of tool (gh CLI, GitHub MCP tools, API).
  Defines PR title format and body format with Why/What/Notes sections.
---

# Pull Request Style

Conventions for PR titles and descriptions. These apply no matter how the PR
is created (`gh` CLI, GitHub MCP tools, API).

## General

- Always create draft PRs.
- Assign the PR to me (the author), not to Claude or a bot identity.
- Keep PR titles, descriptions, and comments concise and clear.
- Include only useful information. Remove redundancy and over-explanation.
- Prefer explicitness and clarity over verbosity.
- Express Why/What/Notes content as concise, to-the-point bullet lists. Avoid
  prose paragraphs.
- All references to functions, libraries, projects, products must be linked.
- Include a small, illustrative code snippet whenever it conveys the change
  faster than prose. This is desired for PRs in general, and especially for bug
  fixes: a minimal example of the triggering case (and what went wrong) makes
  the problem concrete for reviewers. Keep it short — just enough to convey the
  point, not a full reproduction.
- Do NOT add AI attribution: no "Generated with Claude Code" lines, no session
  links or model names.
- In Claude cloud sandbox sessions, the platform appends a "Generated by
  Claude Code" footer to the PR body at creation time, outside your control.
  After creating a PR, always read it back and, if a footer was appended,
  update the PR body to remove it (updates are not re-footered). Also verify
  angle-bracket placeholders survived; the platform strips them even inside
  code spans.

## PR Title Format

Write the title as if the whole PR was squashed into a single commit using
conventional commits. Use imperative mood (e.g., "Add feature" not "Added
feature"). Keep it concise and descriptive.

## PR Body Format

```markdown
## Why?

[Explain the motivation for this change. What problem does it solve?]

## What?

[Describe what was changed. List the key modifications.]

## Notes

[Optional. Additional context, testing notes, or follow-up items.]
```

Rules:

1. `## Why?` - Required. Explain motivation and problem being solved
2. `## What?` - Required. Describe the changes made
3. `## Notes` - Optional. Omit entirely if no notes are needed

## File References

Use `[file:lineno](url)` with SHA-pinned URLs:
`https://github.com/<owner>/<repo>/blob/<sha>/<path>#L<lineno>`

- SHA: `git rev-parse HEAD`
- Owner/repo: from `git remote get-url origin` (or `gh repo view --json
  nameWithOwner -q .nameWithOwner` when `gh` is available)

## Example Body

```markdown
## Why?

Users need secure access to their accounts. Currently there is no
authentication mechanism in place.

## What?

- Add login/logout endpoints
- Implement JWT token generation
- Add password hashing with bcrypt
- Create auth middleware for protected routes

## Notes

Requires `JWT_SECRET` env variable to be set in production.
```

More from fredrikaverpil/dotfiles

SkillDescription
aipGoogle API Improvement Proposals (AIP) reference. Use BEFORE designing or reviewing APIs, protobuf definitions, or any work involving Google API design standards. Fetches relevant AIP rules from https://google.aip.dev for the task at hand.
gh-pr>-
golang-styleTry to follow the proverbs:
neovimInteract with the user's running Neovim instance via RPC. Use this skill when you need to execute Lua or Vimscript inside Neovim, query buffer state, send commands, or interact with the Neovim runtime in any way. Triggers when the user asks about their current Neovim session, wants to run something inside Neovim, or when you need to inspect Neovim state (buffers, windows, options, LSP, etc.). Also use when running inside a Neovim terminal and needing to communicate with the parent editor.
nix-installInstall Nix in the Claude Code web sandbox (the cloud environment) as a general-purpose package installer, then install packages from the Nix binary cache with no GitHub access. Use whenever a web session needs a tool that isn't preinstalled and isn't in a language registry (npm/pypi/crates/go) — Neovim, ripgrep, a compiler, anything in nixpkgs. Installs nix-bin via apt, configures single-user mode, and installs packages via nix-env against the nixpkgs channel tarball. Web-sandbox only.
nvim-config>
nvim-installInstall Neovim and stand up the nvim-fredrik config in the Claude Code web sandbox (the cloud environment), where no Neovim exists. Use this before testing any Neovim config change in a web session, e.g. checking out a PR branch that touches nvim-fredrik and observing its runtime behavior. Installs Neovim via Nix from the binary cache with no GitHub access, wires the repo's config into place, launches Neovim headless with a listen socket, and exports $NVIM so the `neovim` RPC skill can drive it. Web-sandbox only.
nvim-pluginReference: https://neovim.io/doc/user/lua-plugin/
plan-interviewBefore creating a plan, interview the user
proofProvide proof to your claim(s)