GitHub Control Center

A VSCode extension built by developers, for developers — to keep your GitHub situation under control: the PRs waiting for your review and your own open PRs, with a badge count on the activity bar, toast notifications, a GitHub-like PR page, full in-editor code review (diffs, line comments, pending reviews — no checkout needed), and one-click actions (review, merge, checkout) — all without leaving the editor.
Contents
Features
- Three views in the activity bar container, all grouped by repository: To Review (PRs where your review is requested, including team requests), Reviewed (PRs you approved whose approval is still current), and My PRs (your open PRs). Reviews still needing your attention — commented, changes requested, or approvals gone stale after new commits — stay in To Review after requested ones, labeled with your review state, until they close or your review is re-requested. Approving a PR moves it to Reviewed immediately.
- Badge count on the activity bar icon, configurable per list.
- Toast notifications when a new PR requests your review — and when one of your own PRs gets approved or receives a changes request — with quick actions (Open, Settings). Anti-spam by design: the first fetch after a reload never fires a storm.
- PR details panel: click a PR to open a GitHub-like page — conversation timeline with commits (grouped compactly) and rendered mermaid diagrams, merge box (review decision, checks, conflicts, out-of-date branch), reviewers with stale-approval flagging, labels, aggregate diffstat — without leaving VSCode.
- Act on PRs: comment, approve, request changes, merge (with the repo-allowed merge methods), mark your own drafts as ready for review, update an out-of-date branch (rebase or merge commit, GitHub-style selector), and check out the PR branch when the repository is open in the workspace. CI check names link straight to their runs.
- Code review in the editor: expand a PR row to browse its changed files (directory tree or flat list), open real diffs pinned to the PR's commits — no checkout needed, fork PRs included — and review like on GitHub: comments on a line, a selection, or the whole file, batched into a pending review you submit as Comment / Approve / Request changes. Existing review threads show inline with reply and resolve; per-file viewed checkboxes sync with GitHub.
- Row shortcuts: inline icons to check out the PR branch or open it in the browser; right-click to copy the URL or branch name, or mute the repository or its whole organization.
- Muting with search: the "Manage Muted Repositories" command opens a picker that live-searches GitHub as you type — mute/unmute repositories or entire organizations in one click.
- AI brief (optional, requires the Claude Code CLI): a ✨ Brief me button in the PR details panel produces a reviewer-oriented summary grounded in the diff — what changed, risk areas, suggested reading order. See AI features.
- Zero runtime dependencies: native
fetch, VSCode's built-in GitHub authentication, GitHub-rendered markdown (bodyHTML). Mermaid diagrams are rendered by a locally bundled copy of mermaid — no CDN, nothing leaves your machine.
Review icons
Review state is encoded in small glyphs everywhere a PR appears:
| Icon |
Meaning |
| ✓ |
Approved — on a tree row title, approved by you |
| ☑ |
Approved by someone else (tree rows only) |
| ↻ |
Changes requested |
| 💬 |
Commented |
| ● |
Review required / pending / dismissed |
In the details panel the icons are colored (green / red / yellow), and a stale approval — one submitted before the newest commit, force-pushes included — shows as ✓ approved · stale in yellow in the reviewers sidebar. The icon at the start of each tree row is the CI status (pass, fail, spinner while running; draft PRs show the draft icon), independent of the review glyphs in the title.
Authentication
The extension uses VSCode's GitHub authentication provider with the repo and read:org scopes. repo is required to see PRs in private repositories; read:org is required to show team review requests. You'll be prompted to sign in the first time.
Settings
| Setting |
Default |
Description |
githubControlCenter.badge.countToReview |
true |
Include the To Review view (requested reviews plus reviews needing your attention) in the badge count. |
githubControlCenter.badge.countMine |
false |
Include your own open PRs in the badge count. |
githubControlCenter.badge.countReviewed |
false |
Include the Reviewed view (PRs you approved that are still current) in the badge count. Has no effect while toReview.hideReviewed is on. |
githubControlCenter.notifications.enabled |
true |
Show notifications for new review requests and for review outcomes on your own PRs. |
githubControlCenter.mutedRepos |
[] |
Entries hidden from lists, badge, and notifications: owner/repo for one repository, owner (or owner/*) for a whole organization. Best edited via the Manage Muted Repositories command (searchable picker). |
githubControlCenter.toReview.hideDrafts |
false |
Hide draft PRs from the To Review list, badge, and notifications. |
githubControlCenter.toReview.hideReviewed |
false |
Hide everything you already reviewed while it waits for a re-request: the Reviewed view disappears and no reviewed rows show in To Review. |
githubControlCenter.updateBranch.defaultMethod |
REBASE |
Method preselected for the Update branch action (REBASE or MERGE). |
githubControlCenter.files.layout |
tree |
How a PR's changed files are laid out under its row: tree (directory hierarchy, compacted single-child folders) or flat (plain list). Also toggled from the … menu of either view. |
githubControlCenter.ai.backend |
claude-code |
Which local AI backend powers the AI features. Claude Code is the only option today. |
githubControlCenter.ai.language |
English |
Language AI-generated content is written in, regardless of the AI backend. |
githubControlCenter.ai.claude.command |
claude |
Path to the Claude Code CLI (machine-scoped: workspaces cannot override it). Claude Code backend only. |
githubControlCenter.ai.claude.model |
sonnet |
Model passed to claude --model: Sonnet, Haiku, Opus, or the CLI's configured default. Claude Code backend only. |
AI features
The ✨ Brief me button in the PR details panel generates a reviewer-oriented summary of the PR: what actually changed, where the risk is, and in what order to read the files — grounded in the diff, since titles and descriptions are often stale.
- Requires the Claude Code CLI on your machine (
claude on the PATH, or set githubControlCenter.ai.claude.command). No API key: the extension runs the CLI in headless mode with your existing Claude subscription. When the binary is missing, the AI features simply don't appear.
- Privacy: the PR's title, description, file list, and patches are sent to Anthropic through your own Claude CLI — the same channel your Claude Code usage already goes through. Nothing is sent unless you click the button.
- Safety: the CLI runs with all tools disabled and isolated settings, so PR content can never execute anything or read your Claude configuration. Still, the summary is generated from untrusted PR content — treat it as an aid, not a verdict.
- Summaries are per head commit and survive VSCode restarts (stored locally, never synced): once generated, the button stays disabled until the author pushes new commits — then it re-enables and produces a fresh brief. To force regeneration (e.g. after changing the language setting), run GitHub Control Center: Clear AI Brief Cache from the command palette.
Reviewing pull requests
A full code review without leaving the editor — and without checking out the branch.
Changed files
Expand a PR row in either view to load its changed files, laid out as a directory tree (single-child folders compacted, like the explorer) or a flat list — switch with View Files as List / Tree in the … menu of the view, or via githubControlCenter.files.layout. Each file shows its change type (added / modified / deleted / renamed) and a diffstat tooltip; the checkbox marks it viewed on GitHub, exactly like the web UI.
Diffs
Click a file to open a native VSCode diff between the PR's base and head commits. Contents come from the GitHub API pinned to the PR's SHAs, so:
- no local checkout is needed, and your working tree is never touched;
- fork PRs work out of the box;
- what you see is exactly the PR's diff, regardless of local state.
Commenting is only offered on lines that are part of the diff — the same rule GitHub enforces:
- Single line: click the
+ in the gutter next to a changed or context line.
- Multi-line: select the lines, then click the
+ on the selection. The selection must stay within one diff hunk.
- Whole file: click the comment icon in the diff editor's title bar (also GitHub Control Center: Comment on File in the command palette). This is also the way to comment binaries and files too large for a text diff.
Each comment widget offers two actions: Add Review Comment batches the comment into your pending review; Add Single Comment posts it immediately (refused while a pending review exists — submit or discard it first).
Pending review
Your first review comment starts a GitHub pending review: draft comments are visible only to you until submitted, and the status bar shows PR #N: k pending while one is open. When you're done:
- Submit Review… (status bar click, or command palette) — choose Comment, Approve, or Request changes; a summary body is required to request changes.
- Discard Pending Review — deletes the draft and all its comments after a confirmation.
Existing threads
Review threads already on the PR appear inline at their anchored lines (both diff sides), with the full conversation: reply from the thread, and resolve or unresolve it from the thread header. Pending comments are labeled, resolved threads start collapsed, and outdated threads (whose anchor line no longer exists in the diff) are skipped — read those on GitHub.
Muting repositories and organizations
Muted entries disappear everywhere at once: both lists, the badge count, and notifications.
Three ways to mute:
- Searchable picker — run GitHub Control Center: Manage Muted Repositories (command palette, or the
… menu of either view). It lists your current muted entries (pick one to unmute) and the repositories currently on your radar (pick one to mute). Typing searches GitHub live, and any slash-less text offers a "Mute everything from …" item for the whole organization.
- Right-click a PR row — Mute Repository or Mute Organization.
- Settings — edit
githubControlCenter.mutedRepos by hand.
Entry syntax (case-insensitive):
"githubControlCenter.mutedRepos": [
"acme/noisy-repo", // mutes one repository
"some-org", // mutes the whole organization
"other-org/*" // same, alternative spelling
]
Unmuting: the picker (entries are listed first, marked as muted), or remove the entry from Settings.
Install
Grab the .vsix from the latest GitHub Release and:
code --install-extension github-control-center-<version>.vsix
Or build it yourself:
yarn install
yarn dlx @vscode/vsce package --no-dependencies
code --install-extension github-control-center-<version>.vsix
See CONTRIBUTING.md for development setup.