Skip to content

Compared with the official VS Code extension

This extension aims for parity with Anthropic’s VS Code extension where it makes sense, but Visual Studio is a different host, so several things are done differently, or don’t exist there.

The chat is not a reimplementation of Claude. It drives the real claude.exe, and starts it the way the VS Code extension does: over the stream-json control protocol, with the CLI told it runs inside an IDE (CLAUDE_CODE_ENTRYPOINT=claude-vscode). What you get from the CLI is therefore the CLI’s, not a copy of it:

  • The same sessions. One store, the CLI’s own: a conversation started in VS Code or in a terminal shows up here, and vice versa. See Sessions.
  • The same commands. The / palette lists the CLI’s own slash and skill commands, next to the extension’s built-in actions.
  • The same plugins. Plugins live in the CLI’s store, so what you install here is the same set the CLI, the VS Code extension and the terminal see. See Plugins.
  • The same settings and login. ~/.claude/settings.json (permissions, hooks, env) belongs to the CLI, and so does sign-in: the extension holds no credentials. See Authentication and security.
  • The same editor channel. Visual Studio pushes the editor selection to the CLI over the IDE integration channel, the same way the VS Code extension does.

Because it is the CLI doing the work, a newer CLI is handled by feature-detection, not by pinning a version: the extension never bundles it. See Updating Claude Code.

What follows is where the two part ways.

Open several chats and terminals side by side, each on its own session, docking as tabs. The Chat pane (WebView2 + SDK-MCP) and the CLI pane (ConPTY + --ide WebSocket) are deliberately separate startup paths. See Two panes, one extension.

The tools wrap VS’s navigation, build and debugger (start/step/breakpoints/inspect/hot-reload) and Error List, capabilities specific to the VS host, built language-agnostic via Roslyn reflection and DTE, not tied to C#/VB only. See MCP tools.

Their tool calls are grouped under the Agent row that spawned them (last 3 steps, Show all for the full run) instead of being interleaved into the transcript, and a chip in the composer counts the ones still running; click it to stop any of them, or all. See Sub-agents.

With several panes open (or VS in the background), an InfoBar or a layout-proof OS toast tells you which pane needs input or has finished; the VS docked tab can’t carry that state the way VS Code’s editor title does. See Several panes at once.

Sessions are read directly from the CLI’s ~/.claude/projects/<folder>/*.jsonl (head+tail reads to avoid loading huge files); rename appends a custom-title entry, fork writes a new JSONL; no separate session store. See Sessions.

The chat holds nothing in memory: the transcript is read from the .jsonl on demand: the newest page loads first, older history pages in only as you scroll up, and heavy blocks (images, sub-agent transcripts, full diffs) are fetched only when you actually open them. A very long session opens fast and stays light instead of loading the whole conversation up front.

Changes opened in Visual Studio’s own diff

Section titled “Changes opened in Visual Studio’s own diff”

Opening a file lands you in the real editor (optionally on the referenced lines); an Edit opens in Visual Studio’s native side-by-side diff (not a static rendered diff), with the editor’s own colouring and navigation. In a Chat pane the answer is given in the approval prompt. A second, editable diff (editor_open_diff) shows the whole file against a proposal: Ctrl+S or Accept hands back the text as you saved it, closing rejects. See Reviewing changes.

A bare ClaudeInstall.cs:103 written in a sentence is a link here; the VS Code extension only turns markdown links into file links. See Clickable file references.

Rendered natively in the chat, including historical statistics across the current chat, the whole project, or all projects together. See Context, usage & statistics.

Restore the files to the state they were in before any message in the session, leaving the conversation itself untouched; a dry-run preview lists the files and the lines added or removed before anything is written, and clicking a file opens the pre-message copy against the current one in Visual Studio’s diff. See Rewinding files.