Your AI forgets.
Your project
shouldn’t.

StateEngine is the local-first state layer for AI-built projects — durable decisions, raw-log provenance, and agent memory that survive every session, every model swap, every clear.

Local-first · Node 20+ · No account, no cloud

  • Dogfooded daily on its own repo
  • 5,189 tests · 261 mutation checks
  • Hash-chained ledger · fsync per transaction
  • Local-first · no account, no cloud

What exists today

Not a pitch deck. A running system.

StateEngine runs its own project. Every primitive below is dogfooded daily — none of it is a roadmap bullet.

  • Decision ledger

    Hash-chained decisions, rebuilt deterministically from an append-only event log.

  • Raw-log floor

    Every human and model turn, projected from native transcripts and never edited.

  • Context packets

    A deterministic handoff a fresh or cleared agent can start from cold.

  • Memory lanes

    Candidate and ratified recall, event-sourced — suggest, promote, reject, retract.

  • Atlas

    Bounded find across the project — returns pointers and provenance, never text.

  • Capability router

    A policy you own, scoring every model on cost, intelligence, and taste.

  • MCP + tools

    stdio and HTTP surfaces, so any compatible client gets the whole tool set.

  • Seat mesh

    Several models working one project at once, coordinated through a shared floor.

How it works

The loop, not the prompt.

Context windows end. Projects shouldn’t. StateEngine keeps the truth between sessions so any model can pick up where any other left off.

01

Bring a messy project

Folders, chats, code, exports, half-remembered decisions. StateEngine organizes without destroying — raw history is sacred.

02

Work with any model

Claude Code, Codex, MCP clients, or your own API keys. Models are interchangeable seats; the project is the constant.

03

Every turn hits the floor

Raw logs project from native transcripts — visible messages only. Hidden packets never touch the floor. Provenance always.

04

Truth lanes update

Decisions get ratified, memories promoted, outcomes recorded with labeled verification strength. Canon rebuilds from the event log.

05

The next agent resumes clean

Any model, fresh session, full project context via a deterministic packet. Zero re-prompting.

stateengine — your terminal
$ node stateengine.mjs packet --project my-app --last  ✓ packet assembled · authority-ranked · 3.1 KB    focus: "checkout refactor" · 4 seats · 12 raw-log sources $ node stateengine.mjs decide \    --key api.retry-policy \    --statement "Exponential backoff, max 3 attempts" \    --actor-type agent --actor-id codex  → proposal seq 261 · PENDING — agents can’t self-ratify $ node stateengine.mjs ratify --decision-id 261 \    --actor-type human --actor-id you  ✓ RATIFIED · canonical from seq 261 · hash-chained

Real commands, abbreviated output. No cloud required.

Atlas · in the MCP tool set

Every index answers. Ours tells you how much to trust the answer.

grep was built for a human who will read the result and judge it. Atlas is built for a model that will act on it — so it returns pointers instead of text, states why it matched, and reports how stale it is. The failure it exists to prevent isn’t a miss. It’s an agent asserting something plausible.

FIG_01

It says why it matched

Not a similarity score you cannot calibrate — the field that produced the hit.

FIG_02

It grades its own answer

Exact match, forgiving match, or no match — and whether the scan was truncated.

FIG_03

It reports its own staleness

Per source: offset, sequence, anchor hash, commits behind. It will say "unknown".

FIG_01 — ATLAS RESPONSEpointer-only
$ atlas_query "raw log floor watcher"{  node_id: "stateengine:main:file:src/raw-log-watcher.mjs",  kind: "file",  source_hash: "26ac1a76be4c7285bbb4ac23…",  matched_on: ["natural_key"],  coverage: "observed",  query_status: "exact-token-match",  candidate_scan_truncated: false,  stale: false,  code_index.commits_behind: 2,  status: "unknown",}
why it matched
answer grade
freshness
grepvector searchAtlas
Returnslines of textsimilar passagespointers + provenance
Why it matchedyou infer itopaque distancestated
Answer gradenoneuncalibrated scoreexact / forgiving / none
Stalenessfile mtimeusually unknownper source, with evidence
Can say “I don’t know”nonoyes
Leak surfacethe whole fileembedded chunksnone — text is never held
FIG_02merge-loghead flush at endexact-eoffreshlanding-receiptshead flush at endexact-eoffreshoutcomes10,072 bytes short · 20 events behindalignedlaggingmessagesprefix changed beneath the headrotatedunknown

It reports the byte it read to

Four append-only sources. Two heads sit flush at EOF, one is 10,072 bytes short, and one has had its prefix change underneath it — so it answers “unknown” rather than guessing.

FIG_03working treecannot seecommitted index0 commits behindworking_correspondence: DIRTY-OVERLAY

It marks the edge of its own sight

The committed index, solid. The uncommitted working tree, drawn as a hole and labelled. A technical drawing that includes what it cannot see.

FIG_040ms50ms100ms150ms200msexact · kind filterexact · path tokensexact · single tokenforgiving · 3 typosno-match · nonsensefindsqlite, ~1msprovehash the real filesauditrotating canary, ~100ms

One millisecond to find, a hundred to be sure

The bright sliver is the SQLite lookup. Everything after it is proof — re-hashing the real files, then a rotating audit of pointers nobody asked about.

FIG_05seat7invariant17cli-verb85decision209test554merge668branch812file952receipt1,005review1,235artifact1,562symbol1,601outcome1,795task2,143message3,69116,336 NODES · 15 KINDS

Fifteen kinds, one closed set

Every node is one of fifteen typed kinds. The typology is fixed by contract.

* example only · no known limit on volume

Authority model

Agents propose. Humans ratify.

Every byte StateEngine hands an agent carries an authority rank. Model output never promotes itself — canon requires a human, or a policy a human ratified, at the gate.

“A rubber-stamped ledger is worse than a sparse ledger.”

— so ratification is stakes-tiered on purpose
01

Your instruction

The highest authority in the room. What you say right now outranks everything derived.

02

Ratified decision ledger

Hash-chained, canonical, rebuildable from the event log. Nothing gets here without a human or a ratified policy at the gate.

03

Working state + active spec

The current focus — agent-drafted, clearly stamped non-authoritative until you ratify it.

04

Verified reviews + committed code

Work that passed gates and adversarial review — verified, not asserted.

05

Everything derived

Raw-log continuity, file orientation, candidate memory. Useful context, never canon. Models cannot promote their own claims.

Coming soon

Get in at the ledger layer.

The alpha opens with the exact build we dogfood: the CLI and the MCP server, running against real projects. Windows-first, Node 20+, free while we harden it.

  • Full CLI: decision ledger, context packets, memory lanes, capability router

  • MCP server over stdio + HTTP, with the whole tool set — Atlas included

  • Raw-log capture for the CLIs you already run

  • A direct line to the people building it — your reports steer the queue

install command— published when the alpha opens

What the alpha includes

Registration opens soon

Small batches. Builders first.

We’re not collecting addresses yet. When invites are ready there will be a real form here, and it will say exactly what happens to what you type into it.

Cost during the alphaFree
Where your project livesYour disk
Account requiredNone

FAQ

Honest answers.

StateEngine exists so claims can be checked instead of trusted. We hold the marketing to the same standard: nothing here describes something that doesn’t run yet.

Yes — as a local-first CLI and MCP server, dogfooded daily on its own repo and its first outside projects. The decision ledger, raw-log floor, context packets, memory lanes, and capability router are running code, not roadmap. What’s coming soon is the public alpha and, later, the studio UI.

No. StateEngine is local-first: your project state lives on your machine as an append-only event log, fsynced per transaction, exportable whenever you want. No account, no cloud dependency, nothing leaves your disk unless you say so.

StateEngine is model-agnostic — state lives outside the context window, so you can swap models mid-project without losing anything. Today there are native raw-log adapters for Claude Code and Codex, a BYOK API lane, and an MCP server for compatible clients. No subscription-token bypass, no credential impersonation, ever.

Memory is one lane. The core is truth: a hash-chained decision ledger with human ratification, a raw-log floor with provenance, and an explicit authority model that ranks every byte an agent sees. A vector index can tell you what’s similar; StateEngine tells you what’s true, who decided it, and what proves it.

It stays yours, on your machine. Raw history is sacred: StateEngine archives and compresses rather than deletes, permanent destruction is always manual, and hidden context packets never enter raw logs. Canonical truth cannot be silently modified by a model.

The alpha is free. Beyond that we haven’t settled pricing, and we’d rather say so than promise a shape we might change. What we will commit to: the local core stays usable, and you can always export your project state.