onepipeline
Execute a task DAG over oneagentgraph
and onevcs, merging their event
streams into one.
onepipeline is the composition layer. It owns the plan — a dependency graph
mixing direct agent nodes, repository lifecycle nodes, and explicit human actions
— executes it continuously, dispatching each node the moment its dependencies
settle, through a pluggable executor seam, and keeps a live channel open to
the planner supervising the run. The
agents come from oneagentgraph; the clones, worktrees, gates, and change
requests come from onevcs. Dependency direction is one-way: neither sibling
depends on this crate.
The public types, traits, config schemas, and CLI surface are the approved
contract in docs/contract.md, compiled — and implemented
behind it. onevcs is linked and called: sessions, publication, and a
session's event stream are library calls, so what a publication did is a typed
value rather than a line of prose to parse. oneagentgraph is still run as a
CLI, so a build of it that refuses will make the dispatches this crate starts
refuse too; the composition layer itself is complete.
Install
pip install onepipeline-cli # prebuilt binary, no Rust toolchain
npm install -g onepipeline-cli # the same binary, via npm
cargo install onepipeline # from crates.io, compiled locally
To install a revision that has not been released yet — which today is every revision, since the crate depends on its siblings by git and a git dependency cannot be published — build it from the repository:
cargo install --git https://github.com/nickderobertis/onepipeline onepipeline --locked
The package name is not optional: cargo install --git searches the whole
repository, and this one also carries the onepipeline-testfakes test harness,
so an unqualified command fails with multiple packages with binaries found.
Prebuilt archives for Linux (x86-64, arm64), macOS (Intel, Apple silicon), and
Windows (x86-64) are attached to every release, with sha256 checksums.
What it does
onepipeline start plan.json --heartbeat-interval 1800
start drives the run itself: a node — and each step within a lifecycle
node — dispatches the moment its dependencies settle, and settlement triggers
integration and publication immediately. No agent is required. The only pauses
are decision points: a ready kind: human node, or any surface declared
blocking, holds back the subtree that depends on it while every other branch
carries on, and clearing it with attest or reply resumes that subtree inside
the running loop.
--dag-graph REF attaches an agent graph as an observer — the shipped one is
a monitor member that watches the stream and raises what does not line up, plus
a resettable-cron check-in member that surfaces a status when nobody has
reported one for a while. It never drives the engine. Attached, start returns
when the run settles; exit 3 means nothing is driving the run, and
onepipeline adopt RUN attaches a fresh driver to the intact ledger.
A lifecycle node states the title its change request opens under, and may state
its body too. --pr-author-graph REF names an agent graph that drafts that body
instead, from the branch's own diff, once the branch is verified and before the
change request is opened; naming none is the default, and a drafting dispatch that
does not get there costs the change request its body and nothing else.
The planner supervises over the channel:
onepipeline next run-1 # read the next surface
onepipeline reply run-1 <<<'{"version":1,"commands":[ # edit the live graph
{"op":"retry","id":"failed","node":{"id":"retry","task":"..."}}]}'
onepipeline attest run-1 design-approval # complete a human action
Every edit is applied or rejected with a reason: reply exits 0 when the
reconciler applied it, 1 when it is queued but not yet reconciled, and 2 when
it was refused.
Read-only views — runs, status, host, monitor, results, goals,
transcript, telemetry — report unread surfaces, driver liveness, and
provider health without touching a run. status says what each in-flight node
is doing right now, with an event count and an age; transcript RUN [NODE]
renders a dispatched turn's tools and its words; telemetry reports what each
party spent and where the wall clock went, in eight buckets that sum exactly.
Anything nothing in the stack measures is reported absent, never as a zero.
Where a dispatch runs
The executor seam decides. v1 ships the local executor only; the trait and the rules grammar are shaped so a dispatch-server or Kubernetes executor is a config change rather than a code change.
executors:
- {name: local, type: local, max_load1: 8.0, min_free_mem: 2GiB}
rules:
- when: {executor_has_capacity: local}
use: local
- use: local
Ordered: the first rule whose when holds decides, and a rule with no when is
the fallback. A when tests an executor's capacity, the node's own labels
(when: {node_label: {persona: reviewer}}), or both — several conditions in one
when all have to hold.
Development
just bootstrap # from a clean clone
just check # the deterministic gate
just gate # check + the diff-scoped llmlint tier
just --list is the full command surface.
docs/contract-divergences.md records every place
the code could not compile the contract exactly as written, and what the planner
who owns the contract ruled on each.
License
MIT.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file onepipeline_cli-0.7.0-py3-none-win_amd64.whl.
File metadata
- Download URL: onepipeline_cli-0.7.0-py3-none-win_amd64.whl
- Upload date:
- Size: 6.5 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
39e73dce6cbd825730725de6a1e175f09a556504701de43089d367e2a21ad91a
|
|
| MD5 |
2d6cb17766f0268443bc6906d50c74fa
|
|
| BLAKE2b-256 |
76b30e704ffd1a3740f9bb52f369dbe6dadf008a68f1f45b01b17dbb241f06c9
|
File details
Details for the file onepipeline_cli-0.7.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: onepipeline_cli-0.7.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 6.3 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8db2b8dfca2130444e355ffa8c825d0e570dc013a5e860b59a2590ef09e11237
|
|
| MD5 |
e05daa5d68e04cbaaff7901d338f4dff
|
|
| BLAKE2b-256 |
6343a77daeb38dff2e3e617128df0b3bea95de33912f1b15d4e9c11a672c21de
|
File details
Details for the file onepipeline_cli-0.7.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: onepipeline_cli-0.7.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 5.9 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
988fa7a1bf8237cccdf1f6850bebf07021618300dedcce3c2b9547b6b56f92c1
|
|
| MD5 |
ec1dfb5bb1074c21fa35c5f6239ba697
|
|
| BLAKE2b-256 |
96649b3dbacd25b47b43d68a890fa897f7951e878da50f09de32f731079a0870
|
File details
Details for the file onepipeline_cli-0.7.0-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: onepipeline_cli-0.7.0-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 5.7 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
129c005b55e5c76bc507e6b398684c28dc4db768c798191b3a7e209d3176c2dc
|
|
| MD5 |
b39d77857e1a1658bd03b163d6c2d94d
|
|
| BLAKE2b-256 |
1e9054d261508b1087a06ce222f9bca5015c183b749cfc06e8f300990dafe352
|
File details
Details for the file onepipeline_cli-0.7.0-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: onepipeline_cli-0.7.0-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 6.1 MB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d402d74b5260696c0685439e4989fbf6f46fd7bf4477b31bb19065882dd06c20
|
|
| MD5 |
6157b70ab16ff5cfdc61ff521b819303
|
|
| BLAKE2b-256 |
014509591fadfc26f1ac8af29d4169cbf05fc85e687c3284544dfe194f88a5e2
|