oll.am · Platform Extension · Research & Reflection · 2026-07-06

The Third Spine

oll.am already has Identity and Model as frozen infrastructure. The most valuable thing it's missing is already built — a Memory spine that makes every product know you.
Question: what's the highest-value, most elegant next platform primitive? Answer: Memory — and it's ~90% built already. Status: research + reflection · no code

What's inside

  1. The three spines
  2. The reveal — it's already built
  3. Why Memory is the most valuable extension
  4. The convergence — knows you AND acts
  5. The full extension-options map
  6. What "promote to a spine" means
  7. The honest ship-vs-build read
  8. Decision points for Sam

The three spines the lead thesis

oll.am's whole elegance is one sentence: frozen infrastructure, disposable products. A product is a thin, throwaway client; the durable value lives in a handful of spines that are built once and never touched again. Today two spines are live and frozen — and there is a third, more valuable than either, that is already mostly built but hasn't been named as infrastructure yet.

Live · frozen
Identity
core.oll.am
Magic-link auth · Stripe billing · email. The Core service — the spine every product leans on to know a visitor and take their money.
"Who you are, what you paid."
Live · frozen
Model
model.oll.am
A provider-agnostic LLM gateway — Groq by default, Ollama / Claude / GPT behind one seam. Swap the model, never the product.
"Any model, one seam."
Built · not promoted
Memory
oll-memory
A per-user private corpus with retrieval + citation. Ingest your documents; every product can then ground its output in your knowledge, cited.
"What YOU know."
Two spines lit and frozen. The third is built — and it's the one that turns a set of tools into a platform that knows you.
Two spines make stateless tools. The third makes a platform that knows you. — why Memory is the completion, not just another service

Identity and Model, together, get you a competent generic assistant: it knows who's paying and it can call a good model. But its output is the same output every other wrapper produces — generic prose from a generic model. The moment you add a Memory spine, every product can answer from the customer's own documents, with citations. That is the difference between a demo and a thing people pay for repeatedly. This doc extends the ten-option survey in Beyond the Wrapper and the frozen-spine architecture in The Platform — it doesn't restate them; it argues which extension matters most and why it's closer than it looks.

The reveal the most valuable primitive isn't a research bet

The reason to lead with Memory isn't that it's a good idea — it's that it is already ~90% built. It is not theoretical. It's sitting on a branch and running inside one product, waiting to be promoted from “a thing ollwrite uses” to “a frozen platform service every product uses.”

The service exists

An oll-memory service sits on an unmerged branch (daf6d7a feat(oll-memory): consolidate ingest+rag+extract). Stack: LlamaIndex + pgvector + nomic-embed-text embeddings; hybrid dense+keyword retrieval fused with RRF; generation delegated to the Model spine.

It's already driven in production form

The ollwrite (Next.js) product already drives it via a server-side BFF (src/app/api/memory/*) with seven capabilities: ingest, search, chat, draft, verify-claims, suggest, and voice-profile.

The trust boundary is elegant & correct

The browser never sends a collection, ACL, or token. The BFF resolves userId from the Core JWT and derives collection: mem:user:{userId} + acl:[u:{userId}], injecting a service token server-side. A user cannot name another user's corpus — it's architecturally impossible.

Honesty is built in, not bolted on

A relevance floor (dense cosine ≥ 0.5) drops noise; on a miss the system abstains (abstained:true) instead of fabricating a citation. A claim with no above-floor source is never sent to the model. Inline [n] nodes are drag-to-cite, click-to-focus, and round-trip through markdown export — the citation trust loop.

Multi-tenant is already proven

A public, read-only “bible” workspace (server-side allowlist) is CiteBible — the same engine, rebranded per vertical, with zero code duplication. The corpus is a flag, not a fork.

The seven capabilities are real products

ingest (paste/PDF → chunks) · search (semantic) · chat (grounded answer with [n]) · draft (bullets → cited paragraphs) · verify-claims (audit a draft → trust chips) · suggest (source guide) · voice-profile (“write in my voice” learned from the corpus).

The point: the most valuable primitive on the roadmap isn't a research bet or a greenfield build. It's on a branch and inside a shipped product right now. Promoting it is a packaging job, not an invention.

Why Memory is the most valuable-for-customers extension the actual ask

Sam's brief was to do something more valuable for customers — not more elegant for its own sake. Memory wins on customer value four ways, and each is concrete:

ReasonWhy it matters to the person paying
It's not a commodityGeneric LLM output is free and everywhere — every tool has it. Output grounded in the customer's own documents, and cited, is something people pay for repeatedly and trust. That's the line between a toy and a product.
It's stickyA personal corpus is a switching cost. Once your knowledge lives in it, leaving means abandoning it. Stateless tools have no retention moat; a memory does.
It composes with everythingollwrite becomes “write from your knowledge”; the oll.in career agent drafts a CV / cover letter grounded in your real experience docs, cited — the actual magic that makes it personal instead of generic; CiteBible is already a product; any vertical (legal / medical / study / “second brain”) is one workspace flag away.
It fits the pay-once story“Your knowledge, your corpus — pay once, it's yours.” A personal corpus is exactly the kind of durable, owned asset the oll.am positioning already promises.
Grounded-and-cited is the product. Generic generation is the free sample everyone else is already giving away. — the customer-value thesis in one line

The convergence a platform that knows you AND acts for you

Memory doesn't just stand alone — it multiplies the other extension on the table. The sibling doc, The Agent Seam, plans an MCP surface so an external agent runtime can drive oll.am's capabilities. Put the two together with oll-write and you get something neither has alone:

the multiplier
Memory
reads your corpus
+
MCP seam
agent can act
+
oll-write
drafts cited prose
=
knows-you-and-acts
the real differentiator
An agent that can read your corpus and draft cited, tailored output is dramatically more valuable than either alone. The career agent's real differentiator isn't raw generation — it's memory-grounded applications: a cover letter that cites your actual projects, not a plausible-sounding invention.

This is the elegance argument restated as a product argument: the same frozen-spine discipline that lets a new product ship in a weekend also lets a new capability — memory — light up every existing product at once. Add the spine, and ollwrite, CiteBible, and the career agent all get grounded output for free.

The full extension-options map ranked by value × elegance ÷ effort

Sam asked to go back over the initial research and explore other options too — not just land on the favourite. Here's the honest ranked field, with each row's real build-state in the repo today. The two ★ rows are the near-term movers; the rest are sequenced behind them.

PrimitiveWhat it unlocksCustomer valueBuild state todayEffortVerdict
Memory spine
oll-memory
Grounded ollwrite · cited career apps · CiteBible · any knowledge-vertical HIGH
personal + cited + sticky
~90% BUILT — branch daf6d7a + wired in ollwrite; CiteBible proven LOW–MED
promote branch → frozen svc, own Neon oll_memory
★ DO FIRST — the elegant completion.
Structured extraction
oll-extract
Any input → typed JSON (receipts→CSV, forms/contracts→data) + RAG ingestion of messy PDFs MED–HIGH BUILT — 33 tests, on feat/oll-extract (32b4321), unmerged, awaiting your call LOW
a merge decision
★ MERGE — the ingestion sibling of Memory.
Credits / usage ledger
on Core
Pay-once credit packs across all products · guest credits · lower barrier to the first dollar HIGH
monetization
STUBusage.py in-process dict, per-replica, resets on restart (ADR-018 proposed) MED
durable ledger row on Core
DO ALONGSIDE — the monetization companion to Memory.
MCP gateway
agent seam
oll.am callable inside Claude Desktop / Cursor · the career agent · monetized via the billing spine MED
enabler
PLANNED — spec'd in the sibling doc LOW–MED
thin wrapper
COMPOSE — an agent that reads your corpus.
Async jobs primitive Heavy / agentic work — headshots, agent runs, batch rewrites MED INLINE only — ADR-014; foto uses a SQLite job store MED DEFER — until load demands (ADR-014 stands).
On-device Vault
WebGPU + local store
“Nothing leaves your machine, pay once forever” — a local memory store is the on-device twin of the spine HIGH
moat, but later
VISION — Phase 2; provider swap already coded in the Model spine (arch) HIGH PHASE 2 — and the Memory contract makes it a swap, not a rewrite.
Read the last row twice: the reason to define the Memory spine's contract now is that the on-device Vault later becomes a provider swap behind the same interface, exactly as the Model spine already swaps Groq for Ollama. Freeze the seam once and the privacy-moat version is a substitution, not a second build.

What “promote to a spine” actually means concrete, not code

Promoting Memory is a packaging job, because the behaviour already exists and is proven. It's the same lift-and-freeze move that turned specview's modules into the Core spine — additive, respecting the frozen services, no existing service edited in place.

  1. Merge the branch as a frozen platform service oll-memory — its own Coolify app, Base Directory /services/oll-memory, with its own Neon DB oll_memory (pgvector) per ADR-008 — remote Neon, never a local Postgres, even for dev.
  2. Keep the elegant trust boundary intact — identity-derived corpus (mem:user:{userId}), a service token between each product's BFF and oll-memory, plus the relevance floor and abstention. The security surface doesn't change; the browser still never names a corpus.
  3. Contract-first — an openapi.yaml slice as the single source of truth, gated by Schemathesis in CI per ADR-009, exactly like Core and the Model spine.
  4. Each product calls it as a first-party BFF client — the same shape ollwrite uses today. foto / write / spec / career opt in per product; public workspaces (bible) are a feature flag, not new code.
  5. Merge oll-extract alongside as the ingestion / extraction endpoint family — messy PDFs and forms become clean chunks and typed JSON, feeding the same corpus.
Frozen-respecting by construction: this is purely additive. Core (ADR-002/016) is not touched; the Model spine is not touched; every existing product keeps working. A new spine lights up, and products opt in one at a time.

The honest ship-vs-build read address it head-on

The house guardrail is explicit: Phase 0 is the first stranger franc, and nothing net-new starts until it closes. So the fair challenge to this whole doc is: isn't promoting a Memory spine exactly the infrastructure-before-income pattern you're supposed to resist? Here's the honest answer.

It is not infrastructure-before-income — it's the product differentiator that makes the income more likely. ollwrite-with-your-docs and CiteBible are stronger products than plain tools, and the career agent is only worth paying for if it's grounded in your real experience. Memory is what makes the things people are being asked to pay for actually worth paying for. And it's ~90% built, so the incremental effort is low — this is closer to “finish and freeze” than “start something new.”

So the recommended sequencing keeps both truths:

TrackMove
(a) Keep closing the francwith what's already live — CiteBible's ignition, the humaniz money path. This stays P0; nothing here jumps that queue.
(b) Promote Memory as the near-term platform completionbecause it's built and it's what makes the products worth paying for. Low incremental effort, high customer value — the definition of a good next move.

This is a propose-then-decide, not a done deal. The recommendation is clear; the call is Sam's.

Decision points for Sam close explicitly

  1. Promote oll-memory (branch daf6d7a) to a frozen platform service now? recommended — the elegant, high-value, mostly-built completion of the three-spine picture.
  2. Merge oll-extract (feat/oll-extract, awaiting your call) as the ingestion sibling? — messy input → clean chunks + typed JSON, feeding the same corpus.
  3. Build the durable credits ledger on Core to make pay-once purchasable per-product? — the monetization companion; Core is the natural owner of per-user state.
  4. Confirm the framing: memory-grounded, cited output = oll.am's real customer-value differentiator, vs commodity generation everyone already gives away for free.
Reflection: the elegance of oll.am was always “frozen spines, disposable products.” Two spines answer who you are and which model. The third answers what you know — and it's the only one of the three that makes the output personal, cited, and worth paying for again. It's already built. The move isn't to invent it; it's to name it infrastructure and let every product lean on it.