A durable agent workflow runtime
Describe the task,
Let your agent orchestrate the work.
your agent writes workflow.ts
workflow carries any mix of ACP agents
acpus keeps the run
Fact-check this article against the code and primary docs, challenge any weak findings, and wait for my approval before writing the cited report.
workflow.ts get written, checked, and run.
I
The file is real
Typed before it runs. Reviewed when it matters.
The authoring agent does not hand you a plan in prose — it writes real TypeScript,
and Acpus checks it before a single node runs. acpus workflow check
covers type diagnostics, authoring rules and value flow, then lowers the module
into a frozen, serializable WorkflowIR — the same graph you just watched. The file
is yours to read, diff, or review in a pull request; but most of the time, the
agent gets it right because the type system won't let it ship nonsense.
$ acpus workflow check workflow.ts
✓ typescript 0 errors
✓ authoring rules 0 errors
✓ WorkflowIR 0 errors · 6 static nodes
$ acpus workflow viz workflow.ts
fact-check
input { article: string }
output …
agents: extractor (claude) · verifier (pi) · redteam (codex)
┌─ ✦ extract_claims · extractor
├─ ✣ verify_claims · fanout
│ └─ ✦ verify · verifier
├─ ✦ red_team · redteam
├─ ◌ publish_gate · signal
└─ $ write_report · task
II
Any ACP agent, one run
The graph is stable. The cast is a choice.
An Acpus workflow does not bind you to the agent that wrote it, nor to a single model
vendor. Through the acpx / ACP boundary one run can cast
claude to extract, pi to verify and codex to attack — and
recasting is a configuration change, not a rewrite. Fork the run with a new mapping
and compatible completed work is reused inside dependency boundaries, not re-done.
- codex
- claude
- pi
- trae
- opencode
- gemini
- cursor
- copilot
- qwen
- + any raw ACP command
recast a node — watch the fork
click a node's agent badge to recast it
III
Control is durable
The agents do the work. Acpus keeps the run on track.
Every run is held in workspace-local SQLite with frozen run files; the CLI tree and the web graph are two projections of the same durable state. Pause writes a durable gate. A signal is a durable input. A retry targets exactly one node. A fork opens a new run that reuses compatible completed facts instead of starting over.
acpus runs inspect
Follow the durable run state in the CLI.
acpus runs pause
Set a durable pause gate; active attempts wind down.
acpus runs resume
Clear the gate; scheduling resumes.
acpus runs retry
Retry one failed node, not the whole graph.
acpus runs signal
Deliver a waiting signal; the run continues.
acpus runs fork
Fork with a new cast; compatible facts carry over.
IV
Run once — or keep it
Disposable for the task. Durable when retained.
Not every workflow deserves permanence, and none needs a second format to earn it.
The same workflow.ts serves a one-off afternoon and a team's recurring
machinery — the difference is only what you do with the file afterwards.
rm workflow.ts
Disposable for the task.
One-off research or triage ends here. The run record stays in the workspace; the file goes.
git commit workflow.ts
Durable when retained.
An orchestration that solved a recurring problem becomes a reviewed, versioned asset.
.acpus/workflows/fact-check/
Ready to re-run.
Keep it in the catalog — or let it travel with a skill — and run it again with new input.
Acpus expands the boundaries of your agent’s intelligence.
Try use it in your
everyday work.