“you don’t buy the model. you buy the parts, and you assemble the one nobody else will sell you.”

Yesterday the machine became fully owned. Today it became a store you compose from.

It started as a riff. If capability is cursor × library, and the library is the moat, then the product was never “one big model” — it’s the model you assemble from parts. Pick your interests, snap them together, and if you want to upgrade, add more. The formula fell out clean:

your model = WERBOS(base) + /skills + knowledges + models(others')

And the genuine surprise: most of the engine already existed. Minting, grading, retrieval, runtime composition — all built over the last week. What was missing wasn’t an engine. It was the thin surface that makes it feel like installing an app.

The glue: one primitive, four one-liners

Everything became a pack — a skill, a knowledge library, a whole shared model, all one thing with a tiny manifest (kind, visibility, verified). Learn one thing, compose everything. Then the four flows, each a single command:

  • werbos pack list — browse the catalog (43 packs, 6,322 cards, ✓/●/○ verify status)
  • werbos pack new --name mine --add sql,chess,trains — compose & name your model
  • werbos pack add fishing --model mine — the upgrade path: just add a pack, no retrain
  • werbos pack publish trains — list it (public is gated on verification)

The important part is that composing is real, not cosmetic: a model’s paths are exactly what resolve() answers from, so “your model” actually knows its packs and abstains on everything else. Honest scoping is a feature, not a limitation.

Multiplayer: a serverless catalog

werbos pack publish writes a catalog.json + a source; anyone pointing at it can search and install — a filesystem path copies, an http(s) tarball downloads. No server required; share the json however you like. Proven end to end: published a 650-card pack, searched it as another user would, and installed all 650 cards onto a fresh, empty machine. And the honesty gate holds at the index too — you cannot list a pack you haven’t graded.

The jump: the first capability pack

Everything above is packs of facts. The thing that makes a composed model do something is a skill pack — and the cleanest gradeable skill is a game, because win/lose/legal are deterministic facts. So: tic-tac-toe, a minimax engine that plays perfectly. ttt_skill("board XX.|OO.|...") → “X should play cell 2 — wins.” Owned, instant, no model in the loop. Its verifier is rules, not a model — and the headline test exhaustively proves optimal play can never lose, for both sides.

Best of all, it’s pack-gated: a model can play only if it composed the ttt pack. Play iff you installed it — the marketplace promise, made literal. gamer = ttt + fishing can play and talk about marlin, and abstains on everything else.

The foundation (built overnight)

None of this works without three things that landed the night before:

  • A corpus grader — werbos weld grade cold-checks every minted card (shuffle its own options, hide the label, let a fresh model pick; disagreement → quarantine). You can’t sell a card you haven’t verified, so the grader is the marketplace’s bouncer.
  • Owned LSA embeddings — a numpy SVD over our own cards, no external weights, that closes the TF-IDF synonym gap so the library is reachable. The honest catch: LSA is recall, not precision, so it rides the evidence path behind the reader’s abstain gate — never answers directly.
  • A 6,322-card corpus across 43 domains — life, sports, cooking, history, science, geography, health, money, relationships — minted by claude -p and served by retrieval.

The honest bit

The grader tried to lie to me. A full-corpus sweep flagged 2,387 cards — until I looked and found 2,381 were “cold check gave no valid answer”: the Mac had slept mid-sweep, the checker went unreachable, and an unavailable grader was condemning good cards wholesale. The true flag rate was 6 in 6,322 — 0.09%. The corpus is clean; the grader had a bug. So the fix: a checker outage is now indeterminate → keep, never a flag. Absence of corroboration is not evidence of a bad card. The honesty tool had to learn the same lesson everything else here already knows — don’t condemn what you don’t actually know.

And it’s all dogfooded on the site now: an honest-abstain FAQ bot on werbos.netlify.app, a live knowledge graph at /graph, and the compose-your-model picker at /compose.

The AHA: the moat was never the model, and it was never even the library alone — it’s that sovereignty is permission. The frontier labs win the head of the distribution. werbos wins the entire tail they’re structurally forbidden from touching: your niche, your stance, your game, the model nobody else will sell you. A monolith can’t enter that category. A marketplace of parts is the only thing that can.