| name | github |
| description | Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries. |
GitHub Skill
Use the gh CLI to interact with GitHub. Always specify --repo owner/repo when not in a git directory, or use URLs directly.
Pull Requests
Multiline PR/Issue Bodies
When creating or editing PRs/issues with multiline Markdown, never pass escaped \n sequences in --body. The shell will pass them literally and GitHub will render a broken one-line body.
Use a real file/heredoc with --body-file instead:
body_file=$(mktemp)
cat > "$body_file" <<'EOF'
- concise bullet
- another bullet with `code`
- `command that was run`
EOF
gh pr create --repo owner/repo --title "feat: example" --body-file "$body_file"
rm -f "$body_file"
For existing PRs, fix the body the same way:
gh pr edit 55 --repo owner/repo --body-file "$body_file"
Check CI status on a PR:
gh pr checks 55 --repo owner/repo
List recent workflow runs:
gh run list --repo owner/repo --limit 10
View a run and see which steps failed:
gh run view <run-id> --repo owner/repo
View logs for failed steps only:
gh run view <run-id> --repo owner/repo --log-failed
API for Advanced Queries
The gh api command is useful for accessing data not available through other subcommands.
Get PR with specific fields:
gh api repos/owner/repo/pulls/55 --jq '.title, .state, .user.login'
JSON Output
Most commands support --json for structured output. You can use --jq to filter:
gh issue list --repo owner/repo --json number,title --jq '.[] | "\(.number): \(.title)"'
Downloading Files & Folders
Use the gh download extension (yuler/gh-download) to download individual files or folders from a GitHub repo without cloning.
Download specific files or folders from a repo:
gh download owner/repo path/to/file.txt path/to/folder
Download from a specific branch or tag:
gh download owner/repo path/to/file.txt --branch main
Download using a full GitHub URL:
gh download https://github.com/owner/repo/tree/main/src
Save to a custom location:
gh download owner/repo path/to/file.txt --outdir ./local-dir
gh download owner/repo path/to/file.txt --outfile ./local-file.txt
Dry run to preview what would be downloaded:
gh download owner/repo src --dry-run