dag-ulw
Installation
SKILL.md
Dag Ulw
This is a Hermes-native dag-ulw workflow skill.
Why This Exists
dag-ulw exists so a big job runs end to end without the person driving it: the parent plans a graph OMH can validate and draw, runs the ready nodes in parallel on Hermes' own children, verifies the goal with a separate node, and repairs before it reports.
First Steps
- Start at once; there is no plan approval. Write the goal in one line, and pass each separately checkable outcome the request names as
criteria(id and one line); a criterion names the state the person asked for (it works on staging), not that a check was run or its result reported; never ask the person to list them. - When the conversation holds a plan the user accepted (from
omh-plan,ulw-planoromh-refactor-plan), build the graph from it instead of re-planning: each task becomes a node with its id, depends_on and write scope, its done check goes into VERIFY and STOP WHEN, and its closing verification task becomes therole: verifynode; plan only what it leaves open. - Plan the graph and call
omh_dag action=definewith the complete rungoaland each node's id, label, category, prompt, depends_on, write_scope and role (buildby default;baseline,verify,review); fix every refusal and read the lint before going on. Neverdelegate_taskbeforedefinereturns its calls. The saved goal reaches every native task; local VERIFY does not replace goal acceptance. - Keep the plan todo as the run's layers in ONE tool:
todo_listwhentodo_listis in your tool list or tool_search finds it (OMH mirrors it), elseomh_todo; an accepted plan stays inomh_todo. One item per layer, named for what it delivers, never a list of its nodes (the panel draws those); advance it as each layer settles. - For each call
omh_dagreturns, run its route (omh_delegate_route, set or fallback as given), thendelegate_taskwith the tasks unchanged; never more calls than it returned. A call whose route names abackend(Hermes' model_map or profile_routes) runs no route tool: its tasks already carry what that backend takes. Then end the turn with one status line; never wait or poll. - On each completion read the node's handoff file and call
omh_dag action=settle(accepted, failed, or blocked; a provider error is failed with provider_error); a verify node with criteria is accepted only when everyCRITERIONline says met, failed when one is unmet, blocked when one could not be checked here. Dispatch what it returns in the same turn. - When the run reports done, check each node against its SCOPE and the goal criteria: extend the run when work is missing, otherwise report.