{"id":"c10ef39a-c362-4386-b726-e3db48343167","shortId":"cRza9E","kind":"skill","title":"github-voice","tagline":"Shared writing style rules for GitHub-facing output (PR comments, PR descriptions, PR titles). Differentiates insider vs outsider voice based on author association. Not typically invoked directly — loaded by other skills before composing GitHub text.","description":"# GitHub Voice\n\n## Writing Style\n\n- No em dashes (`—`) or double hyphens (`--`) used as dashes. Use periods, commas, colons, or restructure the sentence.\n- Write in a natural, human tone. Avoid stiff or formal phrasing.\n- Don't over-explain. Say what needs saying, then stop.\n- Sound like the author, not like an AI assistant.\n- Never attribute session-internal work to its tooling. Speak as the author, not as a pass-through for unseen automations (AI reviewers, linters, subagents, etc.). The recipient doesn't know about these tools.\n- Soften opinions when asking questions. Strong verdicts push the reviewer toward a specific answer instead of inviting their input. Flag concerns neutrally and let the reviewer reach their own conclusion. Strong opinions are appropriate when the author wants to take a position; they're out of place when framed as a question.\n\n## Voice by Author Association\n\nBefore composing GitHub output, detect the author's relationship to the repo. For PRs, check `author_association` on the PR object:\n\n```bash\ngh api repos/{owner}/{repo}/pulls/{number} --jq '.author_association'\n```\n\n### Insider (OWNER, MEMBER, COLLABORATOR)\n\nWrite as a teammate. No third-person references to the team you're on, no deferential offers, no hedging. State things directly.\n\nSkip 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.\n\n### Outsider (CONTRIBUTOR, FIRST_TIME_CONTRIBUTOR, FIRST_TIMER, NONE)\n\nWrite as an outside contributor. Referring to \"the project\" or \"the maintainers\" is natural. Deferring to maintainer preferences is appropriate.\n\nIf the association cannot be determined, default to outsider voice.","tags":["github","voice","turbo","tobihagemann","agent-skills","claude-code","claude-skills","developer-tools","skills"],"capabilities":["skill","source-tobihagemann","skill-github-voice","topic-agent-skills","topic-claude-code","topic-claude-skills","topic-developer-tools","topic-skills"],"categories":["turbo"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/tobihagemann/turbo/github-voice","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add tobihagemann/turbo","source_repo":"https://github.com/tobihagemann/turbo","install_from":"skills.sh"}},"qualityScore":"0.590","qualityRationale":"deterministic score 0.59 from registry signals: · indexed on github topic:agent-skills · 280 github stars · SKILL.md body (1,901 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T00:54:09.885Z","embedding":null,"createdAt":"2026-04-18T22:03:47.422Z","updatedAt":"2026-04-22T00:54:09.885Z","lastSeenAt":"2026-04-22T00:54:09.885Z","tsv":"'/pulls':210 'action':284 'add':279 'ai':90,114 'alreadi':246 'answer':140 'api':206 'appli':264 'appropri':160,320 'ask':130 'assist':91 'associ':27,182,199,214,323 'attribut':93 'author':26,86,104,163,181,189,198,213 'autom':113 'avoid':67 'base':24 'bash':204 'cannot':324 'check':197 'collabor':218 'colon':56 'comma':55 'comment':14 'common':261 'commonly-understood':260 'compos':37,184 'concern':147 'conclus':156 'context':243 'contributor':294,297,305 'convent':252 'dash':46,52 'default':327 'defer':315 'deferenti':235 'descript':16 'detect':187 'determin':326 'differenti':19 'direct':31,241 'diverg':286 'doesn':121 'doubl':48 'em':45 'establish':254 'etc':118 'expect':292 'explain':76,257 'face':11 'first':295,298 'fix':268 'flag':146 'formal':70 'frame':175 'genuin':285 'gh':205 'github':2,10,38,40,185 'github-fac':9 'github-voic':1 'hedg':238 'human':65 'hyphen':49 'input':145 'insid':20,215 'instead':141 'intern':96 'invit':143 'invok':30 'jq':212 'know':123 'let':150 'like':84,88,267 'linter':116 'load':32 'maintain':312,317 'member':217 'natur':64,314 'need':79,278 'neutral':148 'never':92 'none':300 'number':211 'object':203 'offer':236 'often':274 'opinion':128,158 'output':12,186 'outsid':22,293,304,329 'over-explain':74 'owner':208,216 'pass':109 'pass-through':108 'period':54 'person':226 'phrase':71 'place':173 'posit':168 'pr':13,15,17,202 'prefer':318 'project':251,309 'prs':196 'push':134 'question':131,178 'rational':280 're':170,232 'reach':153 'recipi':120 'recit':253 'refer':227,306 'relationship':191 'repli':266 'repo':194,207,209 'restat':250 'restructur':58 'revert':271 'review':115,136,152,290 'rule':7,263 'say':77,80 'sentenc':60 'session':95 'session-intern':94 'share':4 'skill':35 'skill-github-voice' 'skip':242 'soften':127 'sound':83 'source-tobihagemann' 'speak':101 'specif':139 'state':239 'stiff':68 'stop':82 'strong':132,157 'style':6,43 'subag':117 'take':166 'team':230 'teammat':222,245 'text':39 'thing':240 'third':225 'third-person':224 'time':296 'timer':299 'titl':18 'tone':66 'tool':100,126 'topic-agent-skills' 'topic-claude-code' 'topic-claude-skills' 'topic-developer-tools' 'topic-skills' 'toward':137 'typic':29 'understood':262 'unseen':112 'use':50,53 'verdict':133 'voic':3,23,41,179,330 'vs':21 'want':164 'work':97 'workflow':255 'would':291 'write':5,42,61,219,301","prices":[{"id":"d1a59ecf-7869-49e5-b785-9f8eba468ec6","listingId":"c10ef39a-c362-4386-b726-e3db48343167","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"tobihagemann","category":"turbo","install_from":"skills.sh"},"createdAt":"2026-04-18T22:03:47.422Z"}],"sources":[{"listingId":"c10ef39a-c362-4386-b726-e3db48343167","source":"github","sourceId":"tobihagemann/turbo/github-voice","sourceUrl":"https://github.com/tobihagemann/turbo/tree/main/skills/github-voice","isPrimary":false,"firstSeenAt":"2026-04-18T22:03:47.422Z","lastSeenAt":"2026-04-22T00:54:09.885Z"}],"details":{"listingId":"c10ef39a-c362-4386-b726-e3db48343167","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"tobihagemann","slug":"github-voice","github":{"repo":"tobihagemann/turbo","stars":280,"topics":["agent-skills","claude-code","claude-skills","developer-tools","skills"],"license":"mit","html_url":"https://github.com/tobihagemann/turbo","pushed_at":"2026-04-21T12:22:12Z","description":"A composable dev process for Claude Code, packaged as modular skills.","skill_md_sha":"41f1932c5209383ddc322bea18309d69fb8c1a24","skill_md_path":"skills/github-voice/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/tobihagemann/turbo/tree/main/skills/github-voice"},"layout":"multi","source":"github","category":"turbo","frontmatter":{"name":"github-voice","description":"Shared writing style rules for GitHub-facing output (PR comments, PR descriptions, PR titles). Differentiates insider vs outsider voice based on author association. Not typically invoked directly — loaded by other skills before composing GitHub text."},"skills_sh_url":"https://skills.sh/tobihagemann/turbo/github-voice"},"updatedAt":"2026-04-22T00:54:09.885Z"}}