Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Shared writing style rules for GitHub-facing output (PR comments, PR descriptions, PR titles, issues, design proposals). Differentiates insider vs outsider voice based on author association. Not typically invoked directly — loaded by other skills before composing GitHub text.
.claude/skills/tobihagemann-github-voice/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-15 | ✗→✓ | ▲ Improved | 51% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 116% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 87% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 133% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 181% | 0% |
—) or double hyphens (--) used as dashes. Use periods, commas, colons, or restructure the sentence.1. [ ]) renders exactly like - [ ] with no visible numbers. Use - [ ] for checklists and let item order carry the sequence. When the reader needs the numbers, write them into the item text.Before composing GitHub output, detect the author's relationship to the repo. For an existing PR or issue, check author_association on that object:
bashgh api repos/<owner>/<repo>/issues/<number> --jq '.author_association'
When no artifact exists yet, check your own access on the repo the artifact will be filed against, which is the PR base or the issue target. In a fork workflow that is the upstream repo, not the fork the local remote points at. true means insider:
bashgh api repos/<owner>/<repo> --jq '.permissions.push'
Write as a teammate. No third-person references to the team you're on, no deferential offers. State things directly.
Skip context the teammate already has. Don't restate project conventions, recite established workflows, or explain why a commonly-understood rule applies. A reply like "Fixed in <sha>." or "Reverted in <sha>." is often all that's needed. Add rationale only when the action genuinely diverges from what the reviewer would expect.
Write as an outside contributor. Referring to "the project" or "the maintainers" is natural. Deferring to maintainer preferences is appropriate.
If the relationship cannot be determined, default to outsider voice.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-15 | fail→pass | 10,907 | 8,800 | -19% | 1 | 1 | 0% | 1,861 | 2,811 | +51% | 0 | 0 | — |
case-01 | fail→pass | 4,749 | 34,834 | +634% | 1 | 1 | 0% | 828 | 1,787 | +116% | 0 | 0 | — |
case-02 | fail→fail | 7,440 | 7,788 | +5% | 1 | 1 | 0% | 1,214 | 2,422 | +100% | 0 | 0 | — |
case-03 | fail→fail | 13,242 | 6,538 | -51% | 1 | 1 | 0% | 2,196 | 2,048 | -7% | 0 | 0 | — |
case-04 | fail→pass | 7,473 | 8,158 | +9% | 1 | 1 | 0% | 1,295 | 2,427 | +87% | 0 | 0 | — |
case-05 | fail→fail | 8,610 | 20,518 | +138% | 1 | 1 | 0% | 1,491 | 2,140 | +44% | 0 | 0 | — |
case-06 | pass→pass | 14,457 | 9,137 | -37% | 1 | 1 | 0% | 2,985 | 2,803 | -6% | 0 | 0 | — |
case-07 | fail→pass | 10,721 | 16,970 | +58% | 1 | 1 | 0% | 1,907 | 4,437 | +133% | 0 | 0 | — |
case-08 | fail→fail | 4,180 | 8,889 | +113% | 1 | 1 | 0% | 771 | 2,882 | +274% | 0 | 0 | — |
case-09 | fail→pass | 4,530 | 7,286 | +61% | 1 | 1 | 0% | 863 | 2,426 | +181% | 0 | 0 | — |
case-16 | pass→fail | 9,052 | 3,593 | -60% | 1 | 1 | 0% | 1,565 | 1,666 | +6% | 0 | 0 | — |
case-10 | pass→pass | 7,113 | 5,299 | -26% | 1 | 1 | 0% | 1,327 | 2,072 | +56% | 0 | 0 | — |
case-11 | fail→fail | 9,282 | 23,129 | +149% | 1 | 1 | 0% | 1,527 | 5,412 | +254% | 0 | 0 | — |
case-12 | fail→pass | 4,846 | 7,353 | +52% | 1 | 1 | 0% | 914 | 2,519 | +176% | 0 | 0 | — |
case-13 | fail→pass | 4,181 | 2,022 | -52% | 1 | 1 | 0% | 851 | 1,314 | +54% | 0 | 0 | — |
case-14 | fail→pass | 7,113 | 2,743 | -61% | 1 | 1 | 0% | 1,557 | 1,444 | -7% | 0 | 0 | — |
case-17 | pass→pass | 5,984 | 8,185 | +37% | 1 | 1 | 0% | 1,128 | 2,572 | +128% | 0 | 0 | — |
case-18 | pass→pass | 36,655 | 12,899 | -65% | 1 | 1 | 0% | 6,678 | 3,218 | -52% | 0 | 0 | — |
case-19 | fail→pass | 8,601 | 7,247 | -16% | 1 | 1 | 0% | 1,583 | 2,347 | +48% | 0 | 0 | — |
case-20 | pass→pass | 6,180 | 5,123 | -17% | 1 | 1 | 0% | 1,168 | 1,806 | +55% | 0 | 0 | — |
case-21 | pass→pass | 6,129 | 4,804 | -22% | 1 | 1 | 0% | 1,047 | 1,822 | +74% | 0 | 0 | — |
case-22 | pass→fail | 6,335 | 4,507 | -29% | 1 | 1 | 0% | 1,087 | 1,799 | +66% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +32 percentage points is the difference between those two pass rates over the 22 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/21/2026 | +36% |
Other measured skills in the registry, with their headline benchmark lift.