A Plugin, Not a Platform

A thin host, pluggable resolvers

A thin host that runs coding agents

Amplifier Resolve is a FastAPI host whose Orchestrator creates one isolated worker container per instance. It owns lifecycle, routing, and validation — and deliberately nothing more.

Owning very little is not an accident. The repo says so in its own words.

Proof — in the repo's own words
“The host is a thin lifecycle/routing/validation layer. Resolvers own all resolution semantics.”
README.md, line 254 — Amplifier Resolve (microsoft/amplifier-resolve)

The split is stated verbatim, not aspired to. So why draw the line exactly there?

Any one coding approach is just one strategy

A resolver is a strategy plugin: it defines its own approach, phase progression, and documentation. Bind that intelligence into the platform and every new approach forces a rebuild.

The thin host has to defeat that coupling. It does it with one narrow seam.

Intelligence lives behind one 12-member contract

The host talks to every resolver through a single Resolver Protocol — 4 properties and 8 methods. That narrow interface is what lets the host stay dumb while resolvers stay smart.

A contract is only as strong as the boundary that enforces it.

Bad input gets a 422, not a broken container

The host validates every POST /instances request against the resolver's A2UI v0.9 instantiation schema before creating the instance. Fail validation and you get a 422 with an errors list — nothing runs.

Enforcing the contract at the edge is how the host earns the right to be thin.

# POST /instances — validated at the boundary 200 input matches the resolver's A2UI v0.9 schema → instance created 422 Unprocessable Entity → errors list returned, no instance, no broken container

The platform is actively shedding coupling

This is enforced over time, not declared once. The in-process execution path (ResolveCore) was deleted; resolvers now run via JSON-RPC over stdio inside worker containers. And a single completion contract replaced the legacy handlers.

Discipline maintained means extensibility can cost almost nothing.

A new approach is a new plugin, not a new platform

A resolver is a separate package. Register it with one CLI command and it's discovered through the ManifestRegistry catalog (resolvers.json). Adopting a new coding approach means dropping in a plugin — the platform never changes.

That is the whole point of keeping the host thin.

  1. 1Package the resolver separately — it defines its own approach, phases, and docs.
  2. 2Register it: amplifier-resolve resolver add
  3. 3The ManifestRegistry catalog (resolvers.json) is the single source of truth for discovery.
The pattern to keep

Keep the host thin; push intelligence behind a contract

Own only lifecycle, routing, and validation. Put every strategy behind one narrow interface. Then you can adopt new approaches forever — without touching the platform.

Sources

Research Methodology

Feature status: Active

Primary source: microsoft/amplifier-resolve, checked out at ~/dev/ANext/amplifier-resolve (shallow clone, 100 commits visible; earliest 2026-04-29, latest 2026-05-20).

Research performed:

Gaps: The checkout is a shallow clone, so true repo origin date and total commit/contributor counts are not verifiable — only the 100-commit window is visible. The runnable Resolver Protocol lives in the external amplifier-resolver-sdk; the 12-member count is quoted from ARCHITECTURE.md:140. Two stale doc details were corrected: the worker runs a 'sleep infinity' keepalive (not a resolve_worker module) with the resolver launched via ResolverProcess.

Primary contributor (visible history): Brian Krabach, 97 of 100 commits.

More Amplifier Stories