Skip to content

Differences from opencode

Lex edited this page Aug 15, 2026 · 1 revision

Differences from opencode

GraphAgent is a fork of opencode, not a replacement opinion about it. Everything upstream can do, this repository still does: multi-provider support, built-in LSP, the client/server split, TUI/desktop/web clients. The fork adds one big thing and several supporting ones.

The big one: the DAG workflow engine

Upstream opencode runs one agent loop, optionally with task subagents. GraphAgent adds the workflow engine on top:

upstream opencode GraphAgent
Parallel work task subagents, fire-and-forget Dependency graph with wave scheduling, concurrency permits, per-node budgets
Quality control Your prompts Review gates that compile into independent standards/intent reviews plus arbitration; REJECT is a real outcome with a disposal contract
Durability Session storage Event-sourced workflow state; crash recovery reconciles from durable evidence, never replays provider work
Rewriting mid-flight Kill and restart pausereplan (supersede/replace/cancel nodes) → resume; completed outputs survive; the view shows the current revision
Cost shaping One model per session Two tiers in dag.jsonc: judgment nodes on advanced, volume on standard
Observability Transcript TUI DAG inspector (waves, live status, per-node detail), sidebar summaries, HTTP API for everything
Reuse Custom commands Named workflow libraries at project/global/builtin scopes; /dag-flow retargets curated reference topologies

The engine is AGPL-licensed (see the README license table); the rest of the repository stays MIT, so if you never touch the DAG code, you are on plain upstream terms.

Supporting additions

  • Autonomous goal loop (/goal): a single-session complement to graphs — one durable goal worked across turns, judged externally, budgeted, resumable.
  • Hooks compatibility: the Claude Code hooks protocol (26 events × 5 execution types) on top of the native plugin system.
  • Execution-location ownership: in multi-worktree setups, workflow rows carry a directory stamp checked on every ownership decision — sibling worktrees of one project cannot act on each other's graphs. This area shipped three rounds of hardening (issues #238, #269, #270) with mutation-tested probes.
  • CJK/IME terminal fixes, per-workflow worktree isolation, and a standalone Go configuration assistant.

When to pick which

Pick upstream opencode if you want the mainstream project: the npm package, the community, updates tracking the original team.

Pick GraphAgent if your work looks like any of these:

  • Tasks with staged dependencies where parallel slices genuinely help (multi-module refactors, audit-then-fix trains, parallel review lanes).
  • Work that needs gates you can trust more than a prompt — review arbitration with fingerprint binding, red-first regression discipline.
  • Long-running jobs that must survive restarts without redoing paid provider work.
  • Situations where you want judgment on a strong model and volume on a cheap one, declared once in config.

Both can coexist: GraphAgent without the DAG features behaves as upstream opencode.

Upgrade posture

The fork tracks upstream periodically; upstream features land through merges, fork features land through the layered gate (feat/** → PR → dev typecheck gate → full suite on dev → four-gate PR to main incl. E2E on Linux and Windows → manual release dispatch). Releases carry curated notes; known limitations are listed, not hidden.

Clone this wiki locally