The Kernel in the IDE

Amplifier's full agent, native in VS Code

The Frame

Developers won't leave VS Code — so Amplifier's kernel moved into the editor

The amplifier-app-vscode extension — "VS Code extension for Amplifier AI agent framework" — brings AI assistance to where developers already work, instead of asking them to leave the editor for it.

And this isn't a concept — it already exists as shipped code.

A shipped two-tier codebase, not a concept

Top-level, the repo splits into a TypeScript extension/ and a Python server/ — sibling tiers, real built code.

But shipping two tiers means bridging two very different runtimes.

3,128
lines of TypeScript in extension/src
2,102
lines of Python in server/
59
files in the initial commit (24,060 insertions)
0.1.0
version, published under the microsoft publisher
The Tension

Two runtimes that can't natively talk

Amplifier's kernel, amplifier-core, is Python and async. A VS Code extension must be TypeScript. The full agent framework lives on one side of a language wall — and the editor lives on the other.

So how do you get the real kernel across that wall?

The extension spawns the Python server, then waits for /health

One runtime launches the other: the TypeScript extension starts the Python backend as a child process and won't use it until it answers healthy.

Once it's up, what actually runs inside that server?

// ServerManager.ts — spawn via uv cp.spawn('uv', ['run','python','-m', 'amplifier_vscode_server'], { env: { AMPLIFIER_HOST, AMPLIFIER_PORT } }) // waitForReady — 10s timeout fetch(`${baseUrl}/health`) // poll until response.ok

It imports the real AmplifierSession — not a reimplementation

The server's session runner imports amplifier-core directly and runs the full kernel in-process: providers, tools, hooks, orchestrators, profiles.

But running the kernel is only half the job — its events have to reach the IDE.

# session_runner.py from amplifier_core import AmplifierSession from amplifier_profiles import ( ProfileLoader, compile_profile_to_mount_plan) from amplifier_collections import CollectionResolver from amplifier_module_resolution import ( StandardModuleSourceResolver)

A 278-line bridge forwards the kernel's own events — pure forwarding

A streaming-bridge hook forwards amplifier-core's native events over HTTP + SSE"pure event forwarding, no business logic." The gap between runtimes closes.

Which lands the whole point: the full kernel, live in the editor.

content_block:delta
Streamed model output, dispatched by the extension's EventStream
tool:pre
Tool call about to run — the same hook that gates approvals
thinking:delta
Model reasoning stream, forwarded through the SSE channel

The complete kernel runs live in VS Code — secure by default

Not a reimplementation — the real Amplifier, in the editor. Locked to localhost, behind a pinned CSP and a TOOL_PRE approval gate surfaced as an inline VS Code UI.

A pattern worth keeping beyond this one extension.

Bound to 127.0.0.1:8765
The backend binds to localhost by default
Pinned CSP + crypto nonce
connect-src pinned to the local server; per-render crypto.randomBytes(16) nonce
TOOL_PRE approval gate
Sensitive tool calls route to an inline approval UI with session-scoped always-allow
The Takeaway

Spawn the real engine locally, forward its native events

The reusable pattern: don't reimplement a Python engine in TypeScript — run the real one as a local child process and stream its own events into the editor over HTTP + SSE. The IDE gets the full thing, secure by default.

Experimental exploration project — no support provided
Sources

Research Methodology

Primary source: marklicata/amplifier-app-vscode (cloned to /tmp/amplifier-app-vscode), cross-referenced against amplifier-core (upstream microsoft/amplifier-core). Repo createdAt 2026-01-16; origin/main commits span 2025-12-15 to 2025-12-17.

Feature status: Experimental exploration project (README: "no support provided"); ROADMAP in Planning Phase.

Commands run:

Gaps: VS Code Marketplace publication described in README but not independently verified. Repo createdAt (2026-01-16) post-dates newest commit (2025-12-17); inferred as a repo publish/transfer date. amplifier-core cross-referenced from a local checkout — exact version parity with the pinned dependency not verified.

Primary contributor: Samuel Lee — all 7 commits on origin/main.

More Amplifier Stories