14 Lines to Infinity

Composition, not configuration

The Question

Fourteen declarative lines stand up a whole AI assistant

Amplifier lets you declare a complete, production-ready AI assistant in a bundle.md whose declarative block is just 14 lines. The question this deck answers: how does so little do so much?

Start with the proof that those 14 lines are real.

The docs literally call it "Only 14 lines of YAML"

The canonical amplifier-bundle-recipes bundle is exactly that thin bundle. Its declarative block is lines 1–14 — of which just 8 are pure YAML frontmatter config. The full file is 49 lines; the rest is human-readable docs.

But 14 lines can't actually build a runtime.

14
lines in the declarative block (lines 1–14)
8
of those are pure YAML config
49
lines total in the file
2
bundle references in includes
The Catch

But 14 lines can't build a runtime

Look at what a real assistant needs — and what those lines declare. There is no orchestrator, no context module, no tools, and no agents written anywhere in them.

So where does the runtime come from?

Two includes inherit an entire runtime

The lines don't configure a runtime — they inherit one. Two includes pull in the foundation bundle, which brings everything the thin bundle never redeclares.

And inheritance isn't magic — it's a real engine.

1
streaming orchestrator (loop-streaming, extended thinking)
300k
token context module, auto-compacting at 0.8
4
core tools inherited
11
agents inherited

Inheritance is a real composition engine

Bundle.compose() merges bundles together; to_mount_plan() compiles the result for AmplifierSession. It's a code path, not hand-configuration.

Which means adding a capability is just adding one more piece to merge.

  1. 1deep-merge session & spawn
  2. 2merge tools/hooks/providers by module ID
  3. 3override agents by name (later wins)
  4. 4accumulate context with namespace prefixes
  5. 5to_mount_plan() compiles it for the session

The second include adds just one "brick"

The first include inherits everything; the second adds only the recipes bundle's unique capability. That single self-contained unit is a "brick" in Amplifier's documented bricks-and-studs design.

And that same one-brick move repeats at every scale.

1
tool added (tool-recipes)
2
agents added (recipe-author, result-validator)
1
context file added

It's the same move at every scale

One brick added on top of an inherited runtime. Foundation itself is 20 includes. Dozens of composable bundles and modules make up the ecosystem — and amplifier-stories, the bundle that generated this very deck, is the identical thin, 9-line shape.

So the pattern to keep is simple.

20
includes compose the foundation bundle
29
amplifier-bundle-* dirs present locally
11
distinct working amplifier-module-* dirs
9
frontmatter lines in amplifier-stories, this deck's own bundle

Write your unique brick; inherit everything else

Don't configure an assistant from scratch — compose from thin bundles. Declare only what's new, and let the includes carry the runtime. That's why 14 lines reaches infinity.

Composition, not configuration.

# A thin bundle.md — declare, then inherit includes: - amplifier-foundation # inherit the whole runtime - your-behavior # add only your one brick
Sources

Research Methodology

Data as of: amplifier-foundation local HEAD 0965a34 (2026-04-09); recipes read from origin/main.

Feature status: Shipped and in active use (latest recipes commit b6ee26d, 2026-05-20).

Repos: microsoft/amplifier-foundation, microsoft/amplifier-bundle-recipes, amplifier-stories.

Research performed:

Gaps: "to infinity" is rhetorical — there is no measured upper bound on ecosystem size. The 29/11 counts are local checkout counts (a lower bound), not the full GitHub total.

Primary contributors: Brian Krabach (739 commits on amplifier-foundation; author of the compose engine, BUNDLE_GUIDE, foundation-expert, and the recipes bundle.md commits). Salil Das (22), Paul Payne (19), Diego Colombo (13).

More Amplifier Stories