Awesome-omni-skill gh-cli
GitHub CLI (gh) reference for repositories, pull requests, Actions, organizations, and search from the command line.
install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/tools/gh-cli-fantomc0der" ~/.claude/skills/diegosouzapw-awesome-omni-skill-gh-cli && rm -rf "$T"
manifest:
skills/tools/gh-cli-fantomc0der/SKILL.mdsource content
GitHub CLI (gh)
Comprehensive reference for GitHub CLI (gh) - work seamlessly with GitHub from the command line.
CLI Structure
gh # Root command ├── auth # Authentication │ ├── login │ ├── logout │ ├── refresh │ ├── setup-git │ ├── status │ ├── switch │ └── token ├── org # Organizations │ └── list ├── pr # Pull Requests │ ├── create │ ├── list │ ├── status │ ├── checkout │ ├── checks │ ├── close │ ├── comment │ ├── diff │ ├── edit │ ├── lock │ ├── merge │ ├── ready │ ├── reopen │ ├── revert │ ├── review │ ├── unlock │ ├── update-branch │ └── view ├── repo # Repositories │ ├── create │ ├── list │ ├── archive │ ├── autolink │ ├── clone │ ├── delete │ ├── deploy-key │ ├── edit │ ├── fork │ ├── gitignore │ ├── license │ ├── rename │ ├── set-default │ ├── sync │ ├── unarchive │ └── view ├── cache # Actions caches │ ├── delete │ └── list ├── run # Workflow runs │ ├── cancel │ ├── delete │ ├── download │ ├── list │ ├── rerun │ ├── view │ └── watch ├── workflow # Workflows │ ├── disable │ ├── enable │ ├── list │ ├── run │ └── view ├── api # API requests ├── ruleset # Rulesets │ ├── check │ ├── list │ └── view ├── search # Search │ ├── code │ ├── commits │ ├── issues │ ├── prs │ └── repos └── status # Status overview
Authentication (gh auth)
Status
# Show all authentication status gh auth status # Show active account only gh auth status --active # Show specific hostname gh auth status --hostname github.com # Show token in output gh auth status --show-token # JSON output gh auth status --json hosts # Filter with jq gh auth status --json hosts --jq '.hosts | add'
Repositories (gh repo)
Create Repository
# Create new repository gh repo create my-repo # Create with description gh repo create my-repo --description "My awesome project" # Create public repository gh repo create my-repo --public # Create private repository gh repo create my-repo --private # Create with homepage gh repo create my-repo --homepage https://example.com # Create with license gh repo create my-repo --license mit # Create with gitignore gh repo create my-repo --gitignore python # Initialize as template repository gh repo create my-repo --template # Create repository in organization gh repo create org/my-repo # Create without cloning locally gh repo create my-repo --source=. # Disable issues gh repo create my-repo --disable-issues # Disable wiki gh repo create my-repo --disable-wiki
Clone Repository
# Clone repository gh repo clone owner/repo # Clone to specific directory gh repo clone owner/repo my-directory # Clone with different branch gh repo clone owner/repo --branch develop
List Repositories
# List all repositories gh repo list # List repositories for owner gh repo list owner # Limit results gh repo list --limit 50 # Public repositories only gh repo list --public # Source repositories only (not forks) gh repo list --source # JSON output gh repo list --json name,visibility,owner # Table output gh repo list --limit 100 | tail -n +2 # Filter with jq gh repo list --json name --jq '.[].name'
View Repository
# View repository details gh repo view # View specific repository gh repo view owner/repo # JSON output gh repo view --json name,description,defaultBranchRef # View in browser gh repo view --web
Edit Repository
# Edit description gh repo edit --description "New description" # Set homepage gh repo edit --homepage https://example.com # Change visibility gh repo edit --visibility private gh repo edit --visibility public # Enable/disable features gh repo edit --enable-issues gh repo edit --disable-issues gh repo edit --enable-wiki gh repo edit --disable-wiki gh repo edit --enable-projects gh repo edit --disable-projects # Set default branch gh repo edit --default-branch main # Rename repository gh repo rename new-name # Archive repository gh repo archive gh repo unarchive
Delete Repository
# Delete repository gh repo delete owner/repo # Confirm without prompt gh repo delete owner/repo --yes
Fork Repository
# Fork repository gh repo fork owner/repo # Fork to organization gh repo fork owner/repo --org org-name # Clone after forking gh repo fork owner/repo --clone # Remote name for fork gh repo fork owner/repo --remote-name upstream
Sync Fork
# Sync fork with upstream gh repo sync # Sync specific branch gh repo sync --branch feature # Force sync gh repo sync --force
Set Default Repository
# Set default repository for current directory gh repo set-default # Set default explicitly gh repo set-default owner/repo # Unset default gh repo set-default --unset
Repository Autolinks
# List autolinks gh repo autolink list # Add autolink gh repo autolink add \ --key-prefix JIRA- \ --url-template https://jira.example.com/browse/<num> # Delete autolink gh repo autolink delete 12345
Repository Deploy Keys
# List deploy keys gh repo deploy-key list # Add deploy key gh repo deploy-key add ~/.ssh/id_rsa.pub \ --title "Production server" \ --read-only # Delete deploy key gh repo deploy-key delete 12345
Gitignore and License
# View gitignore template gh repo gitignore # View license template gh repo license mit # License with full name gh repo license mit --fullname "John Doe"
Pull Requests (gh pr)
Create Pull Request
# Create PR interactively gh pr create # Create with title gh pr create --title "Feature: Add new functionality" # Create with title and body gh pr create \ --title "Feature: Add new functionality" \ --body "This PR adds..." # Fill body from template gh pr create --body-file .github/PULL_REQUEST_TEMPLATE.md # Set base branch gh pr create --base main # Set head branch (default: current branch) gh pr create --head feature-branch # Create draft PR gh pr create --draft # Add assignees gh pr create --assignee user1,user2 # Add reviewers gh pr create --reviewer user1,user2 # Add labels gh pr create --labels enhancement,feature # Link to issue gh pr create --issue 123 # Create in specific repository gh pr create --repo owner/repo # Open in browser after creation gh pr create --web
List Pull Requests
# List open PRs gh pr list # List all PRs gh pr list --state all # List merged PRs gh pr list --state merged # List closed (not merged) PRs gh pr list --state closed # Filter by head branch gh pr list --head feature-branch # Filter by base branch gh pr list --base main # Filter by author gh pr list --author username gh pr list --author @me # Filter by assignee gh pr list --assignee username # Filter by labels gh pr list --labels bug,enhancement # Limit results gh pr list --limit 50 # Search gh pr list --search "is:open is:pr label:review-required" # JSON output gh pr list --json number,title,state,author,headRefName # Show check status gh pr list --json number,title,statusCheckRollup --jq '.[] | [.number, .title, .statusCheckRollup[]?.status]' # Sort by gh pr list --sort created --order desc
View Pull Request
# View PR gh pr view 123 # View with comments gh pr view 123 --comments # View in browser gh pr view 123 --web # JSON output gh pr view 123 --json title,body,state,author,commits,files # View diff gh pr view 123 --json files --jq '.files[].path' # View with jq query gh pr view 123 --json title,state --jq '"\(.title): \(.state)"'
Checkout Pull Request
# Checkout PR branch gh pr checkout 123 # Checkout with specific branch name gh pr checkout 123 --branch name-123 # Force checkout gh pr checkout 123 --force
Diff Pull Request
# View PR diff gh pr diff 123 # View diff with color gh pr diff 123 --color always # Output to file gh pr diff 123 > pr-123.patch # View diff of specific files gh pr diff 123 --name-only
Merge Pull Request
# Merge PR gh pr merge 123 # Merge with specific method gh pr merge 123 --merge gh pr merge 123 --squash gh pr merge 123 --rebase # Delete branch after merge gh pr merge 123 --delete-branch # Merge with comment gh pr merge 123 --subject "Merge PR #123" --body "Merging feature" # Merge draft PR gh pr merge 123 --admin # Force merge (skip checks) gh pr merge 123 --admin
Close Pull Request
# Close PR (as draft, not merge) gh pr close 123 # Close with comment gh pr close 123 --comment "Closing due to..."
Reopen Pull Request
# Reopen closed PR gh pr reopen 123
Edit Pull Request
# Edit interactively gh pr edit 123 # Edit title gh pr edit 123 --title "New title" # Edit body gh pr edit 123 --body "New description" # Add labels gh pr edit 123 --add-label bug,enhancement # Remove labels gh pr edit 123 --remove-label stale # Add assignees gh pr edit 123 --add-assignee user1,user2 # Remove assignees gh pr edit 123 --remove-assignee user1 # Add reviewers gh pr edit 123 --add-reviewer user1,user2 # Remove reviewers gh pr edit 123 --remove-reviewer user1 # Mark as ready for review gh pr edit 123 --ready
Ready for Review
# Mark draft PR as ready gh pr ready 123
Pull Request Checks
# View PR checks gh pr checks 123 # Watch checks in real-time gh pr checks 123 --watch # Watch interval (seconds) gh pr checks 123 --watch --interval 5
Comment on Pull Request
# Add comment gh pr comment 123 --body "Looks good!" # Comment on specific line gh pr comment 123 --body "Fix this" \ --repo owner/repo \ --head-owner owner --head-branch feature # Edit comment gh pr comment 123 --edit 456789 --body "Updated" # Delete comment gh pr comment 123 --delete 456789
Review Pull Request
# Review PR (opens editor) gh pr review 123 # Approve PR gh pr review 123 --approve --approve-body "LGTM!" # Request changes gh pr review 123 --request-changes \ --body "Please fix these issues" # Comment on PR gh pr review 123 --comment --body "Some thoughts..." # Dismiss review gh pr review 123 --dismiss
Update Branch
# Update PR branch with latest base branch gh pr update-branch 123 # Force update gh pr update-branch 123 --force # Use merge strategy gh pr update-branch 123 --merge
Lock/Unlock Pull Request
# Lock PR conversation gh pr lock 123 # Lock with reason gh pr lock 123 --reason off-topic # Unlock gh pr unlock 123
Revert Pull Request
# Revert merged PR gh pr revert 123 # Revert with specific branch name gh pr revert 123 --branch revert-pr-123
Pull Request Status
# Show PR status summary gh pr status # Status for specific repository gh pr status --repo owner/repo
GitHub Actions
Workflow Runs (gh run)
# List workflow runs gh run list # List for specific workflow gh run list --workflow "ci.yml" # List for specific branch gh run list --branch main # Limit results gh run list --limit 20 # JSON output gh run list --json databaseId,status,conclusion,headBranch # View run details gh run view 123456789 # View run with verbose logs gh run view 123456789 --log # View specific job gh run view 123456789 --job 987654321 # View in browser gh run view 123456789 --web # Watch run in real-time gh run watch 123456789 # Watch with interval gh run watch 123456789 --interval 5 # Rerun failed run gh run rerun 123456789 # Rerun specific job gh run rerun 123456789 --job 987654321 # Cancel run gh run cancel 123456789 # Delete run gh run delete 123456789 # Download run artifacts gh run download 123456789 # Download specific artifact gh run download 123456789 --name build # Download to directory gh run download 123456789 --dir ./artifacts
Workflows (gh workflow)
# List workflows gh workflow list # View workflow details gh workflow view ci.yml # View workflow YAML gh workflow view ci.yml --yaml # View in browser gh workflow view ci.yml --web # Enable workflow gh workflow enable ci.yml # Disable workflow gh workflow disable ci.yml # Run workflow manually gh workflow run ci.yml # Run with inputs gh workflow run ci.yml \ --raw-field \ version="1.0.0" \ environment="production" # Run from specific branch gh workflow run ci.yml --ref develop
Action Caches (gh cache)
# List caches gh cache list # List for specific branch gh cache list --branch main # List with limit gh cache list --limit 50 # Delete cache gh cache delete 123456789 # Delete all caches gh cache delete --all
Organizations (gh org)
# List organizations gh org list # List for user gh org list --user username # JSON output gh org list --json login,name,description # View organization gh org view orgname # View organization members gh org view orgname --json members --jq '.members[] | .login'
Search (gh search)
# Search code gh search code "TODO" # Search in specific repository gh search code "TODO" --repo owner/repo # Search commits gh search commits "fix bug" # Search issues gh search issues "label:bug state:open" # Search PRs gh search prs "is:open is:pr review:required" # Search repositories gh search repos "stars:>1000 language:python" # Limit results gh search repos "topic:api" --limit 50 # JSON output gh search repos "stars:>100" --json name,description,stargazers # Order results gh search repos "language:rust" --order desc --sort stars # Search with extensions gh search code "import" --extension py # Web search (open in browser) gh search prs "is:open" --web
Status (gh status)
# Show status overview gh status # Status for specific repositories gh status --repo owner/repo # JSON output gh status --json
Rulesets (gh ruleset)
# List rulesets gh ruleset list # View ruleset gh ruleset view 123 # Check ruleset gh ruleset check --branch feature # Check specific repository gh ruleset check --repo owner/repo --branch main
Global Flags
| Flag | Description |
|---|---|
/ | Show help for command |
| Show gh version |
| Select another repository |
| GitHub hostname |
| Filter JSON output |
| Output JSON with specified fields |
| Format JSON using Go template |
| Open in browser |
| Make additional API calls |
| Show verbose output |
| Show debug output |
| Maximum API request duration |
| Cache control (default, force, bypass) |
Output Formatting
JSON Output
# Basic JSON gh repo view --json name,description # Nested fields gh repo view --json owner,name --jq '.owner.login + "/" + .name' # Array operations gh pr list --json number,title --jq '.[] | select(.number > 100)' # Complex queries gh issue list --json number,title,labels \ --jq '.[] | {number, title: .title, tags: [.labels[].name]}'
Template Output
# Custom template gh repo view \ --template '{{.name}}: {{.description}}' # Multiline template gh pr view 123 \ --template 'Title: {{.title}} Author: {{.author.login}} State: {{.state}} '
Common Workflows
Create PR from Issue
# Create branch from issue gh issue develop 123 --branch feature/issue-123 # Make changes, commit, push git add . git commit -m "Fix issue #123" git push # Create PR linking to issue gh pr create --title "Fix #123" --body "Closes #123"
Bulk Operations
# Close multiple issues gh issue list --search "label:stale" \ --json number \ --jq '.[].number' | \ xargs -I {} gh issue close {} --comment "Closing as stale" # Add label to multiple PRs gh pr list --search "review:required" \ --json number \ --jq '.[].number' | \ xargs -I {} gh pr edit {} --add-label needs-review
Repository Setup Workflow
# Create repository with initial setup gh repo create my-project --public \ --description "My awesome project" \ --clone \ --gitignore python \ --license mit cd my-project # Set up branches git checkout -b develop git push -u origin develop # Create labels gh label create bug --color "d73a4a" --description "Bug report" gh label create enhancement --color "a2eeef" --description "Feature request" gh label create documentation --color "0075ca" --description "Documentation"
CI/CD Workflow
# Run workflow and wait RUN_ID=$(gh workflow run ci.yml --ref main --jq '.databaseId') # Watch the run gh run watch "$RUN_ID" # Download artifacts on completion gh run download "$RUN_ID" --dir ./artifacts
Fork Sync Workflow
# Fork repository gh repo fork original/repo --clone cd repo # Add upstream remote git remote add upstream https://github.com/original/repo.git # Sync fork gh repo sync # Or manual sync git fetch upstream git checkout main git merge upstream/main git push origin main
Environment Setup
Shell Integration
# Add to ~/.bashrc or ~/.zshrc eval "$(gh completion -s bash)" # or zsh/fish # Create useful aliases alias gs='gh status' alias gpr='gh pr view --web' alias gir='gh issue view --web' alias gco='gh pr checkout'
Git Configuration
# Use gh as credential helper gh auth setup-git # Set gh as default for repo operations git config --global credential.helper 'gh !gh auth setup-git' # Or manually git config --global credential.helper github
Best Practices
-
Authentication: Use environment variables for automation
export GH_TOKEN=$(gh auth token) -
Default Repository: Set default to avoid repetition
gh repo set-default owner/repo -
JSON Parsing: Use jq for complex data extraction
gh pr list --json number,title --jq '.[] | select(.title | contains("fix"))' -
Pagination: Use --paginate for large result sets
gh issue list --state all --paginate -
Caching: Use cache control for frequently accessed data
gh api /user --cache force
Getting Help
# General help gh --help # Command help gh pr --help gh issue create --help # Help topics gh help formatting gh help environment gh help exit-codes gh help accessibility
References
- Official Manual: https://cli.github.com/manual/
- GitHub Docs: https://docs.github.com/en/github-cli
- REST API: https://docs.github.com/en/rest
- GraphQL API: https://docs.github.com/en/graphql