
Github
- 56 installs
- 15 repo stars
- Updated May 31, 2026
- bntvllnt/agent-skills
GitHub is a Claude Code skill that manages GitHub via the gh CLI - repos, issues, pull requests, Actions, releases, secrets, projects, gists, and API access.
About
GitHub is a Claude skill that operates GitHub through the gh CLI. It routes intents to references for repos, issues, pull requests, Actions workflows, CI monitoring, releases, secrets and variables, projects, gists, search, and raw gh api access. Developers use it to triage issues, create and review PRs, watch CI, and publish releases. Read-only commands run freely while state-changing operations require confirmation.
- Drives GitHub via the gh CLI: repos, issues, PRs, Actions, releases, secrets, projects, gists
- CI monitoring with live polling and a PR dashboard with status classification
- Confirmation policy gates every create/edit/delete/merge and mutating gh api call
Github by the numbers
- 56 all-time installs (skills.sh)
- Ranked #286 of 733 Git & Pull Requests skills by installs in the Skillselion catalog
- Data as of Jul 31, 2026 (Skillselion catalog sync)
github capabilities & compatibility
- Capabilities
- git · pr review · ci monitor · release management
- Works with
- github
- Use cases
- code review · ci cd
What github says it does
Manage GitHub via GitHub CLI (gh): repos, issues, pull requests, Actions, releases,
Confirm before any state-changing operation (create/edit/delete/merge/close).
Requires GitHub CLI (gh) and authentication (gh auth login or GH_TOKEN). Targets GitHub-hosted repos.
npx skills add https://github.com/bntvllnt/agent-skills --skill githubAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 56 |
|---|---|
| repo stars | ★ 15 |
| Last updated | May 31, 2026 |
| Repository | bntvllnt/agent-skills ↗ |
What it does
Manage GitHub repos, issues, PRs, Actions, CI status, releases, and secrets through the gh CLI with confirmation on any write.
Who is it for?
Developers driving GitHub from the CLI who want gated writes and CI/PR dashboards.
When should I use this skill?
The user mentions gh, github cli, an issue, a pull request, github actions, ci status, a release, or a secret.
What you get
Consistent GitHub operations where reads are free and every write is confirmed first.
By the numbers
- 16-row intent router table
Files
GitHub
GitHub operations via gh.
Router
| User says | Load reference | Do |
|---|---|---|
| help / gh help / flags / options | references/cli-help.md | show CLI help safely |
| auth / login / token | references/auth.md | authenticate gh |
| repo / clone / fork / sync | references/repo.md | repository operations |
| issue / issues | references/issue.md | issue triage and management |
| pr / pull request / review | references/pr.md | PR create/review/merge workflows |
| actions / workflow / run | references/actions.md | GitHub Actions (workflows + runs) |
| ci / monitor ci / check ci / ci status / watch ci | references/ci-monitor.md | monitor CI checks with live polling (if user says bare "ci", ask: monitor checks or view workflows?) |
| pr dashboard / pr overview / open prs / my prs / pr status | references/pr-dashboard.md | PR overview with status classification |
| release / publish release | references/release.md | releases + assets + verification |
| release strategy / release format / versioning | references/release-strategy.md | versioning, title/description format, generation protocol |
| secrets / variables | references/secrets-vars.md | manage secrets and variables |
| project | references/projects.md | projects operations |
| gist | references/gists.md | gist operations |
| search | references/search.md | search repos/issues/prs/code |
| api | references/api.md | gh api (advanced) |
| extension | references/extensions.md | manage gh extensions |
| config | references/config.md | gh config basics |
Safety Rules
- Confirm before any state-changing operation (create/edit/delete/merge/close).
- Never upload secrets as assets.
- Treat
gh apias powerful: confirm before any write operation. - Never delete or move published releases/tags unless explicitly requested.
- When creating PRs, always set an assignee: default to
@meunless the user explicitly names someone else. - When creating PRs, apply relevant existing labels when possible; auto-pick from PR context (title/body/branch + changed paths) and avoid creating new labels unless truly necessary.
- If labels must be created, retrieve existing labels first (
gh label list), propose the minimal set consistent with repo naming, and confirm beforegh label create.
Confirmation Policy
Read-only commands are always OK.
Require confirmation:
gh issue create/edit/close/reopen/deletegh pr create/edit/close/merge/reviewgh repo create/edit/rename/archive/delete/syncgh release create/edit/delete,gh release upload,gh release delete-assetgh secret set/delete,gh variable set/deletegh run rerun,gh run cancelgh apicalls that mutate state (POST/PATCH/PUT/DELETE)
Read-Only (No Confirmation Needed)
gh auth status
gh release list
gh release view <tag>
gh release view <tag> --web
gh help
gh pr checks <number> --json ...
gh run list --branch <branch> --json ...
gh run view <run-id>
gh run view <run-id> --log-failedGitHub
GitHub skill using GitHub CLI (gh): repos, issues, pull requests, Actions, releases, and more.
Quick Start
- Home/router:
github/SKILL.md - Auth:
github/references/auth.md - Repos:
github/references/repo.md - Issues:
github/references/issue.md - PRs:
github/references/pr.md - Actions:
github/references/actions.md - Releases:
github/references/release.md - Release strategy + naming + preview guidance:
github/references/release-strategy.md - Advanced API:
github/references/api.md
Release deep dives:
- Create:
github/references/release-create.md - Manage:
github/references/release-manage.md - Assets:
github/references/release-assets.md
Use github/references/release-strategy.md for title quality, dominant-change selection, release-note opening lines, and GitHub preview / OG-image considerations.
Requirements
gh(GitHub CLI)- Authenticated session:
gh auth login
Install
npx skills add bntvllnt/agent-skills --skill githubManual install (download this folder only):
- Copy the
github/folder into your agent's skills directory. - Ensure the folder name is
githuband includesSKILL.md.
Actions (gh workflow / gh run)
List workflows:
gh workflow listView a workflow:
gh workflow view <workflow>Run a workflow (confirm first):
gh workflow run <workflow>List runs:
gh run listView a run:
gh run view <run-id>Download artifacts:
gh run download <run-id>Rerun or cancel (confirm first):
gh run rerun <run-id>
gh run cancel <run-id>API (gh api)
gh api is powerful and can mutate GitHub state. Confirm before any write.
Read-only example
gh api repos/OWNER/REPONotes
- Prefer the dedicated
ghsubcommands (issue/pr/release/repo) when they exist. - Use
-R OWNER/REPOwith other commands instead of hardcoding URLs.
Authentication (gh)
Goal: ensure gh is authenticated for the correct host/account.
Read-only checks
gh auth statusInteractive login
gh auth loginNotes (from the official gh docs):
- Default host is
github.com; enterprise hosts can be selected with--hostname. - For headless/automation,
ghcan use tokens from environment variables (seegh help environment).
Example: authenticate to a specific host:
gh auth login --hostname enterprise.internalSafety
- Never paste tokens into logs or commit them.
- Prefer
gh auth loginbrowser flow when possible.
CI Monitor
Monitor CI check status for a PR or branch with live polling.
Trigger
ci, monitor ci, check ci, ci status, watch ci
Workflow
1. Resolve Target
Determine what to monitor. Try in order:
1. User provided PR number → use it 2. User provided branch → find latest run for that branch 3. Neither → auto-detect current branch, then find its PR or latest run
# Current branch:
git branch --show-current
# Find PR for current branch:
gh pr view --json number,headRefName --jq '.number'
# If PR exists:
gh pr checks <number> --json name,bucket,startedAt,completedAt,link,workflow
# If no PR (branch-only):
gh run list --branch <branch> --limit 5 --json status,conclusion,name,databaseId,url2. Poll Loop
Poll every 30s. Max duration: 10 minutes. Each iteration: fetch status, display table.
┌─────────────────────────────────────────────────────┐
│ CI STATUS — PR #42 │
├─────────────────────────────────────────────────────┤
│ Branch: feature/auth-middleware │
│ PR: https://github.com/owner/repo/pull/42 │
│ Poll: 30s interval | 1m30s elapsed | 10m max │
└─────────────────────────────────────────────────────┘
Check Status Duration
─────────────── ──────────── ────────
lint PASS 12s
typecheck PASS 28s
test-unit IN_PROGRESS 1m02s
test-e2e QUEUED —
Links:
lint: <link field from gh pr checks>
typecheck: <link field from gh pr checks>
test-unit: <link field from gh pr checks>
test-e2e: <link field from gh pr checks>Status: QUEUED | IN_PROGRESS | PASS | FAIL | SKIPPED
URL Rules
All URLs MUST be real values from gh JSON output. Never fabricate or construct URLs.
| Source command | URL field |
|---|---|
gh pr checks --json link | link — points to the check run |
gh run list --json url | url — points to the workflow run |
gh pr list --json url | url — points to the PR page |
3. Exit Conditions
| Condition | Action |
|---|---|
| All checks complete (pass/fail/skipped) | Show final summary |
| Timeout reached | Report PENDING |
| User interrupt | Stop immediately |
4. Final Summary
On success:
CI RESULT: PASS — 4/4 checks green (2m14s)
PR: https://github.com/owner/repo/pull/42On failure — list each failed check with its link value, then auto-fetch logs:
CI RESULT: FAIL — 1/4 checks failed
FAILED:
test-e2e <link value from gh pr checks>
Logs (last 50 lines of failed output):
─────────────────────────────────────
[truncated output from gh run view <run-id> --log-failed]
─────────────────────────────────────Auto-fetch failed logs via gh run view <run-id> --log-failed.
5. Retry (Confirm First)
Only if user asks. This is a write operation — confirm before running.
gh run rerun <run-id>Then resume polling loop.
Defaults
| Parameter | Default | Range |
|---|---|---|
| Poll interval | 30s | 10s–120s |
| Max duration | 10min | 1min–30min |
| Failed log lines | 50 | 10–200 |
Read-Only (No Confirmation)
gh pr checks <number> --json ...
gh run list --branch <branch> --json ...
gh run view <run-id>
gh run view <run-id> --log-failedWrite (Confirm First)
gh run rerun <run-id>
gh run cancel <run-id>CLI Help (gh)
Goal: show the official CLI help for a command.
These commands are read-only.
gh help
gh help release
gh help authPer-command flag help:
gh release create --help
gh release edit --help
gh release upload --help
gh release download --help
gh release verify --help
gh auth login --helpConfig (gh config)
List configuration:
gh config listGet/set (confirm first for set):
gh config get <key>
gh config set <key> <value>Extensions (gh extension)
List extensions:
gh extension listBrowse available extensions:
gh extension browseInstall/remove (confirm first):
gh extension install OWNER/REPO
gh extension remove <name>Gists (gh gist)
Create:
gh gist create <file>List:
gh gist listView:
gh gist view <id>
gh gist view <id> --webIssues (gh issue)
List issues:
gh issue listView an issue:
gh issue view <number>
gh issue view <number> --webCreate:
gh issue createComment:
gh issue comment <number> --body "<comment>"Close / reopen (confirm first):
gh issue close <number>
gh issue reopen <number>PR Dashboard
Overview of all open PRs with status classification and next actions.
Trigger
pr dashboard, pr overview, open prs, my prs, pr status
Workflow
1. Fetch Open PRs
# Default: current user's PRs
gh pr list --state open --author "@me" \
--json number,title,state,isDraft,author,labels,reviewRequests,reviewDecision,statusCheckRollup,updatedAt,comments,url
# All authors (user says "all prs" or "team prs"):
gh pr list --state open \
--json number,title,state,isDraft,author,labels,reviewRequests,reviewDecision,statusCheckRollup,updatedAt,comments,url2. Classify Each PR
Priority order (show highest priority classification per PR):
| Status | Condition | Priority |
|---|---|---|
| Ready | reviewDecision=APPROVED + all checks pass | 1 |
| CI Fail | Any check failed | 2 |
| Changes | reviewDecision=CHANGES_REQUESTED | 3 |
| Review | No reviews yet, not draft | 4 |
| Draft | isDraft=true | 5 |
| Stale | No activity >7 days (any state) | 6 |
3. Output — Summary + Table
┌────────────────────────────────────────────────────┐
│ PR DASHBOARD │
├────────────────────────────────────────────────────┤
│ Repo: owner/repo │
│ Total: 5 open (1 ready, 1 failing, 1 review, │
│ 1 draft, 1 stale) │
└────────────────────────────────────────────────────┘
PR Title Status CI Age Action
───── ────────────────────── ──────── ───── ─── ─────────────────────
#27 Add caching Ready PASS 1d Merge now
#38 Fix rate limiter Approved FAIL 5d Fix CI then merge
#29 Refactor auth Changes PASS 3d Address feedback
#42 Add auth middleware Review PASS 2d Request reviewer
#35 Update docs Draft — 8d Stale — finish or close
Links:
#27 <url from gh pr list>
#38 <url from gh pr list>
#29 <url from gh pr list>
#42 <url from gh pr list>
#35 <url from gh pr list>Table sorted by priority (most actionable at top).
4. Per-PR Detail
For PRs with CI failures, fetch check details to get clickable failure links:
gh pr checks <number> --json name,state,link,bucketShow for each PR that needs action:
#42 — Add auth middleware
URL: <url from gh pr list>
Author: @me
Labels: enhancement, backend
Reviews: 0/1 required
CI: 3/3 passed
Updated: 2 days ago
Action: Request review from @teammate
#38 — Fix rate limiter
URL: <url from gh pr list>
Author: @me
Labels: bug
Reviews: 1/1 approved
CI: 2/4 failed
Failed: test-e2e <link from gh pr checks>
lint <link from gh pr checks>
Updated: 5 days ago
Action: Fix CI, then merge5. Action Map
| Status | Action | Offer |
|---|---|---|
| Ready | Merge now | gh pr merge <number> |
| CI Fail | Fix CI | Run CI monitor (references/ci-monitor.md) |
| Changes | Address feedback | Show review comments |
| Review | Request reviewer | gh pr edit --add-reviewer <user> |
| Draft | Finish or mark ready | gh pr ready <number> |
| Stale | Update or close | gh pr close <number> |
URL Rules
All URLs MUST be real values from gh JSON output. Never fabricate or construct URLs.
| Source command | URL field |
|---|---|
gh pr list --json url | url — points to the PR page |
gh pr checks --json link | link — points to the check run |
Flags
| Flag | Default | Description |
|---|---|---|
--author | @me | Filter by author. "" for all |
--include-drafts | yes | Include draft PRs |
Read-Only (No Confirmation)
gh pr list --state open --json ...
gh pr checks <number> --json ...
gh pr view <number> --json ...Write (Confirm First)
gh pr merge <number>
gh pr close <number>
gh pr ready <number>
gh pr edit <number> --add-reviewer <user>Pull Requests (gh pr)
List PRs:
gh pr listView PR:
gh pr view <number>
gh pr view <number> --comments
gh pr view <number> --webCreate PR (always assign; label when possible):
Prefer a two-step flow so PR creation never fails if a label doesn't exist:
gh pr create --assignee "@me"
gh pr edit --add-label "<label1>,<label2>"If the user explicitly names a different assignee (e.g. @alice), use that instead of @me:
gh pr create --assignee "@alice"If the user doesn't specify labels, auto-pick from existing repo labels using PR context (title/body/branch + changed paths).
Heuristics (best-effort; don't block PR creation):
- Prefer labels that match touched areas (e.g.
docs,backend,frontend,ci,infra,api) or package/app names. - If the repo uses standard labels, map PR intent:
- bugfix ->
bug - docs-only ->
documentation - feature ->
enhancement - If it's ambiguous, add fewer labels rather than the wrong ones.
Retrieve existing labels:
gh label list --limit 200
gh label list --search "docs" --limit 200
gh label list --search "backend" --limit 200If you must create new labels (confirm first), keep it minimal and consistent with the repo's naming style:
gh label create "<label>" --description "<description>" --color 0E8A16Then apply labels to the PR:
gh pr edit --add-label "<label1>,<label2>"Checks:
gh pr checksReview / comment:
gh pr review <number> --comment --body "<comment>"Merge (confirm first):
gh pr merge <number>Auto-Monitor CI After PR Creation
After gh pr create succeeds, check if repo has CI workflows:
gh workflow listIf workflows exist, ask the user:
CI detected. Monitor checks? [Y/n]
If yes, run the CI Monitor workflow (ci status for the new PR number). If no, return control immediately.
Projects (gh project)
List projects:
gh project listView a project:
gh project view <number>Create a project (confirm first):
gh project createRelease Assets (upload/download/verify)
Requires confirmation for upload/delete-asset.
Upload assets
Upload a file:
gh release upload vX.Y.Z <file>Overwrite existing asset name:
gh release upload vX.Y.Z <file> --clobberAdd a display label by appending #:
gh release upload vX.Y.Z "dist/app.zip#macOS build"Delete an asset (confirm first)
gh release delete-asset vX.Y.Z <asset-name>Download assets
All assets from a tag:
gh release download vX.Y.ZLatest release by pattern:
gh release download --pattern '*.tgz'Download source archive:
gh release download vX.Y.Z --archive=zipVerify release attestation
If your repo uses GitHub release attestations:
gh release verify vX.Y.ZJSON output:
gh release verify vX.Y.Z --format jsonCreate Release (gh)
Goal: create a GitHub Release for a specific tag with correct notes and safe defaults.
MANDATORY: Follow `release-strategy.md` for versioning, title format, and description format. Never publish a release without the enforced description structure (summary + New Files table + Changed Files table).
Requires confirmation before running gh release create.
Important Safety Fact
Per the official gh release create docs: if the tag does not exist yet, gh may create it automatically from the default branch.
Default safe behavior for this skill:
- Prefer creating the git tag first (outside this workflow), then create the release.
- Use
--verify-tagto abort if the tag doesn't already exist in the remote.
Pre-flight (read-only)
gh auth status
gh release listCreate a release (recommended)
Generated notes:
gh release create vX.Y.Z --verify-tag --title "vX.Y.Z" --generate-notesCustom notes:
gh release create vX.Y.Z --verify-tag --title "vX.Y.Z" --notes "<notes>"Notes from annotated tag (or commit message if lightweight tag):
gh release create vX.Y.Z --verify-tag --notes-from-tagCommon options
- Pre-release:
gh release create vX.Y.Z --verify-tag --prerelease --generate-notes- Draft (publish later):
gh release create vX.Y.Z --verify-tag --draft --generate-notes- Fail when there are no new commits since last release:
gh release create vX.Y.Z --verify-tag --generate-notes --fail-on-no-commits- Control "Latest":
gh release create vX.Y.Z --verify-tag --generate-notes --latest=false- Create a discussion:
gh release create vX.Y.Z --verify-tag --generate-notes --discussion-category "General"Different repository
Use -R / --repo to target a different repo:
gh release create vX.Y.Z --verify-tag --generate-notes -R OWNER/REPOVerify
gh release view vX.Y.ZManage Releases (list/view/edit/delete)
List releases (read-only)
gh release listCommon filters:
gh release list --exclude-drafts
gh release list --exclude-pre-releases
gh release list --limit 50View a release (read-only)
gh release view vX.Y.Z
gh release view vX.Y.Z --webEdit a release (confirm first)
MANDATORY: When editing release descriptions, follow `release-strategy.md` format. Read actual git diffs to produce accurate file-level change descriptions.
Update notes from a file:
gh release edit vX.Y.Z --notes-file release-notes.mdPublish a draft:
gh release edit vX.Y.Z --draft=falseSet prerelease:
gh release edit vX.Y.Z --prereleaseDelete a release (confirm first)
gh release delete vX.Y.ZIf you explicitly want to also delete the tag:
gh release delete vX.Y.Z --cleanup-tagRelease Strategy (MANDATORY)
Strict release management. Every release must be well-documented, consistently formatted, and traceable to file-level changes.
Versioning: Semantic Versioning (SemVer)
Format: vMAJOR.MINOR.PATCH
| Bump | When | Example |
|---|---|---|
| MAJOR | Breaking changes, removed skills, renamed files that consumers depend on | v1.0.0 → v2.0.0 |
| MINOR | New skill, new reference file, new feature added to existing skill | v1.0.0 → v1.1.0 |
| PATCH | Fix typo, expand existing docs, fix YAML frontmatter, small content updates | v1.1.0 → v1.1.1 |
Rules:
- Tag format:
vX.Y.Z(always prefixed withv) - Create git tag BEFORE creating GitHub release
- Use
--verify-tagon everygh release create - Never skip versions
Release Title Prerequisites (ENFORCED)
Before writing a release title, confirm all of these:
- Stable scope: the merged diff is settled; do not title from an outdated PR description
- Dominant change identified: pick the main user-facing change, not the most recent internal task
- Audience identified: know whether the release is mainly for users, contributors, or operators
- Title/body alignment: the first lines of the release notes reinforce the same story as the title
- Truthfulness: the title is strong but not inflated beyond what the release actually changed
- Social-card awareness: assume the title and opening lines may appear alone on GitHub release cards or preview images
Release Title Format (ENFORCED)
vX.Y.Z — {Short Description}Examples:
v1.0.0 — Analyze skillv1.13.1 — Code review, superchargedv1.14.0 — Portable review specs
Weak examples:
v1.3.1 — GitHub PR Workflow Improvementsv1.3.1 — Updatesv1.3.1 — Misc fixes
Rules:
- Use em dash
—(not-or–) - Title ≤ 70 characters
- Lead with the dominant outcome, not the implementation detail
- Be specific enough that the reader can infer what changed in one glance
- Prefer user-facing capability over internal process wording
- Avoid filler like
updates,improvements,misc,cleanup,refactors - If two candidates exist, choose the one that better survives being seen without context on a release card
Practical title heuristic:
vX.Y.Z — {specific outcome}Good:
v1.13.1 — Code review, superchargedv0.8.0 — Faster local inferencev2.4.0 — Rules discovery everywhere
Bad:
v1.13.1 — Workflow changesv0.8.0 — Performance updatesv2.4.0 — Internal improvements
Release Description Format (ENFORCED)
Every release description MUST follow this exact structure:
{1-3 sentence summary of what changed and why}
### New Files
| File | Description |
|------|-------------|
| `{path}` | {What this file is — purpose, key content} |
### Changed Files
| File | Change |
|------|--------|
| `{path}` | {What specifically changed — bold key changes, use → for before/after} |
### Summary
- {Bullet point per notable change — active voice, past tense, no period at end}Section Rules
| Section | When to Include | When to Omit |
|---|---|---|
| Summary paragraph | Always | Never |
| New Files | Release adds files | No new files (omit entire section) |
| Changed Files | Release modifies files | No changed files (omit entire section) |
| Summary bullets | MAJOR or MINOR releases | PATCH releases (summary paragraph + tables are enough) |
Writing Style
- Active voice, past tense: "Added rate limiting" not "Rate limiting was added"
- No periods at end of bullet points or table cells
- Bold key changes in Changed Files:
**Action count**: 7 → 8 - Use `→` for before/after:
old format → new format - File paths in backticks: always wrap paths in `
`` - No filler: no "various improvements", "minor updates", "miscellaneous changes"
- Every file listed must have a specific, meaningful description
- Group related changes when describing (e.g., "Updated routing table, references section, and output template links")
Opening Lines / Preview Rules
Assume the release title plus the opening summary / first bullets may be the only text visible in:
- GitHub release cards
- Open Graph preview images
- link unfurls in chat tools
- social post screenshots
Therefore:
- The opening summary must reinforce the title immediately
- The first bullet should restate the dominant change in concrete terms
- Do not lead with internal maintenance work if the release is mainly about a user-facing capability
- Do not bury the dominant change below less important items
Changed Files Detail Level by Bump
| Bump | Detail Level |
|---|---|
| PATCH | One-line description per file |
| MINOR | 1-2 sentences per file, bold key changes |
| MAJOR | Full paragraph per file, before/after comparisons, migration notes |
Release Description Generation Protocol
When creating or updating a release description, follow this exact process:
Step 1: Identify Changes
# For first release
git ls-tree -r --name-only vX.Y.Z
# For subsequent releases
git diff --stat vPREVIOUS..vX.Y.Z
git log --oneline vPREVIOUS..vX.Y.ZStep 2: Analyze Each File
For every file in the diff:
1. Read the actual diff: git diff vPREVIOUS..vX.Y.Z -- path/to/file 2. Summarize what changed specifically (not "updated file") 3. For new files: describe purpose and key content 4. For changed files: describe what was added/removed/modified
Step 3: Write Description
Follow the enforced format above. No shortcuts.
Step 4: Verify
Before publishing, check:
- [ ] Title follows
vX.Y.Z — {Description}format - [ ] Title is specific, outcome-first, and brief
- [ ] Title matches the dominant user-facing change in the merged diff
- [ ] Summary paragraph is present and specific
- [ ] Opening lines reinforce the same story as the title
- [ ] Every new file is listed with description
- [ ] Every changed file is listed with specific change details
- [ ] No vague descriptions ("minor updates", "various fixes")
- [ ] File paths are in backticks
- [ ] Active voice, past tense throughout
- [ ] Key changes are bolded in Changed Files table
Batch Update Protocol
When updating descriptions for multiple releases at once:
1. Process releases in chronological order (oldest first) 2. Use git diff vPREVIOUS..vCURRENT for each pair 3. Read actual diffs — never guess what changed 4. Apply the same format to every release 5. Verify each before publishing
# Update a release
gh release edit vX.Y.Z --title "vX.Y.Z — {Title}" --notes "$(cat <<'EOF'
{description}
EOF
)"Anti-Patterns (NEVER)
- NEVER use auto-generated notes without manual review and reformatting
- NEVER write "updated X" without saying WHAT changed in X
- NEVER skip files in the diff — every file gets documented
- NEVER use
--generate-notesas the final description (use as starting point only) - NEVER publish a release without the New Files / Changed Files tables
- NEVER mix description styles across releases — consistency is mandatory
- NEVER use passive voice ("was added", "has been updated")
- NEVER leave the description empty or use placeholder text
Sources
Format based on:
Releases (gh release)
Use this section as the entry point for release operations.
MANDATORY: Read `release-strategy.md` before creating or editing any release. It defines versioning rules, title format, dominant-change selection, description format, preview/OG-card guidance, and the generation protocol.
| Intent | Reference |
|---|---|
| strategy / format / versioning / title quality / previews | `release-strategy.md` |
| create / publish release | release-create.md |
| list / view / edit / delete release | release-manage.md |
| upload / download assets, verify attestations | release-assets.md |
Read-only quick checks
gh release list
gh release view vX.Y.ZRepos (gh repo)
Common repo operations.
Read-only:
gh repo view
gh repo view --webClone:
gh repo clone OWNER/REPOFork:
gh repo fork OWNER/REPOCreate:
gh repo createSync fork:
gh repo syncNote: for operations that change repo settings (rename, delete, archive), confirm first.
Search (gh search)
Repo search:
gh search repos "<query>"Issue search:
gh search issues "<query>"PR search:
gh search prs "<query>"Code search:
gh search code "<query>"Secrets and Variables
Use these for GitHub Actions and repository configuration.
List:
gh secret list
gh variable listSet (confirm first):
gh secret set NAME
gh variable set NAMEDelete (confirm first):
gh secret delete NAME
gh variable delete NAMESafety:
- Never print secret values.
- Avoid using command history to pass secrets inline.