GitHub CLI
Overview
Use gh for day-to-day GitHub operations from the terminal. Prefer read-only commands first, then run mutating commands only after clear user intent.
Quick Start
- Check installation and auth:
gh --version
gh auth status
- Establish repository context:
scripts/gh_preflight.sh --repo owner/repo
- If not in the target repository, pass
-R owner/repoto commands. - Use
--jsonwith--jqor--templatefor automation-friendly output.
Workflow
- Establish context first.
- Determine GitHub host (
github.comby default), repository, and branch. - Run
scripts/gh_preflight.shbefore multi-step operations.
- Read current state.
- Use
list,view, andstatussubcommands before changing anything.
- Apply requested mutation.
- For create/edit/merge/delete actions, restate the operation and require explicit confirmation unless the user already asked clearly.
- Report stable identifiers.
- Return URLs and IDs for created or changed objects (PR number, issue number, run URL, release tag).
Common Commands
- Repository:
gh repo viewgh repo clone owner/repogh repo creategh repo set-default owner/repo
- Pull requests:
gh pr listgh pr view <number>gh pr checkout <number>gh pr creategh pr review <number> --approve|--request-changes|--commentgh pr merge <number>
- Issues:
gh issue listgh issue view <number>gh issue creategh issue comment <number> --body "..."gh issue close <number>
- Actions:
gh workflow listgh workflow run <workflow>gh run listgh run watch <run-id>gh run view <run-id> --log
- Releases:
gh release listgh release view <tag>gh release create <tag> [assets...]gh release upload <tag> <file>
- API:
gh api repos/{owner}/{repo}/pulls --paginate
For broader command coverage, read references/command-map.md.
Safety Defaults
- Confirm before commands that change remote state:
gh pr create|merge|close|reopen|readygh issue create|edit|close|reopen|deletegh repo create|edit|archive|deletegh release create|edit|deletegh secret set|deletegh variable set|deletegh workflow run
- Avoid destructive flags (
--delete-branch, force flags) unless explicitly requested. - Show exact command before bulk updates and prefer smallest safe scope.
Structured Output
Use JSON output when parsing or summarizing results:
gh pr list --json number,title,url --jq '.[] | "\(.number)\t\(.title)\t\(.url)"'
gh issue list --json number,title,labels --template '{{range .}}{{printf "#%v %v\n" .number .title}}{{end}}'
Troubleshooting
- Auth errors:
gh auth loginorgh auth refresh. - Wrong account/host:
gh auth status --hostname github.com, thengh auth switch. - Unknown command options:
gh <command> <subcommand> --help. - Manual reference:
https://cli.github.com/manual/.
Resources
scripts/
scripts/gh_preflight.sh: Checkghavailability, auth status, and repository context.
references/
references/command-map.md: Command map for repo, PR, issue, actions, release, and API operations.
