OpenArmature¶
A workflow framework for LLM pipelines and tool-calling agents. Typed state, structural graph checks, and observability that doesn't require buy-in from every node.
-
Typed, frozen state
State schemas are Pydantic models with
frozen=Trueandextra="forbid". Nodes can't mutate state; they return partial updates and the engine merges via per-field reducers. -
Compile-time checks
Bad graph shapes (dangling edges, unreachable nodes, conflicting reducers, missing entry) fail at
.compile(), not at run time. -
Observable, opt-in
Attach an
Observerto see every node boundary. Drop in the optional OTel mapping for spans + log correlation; logs carrytrace_id/span_id/correlation_idautomatically. -
Checkpointable
In-memory and SQLite
Checkpointerbackends ship in core. Crash at node N+1, resume from node N's saved state on the next invocation. -
First-class fan-out
Per-instance fan-out with bounded concurrency, error-policy choice, and observability events that attribute correctly per instance.
-
Async-first, LLM-agnostic
The engine has no concept of LLMs or tools; those live at the node boundary. Use any provider, any model, any external system.
Open specification¶
OpenArmature is defined by a public, language-agnostic specification, not a Python-shaped opinion exported to other languages. Reference implementations share conformance fixtures, so behavior stays identical across languages, runtimes, and tooling stacks.