Agent memory that knows
when it shouldn't answer.

Every fact is a claim with provenance and a validity window. Contradictions and overwrites are graph structure, not something re-derived at read time. A graph probe answers simple questions cheaply, escalates conflicted ones, and abstains when the graph can't back an answer.

View source
hydraclaim · ask
QUESTION
What is the current launch deadline?
DEEP
Three claims cover this predicate, two supersessions deep, with one unresolved contradiction between sources. Cheap retrieval would have returned the stale one.
ANSWER
April 18, 2026
Cited from Slack #launch, Apr 3 · supersedes two earlier dates
GRAPH PROBE
Coverage3 claims
Contradictions1 edge
Supersession depth2 hops
Queries run5 · ~0.7 s

Overwrites and contradictions are structure, not accidents.

SUPERSEDES

Overwrites keep their history

When a fact changes, the old claim isn't deleted. A typed edge records the replacement, so the chronology of a decision is a bounded traversal instead of an inference over chunks.

CONTRADICTS

Conflicts surface, not average out

Two sources disagreeing is a first-class relationship. Trust scoring is predicate-specific, and unresolved conflicts stay visible rather than silently picking a winner.

ABSTENTION

No claim means no answer

Typed coverage is a query, not a similarity score. If nothing supports the question, the router declines and reports the gap instead of retrieving the nearest chunk and guessing.

Measured against the alternatives

50 questions · 16 scenarios · oracle ingestion · reproducible
ARMACCABST. P/RCONFLICTKUTEMPORALLOOKUPQ/Q · P95
Naïve RAG0.2800.000 / 0.0000.0000.9230.1430.0001.0 · 123ms
Question router0.6800.857 / 0.3750.2500.8461.0000.6674.8 · 1043ms
Always deep0.7800.857 / 0.3751.0000.9231.0001.0005.0 · 622ms
Router + graph probe0.9800.941 / 1.0001.0000.9231.0001.0004.7 · 733ms

50 questions across 16 scenarios (supersession chains up to depth 3, typed and untyped value conflicts, alias-only references, and as-of boundary reads). The naïve baseline picks the active claim with the most word overlap — it can't see supersession chains, can't surface conflicts, and guesses on every abstention. The graph probe gives typed coverage: abstain when nothing supports the question, escalate on conflict or history, answer cheaply only when the graph is clean. The single router+probe miss is a subject/object inversion ("who works on X" vs "X is owned by who") — a documented vocabulary limitation, not a retrieval error.

One graph. Two interfaces.

Use the command-line interface for direct work. Use the Model Context Protocol (MCP) server to give an AI agent the same cited claim memory.

CLIdirect

Ask from a terminal

pip install hydraclaim
hydraclaim ask "What is the launch date?"
MCPagent

Connect an AI client

pip install 'hydraclaim[mcp]'
hydraclaim mcp

Tools: ask_claim and record_source_event

AGENT INSTALL REQUEST

Install HydraClaim MCP for this project. Run python -m pip install 'hydraclaim[mcp]'. Configure an MCP server named hydraclaim with the command hydraclaim and the argument mcp. Set HYDRADB_URL, HYDRADB_TOKEN, HYDRADB_NAMESPACE, HYDRADB_GRAPH, and HYDRADB_CELL. Ask me for missing values. Do not invent secrets. Verify the setup by listing the ask_claim and record_source_event tools.