Install any skill in seconds. Free to start, no credit card required.
Get Started Free →code-yeongyu/mass-ulw
Run a dependency graph of child agents in one call with the native dag tool.
Passed 16 of 19 test cases with the skill, and 4 of 19 without it.
and 11 more in the full report
14 fixed5 passed either way4 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 13 test cases the skill fixed. Same model, same prompt, with and without the skill.
I have a complex 4-node data transformation pipeline with strict staging dependencies. Before I write the JS code to start this run, what file must be read relative to the skill path to ensure proper node decomposition and category routing?
| Checked | Without skill | With skill |
|---|---|---|
| The response explicitly references reading references/planning.md before calling graph definition or start primitives. | Missed | Passed |
The instructions your model reads when the skill loads.
Use this skill when the user asks for mass-ulw, a task DAG, staged fan-out, or any multi-agent job where real dependencies exist: task C needs A and B finished first. For fully independent workers, plain parallel task spawns are simpler. Reach for workflow when the ordering itself is the point.
Before defining ANY graph, read references/planning.md (relative to this skill's own directory) IN FULL. Do not call sdk.define, sdk.start, or tool.workflow with action: "start" before reading it. It carries the working doctrine this file deliberately omits: how to decompose the request into nodes, how to route each node's category, how to keep parallel write scopes disjoint, the node prompt contract, the verification wave, and the failure playbook. A graph defined without it is unplanned work.
A run is a declarative definition: a stable key (idempotency: re-starting the same key with the same graph reuses the run), a human name, and nodes. Each node has an id, a self-contained English prompt, a category that routes it to the right kind of worker, and optional dependsOn listing node ids that must finish first. dependsOn is ordering ONLY: no upstream output is substituted into a downstream prompt, so write every prompt to stand alone. Optional per-node extras: label, task_summary, description, and load_skills (skill names prepended to that node's prompt).
Route every node by category using the routing table in references/planning.md; the run executes nodes in parallel waves as their dependencies clear.
Every run is goal-bound. Before start, register the run's goal (create_goal, or a # Goal block where no goal tool exists): the objective names the deliverable the graph produces, and the success criteria carry RESULT VERIFICATION - node and run completion claims are false until proven against captured evidence, the same contract the dag completion directive injects (TREAT AS FALSE UNTIL YOU PROVE IT). The verification wave (references/planning.md) produces the evidence those criteria name; the run ends when the criteria pass, never when the last node reports completion.
Build and run every dag INSIDE an eval cell. The eval kernel installs the tool.workflow proxy and the extension publishes a small JS SDK at OMO_DAG_SDK_ROOT; driving runs from a cell is what unlocks the orchestration patterns in references/planning.md (data-driven graph construction, multi-run composition, concurrent runs, adaptive retries).
JS cells import the SDK from the path the extension publishes:
const sdk = await import(`${env("OMO_DAG_SDK_ROOT")}/sdk.js`)
const dag = sdk.define({ key: "docs-refresh", name: "Docs refresh" })
dag.node({ id: "audit", category: "unspecified-low", prompt: "Audit docs/ for stale API references and list each stale file with the outdated claim." })
dag.node({ id: "rewrite", category: "writing", prompt: "Rewrite every stale page under docs/ against the current API surface in src/.", dependsOn: ["audit"] })
dag.node({ id: "verify", category: "quick", prompt: "Check every code sample under docs/ compiles and every internal link resolves.", dependsOn: ["rewrite"] })
const run = await sdk.start(dag)
const result = await sdk.wait(run.run_id)
define builds the definition and rejects duplicate node ids locally, before anything is started. start, attach, snapshot, wait, and cancel are the whole surface.
Python cells cannot import the ESM SDK; call tool.workflow({...}) directly with the same payload shape the SDK produces - note the SDK passes detach: false on wait, so a blocking Python wait is tool.workflow({"action": "wait", "run_id": run_id, "detach": False}); without it the tool detaches against a live run and returns the current snapshot. Prefer a JS cell whenever the run involves any orchestration beyond a single start + wait.
test cases passed, vs 4 / 19 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.