axagent experiencelivev0.31.0

$ how it works

What happens to your sessions,
and what you get back.

ax watches every run your coding agents make, turns the history into a typed local graph, mines the mistakes you keep repeating, and hands them back as small fixes you review one at a time — then measures whether they worked.

  1. 01watch
  2. 02graph
  3. 03mine
  4. 04propose
  5. 05measure

$ 01 · watch

Five harnesses. One local graph.

ax reads the transcripts your coding agents already write to disk — nothing to instrument, nothing to send anywhere. A parser per harness folds every run into the same typed graph on your own machine.

  • Claude Code~/.claude/projectsjsonl transcripts
  • Codex~/.codex/sessionsjsonl sessions
  • Pi~/.pi/agent/sessionsjsonl sessions
  • OpenCodeopencode storesqlite store
  • Cursorcursor storesqlite store
LIVEtyped local graphsurrealdb · 127.0.0.1:8521a background watcher ingests new runs the moment they land

The watcher tails your session dirs and ingests in the background — the loop is pull-based, never a per-turn hook that blocks your agent.

$ 02 · graph

Not a vector index. A graph of what actually happened.

Every run becomes nodes and typed edges. The interesting questions are relational — which tool call preceded that correction, which skill fires in the sessions that ship — so the edges are the load-bearing primitive, queryable as first-class facts.

containsinvokedproducededitedproducedtouchedsessionrun · model · repoturnrole · intent · textskillstanding instructiontool_callargs · result · msfilepath in your repocommitsha · message
skill ← invoked ← turn → edited → fileThe line at the top of the schema. That is the model — a RELATE edge between a session and a commit is a queryable fact, not a join across two tables.

$ 03 · mine

The same mistake, counted.

Once the graph holds enough runs, the patterns stop being anecdotes. ax measures verification churn — where a change lands, breaks, and gets repaired — and surfaces the family that keeps costing you the same way.

$ 04 · propose

One small fix at a time. You decide.

Each pattern becomes a ranked proposal — a concrete, repo-specific change with the receipt attached. Nothing is applied for you. You review the brief, accept the ones worth trying, and skip the rest.

Accept a proposal and ax writes a brief into .ax/tasks/ — you act on it like any other task, then reconcile. The fix is yours; the graph just found it.

$ 05 · measure

Did it actually work? ax keeps score.

A fix you can't measure is a guess. Every accepted proposal becomes a bet, and ax checks the same churn signal at +3, +10 and +30 sessions after you apply it. A trace bar that shrinks to zero is a confirmed win — receipts over vibes.

$ why this shape

Two convictions, one design.

127.0.0.1:8521

Local-first by construction.

The graph runs on your machine. Nothing is transmitted, no key is required to read your own history, and you can inspect or delete any of it. The subject matter — what you tried, what failed, what to try next — only belongs in one place.

RELATE

A graph, not a vector index.

The questions worth asking are relational: which tool calls preceded this correction, does this skill show up in the sessions that ship. A similarity search loses that connective tissue. An edge between a session and a commit keeps it as a fact.

install in 30 seconds

curl -fsSL ax.necmttn.com/install | sh

For the curious: the table inventory, the @rationale extractor, and the rest of the ingest internals live in the architecture reference →