AGENTICAMIT // GRAPH ENGINEERING
an engraving of durable memory
AgenticAmit // sheet 1 of 1 // section view
The agent forgets. The graph does not.
Every run dies with its transcript. Graph engineering gives the
system one durable world model: typed records, canonical nodes,
edges with receipts. Each run borrows context from the graph and
pays new records back in. Scroll the cycle. Then watch a week
use it.
Op 01// write1 of 5
The transcript dies. The record does not.
A run's finding leaves as a typed record with
fields, not as prose in a chat log. Not context dumping, not a
summary: a claim you can query later.
▸ the write-back, one structured output
{ "entity": "export_bug","claim": "2.4.1 fixes the CSV drop","source": "commit_8f31c","confidence": 0.92,"run": "run_mon_0822" }# the transcript: 41k tokens, gone
// summaries are prose too. If it matters, it
becomes a record with a source on it.
Op 02// resolve2 of 5
Three names. One node.
"Bug #412", "the CSV export bug" and export_bug
are the same thing. Resolution merges surface forms into one
canonical node, and keeps its receipts.
// a false merge contaminates every query
downstream. Resolution without receipts is guessing.
Op 03// connect3 of 5
The graph is made of receipts.
Edges are typed, and every one carries its
source. Nobody draws the structure by hand; it assembles from
evidence, one edge at a time.
▸ the edge log, provenance attached
e2 ticket_5803 MENTIONS export_bugsrc: ticket text · 08-19e3 commit_8f31c FIXES export_bugsrc: commit messagee4 claim_112 SUPPORTED_BY commit_8f31ce5 run_mon PRODUCED claim_112
// an edge without a source is an opinion.
Op 04// retrieve4 of 5
Borrow a subgraph, not the world.
The context builder resolves the task's
entities against the graph, expands a hop or two over allowed edge
types, prefers recent verified claims, and stops at the budget.
// the evaluator returns instructions, not
adjectives.
The question// graph or table
Most systems do not need this.
A graph earns its cost only when connection and
persistence are the point. Three honest checks, then take the
boring option if you can.
▸ the gate, three checks
must facts survive the run? [y/n]do queries span 2+ hops? [y/n]does provenance matter? [y/n]all yes → build the graphany no → a table is fine# this system: yes · yes · yes
// nobody gets credit for a graph. They get
credit for answers that hold up.
That is the whole cycle.
now let three runs use it
Live// mon · wed · fri, one graph
Runs come and go. The graph keeps score.
Three sessions across a week, none sharing a
transcript. Each borrows a subgraph, works, and pays records back
in before it dies.
borrow: walk the billing subgraphmon
pay in: ticket_6110 is a duplicatemon
claim: 2.4.1 closes the complaintswed
ground it: included_in edge exists?wed
walk the four-hop pathfri
answer, citing e1 e2 e3 e6fri
// wednesday asserted without evidence. The graph
refused it and named the missing edge. It got the edge.
Held// the world model3 runs · +8 records
Friday never met Monday.
The FRI run answered a four-hop question it
could never answer alone, on edges other runs paid in. The runs are
gone. The path is still there.
▸ the answer, citing its path
Q: did 2.4.1 close what billing was complaining about?A: yes. ticket_5803 MENTIONS export_bugFIXED_BY commit_8f31cINCLUDED_IN release_2.4.1 cited: [e1, e2, e3, e6]
// grounded means the path exists. Ask the graph,
not the vibe.
The drawing, complete
Build the part that remembers.
Models get swapped. Transcripts get truncated. The graph is the
one part of the system that compounds: every run borrows from it
and pays back in, and the interest is a world model any later agent
can query.