Contextual Commit Messages
yamadashy/repomix
Writes Conventional Commits whose bodies carry action lines recording the intent, decisions and constraints behind a change, not only what changed.
Write or improve high-signal PR merge commit messages and squash commit messages.
$ npx skills add mono/SkiaSharp --skill pr-commit-message -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mono/SkiaSharp pr-commit-message --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/mono/SkiaSharp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/pr-commit-message .claude/skills/pr-commit-message && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pr-commit-message" agent skill from https://github.com/mono/SkiaSharp/tree/main/.agents/skills/pr-commit-message into .claude/skills/pr-commit-message/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-commit-message", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/mono/SkiaSharp/tree/main/.agents/skills/pr-commit-messageType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add mono/SkiaSharp --skill pr-commit-message -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mono/SkiaSharp pr-commit-message --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mono/SkiaSharp.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/pr-commit-message .agents/skills/pr-commit-message && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pr-commit-message" agent skill from https://github.com/mono/SkiaSharp/tree/main/.agents/skills/pr-commit-message into .agents/skills/pr-commit-message/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-commit-message", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mono/SkiaSharp --skill pr-commit-message -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mono/SkiaSharp pr-commit-message --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mono/SkiaSharp.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/pr-commit-message .cursor/skills/pr-commit-message && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pr-commit-message" agent skill from https://github.com/mono/SkiaSharp/tree/main/.agents/skills/pr-commit-message into .cursor/skills/pr-commit-message/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-commit-message", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/mono/SkiaSharp.git --path .agents/skills/pr-commit-message--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add mono/SkiaSharp --skill pr-commit-message -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mono/SkiaSharp pr-commit-message --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mono/SkiaSharp.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/pr-commit-message .gemini/skills/pr-commit-message && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pr-commit-message" agent skill from https://github.com/mono/SkiaSharp/tree/main/.agents/skills/pr-commit-message into .gemini/skills/pr-commit-message/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-commit-message", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install mono/SkiaSharp pr-commit-messageInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add mono/SkiaSharp --skill pr-commit-message -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mono/SkiaSharp.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/pr-commit-message .github/skills/pr-commit-message && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pr-commit-message" agent skill from https://github.com/mono/SkiaSharp/tree/main/.agents/skills/pr-commit-message into .github/skills/pr-commit-message/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-commit-message", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mono/SkiaSharp --skill pr-commit-message -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mono/SkiaSharp pr-commit-message --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mono/SkiaSharp.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/pr-commit-message .opencode/skills/pr-commit-message && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pr-commit-message" agent skill from https://github.com/mono/SkiaSharp/tree/main/.agents/skills/pr-commit-message into .opencode/skills/pr-commit-message/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-commit-message", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pr-commit-messageWrite or improve high-signal PR merge commit messages and squash commit messages.
PR Commit Message is an agent skill from mono/SkiaSharp. Write or improve high-signal PR merge commit messages and squash commit messages. Use this whenever the user says "create a commit message for this PR", "write a merge commit message", "draft the squash commit body", "improve this commit message", or asks for a message that preserves the why behind a pull request. This skill inspects the PR, linked issues, and code changes so the final commit message is readable and useful from git history alone.
Its SKILL.md is about 5.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `evals/evals.json`).
It sits in Development, covering Commit messages. The repository describes itself as: SkiaSharp is a cross-platform 2D graphics API for .NET platforms based on Google's Skia Graphics Library. It provides a comprehensive 2D API that can be used across mobile… The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 51e2097. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
ghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
PR Commit Message loads about 5.3k tokens when it runs. Until then it costs about 117 tokens; SKILL.md has 2,903 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from mono/SkiaSharp at commit 51e2097, republished under its MIT licence (© mono). 2,903 words, ~5,287 tokens.
.claude/skills/pr-commit-message/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Write a historical record, not a diff summary. A future maintainer should be able to recover what changed, why it mattered, what failed or constrained the design, why this approach was chosen, and where the supporting evidence lives without reopening the PR.
Optimize for durable understanding, not assistant-response brevity. Remove repetition and development chronology, but preserve every independently useful root cause, design decision, compatibility rule, limitation, and proof point.
PR prose and early commit bodies often preserve useful history, but they can also preserve stale constraints, mistaken link interpretations, and superseded absolutes. Prevent those high-cost failures before drafting:
Missing context: line when the contributor's email cannot be verified.move, replace, remove, extract, migrate, or centralize,
verify that the departing component or behavior existed at the base. When both the source
and destination were introduced on the branch, describe the final net addition instead;
the intra-PR refactor is development chronology unless it explains a lasting constraint.Inspect at least:
Useful commands include:
gh pr view <number> --json number,title,body,url,commits,files,comments,reviews,closingIssuesReferences
gh api repos/<owner>/<repo>/pulls/<number>/comments --paginate
gh api repos/<owner>/<repo>/issues/<number>/comments --paginateUse the final diff and current head as the strongest evidence for shipped behavior. Use the PR base or a specific referenced revision for the old side of a before/after claim. Treat PR prose, commit bodies, review comments, and code comments as leads that still need verification.
For dependency or submodule pointers, separate the parent PR's intent from the range the pointer happens to cross. A required companion change or intentionally adopted dependency behavior can be relevant. Unrelated intervening commits are not parent-PR topics merely because the new pointer includes them; preserve the range with a compare link instead of narrating it.
Use these definitions before classifying the diff:
Walk every changed path and substantive hunk once. Map each coherent change to exactly one material topic, explicit decision under a named topic, or mechanical derivative under a named topic. A hunk is substantive when it changes runtime, build, packaging, test, or workflow behavior; an API or design decision; an emitted artifact; or rationale needed to maintain one of those. Build, project, packaging, workflow, and configuration changes are candidate topics just like source code.
For each material topic, record:
Then perform one history-only pass over the parent PR's commits, reviews, linked context, validation notes, and specifically adopted upstream changes. Capture information the final tree cannot explain by itself: the original failure, a rejected obvious alternative, a regression that changed the design, a compatibility exception, a review-found correction, or a measurement that governs how evidence should be read. Do not walk an entire traversed dependency range. Verify useful historical facts before adding them to the ledger.
Apply these boundary rules:
Use a counterfactual independence test before collapsing any candidate: if its correction were reverted while the proposed parent remained, would a distinct failure, constraint, or maintenance question return? If so, keep it as a material topic. A path is not a derivative merely because it supports the same feature; it must share the parent's why and correction. A shared goal or symptom category is not a shared root cause. Do not demote a candidate that passes the material-topic definition merely to shorten the message. If the returning problem shares the parent's why and lacks independent search intent, keep it as an explicit decision rather than promoting it.
After collapsing derivatives, choose the shape:
~~ Topic ~~ syntax.Every topic, explicit decision, and marked anchor gets one visible home. A section preserves its causal chain; naming a file or category is not coverage. Collapsing a derivative removes its separate heading, not useful evidence it contributes to the parent.
Use a counterfactual anchor test: retain the smallest observed fact that shows why the chosen design is necessary, why an obvious alternative is unsafe, or what made the evidence credible. Compress repetition, not the condition, counterexample, scope, or measurement that carries the proof.
Prefer the repository's established subject form:
[Area] Imperative summary (#PR)Area: imperative summary (#PR)Imperative summary (#PR) when no area prefix is establishedUse an imperative verb, identify the real subsystem when useful, preserve the established
area spelling, and avoid vague subjects such as Fix review comments or Misc changes.
Start the body with verified references. Use labels only for the relationship they express:
Fixes: for an issue the PR closesContext: for related issues, PRs, runs, announcements, documentation, URLs, or exact
commit SHAsRequires: for the immediate companion PR or dependency this change is built on and
cannot merge without. In a stack, that is the parent you actually build on; an earlier
ancestor in the same stack explains context but is not what this change requires, so it
belongs under Context:Changes: for dependency compare views or upstream rangesFetch every target. Do not convert a PR URL to an issue URL, call a related PR an issue, claim a PR is completed without evidence, or attach a correct URL to the wrong relationship.
Preserve the content expected for the kind of change:
For multiple topics, use this shape:
<imperative subject>
<verified reference lines>
<overview: what changes, why it matters, and the governing design>
~~ <material topic or failure mode 1> ~~
<symptom/need -> cause/constraint -> chosen change -> evidence>
* <optional explicit decision with cause, consequence, and anchor>
~~ <material topic or failure mode 2> ~~
<symptom/need -> cause/constraint -> chosen change -> evidence>
<trailers>Name sections after the actual problem or decision, not Changes or Implementation. A
component, file, or artifact category is not the decision either; prefer the boundary,
failure, or rule the section resolves. Lead the overview with the governing design rather
than with provenance or scope bookkeeping — where the work was extracted from is one fact
the message can state, not the reason the change exists.
Use bullets for explicit decisions inside a topic, not as a substitute for topic sections.
Keep exception snippets, logs, reference lists, and bullets in-family for the target
repository.
Hard-wrap ordinary prose with literal newline characters at the width observed in recent target-repository merge messages; SkiaSharp's established cap is 80 columns. Code fences and commit-message renderers do not add this formatting, so visual wrapping in a UI is not a substitute. Preserve constructs that should remain on one line: the subject when reasonable, reference and compare URLs, section markers, code or log lines, and attribution trailers. Indivisible tokens may exceed the cap. Reflow bullet continuations using the repository's established indentation.
Check the final draft by claim type:
move, replace, remove, extract,
migrate, and centralize. Verify the named old component in the PR base. If it existed
only in an earlier branch commit, rewrite the claim around the final base-to-head diff
rather than presenting local commit history as repository history.all, every, only, no, always, never,
exactly, counts, minimums, maximums, and inequality symbols. Record the search universe
and check the complete relevant set, including generated or aggregate surfaces, for an
outlier. Narrow or remove the qualifier when any counterexample exists.For the current PR and any related or superseded PR whose implementation or adopted human feedback is carried forward, combine:
.commits[].authors[] entry, including the primary PR authorCo-authored-by: trailer in each commit messageBodyFor each current, related, or superseded PR in scope, fetch issue comments, reviews, and inline review comments rather than checking only the current PR. Deduplicate case-insensitively by email. If the same display name used two distinct recorded emails, retain both.
Accept a (name, email) pair only when that exact email appears in a relevant commit author
entry, a co-author trailer, or the non-null email field returned by
gh api users/<login>. Never infer an address from a name or organization, construct a
GitHub noreply address, or mine unrelated commits. A trailer your own environment or house
style would normally append is not evidence either; it belongs here only when this PR's own
commits record it. If a contributing human reviewer has no verified email, omit the trailer
and report:
Missing context: verified email for @loginA dependency author is not a parent-PR co-author merely because a pointer traverses their commit. Credit copied or cherry-picked work only when authorship is preserved or an allowed parent-PR source records it. Exclude routine automation identities, including dependency updaters and automated review accounts; they are not missing human contributors. Include coding agents when they authored code or appear in a co-author trailer.
Every eligible candidate in the resulting attribution map must appear exactly once in the
trailers, or in Missing context: when a contributing human lacks a verified email. Trailers
are part of the commit message, so place them inside the fenced block at the end after a
blank line, one per line; only Missing context: lines belong outside the fence.
After drafting and attribution, confirm:
section count == material-topic count whenever that count is two or more.text block with only the polished commit
message; it has no introduction, explanation, summary, or other response prose.After these checks pass, return the fenced message. Put any required Missing context:
lines after the closing fence so they are not copied into the commit message.
© mono, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in .agents/skills/pr-commit-message of mono/SkiaSharp.
Open the folder on GitHubat commit 51e2097
PR Commit Message next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| PR Commit Message this skillmono/SkiaSharp | 5.6k | — | ~5.3k | Automated safety check: Pass | MIT | |
| Contextual Commit Messagesyamadashy/repomix | 29k | 1 repos | ~2.7k | Automated safety check: Pass | MIT | |
| React Router Release Notes Prepremix-run/react-router | 57k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Caveman Commitvishiri/fantasia-archive | 409 | 13 repos | ~642 | Automated safety check: Pass | GPL-3.0 | |
| PR Finalize Reviewmicrosoft/garnet | 12k | — | ~3.1k | Automated safety check: Pass | MIT | |
| ToolJet Multi-Repo CommitToolJet/ToolJet | 41k | — | ~1.3k | Automated safety check: Pass | AGPL-3.0 |
yamadashy/repomix
Writes Conventional Commits whose bodies carry action lines recording the intent, decisions and constraints behind a change, not only what changed.
remix-run/react-router
Polishes pending React Router change files before the versioning scripts run, and decides whether a long-form What's Changed section is warranted.
vishiri/fantasia-archive
Ultra-compressed commit message generator. An agent skill from vishiri/fantasia-archive.
microsoft/garnet
Checks that a pull request's title and description match its implementation and reviews the code for Garnet best practices, reporting findings without posting them.
ToolJet/ToolJet
Commits changes across ToolJet's root repo and its server/ee and frontend/ee submodules, writing messages from the diffs and updating submodule pointers in order.
addyosmani/agent-skills
Sets git habits for every change: short-lived branches, atomic commits with descriptive messages, clean pull requests, plus versioning, tagging and changelogs for releases.
mono/SkiaSharp
Fix bugs in SkiaSharp C bindings. An agent skill from mono/SkiaSharp.
mono/SkiaSharp
Reproduce a SkiaSharp issue systematically and capture structured reproduction results.
mono/SkiaSharp
Triage a SkiaSharp GitHub issue or PR into structured JSON with classification (type, area, platform, severity), suggested response, automatable actions, and companion Markdown/HTML reports.
mono/SkiaSharp
Update native dependencies (libpng, libexpat, zlib, libwebp, harfbuzz, freetype, libjpeg-turbo, etc.) in SkiaSharp's Skia fork.
mono/SkiaSharp
Review a Skia upstream merge PR in mono/skia. An agent skill from mono/SkiaSharp.
mono/SkiaSharp
Scout Skia GM (golden master) samples in the externals/skia submodule to find demos worth porting to the SkiaSharp Gallery.
Categories
Write or improve high-signal PR merge commit messages and squash commit messages. PR Commit Message is an agent skill from mono/SkiaSharp. Write or improve high-signal PR merge commit messages and squash commit messages.
PR Commit Message fits situations like: says create a commit message for this PR; write a merge commit message; draft the squash commit body; improve this commit message.
Run `npx skills add mono/SkiaSharp --skill pr-commit-message -a claude-code`. Or copy the skill folder (.agents/skills/pr-commit-message in mono/SkiaSharp) into .claude/skills/pr-commit-message in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mono/SkiaSharp --skill pr-commit-message -a codex`. Or copy the skill folder (.agents/skills/pr-commit-message in mono/SkiaSharp) into .agents/skills/pr-commit-message in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mono/SkiaSharp --skill pr-commit-message -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pr-commit-message, .gemini/skills/pr-commit-message, .github/skills/pr-commit-message and .opencode/skills/pr-commit-message in your project.
Going by SKILL.md and its folder, PR Commit Message needs the command-line tools its instructions call (gh).
SKILL.md contains no URLs. Its commands use gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
PR Commit Message is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.3k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with PR Commit Message: Contextual Commit Messages (yamadashy/repomix, 29k stars), React Router Release Notes Prep (remix-run/react-router, 57k stars), Caveman Commit (vishiri/fantasia-archive, 409 stars) and PR Finalize Review (microsoft/garnet, 12k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mono (a GitHub organization) maintains it in mono/SkiaSharp, which has 5,585 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 8, 2026.
Source: mono/SkiaSharp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.