Day 69 — 'compose the AI you own — then share it.'
The day werbos stopped being a thing that mints one model and became a marketplace you compose from. The formula fell out clean — your model = a base cursor + /skills + knowledges + models other people made — and the surprise was how much of the engine already existed: minting, grading, retrieval, runtime composition were all built; what was missing was the thin 'install an app' surface over them. So we built it: a pack manifest that makes a skill, a knowledge library, and a whole shared model one primitive; the four one-liners (list / new / add / publish); a serverless catalog you publish to and others install from; and the jump that matters most — the first CAPABILITY pack, tic-tac-toe, a skill verified by RULES (minimax, provably unbeatable) not by a model, and pack-gated so a model can play only if it installed it. Underneath, the foundation from the night before: a corpus grader that cold-checks minted cards, owned LSA embeddings that make the library reachable, a 6,322-card corpus across 43 domains, and an honest fix when the grader itself lied.
“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 modelwerbos pack add fishing --model mine— the upgrade path: just add a pack, no retrainwerbos 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 gradecold-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 -pand 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.