skip to content

deepwork

Multi-agent workflows on iii with the kanban board as the task list: one lead per ticket with its own sub-agents, parallel waves, independent verify and review, and bounded rounds. Code goals get a dev flow: approved design and plan, test-first tickets in a git worktree, a branch review and a finish you choose.

kitbyiiiverifiedlicense: Apache-2.0latest0.2.1
install
$iii trigger directory::download-kit kit=iii/deepwork@0.1.0
3 installs3 in 7d2 today30 days

exact versions are immutable; every profile and skill is stored by its sha-256, so updates show exactly what changed.

README.md

ultracode

Claude Code-style dynamic workflows on iii, with the kanban board as the task manager. Give Ultracode a goal: it breaks the goal into tickets, gives each ticket a lead that runs it through its phases with its own sub-agents, runs the leads in parallel in bounded waves, and loops in bounded rounds until the goal is done, nothing is left, progress stalls, rounds run out or the budget is spent.

A goal that changes code in a git repository gets the superpowers flow: you approve the design and the plan, every code ticket (ultracode-impl) is built test-first in a git worktree with one commit, an independent verifier and a code reviewer check every commit, the whole branch is reviewed, and you choose how it finishes. Reading and research tickets (ultracode-worker) in the same run are done and verified without a commit.

Profile Role Model
ultracode the orchestrator you talk to; the only writer of ticket fields yours (the session's)
ultracode-lead (hidden) runs one ticket through its phases and reports back pin a fast, cheap model
ultracode-worker (hidden) the work phase: research, reading, analysis set one, or inherit
ultracode-impl (hidden) the tests and code phases: failing test, least code, commit pin a strong model
ultracode-verifier (hidden) judge (one per model), critic and branch review; base of the check tiers none (nor on Default): judges pick per spawn
ultracode-qa (hidden) verify and code review in each check (the default verifier) pin a mid-tier model

No workflow worker, code runner or fp pipeline: just harness, state, kanban and ide (the shell and file functions the tiers preload).

Install

iii trigger directory::download-kit kit=iii/ultracode apply=true --timeout-ms 1200000

apply=true installs at once when the plan has no warnings, blocks or pending decisions (for example, a profile with the same id already exists). Otherwise the reply is a plan: review and apply it in the ADE (Directory → Kits), or run iii trigger directory::kits::apply plan_id= --timeout-ms 1200000. Applying adds or updates workers through Compose and can take minutes; if the command still times out, the apply keeps running: check Directory → Kits instead of re-running it.

Once it is applied, pin the models of the tiers. The kit ships them without model because it cannot know your providers. Edit agents/ultracode-lead.md, agents/ultracode-impl.md and agents/ultracode-qa.md (and ultracode-worker.md if you like) and add model: , e.g. model: anthropic::claude-opus-5-5. Use the provider::model form: it pins the provider and lets reasoning_effort reach it. An unpinned lead runs on the orchestrator's model, and it takes a turn per phase. A tier without its own model inherits one set on Default (agents/default.md, which the Directory editor writes), and that beats both the orchestrator's model and the judge models; with judges= the run refuses to start if ultracode-verifier resolves a model. Editing an installed kit file is fine; a kit update merges your edits.

Run it

From the console: pick Ultracode and type the goal, optionally followed by an args: line:

Add per-user rate limits to the login route.
args: max_rounds=2 concurrency=4 budget_usd=5
Arg Default Meaning
flow auto dev (the superpowers flow) when the goal changes code or files in a git repository, else plain; set dev or plain to force one
approve on the dev flow waits for you on the design, the plan and the finish; off runs straight through and keeps the branch
max_rounds 3 retry cycles over the queue
attempts 2 code (or work) attempts a lead makes per round; a rejected attempt goes back to the same code session with the reasons
concurrency 8 leads per wave (max 8). Every ticket whose Depends on tickets are done starts in parallel; a dependent ticket waits for a later wave (a Depends on: KAN-12 line on a card you add counts too). In the dev flow, tickets that share a file or test target never share a wave
verify on run each ticket's check step
verifier ultracode-qa tier for verify and review (ultracode-qa* or ultracode-verifier*)
judges – comma-separated model ids (at most 7 in the dev flow, 8 in the plain one): one ultracode-verifier per model in each check, majority wins
deadline_min 20 per-phase deadline: each phase sub-agent gets it from its own start. A lead may run 3 × attempts phases for a dev ticket, 2 × attempts with a check in the plain flow (or without one in the dev flow), attempts for work alone, each with two minutes of slack; its wave closes one minute after that
critic on one completeness critic when the queue runs dry; in the dev flow it is the branch review: full test suite, linter and a review of the whole diff
max_items 5 × K cap on tickets the run creates; K = leads per wave = min(concurrency, 8)
budget_usd – soft cap: checked with harness::metrics before each wave and at each round close; no new wave starts once it is reached. When a model has no catalog pricing or usage is missing, the cost is a lower bound (marked incomplete when the harness total is null; one generation without usage is left out silently), so the cap can be overshot
notify – a function id called with the final report (e.g. a Slack or email send)
project – an existing kanban project (id or name) to file the run under. Without it, Ultracode creates one project per run (ultracode: · ) (the repository rule set allows a create whose lead is ultracode, see Prerequisites), so the board's Project filter shows just that run; subtasks you add join it when their round starts
release – an existing kanban release (id or name), the same way. Agents can't create releases: make them in the console first

With hard caps: console runs have only the soft budget_usd. For a hard ceiling, start the run from the CLI (or any non-agent client):

iii trigger harness::send --json '{"message":"<goal + args>","model":"<provider::model>","options":{"agent":"ultracode","max_cost_usd":5,"max_total_tokens":2000000}}'

model is required because the profile sets none. Every model used in a capped run, every tier and judge included, needs catalog pricing. The dev flow's design, plan and finish questions appear in that session in the console; pass approve=off to run without them.

The dev flow

  1. Design. Ultracode reads the repository (git status, the tree) and asks you what the code can't settle, one question card at a time, with two or three approaches and its recommendation first.
  2. Plan. The design goes into the run ticket's description and each task becomes a subtask with a test-first card: Files:, Test first:, Implement:, Verify:, Commit:. A task is two to five minutes of work. You get one card: Start, Stop, or type your changes. A change rewrites the design on the run ticket first, then the affected subtasks (new ones are added, dropped ones are canceled with a comment), and the card comes back.
  3. Worktree. git worktree add .worktrees/ -b ultracode/ (the slug ends with part of the session id, so runs never share a branch); run Ultracode from the repository's top folder. .worktrees/ is excluded locally (.git/info/exclude), so your files stay untouched. The test suite runs once for a baseline.
  4. Per code ticket (ultracode-impl; a research ticket runs work then verify, without tests or a commit), its lead runs tests (write the failing test, see it fail for the right reason), code (the least change that passes it, then one commit ()), then verify (re-runs the Verify lines) and review (reads the commit, checks the test files are unchanged and nothing outside Files: moved) at the same time. A rejection goes back to the same code session with the reasons; a reason about the test reruns the tests phase. Tickets that touch the same file never run in the same wave: they share the worktree.
  5. Branch review. When the queue runs dry, one reviewer runs the full suite and the linter and reviews git diff .... Findings become tickets for the next round.
  6. Finish. A card: merge into your branch (then the worktree is removed), push and open a PR, keep the branch, or discard it. Ultracode does only what you pick; it never pushes, merges or deletes on its own.

Sub-agents never push, merge, rebase, reset, switch, stash or clean, and they work inside the worktree: their filesystem_root anchors every relative path there, and a stack whose filesystem boundary is workspace also refuses writes outside it. Loose ends a sub-agent notices but the goal doesn't need become Backlog subtasks labelled pending.

The board

  • The run ticket is titled ultracode: with the label uc:run. Every run item is one of its subtasks: its page lists them with a done/total progress bar, and each round adds a summary comment with the cost. Filter the board by the run ticket to see only the run.
  • The run's subtasks in To do, in board order, are the queue. In progress means its lead is running; the session tree shows each lead as · </code> with its phases (<code class="readme-inline-code"><KEY> tests</code>, <code class="readme-inline-code">code</code>, <code class="readme-inline-code">verify</code>, <code class="readme-inline-code">review</code>) under it.</li> <li><strong>Route a ticket:</strong> set its assignee to a work tier (<code class="readme-inline-code">ultracode-worker*</code> or <code class="readme-inline-code">ultracode-impl*</code>). Any other assignee (e.g. kanban's <code class="readme-inline-code">backend-engineer</code>) does not run that profile: the ticket runs as <code class="readme-inline-code">ultracode-impl</code> when its Deliverable changes code or files, else as <code class="readme-inline-code">ultracode-worker</code>, with a comment saying so. A new assignee takes effect on the next attempt that starts after the previous one stopped. Add your own tiers as <code class="readme-inline-code">agents/ultracode-impl-<name>.md</code> with <code class="readme-inline-code">extends: ultracode-impl</code> (or <code class="readme-inline-code">ultracode-worker</code>) and a <code class="readme-inline-code">model</code>.</li> <li><strong>Change the plan mid-run:</strong> tell Ultracode in the chat. It rewrites the design on the run ticket, edits the queued subtasks, adds new ones and cancels the rest, starting next round. Subtasks already In progress keep running; a follow-up subtask aligns each one after it is done.</li> <li><strong>Steer between rounds:</strong> add a subtask on the run ticket's page (it starts in the first column) and drag it to To do, drag To do cards to reorder, comment on a ticket to steer its retry, drag a Backlog card to To do to re-queue it (a <code class="readme-inline-code">stuck</code> card runs again only after its lead has stopped; until then it goes back to Backlog).</li> <li><strong>Don't</strong> drag In progress cards: the orchestrator's next write wins. Move a queued card to Backlog to skip it (it is skipped from its wave on). A deleted card, or one detached from the run ticket, leaves the run and is listed as <code class="readme-inline-code">removed</code> in the report. Deleting the run ticket only stops writes to it (round comments, report, final move) and new items; the existing items keep moving and the report goes only to the chat and to <code class="readme-inline-code">notify</code>.</li> <li>Outcomes: Done carries <code class="readme-inline-code">verified</code> or <code class="readme-inline-code">accepted</code>; Backlog carries <code class="readme-inline-code">blocked</code>, <code class="readme-inline-code">failed</code>, <code class="readme-inline-code">unverified</code>, <code class="readme-inline-code">unfinished</code>, <code class="readme-inline-code">stuck</code>, or <code class="readme-inline-code">pending</code> for a loose end. A ticket dropped from the plan (or every ticket, when you stop before Start) is <code class="readme-inline-code">canceled</code>: it goes to the board's canceled column (kanban's <code class="readme-inline-code">canceled_status</code>, which new boards have and which leaves canceled tickets out of every progress total; on an older board, add a Canceled column in the Kanban settings), else to a column whose id or name is Canceled, else to Backlog with the <code class="readme-inline-code">canceled</code> label, where it still counts in the run ticket's progress total. A ticket whose dependency was canceled or parked is <code class="readme-inline-code">blocked</code>. The orchestrator edits only the outcome labels, so your own labels stay.</li> </ul> <h2 id="prerequisites" class="scroll-mt-20">Prerequisites</h2> <ul> <li>kanban's column ids <code class="readme-inline-code">backlog</code>, <code class="readme-inline-code">todo</code>, <code class="readme-inline-code">in_progress</code> and <code class="readme-inline-code">done</code>, with <code class="readme-inline-code">done_status: done</code> (the default, the last column) so the run ticket's progress counts finished items.</li> <li>state with the kv adapter (the redis adapter refuses <code class="readme-inline-code">state::barrier</code>), <code class="readme-inline-code">store_method: file_based</code> (the default; <code class="readme-inline-code">in_memory</code> loses barrier progress and results on restart) and <code class="readme-inline-code">triggers_enabled: true</code> (the default).</li> <li>harness <code class="readme-inline-code">max_depth</code> of at least 3 (the default): orchestrator → lead → phase; and <code class="readme-inline-code">max_children</code> of at least <code class="readme-inline-code">concurrency</code> (the default 8 matches it): a wave spawns one lead per ticket in one turn, and spawns past the limit are refused.</li> <li><strong>Approval gate.</strong> Allow these to run without a prompt:<ul> <li><code class="readme-inline-code">state::barrier</code>, unattended: the harness calls it on every state write in a wave's or phase's scope.</li> <li>for the phase sub-agents: <code class="readme-inline-code">state::compare-and-set</code>, <code class="readme-inline-code">kanban::ticket::get</code>, <code class="readme-inline-code">kanban::comment::create</code>, <code class="readme-inline-code">shell::exec</code>, <code class="readme-inline-code">coder::read-file</code> (plus <code class="readme-inline-code">coder::create-file</code> and <code class="readme-inline-code">coder::update-file</code> for <code class="readme-inline-code">ultracode-impl</code>, and <code class="readme-inline-code">state::get</code> for verifiers), and whatever else the work needs. A call held for approval in a phase sub-agent parks its ticket as <code class="readme-inline-code">blocked</code> with the function to approve; a wave of leads held on approvals ends the run as <code class="readme-inline-code">blocked</code>.</li> <li>for leads: <code class="readme-inline-code">harness::spawn</code>, <code class="readme-inline-code">engine::register_trigger</code>, <code class="readme-inline-code">state::list</code>, <code class="readme-inline-code">state::compare-and-set</code>, <code class="readme-inline-code">harness::status</code>, <code class="readme-inline-code">harness::stop</code>, <code class="readme-inline-code">kanban::comment::create</code>.</li> <li>for the orchestrator: <code class="readme-inline-code">harness::spawn</code>, <code class="readme-inline-code">harness::metrics</code>, <code class="readme-inline-code">state::compare-and-set</code>, <code class="readme-inline-code">kanban::ticket::list</code>, <code class="readme-inline-code">kanban::project::create</code>, <code class="readme-inline-code">shell::exec</code>, <code class="readme-inline-code">harness::stop</code>, and <code class="readme-inline-code">directory::agents::get</code> when <code class="readme-inline-code">judges=</code> is used. Without a rule, each <code class="readme-inline-code">harness::stop</code> of a timed-out lead or phase waits for your approval. The repository rule set (<code class="readme-inline-code">iii-permissions.yaml</code>) denies it with <code class="readme-inline-code">'!harness::stop'</code>; to allow it, remove that line from your approval-gate rules and add <code class="readme-inline-code">- harness::stop</code> (an allow above a <code class="readme-inline-code">'!…'</code> line is not enough: the console turns every deny rule into a session-wide deny). If you keep the deny, timed-out leads are parked as <code class="readme-inline-code">stuck</code>. Project creation is allowed by the rule set for a create whose <code class="readme-inline-code">lead</code> is <code class="readme-inline-code">ultracode</code> (rule <code class="readme-inline-code">ultracode-run-project</code>, iii-hq/workers#1415); with older rules that still say <code class="readme-inline-code">'!kanban::project::create'</code>, replace that line with the same structured allow, or pass <code class="readme-inline-code">project=</code> with a project you made in the console. Refused, the run goes on without a project and says so on the run ticket.</li> </ul> </li> <li><strong>Trust.</strong> Any agent allowed <code class="readme-inline-code">kanban::ticket::create</code> or <code class="readme-inline-code">kanban::ticket::update</code> can add a subtask to the run ticket, which then runs with the orchestrator's permissions.</li> </ul> <h2 id="how-it-works" class="scroll-mt-20">How it works</h2> <ol> <li>Each round takes a snapshot of the run ticket's To do subtasks (<code class="readme-inline-code">kanban::ticket::list</code> with <code class="readme-inline-code">parent_id</code>) and runs it in waves of <code class="readme-inline-code">concurrency</code> leads.</li> <li>Per wave, the orchestrator arms one <code class="readme-inline-code">state</code> wake gated by <code class="readme-inline-code">state::barrier</code> with a deadline, moves the tickets to In progress and spawns one <code class="readme-inline-code">ultracode-lead</code> per ticket.</li> <li>A lead runs its ticket's phases the same way: per phase, one barrier wake with a deadline and one spawn per key; each phase sub-agent posts one comment and writes one document with set-if-absent <code class="readme-inline-code">state::compare-and-set</code>. The lead retries rejected attempts, then writes one result for the orchestrator.</li> <li>The wave's barrier wakes the orchestrator once when every lead has written, or the deadline does. It reads all results with one <code class="readme-inline-code">state::list</code>. A missing, malformed or rewritten result is null: the lead is stopped if still running (the stop cascades to its phases, but not to <code class="readme-inline-code">shell::exec_bg</code> jobs they started) and the ticket is retried next round in the same lead session while rounds remain, or parked as <code class="readme-inline-code">stuck</code> if it cannot be stopped.</li> <li>Verified or accepted tickets go to Done; blocked, unverified and stuck ones to Backlog; failed ones back to To do while rounds remain.</li> <li>The run stops on <code class="readme-inline-code">max_rounds</code>, no progress, nothing left (after one critic or branch review), the budget, blocked approvals or your stop. The report goes on the run ticket, into the chat and to <code class="readme-inline-code">notify</code>; in the dev flow it then asks how to finish the branch.</li> </ol> <p><strong>Why fan-in is on state, not on kanban events.</strong> A <code class="readme-inline-code">kanban:change</code> wake gated by the same barrier works mechanically, but it counts every change to a ticket (including the orchestrator's own moves) as an arrival, kanban delivers events fire-and-forget with no catch-up, and results kept in comments have no compare-and-set. A kanban outage would lose results instead of delaying them.</p> <p><strong>Not in 0.1:</strong> a run-level cost cap from the console, one worktree per ticket (tickets that share a file wait for a later wave instead).</p> </div></div></section></div><aside class="flex flex-col gap-y-4 @4xl:sticky @4xl:top-4 @4xl:self-start @4xl:max-h-[calc(100dvh-2rem)] @4xl:overflow-y-auto"><section class="border border-rule bg-bg scroll-mt-20"><div class="flex items-baseline justify-between gap-x-3 bg-panel px-3.5 py-2.5 border-b border-rule"><span class="font-mono text-[11px] font-medium uppercase tracking-[0.18em] text-ink-faint">details</span></div><div class="p-4 flex flex-col gap-y-2.5"><div class="flex items-baseline justify-between font-mono text-[13px] gap-x-3 min-w-0"><span class="text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]">version</span><span class="text-ink truncate text-right min-w-0 tabular-nums">v<!-- -->0.1.0</span></div><div class="flex items-baseline justify-between font-mono text-[13px] gap-x-3 min-w-0"><span class="text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]">published</span><span class="text-ink truncate text-right min-w-0 tabular-nums" title="2026-10-15T20:25:29.125Z">2026-10-15 · 21h ago</span></div><div class="flex items-baseline justify-between font-mono text-[13px] gap-x-3 min-w-0"><span class="text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]">license</span><span class="text-ink truncate text-right min-w-0">Apache-2.0</span></div><div class="flex items-baseline justify-between font-mono text-[13px] gap-x-3 min-w-0"><span class="text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]">kit id</span><span class="text-ink truncate text-right min-w-0"><code>iii/deepwork</code></span></div><div class="flex items-baseline justify-between font-mono text-[13px] gap-x-3 min-w-0"><span class="text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]">repo</span><a href="https://github.com/iii-hq/workers/tree/main/kits/deepwork" target="_blank" rel="noreferrer" class="inline-flex items-center gap-x-1 font-mono text-[13px] text-ink lowercase hover:text-accent transition-colors min-w-0 text-right justify-end"><span class="truncate">iii-hq/workers/tree/main/kits/deepwork</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link size-3 shrink-0" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></div></div></section><section class="border border-rule bg-bg scroll-mt-20"><div class="flex items-baseline justify-between gap-x-3 bg-panel px-3.5 py-2.5 border-b border-rule"><span class="font-mono text-[11px] font-medium uppercase tracking-[0.18em] text-ink-faint">author</span></div><div class="p-4 flex flex-col gap-y-3"><a class="group flex items-center gap-x-2 font-mono text-[13px] min-w-0" href="/kits/iii"><img src="https://iii.dev/docs/_mintlify/favicons/motiadev/AFkVbz_UcSL_5jsm/_generated/favicon/apple-touch-icon.png" alt="" class="size-5 object-cover"/><span class="text-ink group-hover:underline underline-offset-4 truncate">iii</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-check size-3.5 shrink-0 text-accent" aria-label="verified"><path d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z"></path><path d="m9 12 2 2 4-4"></path></svg></a></div></section></aside></div></div></div><!--$--><!--/$--></main><footer class="border-t border-rule bg-bg"><div class="flex items-center justify-between flex-wrap gap-x-6 gap-y-3 px-9 py-4.5"><div class="inline-flex items-center gap-x-4"><a aria-label="iii worker — registry home" class="inline-flex items-center gap-x-2 text-ink" href="/"><svg viewBox="0 0 1075.74 1075.69" aria-hidden="true" focusable="false" class="size-[14px]" fill="currentColor"><rect x="0" y="0.05" width="268.94" height="268.94"></rect><rect x="403.4" y="0.05" width="268.94" height="268.94"></rect><rect x="806.81" y="0.05" width="268.94" height="268.94"></rect><rect x="0" y="403.45" width="268.94" height="672.24"></rect><rect x="403.4" y="403.45" width="268.94" height="672.24"></rect><rect x="806.81" y="403.45" width="268.94" height="672.24"></rect></svg><span class="font-mono text-[13px] font-medium tracking-[-0.02em] lowercase">iii / worker</span></a><a href="https://github.com/iii-hq/iii" target="_blank" rel="noopener noreferrer" aria-label="iii-hq/iii on GitHub — 18,845 stars" class="inline-flex shrink-0 items-center gap-x-2 border border-rule px-2.5 py-1 font-mono text-[13px] text-ink-faint transition-colors hover:text-ink sm:hidden"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false" class="size-3.5 shrink-0" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z"></path></svg><span class="hidden sm:inline lowercase">stars</span><span class="tabular-nums text-ink" aria-hidden="true">18.8k</span></a></div><nav aria-label="footer" class="flex items-center flex-wrap gap-x-6 gap-y-2"><a href="https://iii.dev" target="_blank" rel="noreferrer" class="inline-flex items-center gap-x-1 font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors">iii.dev<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link size-3 shrink-0" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a><a href="https://iii.dev/docs" target="_blank" rel="noreferrer" class="inline-flex items-center gap-x-1 font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors">docs<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link size-3 shrink-0" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a><a class="font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors" href="/collections">collections</a><a class="font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors" href="/leaderboard">leaderboard</a><a class="font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors" href="/publish">publish</a><a class="font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors" href="/badge-preview">badge preview</a><a href="https://discord.gg/iiidev" target="_blank" rel="noreferrer" class="inline-flex items-center gap-x-1 font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors">discord<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link size-3 shrink-0" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a><a href="https://github.com/iii-hq/iii" target="_blank" rel="noreferrer" class="inline-flex items-center gap-x-1 font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors">github<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link size-3 shrink-0" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></nav></div></footer></div></div><script src="/_next/static/chunks/0b_t-9oq5.7ee.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n3:I[20685,[\"/_next/static/chunks/0wcm0wpln.-h..js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0c0r_-py6v_70.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"SiteHeader\"]\n5:I[90280,[\"/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0.vqct1a~k736.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"default\"]\n6:I[69616,[\"/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0.vqct1a~k736.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"default\"]\n7:I[46610,[\"/_next/static/chunks/0wcm0wpln.-h..js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0c0r_-py6v_70.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/14er09mbuxa.q.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"\"]\nf:I[50609,[\"/_next/static/chunks/0wcm0wpln.-h..js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0c0r_-py6v_70.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/02eqejg_b4k2y.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"default\"]\n12:I[41074,[\"/_next/static/chunks/0wcm0wpln.-h..js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0c0r_-py6v_70.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/14er09mbuxa.q.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"default\"]\n14:I[51557,[\"/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0.vqct1a~k736.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"OutletBoundary\"]\n15:\"$Sreact.suspense\"\n18:I[51557,[\"/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0.vqct1a~k736.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"ViewportBoundary\"]\n1a:I[51557,[\"/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0.vqct1a~k736.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"MetadataBoundary\"]\n:HL[\"/_next/static/chunks/05q2cs4d4qqrk.css?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"style\"]\n:HL[\"/_next/static/media/387ee14c0e0fe675-s.p.16njqniuj6huf.woff2?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:[\"$\",\"iframe\",null,{\"src\":\"https://www.googletagmanager.com/ns.html?id=GTM-N8DCTFB8\",\"height\":\"0\",\"width\":\"0\",\"style\":{\"display\":\"none\",\"visibility\":\"hidden\"},\"title\":\"Google Tag Manager\"}]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"kits\",\"iii\",\"deepwork?version=0.1.0\"],\"q\":\"?version=0.1.0\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"kits\",{\"children\":[[\"author\",\"iii\",\"d\",null],{\"children\":[[\"name\",\"deepwork\",\"d\",null],{\"children\":[\"__PAGE__?{\\\"version\\\":\\\"0.1.0\\\"}\",{}]}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/05q2cs4d4qqrk.css?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0wcm0wpln.-h..js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0c0r_-py6v_70.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"chivo_mono_90504305-module__244I6q__variable antialiased\",\"data-theme\":\"light\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"bg-bg text-ink font-sans min-h-full flex flex-col\",\"children\":[[[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n try {\\n var stored = localStorage.getItem('iii-theme');\\n if (stored === 'dark' || stored === 'light') {\\n document.documentElement.dataset.theme = stored;\\n } else {\\n document.documentElement.dataset.theme = 'light';\\n }\\n } catch (_) {\\n document.documentElement.dataset.theme = 'light';\\n }\\n\"}}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\\n j=d.createElement(s),dl=l!='dataLayer'?'\u0026l='+l:'';j.async=true;j.src=\\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\\n })(window,document,'script','dataLayer','GTM-N8DCTFB8');\\n\"}}]],[\"$\",\"noscript\",null,{\"children\":\"$2\"}],[\"$\",\"div\",null,{\"className\":\"mx-auto w-full max-w-[1200px] @container border-x border-rule min-h-screen bg-bg flex flex-col\",\"children\":[[\"$\",\"a\",null,{\"href\":\"#main-content\",\"className\":\"sr-only focus:not-sr-only focus:absolute focus:left-4 focus:top-4 focus:z-50 focus:bg-ink focus:text-bg focus:px-3 focus:py-2 focus:font-mono focus:text-[13px] lowercase\",\"children\":\"skip to content\"}],[\"$\",\"$L3\",null,{\"githubStars\":\"$L4\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 overflow-x-clip flex flex-col\",\"children\":[[\"$\",\"main\",null,{\"id\":\"main-content\",\"className\":\"flex-1\",\"tabIndex\":-1,\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"page-transition\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex items-end justify-between flex-wrap gap-x-6 gap-y-4 px-9 py-12\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"font-mono text-[11px] uppercase tracking-[0.06em] text-ink-faint mb-3\",\"children\":[\"$\",\"span\",null,{\"className\":\"font-mono text-accent\",\"children\":[\"$$\",[\"$\",\"span\",null,{\"className\":\"text-ink ml-2\",\"children\":\"error\"}]]}]}],[\"$\",\"div\",null,{\"className\":\"flex items-baseline flex-wrap gap-x-3 gap-y-1\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"font-mono text-[28px] font-medium tracking-[-0.01em] text-ink lowercase\",\"children\":[\"$\",\"span\",null,{\"className\":\"inline-flex items-baseline gap-x-2 tabular-nums\",\"children\":[\"404\",[\"$\",\"span\",null,{\"aria-hidden\":true,\"className\":\"blink inline-block w-[6px] h-[13px] bg-ink align-middle translate-y-[1px]\"}]]}]}],\"$undefined\",null]}],[\"$\",\"p\",null,{\"className\":\"mt-3 font-mono text-[14px] leading-[1.7] text-ink-faint max-w-[60ch] lowercase\",\"children\":\"that worker is not in the registry. it may have been renamed or never published.\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-x-3\",\"children\":[\"$\",\"$L7\",null,{\"href\":\"/\",\"className\":\"inline-flex items-center justify-center gap-x-2 whitespace-nowrap font-mono lowercase rounded-none transition-[background-color,color,border-color,transform] duration-150 ease-out focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-accent disabled:pointer-events-none disabled:opacity-40 select-none active:scale-[0.97] motion-reduce:active:scale-100 bg-ink text-bg border border-ink hover:bg-bg hover:text-ink h-9 px-5 text-[13px]\",\"children\":\"back to registry\"}]}]]}]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],\"$L8\"]}]]}]]}]}]]}],{\"children\":[\"$L9\",{\"children\":[\"$La\",{\"children\":[\"$Lb\",{\"children\":[\"$Lc\",{},null,false,null]},null,false,\"$@d\"]},null,false,\"$@d\"]},null,false,\"$@d\"]},null,false,null],\"$Le\",false]],\"m\":\"$undefined\",\"G\":[\"$f\",[\"$L10\"]],\"S\":false,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"8:[\"$\",\"footer\",null,{\"className\":\"border-t border-rule bg-bg\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex items-center justify-between flex-wrap gap-x-6 gap-y-3 px-9 py-4.5\",\"children\":[[\"$\",\"div\",null,{\"className\":\"inline-flex items-center gap-x-4\",\"children\":[[\"$\",\"$L7\",null,{\"href\":\"/\",\"aria-label\":\"iii worker — registry home\",\"className\":\"inline-flex items-center gap-x-2 text-ink\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 1075.74 1075.69\",\"aria-hidden\":\"true\",\"focusable\":\"false\",\"className\":\"size-[14px]\",\"fill\":\"currentColor\",\"children\":[[\"$\",\"rect\",null,{\"x\":\"0\",\"y\":\"0.05\",\"width\":\"268.94\",\"height\":\"268.94\"}],[\"$\",\"rect\",null,{\"x\":\"403.4\",\"y\":\"0.05\",\"width\":\"268.94\",\"height\":\"268.94\"}],[\"$\",\"rect\",null,{\"x\":\"806.81\",\"y\":\"0.05\",\"width\":\"268.94\",\"height\":\"268.94\"}],[\"$\",\"rect\",null,{\"x\":\"0\",\"y\":\"403.45\",\"width\":\"268.94\",\"height\":\"672.24\"}],[\"$\",\"rect\",null,{\"x\":\"403.4\",\"y\":\"403.45\",\"width\":\"268.94\",\"height\":\"672.24\"}],[\"$\",\"rect\",null,{\"x\":\"806.81\",\"y\":\"403.45\",\"width\":\"268.94\",\"height\":\"672.24\"}]]}],[\"$\",\"span\",null,{\"className\":\"font-mono text-[13px] font-medium tracking-[-0.02em] lowercase\",\"children\":\"iii / worker\"}]]}],\"$L11\"]}],[\"$\",\"nav\",null,{\"aria-label\":\"footer\",\"className\":\"flex items-center flex-wrap gap-x-6 gap-y-2\",\"children\":[[\"$\",\"a\",\"https://iii.dev\",{\"href\":\"https://iii.dev\",\"target\":\"_blank\",\"rel\":\"noreferrer\",\"className\":\"inline-flex items-center gap-x-1 font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors\",\"children\":[\"iii.dev\",[\"$\",\"$L12\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M15 3h6v6\",\"key\":\"1q9fwt\"}],[\"path\",{\"d\":\"M10 14 21 3\",\"key\":\"gplh6r\"}],[\"path\",{\"d\":\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\",\"key\":\"a6xqqp\"}]],\"className\":\"lucide-external-link size-3 shrink-0\",\"aria-hidden\":true}]]}],[\"$\",\"a\",\"https://iii.dev/docs\",{\"href\":\"https://iii.dev/docs\",\"target\":\"_blank\",\"rel\":\"noreferrer\",\"className\":\"inline-flex items-center gap-x-1 font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors\",\"children\":[\"docs\",[\"$\",\"$L12\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$8:props:children:props:children:1:props:children:0:props:children:1:props:iconNode\",\"className\":\"lucide-external-link size-3 shrink-0\",\"aria-hidden\":true}]]}],[\"$\",\"$L7\",\"/collections\",{\"href\":\"/collections\",\"className\":\"font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors\",\"children\":\"collections\"}],[\"$\",\"$L7\",\"/leaderboard\",{\"href\":\"/leaderboard\",\"className\":\"font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors\",\"children\":\"leaderboard\"}],[\"$\",\"$L7\",\"/publish\",{\"href\":\"/publish\",\"className\":\"font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors\",\"children\":\"publish\"}],[\"$\",\"$L7\",\"/badge-preview\",{\"href\":\"/badge-preview\",\"className\":\"font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors\",\"children\":\"badge preview\"}],[\"$\",\"a\",\"https://discord.gg/iiidev\",{\"href\":\"https://discord.gg/iiidev\",\"target\":\"_blank\",\"rel\":\"noreferrer\",\"className\":\"inline-flex items-center gap-x-1 font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors\",\"children\":[\"discord\",[\"$\",\"$L12\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$8:props:children:props:children:1:props:children:0:props:children:1:props:iconNode\",\"className\":\"lucide-external-link size-3 shrink-0\",\"aria-hidden\":true}]]}],[\"$\",\"a\",\"https://github.com/iii-hq/iii\",{\"href\":\"https://github.com/iii-hq/iii\",\"target\":\"_blank\",\"rel\":\"noreferrer\",\"className\":\"inline-flex items-center gap-x-1 font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors\",\"children\":[\"github\",[\"$\",\"$L12\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$8:props:children:props:children:1:props:children:0:props:children:1:props:iconNode\",\"className\":\"lucide-external-link size-3 shrink-0\",\"aria-hidden\":true}]]}]]}]]}]}]\n"])</script><script>self.__next_f.push([1,"9:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\na:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\nb:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\nc:[\"$\",\"$1\",\"c\",{\"children\":[\"$L13\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/14er09mbuxa.q.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L14\",null,{\"children\":[\"$\",\"$15\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@16\"}]}]]}]\n17:[]\nd:\"$W17\"\ne:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L18\",null,{\"children\":\"$L19\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L1a\",null,{\"children\":[\"$\",\"$15\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1b\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\n10:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/05q2cs4d4qqrk.css?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n19:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"4:[\"$\",\"a\",null,{\"href\":\"https://github.com/iii-hq/iii\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"aria-label\":\"iii-hq/iii on GitHub — 18,845 stars\",\"className\":\"shrink-0 items-center gap-x-2 border border-rule px-2.5 py-1 font-mono text-[13px] text-ink-faint transition-colors hover:text-ink hidden sm:inline-flex\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 16 16\",\"aria-hidden\":\"true\",\"focusable\":\"false\",\"className\":\"size-3.5 shrink-0\",\"fill\":\"currentColor\",\"children\":[\"$\",\"path\",null,{\"d\":\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z\"}]}],[\"$\",\"span\",null,{\"className\":\"hidden sm:inline lowercase\",\"children\":\"stars\"}],[\"$\",\"span\",null,{\"className\":\"tabular-nums text-ink\",\"aria-hidden\":true,\"children\":\"18.8k\"}]]}]\n11:[\"$\",\"a\",null,{\"href\":\"https://github.com/iii-hq/iii\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"aria-label\":\"iii-hq/iii on GitHub — 18,845 stars\",\"className\":\"inline-flex shrink-0 items-center gap-x-2 border border-rule px-2.5 py-1 font-mono text-[13px] text-ink-faint transition-colors hover:text-ink sm:hidden\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 16 16\",\"aria-hidden\":\"true\",\"focusable\":\"false\",\"className\":\"size-3.5 shrink-0\",\"fill\":\"currentColor\",\"children\":[\"$\",\"path\",null,{\"d\":\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z\"}]}],[\"$\",\"span\",null,{\"className\":\"hidden sm:inline lowercase\",\"children\":\"stars\"}],[\"$\",\"span\",null,{\"className\":\"tabular-nums text-ink\",\"aria-hidden\":true,\"children\":\"18.8k\"}]]}]\n"])</script><script>self.__next_f.push([1,"1c:I[18418,[\"/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0.vqct1a~k736.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"IconMark\"]\n16:null\n"])</script><script>self.__next_f.push([1,"1b:[[\"$\",\"title\",\"0\",{\"children\":\"iii/deepwork - iii worker\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Multi-agent workflows on iii with the kanban board as the task list: one lead per ticket with its own sub-agents, parallel waves, independent verify and review, and bounded rounds. Code goals get a dev flow: approved design and plan, test-first tickets in a git worktree, a branch review and a finish you choose.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"link\",\"3\",{\"rel\":\"canonical\",\"href\":\"https://workers.iii.dev/kits/iii/deepwork\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:title\",\"content\":\"iii/deepwork - iii kit\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:description\",\"content\":\"Multi-agent workflows on iii with the kanban board as the task list: one lead per ticket with its own sub-agents, parallel waves, independent verify and review, and bounded rounds. Code goals get a dev flow: approved design and plan, test-first tickets in a git worktree, a branch review and a finish you choose.\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:url\",\"content\":\"https://workers.iii.dev/kits/iii/deepwork\"}],[\"$\",\"meta\",\"7\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"8\",{\"name\":\"twitter:title\",\"content\":\"iii/deepwork - iii kit\"}],[\"$\",\"meta\",\"9\",{\"name\":\"twitter:description\",\"content\":\"Multi-agent workflows on iii with the kanban board as the task list: one lead per ticket with its own sub-agents, parallel waves, independent verify and review, and bounded rounds. Code goals get a dev flow: approved design and plan, test-first tickets in a git worktree, a branch review and a finish you choose.\"}],[\"$\",\"link\",\"10\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0n6vou73am7b3.ico\",\"sizes\":\"48x48\",\"type\":\"image/x-icon\"}],[\"$\",\"$L1c\",\"11\",{}]]\n"])</script><script>self.__next_f.push([1,"1d:I[85143,[\"/_next/static/chunks/0wcm0wpln.-h..js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0c0r_-py6v_70.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/14er09mbuxa.q.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"KitVersionPicker\"]\n:HL[\"https://iii.dev/docs/_mintlify/favicons/motiadev/AFkVbz_UcSL_5jsm/_generated/favicon/apple-touch-icon.png\",\"image\"]\n"])</script><script>self.__next_f.push([1,"13:[\"$\",\"div\",null,{\"className\":\"page-transition\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"SoftwareSourceCode\\\",\\\"name\\\":\\\"iii/deepwork\\\",\\\"description\\\":\\\"Multi-agent workflows on iii with the kanban board as the task list: one lead per ticket with its own sub-agents, parallel waves, independent verify and review, and bounded rounds. Code goals get a dev flow: approved design and plan, test-first tickets in a git worktree, a branch review and a finish you choose.\\\",\\\"version\\\":\\\"0.1.0\\\",\\\"url\\\":\\\"https://workers.iii.dev/kits/iii/deepwork\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"codeRepository\\\":\\\"https://github.com/iii-hq/workers/tree/main/kits/deepwork\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"iii\\\"}}\"}}],[\"$\",\"div\",null,{\"className\":\"flex items-end justify-between flex-wrap gap-x-6 gap-y-4 px-9 py-12\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"font-mono text-[11px] uppercase tracking-[0.06em] text-ink-faint mb-3\",\"children\":[\"$\",\"span\",null,{\"className\":\"font-mono text-accent\",\"children\":[\"$$\",[\"$\",\"span\",null,{\"className\":\"text-ink ml-2\",\"children\":[[\"$\",\"$L7\",null,{\"href\":\"/kits\",\"className\":\"hover:text-accent transition-colors\",\"children\":\"registry / kits\"}],\" \",\"/\",\" \",[\"$\",\"$L7\",null,{\"href\":\"/kits/iii\",\"className\":\"hover:text-accent transition-colors\",\"children\":\"iii\"}]]}]]}]}],[\"$\",\"div\",null,{\"className\":\"flex items-baseline flex-wrap gap-x-3 gap-y-1\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"font-mono text-[28px] font-medium tracking-[-0.01em] text-ink lowercase\",\"children\":\"deepwork\"}],[\"$\",\"$L1d\",null,{\"version\":\"0.1.0\",\"tags\":[{\"key\":\"latest\",\"label\":\"latest\",\"detail\":\"v0.2.1\",\"href\":\"/kits/iii/deepwork\",\"current\":false}],\"versions\":[{\"key\":\"0.2.1\",\"label\":\"v0.2.1\",\"detail\":\"latest\",\"href\":\"/kits/iii/deepwork?version=0.2.1\",\"current\":false},{\"key\":\"0.2.0\",\"label\":\"v0.2.0\",\"detail\":\"6h ago\",\"href\":\"/kits/iii/deepwork?version=0.2.0\",\"current\":false},{\"key\":\"0.1.1\",\"label\":\"v0.1.1\",\"detail\":\"21h ago\",\"href\":\"/kits/iii/deepwork?version=0.1.1\",\"current\":false},{\"key\":\"0.1.0\",\"label\":\"v0.1.0\",\"detail\":\"21h ago\",\"href\":\"/kits/iii/deepwork?version=0.1.0\",\"current\":true}]}],null]}],[\"$\",\"p\",null,{\"className\":\"mt-3 font-mono text-[14px] leading-[1.7] text-ink-faint max-w-[60ch] lowercase\",\"children\":\"Multi-agent workflows on iii with the kanban board as the task list: one lead per ticket with its own sub-agents, parallel waves, independent verify and review, and bounded rounds. Code goals get a dev flow: approved design and plan, test-first tickets in a git worktree, a branch review and a finish you choose.\"}]]}],null]}],[\"$\",\"div\",null,{\"className\":\"px-9 pb-8 flex flex-col gap-y-6\",\"children\":[null,null,null,[\"$\",\"div\",null,{\"className\":\"flex flex-col gap-y-5 border border-rule bg-bg p-5 @2xl:p-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center gap-x-4 gap-y-2 font-mono text-[12px]\",\"children\":[[\"$\",\"span\",null,{\"data-type-mark\":\"kit\",\"className\":\"inline-flex items-center gap-x-1.5 shrink-0\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 16 16\",\"aria-hidden\":\"true\",\"focusable\":\"false\",\"className\":\"size-4 shrink-0 text-type-kit\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":1.25,\"strokeLinejoin\":\"miter\",\"strokeLinecap\":\"square\",\"children\":[null,[\"$\",\"path\",null,{\"d\":\"M2 5h2.9a1.9 1.9 0 1 1 3.2 0H11v2.9a1.9 1.9 0 1 1 0 3.2V14H8.1a1.6 1.6 0 0 0-3.2 0H2Z\"}],null]}],[\"$\",\"span\",null,{\"className\":\"font-mono text-[11px] font-medium uppercase leading-none tracking-[0.06em] text-ink-faint\",\"children\":\"kit\"}]]}],[\"$\",\"$L7\",null,{\"href\":\"/kits/iii\",\"className\":\"group flex items-center gap-x-2 text-[13px]\",\"children\":[[\"$\",\"img\",null,{\"src\":\"https://iii.dev/docs/_mintlify/favicons/motiadev/AFkVbz_UcSL_5jsm/_generated/favicon/apple-touch-icon.png\",\"alt\":\"\",\"className\":\"size-5 object-cover\"}],[\"$\",\"span\",null,{\"className\":\"text-ink-faint\",\"children\":\"by\"}],[\"$\",\"span\",null,{\"className\":\"text-ink group-hover:underline underline-offset-4\",\"children\":\"iii\"}],\"$L1e\"]}],\"$L1f\",[\"$L20\"]]}],\"$L21\",\"$L22\",\"$L23\",\"$L24\"]}]]}],\"$L25\"]}]\n"])</script><script>self.__next_f.push([1,"26:I[15957,[\"/_next/static/chunks/0wcm0wpln.-h..js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0c0r_-py6v_70.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/14er09mbuxa.q.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"InstallCommand\"]\n1e:[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-x-1 text-ink-faint\",\"children\":[[\"$\",\"$L12\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z\",\"key\":\"3c2336\"}],[\"path\",{\"d\":\"m9 12 2 2 4-4\",\"key\":\"dzmm74\"}]],\"className\":\"lucide-badge-check size-3.5 text-accent\",\"aria-hidden\":true}],[\"$\",\"span\",null,{\"className\":\"text-[11px] uppercase tracking-[0.06em]\",\"children\":\"verified\"}]]}]\n1f:[\"$\",\"span\",null,{\"className\":\"border border-rule px-2 py-1 text-ink\",\"children\":[\"license: \",\"Apache-2.0\"]}]\n20:[\"$\",\"$L7\",\"latest\",{\"href\":\"/kits/iii/deepwork\",\"scroll\":false,\"aria-current\":\"$undefined\",\"className\":\"inline-flex items-baseline gap-x-1.5 border border-rule px-2 py-1 hover:bg-panel transition-colors aria-[current=true]:border-ink\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[11px] uppercase tracking-[0.06em] text-ink-faint\",\"children\":\"latest\"}],[\"$\",\"span\",null,{\"className\":\"tabular-nums text-ink\",\"children\":\"0.2.1\"}]]}]\n21:[\"$\",\"$L26\",null,{\"workerName\":\"iii/deepwork\",\"version\":\"0.1.0\",\"kind\":\"kit\",\"command\":\"iii trigger directory::download-kit kit=iii/deepwork@0.1.0\",\"wrap\":true}]\n"])</script><script>self.__next_f.push([1,"22:[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center gap-x-6 gap-y-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex flex-wrap items-center gap-x-3 gap-y-1 font-mono text-[12px] text-ink-ghost tabular-nums\",\"children\":[[\"$\",\"span\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink\",\"children\":\"3\"}],\" installs\"]}],[\"$\",\"span\",null,{\"aria-hidden\":true,\"className\":\"text-rule\",\"children\":\"/\"}],[\"$\",\"span\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink\",\"children\":\"3\"}],\" in 7d\"]}],[\"$\",\"span\",null,{\"aria-hidden\":true,\"className\":\"text-rule\",\"children\":\"/\"}],[\"$\",\"span\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink\",\"children\":\"2\"}],\" today\"]}]]}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-x-2 text-accent\",\"children\":[[\"$\",\"svg\",null,{\"role\":\"img\",\"aria-label\":\"daily installs over the last 30 days\",\"aria-hidden\":\"$undefined\",\"viewBox\":\"0 0 160 18\",\"width\":160,\"height\":18,\"className\":\"overflow-visible\",\"children\":[[\"$\",\"line\",null,{\"x1\":0,\"y1\":17.5,\"x2\":160,\"y2\":17.5,\"stroke\":\"var(--color-rule)\",\"strokeWidth\":1}],[\"$\",\"polyline\",null,{\"points\":\"0.00,18.00 5.52,18.00 11.03,18.00 16.55,18.00 22.07,18.00 27.59,18.00 33.10,18.00 38.62,18.00 44.14,18.00 49.66,18.00 55.17,18.00 60.69,18.00 66.21,18.00 71.72,18.00 77.24,18.00 82.76,18.00 88.28,18.00 93.79,18.00 99.31,18.00 104.83,18.00 110.34,18.00 115.86,18.00 121.38,18.00 126.90,18.00 132.41,18.00 137.93,18.00 143.45,18.00 148.97,18.00 154.48,9.00 160.00,0.00\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"vectorEffect\":\"non-scaling-stroke\"}]]}],[\"$\",\"span\",null,{\"className\":\"font-mono text-[11px] uppercase tracking-[0.06em] text-ink-ghost\",\"children\":[30,\" days\"]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"23:[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center justify-between gap-x-6 gap-y-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-x-4 gap-y-2 font-mono text-[12px]\",\"children\":[[\"$\",\"$L7\",null,{\"href\":\"/kits/iii/deepwork?version=0.1.0\u0026tab=profiles\",\"scroll\":false,\"className\":\"inline-flex items-baseline gap-x-1.5 text-ink-faint hover:text-ink transition-colors\",\"children\":[[\"$\",\"span\",null,{\"className\":\"tabular-nums text-ink\",\"children\":\"6\"}],\" \",[\"$\",\"span\",null,{\"className\":\"uppercase tracking-[0.06em] text-[11px]\",\"children\":\"profiles\"}]]}],[\"$\",\"$L7\",null,{\"href\":\"/kits/iii/deepwork?version=0.1.0\u0026tab=skills\",\"scroll\":false,\"className\":\"inline-flex items-baseline gap-x-1.5 text-ink-faint hover:text-ink transition-colors\",\"children\":[[\"$\",\"span\",null,{\"className\":\"tabular-nums text-ink\",\"children\":\"0\"}],\" \",[\"$\",\"span\",null,{\"className\":\"uppercase tracking-[0.06em] text-[11px]\",\"children\":\"skills\"}]]}],[\"$\",\"$L7\",null,{\"href\":\"/kits/iii/deepwork?version=0.1.0\u0026tab=workers\",\"scroll\":false,\"className\":\"inline-flex items-baseline gap-x-1.5 text-ink-faint hover:text-ink transition-colors\",\"children\":[[\"$\",\"span\",null,{\"className\":\"tabular-nums text-ink\",\"children\":\"5\"}],\" \",[\"$\",\"span\",null,{\"className\":\"uppercase tracking-[0.06em] text-[11px]\",\"children\":\"workers\"}]]}],[\"$\",\"$L7\",null,{\"href\":\"/kits/iii/deepwork?version=0.1.0\u0026tab=versions\",\"scroll\":false,\"className\":\"inline-flex items-baseline gap-x-1.5 text-ink-faint hover:text-ink transition-colors\",\"children\":[[\"$\",\"span\",null,{\"className\":\"tabular-nums text-ink\",\"children\":\"4\"}],\" \",[\"$\",\"span\",null,{\"className\":\"uppercase tracking-[0.06em] text-[11px]\",\"children\":\"versions\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-2 font-mono text-[12px] lowercase\",\"children\":[[\"$\",\"$L7\",\"orchestration\",{\"href\":\"/kits?tag=orchestration\",\"className\":\"border border-rule-2 px-2 py-1 text-ink-faint hover:text-ink hover:border-rule transition-colors\",\"children\":\"orchestration\"}],[\"$\",\"$L7\",\"sub-agents\",{\"href\":\"/kits?tag=sub-agents\",\"className\":\"border border-rule-2 px-2 py-1 text-ink-faint hover:text-ink hover:border-rule transition-colors\",\"children\":\"sub-agents\"}],[\"$\",\"$L7\",\"kanban\",{\"href\":\"/kits?tag=kanban\",\"className\":\"border border-rule-2 px-2 py-1 text-ink-faint hover:text-ink hover:border-rule transition-colors\",\"children\":\"kanban\"}],[\"$\",\"$L7\",\"verification\",{\"href\":\"/kits?tag=verification\",\"className\":\"border border-rule-2 px-2 py-1 text-ink-faint hover:text-ink hover:border-rule transition-colors\",\"children\":\"verification\"}],[\"$\",\"$L7\",\"workflows\",{\"href\":\"/kits?tag=workflows\",\"className\":\"border border-rule-2 px-2 py-1 text-ink-faint hover:text-ink hover:border-rule transition-colors\",\"children\":\"workflows\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"24:[\"$\",\"div\",null,{\"className\":\"flex flex-col @2xl:flex-row @2xl:items-center gap-3 border-t border-rule-2 pt-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-x-2 min-w-0 font-mono text-[13px]\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[11px] uppercase tracking-[0.06em] text-ink-faint shrink-0\",\"children\":\"repo\"}],[\"$\",\"a\",null,{\"href\":\"https://github.com/iii-hq/workers/tree/main/kits/deepwork\",\"target\":\"_blank\",\"rel\":\"noreferrer\",\"className\":\"inline-flex items-center gap-x-1 font-mono text-[13px] text-ink lowercase hover:text-accent transition-colors min-w-0\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"iii-hq/workers/tree/main/kits/deepwork\"}],[\"$\",\"$L12\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$8:props:children:props:children:1:props:children:0:props:children:1:props:iconNode\",\"className\":\"lucide-external-link size-3 shrink-0\",\"aria-hidden\":true}]]}]]}],[\"$\",\"p\",null,{\"className\":\"font-mono text-[12px] leading-[1.5] text-ink-faint @2xl:ml-auto @2xl:max-w-[46ch] @2xl:text-right\",\"children\":\"exact versions are immutable; every profile and skill is stored by its sha-256, so updates show exactly what changed.\"}]]}]\n"])</script><script>self.__next_f.push([1,"25:[\"$\",\"div\",null,{\"className\":\"px-9 pb-12\",\"children\":[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 @4xl:grid-cols-[minmax(0,1fr)_280px] gap-x-8 gap-y-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex flex-col gap-y-6 @container/main\",\"children\":[[\"$\",\"nav\",null,{\"aria-label\":\"sections\",\"className\":\"overflow-x-auto\",\"children\":[\"$\",\"div\",null,{\"role\":\"tablist\",\"className\":\"inline-flex border border-rule p-[2px] min-w-max\",\"children\":[[\"$\",\"$L7\",\"readme\",{\"href\":\"/kits/iii/deepwork?version=0.1.0\",\"scroll\":false,\"role\":\"tab\",\"aria-selected\":true,\"aria-current\":\"page\",\"className\":\"inline-flex items-center gap-x-1.5 min-h-11 font-mono text-[13px] px-3 py-1 lowercase transition-colors bg-ink text-bg\",\"children\":[\"readme\",null]}],[\"$\",\"$L7\",\"profiles\",{\"href\":\"/kits/iii/deepwork?version=0.1.0\u0026tab=profiles\",\"scroll\":false,\"role\":\"tab\",\"aria-selected\":false,\"aria-current\":\"$undefined\",\"className\":\"inline-flex items-center gap-x-1.5 min-h-11 font-mono text-[13px] px-3 py-1 lowercase transition-colors bg-transparent text-ink-faint hover:text-ink\",\"children\":[\"profiles\",[\" \",[\"$\",\"span\",null,{\"className\":\"tabular-nums opacity-70\",\"children\":6}]]]}],[\"$\",\"$L7\",\"skills\",{\"href\":\"/kits/iii/deepwork?version=0.1.0\u0026tab=skills\",\"scroll\":false,\"role\":\"tab\",\"aria-selected\":false,\"aria-current\":\"$undefined\",\"className\":\"inline-flex items-center gap-x-1.5 min-h-11 font-mono text-[13px] px-3 py-1 lowercase transition-colors bg-transparent text-ink-faint hover:text-ink\",\"children\":[\"skills\",[\" \",[\"$\",\"span\",null,{\"className\":\"tabular-nums opacity-70\",\"children\":0}]]]}],[\"$\",\"$L7\",\"workers\",{\"href\":\"/kits/iii/deepwork?version=0.1.0\u0026tab=workers\",\"scroll\":false,\"role\":\"tab\",\"aria-selected\":false,\"aria-current\":\"$undefined\",\"className\":\"inline-flex items-center gap-x-1.5 min-h-11 font-mono text-[13px] px-3 py-1 lowercase transition-colors bg-transparent text-ink-faint hover:text-ink\",\"children\":[\"workers\",[\" \",[\"$\",\"span\",null,{\"className\":\"tabular-nums opacity-70\",\"children\":5}]]]}],[\"$\",\"$L7\",\"versions\",{\"href\":\"/kits/iii/deepwork?version=0.1.0\u0026tab=versions\",\"scroll\":false,\"role\":\"tab\",\"aria-selected\":false,\"aria-current\":\"$undefined\",\"className\":\"inline-flex items-center gap-x-1.5 min-h-11 font-mono text-[13px] px-3 py-1 lowercase transition-colors bg-transparent text-ink-faint hover:text-ink\",\"children\":[\"versions\",[\" \",[\"$\",\"span\",null,{\"className\":\"tabular-nums opacity-70\",\"children\":4}]]]}],[\"$\",\"$L7\",\"changes\",{\"href\":\"/kits/iii/deepwork?version=0.1.0\u0026tab=changes\",\"scroll\":false,\"role\":\"tab\",\"aria-selected\":false,\"aria-current\":\"$undefined\",\"className\":\"inline-flex items-center gap-x-1.5 min-h-11 font-mono text-[13px] px-3 py-1 lowercase transition-colors bg-transparent text-ink-faint hover:text-ink\",\"children\":[\"changes\",null]}]]}]}],[\"$\",\"section\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center justify-between mb-3\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"font-mono text-[12px] font-medium uppercase tracking-[0.18em] text-ink-faint\",\"children\":\"readme\"}],[\"$\",\"a\",null,{\"href\":\"https://api.workers.iii.dev/k/iii/deepwork/readme?version=0.1.0\",\"target\":\"_blank\",\"rel\":\"noreferrer\",\"className\":\"inline-flex items-center gap-x-1.5 font-mono text-[11px] uppercase tracking-[0.06em] text-ink-faint hover:text-accent transition-colors\",\"children\":[[\"$\",\"span\",null,{\"children\":\"open as markdown\"}],[\"$\",\"$L12\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$8:props:children:props:children:1:props:children:0:props:children:1:props:iconNode\",\"className\":\"lucide-external-link w-3 h-3\",\"aria-hidden\":true}]]}]]}],\"$L27\"]}],null,null,null,null,null]}],[\"$\",\"aside\",null,{\"className\":\"flex flex-col gap-y-4 @4xl:sticky @4xl:top-4 @4xl:self-start @4xl:max-h-[calc(100dvh-2rem)] @4xl:overflow-y-auto\",\"children\":[[\"$\",\"section\",null,{\"id\":\"$undefined\",\"className\":\"border border-rule bg-bg scroll-mt-20\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between gap-x-3 bg-panel px-3.5 py-2.5 border-b border-rule\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-mono text-[11px] font-medium uppercase tracking-[0.18em] text-ink-faint\",\"children\":\"details\"}],\"$undefined\"]}],[\"$\",\"div\",null,{\"className\":\"p-4 flex flex-col gap-y-2.5\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between font-mono text-[13px] gap-x-3 min-w-0\",\"children\":[\"$L28\",\"$L29\"]}],\"$L2a\",\"$L2b\",\"$L2c\",\"$L2d\"]}]]}],null,null,\"$L2e\"]}]]}]}]\n"])</script><script>self.__next_f.push([1,"28:[\"$\",\"span\",null,{\"className\":\"text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]\",\"children\":\"version\"}]\n29:[\"$\",\"span\",null,{\"className\":\"text-ink truncate text-right min-w-0 tabular-nums\",\"title\":\"$undefined\",\"children\":[\"v\",\"0.1.0\"]}]\n2a:[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between font-mono text-[13px] gap-x-3 min-w-0\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]\",\"children\":\"published\"}],[\"$\",\"span\",null,{\"className\":\"text-ink truncate text-right min-w-0 tabular-nums\",\"title\":\"2026-10-15T20:25:29.125Z\",\"children\":\"2026-10-15 · 21h ago\"}]]}]\n2b:[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between font-mono text-[13px] gap-x-3 min-w-0\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]\",\"children\":\"license\"}],[\"$\",\"span\",null,{\"className\":\"text-ink truncate text-right min-w-0\",\"title\":\"$undefined\",\"children\":\"Apache-2.0\"}]]}]\n2c:[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between font-mono text-[13px] gap-x-3 min-w-0\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]\",\"children\":\"kit id\"}],[\"$\",\"span\",null,{\"className\":\"text-ink truncate text-right min-w-0\",\"title\":\"$undefined\",\"children\":[\"$\",\"code\",null,{\"children\":\"iii/deepwork\"}]}]]}]\n2d:[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between font-mono text-[13px] gap-x-3 min-w-0\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]\",\"children\":\"repo\"}],[\"$\",\"a\",null,{\"href\":\"https://github.com/iii-hq/workers/tree/main/kits/deepwork\",\"target\":\"_blank\",\"rel\":\"noreferrer\",\"className\":\"inline-flex items-center gap-x-1 font-mono text-[13px] text-ink lowercase hover:text-accent transition-colors min-w-0 text-right justify-end\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"iii-hq/workers/tree/main/kits/deepwork\"}],[\"$\",\"$L12\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$8:props:children:props:children:1:props:children:0:props:children:1:props:iconNode\",\"className\":\"lucide-external-link size-3 shrink-0\",\"aria-hidden\":true}]]}]]}]\n2e:[\"$\",\"section\",null,{\"id\":\"$undefined\",\"className\":\"border border-rule bg-bg scroll-mt-20\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between gap-x-3 bg-panel px-3.5 py-2.5 border-b border-rule\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-mono text-[11px] font-medium uppercase tracking-[0.18em] text-ink-faint\",\"children\":\"author\"}],\"$undefined\"]}],[\"$\",\"div\",null,{\"className\":\"p-4 flex flex-col gap-y-3\",\"children\":[[\"$\",\"$L7\",null,{\"href\":\"/kits/iii\",\"className\":\"group flex items-center gap-x-2 font-mono text-[13px] min-w-0\",\"children\":[[\"$\",\"img\",null,{\"src\":\"https://iii.dev/docs/_mintlify/favicons/motiadev/AFkVbz_UcSL_5jsm/_generated/favicon/apple-touch-icon.png\",\"alt\":\"\",\"className\":\"size-5 object-cover\"}],[\"$\",\"span\",null,{\"className\":\"text-ink group-hover:underline underline-offset-4 truncate\",\"children\":\"iii\"}],[\"$\",\"$L12\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1e:props:children:0:props:iconNode\",\"className\":\"lucide-badge-check size-3.5 shrink-0 text-accent\",\"aria-label\":\"verified\"}],null]}],null,null]}]]}]\n2f:T62ca,"])</script><script>self.__next_f.push([1,"\u003ch1 id=\"ultracode\" class=\"scroll-mt-20\"\u003eultracode\u003c/h1\u003e\n\u003cp\u003eClaude Code-style dynamic workflows on iii, with the kanban board as the task manager. Give \u003cstrong\u003eUltracode\u003c/strong\u003e a goal: it breaks the goal into tickets, gives each ticket a lead that runs it through its phases with its own sub-agents, runs the leads in parallel in bounded waves, and loops in bounded rounds until the goal is done, nothing is left, progress stalls, rounds run out or the budget is spent.\u003c/p\u003e\n\u003cp\u003eA goal that changes code in a git repository gets the \u003ca href=\"https://github.com/obra/superpowers\"\u003esuperpowers\u003c/a\u003e flow: you approve the design and the plan, every code ticket (\u003ccode class=\"readme-inline-code\"\u003eultracode-impl\u003c/code\u003e) is built test-first in a git worktree with one commit, an independent verifier and a code reviewer check every commit, the whole branch is reviewed, and you choose how it finishes. Reading and research tickets (\u003ccode class=\"readme-inline-code\"\u003eultracode-worker\u003c/code\u003e) in the same run are done and verified without a commit.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eProfile\u003c/th\u003e\n\u003cth\u003eRole\u003c/th\u003e\n\u003cth\u003eModel\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eultracode\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003ethe orchestrator you talk to; the only writer of ticket fields\u003c/td\u003e\n\u003ctd\u003eyours (the session\u0026#39;s)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eultracode-lead\u003c/strong\u003e (hidden)\u003c/td\u003e\n\u003ctd\u003eruns one ticket through its phases and reports back\u003c/td\u003e\n\u003ctd\u003epin a fast, cheap model\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eultracode-worker\u003c/strong\u003e (hidden)\u003c/td\u003e\n\u003ctd\u003ethe work phase: research, reading, analysis\u003c/td\u003e\n\u003ctd\u003eset one, or inherit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eultracode-impl\u003c/strong\u003e (hidden)\u003c/td\u003e\n\u003ctd\u003ethe tests and code phases: failing test, least code, commit\u003c/td\u003e\n\u003ctd\u003epin a strong model\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eultracode-verifier\u003c/strong\u003e (hidden)\u003c/td\u003e\n\u003ctd\u003ejudge (one per model), critic and branch review; base of the check tiers\u003c/td\u003e\n\u003ctd\u003enone (nor on Default): judges pick per spawn\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eultracode-qa\u003c/strong\u003e (hidden)\u003c/td\u003e\n\u003ctd\u003everify and code review in each check (the default \u003ccode class=\"readme-inline-code\"\u003everifier\u003c/code\u003e)\u003c/td\u003e\n\u003ctd\u003epin a mid-tier model\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003cp\u003eNo \u003ccode class=\"readme-inline-code\"\u003eworkflow\u003c/code\u003e worker, code runner or fp pipeline: just \u003ccode class=\"readme-inline-code\"\u003eharness\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003estate\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ekanban\u003c/code\u003e and \u003ccode class=\"readme-inline-code\"\u003eide\u003c/code\u003e (the shell and file functions the tiers preload).\u003c/p\u003e\n\u003ch2 id=\"install\" class=\"scroll-mt-20\"\u003eInstall\u003c/h2\u003e\n\u003cpre\u003e\u003ccode\u003eiii trigger directory::download-kit kit=iii/ultracode apply=true --timeout-ms 1200000\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ccode class=\"readme-inline-code\"\u003eapply=true\u003c/code\u003e installs at once when the plan has no warnings, blocks or pending decisions (for example, a profile with the same id already exists). Otherwise the reply is a plan: review and apply it in the ADE (Directory → Kits), or run \u003ccode class=\"readme-inline-code\"\u003eiii trigger directory::kits::apply plan_id=\u003cplan_id from the reply\u003e --timeout-ms 1200000\u003c/code\u003e. Applying adds or updates workers through Compose and can take minutes; if the command still times out, the apply keeps running: check Directory → Kits instead of re-running it.\u003c/p\u003e\n\u003cp\u003eOnce it is applied, pin the models of the tiers. The kit ships them without \u003ccode class=\"readme-inline-code\"\u003emodel\u003c/code\u003e because it cannot know your providers. Edit \u003ccode class=\"readme-inline-code\"\u003eagents/ultracode-lead.md\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eagents/ultracode-impl.md\u003c/code\u003e and \u003ccode class=\"readme-inline-code\"\u003eagents/ultracode-qa.md\u003c/code\u003e (and \u003ccode class=\"readme-inline-code\"\u003eultracode-worker.md\u003c/code\u003e if you like) and add \u003ccode class=\"readme-inline-code\"\u003emodel: \u003cprovider::model\u003e\u003c/code\u003e, e.g. \u003ccode class=\"readme-inline-code\"\u003emodel: anthropic::claude-opus-5-5\u003c/code\u003e. Use the \u003ccode class=\"readme-inline-code\"\u003eprovider::model\u003c/code\u003e form: it pins the provider and lets \u003ccode class=\"readme-inline-code\"\u003ereasoning_effort\u003c/code\u003e reach it. An unpinned lead runs on the orchestrator\u0026#39;s model, and it takes a turn per phase. A tier without its own \u003ccode class=\"readme-inline-code\"\u003emodel\u003c/code\u003e inherits one set on Default (\u003ccode class=\"readme-inline-code\"\u003eagents/default.md\u003c/code\u003e, which the Directory editor writes), and that beats both the orchestrator\u0026#39;s model and the judge models; with \u003ccode class=\"readme-inline-code\"\u003ejudges=\u003c/code\u003e the run refuses to start if \u003ccode class=\"readme-inline-code\"\u003eultracode-verifier\u003c/code\u003e resolves a model. Editing an installed kit file is fine; a kit update merges your edits.\u003c/p\u003e\n\u003ch2 id=\"run-it\" class=\"scroll-mt-20\"\u003eRun it\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eFrom the console:\u003c/strong\u003e pick \u003cstrong\u003eUltracode\u003c/strong\u003e and type the goal, optionally followed by an \u003ccode class=\"readme-inline-code\"\u003eargs:\u003c/code\u003e line:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eAdd per-user rate limits to the login route.\nargs: max_rounds=2 concurrency=4 budget_usd=5\u003c/code\u003e\u003c/pre\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eArg\u003c/th\u003e\n\u003cth\u003eDefault\u003c/th\u003e\n\u003cth\u003eMeaning\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eflow\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eauto\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edev\u003c/code\u003e (the superpowers flow) when the goal changes code or files in a git repository, else \u003ccode class=\"readme-inline-code\"\u003eplain\u003c/code\u003e; set \u003ccode class=\"readme-inline-code\"\u003edev\u003c/code\u003e or \u003ccode class=\"readme-inline-code\"\u003eplain\u003c/code\u003e to force one\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eapprove\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eon\u003c/td\u003e\n\u003ctd\u003ethe dev flow waits for you on the design, the plan and the finish; \u003ccode class=\"readme-inline-code\"\u003eoff\u003c/code\u003e runs straight through and keeps the branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003emax_rounds\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e3\u003c/td\u003e\n\u003ctd\u003eretry cycles over the queue\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eattempts\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e2\u003c/td\u003e\n\u003ctd\u003ecode (or work) attempts a lead makes per round; a rejected attempt goes back to the same code session with the reasons\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003econcurrency\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e8\u003c/td\u003e\n\u003ctd\u003eleads per wave (max 8). Every ticket whose \u003ccode class=\"readme-inline-code\"\u003eDepends on\u003c/code\u003e tickets are done starts in parallel; a dependent ticket waits for a later wave (a \u003ccode class=\"readme-inline-code\"\u003eDepends on: KAN-12\u003c/code\u003e line on a card you add counts too). In the dev flow, tickets that share a file or test target never share a wave\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003everify\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eon\u003c/td\u003e\n\u003ctd\u003erun each ticket\u0026#39;s check step\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003everifier\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eultracode-qa\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003etier for verify and review (\u003ccode class=\"readme-inline-code\"\u003eultracode-qa*\u003c/code\u003e or \u003ccode class=\"readme-inline-code\"\u003eultracode-verifier*\u003c/code\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003ejudges\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e–\u003c/td\u003e\n\u003ctd\u003ecomma-separated model ids (at most 7 in the dev flow, 8 in the plain one): one \u003ccode class=\"readme-inline-code\"\u003eultracode-verifier\u003c/code\u003e per model in each check, majority wins\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edeadline_min\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e20\u003c/td\u003e\n\u003ctd\u003eper-phase deadline: each phase sub-agent gets it from its own start. A lead may run 3 × attempts phases for a dev ticket, 2 × attempts with a check in the plain flow (or without one in the dev flow), attempts for work alone, each with two minutes of slack; its wave closes one minute after that\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003ecritic\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eon\u003c/td\u003e\n\u003ctd\u003eone completeness critic when the queue runs dry; in the dev flow it is the branch review: full test suite, linter and a review of the whole diff\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003emax_items\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e5 × K\u003c/td\u003e\n\u003ctd\u003ecap on tickets the run creates; K = leads per wave = min(concurrency, 8)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003ebudget_usd\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e–\u003c/td\u003e\n\u003ctd\u003esoft cap: checked with \u003ccode class=\"readme-inline-code\"\u003eharness::metrics\u003c/code\u003e before each wave and at each round close; no new wave starts once it is reached. When a model has no catalog pricing or usage is missing, the cost is a lower bound (marked incomplete when the harness total is null; one generation without usage is left out silently), so the cap can be overshot\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003enotify\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e–\u003c/td\u003e\n\u003ctd\u003ea function id called with the final report (e.g. a Slack or email send)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eproject\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e–\u003c/td\u003e\n\u003ctd\u003ean existing kanban project (id or name) to file the run under. Without it, Ultracode creates one project per run (\u003ccode class=\"readme-inline-code\"\u003eultracode: \u003cgoal\u003e · \u003cid\u003e\u003c/code\u003e) (the repository rule set allows a create whose \u003ccode class=\"readme-inline-code\"\u003elead\u003c/code\u003e is \u003ccode class=\"readme-inline-code\"\u003eultracode\u003c/code\u003e, see Prerequisites), so the board\u0026#39;s Project filter shows just that run; subtasks you add join it when their round starts\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003erelease\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e–\u003c/td\u003e\n\u003ctd\u003ean existing kanban release (id or name), the same way. Agents can\u0026#39;t create releases: make them in the console first\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eWith hard caps:\u003c/strong\u003e console runs have only the soft \u003ccode class=\"readme-inline-code\"\u003ebudget_usd\u003c/code\u003e. For a hard ceiling, start the run from the CLI (or any non-agent client):\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eiii trigger harness::send --json '{\u0026quot;message\u0026quot;:\u0026quot;\u0026lt;goal + args\u0026gt;\u0026quot;,\u0026quot;model\u0026quot;:\u0026quot;\u0026lt;provider::model\u0026gt;\u0026quot;,\u0026quot;options\u0026quot;:{\u0026quot;agent\u0026quot;:\u0026quot;ultracode\u0026quot;,\u0026quot;max_cost_usd\u0026quot;:5,\u0026quot;max_total_tokens\u0026quot;:2000000}}'\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ccode class=\"readme-inline-code\"\u003emodel\u003c/code\u003e is required because the profile sets none. Every model used in a capped run, every tier and judge included, needs catalog pricing. The dev flow\u0026#39;s design, plan and finish questions appear in that session in the console; pass \u003ccode class=\"readme-inline-code\"\u003eapprove=off\u003c/code\u003e to run without them.\u003c/p\u003e\n\u003ch2 id=\"the-dev-flow\" class=\"scroll-mt-20\"\u003eThe dev flow\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eDesign.\u003c/strong\u003e Ultracode reads the repository (\u003ccode class=\"readme-inline-code\"\u003egit status\u003c/code\u003e, the tree) and asks you what the code can\u0026#39;t settle, one question card at a time, with two or three approaches and its recommendation first.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePlan.\u003c/strong\u003e The design goes into the run ticket\u0026#39;s description and each task becomes a subtask with a test-first card: \u003ccode class=\"readme-inline-code\"\u003eFiles:\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eTest first:\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eImplement:\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eVerify:\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eCommit:\u003c/code\u003e. A task is two to five minutes of work. You get one card: Start, Stop, or type your changes. A change rewrites the design on the run ticket first, then the affected subtasks (new ones are added, dropped ones are \u003ccode class=\"readme-inline-code\"\u003ecanceled\u003c/code\u003e with a comment), and the card comes back.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWorktree.\u003c/strong\u003e \u003ccode class=\"readme-inline-code\"\u003egit worktree add .worktrees/\u003cslug\u003e -b ultracode/\u003cslug\u003e \u003cyour branch\u003e\u003c/code\u003e (the slug ends with part of the session id, so runs never share a branch); run Ultracode from the repository\u0026#39;s top folder. \u003ccode class=\"readme-inline-code\"\u003e.worktrees/\u003c/code\u003e is excluded locally (\u003ccode class=\"readme-inline-code\"\u003e.git/info/exclude\u003c/code\u003e), so your files stay untouched. The test suite runs once for a baseline.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePer code ticket\u003c/strong\u003e (\u003ccode class=\"readme-inline-code\"\u003eultracode-impl\u003c/code\u003e; a research ticket runs \u003ccode class=\"readme-inline-code\"\u003ework\u003c/code\u003e then \u003ccode class=\"readme-inline-code\"\u003everify\u003c/code\u003e, without tests or a commit), its lead runs \u003ccode class=\"readme-inline-code\"\u003etests\u003c/code\u003e (write the failing test, see it fail for the right reason), \u003ccode class=\"readme-inline-code\"\u003ecode\u003c/code\u003e (the least change that passes it, then one commit \u003ccode class=\"readme-inline-code\"\u003e\u003cCommit:\u003e (\u003cKEY\u003e)\u003c/code\u003e), then \u003ccode class=\"readme-inline-code\"\u003everify\u003c/code\u003e (re-runs the Verify lines) and \u003ccode class=\"readme-inline-code\"\u003ereview\u003c/code\u003e (reads the commit, checks the test files are unchanged and nothing outside \u003ccode class=\"readme-inline-code\"\u003eFiles:\u003c/code\u003e moved) at the same time. A rejection goes back to the same code session with the reasons; a reason about the test reruns the tests phase. Tickets that touch the same file never run in the same wave: they share the worktree.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBranch review.\u003c/strong\u003e When the queue runs dry, one reviewer runs the full suite and the linter and reviews \u003ccode class=\"readme-inline-code\"\u003egit diff \u003cbase\u003e...\u003cbranch\u003e\u003c/code\u003e. Findings become tickets for the next round.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFinish.\u003c/strong\u003e A card: merge into your branch (then the worktree is removed), push and open a PR, keep the branch, or discard it. Ultracode does only what you pick; it never pushes, merges or deletes on its own.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eSub-agents never push, merge, rebase, reset, switch, stash or clean, and they work inside the worktree: their \u003ccode class=\"readme-inline-code\"\u003efilesystem_root\u003c/code\u003e anchors every relative path there, and a stack whose filesystem boundary is \u003ccode class=\"readme-inline-code\"\u003eworkspace\u003c/code\u003e also refuses writes outside it. Loose ends a sub-agent notices but the goal doesn\u0026#39;t need become Backlog subtasks labelled \u003ccode class=\"readme-inline-code\"\u003epending\u003c/code\u003e.\u003c/p\u003e\n\u003ch2 id=\"the-board\" class=\"scroll-mt-20\"\u003eThe board\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThe run ticket is titled \u003ccode class=\"readme-inline-code\"\u003eultracode: \u003cgoal\u003e\u003c/code\u003e with the label \u003ccode class=\"readme-inline-code\"\u003euc:run\u003c/code\u003e. Every run item is one of its subtasks: its page lists them with a done/total progress bar, and each round adds a summary comment with the cost. Filter the board by the run ticket to see only the run.\u003c/li\u003e\n\u003cli\u003eThe run\u0026#39;s subtasks in To do, in board order, are the queue. In progress means its lead is running; the session tree shows each lead as \u003ccode class=\"readme-inline-code\"\u003e\u003cKEY\u003e · \u003ctitle\u003e\u003c/code\u003e with its phases (\u003ccode class=\"readme-inline-code\"\u003e\u003cKEY\u003e tests\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ecode\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003everify\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ereview\u003c/code\u003e) under it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRoute a ticket:\u003c/strong\u003e set its assignee to a work tier (\u003ccode class=\"readme-inline-code\"\u003eultracode-worker*\u003c/code\u003e or \u003ccode class=\"readme-inline-code\"\u003eultracode-impl*\u003c/code\u003e). Any other assignee (e.g. kanban\u0026#39;s \u003ccode class=\"readme-inline-code\"\u003ebackend-engineer\u003c/code\u003e) does not run that profile: the ticket runs as \u003ccode class=\"readme-inline-code\"\u003eultracode-impl\u003c/code\u003e when its Deliverable changes code or files, else as \u003ccode class=\"readme-inline-code\"\u003eultracode-worker\u003c/code\u003e, with a comment saying so. A new assignee takes effect on the next attempt that starts after the previous one stopped. Add your own tiers as \u003ccode class=\"readme-inline-code\"\u003eagents/ultracode-impl-\u003cname\u003e.md\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003eextends: ultracode-impl\u003c/code\u003e (or \u003ccode class=\"readme-inline-code\"\u003eultracode-worker\u003c/code\u003e) and a \u003ccode class=\"readme-inline-code\"\u003emodel\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eChange the plan mid-run:\u003c/strong\u003e tell Ultracode in the chat. It rewrites the design on the run ticket, edits the queued subtasks, adds new ones and cancels the rest, starting next round. Subtasks already In progress keep running; a follow-up subtask aligns each one after it is done.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSteer between rounds:\u003c/strong\u003e add a subtask on the run ticket\u0026#39;s page (it starts in the first column) and drag it to To do, drag To do cards to reorder, comment on a ticket to steer its retry, drag a Backlog card to To do to re-queue it (a \u003ccode class=\"readme-inline-code\"\u003estuck\u003c/code\u003e card runs again only after its lead has stopped; until then it goes back to Backlog).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDon\u0026#39;t\u003c/strong\u003e drag In progress cards: the orchestrator\u0026#39;s next write wins. Move a queued card to Backlog to skip it (it is skipped from its wave on). A deleted card, or one detached from the run ticket, leaves the run and is listed as \u003ccode class=\"readme-inline-code\"\u003eremoved\u003c/code\u003e in the report. Deleting the run ticket only stops writes to it (round comments, report, final move) and new items; the existing items keep moving and the report goes only to the chat and to \u003ccode class=\"readme-inline-code\"\u003enotify\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOutcomes: Done carries \u003ccode class=\"readme-inline-code\"\u003everified\u003c/code\u003e or \u003ccode class=\"readme-inline-code\"\u003eaccepted\u003c/code\u003e; Backlog carries \u003ccode class=\"readme-inline-code\"\u003eblocked\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003efailed\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eunverified\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eunfinished\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003estuck\u003c/code\u003e, or \u003ccode class=\"readme-inline-code\"\u003epending\u003c/code\u003e for a loose end. A ticket dropped from the plan (or every ticket, when you stop before Start) is \u003ccode class=\"readme-inline-code\"\u003ecanceled\u003c/code\u003e: it goes to the board\u0026#39;s canceled column (kanban\u0026#39;s \u003ccode class=\"readme-inline-code\"\u003ecanceled_status\u003c/code\u003e, which new boards have and which leaves canceled tickets out of every progress total; on an older board, add a Canceled column in the Kanban settings), else to a column whose id or name is Canceled, else to Backlog with the \u003ccode class=\"readme-inline-code\"\u003ecanceled\u003c/code\u003e label, where it still counts in the run ticket\u0026#39;s progress total. A ticket whose dependency was canceled or parked is \u003ccode class=\"readme-inline-code\"\u003eblocked\u003c/code\u003e. The orchestrator edits only the outcome labels, so your own labels stay.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"prerequisites\" class=\"scroll-mt-20\"\u003ePrerequisites\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ekanban\u0026#39;s column ids \u003ccode class=\"readme-inline-code\"\u003ebacklog\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003etodo\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ein_progress\u003c/code\u003e and \u003ccode class=\"readme-inline-code\"\u003edone\u003c/code\u003e, with \u003ccode class=\"readme-inline-code\"\u003edone_status: done\u003c/code\u003e (the default, the last column) so the run ticket\u0026#39;s progress counts finished items.\u003c/li\u003e\n\u003cli\u003estate with the kv adapter (the redis adapter refuses \u003ccode class=\"readme-inline-code\"\u003estate::barrier\u003c/code\u003e), \u003ccode class=\"readme-inline-code\"\u003estore_method: file_based\u003c/code\u003e (the default; \u003ccode class=\"readme-inline-code\"\u003ein_memory\u003c/code\u003e loses barrier progress and results on restart) and \u003ccode class=\"readme-inline-code\"\u003etriggers_enabled: true\u003c/code\u003e (the default).\u003c/li\u003e\n\u003cli\u003eharness \u003ccode class=\"readme-inline-code\"\u003emax_depth\u003c/code\u003e of at least 3 (the default): orchestrator → lead → phase; and \u003ccode class=\"readme-inline-code\"\u003emax_children\u003c/code\u003e of at least \u003ccode class=\"readme-inline-code\"\u003econcurrency\u003c/code\u003e (the default 8 matches it): a wave spawns one lead per ticket in one turn, and spawns past the limit are refused.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eApproval gate.\u003c/strong\u003e Allow these to run without a prompt:\u003cul\u003e\n\u003cli\u003e\u003ccode class=\"readme-inline-code\"\u003estate::barrier\u003c/code\u003e, unattended: the harness calls it on every state write in a wave\u0026#39;s or phase\u0026#39;s scope.\u003c/li\u003e\n\u003cli\u003efor the phase sub-agents: \u003ccode class=\"readme-inline-code\"\u003estate::compare-and-set\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ekanban::ticket::get\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ekanban::comment::create\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eshell::exec\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ecoder::read-file\u003c/code\u003e (plus \u003ccode class=\"readme-inline-code\"\u003ecoder::create-file\u003c/code\u003e and \u003ccode class=\"readme-inline-code\"\u003ecoder::update-file\u003c/code\u003e for \u003ccode class=\"readme-inline-code\"\u003eultracode-impl\u003c/code\u003e, and \u003ccode class=\"readme-inline-code\"\u003estate::get\u003c/code\u003e for verifiers), and whatever else the work needs. A call held for approval in a phase sub-agent parks its ticket as \u003ccode class=\"readme-inline-code\"\u003eblocked\u003c/code\u003e with the function to approve; a wave of leads held on approvals ends the run as \u003ccode class=\"readme-inline-code\"\u003eblocked\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003efor leads: \u003ccode class=\"readme-inline-code\"\u003eharness::spawn\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eengine::register_trigger\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003estate::list\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003estate::compare-and-set\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eharness::status\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eharness::stop\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ekanban::comment::create\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003efor the orchestrator: \u003ccode class=\"readme-inline-code\"\u003eharness::spawn\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eharness::metrics\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003estate::compare-and-set\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ekanban::ticket::list\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ekanban::project::create\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eshell::exec\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eharness::stop\u003c/code\u003e, and \u003ccode class=\"readme-inline-code\"\u003edirectory::agents::get\u003c/code\u003e when \u003ccode class=\"readme-inline-code\"\u003ejudges=\u003c/code\u003e is used. Without a rule, each \u003ccode class=\"readme-inline-code\"\u003eharness::stop\u003c/code\u003e of a timed-out lead or phase waits for your approval. The repository rule set (\u003ccode class=\"readme-inline-code\"\u003eiii-permissions.yaml\u003c/code\u003e) denies it with \u003ccode class=\"readme-inline-code\"\u003e'!harness::stop'\u003c/code\u003e; to allow it, remove that line from your approval-gate rules and add \u003ccode class=\"readme-inline-code\"\u003e- harness::stop\u003c/code\u003e (an allow above a \u003ccode class=\"readme-inline-code\"\u003e'!…'\u003c/code\u003e line is not enough: the console turns every deny rule into a session-wide deny). If you keep the deny, timed-out leads are parked as \u003ccode class=\"readme-inline-code\"\u003estuck\u003c/code\u003e. Project creation is allowed by the rule set for a create whose \u003ccode class=\"readme-inline-code\"\u003elead\u003c/code\u003e is \u003ccode class=\"readme-inline-code\"\u003eultracode\u003c/code\u003e (rule \u003ccode class=\"readme-inline-code\"\u003eultracode-run-project\u003c/code\u003e, iii-hq/workers#1415); with older rules that still say \u003ccode class=\"readme-inline-code\"\u003e'!kanban::project::create'\u003c/code\u003e, replace that line with the same structured allow, or pass \u003ccode class=\"readme-inline-code\"\u003eproject=\u003c/code\u003e with a project you made in the console. Refused, the run goes on without a project and says so on the run ticket.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTrust.\u003c/strong\u003e Any agent allowed \u003ccode class=\"readme-inline-code\"\u003ekanban::ticket::create\u003c/code\u003e or \u003ccode class=\"readme-inline-code\"\u003ekanban::ticket::update\u003c/code\u003e can add a subtask to the run ticket, which then runs with the orchestrator\u0026#39;s permissions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"how-it-works\" class=\"scroll-mt-20\"\u003eHow it works\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eEach round takes a snapshot of the run ticket\u0026#39;s To do subtasks (\u003ccode class=\"readme-inline-code\"\u003ekanban::ticket::list\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003eparent_id\u003c/code\u003e) and runs it in waves of \u003ccode class=\"readme-inline-code\"\u003econcurrency\u003c/code\u003e leads.\u003c/li\u003e\n\u003cli\u003ePer wave, the orchestrator arms one \u003ccode class=\"readme-inline-code\"\u003estate\u003c/code\u003e wake gated by \u003ccode class=\"readme-inline-code\"\u003estate::barrier\u003c/code\u003e with a deadline, moves the tickets to In progress and spawns one \u003ccode class=\"readme-inline-code\"\u003eultracode-lead\u003c/code\u003e per ticket.\u003c/li\u003e\n\u003cli\u003eA lead runs its ticket\u0026#39;s phases the same way: per phase, one barrier wake with a deadline and one spawn per key; each phase sub-agent posts one comment and writes one document with set-if-absent \u003ccode class=\"readme-inline-code\"\u003estate::compare-and-set\u003c/code\u003e. The lead retries rejected attempts, then writes one result for the orchestrator.\u003c/li\u003e\n\u003cli\u003eThe wave\u0026#39;s barrier wakes the orchestrator once when every lead has written, or the deadline does. It reads all results with one \u003ccode class=\"readme-inline-code\"\u003estate::list\u003c/code\u003e. A missing, malformed or rewritten result is null: the lead is stopped if still running (the stop cascades to its phases, but not to \u003ccode class=\"readme-inline-code\"\u003eshell::exec_bg\u003c/code\u003e jobs they started) and the ticket is retried next round in the same lead session while rounds remain, or parked as \u003ccode class=\"readme-inline-code\"\u003estuck\u003c/code\u003e if it cannot be stopped.\u003c/li\u003e\n\u003cli\u003eVerified or accepted tickets go to Done; blocked, unverified and stuck ones to Backlog; failed ones back to To do while rounds remain.\u003c/li\u003e\n\u003cli\u003eThe run stops on \u003ccode class=\"readme-inline-code\"\u003emax_rounds\u003c/code\u003e, no progress, nothing left (after one critic or branch review), the budget, blocked approvals or your stop. The report goes on the run ticket, into the chat and to \u003ccode class=\"readme-inline-code\"\u003enotify\u003c/code\u003e; in the dev flow it then asks how to finish the branch.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cstrong\u003eWhy fan-in is on state, not on kanban events.\u003c/strong\u003e A \u003ccode class=\"readme-inline-code\"\u003ekanban:change\u003c/code\u003e wake gated by the same barrier works mechanically, but it counts every change to a ticket (including the orchestrator\u0026#39;s own moves) as an arrival, kanban delivers events fire-and-forget with no catch-up, and results kept in comments have no compare-and-set. A kanban outage would lose results instead of delaying them.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eNot in 0.1:\u003c/strong\u003e a run-level cost cap from the console, one worktree per ticket (tickets that share a file wait for a later wave instead).\u003c/p\u003e\n"])</script><script>self.__next_f.push([1,"27:[\"$\",\"div\",null,{\"className\":\"border border-rule bg-bg\",\"children\":[[\"$\",\"div\",null,{\"className\":\"bg-panel px-3.5 py-2.5 border-b border-rule flex flex-col gap-y-1\",\"children\":[\"$\",\"span\",null,{\"className\":\"font-mono text-[11px] font-medium uppercase tracking-[0.18em] text-ink-faint\",\"children\":\"README.md\"}]}],[\"$\",\"div\",null,{\"className\":\"px-7 py-6 readme-prose font-mono\",\"dangerouslySetInnerHTML\":{\"__html\":\"$2f\"}}]]}]\n"])</script></body></html>