gh-helper
Complete GitHub operations via gh CLI - repos, issues, PRs, code search, actions, file management When user mentions GitHub, repositories, issues, PRs, gh command, code search, commits, file contents
Best use case
gh-helper is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Complete GitHub operations via gh CLI - repos, issues, PRs, code search, actions, file management When user mentions GitHub, repositories, issues, PRs, gh command, code search, commits, file contents
Teams using gh-helper should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/gh-helper/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How gh-helper Compares
| Feature / Agent | gh-helper | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Complete GitHub operations via gh CLI - repos, issues, PRs, code search, actions, file management When user mentions GitHub, repositories, issues, PRs, gh command, code search, commits, file contents
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# GitHub CLI Helper Agent
## Overview
Complete GitHub operations via `gh` CLI and GitHub API. This skill replaces GitHub MCP server functionality, providing CLI/API equivalents for all operations.
## MCP Tool Equivalents Reference
| MCP Tool | CLI/API Equivalent |
| ---------------------------- | ------------------------------------------------------------------ |
| `create_or_update_file` | `gh api -X PUT /repos/{owner}/{repo}/contents/{path}` |
| `search_repositories` | `gh search repos <query>` |
| `create_repository` | `gh repo create <name>` |
| `get_file_contents` | `gh api /repos/{owner}/{repo}/contents/{path}` |
| `push_files` | `git add && git commit && git push` |
| `create_issue` | `gh issue create` |
| `create_pull_request` | `gh pr create` |
| `fork_repository` | `gh repo fork` |
| `create_branch` | `gh api -X POST /repos/{owner}/{repo}/git/refs` |
| `list_commits` | `gh api /repos/{owner}/{repo}/commits` |
| `list_issues` | `gh issue list` |
| `update_issue` | `gh issue edit` |
| `add_issue_comment` | `gh issue comment` |
| `search_code` | `gh search code <query>` |
| `search_issues` | `gh search issues <query>` |
| `search_users` | `gh api /search/users?q=<query>` |
| `get_issue` | `gh issue view <number>` |
| `get_pull_request` | `gh pr view <number>` |
| `list_pull_requests` | `gh pr list` |
| `create_pull_request_review` | `gh pr review` |
| `merge_pull_request` | `gh pr merge` |
| `get_pull_request_files` | `gh api /repos/{owner}/{repo}/pulls/{number}/files` |
| `get_pull_request_status` | `gh pr checks` |
| `update_pull_request_branch` | `gh api -X PUT /repos/{owner}/{repo}/pulls/{number}/update-branch` |
| `get_pull_request_comments` | `gh api /repos/{owner}/{repo}/pulls/{number}/comments` |
| `get_pull_request_reviews` | `gh api /repos/{owner}/{repo}/pulls/{number}/reviews` |
## Auto-Approved Commands
Safe read-only commands:
- `gh repo view`, `gh repo list`
- `gh issue list`, `gh issue view`
- `gh pr list`, `gh pr view`, `gh pr diff`, `gh pr checks`
- `gh run list`, `gh run view`, `gh run watch`
- `gh workflow list`, `gh workflow view`
- `gh release list`, `gh release view`
- `gh search repos`, `gh search code`, `gh search issues`
- `gh status`
---
## Repository Operations
### Search Repositories
```bash
# Basic search
gh search repos "kubernetes operator"
# With filters
gh search repos "react" --language typescript --stars ">1000"
gh search repos "cli tool" --owner hashicorp
gh search repos "mcp server" --topic model-context-protocol
# JSON output for parsing
gh search repos "query" --json fullName,description,stargazersCount
```
### Create Repository
```bash
# Interactive creation
gh repo create
# Create with options
gh repo create my-repo --public --description "My project"
gh repo create my-repo --private --clone
# Create from template
gh repo create my-repo --template owner/template-repo
# Create org repo
gh repo create my-org/my-repo --public
```
### Fork Repository
```bash
# Fork to your account
gh repo fork owner/repo
# Fork and clone
gh repo fork owner/repo --clone
# Fork to organization
gh repo fork owner/repo --org my-org
# Fork with custom name
gh repo fork owner/repo --fork-name my-fork
```
### Get File Contents
```bash
# Get file content via API (returns base64)
gh api /repos/{owner}/{repo}/contents/{path} | jq -r '.content' | base64 -d
# Get file from specific branch
gh api /repos/{owner}/{repo}/contents/{path}?ref=branch-name
# Get directory listing
gh api /repos/{owner}/{repo}/contents/{path}
# Get raw file content
gh api /repos/{owner}/{repo}/contents/{path} -H "Accept: application/vnd.github.raw"
```
### Create or Update File
```bash
# Create new file
gh api -X PUT /repos/{owner}/{repo}/contents/{path} \
-f message="Add new file" \
-f content="$(echo 'file content' | base64)" \
-f branch="main"
# Update existing file (requires SHA)
SHA=$(gh api /repos/{owner}/{repo}/contents/{path} | jq -r '.sha')
gh api -X PUT /repos/{owner}/{repo}/contents/{path} \
-f message="Update file" \
-f content="$(echo 'new content' | base64)" \
-f sha="$SHA" \
-f branch="main"
```
### Push Multiple Files
Use git commands for pushing multiple files:
```bash
# Stage and commit multiple files
git add file1.txt file2.txt
git commit -m "Add multiple files"
git push origin branch-name
# Or use a single commit for all changes
git add .
git commit -m "Update files"
git push
```
### Create Branch
```bash
# Via git (local)
git checkout -b new-branch
git push -u origin new-branch
# Via API (remote, from default branch)
SHA=$(gh api /repos/{owner}/{repo}/git/refs/heads/main | jq -r '.object.sha')
gh api -X POST /repos/{owner}/{repo}/git/refs \
-f ref="refs/heads/new-branch" \
-f sha="$SHA"
# From specific branch
SHA=$(gh api /repos/{owner}/{repo}/git/refs/heads/source-branch | jq -r '.object.sha')
gh api -X POST /repos/{owner}/{repo}/git/refs \
-f ref="refs/heads/new-branch" \
-f sha="$SHA"
```
### List Commits
```bash
# List commits via CLI
git log --oneline -20
# List commits via API
gh api /repos/{owner}/{repo}/commits
# With filters
gh api "/repos/{owner}/{repo}/commits?sha=branch&per_page=10"
gh api "/repos/{owner}/{repo}/commits?author=username"
gh api "/repos/{owner}/{repo}/commits?since=2024-01-01T00:00:00Z"
# JSON output
gh api /repos/{owner}/{repo}/commits --jq '.[].commit.message'
```
---
## Issue Operations
### List Issues
```bash
# List open issues
gh issue list
# With filters
gh issue list --state open
gh issue list --state closed
gh issue list --state all
gh issue list --assignee @me
gh issue list --assignee username
gh issue list --author @me
gh issue list --label bug
gh issue list --label "bug,priority:high"
gh issue list --milestone "v1.0"
# Search with query
gh issue list --search "is:open label:bug"
# JSON output
gh issue list --json number,title,state,labels
```
### Get Issue Details
```bash
# View issue
gh issue view 123
# View in web browser
gh issue view 123 --web
# JSON output
gh issue view 123 --json number,title,body,state,labels,assignees,comments
# Get comments
gh issue view 123 --comments
```
### Create Issue
```bash
# Interactive
gh issue create
# With options
gh issue create --title "Bug report" --body "Description"
gh issue create --title "Feature" --label enhancement --assignee @me
gh issue create --title "Bug" --milestone "v1.0" --project "Board"
# From file
gh issue create --title "Issue" --body-file issue-body.md
# Open in editor
gh issue create --title "Issue" --editor
```
### Update Issue
```bash
# Edit title
gh issue edit 123 --title "New title"
# Edit body
gh issue edit 123 --body "New description"
gh issue edit 123 --body-file updated.md
# Modify labels
gh issue edit 123 --add-label "priority:high"
gh issue edit 123 --remove-label "needs-triage"
# Modify assignees
gh issue edit 123 --add-assignee username
gh issue edit 123 --remove-assignee username
# Change milestone
gh issue edit 123 --milestone "v2.0"
# Close/reopen
gh issue close 123
gh issue reopen 123
```
### Add Issue Comment
```bash
# Add comment
gh issue comment 123 --body "This is a comment"
# From file
gh issue comment 123 --body-file comment.md
# Open in editor
gh issue comment 123 --editor
# Edit last comment
gh issue comment 123 --edit-last --body "Updated comment"
```
### Search Issues
```bash
# Basic search
gh search issues "memory leak"
# With filters
gh search issues "bug" --repo owner/repo
gh search issues "type:bug" --state open
gh search issues "label:critical" --assignee username
gh search issues "is:pr is:merged" --author username
# JSON output
gh search issues "query" --json number,title,repository,state
```
---
## Pull Request Operations
### List Pull Requests
```bash
# List open PRs
gh pr list
# With filters
gh pr list --state open
gh pr list --state closed
gh pr list --state merged
gh pr list --state all
gh pr list --author @me
gh pr list --assignee username
gh pr list --label "needs-review"
gh pr list --base main
gh pr list --head feature-branch
# Search with query
gh pr list --search "is:open review:required"
# JSON output
gh pr list --json number,title,state,author,labels
```
### Get Pull Request Details
```bash
# View PR
gh pr view 123
# View in web
gh pr view 123 --web
# JSON output
gh pr view 123 --json number,title,body,state,author,labels,reviews,commits,files
# View comments
gh pr view 123 --comments
```
### Create Pull Request
```bash
# Interactive
gh pr create
# With options
gh pr create --title "Fix bug" --body "Description"
gh pr create --title "Feature" --base main --head feature-branch
gh pr create --fill # Use commit info
gh pr create --draft # Create as draft
# With reviewers
gh pr create --title "PR" --reviewer user1,user2
gh pr create --title "PR" --reviewer team:my-team
# With labels and assignees
gh pr create --title "PR" --label bug --assignee @me
# Open in web to finish
gh pr create --web
```
### Get Pull Request Files
```bash
# View diff
gh pr diff 123
# Via API (detailed file info)
gh api /repos/{owner}/{repo}/pulls/123/files
# JSON with additions/deletions
gh api /repos/{owner}/{repo}/pulls/123/files --jq '.[] | {filename, status, additions, deletions}'
```
### Get Pull Request Status/Checks
```bash
# View checks
gh pr checks 123
# Watch checks in real-time
gh pr checks 123 --watch
# Wait for checks to complete
gh pr checks 123 --watch --fail-level all
# JSON output
gh pr checks 123 --json name,state,conclusion
```
### Create Pull Request Review
```bash
# Approve
gh pr review 123 --approve
# Request changes
gh pr review 123 --request-changes --body "Please fix the tests"
# Comment only
gh pr review 123 --comment --body "Looks good so far"
# Add inline comments via API
gh api -X POST /repos/{owner}/{repo}/pulls/123/reviews \
-f body="Review comment" \
-f event="COMMENT" \
-f comments='[{"path":"file.js","position":10,"body":"Consider refactoring"}]'
```
### Get Pull Request Reviews
```bash
# Via API
gh api /repos/{owner}/{repo}/pulls/123/reviews
# Get review details
gh api /repos/{owner}/{repo}/pulls/123/reviews --jq '.[] | {user: .user.login, state: .state, body: .body}'
```
### Get Pull Request Comments
```bash
# Review comments (inline)
gh api /repos/{owner}/{repo}/pulls/123/comments
# Issue comments (general)
gh api /repos/{owner}/{repo}/issues/123/comments
# All comments with details
gh api /repos/{owner}/{repo}/pulls/123/comments --jq '.[] | {user: .user.login, body: .body, path: .path}'
```
### Merge Pull Request
```bash
# Merge (default method)
gh pr merge 123
# Squash merge
gh pr merge 123 --squash
# Rebase merge
gh pr merge 123 --rebase
# Delete branch after merge
gh pr merge 123 --delete-branch
# Auto-merge when checks pass
gh pr merge 123 --auto --squash
# With custom commit message
gh pr merge 123 --squash --subject "feat: Add feature" --body "Detailed description"
```
### Update Pull Request Branch
```bash
# Via API
gh api -X PUT /repos/{owner}/{repo}/pulls/123/update-branch \
-f expected_head_sha="current-head-sha"
# Or use git locally
gh pr checkout 123
git merge main
git push
```
---
## Code Search
### Search Code
```bash
# Basic search
gh search code "function authenticate"
# In specific repo
gh search code "TODO" --repo owner/repo
# With language filter
gh search code "interface User" --language typescript
# With path filter
gh search code "config" --filename "*.yaml"
# JSON output
gh search code "query" --json path,repository,textMatches
```
### Search Users
```bash
# Via API
gh api "/search/users?q=fullname:John+type:user"
# With filters
gh api "/search/users?q=location:Seattle+followers:>100"
# Search by email domain
gh api "/search/users?q=email:@company.com"
```
---
## GitHub Actions
### List Workflows
```bash
gh workflow list
gh workflow list --all # Include disabled
```
### View Workflow Runs
```bash
# List runs
gh run list
gh run list --workflow "CI"
gh run list --branch main
gh run list --status failure
# View specific run
gh run view 12345
gh run view 12345 --log
gh run view 12345 --log-failed
# Watch run in real-time
gh run watch 12345
```
### Trigger Workflow
```bash
# Trigger workflow_dispatch
gh workflow run "Deploy" --ref main
# With inputs
gh workflow run "Deploy" -f environment=production -f version=1.0.0
```
### Cancel/Rerun Workflow
```bash
# Cancel
gh run cancel 12345
# Rerun
gh run rerun 12345
gh run rerun 12345 --failed # Only failed jobs
```
---
## Releases
### List Releases
```bash
gh release list
gh release list --limit 10
```
### View Release
```bash
gh release view v1.0.0
gh release view latest
```
### Create Release
```bash
# Create release
gh release create v1.0.0
# With options
gh release create v1.0.0 --title "Version 1.0.0" --notes "Release notes"
gh release create v1.0.0 --generate-notes
gh release create v1.0.0 --draft
gh release create v1.0.0 --prerelease
# Upload assets
gh release create v1.0.0 ./dist/*.tar.gz
```
---
## Authentication & Configuration
### Authentication
```bash
# Login (interactive)
gh auth login
# With clipboard (OAuth code auto-copied)
gh auth login --clipboard
# Check status
gh auth status
# Switch accounts
gh auth switch
# Logout
gh auth logout
```
### Configuration
```bash
# Set editor
gh config set editor "code --wait"
gh config set editor vim
# Create aliases
gh alias set prs 'pr list --author @me'
gh alias set co 'pr checkout'
gh alias set issues 'issue list --assignee @me'
# List aliases
gh alias list
```
### Browse (Terminal to Web)
```bash
# Open repo in browser
gh browse
# Open specific PR
gh browse 123
# Open issues page
gh browse -- issues
# Open settings
gh browse -- settings
# Open file
gh browse -- src/main.ts
```
---
## Advanced API Usage
For any operation not covered by `gh` commands:
```bash
# GET request
gh api /repos/{owner}/{repo}/issues
# POST request
gh api -X POST /repos/{owner}/{repo}/issues \
-f title="New issue" \
-f body="Description"
# PUT request
gh api -X PUT /repos/{owner}/{repo}/issues/123 \
-f state="closed"
# DELETE request
gh api -X DELETE /repos/{owner}/{repo}/issues/comments/456
# With pagination
gh api /repos/{owner}/{repo}/issues --paginate
# JSON parsing with jq
gh api /repos/{owner}/{repo}/issues --jq '.[].title'
# GraphQL queries
gh api graphql -f query='
query {
repository(owner: "owner", name: "repo") {
issues(first: 10) {
nodes { title number }
}
}
}
'
```
---
## Common Workflows
### Complete PR Workflow
```bash
# Create branch and make changes
git checkout -b feature/new-thing
# ... make changes ...
git add . && git commit -m "Add new feature"
git push -u origin feature/new-thing
# Create PR
gh pr create --fill
# Check status and merge
gh pr checks --watch
gh pr merge --squash --delete-branch
```
### Daily PR Review Routine
```bash
# PRs waiting for your review
gh pr list --search "review-requested:@me"
# Your open PRs
gh pr list --author @me
# Check PR status
gh pr checks --watch
```
### Release Workflow
```bash
# Create and push tag
git tag v1.0.0
git push origin v1.0.0
# Create release with auto-generated notes
gh release create v1.0.0 --generate-notes
# Upload release assets
gh release upload v1.0.0 ./dist/*.tar.gz
```
---
## When to Ask for Help
Ask the user for clarification when:
- Repository owner/name is ambiguous
- Multiple PRs or issues match criteria
- Authentication or permissions issues arise
- Workflow involves destructive operations (force push, delete)
- Need to determine correct branch or refRelated Skills
zellij-helper
Zellij terminal multiplexer for session management, layouts, and pane operations When user mentions Zellij, terminal multiplexer, zellij commands, sessions, panes, layouts, or tabs
vite-react-helper
Vite + React for fast modern web development - build config, HMR, hooks, state management, and performance patterns When user works with Vite, React, creates components, manages state, uses hooks, or configures Vite builds
typescript-helper
TypeScript development guidance for type systems and tooling When user works with .ts or .tsx files, mentions TypeScript, or encounters type errors
terraform-helper
Terraform and OpenTofu infrastructure as code - HCL, providers, modules, state management, and CLI operations When user works with .tf files, mentions Terraform, OpenTofu, tofu, HCL, infrastructure as code, or tf commands
talos-helper
Talos Linux cluster administration using talosctl When user mentions Talos, talosctl, or Talos cluster operations
tailscale-helper
Tailscale VPN and networking - CLI operations, MagicDNS, ACLs, SSH, funnel, serve, and network administration When user mentions Tailscale, tailscale commands, VPN, MagicDNS, tailnet, or Tailscale networking
sentry-helper
Complete Sentry operations via sentry-cli and REST API - issues, releases, source maps, traces, events When user mentions Sentry, errors, issues, releases, source maps, error tracking, stack traces
rust-helper
Rust development with cargo, clippy, rustfmt, testing, and common patterns When user works with .rs files, mentions Rust, cargo, clippy, rustfmt, or encounters Rust compiler errors
python-helper
Python development with modern patterns, type hints, testing, and tooling When user works with .py files, mentions Python, pip, pytest, ruff, uv, or encounters Python errors
prisma-helper
Prisma ORM for type-safe database access - schema design, migrations, queries, relations, and connection management When user works with Prisma, database schemas, migrations, Prisma Client queries, or mentions prisma commands
pinchtab-helper
PinchTab browser automation - profiles, instances, multi-instance routing, tabs, actions, and anti-detection When user mentions PinchTab, browser automation, pinchtab commands, headed/headless browser, or web scraping with Chrome
pagerduty-helper
Complete PagerDuty operations via REST API - incidents, schedules, oncall, services, orchestrations When user mentions PagerDuty, incidents, oncall, schedules, escalation, pages, alerts