Crashes happen. Context disappears. CONTINUUM remembers what actually matters, so nothing gets done twice.
why it matters
agent recovery
29 event types. 7 recovery modes. 6 checkpoint policies. Hash-chained audit trail. Every component verified before resume.
Not a conversation dump. A compact, versioned tree of verified goals, decisions, findings, evidence, and pending tasks.
Every checkpoint component checked against the live environment. Staleness propagates through the dependency graph.
7 action states. Two-phase claim/complete protocol. Raises UnknownSideEffect rather than guessing.
Append-only event log with SHA-256 digests. verify() reports trusted_through for partial tamper recovery.
Deterministic, sealed with integrity hash. Names exactly one next permitted action.
Every state component traces to its origin event. Agent-reported state marked REQUIRES_REVIEW.
Built for agents that don't forget.
eleven tools, one protocol
Route external side effects through the ledger without embedding the library.
Route external side effects through the ledger without embedding the library. Mutating tools require caller authorization. Read-only tools stay open to everyone.
Mutating tools match callers against an allowlist from CONTINUUM_MCP_MUTATING_CLIENTS env var or .continuum/mcp-policy.json.
Simulate real-world agent failures and inspect how CONTINUUM handles recovery contracts.
the good stuff
start building
Not on PyPI yet, install from a clone. The core library and CLI use only the standard library, the mcp extra adds the server.
git clone https://github.com/Cyrax321/CONTINUUM
cd CONTINUUM
uv venv
uv pip install -e ".[dev]"Two entrypoints land on your PATH: continuum (the CLI) and continuum-mcp (the MCP server).
from continuum import EventType, Run, SQLiteStorage
store = SQLiteStorage("agent.db")
store.create_run(Run(run_id="run_4821", goal="Analyze docs"))
store.append_event("run_4821", EventType.RUN_STARTED, {"total": 10_000})Append events as the agent works. The chain is hash linked and verifiable after a crash.
continuum resume run_4821
continuum validate run_4821Decide how a run may safely resume, or validate state against the live environment. See python examples/crash_recovery_agent.py.
ask away
It is a recovery layer for long-running AI agents. When an agent crashes, it resumes from a compact semantic checkpoint (a versioned tree of verified goals, decisions, findings, evidence, and pending tasks) rather than replaying the whole conversation, and every component is revalidated against the live environment before it continues.
Replay re-runs every tool call and can repeat external side effects. CONTINUUM keeps a semantic state representation, an idempotent action ledger (claim/complete, with UnknownSideEffect raised rather than guessing), and a hash-chained append-only event log. Duplicate work and duplicate charges are refused, not merely hoped away.
Every checkpoint component is checked against the current environment, and staleness propagates through the dependency graph. Recovery contracts are deterministic and sealed with an integrity hash, naming exactly one next permitted action. Agent-reported progress carries provenance and is marked REQUIRES_REVIEW, so an agent cannot certify its own safety.
It is framework-agnostic. There are adapters for generic Python, the OpenAI Agents SDK, LangGraph, and LangChain, plus a deny-by-default MCP server (11 tools) that lets Claude Code and other MCP clients route side effects through the ledger without embedding the library.
Phases 1-11 of the roadmap are complete: event log, semantic state, SQLite persistence, checkpointing, validation, the action ledger, the recovery engine, the CLI, crash-recovery examples, and framework adapters. The benchmark suite, cloud API, and dashboard are planned next. Known limitations are tracked openly in STATUS.md and the issue tracker.
open source, contributions welcome
Bug reports, adapters, benchmarks, docs. The issue tracker and CONTRIBUTING.md tell you where to start.
Start contributing