ACP Pro
A unified chat interface for AI coding agents in VS Code. Run multiple agent sessions side-by-side in tabs, stream tool calls and inline diffs, and share live sessions with teammates over a built-in bridge.
ACP Pro speaks the Agent Client Protocol (ACP), so it works with any ACP-compatible agent: Claude Code, Codex CLI, GitHub Copilot CLI, Gemini CLI, Qwen Code, Auggie CLI, OpenCode, Qoder CLI, and more.
Current release: 0.2.0.

Features
- One sidebar, many agents — Run Claude, Copilot, Gemini, Codex, Qwen, Auggie, Qoder, OpenCode, and OpenClaw side-by-side; pick a different agent per tab.
- Multi-tab sessions — Independent history, model, permission mode, and working directory in every tab; reattach to past sessions from the
+ menu.
- Per-tab cwd & fork — Pick a working directory per tab from the chat header (workspace folders + recent dirs), or fork the active tab to spin off a new session with the same agent, model, mode, and cwd.
- Sticky chat-view header — Every tab gets a 16px header strip with a session-state dot (one-click refresh on disconnect), the agent's client name and version, the active cwd, and a powerlevel10k-style git pill (branch + ahead/behind/stash/staged/unstaged/untracked counters) that stays synced with the tab's cwd.
- Live tool streaming — Watch
read, edit, bash, web_search, and other tool kinds appear as they run, with kind icons, friendly status labels, inline file diffs, and word-level highlights.
- Rich content blocks — Tool calls and messages render image, audio, diff, resource, and resource-link blocks inline; image attachments open in a preview modal; text and terminal output stay scoped to a collapsible details panel, while failed tool-call errors surface outside it.
- Plans and thinking, separated — Execution plans render in a collapsible task panel; reasoning streams into its own thought block you can expand on demand.
- Smart composer —
/ for slash commands and provider-discovered skills, @ for files and workspace mentions (with the active editor selection as the first option), drag-and-paste for attachments, : after a path to pin a line range, and clickable mention pills that open the file in VS Code.
- Send selection to chat — Cmd+Alt+L (or Ctrl+Alt+L) injects the editor selection as an
@<path>:<lines> mention into the active tab; auto-creates a tab when none is open.
- Markdown answers — GitHub-Flavored Markdown with
highlight.js-powered code blocks for assistant replies; wide tables scroll horizontally instead of fragmenting words.
- Always-on remote bridge — A built-in HTTP + WebSocket server exposes your tabs to a teammate's browser via a 6-character share code; pair with VS Code port forwarding for public access.
- Pro sharing controls — Activate a license to unlock a persistent, customizable workspace share code and an owner password. Browser viewers claim ownership with the password; owners flip the workspace between read-only and full-write access from a tab-bar lock toggle. The extension stays free — licensing only unlocks these optional sharing features, and your key is bound to your device and never transmitted in cleartext.
- Light & dark themes — A sun/moon toggle in the tab bar flips themes, or pick System / Dark / Light in Settings → Appearance. System mode follows VS Code automatically.
- Per-session controls — Switch permission mode (
default, acceptEdits, plan, bypassPermissions), adjust reasoning effort when the agent exposes it, cycle modes with Shift+Tab, cancel a turn with Esc, and queue follow-up prompts mid-stream.
- Status-bar telemetry — Per-session token usage and cost surface in the status bar; the bridge share link is one click away.
- Resilient sessions — Tabs auto-restore on window reload via
session/load, replay their JSONL history, and silently fall through to a fresh session/new at the same cwd when the agent has dropped the original session. Each window's chat panel reads its sessions directly from the extension host, so it keeps rendering even when another window's bridge leader goes away.
- Diagnostics built in — A preflight check warns when
npx or node is missing, and the Diagnostics command lists what's resolvable on your PATH.
Bridge — Remote Session Sharing
ACP Pro embeds a tiny HTTP + WebSocket server that starts automatically with the extension. The first VS Code window of a user becomes the leader and binds the configured port; subsequent windows join as followers over loopback IPC.
- Status bar indicator —
$(broadcast) ACP <shareCode>. Click to copy the shareable URL.
- Loopback (
127.0.0.1) — URL resolves via vscode.env.asExternalUri, so VS Code port forwarding (Remote - Tunnels / Codespaces / SSH) automatically produces a public URL.
- All interfaces (
0.0.0.0) — URL resolves to the host's first non-loopback IPv4 address for LAN sharing.
- Auth — Every HTTP route and WebSocket upgrade validates the
?code=<shareCode> query.
- Lockfile —
~/.vscode/extensions/acp-pro/bridge.lock (mode 0600, ephemeral per session).
Licensing & Pro Features
ACP Pro is free. A license unlocks optional sharing controls without touching the core experience.
- Get a license — Purchase a Pro key from Gumroad.
- Activate — Settings → License. Enter your key; the extension validates it once on activation and re-checks on each startup. The unlicensed state shows as the Free tier.
- Device-bound — Your key is tied to a silent machine fingerprint and is never transmitted or stored in cleartext. Copying VS Code state to another machine does not carry the license.
- Pro unlocks — A persistent, customizable workspace share code; an owner password for browser viewers to claim ownership; and an owner-only tab-bar toggle to switch the workspace between read-only and full-write viewer access.
- Offline-resilient — A previously validated license keeps Pro unlocked when the license server is unreachable, so server downtime never locks you out.
- Remove anytime — Settings → License → Remove (inline two-click confirm) clears the license locally; you can reactivate the same key later.
Requirements
- VS Code 1.96 or later
- Node.js 20 or later (agents launched via
npx require a working Node toolchain on your PATH)
- An ACP-compatible agent. See Supported Agents — all defaults use
npx, so no manual install is required.
Quick Start
- Click the ACP Pro icon in the Activity Bar (it uses the VS Code
sparkle icon).
- The chat sidebar opens with an empty session. The default agent is Claude Code.
- Type a prompt and press Enter. The extension launches the agent via
npx on first use (subsequent runs are cached).
- Use the
+ button in the tab bar to open another session — you can switch to a different agent per tab.
Sharing a Session
The bridge starts automatically when the extension activates — there is no enable toggle.
- Look at the status bar for
$(broadcast) ACP <shareCode> (a fresh 6-character code is generated each activation).
- Click it to copy the share URL (
http://<host>:<port>?code=<shareCode>).
- Open the URL in a browser to load your live tabs in a read-only view.
- To share beyond LAN, enable VS Code port forwarding for the bridge port — the status bar URL updates to the forwarded address automatically.
Configuration
All settings live under acpPro.* and can be edited via VS Code Settings UI or settings.json.
| Setting |
Type |
Default |
Description |
acpPro.agents |
object |
9 built-in agents |
Map of agent name → transport config. Each entry has command+args+env (stdio) or url+headers (http). |
acpPro.defaultAgent |
string |
Claude Code |
Agent used for new tabs. |
acpPro.defaultModel |
string |
— |
Model to request from the agent (optional, agent-dependent). |
acpPro.defaultMode |
enum |
default |
Permission mode: default, acceptEdits, plan, bypassPermissions. |
acpPro.autoApproveDefault |
boolean |
false |
Auto-approve tool calls for new sessions. |
acpPro.bridge.port |
integer |
4545 |
Preferred TCP port. 0 = ephemeral. Falls back to ephemeral if busy. |
acpPro.bridge.listenHost |
enum |
127.0.0.1 |
127.0.0.1 (loopback only) or 0.0.0.0 (all interfaces). |
acpPro.soundOnPromptEnd |
boolean |
false |
Play a notification when an agent finishes. |
acpPro.notificationSound |
enum |
Abstract Chime |
Sound: Abstract Chime, Gentle Bell, Soft Ping, Digital Tone, None. |
acpPro.licenseServerUrl |
string |
— |
Host server used to activate and check a Pro license. Must be https:// (loopback http allowed for self-hosting); insecure or invalid values fall back to the secure default. |
Example: custom agent over stdio
{
"acpPro.agents": {
"My Local Agent": {
"command": "node",
"args": ["/path/to/my-agent.js", "--acp"],
"env": { "MY_AGENT_API_KEY": "sk-..." }
}
}
}
Example: remote agent over HTTP
{
"acpPro.agents": {
"Remote Agent": {
"transport": "http",
"url": "https://agent.example.com/acp",
"headers": { "Authorization": "Bearer sk-..." }
}
}
}
Supported Agents
Defaults shipped in acpPro.agents:
| Agent |
Command |
| Claude Code |
npx @agentclientprotocol/claude-agent-acp@latest |
| GitHub Copilot |
npx @github/copilot-language-server@latest --acp |
| Gemini CLI |
npx @google/gemini-cli@latest --experimental-acp |
| Qwen Code |
npx @qwen-code/qwen-code@latest --acp --experimental-skills |
| Auggie CLI |
npx @augmentcode/auggie@latest --acp |
| Qoder CLI |
npx @qoder-ai/qodercli@latest --acp |
| Codex CLI |
npx @zed-industries/codex-acp@latest |
| OpenCode |
npx opencode-ai@latest acp |
| OpenClaw |
npx openclaw acp |
Any agent that implements the Agent Client Protocol will work — just add it to acpPro.agents.
Commands
All commands are available via the Command Palette (Ctrl/Cmd+Shift+P):
| Command |
Title |
acp-pro.newTab |
ACP Pro: New Tab |
acp-pro.closeTab |
ACP Pro: Close Active Tab |
acp-pro.cancelTurn |
ACP Pro: Cancel Current Turn |
acp-pro.focusChatView |
ACP Pro: Focus Chat View |
acp-pro.copyShareInfo |
ACP Pro: Copy Bridge Share Link |
acp-pro.doctor |
ACP Pro: Diagnostics |
acp-pro.forkTab |
ACP Pro: Fork Active Tab |
acp-pro.pickTabCwd |
ACP Pro: Pick Working Directory for Active Tab |
acp-pro.sendSelectionToActiveTab |
ACP Pro: Send Selection to Active Tab |
Focus Chat View also appears as a bot-glyph button in the editor title bar, and reveals the chat at its current docked location rather than forcing it back into the sidebar.
Keyboard Shortcuts
ACP Pro ships one default keybinding:
| Command |
Windows / Linux |
macOS |
When |
acp-pro.sendSelectionToActiveTab |
Ctrl+Alt+L |
Cmd+Alt+L |
editor has focus and a selection |
Inside the chat webview:
- Enter — send prompt
- Shift+Enter — newline
- Shift+Tab — cycle the active tab's permission mode
- Esc — cancel the current turn
- / — open slash-command autocomplete
- @ — open file/mention autocomplete
Bind any command via keybindings.json — for example:
{
"key": "ctrl+alt+c",
"command": "acp-pro.copyShareInfo"
}
Troubleshooting
- Agent fails to start — Check the Output panel → "ACP Pro" channel. First run may take time while
npx downloads the agent package.
- Bridge port in use — The extension falls back to an ephemeral port and surfaces a warning. Set
acpPro.bridge.port to 0 to always use ephemeral.
- Share URL is
127.0.0.1 — That means asExternalUri did not produce a forwarded URL. Enable VS Code port forwarding for the bridge port, or switch acpPro.bridge.listenHost to 0.0.0.0.
- Stale lockfile — Delete
~/.vscode/extensions/acp-pro/bridge.lock and restart VS Code.
License
ACP Pro is proprietary, commercial software — © Duc Lv, All Rights Reserved. It is licensed, not sold, under the End-User License Agreement in LICENSE. The core experience is free to install and use; Pro features require a valid, device-bound license key. You may not copy, redistribute, resell, reverse-engineer, or circumvent the licensing or encryption mechanisms. See LICENSE for the full terms.
| |