-
Notifications
You must be signed in to change notification settings - Fork 0
Why GraphAgent
The honest pitch, in one paragraph: when a task is one conversation, one agent loop is the right tool and you should keep using it. When a task has stages, parallelizable parts, and points where somebody should check the work before it spreads, a single loop makes you the scheduler, the reviewer, and the recovery mechanism — at 2 a.m. if it runs at night. GraphAgent moves those three jobs into the harness.
Throughput without chaos. Independent slices run as parallel child sessions under a concurrency semaphore; dependent steps wait. You declare the shape once; the engine does the waiting, waking, and sequencing.
Gates that can say no. A review node compiles into independent reviews plus arbitration. REJECT is a real outcome that must be disposed of in the same wake — extend, replan, or stop with reasons. The verification discipline is red-first: a regression test that cannot fail cannot protect anything, so probes are proven falsifiable by reverting the fix in a scratch workspace and watching them go red.
Recovery you don't babysit. State is event-sourced; on restart, finished sessions back-fill their outputs and ambiguous ones pause for a decision. Provider work is never replayed — you never pay twice for the same tokens because of a crash.
Cost shaping in config, not prompts. Judgment nodes (reviews, arbitration, anything required) run on the advanced tier; volume work fans out on standard. One file declares it; every workflow inherits it.
A record you can audit. Every state change is a durable event. The revision view shows the current graph — rewritten segments retire, live failures stay visible — while the durable history remains queryable underneath.
A real run from this repository's history: a user reported resumed sessions going unresponsive. One workflow handled it end to end — reproduce with red tests, audit every lexicographic id comparison in the codebase, repair, verify with a mutation proof, review. The review rejected the first round (one hardening commit lacked a falsifiable probe); the fix loop added it and passed. Total: a release shipped the same day, with evidence attached.
That is the shape of work this engine is for: multi-stage, verifiable, restartable, and too long to hold in one context window.
Not a replacement for conversation-scale work — plain opencode behavior is fully preserved, and ignoring the DAG features costs nothing. Not an auto-magic agent framework where graphs assemble themselves without your judgment — deep-mode admission asks before an expensive graph starts, because building the wrong thing at scale is the expensive failure.