Course / Lesson 3  ·  PT-BR
Lesson 03 · The decision layer

The Fusion Matrix

You have two systems now: the Alembic engine (Lesson 1) and the reverse-engineered Hermes Agent (Lesson 2). The matrix is the bridge — an item-by-item decision about what to do with each Hermes capability. Four verbs, one rule each.

The method: two questions, one disposition

The matrix is not a wish-list. Each Hermes capability was put through two questions, each answered against a verified map (not from memory):

The disposition follows from the pair. Anything that couldn't be fully confirmed was marked [uncertain] rather than guessed.

Hermes capability Q1: does Alembic already have it? Q2: is Hermes' version better / net-new? CLONE net-new; port closely ADAPT partial equiv; reimplement MERGE related surface; combine into it IGNORE already as good, or out of scope
VerbWhen
CLONENet-new in Alembic; port the Hermes design closely, adapting types to @alembic/*.
ADAPTAlembic has a partial / different equivalent; reimplement the Hermes idea in Alembic's style.
MERGEAlembic already has a related surface; fold Hermes' capability into it — one richer surface.
IGNOREAlembic already does it as well or better, or it's out of scope for the mission. Always justified.

CLONE — the net-new, high-value five

These have no Alembic equivalent (the map shows zero or incidental hits), so they get ported closely.

CapabilityHermes sourceWhy CLONE
File memory (frozen-snapshot)memory_tool.py §3.2 (1089 LOC)Bounded MEMORY.md/USER.md injected as a session-start frozen snapshot. Foundational for the learning loop.
Self-review learning loopbackground_review.py §1.10The headline "self-improving" mechanism — Alembic's biggest miss. (Shipped as ADAPT; see spotlight below.)
Curator (skill lifecycle)curator.py + skill_usage.py §3.3active→stale→archived, never delete. Gives the loop quality control.
Web search / extractweb_tools.py §3.1 (1377 LOC)Pure HTTP+JSON over multiple backends. Strengthens the funnel's SOURCE layer.
Clarify (human-in-the-loop)clarify_*.py §3.7Structured questions + blocking gateway. Becomes the T4 human-gate's ask surface.

MERGE — fold into a related surface

CapabilityAlembic todayWhy MERGE
MCP clientAlembic is an MCP server, read-only — no client (MCP=8 hits)Add the ability to consume external MCP servers. High-value; the TS SDK makes it cleaner than the Python original. Parked as a follow-up, not yet wired.
Full browser automationwraps agent-browser read-only (browser=13 hits)Keep read-only as default; merge interaction surface behind an explicit opt-in.
Skills authoring + telemetryloads skills (skill=22 hits) but no agent-authoringMerge create/edit/patch into loop-engineering so agent-made skills feed the Curator.
Verifier / mixture-of-agentscouncil verifier-panel (verifier=19 hits)Alembic's N-lens quorum + veto is the richer equivalent of MoA — keep Alembic's.

ADAPT & IGNORE — the rest, justified

ADAPT (partial equivalent → reimplement): session-search FTS5, skills-hub, kanban concepts into the swarm, cron blueprints, cloud transcription, vision analysis.

IGNORE — and the justification is the interesting part:

CapabilityWhy IGNORE
Subagent delegation (delegate_tool.py, 3188 LOC)Alembic's swarm (swarm=63 hits: 3-tier orchestrator, lead-worker, depth-bound, dependency-gated queue) already does this natively and better. Keep one portable insight: async-delegation's "completion re-enters as a new turn, never mid-context."
Terminal backends (6 contexts)Alembic's factory already ships docker/podman/no-sandbox + git-worktree isolation. Redundant.
Computer use, neural local TTS, faster-whisperPython-only ML stacks or out of the distill→venture mission. Hard to port, no mission value.
23 messaging-platform adaptersAlembic is an internal engine (ADR-0001), not a personal-assistant gateway. L4 clients are API/MCP/CLI/cockpit — not Telegram/WhatsApp.

The keystone: why the learning loop sits above everything

The single most important line in the matrix

"Alembic has a distillation funnel and a validator gate, but no closed self-improvement loop. Hermes' learning loop is the missing piece, and it composes with what Alembic already has rather than replacing it."

The funnel turns sources into Learnings — but nothing feeds those learnings back into the engine. Hermes closes that loop. Two reasons it fits so cleanly:

Alembic today: SOURCE distill (T0–T3) Learnings ⊘ no feedback Hermes adds: after run → review fork durable memory + skills Fused: distill → Learnings (gated) memory/skills snapshotcurator keeps it clean next run is smarter
CLONE on paper, ADAPT in the ship. The matrix listed the learning loop as a CLONE, but it shipped as an ADAPT (ADR-0018): there is no Python AIAgent to fork as a daemon thread, and auto-writing would bypass the Validator Gate. So the reviewer proposes and Alembic's Validator disposes. That nuance is Lesson 4.

1. delegate_tool.py (subagent delegation, 3188 LOC) is dispositioned IGNORE. Why?
Correct: c. The matrix cites swarm=63 hits — a 3-tier orchestrator with lead-worker, depth bounds, and a dependency-gated queue. IGNORE here means "already as good or better," not "out of scope." One portable insight is still kept: completion re-enters as a new turn, never mid-context.
2. Why is the MCP client a MERGE rather than a CLONE?
Correct: b. Alembic exposes itself over MCP (server, read-only) but can't consume external MCP servers. The client folds into that existing surface — a MERGE. It's high-value but parked as a not-yet-wired follow-up.
3. What makes the learning loop the keystone of the whole matrix?
Correct: d. Alembic could distill into Learnings but had no path back into the engine. The loop adds exactly that, fits the narrow waist (prompt-frozen memory) and the gate pipeline (gateable writes) — composition, not replacement.

Common confusions

"The matrix is a feature wish-list." No — it's a pruning tool as much as a build-list. Half its value is the IGNORE column: each one is a justified refusal that keeps Alembic an internal engine rather than a personal-assistant gateway.
"CLONE means copy-paste the Python." No — CLONE means port the design closely while adapting to Alembic's types and invariants (Result, FsPort, Zod). And a disposition can change between plan and ship: the learning loop went CLONE → ADAPT for principled reasons.