The Problem
AI agents are stateless. Each session starts from scratch with no memory of past decisions, patterns, or mistakes. When something goes wrong, there’s no way to answer:- What information did the agent have when it decided?
- What external sources did it consult?
- Has a similar decision been made before, and what happened?
Decision Traces
A decision trace is a structured record of how an agent turned context into action:How AMFS Captures Decision Traces
AMFS’s existing primitives map directly to each component of a decision trace:1. What the agent knew
Everyread() call is automatically logged by the ReadTracker. When the agent later commits an outcome, AMFS knows exactly which entries informed the decision.
2. What external inputs were gathered
record_context() captures tool calls, API responses, and other external inputs without writing to storage. These appear in the causal chain alongside AMFS reads.
3. What the agent decided
The agent’s decision is written as a versioned, provenanced entry:4. What happened next
Outcomes close the feedback loop. Confidence on causal entries adjusts automatically:5. Why did we do that?
explain() returns the complete causal chain:
From Traces to Graphs
Individual decision traces accumulate into a context graph: entities connected by decision events with “why” links.- Precedent — “The last time we saw this pattern, we rolled back and it worked.”
- Exception logic — “We always check PagerDuty before deploying changes to retry logic.”
- Cross-system synthesis — “The decision combined AMFS memory, PagerDuty incidents, and git history.”
The Knowledge Graph
AMFS now has a persisted knowledge graph that complements the session-scoped decision trace. The two layers serve different purposes:| Layer | Scope | Storage | Purpose |
|---|---|---|---|
| Decision traces | Single session | In-memory (OSS), Postgres (Pro) | “What happened in this session and why?” |
| Knowledge graph | Cross-session, cross-agent | amfs_knowledge_graph table (Postgres) | “How are entities, agents, and outcomes related globally?” |
How Edges Are Created
The knowledge graph is populated automatically — no manual graph construction needed:| Trigger | Edge created | Example |
|---|---|---|
write(pattern_refs=["x"]) | entry → references → x | checkout-service/retry-pattern → references → shared/backoff-strategy |
commit_outcome() | entry → informed → outcome | checkout-service/retry-pattern → informed → DEP-500 |
commit_outcome() | Co-occurrence edges between causal entries | retry-pattern → co_occurs_with → risk-race-condition |
read_from(agent_id) | this_agent → learned_from → other_agent | deploy-agent → learned_from → review-agent |
confidence, evidence_count, first_seen, and last_seen. Repeated materializations increment the evidence count rather than creating duplicate edges.
Querying the Graph
Agents can explore the knowledge graph via the SDK or MCP:CONNECTION_MAP digests from graph edges, surfacing the most important relationships for an entity during amfs_briefing().
The Feedback Loop
Decision traces compound through AMFS’s outcome system:Enriched Decision Traces
Whencommit_outcome() is called, AMFS automatically captures a rich snapshot of the session:
| Field | Description |
|---|---|
causal_entries | Full snapshots of every read entry (value, memory_type, written_by, read_at, duration_ms) |
external_contexts | All record_context() calls with timestamps |
query_events | Every search() and list() call with parameters, result counts, and per-operation latency |
error_events | Any errors during reads, writes, or tool calls |
state_diff | Entries created, entries updated, and detailed confidence changes |
session_started_at / session_ended_at / session_duration_ms | Session timing |
decision_summary | Optional human-readable summary |
Per-Agent Memory Graph
AMFS tracks which agents interact with which entities, enabling per-agent memory views:Immutability and Replay
Because AMFS uses Copy-on-Write versioning, decision traces are immutable. You can reconstruct the exact state of the world at any past decision point:Pro: Immutable Decision Trace Store
Pro extends OSS traces with cryptographic guarantees and advanced telemetry:- HMAC-SHA256 signing — every trace is signed with
content_hashand chained to the previous trace viaparent_hash, forming a Merkle chain that detects tampering - LLM call spans — record model, provider, prompt/completion tokens, cost, latency, temperature, and finish reason for every LLM call during a session
- Write events, tool calls, agent interactions — full audit trail of every action
- OpenTelemetry export — export traces as OTel spans following GenAI semantic conventions, compatible with Jaeger, Grafana Tempo, Datadog, and Honeycomb
- Auto entity extraction — LLM-powered extraction of entities (services, people, tools) and relationships (depends_on, uses, manages) from trace data
- Immutability enforcement — Postgres RULEs block UPDATE and DELETE on the trace table
