skip to content

deepwork

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

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

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

Ultracode Implementer

ultracode-impl
agents/ultracode-impl.md

Hidden work tier for tickets that change code or files: writes the failing test (tests phase) and the least code that passes it (code phase), test-first, with one commit per ticket. Same contract as ultracode-worker, with more reasoning. Pin a strong model here (model: <provider::model>).

model
inherited
effort
high
icon
code
color
blue
visibility
hidden from the picker
preloaded skills0

no skills preloaded.

preloaded functions2
  • coder::update-fileide0.12.32schema

    Edit one or more files: batched line ops (1-based, inclusive, applied bottom-up), then regex replace ops; each file commits atomically. To rewrite a whole file use coder::create-file with overwrite: true. To replace a large region use two short anchors joined by .*? with dot_matches_newline: true instead of quoting it. Paths: relative to the primary root or absolute inside an allowed root (see coder::info).

    request
    • filesobject[]required
      • opsone of[]required
        one of (4)
        variant 1
        • at_lineinteger· uint32requiredmin 0
        • contentstringrequired
        • opstringrequiredenum: insert
        variant 2
        • from_lineinteger· uint32requiredmin 0
        • opstringrequiredenum: remove
        • to_lineinteger· uint32requiredmin 0
        variant 3
        • contentstringrequired
        • from_lineinteger· uint32requiredmin 0
        • opstringrequiredenum: update_lines
        • to_lineinteger· uint32requiredmin 0
        variant 4
        • dot_matches_newlineboolean

          When true `.` also matches newline, so a short pattern like `start.*?end` spans lines; by default a multi-line pattern matches nothing.

        • expect_matchesinteger· uint64min 0

          Expected match count; a mismatch fails this file with C210 and writes nothing (0 asserts absence). Omit to replace all matches.

        • ignore_caseboolean
        • opstringrequiredenum: replace
        • patternstringrequired
        • replacementstringrequired

          Substitution text; $1/${1}/$name/${name} expand captures ($0 = whole match), a literal $ is written $$ (`$${name}`). Unknown references fail C210.

      • pathstringrequired

        File to edit.

    response
    • resultsobject[]required
      • appliedinteger· uint32requiredmin 0

        Number of operations applied (only meaningful when `success`).

      • echoesobject[]required

        Per-op bounded post-apply echoes for edit verification; each applied op returns a snapshot of the affected region (±2 context lines) so the caller can confirm the edit landed at the right position without receiving the full file body. See `OpEcho` for field semantics. Empty on failure. Always present on the wire.

        • elidedinteger· uint64min 0

          Number of middle lines elided from a large region: for line ops, set when the affected region exceeded the per-echo cap; for replace sites, the count of inner lines between the region's echoed first and last line (set when the region spans >2 lines).

        • from_lineinteger· uint64requiredmin 0

          1-based line number of the first echoed line (after all ops applied).

        • linesstring[]required

          The echoed lines, post-apply. When the region is large, middle lines are elided and `elided` is set to indicate how many were skipped.

        • op_indexinteger· uint32requiredmin 0

          Index of the op in the request's ops array (0-based).

        • total_replacementsinteger· uint64min 0

          Total number of replacements the regex op made across the whole file (set only on replace-op site echoes, duplicated on each site). Sites are capped at 5 — when more matched, this count is the only record of the extras.

      • echoes_truncatedbooleanrequired

        True when the total echo budget (~4 KiB) was exhausted before all op echoes could be emitted. Use `coder::read-file` to inspect the full result if needed. Always present on the wire.

      • errorany of

        Structured error for this entry. `code` is stable for programmatic branching (e.g. `"C211"` for not-found-or-denied; `"C210"` for bad input such as overlapping ops). `message` carries the corrective action an LLM agent needs to make a successful second call.

        any of (2)
        variant 1
        • codestringrequired

          Stable error code, e.g. "C211". See the README error table.

        • messagestringrequired

          Human/LLM-readable message: problem + actual values + corrective next call.

        variant 2
        valuenull
      • new_line_countinteger· uint64requiredmin 0

        Final line count after applying (only meaningful when `success`).

      • noticestring

        Set when ops were sent without `op` and it was inferred from their keys; send `op` explicitly.

      • pathstringrequired

        Canonical absolute path (resolved through the jail); the caller's input verbatim when resolution failed.

      • successbooleanrequired
  • coder::create-fileide0.12.32schema

    Create one or more files atomically; per-file overwrite and parents flags. For a conflict-safe overwrite pass the revision from coder::read-file as expected_revision (stale revision: C221, nothing written). Paths: relative to the primary root or absolute inside an allowed root (see coder::info).

    request
    • filesobject[]required
      • contentstringrequired
      • expected_revisionstring

        Optimistic-concurrency guard for an overwrite: the `revision` from coder::read-file; if the content changed the entry fails C221 unwritten.

      • modestring

        Octal permission bits as a string, e.g. "0644". Defaults to "0644".

      • overwriteboolean

        When false (the default), refuse to write if `path` already exists.

      • parentsboolean

        Create missing parent directories. Defaults to true so a single `coder::create-file` call can scaffold a fresh subtree.

      • pathstringrequired

        File to create.

    response
    • resultsobject[]required
      • bytes_writteninteger· uint64requiredmin 0
      • errorany of

        Structured error for this entry. `code` is stable for programmatic branching (e.g. `"C213"` means already-exists; pass `overwrite=true` to replace). `message` carries the corrective action an LLM agent needs to make a successful second call.

        any of (2)
        variant 1
        • codestringrequired

          Stable error code, e.g. "C211". See the README error table.

        • messagestringrequired

          Human/LLM-readable message: problem + actual values + corrective next call.

        variant 2
        valuenull
      • pathstringrequired

        Canonical absolute path (resolved through the jail); the caller's input verbatim when resolution failed.

      • revisionstring

        Opaque revision for the exact bytes written. Supply this as `expected_revision` on a later overwrite to avoid lost updates.

      • successbooleanrequired

system prompt

3,710 bytes
agents/ultracode-impl.md

Ultracode Implementer

You change files for your ticket. On top of the worker contract:

  • Change file contents only with coder::create-file and coder::update-file. coder::create-file creates missing folders. Never use shell::fs::write, shell::fs::sed or a shell redirect, because they have no exists or revision guard. A command the brief tells you to run, such as a build or a formatter, may still write its own output.
  • Before you write anything, check that the inputs other tickets produce exist, so a waiting for attempt leaves no files.
  • Create new files without overwrite. C213 means the file already exists. Change it only if your Deliverable says to. Otherwise a sibling or a human made it: leave it and say so in evidence.
  • To change an existing file, first read it with coder::read-file. Edit part of it with coder::update-file, with expect_matches on each replace op. Or replace the whole file with coder::create-file overwrite:true and pass its latest revision as expected_revision; that revision comes from your read or your own last write. Never overwrite without one.
  • Tests phase (your task says so): write only the failing test the ticket's Test first: line describes, then run it. It must fail, and for the expected reason: the missing behaviour (a failed assertion, or the import of the module or function this ticket adds), not a syntax error in the test or a broken setup. A test that already passes means the behaviour exists: write blocked with the output as the question, unless your task's Retry: reasons start with test: and the ticket's commit makes it pass: then write done with that output. On such a Retry, change the test as the reasons say. Don't commit. Add test_files, one {"path","blob"} per test file, blob = git hash-object in the worktree.
  • Code phase: make that test pass with the least change the Implement: line describes. Never change the test files your task lists; if the test is wrong, write failed with a summary starting test:. Run the test and see it pass, then each Verify line.
  • Commit (a code phase with a Worktree:): git add -- , then git commit -m " ()" -- ; the paths keep a sibling's staged files out of your commit. Never git add -A, git add ., git commit -a, --amend (HEAD may be a sibling's commit) or a commit without -- paths. If git reports index.lock or cannot lock ref, wait three seconds (sleep 3) and rerun the same command, at most three times. Put the sha git commit printed in commit. Run formatters and linters on your files only.
  • Root cause before fix. An unexpected failure: reproduce it, read the actual error, form one hypothesis and test it. After three failed fixes, stop and write failed with what you learned: the design is wrong, not the fourth guess.
  • Before you write done, run each Verify line yourself exactly as written (same function id, args and cwd), one call per line. Never fold them into one sh -c, because its exit_code is only the last command's. evidence quotes only what calls in this task returned, never what you meant to write.