ActiveGraph is a Python runtime for long-running, auditable agentic systems built on an event-sourced reactive graph. Instead of agents messaging each other, behaviors react to a shared graph of objects and typed relations. Every mutation is an event in an append-only log, the graph is a deterministic projection of that log, and every run can be resumed, forked, and diffed from it. It comes from the author of BabyAGI, and an included example rebuilds BabyAGI's autonomous agent loop as three reactive behaviors over a shared graph.
Behaviors are the unit of code: plain functions, classes, or LLM-backed behaviors that subscribe to event types, predicates, or graph shapes expressed in a Cypher subset. Behaviors can also attach to typed edges, so coordination logic lives on the relation rather than on either endpoint. They propose patches that the runtime applies or rejects with optimistic concurrency, policies decide which behaviors may call which tools and which mutations need human approval, and a failed behavior is recorded as an event rather than raised as an exception.
Forking branches any run at any event, runs the fork with a different configuration, and structurally diffs it against the parent, with an LLM replay cache so the shared prefix makes no new model calls. Strict replay re-fires every behavior and fails on divergence, while permissive replay rebuilds state without re-firing.
The event log lives in SQLite or Postgres, and the materialized graph lives in memory or in FalkorDB. Anthropic and OpenAI providers share one interface. ActiveGraph states that it is not a chat framework, a workflow engine, or a production graph database: workflows model control flow, while ActiveGraph models world state.
Features
- Event-sourced graph: objects, typed relations, and an append-only event log that doubles as the audit trail
- Reactive behaviors: function, class, or LLM-backed behaviors subscribed to event types, predicates, or Cypher graph patterns
- Relation behaviors: coordination logic attached to typed edges between objects
- Fork and diff: branch a run at any event and structurally diff the result against its parent, reusing cached LLM calls for the shared prefix
- Replay: strict mode re-fires behaviors and fails on divergence, permissive mode reconstructs state only
- Patches and policies: behaviors propose mutations with optimistic concurrency, and policies gate tool access and human approval
- Packs: bundles of object types, behaviors, tools, prompts, and policies for a domain, with a Diligence reference pack and an open library of about 20 packs
- Storage backends: SQLite or Postgres event stores and an in-memory or FalkorDB graph store, behind pluggable protocols
- Event export: event sinks stream live events through bounded workers, with Prometheus and OpenTelemetry metrics as options
- Error reference: every error message links to a page explaining when it fires and how to fix it

