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.
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.
A single GitHub CLI Manager activity-bar container with three views: Accounts, Pull Requests, and Actions.
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 loginin an integrated terminal). - Switch active account (
gh auth switch). - Refresh.
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.
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
.ymlfile. - 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.
- VS Code 1.85+ (or any VSCodium-compatible fork at the same engine version)
ghon yourPATH- A workspace folder cloned from a GitHub remote
gh auth logincompleted
| 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. |
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 .vsixOpen this folder in VS Code and press F5 to launch an Extension Development
Host with the extension loaded.
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 listinvocation. - 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
ghcorrectly.
Note: On macOS, if
ELECTRON_RUN_AS_NODEis 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.
Every action is implemented as a gh subcommand:
| 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) |
| 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> |
| 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> |
MIT