The product context layer for coding agents
Your coding agent has never been in the room.
Marrow puts it there. It turns transcripts, standups and interviews into decided vs open product truth, and serves your agent the slice that matters for its task.
The demo needs local Postgres. The live demo needs nothing. Run from source ↓
Works with Claude Code · Cursor · Codex · any MCP host
Every status-bearing fact links back to an exact evidence span.
Postgres with pgvector. No Redis, Kafka, graph DB or vector service.
Models propose facts as open. A human answer is what makes truth decided.
Context size, measured: 2.5x fewer tokens than a raw dump. How it is measured ↓
Prefer not to run it? Cloud waitlist ↓
01 · The room
Your product is decided in meetings, not in the repo.
Trial scope moves on a partner call. Pricing settles in a notes doc. Trial length is still being argued in a standup. None of it reaches the agent. Marrow ingests the raw room verbatim, as immutable evidence: rows are only ever appended, never edited, so every fact built on them keeps its footing.
EVIDENCE LOG · append only
interviews/design-partner.mdev_3f9ainsert only
standups/2026-06-02.mdev_77c1insert only
notes/pricing-call-2026-05-28.mdev_9b2einsert only
interviews/design-review.mdev_41c2insert only
EVIDENCE ev_3f9a · interviews/design-partner.md · excerpt
- Maya: Launch is Monday. The trial is the last call we have not made.
- Partner: We ran a card wall last quarter. Signups dropped forty percent overnight, and the ones who stayed churned anyway.
- Jonas: And every support ticket in week one was the card form. We cannot spend launch week on billing edge cases.
02 · The promote
Models propose. Only a human decides.
Marrow distills the sentence into a fact. It lands open, 0.60, model. Promoting it is your job, and nothing on this page will do it for you. Try it.
EVIDENCE ev_3f9a · interviews/design-partner.md · excerpt · 3 speakers · append only
- Maya: Then the wall comes down. Free trial, no card until they convert.
- Partner: That is the version I can sell internally. Our champions can start it the day they find it.
- Jonas: What about annual billing? Finance put it on the pilot deck.
- Maya: Annual billing needs its own call with finance. Not this week.
- Jonas: Noted. Parking annual billing as open, trial scope is decided.
A reenactment of the loop, running on this page. Nothing is saved.
03 · On the record
Disagreement stays on the record.
Superseded is struck, never deleted. Contested holds both sides, it does not average them. Open waits for you, not a timer. Four statuses, and your agent can always tell which one it is reading.
EVIDENCE ev_77c1 · standups/2026-06-02.md · excerptdecidedopencontestedsuperseded
- Priya: No-card signup shipped to staging like we agreed. QA started a trial this morning without a billing form in sight.
- Priya: The old plan where launch needed a card wall is dead, the free trial replaced it.
- Marco: The open one is trial length. I want the trial cut to 7 days, a long trial goes cold before anyone converts.
- Priya: Keep the trial at 14 days. Activation takes two weekends, teams hit the aha moment on the second one.
- Marco: We did not settle it. Parking it for the growth review.
04 · The slice
Your agent gets the slice, not the archive.
prepare_task returns the facts that matter for this task, each with status, confidence and source span. Never the whole brain, never a raw dump.
MCP · prepare_task({ task: "require a card at signup" }) → 4 facts
trial length is still open (ev_77c1), asking before building.
CONTEXT SIZE · same task, two ways
raw dump of the room473 tokens
the Marrow slice190 tokens
2.5x fewer tokens, every fact still traced.*
* Synthetic fixture benchmark: 3 docs, 3 task questions, chars/4 heuristic; raw 473 tokens, Marrow average 190, 3.85 ms retrieval. No partner-data claim yet.
The agent sees what is decided now and what is still open, and Marrow raises a question when code drifts from a decided fact instead of letting the two quietly diverge. The same brain, live →
05 · The gate
Drift gets caught before it ships.
One gate around every agent task. It speaks MCP, so it serves any agent host: Claude Code, Cursor, Codex, or your own.
GATE · before, during and after the work
prepare_task returns the brief
The agent gets decided goals, decisions, contested facts, open questions and source spans for one task. It also gets a build or ask-a-human signal.
prepare_task({ task: "require a card at signup" })loop --check scans the diff
New code is compared against decided truth. A contradiction creates an open question, a catch event, receipt data and the next accept or dismiss command.
marrow loop "require a card at signup" --check --unstageddrift --ci and truth keep it current
CI annotates PRs, while the daily brief shows proposed goals, contested facts, unanswered gaps, pending catches and connector health.
marrow drift --ci && marrow truth06 · Hands on
Run the loop right here.
A reenactment of npx @marrowhq/cli demo, the same loop the CLI runs on any machine with Postgres. Nothing is saved, and the run waits where the product waits: on you.
marrow demo · reenactment · nothing is saved
$ npx @marrowhq/cli demo
Ingested interviews/design-partner.md as ev_3f9a. Append only.
The wider room is already on file: ev_77c1 standup, ev_9b2e pricing call.
Distilled 1 decision, 2 entities. Every fact carries a span.
"Free trial, no card until they convert" · maya · [00:11:27]
The loop raised a question: "annual billing" has no decision behind it.
And one for you:
Decision [decided] Free trial, no card upfront
Confidence 1.00 (human). Recorded in this reenactment only.
$ prepare_task({ task: "require a card at signup" })
agent: trial length is still open (ev_77c1), asking before building.
4 task-scoped results, each carrying status + provenance. Still open: 1 question.
The same slice you read above. Explore it live → Star the repo →
07 · Workflows
One context layer, every agent workflow.
Brief the agent
Task-scoped decided and open facts before a line is written.
prepare_task({ task: "…" })Gate a risky diff
Compare new code against decided truth, catch the contradiction.
marrow loop "<task>" --check --unstagedAnnotate PRs in CI
Drift annotations land on the pull request, with receipts.
marrow drift --ciAnswer why it is like this
Any fact traces to the exact sentence in the room that made it true.
trace_to_sourceKeep truth fresh
The daily brief: proposed goals, contested facts, gaps, catches.
marrow truthReview as the human
The question loop in a browser. Your answers promote facts.
marrow webWorks with Claude Code · Cursor · Codex · any MCP host.
08 · Open source
100% open source. One Postgres. No asterisks.
Everything this page just did is in the repo. The demo you can run, the MCP server your agent talks to, the drift gate, the question loop. Apache 2.0, self-hosted on one Postgres with pgvector, no Redis, no Kafka, no vector service.
- The four sacred things are never gated: decided vs open, provenance, the question loop, task-scoped retrieval.
- Bring your own model key. Default Claude, never assumed.
- Evidence is append only. Your Postgres, your record.
If the loop earned it, the star is how you say build more of this.
INSTALL · @marrowhq/cli
RUN FROM SOURCE · github.com/ElxMaj/marrow
09 · Cloud
Yours to run. Or ours to run for you.
The core is Apache 2.0 on one Postgres, yours for good. Managed cloud is planned, not generally available today. The target org layer includes hosted brains, SSO, RBAC, audit, backups and support. The four sacred things are never gated: decided vs open, provenance, the question loop, task-scoped retrieval.
Free · Pro · Team · Enterprise. Pricing is not final and we will not pretend it is.
10 · Questions
The skeptic round.
Does Marrow read my codebase?
Only when you ask it to: the one-time onboarding scan at setup, and the diff checks you run with --check. The room is the source of truth, never the repo. Marrow watches the gap between what the room decided and what the code does, then raises that gap as a question. It never rewrites product truth from code.
Why not Notion RAG, or an AGENTS.md?
Retrieval over docs returns text. Marrow returns status-bearing truth: decided vs open, confidence, and the exact source span, kept current by the room instead of stale hand edits. An AGENTS.md is where task conventions belong; the product decisions behind them are what Marrow serves.
Why not Lore, Tenet, or another code memory tool?
They distill from git: what the repo does and how it changed. Marrow distills from the room: what the code should do, decided by people. The room is the one source a code memory tool cannot reach. Run both if you like; they answer different questions.
What if we don't record meetings?
Most decided truth is already written down: standups in Slack, decisions in Linear or Notion, customer notes, pasted call summaries. Marrow ingests markdown, text and transcript files the same way, and the connectors pull from the tools directly. Recording helps, it is not required.
Where does my data go?
Self-hosted data is stored in your Postgres. Distillation sends selected evidence to the model provider you configure unless you use a local provider. Connector tokens are encrypted at rest before they touch the database, and you bring your own model keys.
Will it slow my agent down?
Retrieval is task-scoped and bounded: about 2.5x fewer context tokens than a raw dump on the synthetic benchmark, with average retrieval under 5 ms on the fixture run. Every distill, search and drift check is recorded, so you can see latency and cost yourself.
Is the evidence really immutable?
Marrow's application paths and migrations expose append-only evidence writes. Corrections create new evidence rows, so every decided fact keeps tracing to the exact source span it came from. A self-hosted database admin still controls their own Postgres.
How mature is it?
Early. The local core covers the hero loop end to end: ingest room evidence, distill provenanced truth, serve task-scoped briefs over CLI and MCP, and raise drift catches with receipts. The benchmark is synthetic until partner data exists.
The full comparisons, including when to pick the other tool, live in docs/compare. Anything else: open an issue, ask in discussions, or email support@marrowhq.com. We answer.
The others remember the code. The code was never in the room.
Put your agent in the room.
This page holds 7 facts: 1 decided · 2 open · 2 contested · 1 superseded · 1 entity. Every one traced.
Set in Archivo, Geist and Geist Mono, self-hosted. Built with Next.js, exported as static HTML. No tracking.