| hide |
|
|---|
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.
Get started{ .md-button .md-button--primary } View on GitHub{ .md-button target="_blank" rel="noopener" }
-
:material-shield-check:{ .lg .middle } Workflows to agents, one engine
Built for LLM-infused pipelines first. Tool-calling agents (cycle back to an LLM node) and pure deterministic ETL sit at the two ends of the same spectrum.
-
:material-content-save:{ .lg .middle } Crash-safe by contract
Synchronous checkpoint save after every node. Process dies mid-step, next
invoke(resume_invocation=...)picks up from the last save withcorrelation_idpreserved. -
:material-eye:{ .lg .middle } Pluggable observability
Native
OTelObserveremits GenAI semantic conventions any OTLP backend renders. SeparateLangfuseObserverfor the Langfuse destination. No vendor lock-in to a paid SaaS. -
:material-graph:{ .lg .middle } Bad graphs don't compile
.compile()rejects six categories of structural error beforeinvoke()is reachable: dangling edges, unreachable nodes, conflicting reducers, no entry, undeclared subgraph fields, multiple outgoing edges. -
:material-arrow-split-vertical:{ .lg .middle } Parallelism, formalized
Fan-out with bounded concurrency and per-instance error policy. Parallel-branches runs N named sub-graphs. Both nest with attribution-correct observability.
-
:material-language-python:{ .lg .middle } Async-first, LLM-agnostic
asyncio-native throughout: every node, observer, and checkpointer is
async. Use any LLM provider, any model, any external system. Drops directly into FastAPI lifespan hooks.
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.
Read the spec →{target="_blank" rel="noopener"}