
A solid GitHub CLI wrapper that covers the full spectrum of gh operations, from PR creation to API calls. The standout bit is the NOJIRA prefix convention for bypassing JIRA enforcement, which tells you this came from a real enterprise environment. It bundles five reference docs covering PR workflows, issue management, Actions, API endpoints, and shell scripting patterns for bulk operations. Most useful when you're automating GitHub tasks or working in an org with specific conventions around PR titles and workflow triggers. The quick reference section alone will save you from googling gh syntax constantly.
npx -y skills add daymade/claude-code-skills --skill github-ops --agent claude-codeInstalls into .claude/skills of the current project.
Deliver the requested GitHub state, not a successful-looking command. A 200, 201,
202, or 204 response is evidence that GitHub accepted a request; it is not proof
that every requested field changed, an invitation was accepted, an asynchronous job
finished, or the user's business outcome was achieved.
Read only the reference required for the task:
| Task | Reference |
|---|---|
| Create, review, merge, close, compare, or converge PRs; retire remote PR branches | references/pr_operations.md |
| Create, edit, search, transfer, close, or bulk-manage issues | references/issue_operations.md |
| Inspect, clone, create, edit, rename, archive, transfer, change visibility, or delete repositories | references/repository_operations.md |
| Inspect or change collaborators, teams, base permissions, member privileges, or organization 2FA | references/organization_access_and_settings.md |
| Trigger, inspect, rerun, cancel, or purge Actions; manage secrets or variables | references/workflow_operations.md |
| Use raw REST/GraphQL endpoints, pagination, rate limits, webhooks, or Enterprise hosts | references/api_reference.md |
| Build scripts, retries, bulk operations, or machine-readable output | references/best_practices.md |
For local Git recovery, dirty worktrees, bundles, or lost commits, use git-safety-net.
This skill owns GitHub-hosted state.
Do not turn a read-only investigation into a mutation because the fix looks obvious. Do not send a comment, review, issue, or invitation whose recipient or content was not authorized in the current task.
Before the first write, verify the active account and resolve a fully qualified target:
gh auth status --hostname HOST
gh api --hostname HOST user --jq '.login'
gh repo view HOST/OWNER/REPO \
--json nameWithOwner,visibility,isPrivate,viewerPermission,url
For github.com, OWNER/REPO is sufficient. Never use gh auth status --show-token
for routine diagnosis, and never print, paste, or log a token.
Before the first push to a remote in the current session, read its live visibility:
gh repo view OWNER/REPO \
--json nameWithOwner,visibility,isPrivate,stargazerCount,forkCount,url
Use GitHub-hosted state, not a stale local ref or remembered setting. Capture only the fields required to prove the requested transition. Before a consequential write, make this plan explicit:
Target: fully qualified repository, organization, PR, issue, run, or account
Current: authoritative fields and immutable IDs/SHAs
Requested: exact field or state transition
Blast radius: people, repositories, forks, runs, or public surfaces affected
Recovery: exact inverse operation or explicit “not recoverable”
Readback: independent GET/CLI query and expected result
If the user already authorized this exact consequence, execute it. Do not add a ceremonial second confirmation. If target, scope, public exposure, deletion, recipient, or recovery remains ambiguous, pause before the write.
Prefer, in order:
gh subcommand;Response fields are not automatically writable fields. Before using PATCH, compare
the desired key against the operation's current request body parameters, not the
shape returned by GET. GitHub may ignore an unsupported key while still returning a
successful response. Do not switch API families merely to make the command run.
Use explicit methods with gh api. Adding -f or -F changes the default method to
POST; filtered GET requests must include -X GET.
xargs command.Run a fresh read that does not trust the mutation response or a cached local ref:
| Mutation | Required acceptance evidence |
|---|---|
| PR merge/close/edit | PR state plus accepted behavior on the fetched base when landing matters |
| Branch deletion | Hosted branch/ref is absent; local remote-tracking cleanup is a separate check |
| Issue/comment/review | Exact object exists once with the intended state/content |
| Repository create/edit/visibility | Fully qualified repository readback matches owner, visibility, and requested fields |
| Collaborator/team permission | Invitation state if pending, then effective permission; also identify remaining base/team grants when revoking |
| Organization setting | A fresh organization/settings read returns every requested field; UI-only settings require UI readback plus any available API signal |
| 2FA requirement | Preflight affected accounts, UI confirmation, API readback, then membership/outside-collaborator audit |
| Workflow dispatch/rerun/cancel | The intended run ID reaches the expected state; command acceptance is not completion |
| Secret/variable change | Metadata and consumer behavior, never secret value disclosure |
For asynchronous state, poll with a bounded deadline and report pending if the terminal
state is not observed. If readback differs, report failed/no-op or partially applied,
show the mismatched fields, and keep recovery available. Never say “done” from the write
receipt alone.
End with one of four honest states:
OWNER/REPO and visibility. Never default
a generic example to --public; public exposure is a product decision.gh repo edit --visibility ... --accept-visibility-change-consequences
only after the consequences and exact repository are authorized, then read back.HOST
explicitly and report when a lower layer cannot change the enforced state.gh pr list -R OWNER/REPO --state open --json number,title,state,url
gh pr view 123 -R OWNER/REPO --json number,title,state,headRefOid,baseRefOid,url
gh issue list -R OWNER/REPO --state open --json number,title,state,url
gh workflow list -R OWNER/REPO
gh run list -R OWNER/REPO --limit 20 \
--json databaseId,status,conclusion,headSha,url
gh api -X GET 'repos/OWNER/REPO/branches?per_page=100' --paginate --jq '.[].name'
Use --json/--jq for decisions. Human-formatted output is for reading, not parsing.