LSP navigation plus a per-edit quality loop
Amplifier agents already navigated code semantically, yet their edits got no automated lint, type, or format feedback as they wrote. The language-dev bundles close that gap.
First, the proof that the navigation was already real.
The base amplifier-bundle-lsp tool exposes definitions, references, and full incoming/outgoing call graphs — what the code-navigator agent calls “something grep cannot do reliably.”
So the story isn’t inventing navigation — it’s what was missing next.
Per the design doc, the language-LSP bundles were “thin configuration-only wrappers with zero modules.” Only Python had a dev bundle with quality tooling — Rust and TypeScript had nothing.
Navigation was real, but unpaired with any per-edit checks.
The design collapses the fragmented repos into 4 comprehensive language-dev bundles. Each uses a two-behavior + composite pattern — an LSP behavior for navigation, a quality behavior for per-edit checks — merged into one composite dev behavior.
Now: how the quality behavior actually fires.
The quality behavior’s hook triggers on file write/edit events and runs quality checks, injecting feedback straight into the agent’s context when issues are found — with auto_inject on by default.
Feedback is per-edit and in-context, not deferred.
The python-quality behavior wires the hook to run lint, types, and format on every *.py edit. The checker orchestrates ruff format, ruff lint, pyright types, and stub detection.
A real toolchain — not an abstraction. So does it hold up?
E2E validation ran against a real codebase with typescript-language-server 5.1.3 and TypeScript 5.9.3. The “zero false positives” criterion PASSED: a clean file (types.ts) reported 0 issues attributed to it.
No noise on clean code — the bar that earns trust.
Pair precise navigation with an in-context quality loop, and the old thin wrappers become deprecation stubs. The agent that reads code well now also checks its own edits.
Shipped: the thin repos are demoted to forwarding stubs.
Data as of: May 18, 2026 · SHIPPED / consolidated, in maintenance
Repos: microsoft/amplifier-bundle-lsp (base) + python-dev, rust-dev, typescript-dev (and parallel ts-dev); thin lsp-python/-rust/-typescript demoted to deprecation stubs.
Research performed:
gh repo view microsoft/amplifier-bundle-* (isPrivate=false), fresh clones under /tmp/langdev-verifygrep -c 'async def _op_' operations.py (14 ops; grep -i typehierarchy returns none)grep -n 'Triggers on|auto_inject' hooks-python-check/__init__.pychecker.py (ruff format/lint, pyright, stub) and behaviors/python-quality.yamlhead -75 amplifier-bundle-typescript-dev/DESIGN.mdtest-typescript-validation/VERIFICATION-REPORT.md (ts-language-server 5.1.3, TypeScript 5.9.3)gh api repos/microsoft/amplifier-bundle-lsp-typescript/contents/bundle.yamlgit log/show --format='%H %an %ad'; gh repo view --json createdAtPrimary contributor: Brian Krabach (design doc, LSP absorption, quality-checker core, persistent server lifecycle). OSS governance PRs by sadlilas on typescript-dev.
Gaps: “7 repos” and dead-op counts come from DESIGN.md (a plan, not an audit; its prose counts 5 real repos). Zero-false-positives applies only to the clean-file criterion — overall Tasks 4-6 were 3 PASS, 2 PARTIAL, 1 FAIL. Rust checker toolchain not directly opened. Canonical TS home (typescript-dev vs ts-dev) not definitively resolved.