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, GitHub Copilot CLI, Gemini CLI, Qwen Code, Auggie CLI, OpenCode, Qoder CLI, and more.
Current release: 0.2.3.

Features
- One sidebar, many agents — Run Claude, Copilot, Codex, Qwen, Auggie, Qoder, OpenCode, and OpenClaw side-by-side; pick a different agent per tab, or add more from the registry in Settings.
- 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, accurate changed-line totals, raw edit output, 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 as safe Markdown 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, clickable mention pills, and previewable attachment pills for queued prompts.
- 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; URLs and file paths in code blocks are clickable, and wide tables scroll horizontally instead of fragmenting words.
- Controllable remote bridge — A built-in HTTP + WebSocket server exposes your tabs to a teammate's browser via a 6-character share code; turn browser sharing off per workspace when you only want local VS Code chat, or use LAN sharing and VS Code port forwarding from local or remote workspaces.
- 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 one activation follows your VS Code client profile across its local and remote workspace hosts.
- 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, model, reasoning effort, and any additional select controls an agent advertises (such as Codex fast mode); 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.
- Settings built for repeated use — Add agents from the registry, reorder them by drag-and-drop, test commands, reset to built-in defaults, and see when a registry-sourced agent has an update available.
- Debug logging on demand — Keep production output quiet, then use
ACP Pro: Toggle Debug Mode when you need live ACP request and response logs.
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 — Stored under the extension's per-installation global storage as
acp-pro/bridge.lock (mode 0600, ephemeral per session), keeping bridge coordination isolated between local and remote extension hosts. License entitlement is shared separately through the VS Code client profile.
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 once per VS Code profile — Settings → License. Enter your key once; ACP Pro caches the entitlement in
context.globalState, re-checks it on startup, and reuses it in local, SSH, Tunnel, WSL, Dev Container, and Codespaces workspace extension hosts opened by the same VS Code client profile. Profiles without shared license state show the Free tier.
- Shared entitlement, host-bound unlock — Workspace hosts in the same VS Code client profile present one shared license fingerprint, but each host still uses its own device key. The server delivers the Pro CEK in an encrypted envelope for that host; copied device-key or CEK material cannot be unsealed on another host.
- 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 host that already has a validated, loadable CEK keeps Pro unlocked when the license server is unreachable. A newly joined host retains the shared entitlement but may show Pro unavailable until it can fetch an envelope for its device key.
- Remove anytime — Settings → License → Remove (inline two-click confirm) clears the license from the shared VS Code client profile; 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. Browser sharing is enabled by default and can be turned off per workspace from Settings -> Bridge Server.
- 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 |
array |
8 built-in agents |
Ordered list of agent entries. Each entry has name plus command+args+env (stdio) or url+headers (http). Legacy object-map settings migrate automatically. |
acpPro.defaultAgent |
string |
Claude Code |
Agent used for new tabs. |
acpPro.defaultModel |
string |
— |
Model to request from the agent (optional, agent-dependent). |
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.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": [
{
"name": "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": [
{
"name": "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 |
| Codex |
npx @agentclientprotocol/codex-acp@latest |
| OpenCode |
npx opencode-ai@latest acp |
| GitHub Copilot |
npx @github/copilot-language-server@latest --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 |
| OpenClaw |
npx openclaw acp |
Any agent that implements the Agent Client Protocol will work — add it from Settings -> Agents when it appears in the registry, or add it manually 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: Toggle Debug Mode |
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
acp-pro/bridge.lock from the extension's global storage directory and restart the affected local or remote VS Code extension host.
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 license entitlement, shared by a VS Code client profile and protected by host-bound encrypted Pro keys. You may not copy, redistribute, resell, reverse-engineer, or circumvent the licensing or encryption mechanisms. See LICENSE for the full terms.
| |