github-tools
Executes GitHub operations via gh CLI wrapper. Use when managing issues, pull requests, workflows, CI runs, projects, releases, cache, labels, or searching repositories and code.
When & Why to Use This Skill
The github-tools skill is a comprehensive GitHub CLI (gh) wrapper that enables Claude to perform end-to-end repository management and automation. It streamlines the software development lifecycle by allowing agents to manage issues, automate pull request workflows, monitor CI/CD pipeline runs, and organize GitHub Projects V2. By providing direct access to searching code, managing releases, and interacting with GitHub Discussions, it serves as a powerful bridge between AI reasoning and version control operations, significantly enhancing developer productivity.
Use Cases
- Automated Issue Management: Efficiently create, label, edit, and comment on issues to maintain a clean and organized backlog.
- Streamlined Code Reviews: List open pull requests, view file diffs, check CI status, and submit approvals or feedback directly through the agent.
- CI/CD Pipeline Monitoring: Track GitHub Action runs, retrieve error logs for failed jobs, and trigger manual workflow reruns to ensure deployment stability.
- Project & Sprint Organization: Manage GitHub Projects V2 by adding items, updating custom fields, and tracking task status across the organization.
- Advanced Repository Search: Search for specific code patterns, repositories, or discussions to gather technical context or find reusable components.
- Release & Community Engagement: Manage software releases and participate in GitHub Discussions by creating, answering, or moderating community threads.
| name | github-tools |
|---|---|
| type | complex |
| depth | base |
| user-invocable | false |
| description | >- |
[H1][GITHUB-TOOLS]
Dictum: Standardized invocation reduces agent errors.
Invokes gh CLI commands through Python wrapper.
[IMPORTANT] Zero-arg commands default to state=open, limit=30. System auto-configures OAuth scopes.
# Zero-arg commands
uv run .claude/skills/github-tools/scripts/gh.py issue-list
uv run .claude/skills/github-tools/scripts/gh.py pr-list
uv run .claude/skills/github-tools/scripts/gh.py run-list
uv run .claude/skills/github-tools/scripts/gh.py workflow-list
uv run .claude/skills/github-tools/scripts/gh.py label-list
uv run .claude/skills/github-tools/scripts/gh.py release-list
uv run .claude/skills/github-tools/scripts/gh.py cache-list
uv run .claude/skills/github-tools/scripts/gh.py project-list
uv run .claude/skills/github-tools/scripts/gh.py repo-view
[1][ISSUES]
uv run .claude/skills/github-tools/scripts/gh.py issue-list --state closed
uv run .claude/skills/github-tools/scripts/gh.py issue-view --number 42
uv run .claude/skills/github-tools/scripts/gh.py issue-create --title "Bug report" --body "Details"
uv run .claude/skills/github-tools/scripts/gh.py issue-comment --number 42 --body "Comment"
uv run .claude/skills/github-tools/scripts/gh.py issue-close --number 42
uv run .claude/skills/github-tools/scripts/gh.py issue-edit --number 42 --title "New title" --labels "bug,urgent"
[2][PULL_REQUESTS]
uv run .claude/skills/github-tools/scripts/gh.py pr-list --state closed
uv run .claude/skills/github-tools/scripts/gh.py pr-view --number 99
uv run .claude/skills/github-tools/scripts/gh.py pr-create --title "Feature" --body "Description" --base main
uv run .claude/skills/github-tools/scripts/gh.py pr-diff --number 99
uv run .claude/skills/github-tools/scripts/gh.py pr-files --number 99
uv run .claude/skills/github-tools/scripts/gh.py pr-checks --number 99
uv run .claude/skills/github-tools/scripts/gh.py pr-merge --number 99
uv run .claude/skills/github-tools/scripts/gh.py pr-review --number 99 --event APPROVE --body "LGTM"
[3][WORKFLOWS]
uv run .claude/skills/github-tools/scripts/gh.py run-list --limit 10
uv run .claude/skills/github-tools/scripts/gh.py run-view --run-id 12345
uv run .claude/skills/github-tools/scripts/gh.py run-logs --run-id 12345 --failed
uv run .claude/skills/github-tools/scripts/gh.py run-rerun --run-id 12345
uv run .claude/skills/github-tools/scripts/gh.py workflow-view --workflow ci.yml
uv run .claude/skills/github-tools/scripts/gh.py workflow-run --workflow ci.yml --ref main
[4][SEARCH]
uv run .claude/skills/github-tools/scripts/gh.py search-repos --query "nx monorepo" --limit 10
uv run .claude/skills/github-tools/scripts/gh.py search-code --query "dispatch table" --limit 10
uv run .claude/skills/github-tools/scripts/gh.py search-issues --query "is:open label:bug" --limit 10
[5][DISCUSSIONS]
Queries
uv run .claude/skills/github-tools/scripts/gh.py discussion-list
uv run .claude/skills/github-tools/scripts/gh.py discussion-list --category "D_kwDOCat123" --limit 10 --answered
uv run .claude/skills/github-tools/scripts/gh.py discussion-view --number 42
uv run .claude/skills/github-tools/scripts/gh.py discussion-category-list
uv run .claude/skills/github-tools/scripts/gh.py discussion-pinned
Lifecycle
uv run .claude/skills/github-tools/scripts/gh.py discussion-create --category-id "D_kwDOCat123" --title "Topic" --body "Content"
uv run .claude/skills/github-tools/scripts/gh.py discussion-update --discussion-id "D_kwDOABC123" --title "New title" --body "Updated"
uv run .claude/skills/github-tools/scripts/gh.py discussion-delete --discussion-id "D_kwDOABC123"
uv run .claude/skills/github-tools/scripts/gh.py discussion-close --discussion-id "D_kwDOABC123" --reason RESOLVED
uv run .claude/skills/github-tools/scripts/gh.py discussion-reopen --discussion-id "D_kwDOABC123"
Moderation
uv run .claude/skills/github-tools/scripts/gh.py discussion-lock --discussion-id "D_kwDOABC123" --reason SPAM
uv run .claude/skills/github-tools/scripts/gh.py discussion-unlock --discussion-id "D_kwDOABC123"
Comments
uv run .claude/skills/github-tools/scripts/gh.py discussion-comment --discussion-id "D_kwDOABC123" --body "Comment"
uv run .claude/skills/github-tools/scripts/gh.py discussion-comment --discussion-id "D_kwDOABC123" --body "Reply" --reply-to "DC_kwDOCmt456"
uv run .claude/skills/github-tools/scripts/gh.py discussion-comment-update --comment-id "DC_kwDOCmt456" --body "Edited"
uv run .claude/skills/github-tools/scripts/gh.py discussion-comment-delete --comment-id "DC_kwDOCmt456"
Answers
uv run .claude/skills/github-tools/scripts/gh.py discussion-mark-answer --comment-id "DC_kwDOCmt456"
uv run .claude/skills/github-tools/scripts/gh.py discussion-unmark-answer --comment-id "DC_kwDOCmt456"
Labels
uv run .claude/skills/github-tools/scripts/gh.py discussion-add-label --discussion-id "D_kwDOABC123" --label-ids '["LA_kwDOLbl789"]'
uv run .claude/skills/github-tools/scripts/gh.py discussion-remove-label --discussion-id "D_kwDOABC123" --label-ids '["LA_kwDOLbl789"]'
Reactions
uv run .claude/skills/github-tools/scripts/gh.py discussion-react --subject-id "D_kwDOABC123" --reaction THUMBS_UP
[NOTE] Get discussion-id from discussion-view output id field. Get category-id from discussion-category-list. Get comment-id from comment nodes in discussion-view. Get label-ids from label-list (use node_id field). Reaction values: THUMBS_UP, THUMBS_DOWN, LAUGH, HOORAY, CONFUSED, HEART, ROCKET, EYES.
[6][PROJECTS_V2]
# View/List
uv run .claude/skills/github-tools/scripts/gh.py project-view --project 1
uv run .claude/skills/github-tools/scripts/gh.py project-item-list --project 1
uv run .claude/skills/github-tools/scripts/gh.py project-field-list --project 1
# CRUD
uv run .claude/skills/github-tools/scripts/gh.py project-create --title "Sprint 1"
uv run .claude/skills/github-tools/scripts/gh.py project-close --project 1
uv run .claude/skills/github-tools/scripts/gh.py project-delete --project 1
# Items
uv run .claude/skills/github-tools/scripts/gh.py project-item-add --project 1 --url "https://github.com/owner/repo/issues/42"
uv run .claude/skills/github-tools/scripts/gh.py project-item-edit --id ITEM_ID --project-id PROJECT_NODE_ID --field-id FIELD_ID --single-select-option-id OPT_ID
uv run .claude/skills/github-tools/scripts/gh.py project-item-delete --project 1 --id ITEM_ID
uv run .claude/skills/github-tools/scripts/gh.py project-item-archive --project 1 --id ITEM_ID
# Fields
uv run .claude/skills/github-tools/scripts/gh.py project-field-create --project 1 --name "Priority" --data-type SINGLE_SELECT --single-select-options "High,Medium,Low"
[NOTE] Get ITEM_ID, FIELD_ID from project-item-list/project-field-list. Get PROJECT_NODE_ID from project-view output id field. Field edit supports: --text, --number, --date, --single-select-option-id, --iteration-id.
[7][OTHER]
uv run .claude/skills/github-tools/scripts/gh.py release-view --tag v1.0.0
uv run .claude/skills/github-tools/scripts/gh.py api --endpoint "/repos/{owner}/{repo}/issues" --method GET
[8][OUTPUT]
Commands return: {"status": "success|error", ...}.
| [INDEX] | [PATTERN] | [RESPONSE] |
|---|---|---|
| [1] | List commands | {items: object[]} |
| [2] | View commands | {item: object} |
| [3] | Mutation commands | {number: int, action: bool} |
| [4] | Search commands | {query: string, results: object[]} |
| [5] | Diff commands | {number: int, diff: string} |