Configurable Chat for VS Code Web
A browser-compatible VS Code extension that adds a configurable chat view. It
supports GitHub Copilot through VS Code's built-in account and consent flow,
OpenAI-compatible and Anthropic APIs, and an optional local LiteRT runtime for Google Gemma-compatible model packages. Assistant responses render
Markdown, including lists, links, and fenced code blocks.
Run locally
- Run
npm install.
- Run
npm run watch.
- Launch the Run Extension configuration from VS Code. For a browser host,
use the web extension development host supplied by VS Code.
The Chat view appears in the Activity Bar. Use the gear icon in the Chat view
header, or the Configurable Chat: Open Settings command, to configure the
provider, model, profiles, base URLs, system prompt, context limits, skills, MCP
servers, and inline completions in the regular VS Code Settings UI.
Press Enter or use the arrow in the lower-right of the prompt to send. During
generation, the arrow becomes a stop icon. Use Shift+Enter for a newline and
/clear to clear the conversation. The bottom row also provides a model-profile
selector, reasoning-effort selector for compatible OpenAI-style models, and a
+ menu for active-editor context, additional files, tool discovery, and
agent permission mode.
Browser UI tests
Run npm run test:e2e to build the extension, download and serve a stable VS
Code for Web build locally with @vscode/test-web, and exercise it in Chromium
with Playwright. The suite opens the extension from the Activity Bar, exercises
the /help command, verifies the composer model/context controls, and captures
the complete VS Code Web window.
GitHub Actions uploads screenshots of both the normal composer and the open
context/agent-permissions menu, plus failure screenshots, traces,
videos, and the Playwright HTML report as the chat-for-web-playwright-*
artifact. The test never signs into GitHub and does not require provider
credentials.
The extension ships with editable OpenAI profiles luna, terra, and sol,
plus Claude Opus 5 and Sonnet 5. Named model profiles can be added, changed, or
removed with configurableChat.profiles:
[
{
"id": "terra",
"label": "terra",
"provider": "openai-compatible",
"model": "gpt-5.6-terra",
"reasoningEffort": "medium"
},
{
"id": "claude",
"label": "Claude",
"provider": "anthropic",
"model": "claude-sonnet-4-5",
"baseUrl": "https://api.anthropic.com/v1"
}
]
Set configurableChat.defaultProfile to the profile used by chat and inline
completion. API keys are stored per profile when one is selected, with
provider-level keys retained as fallbacks.
When profiles are empty, the original provider and model settings remain in
effect.
Providers
- GitHub Copilot: set
configurableChat.provider to copilot and the model
to auto (or make a Copilot profile the default), then run /connect or send
a message. VS Code handles GitHub sign-in and asks for one-time consent before
the extension can use Copilot models. No API key is stored by this extension.
Requests use the signed-in user's existing Copilot model access and quota.
- OpenAI-compatible: the default provider sends Chat Completions requests to
configurableChat.baseUrl. It works with OpenAI and any compatible gateway.
Store its key with /connect or Configurable Chat: Configure Credentials;
it is held in VS Code Secret Storage instead of workspace settings.
- Anthropic: select
anthropic, set configurableChat.model to a Claude
model ID, and store a separate Anthropic key with /connect or
Configurable Chat: Configure Credentials. Requests use Anthropic's
browser-enabled Messages API.
- LiteRT: select
litert, then set configurableChat.model to the model ID
exposed by your LiteRT model distribution, such as the desired Google Gemma
package. The model is downloaded and executed in the browser host, so its
availability and hardware requirements depend on that distribution and the
user's browser.
The + menu can attach the active editor or one or more selected files, up to
the configured context limit, alongside each prompt. It also exposes the tools
currently available to the agent.
Agent tool calls appear inline as collapsible cards. Each card shows its current
waiting, running, completed, denied, or failed state. Expand a card to inspect
the tool source, JSON arguments, returned context or result, execution time, and
errors. Large results are truncated only in the chat display; the complete
result is still provided to the agent. Verbose JSON tracing remains available
through Output > Configurable Chat when tracing is enabled.
Workspace instructions
The root AGENTS.md in every workspace folder is loaded automatically on
each message. If an editor is active, the extension also loads nested
AGENTS.md files from the workspace root down through that file's ancestor
directories. Files are added root-first, so the nearest nested instructions are
the most specific. The combined size is limited by
configurableChat.instructions.maxCharacters.
Agent Skills
The extension discovers Agent Skills from
.agents/skills and _agents/skills in each workspace folder. Search paths are
configurable with configurableChat.skillsPaths; when names collide, the first
configured path wins.
Each skill must contain a SKILL.md with name and description YAML
frontmatter followed by Markdown instructions. Use /skills [query] to refresh
and list skills, /skill <name> to activate one for subsequent turns, and
/skill off to deactivate it. /skill <name> <prompt> activates it and sends a
prompt immediately. Skill summaries are disclosed to the model, while full
instructions are loaded only for the active skill.
Other commands are /connect, /clear, /stop, /attach, /detach,
/model, and /help.
Inline Code Completion
Inline completion is available for text editors and notebook cells through VS
Code's native ghost-text interface. It is disabled by default to avoid
unexpected model usage. Enable it with Configurable Chat: Toggle Inline Completions or configurableChat.completion.enabled.
Completions reuse the configured provider and model. Remote API providers use their stored key, while GitHub Copilot uses VS Code's account consent flow,
but use an independent system prompt and bounded prefix/suffix context. VS Code
cancellation is forwarded to the provider whenever a completion becomes stale.
The prompt and context limits are configurable under
configurableChat.completion.
MCP Servers
Remote MCP tools are supported through the official Model Context Protocol SDK
and Streamable HTTP transport. Configure servers with
configurableChat.mcpServers:
[
{
"name": "deepwiki",
"url": "https://mcp.deepwiki.com/mcp",
"enabled": true
}
]
Use /mcp to connect or retry and show server status, /tools [query] to list
discovered tools, and /tool <server/tool> <json> to invoke a tool manually.
Enabled tools are also disclosed to the model for a bounded tool-use loop.
Agent actions are controlled by configurableChat.toolApprovalMode: Ask
displays Allow Once before workspace file edits and remote MCP calls;
Auto permits them without confirmation. Built-in read-only discovery,
search, reading, and Markdown tools always run automatically. Tool results are
returned to the model as untrusted context.
Every agent turn receives the available tool catalog. OpenAI-compatible providers
use native function/tool calls with meaningful stable names and keep
tool_choice set to auto, so the model decides when evidence or an action is
needed. Native assistant tool calls and matching tool results are preserved in
the conversation sent back to the provider. When Chat Completions rejects
reasoning-effort function tools and directs the client to Responses, the same
agent run continues through the Responses API without dropping the selected
reasoning effort or returned reasoning items. Providers without native
integration use a textual tool-call envelope as a fallback.
All tools discovered from enabled MCP servers are available to the bounded
tool-use loop. Use VS Code Settings to add, remove, or disable MCP servers.
VS Code Web cannot start local stdio MCP servers. Endpoints must use HTTPS
Streamable HTTP and provide CORS headers that allow the browser host. The initial
integration supports unauthenticated endpoints; OAuth and secret-backed custom
headers remain future work.
Agent tracing
Set configurableChat.trace.enabled to write verbose JSON events to
Output > Configurable Chat. Events include the provider turn and tool-selection mode, provider responses,
tool arguments, tool results, and errors.
API keys are never added to trace events.
Set configurableChat.trace.saveToWorkspace to also write the current session
as JSONL under .configurable-chat/traces/ in the first workspace folder.
Both destinations can contain prompts, AGENTS.md content, and source returned
by tools; keep tracing disabled when that content should not be retained.
configurableChat.trace.maxCharacters bounds each string field.
Parity Roadmap
The official jupyterlite/ai project under refs/ai is the behavioral
reference. Work is prioritized as follows:
- Skills and
/skills
- Inline code completion (initial provider complete; notebook-wide context remains)
- MCP integration (initial remote Streamable HTTP client complete; OAuth remains)
- Settings-only model and provider configuration (complete)
- Browser retrieval tools
- Diff and review workflows
- Conversation save and restore
- Common slash commands
- Context usage display
- Configurable custom providers