Active
Polyglot Amplifier
From Python to Rust
(and Beyond)
How a language-agnostic LSP architecture turned a Python tool into a polyglot code intelligence platform.
February 2026
The Beginning
It started
with Python.
Amplifier launched as a Python-focused AI coding assistant. Pyright gave agents the ability to understand code, not just search text.
Before: Text Search
# grep "authenticate" across 500 files # matches comments, strings, variable names # no type info, no call chains # false positives everywhere $ grep -r "authenticate" src/ auth.py: # authenticate the user test.py: name = "authenticate_test" docs.md: Call authenticate() to...
After: Semantic Understanding
# LSP goToDefinition → exact source # findReferences → actual callers only # hover → full type signature # incomingCalls → complete call graph → def authenticate(user: User) -> Token Called by: login(), refresh(), oauth() Returns: Token (inferred from impl) Defined: src/auth/core.py:42
The Architectural Bet
Build on LSP.
Get every language free.
The Language Server Protocol was Microsoft's answer to the M×N problem:
M languages × N editors = M×N integrations.
LSP reduces it to M + N.
M × N
Traditional: Custom integration
for every language × every tool
M + N
LSP: One server per language,
one client per tool. Done.
Architecture
Zero Hardcoded Language Knowledge
The core tool-lsp module knows nothing about any language. Language bundles inject configuration via YAML deep merge.
lsp-python
languages.python: { ... }
lsp-rust
languages.rust: { ... }
lsp-typescript
languages.typescript: { ... }
▼ deep merge
lsp-core behavior
tool-lsp · config: { languages: {} }
▼ powers
tool-lsp module
17 operations · persistent proxy · zero language knowledge in code
How It Works
Adding a language = adding YAML
# rust-lsp.yaml — the entire Rust integration tools: - module: tool-lsp config: languages: rust: extensions: [.rs] workspace_markers: [Cargo.toml, Cargo.lock] server: command: [rust-analyzer] lifecycle: timeout idle_timeout: 300 capabilities: diagnostics: true rename: true codeAction: true inlayHints: true customRequest: true initialization_options: checkOnSave.command: clippy
No code changes. No new modules. Just a YAML file that deep-merges into tool-lsp's config. The module reads the config, spawns rust-analyzer, and exposes all 17 operations.
Language: Python
Python
Mature Since December 2025 · Pyright-based
Py
Semantic Navigation
goToDefinition, findReferences, call hierarchies, workspace symbols. Every navigation op works across your entire project.
T
Type Intelligence
Pyright infers types even without annotations. hover reveals full signatures. inlayHints show inferred types inline.
Quality Integration
python_check combines Ruff (formatting + linting) with Pyright (type checking). Diagnostics surface errors before runtime.
Language: Rust
Rust
New — Feb 2026 rust-analyzer based
Standard LSP Operations
All 17 core operations work out of the box. goToDefinition resolves through trait implementations. Diagnostics include Clippy lints.
Rust-Specific Extensions
Via customRequest, agents can expand macros, find related tests, inspect memory layouts, get docs.rs links, and run structural search-and-replace.
Custom Extensions
expandMacro — Expand derive/proc macros
relatedTests — Find tests for a function
externalDocs — Get docs.rs links
runnables — List runnable targets
fetchDependencyList — Crate dependencies
ssr — Structural search & replace
memoryLayout — Inspect struct layout
Language: TypeScript + JavaScript
TypeScript
Community by robotdad · typescript-language-server
Dual Language Support
One bundle, two languages. TypeScript (.ts, .tsx, .mts, .cts) and JavaScript (.js, .jsx, .mjs, .cjs) share the same server with separate configs.
Full Inlay Hints
Parameter names, function return types, enum values, variable types — all enabled by default. See inferred types without leaving your code.
Community Pattern

robotdad followed the same bundle pattern used by the official Python and Rust bundles:

1. Behavior YAML with language config
2. Specialized code-intel agent
3. Language-specific context file

The architecture made it possible for a community member to add a new language without touching Amplifier's core.

The Pattern
Same structure. Every language.
Component Python Rust TypeScript
Behavior YAML python-lsp.yaml rust-lsp.yaml typescript-lsp.yaml
Agent python-code-intel.md rust-code-intel.md typescript-code-intel.md
Context python-lsp.md rust-lsp.md typescript-lsp.md
Language Server pyright-langserver rust-analyzer typescript-language-server
Author Microsoft Microsoft Community (robotdad)
Three files per language. The behavior YAML injects configuration. The agent provides language-specific strategies. The context file guides usage. That's the entire contract.
Capabilities
17 operations. Every language.
Navigation (always on)
goToDefinition
findReferences
hover
documentSymbol
workspaceSymbol
goToImplementation
prepareCallHierarchy
incomingCalls
outgoingCalls
Extended (per-capability)
prepareTypeHierarchy
supertypes
subtypes
diagnostics
rename
codeAction
inlayHints
Extension
customRequest — server-specific methods
Community
55
amplifier repos by robotdad
A one-person ecosystem. Marc Goodner maintains forks of every core repo plus original bundles spanning voice AI, OpenTelemetry, spec-driven development, deep research, PR review, and now TypeScript LSP.
amplifier-app-voice
Standalone voice assistant with OpenAI's Realtime API for native speech-to-speech.
amplifier-collection-spec-kit
Formal specification-driven development with constitutional governance.
amplifier-module-hooks-otel
OpenTelemetry instrumentation hook for team-wide observability.
When one contributor can build 55 repos on your platform, the architecture is working.
Timeline
46 days from one language to three.
Dec 28, 2025
Core LSP bundle + Python LSP bundle created
Jan 4, 2026
Community TypeScript LSP bundle contributed by robotdad
Feb 1, 2026
Python LSP bundle updated with enhanced capabilities
Feb 10, 2026
Rust LSP bundle created with rust-analyzer + 7 custom extensions
Feb 12, 2026
Core LSP bundle updated. Rust bundle cataloged. Today.
Key Insight
The community added TypeScript support 7 days after Python shipped. No guidance needed — the pattern was self-documenting.
Velocity
The numbers.
3
Languages supported
17
LSP operations per language
55
Community repos (robotdad)
4
Repos in LSP ecosystem
7
Rust custom extensions
0
Lines of code to add a language
What's Next
Any language.
Same power.
Every language with an LSP server is a candidate. The pattern is proven. The community is already contributing.
Go
gopls is mature and widely deployed. Full type hierarchy and call graph support.
C / C++
clangd provides rich semantic understanding. Large-scale codebases would benefit most.
Java / Kotlin
Eclipse JDT LS and kotlin-language-server cover the JVM ecosystem.
Adding any of these: write one YAML file, one agent description, one context doc. Done.
Sources & Methodology
Research & Attribution
Data as of
February 20, 2026
Feature Status
Active
Research Performed
Known Gaps
Exact line counts and commit counts not individually verified in this regeneration. robotdad repo count (~55) is approximate from prior research.
Primary Contributors
Sam Schillace (LSP architecture, Python + Rust bundles), Marc Goodner / robotdad (TypeScript LSP, community ecosystem)
Build with it.
Build on it.
Try the LSP bundles in your Amplifier config. Or add a new language — the pattern is waiting.
Use It
includes:
  - bundle: lsp-python
  - bundle: lsp-rust
Extend It
Fork lsp-python as a template. Add your language server config. Submit a PR or publish your own bundle.
Explore It
github.com/microsoft/
amplifier-bundle-lsp-*
More Amplifier Stories
1 / 16