
pr-title-lint
Add or verify CI enforcement of Conventional Commits pull request titles. Detects whether the repo squash-merges with the PR title as the commit subject, checks for an existing title check, scaffolds .github/workflows/pr-title.yml using amannn/action-semantic-pull-request at a pinned SHA, and verifies it fails a bad title and passes a good one. Use when the user says enforce conventional commit PR titles, lint PR titles, semantic pull request check, add a PR title check, or invokes /pr-title-lint. Do NOT use for switching a repo to squash-merge with PR-title commit messages (use gh-bootstrap for merge defaults and rulesets), cutting a release (use release), or local commit-message hooks (use prek).
- Installs
- 53
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/paulnsorensen/git-gouda --skill pr-title-lint- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads pr-title-lint automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
pr-title-lint
Scaffold a CI check that rejects a pull request title that does not follow Conventional Commits.
This matters most when squash merge uses the PR title as the commit subject: an unchecked title becomes permanent history the moment the PR merges.
Where this fits
| Concern | Skill |
|---|---|
| Switch a repo to squash-only with PR-title commit messages | gh-bootstrap |
| Enforce the PR title format itself, in CI | pr-title-lint (this skill) |
| Add the check name to required status checks on a ruleset | gh-bootstrap |
| Cut a versioned release | release |
| Local commit-message hooks (commitlint via prek) | prek |
Protocol
1. Detect squash-merge with PR-title commit messages
REPO="$(gh repo view --json nameWithOwner --jq '.nameWithOwner')"
gh api "repos/$REPO" --jq '.squash_merge_commit_title'
A value of PR_TITLE means the squash commit subject is the PR title
verbatim, so git log --oneline on the default branch becomes a list of PR
titles. An unchecked title turns a typo, a missing type, or a vague summary
into permanent history the moment the PR merges. This is the strongest
reason to add the check; still offer to scaffold it if the value is
COMMIT_OR_PR_TITLE or unset, since the title can still land as history.
2. Detect an existing check
grep -rl 'action-semantic-pull-request' .github/workflows/ 2>/dev/null
grep -rl 'commitlint' .github/workflows/ .commitlintrc* commitlint.config.* 2>/dev/null
If a workflow already runs action-semantic-pull-request against PR titles,
or a commitlint job already lints PR titles (not just commit messages), stop
and report it instead of adding a duplicate check.
3. Scaffold the workflow
Copy assets/pr-title.yml to
.github/workflows/pr-title.yml. It pins
amannn/action-semantic-pull-request by commit SHA (not a floating tag), and
ships with:
permissions: pull-requests: read— least privilege; the action only needs to read the PR titleon.pull_request.types: [opened, edited, synchronize, reopened]— reruns the check whenever the title or the PR itself changesmerge_grouptrigger with a job-levelif: github.event_name == 'pull_request'— the job validates the title only on the PR, because a merge group event has no PR title; onmerge_groupthe job is skipped, and a skipped job reports success- Commented-out
typesandscopeslists, and asubjectPatternexample, for the user to uncomment and tailor requireScope: false— most repos do not need a mandatory scope
Ask before overwriting an existing .github/workflows/pr-title.yml; show
the diff first.
See references/conventional-commits.md
for the full Conventional Commits summary, the squash-merge citations, and
the action's configuration options.
4. Optional: commit-message linting via prek
If the user also wants to lint local commit messages (not just PR titles),
that is a commit-msg hook, not a GitHub Actions job. Point them at prek
and offer assets/commitlint.config.example
as a starting config for prek to wire in.
5. Make it required (optional, needs authorization)
Adding pr-title-lint's check name to a ruleset's required status checks is
gh-bootstrap's job, not this skill's. Hand off to gh-bootstrap for that
step, and require explicit user authorization before any ruleset write —
never add a required check to a live ruleset without asking first.
Before the check becomes required, tell the user about merge queues. If the
branch uses a merge queue, GitHub waits for each required check on the
merge_group event. A workflow without a merge_group trigger never
reports that check. The queue waits for the check, then drops the PR,
and the merge fails. Keep the merge_group trigger
and the job-level if from the template. If the user removed the trigger,
add it back before the check becomes required. Sources:
Managing a merge queue
and
Handling skipped but required checks.
6. Verify
Open (or ask the user to open) a pull request with a title that does not
match Conventional Commits, such as updated stuff, and confirm the
pr-title check fails with a clear error. Then retitle the PR to something
like fix: correct typo and confirm the check turns green.
What this skill is NOT for
- Configuring squash-only merging or
squash_merge_commit_title—gh-bootstrap - Adding the check name to a ruleset's required status checks —
gh-bootstrap - Cutting or publishing a release —
release - Local pre-commit or commit-message hooks —
prek
FAQ
What does the pr-title-lint skill do?
Add or verify CI enforcement of Conventional Commits pull request titles. Detects whether the repo squash-merges with the PR title as the commit subject, checks for an existing title check, scaffolds .github/workflows/pr-title.yml using amannn/action-semantic-pull-request at a pinned SHA, and verifies it fails a bad title and passes a good one. Use when the user says enforce conventional commit PR titles, lint PR titles, semantic pull request check, add a PR title check, or invokes /pr-title-lint. Do NOT use for switching a repo to squash-merge with PR-title commit messages (use gh-bootstrap for merge defaults and rulesets), cutting a release (use release), or local commit-message hooks (use prek).
How do I install pr-title-lint?
Run npx skills add https://github.com/paulnsorensen/git-gouda --skill pr-title-lint in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/pr-title-lint/ (personal) or .claude/skills/pr-title-lint/ (project).
Which AI agents can use pr-title-lint?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is pr-title-lint safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains pr-title-lint?
It is published by paulnsorensen in paulnsorensen/git-gouda. It has 53 recorded installs.
More from paulnsorensen/git-gouda
safe-settings
paulnsorensen/git-gouda
Set up GitHub's safe-settings (a Probot-based GitHub App from the github org) for declarative, org-wide repository policy as code. Use when the user says "settings as code", "safe-settings", "manage repos declaratively", "centralize repo settings", "org-level branch protection", "scaffold an admin repo", "github settings app", or invokes /safe-settings on an org that wants to manage repo settings, branch protection, rulesets, labels, teams, environments, and collaborators from one admin repo. Scaffolds the admin-repo layout (settings.yml + suborgs/ + repos/), the GitHub App installation steps, and a scheduled full-sync GitHub Actions workflow. Distinct from /gh-bootstrap (one-shot gh api config of a single repo) — this skill is for org-scale settings as code that reconciles continuously. Not for per-task GitHub ops (PRs, issues, CI status) or local git work — those are out of this catalog's scope.
config-review-bot
paulnsorensen/git-gouda
Audit or configure CodeRabbit repository review policy from effective sources. Use for CodeRabbit setup, configuration review, path coverage, or a specific pull-request review audit. Trigger on "configure CodeRabbit", "review .coderabbit.yaml", "set up CodeRabbit", "audit CodeRabbit settings", or "is CodeRabbit covering X". Keep audits read-only by default and separate schema validity, rule quality, and completed-review evidence. Do not use it to run a CodeRabbit CLI review or autofix, or to fix review comments on a pull request.
oss-hygiene
paulnsorensen/git-gouda
Bring an open-source GitHub repository up to community-standards and supply-chain hygiene baseline: scaffold the GitHub Community Standards files (README check, LICENSE, CODEOFCONDUCT, CONTRIBUTING, SECURITY, issue + PR templates), wire Dependabot version updates, the Dependency Review action, OpenSSF Scorecard, and CodeQL (when applicable), check Dependabot alerts and secret scanning, and add the OpenSSF Best Practices Badge link. Use when the user says "set up OSS hygiene", "make this repo open-source-ready", "add community health files", "wire dependabot", "add scorecard", "OSSF badge", "supply chain hardening", or invokes /oss-hygiene on a public repo. Idempotent — safe to re-run; diffs against templates and asks before overwriting. Distinct from /gh-bootstrap (merge-button + branch protection) and /safe-settings (org-scale settings as code): focuses on the contributor-facing and supply-chain surface, not merge or org policy. Run after /gh-bootstrap; before announcing the repo.
prek
paulnsorensen/git-gouda
Onboard prek (Rust-powered pre-commit) into any project and suggest hooks tailored to the language/framework. Use when the user says "add prek", "set up pre-commit hooks", "configure prek", "what hooks should I use", or when you notice a project without a prek.toml that would benefit from pre-commit checks. Also trigger when the user wants to add new hooks to an existing prek.toml, audit their hook config, or migrate from pre-commit to prek. Covers Rust, Python, TypeScript/JavaScript, Go, Ruby, and Shell projects. Do NOT use for husky, lint-staged, or CI pipeline hook configuration — this skill is specifically for prek.
gh-bootstrap
paulnsorensen/git-gouda
One-time GitHub repository configuration via the gh CLI: lock the default branch with PR and CI rules, optionally enable a supported merge queue, lock merging to squash-only with PR-title commit messages, scaffold automatically-generated release notes (.github/release.yml), and optionally add a tag-driven release workflow. Use when the user says "set up the repo", "configure the merge queue", "enable squash merging", "lock down main", "set up branch protection", "configure release notes", "scaffold releases", "set up release tagging", or invokes /gh-bootstrap on a fresh or loosely-configured GitHub repository. Idempotent — safe to re-run on already-configured repos to bring missing pieces in line. This skill covers one-time repo policy, not per-task GitHub operations, local git commands, or project task running.
github-copilot-repo-instructions
paulnsorensen/git-gouda
Add, audit, or fix GitHub Copilot repository custom instructions — .github/copilot-instructions.md (repo-wide) and .github/instructions/.instructions.md (path-specific) — so Copilot Chat, Copilot code review, and the Copilot coding agent all pick up project-wide guidance. Also covers AGENTS.md, CLAUDE.md, and GEMINI.md as alternate agent instruction files. Use when the user says "add Copilot instructions", "set up copilot-instructions.md", "audit our Copilot config", "make Copilot follow our conventions", "configure Copilot code review", "add path-specific Copilot rules", "applyTo glob", "excludeAgent", "Copilot is ignoring our guidance", or invokes /github-copilot-repo-instructions. Do NOT use for personal (per-user) Copilot instructions; those are out of scope for this skill. For AGENTS.md authoring guidance beyond file layout, see the agents-md skill.
Popular code quality & workflow skills
grill-me
mattpocock/skills
A relentless interview to sharpen a plan or design.
improve-codebase-architecture
mattpocock/skills
Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.
handoff
mattpocock/skills
Compact the current conversation into a handoff document for another agent to pick up.
domain-modeling
mattpocock/skills
Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.
codebase-design
mattpocock/skills
Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.
diagnosing-bugs
mattpocock/skills
Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.