Workflows and agents that don't lose their place.
Pyrula runs durable workflows, pipelines, and LLM agents on a fast Rust-backed functional core. They survive crashes and pick up where they stopped.
pip install pyrula Install only what you need.
Each piece ships as its own package and depends on the shared functional core.
Primitives
Rust-backed Either, Option, Try, immutable IList/IMap, and serde. They read like plain Python, and everything else builds on them.
DurableWorkflows
Append-only run streams. After a crash, a run replays and resumes at the point it stopped, so you keep the work already done.
BuildAgents
Write agents with @agent and @tool. Stream turns over SSE and serve them over plain HTTP in production.
StreamKafka
A pure-Rust client (no librdkafka) that tracks the confluent-kafka API, with explicit timeouts and exactly-once (EOS) transactions.
MovePipelines
Exactly-once Kafka, Delta, and Postgres connectors running on an Arrow-based engine.
Built for jobs that have to finish.
Survives crashes
Every run is an append-only event stream. Status comes from the stream, so a restart picks up where it stopped instead of running again from the top.
Exactly-once over Kafka
An agent's output and its offset commit land in the same transaction. Read-process-write pipelines with no duplicates and nothing dropped.
Rust-backed core
A fast, typed functional core sits under every package: Either, Option, Try, immutable collections, and Rust serde.
Install what you need
Each piece ships as its own package built on the core. Start with the primitives and add workflows, agents, or Kafka when you need them.
Ship durable agents.
Read the quickstart, or open the cloud console to run and watch your agents.