npx claudepluginhub nige-l/claude-github-helpersStructured GitHub issue management for Claude Code agents — list, create, close, reopen, view, comment, and search issues. Returns structured JSON via the gh CLI.
Open-source GitHub issue management and local git plugin for Claude Code agents.
List, create, close, reopen, view, comment on, search, and batch-close GitHub issues — plus structured local git operations (status, diff, log, stage, commit, push) — all returning parseable JSON. Gives Claude Code agents reliable access to GitHub and git without shelling out raw gh or git commands.
1. Install and authenticate the gh CLI (if not already done):
sudo apt install -y gh # Debian/Ubuntu
gh auth login
2. Install the plugin.
Add the GitHub repo as a marketplace, then install:
claude plugin marketplace add https://github.com/Nige-l/claude-github-helpers
claude plugin install github-helpers
3. Use the tools. Ask Claude to list issues, create a bug report, close an issue after a commit, or search for duplicates. The tools are available automatically once the plugin is installed.
git clone https://github.com/Nige-l/claude-github-helpers.git
claude --plugin-dir ./claude-github-helpers
This loads the plugin for a single session without installing it globally.
| Tool | Description | Key Parameters |
|---|---|---|
list_issues | List and filter issues | repo, state (open/closed/all), labels, assignee, milestone, limit |
create_issue | Create a new issue | repo, title, body, labels, assignee |
close_issue | Close an issue | repo, number, comment (optional) |
reopen_issue | Reopen a closed issue | repo, number, comment (optional) |
view_issue | View full issue + comments | repo, number |
add_comment | Comment on an issue | repo, number, body |
search_issues | Search by keyword | repo, query, state, limit |
batch_close | Close multiple issues at once | repo, numbers (comma-separated, e.g. "1,2,3"), comment (optional) |
The repo parameter takes owner/repo format (e.g. Nige-l/WorldOfFantasyWarStuff). labels and numbers are comma-separated strings, not JSON arrays.
| Tool | Description | Key Parameters |
|---|---|---|
git_status | Branch, clean flag, staged/modified/untracked files, ahead/behind | repo_path (optional, defaults to cwd) |
git_diff | Per-file stats and optional full diff text | repo_path, staged (bool), stat_only (bool) |
git_log | Recent commits as JSON (hash, author, date, message) | repo_path, limit, since |
stage_files | Stage specific files with git add | files (comma-separated), repo_path |
create_commit | Commit with Co-Authored-By trailer appended automatically | message, repo_path, co_author |
git_push | Push to remote (force push always refused) | repo_path, remote, branch |
All tools return structured JSON.
gh directly?Agents can shell out to gh, but the wrapper tools meaningfully reduce token use and failure modes:
list_issues(repo: "x/y", state: "open", labels: "bug") is ~14 tokens. The equivalent agent-written command — gh issue list -R x/y --state open --label bug --json number,title,state,labels,assignees,milestone,url,createdAt,updatedAt --limit 30 — is ~37. That's roughly a 60% reduction on command output tokens, and it compounds across every GitHub touch in a session.gh's human-formatting whitespace, TTY color codes, or the --json field list you had to specify. Fields are fixed so the agent never has to guess the shape.view_issue returns the issue body and all comments in one call — raw gh needs gh issue view plus a second gh api repos/.../issues/N/comments invocation (and gh issue view --comments currently emits a GraphQL deprecation warning on some repos). batch_close turns N tool uses into 1.gh issue create without --body drops into an editor in non-interactive contexts and hangs the agent; the wrapper always passes a body. Same class of fix for other silent-failure edges.In practice the biggest win isn't any single call — it's that the agent stops paying the "remind me of the gh flags" tax on every GitHub action.
| Skill | Description |
|---|---|
/github-helpers:setup | Check and install gh CLI, authenticate, verify access |
List open bugs:
list_issues(repo: "owner/repo", state: "open", labels: ["bug"])