← The Loop
· WEEK 30 · 5 min

Building Spectroscope, part 2: survey seventeen frameworks, take zero dependencies

TL;DR

Two survey generations, seventeen framework profiles, fifteen repositories pinned at exact commits. The conclusion was to adopt none of them: borrow the vocabulary, take no dependencies.

To build a harness deliberately rather than by default, I first had the agents study everything that already exists. The survey ran in two passes. Generation 1 produced nine deep framework profiles (LangGraph, CrewAI, Pydantic AI, Letta, AutoGen, Google ADK, the Anthropic Agent SDK, the OpenAI Agents SDK, n8n), with feature levels verified in a nine-agent audit. Generation 2 went from prose to code: fifteen repositories pinned at exact commits in a source manifest, read at file-and-line precision. Seventeen numbered profiles in total.

the verdictstdout
Not a single winner.
One backbone (MCP), and the right layer per tool.

Borrowed, at source, with attribution:
  event bus            <- AutoGen core
  pub/sub              <- CrewAI
  sub-agent vocabulary <- A2A
  OTel framing         <- Spring AI
  trace data model     <- Langfuse

Dependencies taken: none.
fig. 01 — Reduced to structure, every framework's differences collapsed onto four lock-in axes. The conclusion, translated from the survey's own README.

The field did not offer a framework to adopt. It offered a vocabulary to borrow. Each mechanism was studied at source and re-implemented, so the harness carries their ideas and none of their jars. The fifteen clones were commit-pinned precisely so the analysis could be re-run against the exact code it cited.

the wallimage
The architecture wall diagram
fig. 02 — The machine that verdict produced, on one wall: one core, five faces, one event wire, and none of the surveyed frameworks among its dependencies.

There was a second front, aimed not at frameworks but at working harnesses: full clones of goose, opencode and openwork, next to a stack of analyses of a deobfuscated Claude Code, with a synthesis table mapping every wanted feature to an exact file and line in the reference clones. A fifteen-agent mining pass over that material reported 448 raw ideas, curated down to a shortlist. One line from that teardown ended up mattering more than the rest: nobody shows the user transparently where their context window disappears to. That gap runs in a straight line to the product this series ends on.

What I'd do differently

Trust the recount, not the header. The curated shortlist's own header said 49 entries; the list held 64. Nothing was wrong with the ideas, but a document that miscounts itself is a document nobody re-read. Provenance needs the same tests as code.