GitHub CLI Manager
A lightweight VS Code extension that combines the core browsing experience of
vscode-pull-request-github
and vscode-github-actions, but
uses the local GitHub CLI (gh) for every GitHub
interaction.
Why this extension
GitHub's official PR and Actions extensions ship as Microsoft / GitHub marketplace
builds and do not run reliably on non-Microsoft distributions of VS Code
(VSCodium, Antigravity, Cursor without the MS marketplace, code-server, etc.) — they expect
the built-in GitHub auth provider that those forks don't bundle.
This extension sidesteps that entirely: every GitHub call goes through your
local gh binary, so there is no token to paste, no OAuth flow, and no
extension-level auth settings. If gh auth status works in your terminal,
this extension works.
Features
A single GitHub CLI Manager activity-bar container with three views:
Accounts, Pull Requests, and Actions.
Accounts
Lists every host/account that gh auth status reports, with the active one
marked. Click a row to switch accounts; the title bar exposes Sign In and
Refresh.
- Sign in (
gh auth login in an integrated terminal).
- Switch active account (
gh auth switch).
- Refresh.
Pull Requests
Grouped into three categories:
- Waiting for My Review — PRs where you are a requested reviewer.
- Created by Me — PRs you authored.
- All Open — every open PR in the current repository.
PR details webview shows description, labels, status checks, files changed, and
a merged comments+reviews timeline.
Available actions:
- Open in browser, checkout, copy URL.
- Comment, review (comment / approve / request changes).
- Merge (merge / squash / rebase), mark draft as ready, close.
Issues are intentionally not included.
Actions
Lists every workflow in the repository (active and disabled). Expand a
workflow to see recent runs; expand a run to see its jobs. Conclusion icons:
- ✓ success · ✗ failure · ↻ in-progress · ⏱ queued · ⊘ cancelled
Available actions:
- Workflow: run (with optional ref input), enable / disable, open the
.yml
file.
- Run: re-run, re-run failed jobs, cancel (when in progress), view full logs in
an editor, view failed-only logs, open in browser, copy URL.
- Job: view per-job logs.
The "Current Branch" view from the upstream Actions extension is intentionally
not implemented.
Requirements
- VS Code 1.85+ (or any VSCodium-compatible fork at the same engine version)
gh on your PATH
- A workspace folder cloned from a GitHub remote
gh auth login completed
Configuration
| Setting |
Default |
Description |
ghCliManager.listLimit |
50 |
Max PRs to fetch per category. |
ghCliManager.workflowRunLimit |
20 |
Max runs to show per workflow. |
ghCliManager.autoRefreshSeconds |
0 |
Auto-refresh interval in seconds (0 disables). Applies to PR and Actions views. |
ghCliManager.ghPath |
gh |
Path to the GitHub CLI binary. |
Development
npm install
npm run build # one-shot build of dist/extension.js (esbuild)
npm run watch # esbuild watch mode
npm run type-check # tsc type-check only
npm test # headless VS Code integration tests
npm run package # produce a .vsix
Open this folder in VS Code and press F5 to launch an Extension Development
Host with the extension loaded.
Tests
npm test runs integration tests in a headless VS Code instance via
@vscode/test-electron. They install a fake gh binary that returns canned
JSON, then assert:
- The extension activates and registers every command.
- The PR tree shows three categories, each populated from the right
gh pr list
invocation.
- The PR details webview opens for a given PR.
- The Actions tree lists workflows and their runs, with the correct icon for
each run state (success / failure / in-progress / disabled).
- View Logs opens an editor with the run log content.
- Clipboard / re-run / cancel commands invoke
gh correctly.
Note: On macOS, if ELECTRON_RUN_AS_NODE is exported in your shell (some
IDE-spawned terminals set this), the test harness unsets it before launching
VS Code. Without that, the bundled Electron binary refuses VS Code's CLI args.
How it works
Every action is implemented as a gh subcommand:
Accounts
| UI action |
gh command |
| List accounts |
gh auth status (parsed) |
| Switch account |
gh auth switch --hostname <host> --user <user> |
| Sign in |
gh auth login (run in an integrated terminal) |
Pull requests
| UI action |
gh command |
| Waiting for my review |
gh pr list --state open --search "review-requested:@me" --json … |
| Created by me |
gh pr list --state open --author @me --json … |
| All open |
gh pr list --state open --json … |
| PR details |
gh pr view <N> --json … |
| Checkout |
gh pr checkout <N> |
| Approve / request changes / comment |
gh pr review <N> --approve\|--request-changes\|--comment --body … |
| Comment |
gh pr comment <N> --body … |
| Merge |
gh pr merge <N> --merge\|--squash\|--rebase |
| Mark ready |
gh pr ready <N> |
| Close |
gh pr close <N> |
Actions
| UI action |
gh command |
| List workflows |
gh workflow list --all --json id,name,path,state |
| List runs for a workflow |
gh run list --workflow <id> --json … |
| List jobs for a run |
gh run view <id> --json jobs |
| Run workflow |
gh workflow run <id> [--ref <ref>] |
| Enable / disable |
gh workflow enable\|disable <id> |
| Open workflow file |
opens .github/workflows/<file> in editor |
| Re-run |
gh run rerun <id> |
| Re-run failed jobs |
gh run rerun <id> --failed |
| Cancel |
gh run cancel <id> |
| View full run logs |
gh run view <id> --log (rendered in a virtual document) |
| View failed-only logs |
gh run view <id> --log-failed |
| View job logs |
gh run view --log --job <job-id> |
License
MIT