github-writing-conventions
Conventions for GitHub-facing text — issue and PR narration, screenshots, title casing, cross-repo references, repo descriptions, and repo topics.
Skill by threeal
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/threeal-github-writing-conventions
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/github-writing-conventions
What's inside
- Skill name
github-writing-conventions- Description
- Conventions for GitHub-facing text — issue and PR narration, screenshots, title casing, cross-repo references, repo descriptions, and repo topics. TRIGGER - about to run `gh issue create`, `gh pr create`, `gh repo edit --description`, `gh repo edit --add-topic`, `gh repo edit --remove-topic`, or otherwise write an issue/PR body, a repo's About description or topics, or a comment referencing another repo's issue/PR.
- License
- MIT
- Instructions
- 81 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
This is on top of `prose-conventions`'s general rules for writing and editing prose. ## Naming vs. Linking References Backticks name something as an identifier — a repo, an issue/PR, a file — and are fine there whether or not that thing is linkable elsewhere. Whether a reference should also be clickable is a separate choice: match it to whether a click-through is wanted at that point in the text. An issue or PR link relies on GitHub's autolinking, which fires only on plain text, never inside a code span — so a clickable reference carries no backticks at all, not even around the number. A repo or file string never autolinks, so making one clickable takes an explicit markdown link. Write each form exactly as the examples below are formatted: - Naming an issue/PR: `` `threeal/action-starter#1076` ``'s CLAUDE.md implementation replaced... - Linking an issue/PR, same-repo: fixed by #44 - Linking an issue/PR, cross-repo: fixed by threeal/action-starter#1076, or by the full URL - Naming a repo: `` `threeal/nodejs-starter` ``'s CLAUDE.md still uses... - Linking a repo: see [threeal/nodejs-starter](https://github.com/threeal/nodejs-starter) - Naming a file: `` `src/main.ts` `` handles the entry point - Linking a file: see [`src/main.ts`](https://github.com/org/repo/blob/main/src/main.ts) Naming rather than linking an issue/PR fits a possessive phrase, or one already linked once in the same body. Never link cross-repo with a bare number like #44. Why: GitHub resolves it against the rendering repo, pointing at whatever issue or PR holds that number there — very likely the wrong thing. ## Issues Write an issue as narration led by background and rationale — what problem or gap prompted it, what's missing, confusing, or broken, and why that matters. The implementation gets barely any space: a sentence or two near the end, or folded into the closing line. When the issue adopts a change already tracked in another repo — typically a repo following up on its template — link that repo's issue or PR and don't restate its background or rationale. The narration goes to what's specific to this repo: why the change matters here, or how it differs. Why: like a PR's closing keyword, the link puts the original reasoning one click away; restating it buries the part only this issue can say. Prose is the default shape for that narrative, since most issues are one coherent problem description rather than a set of disjoint facts. Use a bullet list, code block, table, or section header wherever it separates genuinely distinct content more clearly than prose would — ordered steps, a short ranking, a before/after comparison, a snippet. The bar is whether the structure earns its place. ## Pull Requests Always write a meaningful description; never open a PR with an empty or near-empty body. Why: the point of asking Claude to open the PR is to spare the user writing it themselves. When the PR closes an issue, open with a closing keyword and reference (e.g. `Closes #44`), then don't restate that issue's background — a brief nod is enough, and the rest of the body goes to the changes actually made. Why: the keyword both closes the issue on merge and puts the full reasoning one click away. When the change differs from what its issue described — extra scope, a smaller change, or a different approach — say in the PR description what changed from the plan, why, and how the PR does it instead, and leave the issue as filed. Why: a reviewer reads the PR against its issue, and a difference with no explanation looks like a mistake. The PR is where the plan change gets recorded, so the issue stays an accurate record of what was known when it was filed. Justify a change by its own merit, and leave out follow-up work it enables but doesn't include. Why: pointing at future work frames the PR as a step toward something else, implying it needs that reason to be merged — which weakens a self-justifying change like a version bump whose own reason is already enough. Don't wrap the whole body in a lone `## Summary` header; write it as plain prose or bullets instead. Add section headers only when the body holds more than one distinct kind of content, such as a summary plus a test plan. Omit the test plan entirely unless a human has to verify something by hand — skip it when CI or a git hook already covers every relevant check, when the change has no runtime behavior to exercise, or when there's obviously nothing to test. Never include one just to say "N/A". ## Screenshots Neither `gh` nor the GitHub API can upload images into an issue or PR body or comment, so screenshots have to be dragged into the GitHub editor by the user. Make that step mechanical: - Save the image files in a `.screenshots/` directory at the repo root, named for what each one shows (`before-login.png`, `after-login.png`), and never commit them. - In the body or comment, put a visible placeholder wherever each image belongs, naming its exact file — e.g. `**[Drop .screenshots/before-login.png here]**`. - After opening the issue or PR, tell the user its placeholders are waiting for images, and that `.screenshots/` can be deleted once they're placed. Why: the dot-prefixed directory stays out of normal listings and goes away in one delete, and a placeholder naming its file leaves no guessing about which image goes where. ## Casing and Punctuation - PR title: capitalize the first letter — `Add login feature`, not `add login feature`. - Repo description: capitalize the first letter, and end with no period or other punctuation. A repo description is a single tagline, a sentence fragment rather than a full sentence. Commas can lightly join related qualities (`Fast, minimal HTTP router for Go`), and one `-` or `—` can join a name to a clarifying clause (`Zod — TypeScript-first schema validation`), but don't stack more than one separator. No emoji. These rules stop at the About text. A README opener is separate prose — no length limit, and its job is saying what the project actually does rather than fitting a tagline — so editing one is never a reason to bring the other in line with it. Why: the About text renders stripped of all surrounding context — sidebar, search results, social previews — which is what forces it into a single tagline; a README opener is read inside the project, with everything else there for context, so it carries none of those constraints. ## Topics Add a topic only for the repo's own purpose, and the language/framework/stack that purpose runs on. Why: topics exist for people to find and understand a repo at a glance, not to inventory everything it uses. A supporting tool or dependency — a test framework, a git hooks manager, a formatter, a CI provider — doesn't earn a topic just because the repo relies on it internally, no matter how central it is to the build. It earns one only when it's what the repo is about: `lefthook` on `setup-lefthook-action`, not on a repo that merely runs Lefthook as its hook manager. Topics don't need to match a parent or sibling repo's list, even under `repo-lineage-uniformity`. Why: that skill keeps shared config and docs uniform across a lineage, but a repo's topics describe itself, not its ancestry.
From threeal/.claude, MIT.
More from threeal/.claude
- 0.587score
repo-lineage-sync
threeal
Process for catching a threeal repo up with changes its lineage parent made since the last sync — where to start, how to pick and port each change, and when…
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
lefthook-conventions
threeal
Lefthook (lefthook.dev) git hook manager configuration — hook-level and job-level options, what piped/parallel/fail_on_changes actually do, and this repo's…
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
repo-lineage-uniformity
threeal
Keep shared config, docs, and structure uniform across the hierarchy of related threeal repos derived from one another.
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
tool-installation-conventions
threeal
Approved install commands for CLI tools per platform, and how to install one mid-task without blocking it.
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
vitest-conventions
threeal
Conventions for structuring and configuring Vitest test files — concurrency, describe grouping, and the options form for describe/test.
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
writing-claude-md-and-skills
threeal
What belongs in a CLAUDE.md versus a skill, how to write both effectively for Claude as the reader, and how to scope a skill — for home (`~/.claude`) or any…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
github-release-conventions
threeal
Conventions for GitHub releases — whether a change warrants one, the linked Announcements discussion, title, tag, and release notes format.
SkillAFreshness: A★ 1Claude Code +9 - 0.582score
ordering-conventions
threeal
How to choose where an entry goes when its order doesn't affect behavior — list items, config keys and entries, action inputs, paths, and similar.
SkillAFreshness: A★ 1Claude Code +9 - 0.579score
dependency-conventions
threeal
Conventions for choosing the version of a dependency or tool, in any ecosystem.
SkillAFreshness: A★ 1Claude Code +9 - 0.579score
nodejs-conventions
threeal
Conventions for Node.js source code, such as choosing between sync and async APIs.
SkillAFreshness: A★ 1Claude Code +9 - 0.576score
git-tag-conventions
threeal
Signing for git tags.
SkillAFreshness: A★ 1Claude Code +9 - 0.547score
config-versioning
threeal
Language/framework-agnostic guidance for designing config systems that stay backward compatible across code changes, and for writing config parsers that…
SkillBFreshness: B★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 16, 2026 (12 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/threeal/.claude
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from threeal
- 0.587score
repo-lineage-uniformity
threeal
Keep shared config, docs, and structure uniform across the hierarchy of related threeal repos derived from one another.
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
repo-lineage-sync
threeal
Process for catching a threeal repo up with changes its lineage parent made since the last sync — where to start, how to pick and port each change, and when…
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
lefthook-conventions
threeal
Lefthook (lefthook.dev) git hook manager configuration — hook-level and job-level options, what piped/parallel/fail_on_changes actually do, and this repo's…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
vitest-conventions
threeal
Conventions for structuring and configuring Vitest test files — concurrency, describe grouping, and the options form for describe/test.
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
tool-installation-conventions
threeal
Approved install commands for CLI tools per platform, and how to install one mid-task without blocking it.
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
writing-claude-md-and-skills
threeal
What belongs in a CLAUDE.md versus a skill, how to write both effectively for Claude as the reader, and how to scope a skill — for home (`~/.claude`) or any…
SkillAFreshness: A★ 1Claude Code +9
Cite this page
github-writing-conventions skill. Agent Mart. https://agentmart.dev/skills/threeal-github-writing-conventions (last updated 2026-10-24)