CAUSALITY

The graph that explains itself.

This is the part that makes podblocks different, so it gets its own page. Every run produces a causal event poset: a partially ordered set of events where the edges record what caused what. Causality is not a dashboard you look at afterward. It is load-bearing.

WHY, NOT JUST WHAT

A poset, following RAPIDE.

A traditional log tells you a sequence of things happened. A poset tells you which events caused which, even when they happened concurrently. podblocks follows the Stanford RAPIDE 1.0 semantics: each event carries a Lamport timestamp and a vector clock, and the worker and control plane agree on a partial order. That is what lets you ask for the root causes of a failure and get the actual chain, not a guess based on timing.

CONSTRAINT GATING

Rules that change the run, mid-run.

Constraints are declarative rules over the causal stream. A never constraint says a pattern must not occur; a must_match constraint says one has to. When a constraint fires, an enforcement policy alters execution. Enforcement runs in-process on the worker, at function-call latency, not as an afterthought from a separate service.

PolicyWhat it does mid-run
haltCancel the affected branch. If the scope is the whole pod, fail the run with a status detail.
retryRe-execute the violating block up to a max with backoff. Retried executions appear as new events caused by the constraint action.
routeSkip the normal downstream path and dispatch a named remediation block or pod, carrying a context artifact with the violation summary and offending event ids.
approvePause the branch, send an approval request, and set the run to gated until a human decision lands in the Approvals inbox.
logRecord the violation in the causal stream and proceed. The cheapest policy, and the one that pairs with causal triggers to wake other pods.

CAUSAL OVERLAY

The why, drawn on your canvas.

The run view overlays the runtime causal graph onto the design-time DAG: design edges in slate, causal edges in pink. Crew nodes expand in place into their internal subgraph of agent, task, tool, and LLM events. Click any event and the inspector answers root-cause and descendant queries, fetched live from the causal API.

PODS WAKING PODS

A violation in one pod wakes another.

Here is the headline behavior, told as the five-minute causal demo. A research pod runs a crew whose tool fails once, violating the no_tool_errors constraint with policy log. A resident diagnosis pod is watching the project's live event stream with a causal trigger.

diagnosis-pod triggers
triggers:
  - type: causal
    pattern: 'violation("no_tool_errors")'
    scope: project

The trigger matches the violation. The diagnosis pod wakes, queries the violation's root causes through the causal API, and produces a diagnosis artifact. The combined record across both pods renders as one connected graph: tool error, to violation, to trigger fired, to the diagnosis run, end to end.

See it wake a pod in real time.

The demo is five minutes. The idea sticks longer than that.

Get started 30 days for free