Orchestrates multi-step AI agent workflows — defines execution graphs, manages shared state, dispatches work to agents, and tracks progress with checkpoints and streaming
Zig
214
235 commits
updated Sep 28, 2026
NullBoiler is an orchestration engine for AI agents.
It is intentionally narrow: it decides what should run, when it should run, and which worker should execute it.
It does not replace the task tracker and it does not replace the agent runtime.
You do not need all components together.
Choose only the pieces required for your workflow.
tracker = source of truth
orchestrator = policy engine
agent = executor
Use nulltickets as the authoritative task system for AI agents:
Use nullboiler to apply orchestration policy:
NullBoiler should not become a task tracker or artifact database.
Use an agent runtime as the execution engine:
nullclaw is the reference runtime, but nullboiler can also orchestrate other compatible workers
(for example OpenClaw/OpenAI-compatible, ZeroClaw, or PicoClaw via bridge).
Agents should execute work, not own global orchestration policy.
Teams often try to move tracker and artifact responsibilities into the orchestrator.
This project keeps boundaries strict on purpose:
This keeps the architecture modular, simpler to reason about, and easier to evolve.
nullclaw only: single-agent direct execution.nullboiler + nullclaw: orchestrated execution without dedicated tracker.nullboiler + other compatible agents: orchestrated execution without nullclaw dependency.nulltickets + nullclaw: tracker-driven execution loop.nulltickets + nullboiler + nullclaw: full multi-agent orchestration with durable task source.See additional integration docs in docs/.
The orchestration graph runtime supports:
task, agent, route, interrupt, send, transform, and subgraph nodessend fan-out with canonical items_key and configurable output_keyoutput_key and output_mappingstate.*, input.*, item.*, config.*, and store.<namespace>.<key>transform.store_updates for writing durable workflow memory back to NullTicketsStore-backed templates and store_updates require a NullTickets base URL. The
runtime resolves it from workflow fields such as tracker_url or from run config
(config.tracker_url / config.tracker_api_token), which are injected into
state as __config.
~/.nullboiler/config.jsonNULLBOILER_HOME=/path/to/dir--config /path/to/config.jsonWhen NULLBOILER_HOME is set, nullboiler reads config.json from that directory and
resolves relative paths like db, strategies_dir, tracker.workflows_dir, and
tracker.workspace.root relative to that config file.
File-based tracker/pull-mode workflows are loaded from JSON files using the
WorkflowDef shape in src/workflow_loader.zig. Before starting the server, you
can check those files locally:
zig build run -- validate-workflows
zig build run -- validate-workflows workflows
The command defaults to workflows and scans direct *.json files in the
directory, matching loadWorkflows; it does not recurse into nested directories.
This is only for file-based tracker/pull-mode WorkflowDef files, not graph
workflow definitions managed through the HTTP API.
It reports:
WorkflowDef, missing or empty pipeline_id,
and duplicate pipeline_id valuesid,
empty claim_roles, dispatch workflows without dispatch.worker_tags, and
directories with no JSON workflow filesValidation errors exit with status 1. Warnings are shown but do not fail the
command, matching the existing runtime loader's permissive behavior.
Zig
94.0%
Shell
5.0%
Orchestrates multi-step AI agent workflows — defines execution graphs, manages shared state, dispatches work to agents, and tracks progress with checkpoints and streaming
Zig
214
235 commits
updated Sep 28, 2026
NullBoiler is an orchestration engine for AI agents.
It is intentionally narrow: it decides what should run, when it should run, and which worker should execute it.
It does not replace the task tracker and it does not replace the agent runtime.
You do not need all components together.
Choose only the pieces required for your workflow.
tracker = source of truth
orchestrator = policy engine
agent = executor
Use nulltickets as the authoritative task system for AI agents:
Use nullboiler to apply orchestration policy:
NullBoiler should not become a task tracker or artifact database.
Use an agent runtime as the execution engine:
nullclaw is the reference runtime, but nullboiler can also orchestrate other compatible workers
(for example OpenClaw/OpenAI-compatible, ZeroClaw, or PicoClaw via bridge).
Agents should execute work, not own global orchestration policy.
Teams often try to move tracker and artifact responsibilities into the orchestrator.
This project keeps boundaries strict on purpose:
This keeps the architecture modular, simpler to reason about, and easier to evolve.
nullclaw only: single-agent direct execution.nullboiler + nullclaw: orchestrated execution without dedicated tracker.nullboiler + other compatible agents: orchestrated execution without nullclaw dependency.nulltickets + nullclaw: tracker-driven execution loop.nulltickets + nullboiler + nullclaw: full multi-agent orchestration with durable task source.See additional integration docs in docs/.
The orchestration graph runtime supports:
task, agent, route, interrupt, send, transform, and subgraph nodessend fan-out with canonical items_key and configurable output_keyoutput_key and output_mappingstate.*, input.*, item.*, config.*, and store.<namespace>.<key>transform.store_updates for writing durable workflow memory back to NullTicketsStore-backed templates and store_updates require a NullTickets base URL. The
runtime resolves it from workflow fields such as tracker_url or from run config
(config.tracker_url / config.tracker_api_token), which are injected into
state as __config.
~/.nullboiler/config.jsonNULLBOILER_HOME=/path/to/dir--config /path/to/config.jsonWhen NULLBOILER_HOME is set, nullboiler reads config.json from that directory and
resolves relative paths like db, strategies_dir, tracker.workflows_dir, and
tracker.workspace.root relative to that config file.
File-based tracker/pull-mode workflows are loaded from JSON files using the
WorkflowDef shape in src/workflow_loader.zig. Before starting the server, you
can check those files locally:
zig build run -- validate-workflows
zig build run -- validate-workflows workflows
The command defaults to workflows and scans direct *.json files in the
directory, matching loadWorkflows; it does not recurse into nested directories.
This is only for file-based tracker/pull-mode WorkflowDef files, not graph
workflow definitions managed through the HTTP API.
It reports:
WorkflowDef, missing or empty pipeline_id,
and duplicate pipeline_id valuesid,
empty claim_roles, dispatch workflows without dispatch.worker_tags, and
directories with no JSON workflow filesValidation errors exit with status 1. Warnings are shown but do not fail the
command, matching the existing runtime loader's permissive behavior.
Zig
94.0%
Shell
5.0%