-
Notifications
You must be signed in to change notification settings - Fork 0
FAQ
Two tiers in dag.jsonc: advanced for judgment nodes (reviews, arbitration, anything required), standard for volume. If you only configure one, it serves everything. Resolution per node is tier → worker agent model → parent session model; if nothing resolves, the workflow is not created and you are asked to configure — it never silently picks a default you did not choose.
Each node is a child session spending tokens like a normal conversation. Cost control is structural: the standard tier fans out on cheaper models, max_total_nodes caps the graph size, per-node timeout_ms bounds runaway work, and the review budget (max_node_replan_attempts) bounds retry loops. For expensive graphs, deep mode's admission pass exists precisely so you do not build the wrong thing at scale.
The node fails with a visible error on the graph; the workflow stays inspectable. Switch the tier in dag.jsonc to a fallback model, then replan the failed node (a replacement under a new id, or restart: true while it is still running). Nodes already completed keep their outputs — you pay only for what reruns.
Upstream capabilities are all preserved (multi-provider, LSP, client/server, TUI/desktop/web). The fork adds the DAG engine (AGPL-licensed, see the README's license table), the hooks compatibility layer, CJK/IME terminal fixes, worktree isolation per workflow, and the goal loop. The fork is not published to npm; install from the releases page or source.
Yes — as a plain opencode. Everything graph-related lives behind the workflow tool, the /dag-flow and /goal commands, and .opencode/ config files. Ignore them and you have upstream behavior.
Yes. State is event-sourced into SQLite; on restart, running nodes reconcile against their child sessions' durable state, finished sessions back-fill their outputs, and anything ambiguous pauses the workflow for you to decide. No provider work is ever replayed on recovery — a half-finished model call is not re-sent behind your back.
Because the failed segment was rewritten. Superseded nodes disappear from the view and do not count toward the terminal state; the status you see reflects the current graph revision. If a failure is live — quota exhausted, API error, timeout cap — it stays visible until it is fixed. To audit the rewrite history, an agent can query superseded nodes by id through the result store; the TUI deliberately exposes no entry to it.
A node is a full child session with the same tools as the main agent, scoped by its worker_type's agent config. Permissions behave the same as anywhere else in opencode, including hooks and ask-gating.
Commit specs to .opencode/workflows/ in the repo — everyone who clones gets them by name. Cross-project personal libraries go in the config dir's global scope. The curated global scope is maintained in the opencode-dag-config repository; /dag-template-update syncs it with preview and backup.