Skip to main content

oneagentgraph

Compose agents into a graph over oneharness and onejudge, and merge their outputs into one NDJSON event stream.

One config file and one CLI call: the graph names an oneharness config per role and side, and oneagentgraph prepares each member's launch, supervises liveness, and emits every turn, tool call, fallback, and settle as an event you can pipe into anything.

Install

pip install oneagentgraph-cli      # prebuilt binary, no Rust toolchain
npm install -g oneagentgraph-cli   # the same binary, via npm
cargo install oneagentgraph        # from crates.io, compiled locally

To install a revision that has not been released yet, build it from the repository:

cargo install --git https://github.com/nickderobertis/oneagentgraph --locked

Prebuilt archives for Linux (x86-64, arm64), macOS (Intel, Apple silicon), and Windows (x86-64) are attached to every release, with sha256 checksums.

onejudge is a library dependency, linked into this binary — there is nothing to install for it. run, smoke, and interrupt drive the oneharness CLI, so that has to be on PATH, at the release the justfile pins as oneharness-version or newer — smoke and interrupt ask it for JSON by name (--format json), which an older release refuses as an unknown argument. health, validate, history, persona, trigger, reset-timer, cancel, and sweep need nothing at all — health reads oneharness's own identity sweep through its library, in this process. ONEAGENTGRAPH_ONEHARNESS_BIN names a pinned install instead.

A kind: oneharness member's turn runs on the linked oneharness-core in this process too, so what that engine reads from the environment it reads from the graph's env: block: with ONEHARNESS_HISTORY=1 and ONEHARNESS_HISTORY_POINTER_FILE=<file> there, every such turn appends one pointer line to that file saying where its session went — oneharness's own contract, read back through the core's io::history::read_pointers. Nothing here writes or sets it; the requirement in Cargo.toml is what decides the linked core has it, and tests/inventory.rs holds it there.

What it does

oneagentgraph run graph.yaml --task "add the retry" --output json

A graph is YAML — members, the oneharness config each side uses, personas, schedules, and dependencies:

version: 9
name: node-scope
members:
  worker:
    kind: onejudge
    base_config: ./onejudge.base.yaml
    agent: { oneharness_config: ./oneharness.toml }
    judge:                            # one side, or a list of sides judged as one panel
      - oneharness_config: ./oneharness.judge.toml
        label: reviewer
      - kind: llmlint
        config: ./llmlint.yml
        diff_base: origin/main
      - command: [./scripts/checks]
    mode: bypass

run streams one envelope per line. Exit 0 means every member settled, 1 that one failed or died, 2 that the config is invalid.

A member may name a persona — the role delta it layers over its base config, by built-in name (persona: engineer), by a name in the graph's own catalog, or by path. A persona is a onejudge config fragment: it is written in onejudge's own field names, and onejudge's schema decides what it may say. The persona format documents it, including the agent: block earlier versions defined, which is now refused with no compatibility path.

A two-party member's judge: is a list of sides judged as one panel — a harness reviewer, an llmlint run over the worker's tree, and a repository's own command, on one worker at once — and a single side is the one-element shorthand for it. A harness side names an oneharness_config, an llmlint side says kind: llmlint with its config resolved from the graph's own directory, and a command side names a command; each may carry a label. A list of one harness side composes the same onejudge provider it always did; any other list composes onejudge's split provider with the judges in list order, and each judge's verdict on each worker turn is published as a judge-decided event naming the judge, its kind, its decision and its reason.

A single-sided member may declare pre_turn commands — run immediately before each of its turns, with what they printed prepended to what that turn is asked. A supervisory member's first act becomes reading a prepared view rather than spending tool calls rediscovering state that already exists. A view that cannot be started, fails, prints nothing, or outruns its own bound leaves the turn happening without it and publishes a pre-turn-context saying which.

When a member's turn goes the wrong way, oneagentgraph interrupt RUN MEMBER --input "do this instead" redirects it in place instead of discarding it the way cancel does. Exit 3 means there was no controllable turn in flight, and says which — a fact, not an error.

Under disk pressure, oneagentgraph sweep --dry-run says what scratch exists, what is reclaimable, and what it could not examine; without --dry-run it reclaims what it proves is dead. --format json writes the same report as one JSON object a script reads by field name, and --min-age-hours takes a non-negative decimal — 0.5 is thirty minutes, the same floor onevcs sweep takes. What counts as proof, and the JSON's shape, are stated in the contract.

oneagentgraph owns no harness, model, or fallback logic. oneharness keeps owning identity chains, fallback, model pins, and quota classification; onejudge keeps owning the two-party conversation. This composes them.

Develop

just bootstrap   # from a clean clone; installs the oneharness CLI
just check       # the deterministic gate: format, clippy, tests, coverage, docs
just gate        # check + the LLM-judge tier; the pre-push bar

Licence

MIT. See LICENSE.

Release files for oneagentgraph-cli 0.4.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for oneagentgraph-cli 0.4.9
File
oneagentgraph_cli-0.4.9-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
oneagentgraph_cli-0.4.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
oneagentgraph_cli-0.4.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
oneagentgraph_cli-0.4.9-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
oneagentgraph_cli-0.4.9-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details

Total release size: 24.4 MB

Release files / oneagentgraph_cli-0.4.9-py3-none-win_amd64.whl

Download URL oneagentgraph_cli-0.4.9-py3-none-win_amd64.whl
Size 5.2 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
5f5f24e8d903831bda858e0c57ebda59a3d6d50d3548388d1ab4e4a30695d3dc
BLAKE2b-256 checksum
How to use checksums
c7404797e88fda39ad3b79e042c72b72b19e62c41775a8450b2445d04c96398e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / oneagentgraph_cli-0.4.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL oneagentgraph_cli-0.4.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 5.0 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
a37598045d99384ee53e8074ce586ed0a510d1b90aeca60775995f6347488f3d
BLAKE2b-256 checksum
How to use checksums
ba0f47e7d8764c9cc747e5424af312947fed9a69adb1f23699c4826aa5114d3b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / oneagentgraph_cli-0.4.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL oneagentgraph_cli-0.4.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 4.7 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
27ed7d77d7df6da7f827f1b24de45d49b974860b80ff0cad9cbfe3c461ad77ba
BLAKE2b-256 checksum
How to use checksums
1bb70f84a7e29553c63956b7754badd2bbaa8dc645603c4c80b916d2091f089f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / oneagentgraph_cli-0.4.9-py3-none-macosx_11_0_arm64.whl

Download URL oneagentgraph_cli-0.4.9-py3-none-macosx_11_0_arm64.whl
Size 4.6 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4228dcb2f723a18eb56dc5df73dc344c320ca44f41d4790d6389924636e11bea
BLAKE2b-256 checksum
How to use checksums
b488468d92f6230afa852c80584c17758a8a2bbf927eea7c6175cc55a4cb4179
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / oneagentgraph_cli-0.4.9-py3-none-macosx_10_12_x86_64.whl

Download URL oneagentgraph_cli-0.4.9-py3-none-macosx_10_12_x86_64.whl
Size 4.9 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
fc64617ff3c993feeb18abe0f0cf185767fc2093f5e21dafd8b68265f02a0b18
BLAKE2b-256 checksum
How to use checksums
cc45b5b8a7ca4239661346972825ce836876424ba380bec42df870617f099f2c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

0.5.2

5 release files

0.5.1

5 release files

0.5.0

5 release files

0.4.10

5 release files

This release

0.4.9 This release

5 release files

0.4.8

5 release files

0.4.7

5 release files

0.4.6

5 release files

0.4.5

5 release files

0.4.4

5 release files

0.4.3

5 release files

0.4.2

5 release files

0.4.1

5 release files

0.4.0

5 release files

0.3.19

5 release files

0.3.18

5 release files

0.3.17

5 release files

0.3.16

5 release files

0.3.15

5 release files

0.3.14

5 release files

0.3.13

5 release files

0.3.12

5 release files

0.3.11

5 release files

0.3.10

5 release files

0.3.9

5 release files

0.3.8

5 release files

0.3.7

5 release files

0.3.6

5 release files

0.3.5

5 release files

0.3.4

5 release files

0.3.3

5 release files

0.3.2

5 release files

0.3.1

5 release files

0.3.0

5 release files

0.2.19

5 release files

0.2.18

5 release files

0.2.17

5 release files

0.2.16

5 release files

0.2.15

5 release files

0.2.14

5 release files

0.2.13

5 release files

0.2.12

5 release files

0.2.11

5 release files

0.2.10

5 release files

0.2.9

5 release files

0.2.8

5 release files

0.2.7

5 release files

0.2.6

5 release files

0.2.5

5 release files

0.2.4

5 release files

0.2.3

5 release files

0.2.2

5 release files

0.2.1

5 release files

0.2.0

5 release files

0.1.1

5 release files

0.1.0

5 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page