The Claude Code VS Code extension is a graphical panel inside the editor: plan review as an editable Markdown document, side-by-side diffs before each edit, selection and at-mention context, session history, and checkpoints you can rewind to. It needs VS Code 1.94.0 or later and a paid Claude plan. It bundles its own copy of the CLI for the panel but does not put claude on your PATH, so CLI-only features need the standalone install too. The terminal still wins for parallel sessions, scripting and remote work. All accurate as of August 2026.
- The extension is the same agent with an IDE view, not a separate product.
- Requires VS Code 1.94.0+ and a Pro, Max, Team, Enterprise or Console account.
- Installing it does not add
claudeto PATH. Install the CLI as well. - <kbd>Cmd</kbd>+<kbd>Esc</kbd> toggles focus; <kbd>Option</kbd>+<kbd>K</kbd> inserts an
@file#5-10reference. - Both surfaces read the same
CLAUDE.md,.claude/and settings, and share session history. - Terminal-only: the
!bash shortcut, tab completion, and the full command set.
What the extension actually is
A graphical Claude Code panel that lives in the editor. The Spark icon marks it: in the editor toolbar when a file is open, in the Activity Bar for the sessions list, and in the status bar as Claude Code when nothing is open. Drag the panel into the secondary sidebar to keep it beside your code, into the primary sidebar, or into the editor area as an ordinary tab.
- Plan review as a document. In plan mode the plan opens as a full Markdown file you can annotate inline before Claude starts. Commenting on a plan in an editor is a different activity from arguing with a paragraph in a terminal.
- Diffs before the edit. Every proposed change opens side by side with an accept, reject or redirect prompt. Edit the proposed content in the diff view and Claude is told you modified it, so it does not assume the file matches its own proposal.
- Selection is context automatically. Highlighted code is visible to Claude without pasting; the footer shows how many lines. The eye-slash icon hides the selection when you would rather it did not.
- Checkpoints. Hover any message to fork the conversation, rewind the code to that point, or both.
- Sessions in tabs and windows. Open in New Tab or Open in New Window runs several conversations with independent context. A blue dot means a permission request is waiting; orange means Claude finished while the tab was hidden.
Setting it up
Check the version, then install
VS Code 1.94.0 or later, under Help then About. Open the Extensions view with <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>X</kbd> or <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>X</kbd>, search for Claude Code, and install.
Forks work too. Cursor, Kiro and other VS Code derivatives install it from their own Extensions view or from the Open VSX registry. If a fork refuses, install the CLI and run claude in its integrated terminal instead; the CLI works in any terminal.
Sign in
The first time the panel opens it shows a sign-in screen. Any paid Claude plan or a Console account works and no API key is required.
If you have ANTHROPIC_API_KEY exported in your shell but the panel still asks you to sign in, VS Code did not inherit your shell environment. Launch it from a terminal with code ., or just sign in with your Claude account.
Install the CLI as well
curl -fsSL https://claude.ai/install.sh | bash
exec $SHELL -l
claude --version
This is what makes claude, claude mcp add and claude --resume work in the integrated terminal. If you are running the CLI in an external terminal and want the diff viewer and diagnostics, run /ide inside Claude Code to connect it to VS Code.
Send the first prompt
Select some code, then press <kbd>Option</kbd>+<kbd>K</kbd> or <kbd>Alt</kbd>+<kbd>K</kbd> to drop an @app.ts#5-10 reference into the prompt box. Type @ for fuzzy file and folder matching, and add a trailing slash to mean a folder.
Terminal versus extension, row by row
Same agent, same config, different surface. As of August 2026.
| Capability | Terminal | VS Code extension |
|---|---|---|
| Runs the same agent | Yes | Yes |
Reads CLAUDE.md, .claude/, settings | Yes | Yes |
| Slash commands and skills | All of them | A subset; type / to see it |
| MCP servers | Full config | Add via CLI, manage with /mcp |
| Checkpoints and rewind | Yes | Yes |
! bash shortcut | Yes | No |
| Tab completion | Yes | No |
| Current selection as context | Paste it yourself | Automatic |
| Diff review | Unified diff in the terminal | Native side-by-side, editable |
| Plan review | Text in the transcript | Editable Markdown document |
| Several sessions at once | Easy | Tabs and windows; heavier |
Scripting with -p | Native | No equivalent |
| Remote over SSH | Native | Via Remote-SSH |
The two surfaces share conversation history, so this is not a fork in the road. Start in the panel, then run claude --resume in the terminal to pick the same conversation up in an interactive picker.
The shortcuts worth learning
| Action | Mac | Windows and Linux |
|---|---|---|
| Toggle focus between editor and Claude | <kbd>Cmd</kbd>+<kbd>Esc</kbd> | <kbd>Ctrl</kbd>+<kbd>Esc</kbd> |
| Insert an @-mention for the selection | <kbd>Option</kbd>+<kbd>K</kbd> | <kbd>Alt</kbd>+<kbd>K</kbd> |
| Open a conversation in a new tab | <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>Esc</kbd> | <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>Esc</kbd> |
| Reopen the last closed session tab | <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>T</kbd> | <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>T</kbd> |
| Toggle Focus view (hide tool activity) | <kbd>Ctrl</kbd>+<kbd>Option</kbd>+<kbd>F</kbd> | <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>F</kbd> |
| New line without sending | <kbd>Shift</kbd>+<kbd>Enter</kbd> | <kbd>Shift</kbd>+<kbd>Enter</kbd> |
A handful of extension settings change the feel more than the shortcuts do. useTerminal swaps the panel for the CLI interface. initialPermissionMode sets the mode every new conversation starts in, including plan. useCtrlEnterToSend stops a stray <kbd>Enter</kbd> firing a half-written prompt. respectGitIgnore is on by default and keeps ignored paths out of file search.
The IDE bridge, and what it sends
When the extension is active it runs a small local MCP server named ide, and the CLI connects to it automatically. This is the machinery behind native diffs, selection context, and notebook cell execution. It is worth understanding because it changes what leaves your editor.
- Selection and open file travel with each prompt. The transcript shows a
Selected N lines from <file>line when it happens. - Two tools reach the model:
mcp__ide__getDiagnostics, which returns the Problems panel contents, andmcp__ide__executeCode, which runs Python in the active Jupyter kernel. The rest of the server is internal RPC and is filtered out before the tool list reaches Claude. - Notebook execution always asks. The code is inserted as a new cell and a native Quick Pick asks you to execute or cancel. Dismissing it returns an error to Claude and nothing runs.
- The socket is loopback only, on a random port, with a fresh auth token per activation written to
~/.claude/ide/<port>.lockat mode0600.
When the terminal still wins
- Several agents at once. Terminal tabs, tmux panes and worktrees handle this naturally. The extension can open sessions in tabs, but an editor window is a worse dashboard than a terminal multiplexer once you pass three.
- Long autonomous runs. An agent in a window you are not looking at is a feature. An IDE panel invites you to watch it, which is the most expensive way to use one.
- Remote and headless. SSH into a box and run it. No extension host, no port forwarding, no Remote-SSH round trip.
- Scripting.
claude -p "..." --output-format jsonin a pipeline has no IDE equivalent. - The muscle-memory bits. The
!bash shortcut and tab completion are terminal-only, and if you rely on them the panel feels slower even when it is not.
# one isolated worktree and branch per session
claude --worktree feature-auth
claude --worktree feature-search
Questions people ask
The extension is better for reviewing changes, annotating plans, and passing your current selection as context. The terminal is better for parallel sessions, long autonomous runs, remote work, and scripting. They share history and configuration, so most people use both.
No. It is the same agent with an IDE view. It bundles a private copy of the CLI for its own panel, but it does not add claude to your PATH, so you still install the CLI to use it in a terminal.
Because installing the extension does not put claude on your shell PATH. Install the standalone CLI once and it works in every terminal, including the integrated one.
No. Both surfaces read the same CLAUDE.md, the same .claude/ directory and the same ~/.claude/settings.json. Extension-only preferences live in VS Code settings under Extensions, Claude Code.
VS Code 1.94.0 or later, plus a paid Claude plan or a Console account. It also installs in forks such as Cursor and in editors that support the Open VSX registry.
On macOS Tahoe and later the system Game Overlay claims Cmd+Esc before VS Code sees it. Clear the Game Overlay checkbox in System Settings under Keyboard Shortcuts, Game Controllers, or rebind Claude Code: Focus input.
Yes, if you signed in with a Claude subscription rather than a Console account. Open Session history and switch to the Web tab. Resuming downloads the conversation locally; changes are not synced back to claude.ai.
JetBrains IDEs have their own Claude Code plugin. Independently of either plugin, the CLI runs in any IDE integrated terminal, and /ide connects an external terminal session to VS Code for diffs and diagnostics.
Sources
Every figure above was read from these pages on August 2026. Vendors reprice without notice; if you find a stale number, tell us.