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
4 installs4 in 7d3 today30 days

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

README.md

deepwork

Give Deepwork a goal and a team of agents works it, with the kanban board as the task list:

  1. Deepwork breaks the goal into tickets.
  2. Each ticket gets a lead agent that takes it through its phases with its own sub-agents.
  3. Leads run in parallel, in waves.
  4. Rounds repeat 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 runs the dev flow. You approve the design and the plan. Each code ticket is written test-first in a git worktree, with one commit. Every commit is verified and reviewed, then the whole branch is reviewed, and you choose how it finishes. Other goals (research, reading, analysis) run the plain flow: work, then verify.

Deepwork needs only the harness, state, kanban and ide workers.

Profiles

Profile What it does Model to pin
deepwork the orchestrator you talk to none: uses the session's
deepwork-lead runs one ticket through its phases a fast, cheap one
deepwork-worker research, reading, analysis optional
deepwork-impl writes the failing test and the code, and commits a strong one
deepwork-adversary verifies and reviews each ticket (the default checker) a mid-tier one
deepwork-verifier base of the checkers, used for judges none: each judge sets one

Every profile except deepwork is hidden.

Install

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

Sometimes the reply is a plan instead of an install. That happens when there are warnings or decisions, for example a profile with the same id already exists. Review the plan and apply it in the ADE under Directory → Kits, or run:

iii trigger directory::kits::apply plan_id=<plan_id> --timeout-ms 1200000

Applying can take minutes. If the command times out, the apply keeps running, so check Directory → Kits instead of running it again.

Pin the models

The kit ships without models because it can't know your providers. Add a model: :: line to these files:

  • agents/deepwork-lead.md
  • agents/deepwork-impl.md
  • agents/deepwork-adversary.md
  • agents/deepwork-worker.md (optional)

Use the provider::model form so reasoning_effort reaches the provider. Kit updates keep your edits.

A tier without its own model uses the one set on Default (agents/default.md). If Default has none, it uses the orchestrator's model. An unpinned lead spends one turn per phase on that model. With judges=, deepwork-verifier must resolve no model at all, Default included, or the run won't start.

Run it

In the console, pick Deepwork and type the goal. To change the defaults, add an args: line:

Add per-user rate limits to the login route.
args: max_rounds=2 concurrency=4 budget_usd=5
Arg Default What it does
flow auto dev for code goals in a git repository, plain for the rest. Set it to force one
approve on in 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 rounds over the queue
attempts 2 tries per ticket per round. A rejected try is retried with the reasons
concurrency 8 leads per wave, at most 8. A ticket waits for its Depends on: tickets. In the dev flow, tickets that share a file never share a wave
verify on checks each ticket
verifier deepwork-adversary the checker profile: deepwork-adversary* or deepwork-verifier*
judges – comma-separated model ids. One deepwork-verifier per model checks each ticket and the majority wins. At most 7 in the dev flow, 8 in the plain flow
deadline_min 20 minutes each phase gets
critic on one last check for anything missing once the queue is empty. In the dev flow, this is the branch review
max_items 5 × concurrency the most tickets a run creates
budget_usd – soft cost cap. It is checked before each wave, and no new wave starts once it is reached. A model without catalog pricing, or a call without usage, isn't counted, so the cap can be overshot
notify – a function id that gets the final report, such as a Slack or email send
project – an existing kanban project (id or name) for the run. Without it, each run creates its own project, deepwork: ·
release – an existing kanban release (id or name). Agents can't create releases

Hard cost cap

The console only has the soft budget_usd. For a hard cap, start the run from the CLI:

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

You must pass model, because the profile sets none. Every model the run uses needs catalog pricing, judges included. The design, plan and finish questions show up in that session in the console. Pass approve=off to skip them.

The dev flow

  1. Design. Deepwork reads the repository and asks about anything the code can't answer. It asks one question at a time and offers two or three options, with its own pick first.

  2. Plan. The design goes on the run ticket. Each task becomes a subtask with Files:, Test first:, Implement:, Verify: and Commit: lines. You answer one card: Start, Stop, or type your changes. If you type changes, Deepwork rewrites the plan and asks again.

  3. Worktree. The work happens on a new branch, deepwork/, in .worktrees/. That folder is excluded locally, so your checkout is untouched. Run Deepwork from the repository's top folder. The test suite runs once to get a baseline.

  4. Code tickets. Each code ticket follows three steps:

    1. Write a failing test.
    2. Write the least code that makes it pass, and commit once.
    3. Verify and review the commit, side by side. Verify re-runs the Verify: lines. Review checks that the tests are unchanged and nothing outside Files: moved.

    A rejection goes back to the same code session with the reasons. Research tickets in the same run are worked and verified without a commit.

  5. Branch review. Once the queue is empty, one reviewer runs the full test suite and the linter and reviews the whole diff. Its findings become tickets for the next round.

  6. Finish. You pick one: merge into your branch, push and open a PR, keep the branch, or discard it.

Sub-agents work only inside the worktree. They never push, merge, rebase, reset, switch, stash or clean. Deepwork pushes or merges only when you pick that at the finish. Loose ends the goal doesn't need become Backlog subtasks labelled pending.

The board

  • Run ticket. It is titled deepwork: and labelled dw:run. Every ticket of the run is its subtask, so its page shows the run's progress. Each round adds a comment with the cost.

  • Queue. The subtasks in To do are the queue, in board order. In progress means a lead is on the ticket. The session tree shows each lead as · </code>, with its phases under it.</p> </li> <li><p><strong>Route a ticket.</strong> Set its assignee to <code class="readme-inline-code">deepwork-worker*</code> or <code class="readme-inline-code">deepwork-impl*</code>. With any other assignee, a ticket that changes code or files runs as <code class="readme-inline-code">deepwork-impl</code>, and any other ticket runs as <code class="readme-inline-code">deepwork-worker</code>. To add your own tier, create <code class="readme-inline-code">agents/deepwork-impl-<name>.md</code> with <code class="readme-inline-code">extends: deepwork-impl</code> (or <code class="readme-inline-code">deepwork-worker</code>) and a <code class="readme-inline-code">model</code>.</p> </li> <li><p><strong>Change the plan.</strong> Tell Deepwork in the chat. It edits the queued subtasks from the next round. Running tickets finish first, then each one gets a follow-up.</p> </li> <li><p><strong>Steer between rounds.</strong> You can:</p> <ul> <li>add a subtask on the run ticket and move it to To do;</li> <li>reorder To do;</li> <li>comment on a ticket to steer its retry;</li> <li>move a Backlog card to To do to run it again.</li> </ul> </li> <li><p><strong>Skip a ticket.</strong> Move it from To do to Backlog. Don't drag In progress cards, because Deepwork's next write overrides your move. Deleting a card removes it from the run.</p> </li> <li><p><strong>Outcomes.</strong></p> <ul> <li>Done tickets carry <code class="readme-inline-code">verified</code> or <code class="readme-inline-code">accepted</code>.</li> <li>Backlog tickets carry <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>.</li> <li>Tickets dropped from the plan are <code class="readme-inline-code">canceled</code> and go to the board's canceled column. Older boards may lack one: add it in the Kanban settings. Otherwise those tickets go to Backlog with the <code class="readme-inline-code">canceled</code> label.</li> </ul> <p>Deepwork only changes these outcome labels, so your own labels stay.</p> </li> </ul> <h2 id="prerequisites" class="scroll-mt-20">Prerequisites</h2> <ul> <li><p><strong>kanban</strong> with the default columns: 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>, and <code class="readme-inline-code">done_status: done</code>.</p> </li> <li><p><strong>state</strong> with the defaults: the kv adapter (redis won't work), <code class="readme-inline-code">store_method: file_based</code> and <code class="readme-inline-code">triggers_enabled: true</code>.</p> </li> <li><p><strong>harness</strong> with <code class="readme-inline-code">max_depth</code> of at least 3 and <code class="readme-inline-code">max_children</code> of at least <code class="readme-inline-code">concurrency</code>. The defaults, 3 and 8, are enough.</p> </li> <li><p><strong>Approval rules.</strong> These functions must run without a prompt:</p> <table> <thead> <tr> <th>Who</th> <th>Functions</th> </tr> </thead> <tbody><tr> <td>the harness</td> <td><code class="readme-inline-code">state::barrier</code></td> </tr> <tr> <td>orchestrator</td> <td><code class="readme-inline-code">harness::spawn</code>, <code class="readme-inline-code">harness::metrics</code>, <code class="readme-inline-code">harness::stop</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>, plus <code class="readme-inline-code">directory::agents::get</code> with <code class="readme-inline-code">judges=</code></td> </tr> <tr> <td>leads</td> <td><code class="readme-inline-code">harness::spawn</code>, <code class="readme-inline-code">harness::status</code>, <code class="readme-inline-code">harness::stop</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">kanban::comment::create</code></td> </tr> <tr> <td>phase sub-agents</td> <td><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 whatever the work needs. <code class="readme-inline-code">deepwork-impl</code> also needs <code class="readme-inline-code">coder::create-file</code> and <code class="readme-inline-code">coder::update-file</code>. Checkers also need <code class="readme-inline-code">state::get</code></td> </tr> </tbody></table> <p>A phase call that waits for approval parks its ticket as <code class="readme-inline-code">blocked</code>. If every lead in a wave waits for approval, the run ends as <code class="readme-inline-code">blocked</code>.</p> </li> <li><p><strong><code class="readme-inline-code">harness::stop</code>.</strong> The repository rules (<code class="readme-inline-code">iii-permissions.yaml</code>) deny it with a <code class="readme-inline-code">'!harness::stop'</code> line. To allow it, remove that line and add <code class="readme-inline-code">- harness::stop</code>. An allow above the deny line is not enough, because the console makes every deny rule session-wide. If you keep the deny, leads that time out are parked as <code class="readme-inline-code">stuck</code>.</p> </li> <li><p><strong>Project creation.</strong> The repository rules allow a <code class="readme-inline-code">kanban::project::create</code> whose <code class="readme-inline-code">lead</code> is <code class="readme-inline-code">deepwork</code> (rule <code class="readme-inline-code">deepwork-run-project</code>). With older rules, add that rule or pass <code class="readme-inline-code">project=</code>. If the create is refused, the run goes on without a project.</p> </li> <li><p><strong>Trust.</strong> Any agent that can create or update kanban tickets can add a subtask to the run ticket. That subtask then runs with the orchestrator's permissions.</p> </li> </ul> <h2 id="how-it-works" class="scroll-mt-20">How it works</h2> <ol> <li><p>Each round takes the run ticket's To do subtasks and runs them in waves of <code class="readme-inline-code">concurrency</code> leads.</p> </li> <li><p>For each wave, the orchestrator moves the tickets to In progress and spawns one <code class="readme-inline-code">deepwork-lead</code> per ticket. It then waits on one <code class="readme-inline-code">state::barrier</code> wake with a deadline.</p> </li> <li><p>Each lead does the same for its phases: one sub-agent per phase and one barrier to wait on. It retries rejected attempts, then writes one result to state.</p> </li> <li><p>The orchestrator wakes once, when every lead has written or the deadline passes. A lead with no valid result is stopped, and its ticket is retried next round. If the lead can't be stopped, the ticket is parked as <code class="readme-inline-code">stuck</code>. Background <code class="readme-inline-code">shell::exec_bg</code> jobs keep running after a stop.</p> </li> <li><p>Verified and accepted tickets go to Done. Failed ones go back to To do while rounds remain, and the rest go to Backlog.</p> </li> <li><p>The run ends when one of these happens:</p> <ul> <li>rounds run out;</li> <li>nothing is left;</li> <li>progress stalls;</li> <li>the budget is spent;</li> <li>approvals block it;</li> <li>you stop it.</li> </ul> <p>The report goes on the run ticket, into the chat and to <code class="readme-inline-code">notify</code>.</p> </li> </ol> <p>Results go through <code class="readme-inline-code">state</code> rather than kanban events. State has compare-and-set, and a kanban outage won't lose results.</p> <p>Not in 0.2: a hard cost cap from the console, and 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.2.1</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-16T11:10:17.540Z">2026-10-16 · 4h 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,844 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\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"kits\",{\"children\":[[\"author\",\"iii\",\"d\",null],{\"children\":[[\"name\",\"deepwork\",\"d\",null],{\"children\":[\"__PAGE__\",{}]}]}]}]},\"$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,844 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,844 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.2.1\\\",\\\"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.2.1\",\"tags\":[{\"key\":\"latest\",\"label\":\"latest\",\"detail\":\"v0.2.1\",\"href\":\"/kits/iii/deepwork\",\"current\":true}],\"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\":\"5h ago\",\"href\":\"/kits/iii/deepwork?version=0.2.0\",\"current\":false},{\"key\":\"0.1.1\",\"label\":\"v0.1.1\",\"detail\":\"19h ago\",\"href\":\"/kits/iii/deepwork?version=0.1.1\",\"current\":false},{\"key\":\"0.1.0\",\"label\":\"v0.1.0\",\"detail\":\"19h ago\",\"href\":\"/kits/iii/deepwork?version=0.1.0\",\"current\":false}]}],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\":\"true\",\"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\":\"latest\",\"kind\":\"kit\",\"command\":\"iii trigger directory::download-kit kit=iii/deepwork\",\"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\":\"4\"}],\" installs\"]}],[\"$\",\"span\",null,{\"aria-hidden\":true,\"className\":\"text-rule\",\"children\":\"/\"}],[\"$\",\"span\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink\",\"children\":\"4\"}],\" in 7d\"]}],[\"$\",\"span\",null,{\"aria-hidden\":true,\"className\":\"text-rule\",\"children\":\"/\"}],[\"$\",\"span\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink\",\"children\":\"3\"}],\" 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,12.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?tab=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?tab=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?tab=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?tab=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\",\"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?tab=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?tab=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?tab=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?tab=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?tab=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.2.1\",\"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\":[[\"$\",\"span\",null,{\"className\":\"text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]\",\"children\":\"version\"}],\"$L28\"]}],\"$L29\",\"$L2a\",\"$L2b\",\"$L2c\"]}]]}],null,null,\"$L2d\"]}]]}]}]\n"])</script><script>self.__next_f.push([1,"28:[\"$\",\"span\",null,{\"className\":\"text-ink truncate text-right min-w-0 tabular-nums\",\"title\":\"$undefined\",\"children\":[\"v\",\"0.2.1\"]}]\n29:[\"$\",\"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-16T11:10:17.540Z\",\"children\":\"2026-10-16 · 4h ago\"}]]}]\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\":\"license\"}],[\"$\",\"span\",null,{\"className\":\"text-ink truncate text-right min-w-0\",\"title\":\"$undefined\",\"children\":\"Apache-2.0\"}]]}]\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\":\"kit id\"}],[\"$\",\"span\",null,{\"className\":\"text-ink truncate text-right min-w-0\",\"title\":\"$undefined\",\"children\":[\"$\",\"code\",null,{\"children\":\"iii/deepwork\"}]}]]}]\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\":\"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}]]}]]}]\n2d:[\"$\",\"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]}]]}]\n2e:T4d17,"])</script><script>self.__next_f.push([1,"\u003ch1 id=\"deepwork\" class=\"scroll-mt-20\"\u003edeepwork\u003c/h1\u003e\n\u003cp\u003eGive \u003cstrong\u003eDeepwork\u003c/strong\u003e a goal and a team of agents works it, with the kanban board as the task list:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eDeepwork breaks the goal into tickets.\u003c/li\u003e\n\u003cli\u003eEach ticket gets a lead agent that takes it through its phases with its own sub-agents.\u003c/li\u003e\n\u003cli\u003eLeads run in parallel, in waves.\u003c/li\u003e\n\u003cli\u003eRounds repeat until the goal is done, nothing is left, progress stalls, rounds run out or the budget is spent.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eA goal that changes code in a git repository runs the \u003cstrong\u003edev flow\u003c/strong\u003e. You approve the design and the plan. Each code ticket is written test-first in a git worktree, with one commit. Every commit is verified and reviewed, then the whole branch is reviewed, and you choose how it finishes. Other goals (research, reading, analysis) run the \u003cstrong\u003eplain flow\u003c/strong\u003e: work, then verify.\u003c/p\u003e\n\u003cp\u003eDeepwork needs only the \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 workers.\u003c/p\u003e\n\u003ch2 id=\"profiles\" class=\"scroll-mt-20\"\u003eProfiles\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eProfile\u003c/th\u003e\n\u003cth\u003eWhat it does\u003c/th\u003e\n\u003cth\u003eModel to pin\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edeepwork\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ethe orchestrator you talk to\u003c/td\u003e\n\u003ctd\u003enone: uses the session\u0026#39;s\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edeepwork-lead\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eruns one ticket through its phases\u003c/td\u003e\n\u003ctd\u003ea fast, cheap one\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edeepwork-worker\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eresearch, reading, analysis\u003c/td\u003e\n\u003ctd\u003eoptional\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edeepwork-impl\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ewrites the failing test and the code, and commits\u003c/td\u003e\n\u003ctd\u003ea strong one\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edeepwork-adversary\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003everifies and reviews each ticket (the default checker)\u003c/td\u003e\n\u003ctd\u003ea mid-tier one\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edeepwork-verifier\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ebase of the checkers, used for judges\u003c/td\u003e\n\u003ctd\u003enone: each judge sets one\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003cp\u003eEvery profile except \u003ccode class=\"readme-inline-code\"\u003edeepwork\u003c/code\u003e is hidden.\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/deepwork apply=true --timeout-ms 1200000\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSometimes the reply is a plan instead of an install. That happens when there are warnings or decisions, for example a profile with the same id already exists. Review the plan and apply it in the ADE under Directory → Kits, or run:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eiii trigger directory::kits::apply plan_id=\u0026lt;plan_id\u0026gt; --timeout-ms 1200000\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eApplying can take minutes. If the command times out, the apply keeps running, so check Directory → Kits instead of running it again.\u003c/p\u003e\n\u003ch3 id=\"pin-the-models\" class=\"scroll-mt-20\"\u003ePin the models\u003c/h3\u003e\n\u003cp\u003eThe kit ships without models because it can\u0026#39;t know your providers. Add a \u003ccode class=\"readme-inline-code\"\u003emodel: \u003cprovider\u003e::\u003cmodel\u003e\u003c/code\u003e line to these files:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode class=\"readme-inline-code\"\u003eagents/deepwork-lead.md\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode class=\"readme-inline-code\"\u003eagents/deepwork-impl.md\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode class=\"readme-inline-code\"\u003eagents/deepwork-adversary.md\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode class=\"readme-inline-code\"\u003eagents/deepwork-worker.md\u003c/code\u003e (optional)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eUse the \u003ccode class=\"readme-inline-code\"\u003eprovider::model\u003c/code\u003e form so \u003ccode class=\"readme-inline-code\"\u003ereasoning_effort\u003c/code\u003e reaches the provider. Kit updates keep your edits.\u003c/p\u003e\n\u003cp\u003eA tier without its own model uses the one set on Default (\u003ccode class=\"readme-inline-code\"\u003eagents/default.md\u003c/code\u003e). If Default has none, it uses the orchestrator\u0026#39;s model. An unpinned lead spends one turn per phase on that model. With \u003ccode class=\"readme-inline-code\"\u003ejudges=\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003edeepwork-verifier\u003c/code\u003e must resolve no model at all, Default included, or the run won\u0026#39;t start.\u003c/p\u003e\n\u003ch2 id=\"run-it\" class=\"scroll-mt-20\"\u003eRun it\u003c/h2\u003e\n\u003cp\u003eIn the console, pick \u003cstrong\u003eDeepwork\u003c/strong\u003e and type the goal. To change the defaults, add 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\u003eWhat it does\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 for code goals in a git repository, \u003ccode class=\"readme-inline-code\"\u003eplain\u003c/code\u003e for the rest. Set it 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\u003ein the 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\u003erounds 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\u003etries per ticket per round. A rejected try is retried 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, at most 8. A ticket waits for its \u003ccode class=\"readme-inline-code\"\u003eDepends on:\u003c/code\u003e tickets. In the dev flow, tickets that share a file 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\u003echecks each ticket\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\"\u003edeepwork-adversary\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ethe checker profile: \u003ccode class=\"readme-inline-code\"\u003edeepwork-adversary*\u003c/code\u003e or \u003ccode class=\"readme-inline-code\"\u003edeepwork-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. One \u003ccode class=\"readme-inline-code\"\u003edeepwork-verifier\u003c/code\u003e per model checks each ticket and the majority wins. At most 7 in the dev flow, 8 in the plain flow\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\u003eminutes each phase gets\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 last check for anything missing once the queue is empty. In the dev flow, this is the branch review\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 × \u003ccode class=\"readme-inline-code\"\u003econcurrency\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ethe most tickets a run creates\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 cost cap. It is checked before each wave, and no new wave starts once it is reached. A model without catalog pricing, or a call without usage, isn\u0026#39;t counted, 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 that gets the final report, such as 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) for the run. Without it, each run creates its own project, \u003ccode class=\"readme-inline-code\"\u003edeepwork: \u003cgoal\u003e · \u003cid\u003e\u003c/code\u003e\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). Agents can\u0026#39;t create releases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003ch3 id=\"hard-cost-cap\" class=\"scroll-mt-20\"\u003eHard cost cap\u003c/h3\u003e\n\u003cp\u003eThe console only has the soft \u003ccode class=\"readme-inline-code\"\u003ebudget_usd\u003c/code\u003e. For a hard cap, start the run from the CLI:\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;deepwork\u0026quot;,\u0026quot;max_cost_usd\u0026quot;:5,\u0026quot;max_total_tokens\u0026quot;:2000000}}'\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou must pass \u003ccode class=\"readme-inline-code\"\u003emodel\u003c/code\u003e, because the profile sets none. Every model the run uses needs catalog pricing, judges included. The design, plan and finish questions show up in that session in the console. Pass \u003ccode class=\"readme-inline-code\"\u003eapprove=off\u003c/code\u003e to skip 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\u003cp\u003e\u003cstrong\u003eDesign.\u003c/strong\u003e Deepwork reads the repository and asks about anything the code can\u0026#39;t answer. It asks one question at a time and offers two or three options, with its own pick first.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003ePlan.\u003c/strong\u003e The design goes on the run ticket. Each task becomes a subtask with \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 and \u003ccode class=\"readme-inline-code\"\u003eCommit:\u003c/code\u003e lines. You answer one card: Start, Stop, or type your changes. If you type changes, Deepwork rewrites the plan and asks again.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eWorktree.\u003c/strong\u003e The work happens on a new branch, \u003ccode class=\"readme-inline-code\"\u003edeepwork/\u003cslug\u003e\u003c/code\u003e, in \u003ccode class=\"readme-inline-code\"\u003e.worktrees/\u003cslug\u003e\u003c/code\u003e. That folder is excluded locally, so your checkout is untouched. Run Deepwork from the repository\u0026#39;s top folder. The test suite runs once to get a baseline.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eCode tickets.\u003c/strong\u003e Each code ticket follows three steps:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWrite a failing test.\u003c/li\u003e\n\u003cli\u003eWrite the least code that makes it pass, and commit once.\u003c/li\u003e\n\u003cli\u003eVerify and review the commit, side by side. Verify re-runs the \u003ccode class=\"readme-inline-code\"\u003eVerify:\u003c/code\u003e lines. Review checks that the tests are unchanged and nothing outside \u003ccode class=\"readme-inline-code\"\u003eFiles:\u003c/code\u003e moved.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eA rejection goes back to the same code session with the reasons. Research tickets in the same run are worked and verified without a commit.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eBranch review.\u003c/strong\u003e Once the queue is empty, one reviewer runs the full test suite and the linter and reviews the whole diff. Its findings become tickets for the next round.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eFinish.\u003c/strong\u003e You pick one: merge into your branch, push and open a PR, keep the branch, or discard it.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eSub-agents work only inside the worktree. They never push, merge, rebase, reset, switch, stash or clean. Deepwork pushes or merges only when you pick that at the finish. Loose ends 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\u003e\u003cp\u003e\u003cstrong\u003eRun ticket.\u003c/strong\u003e It is titled \u003ccode class=\"readme-inline-code\"\u003edeepwork: \u003cgoal\u003e\u003c/code\u003e and labelled \u003ccode class=\"readme-inline-code\"\u003edw:run\u003c/code\u003e. Every ticket of the run is its subtask, so its page shows the run\u0026#39;s progress. Each round adds a comment with the cost.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eQueue.\u003c/strong\u003e The subtasks in To do are the queue, in board order. In progress means a lead is on the ticket. The session tree shows each lead as \u003ccode class=\"readme-inline-code\"\u003e\u003cKEY\u003e · \u003ctitle\u003e\u003c/code\u003e, with its phases under it.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eRoute a ticket.\u003c/strong\u003e Set its assignee to \u003ccode class=\"readme-inline-code\"\u003edeepwork-worker*\u003c/code\u003e or \u003ccode class=\"readme-inline-code\"\u003edeepwork-impl*\u003c/code\u003e. With any other assignee, a ticket that changes code or files runs as \u003ccode class=\"readme-inline-code\"\u003edeepwork-impl\u003c/code\u003e, and any other ticket runs as \u003ccode class=\"readme-inline-code\"\u003edeepwork-worker\u003c/code\u003e. To add your own tier, create \u003ccode class=\"readme-inline-code\"\u003eagents/deepwork-impl-\u003cname\u003e.md\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003eextends: deepwork-impl\u003c/code\u003e (or \u003ccode class=\"readme-inline-code\"\u003edeepwork-worker\u003c/code\u003e) and a \u003ccode class=\"readme-inline-code\"\u003emodel\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eChange the plan.\u003c/strong\u003e Tell Deepwork in the chat. It edits the queued subtasks from the next round. Running tickets finish first, then each one gets a follow-up.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eSteer between rounds.\u003c/strong\u003e You can:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eadd a subtask on the run ticket and move it to To do;\u003c/li\u003e\n\u003cli\u003ereorder To do;\u003c/li\u003e\n\u003cli\u003ecomment on a ticket to steer its retry;\u003c/li\u003e\n\u003cli\u003emove a Backlog card to To do to run it again.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eSkip a ticket.\u003c/strong\u003e Move it from To do to Backlog. Don\u0026#39;t drag In progress cards, because Deepwork\u0026#39;s next write overrides your move. Deleting a card removes it from the run.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eOutcomes.\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDone tickets carry \u003ccode class=\"readme-inline-code\"\u003everified\u003c/code\u003e or \u003ccode class=\"readme-inline-code\"\u003eaccepted\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eBacklog tickets carry \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.\u003c/li\u003e\n\u003cli\u003eTickets dropped from the plan are \u003ccode class=\"readme-inline-code\"\u003ecanceled\u003c/code\u003e and go to the board\u0026#39;s canceled column. Older boards may lack one: add it in the Kanban settings. Otherwise those tickets go to Backlog with the \u003ccode class=\"readme-inline-code\"\u003ecanceled\u003c/code\u003e label.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeepwork only changes these outcome labels, so your own labels stay.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"prerequisites\" class=\"scroll-mt-20\"\u003ePrerequisites\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003ekanban\u003c/strong\u003e with the default columns: 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, and \u003ccode class=\"readme-inline-code\"\u003edone_status: done\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003estate\u003c/strong\u003e with the defaults: the kv adapter (redis won\u0026#39;t work), \u003ccode class=\"readme-inline-code\"\u003estore_method: file_based\u003c/code\u003e and \u003ccode class=\"readme-inline-code\"\u003etriggers_enabled: true\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eharness\u003c/strong\u003e with \u003ccode class=\"readme-inline-code\"\u003emax_depth\u003c/code\u003e of at least 3 and \u003ccode class=\"readme-inline-code\"\u003emax_children\u003c/code\u003e of at least \u003ccode class=\"readme-inline-code\"\u003econcurrency\u003c/code\u003e. The defaults, 3 and 8, are enough.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eApproval rules.\u003c/strong\u003e These functions must run without a prompt:\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eWho\u003c/th\u003e\n\u003cth\u003eFunctions\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003ethe harness\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003estate::barrier\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eorchestrator\u003c/td\u003e\n\u003ctd\u003e\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\"\u003eharness::stop\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, plus \u003ccode class=\"readme-inline-code\"\u003edirectory::agents::get\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003ejudges=\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eleads\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eharness::spawn\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\"\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\"\u003ekanban::comment::create\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ephase sub-agents\u003c/td\u003e\n\u003ctd\u003e\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 whatever the work needs. \u003ccode class=\"readme-inline-code\"\u003edeepwork-impl\u003c/code\u003e also needs \u003ccode class=\"readme-inline-code\"\u003ecoder::create-file\u003c/code\u003e and \u003ccode class=\"readme-inline-code\"\u003ecoder::update-file\u003c/code\u003e. Checkers also need \u003ccode class=\"readme-inline-code\"\u003estate::get\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003cp\u003eA phase call that waits for approval parks its ticket as \u003ccode class=\"readme-inline-code\"\u003eblocked\u003c/code\u003e. If every lead in a wave waits for approval, the run ends as \u003ccode class=\"readme-inline-code\"\u003eblocked\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ccode class=\"readme-inline-code\"\u003eharness::stop\u003c/code\u003e.\u003c/strong\u003e The repository rules (\u003ccode class=\"readme-inline-code\"\u003eiii-permissions.yaml\u003c/code\u003e) deny it with a \u003ccode class=\"readme-inline-code\"\u003e'!harness::stop'\u003c/code\u003e line. To allow it, remove that line and add \u003ccode class=\"readme-inline-code\"\u003e- harness::stop\u003c/code\u003e. An allow above the deny line is not enough, because the console makes every deny rule session-wide. If you keep the deny, leads that time out are parked as \u003ccode class=\"readme-inline-code\"\u003estuck\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eProject creation.\u003c/strong\u003e The repository rules allow a \u003ccode class=\"readme-inline-code\"\u003ekanban::project::create\u003c/code\u003e whose \u003ccode class=\"readme-inline-code\"\u003elead\u003c/code\u003e is \u003ccode class=\"readme-inline-code\"\u003edeepwork\u003c/code\u003e (rule \u003ccode class=\"readme-inline-code\"\u003edeepwork-run-project\u003c/code\u003e). With older rules, add that rule or pass \u003ccode class=\"readme-inline-code\"\u003eproject=\u003c/code\u003e. If the create is refused, the run goes on without a project.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eTrust.\u003c/strong\u003e Any agent that can create or update kanban tickets can add a subtask to the run ticket. That subtask then runs with the orchestrator\u0026#39;s permissions.\u003c/p\u003e\n\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\u003e\u003cp\u003eEach round takes the run ticket\u0026#39;s To do subtasks and runs them in waves of \u003ccode class=\"readme-inline-code\"\u003econcurrency\u003c/code\u003e leads.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003eFor each wave, the orchestrator moves the tickets to In progress and spawns one \u003ccode class=\"readme-inline-code\"\u003edeepwork-lead\u003c/code\u003e per ticket. It then waits on one \u003ccode class=\"readme-inline-code\"\u003estate::barrier\u003c/code\u003e wake with a deadline.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003eEach lead does the same for its phases: one sub-agent per phase and one barrier to wait on. It retries rejected attempts, then writes one result to state.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003eThe orchestrator wakes once, when every lead has written or the deadline passes. A lead with no valid result is stopped, and its ticket is retried next round. If the lead can\u0026#39;t be stopped, the ticket is parked as \u003ccode class=\"readme-inline-code\"\u003estuck\u003c/code\u003e. Background \u003ccode class=\"readme-inline-code\"\u003eshell::exec_bg\u003c/code\u003e jobs keep running after a stop.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003eVerified and accepted tickets go to Done. Failed ones go back to To do while rounds remain, and the rest go to Backlog.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003eThe run ends when one of these happens:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003erounds run out;\u003c/li\u003e\n\u003cli\u003enothing is left;\u003c/li\u003e\n\u003cli\u003eprogress stalls;\u003c/li\u003e\n\u003cli\u003ethe budget is spent;\u003c/li\u003e\n\u003cli\u003eapprovals block it;\u003c/li\u003e\n\u003cli\u003eyou stop it.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe report goes on the run ticket, into the chat and to \u003ccode class=\"readme-inline-code\"\u003enotify\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eResults go through \u003ccode class=\"readme-inline-code\"\u003estate\u003c/code\u003e rather than kanban events. State has compare-and-set, and a kanban outage won\u0026#39;t lose results.\u003c/p\u003e\n\u003cp\u003eNot in 0.2: a hard cost cap from the console, and 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\":\"$2e\"}}]]}]\n"])</script></body></html>