Sub-Skill: GitHub CLI (gh) Conventions
Purpose: Consistent, auditable use of the gh CLI for PRs, issues, releases, and CI — preventing gate bypasses and silent failures.
Rules
Authentication & Scopes
- Check auth scope before scripting. Before running
ghin CI or scripts, always verify the required scopes are granted withgh auth status; missing scopes produce silent 404s rather than auth errors. - Use token env var in CI. Always pass
GH_TOKEN(orGITHUB_TOKEN) via environment variable in CI pipelines; never hard-code tokens or usegh auth login --with-tokeninteractively in automated contexts.
Pull Requests
- Include all required labels on PR creation. Always pass
--labelfor every gate-required label when runninggh pr create; omitting a label silently bypasses automated approval gates. Reference: ERR-2026-023 - Set reviewer on creation. Always use
--reviewer <handle>when creating PRs that require CODEOWNERS approval; adding reviewers after creation delays the review clock. - Open as draft when work is incomplete. Use
gh pr create --draftfor PRs not yet ready for review; never open a ready-for-review PR on a branch with failing CI. - Link issues explicitly. Always include
--body "Closes #<issue>"or--body "Fixes #<issue>"so GitHub auto-closes the linked issue on merge; never rely on branch name alone for issue linkage.
Issues
- Assign and label on creation. Use
gh issue create --assignee @me --label <label>rather than creating bare issues and editing them in a second step; unassigned, unlabelled issues fall out of triage queues. - Use JSON output for scripting. Prefer
gh issue list --json number,title,labelsover parsing human-readable output; the--jsonflag is stable acrossghversions, plain text is not.
CI / Workflows
- Trigger runs explicitly when needed. Use
gh workflow run <workflow.yml> --ref <branch>to trigger a workflow rather than pushing an empty commit; empty commits pollute history. - Watch run status in scripts. After triggering a workflow, use
gh run watch <run-id>or pollgh run view <run-id> --json conclusionrather than sleeping for a fixed duration.
Releases & API
- Create releases from tags, not branches. Always run
gh release create <tag> --generate-notesafter pushing the tag; never target a branch directly, as branch-based releases produce non-reproducible artifacts. - Use
gh apifor endpoints not covered by subcommands. Prefergh api repos/{owner}/{repo}/pulls --jq '.[].number'over rawcurlwith manual auth headers;gh apiinherits the active auth context automatically. - Define aliases for repeated commands. Use
gh alias setto capture long flag combinations used more than twice in a project; aliases are stored in~/.config/gh/config.ymland are portable across machines via dotfiles.
See also
skills/git-conventions/SKILL.mdskills/error-log/SKILL.md