Tom VS Code — the AI-assisted editor extension and its scripting ecosystem

> Tom VS Code — part of the Tom Framework by Peter Nicolai Alexis Kyaw. > Licensed BSD-3-Clause. See LICENSE.md.

Tom VS Code turns a normal VS Code window into an AI-assisted development cockpit and then makes that cockpit scriptable from the outside. Inside the editor, the extension adds chat panels (Anthropic, Local LLM, Copilot), a multi-transport prompt queue, a shared tool registry, and a standalone MCP server. Outside the editor, a Dart scripting API drives that same running window over a local socket — so a script, a CLI tool, or an autonomous agent can open files, run commands, query the language model, and stream an Anthropic Agent SDK session in the live editor.

This repository (al-the-bear/tom_vscode) holds the whole ecosystem: the extension, the Dart bridge that exposes it to out-of-process clients, the published scripting API, the shared TypeScript libraries the extension is built from, and two decoupled YAML-graph packages. This document is the map; each package has its own README and doc/ folder for the detail.

> New here? If you want to use the editor, build and install > tom_vscode_extension. If you want to > script the editor from Dart, start with > tom_vscode_scripting_api and the > vscode_scripting_introduction_sample > — the shortest path from "installed" to "driving a live window".

---

What you can do with Tom VS Code

  • Chat with several models in one place — Anthropic (direct SDK and Agent

SDK), the VS Code language model (Copilot), and a local LLM, in dedicated bottom-panel subpanels. - Queue prompts across transports — line up work and let it run, with timed templates, follow-ups, and per-quest trails. - Expose a tool registry — the same MCP-style tools the in-editor panels use can be published to external MCP clients over HTTP. - Drive a running window from Dart — open files, run commands, read/write the workspace, show pickers and progress, and call the language model from a plain Dart program or a *.d4rt.dart script. - Run an Anthropic Agent SDK query from Dart — stream typed messages, feed the agent in-process Dart tools, and approve its actions through a canUseTool permission callback. - Reach the extension's own features programmatically — todos, the prompt queue, timed requests, documents, workspace metadata, and send-to-chat.

---

Two ways in

The packages split along one clean line: code that runs inside the editor host, and code that drives the editor from outside over a socket. Reading the component tables with this split in mind makes the dependency arrows obvious.

  • Inside the editor (TypeScript). The

extension is the product; the shared and workflow libraries are the TypeScript building blocks it is assembled from. - Driving it from outside (Dart). The scripting API is the typed Dart client; the bridge is the Dart server binary that the extension launches to give CLI tools and d4rt scripts access to the live editor.

The link between the two halves is a JSON-RPC server inside the extension (the "CLI Integration Server") listening on a local TCP port (1990019909). The scripting API is the Dart client for that server.

        ┌──────────────────── inside the editor (TS) ────────────────────┐
        │  tom_vscode_extension  ◄── tom_vscode_shared / tom_vscode_workflow │
        │   · chat panels · prompt queue · tool registry · MCP server     │
        │   · CLI Integration Server  (JSON-RPC over TCP 19900–19909)     │
        └───────────────────────────────▲────────────────────────────────┘
                                         │  local socket
        ┌────────────────────── driving it (Dart) ───────────────────────┐
        │  tom_vscode_scripting_api  ──►  (typed client: vscode / window /  │
        │     workspace / lm / chat · Agent SDK · Tom* feature APIs)       │
        │  tom_vscode_bridge  ──►  Dart bridge server (tom_bs) for CLI/d4rt │
        └─────────────────────────────────────────────────────────────────┘

---

The components

Every package below has a README (linked). Base path for all entries is this repository root.

Inside the editor (TypeScript)

PackageWhat it isArtifact
tom_vscode_extension The @Tom VS Code extension. AI chat panels (Anthropic / Local LLM / Copilot), the multi-transport prompt queue, the shared tool registry, the standalone MCP server, the status page, and the CLI Integration Server. This is the product. VSIX (@Tom)
tom_vscode_shared Shared TypeScript types and helpers consumed by the extension and workflow packages — todo scanning/management, Mermaid flowchart rendering, common types. library
tom_vscode_workflow TODO-tracking and project-management panels for the Tom workspace, built on the shared library. library

Driving it from Dart

PackageWhat it isArtifact
tom_vscode_scripting_api The published Dart client. A bridge-agnostic, typed API surface mirroring VS Code (commands, window, workspace, files, language model, chat), the Anthropic Agent SDK (streaming query() , tools, permissions), and the extension's own features (todos, queue, timed requests, documents, tools). pub.dev ^1.1.0
tom_vscode_bridge The Dart bridge server the extension launches. Runs Dart (via the D4rt interpreter) with full VS Code API access and talks JSON-RPC over stdin/stdout — the local-process path for Tom CLI tools and d4rt scripts. tom_bs

Decoupled / standalone (TypeScript)

PackageWhat it isStatus
yaml_graph_core YAML-graph → Mermaid conversion engine with configurable mappings. decoupled — no longer consumed by the extension (removed in 3b0b63d)
yaml_graph_vscode VS Code custom-editor integration for YAML-graph files. decoupled — extension glue preserved under _extension_backup/

---

Getting started

Use the editor

Build, package, and install the extension from tom_vscode_extension:

cd tom_vscode_extension
npm run compile          # tsc + copy config json to out/config/
./install_extension.sh   # build the VSIX and install it
# then in VS Code: Cmd+Shift+P → "Developer: Reload Window"

Script the editor from Dart

Add the published client and drive a running window. First, in the target VS Code window, run "DS: Start Tom CLI Integration Server" (Command Palette). Then:

import 'package:tom_vscode_scripting_api/tom_vscode_scripting_api.dart';

Future<void> main() async {
  // Resolve the window by the workspace it has open, connect, and promote
  // the adapter to the VSCode singleton.
  await connectToWorkspace('tom_agent_container', initializeVSCode: true);

  final version = await VSCode.instance.getVersion();
  await VSCode.instance.window.showInformationMessage('Connected to VS Code $version');
  print('VS Code version: $version'); // e.g. 1.99.0
}
# pubspec.yaml
dependencies:
  tom_vscode_scripting_api: ^1.1.0

From here, follow the samples learning path below.

---

Samples

Runnable, self-contained samples live under tom_vscode_scripting_api/example/, ordered as a learning path — each introduces one new capability on top of the last. Each sample is its own Dart subproject with a comprehensive README (the basis for a published article).

SampleIntroduces
vscode_scripting_introduction_sample Connecting to a live window and making your first calls — messages, commands, workspace folders, reading and opening files. Start here.
vscode_scripting_advanced_sample Editor edits, file batches, progress and pickers, the language model ( lm.selectChatModelssendRequest ), and the batteries-included VsCodeHelper .
vscode_agent_tools_sample The extension's own feature APIs — todos, the prompt queue, timed requests, documents, workspace metadata, the tool registry, and send-to-chat.
vscode_agent_sdk_sample Streaming an Anthropic Agent SDK query() with Options , typed messages, in-process Dart tool() s, and the canUseTool permission callback.

---

Documentation index

Each package keeps its user documentation in its own doc/ folder; the READMEs above link the relevant files. The most common entry points:

TopicDocument
Scripting API — overview & connection model tom_vscode_scripting_api/doc/vscode_api_intro.md
Scripting VS Code itself vscode_api_vscode_scripting_guide.md
Scripting the Anthropic Agent SDK vscode_api_anthropic_agent_sdk_guide.md
Scripting the extension's features vscode_api_extension_scripting_guide.md
Extension architecture tom_vscode_extension/doc/extension_analysis.md
Anthropic SDK integration tom_vscode_extension/doc/anthropic_sdk_integration.md
Standalone MCP server tom_vscode_extension/doc/mcp_server.md
Prompt queue model tom_vscode_extension/doc/multi_transport_prompt_queue_revised.md

---

Repository layout

tom_vscode_extension/      the @Tom VS Code extension (TypeScript)      (product)
tom_vscode_shared/         shared TS types/helpers used by the extension (library)
tom_vscode_workflow/       TODO/project-management panels (TypeScript)   (library)

tom_vscode_scripting_api/  published Dart client for the extension       (pub.dev)
  example/                 the four learning-path sample subprojects
  doc/                     scripting-API guides (intro + 3 families)
tom_vscode_bridge/         Dart bridge server (tom_bs) for CLI/d4rt       (binary)

yaml_graph_core/           YAML-graph → Mermaid engine                   (decoupled)
yaml_graph_vscode/         YAML-graph custom editor                      (decoupled)

Dependency direction, simplified: the TypeScript stack roots at tom_vscode_shared, which tom_vscode_extension and tom_vscode_workflow build on; the Dart stack roots at tom_vscode_scripting_api, which tom_vscode_bridge and external CLI tools consume. The two stacks meet only at the extension's JSON-RPC CLI Integration Server. The yaml_graph_* packages stand alone and are no longer wired into the extension.

License

Part of the Tom Framework by Peter Nicolai Alexis Kyaw, BSD-3-Clause. See LICENSE.md (each package also carries its own LICENSE).