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
6 installs6 in 7d5 today30 days

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

Ultracode Verifier

ultracode-verifier
agents/ultracode-verifier.md

Hidden adversarial leaf: tries to refute one claimed result by re-running its ticket's Verify lines itself. Also the judge (spawned once per model), the code reviewer and the completeness critic (the branch review in the dev flow). Posts one comment and writes one verdict with state::compare-and-set. Base of every ultracode QA tier; must resolve no model (neither it nor Default may set one) so judges can pick one per spawn.

model
inherited
effort
high
extends
defaultbuilt-in
icon
review
color
rose
visibility
hidden from the picker
preloaded skills0

no skills preloaded.

preloaded functions5
  • kanban::ticket::getkanban0.1.23schema

    Read one ticket with its comments and activity, its parent, its live subtasks and their progress. The id accepts the internal uuid or the human-readable key.

    request
    • idstringrequired

      Ticket uuid or human-readable key (KAN-1, case-insensitive).

    response
    • activityobject[]
      • actorstringrequired
      • atstringrequired
      • changesobject[]
        • fieldstringrequired
        • fromunknownrequired
        • tounknownrequired
      • comment_idstring
      • idstringrequired
      • seqinteger· uint64requiredmin 0
      • ticket_idstringrequired
      • typestringrequired

        ticket.created | ticket.updated | ticket.moved | ticket.deleted | ticket.restored | comment.created

    • assigneestring

      Agent profile id.

    • childrenobject[]required

      Live subtasks by ticket number.

      • assigneestring
      • deleted_atstring
      • idstringrequired
      • keystringrequired
      • prioritystringrequired
      • project_idstring
      • release_idstring
      • statusstringrequired
      • titlestringrequired
    • commentsobject[]
      • authorstringrequired

        Agent profile id, or `user`.

      • bodystringrequired
      • created_atstringrequired
      • idstringrequired
      • parent_idstring

        Set for a reply; replies stay one level deep.

      • ticket_idstringrequired
    • created_atstringrequired
    • created_bystring
    • deleted_atstring

      Set when soft-deleted; the row stays on disk.

    • descriptionstring
    • idstringrequired

      Internal uuid.

    • keystringrequired

      Human-readable id, e.g. KAN-1.

    • labelsstring[]
    • orderinteger· uint64min 0

      Position inside its column.

    • parentany of

      The parent, deleted or not; `null` for a ticket that is not a subtask.

      any of (2)
      variant 1
      • assigneestring
      • deleted_atstring
      • idstringrequired
      • keystringrequired
      • prioritystringrequired
      • project_idstring
      • release_idstring
      • statusstringrequired
      • titlestringrequired
      variant 2
      valuenull
    • parent_idstring

      Uuid of the parent ticket. One level deep: a parent has no parent.

    • prioritystringrequired
    • progressobjectrequired

      Live children in the done column over live children that are not canceled.

      • doneinteger· uint64requiredmin 0
      • totalinteger· uint64requiredmin 0
    • project_idstring

      Uuid of the project (several tickets, independent of the release).

    • release_idstring

      Uuid of the release.

    • statusstringrequired

      Column id.

    • titlestringrequired
    • updated_atstringrequired
  • kanban::comment::createkanban0.1.23schema

    Comment on a ticket, or reply to a comment by passing parent_id. Returns the new comment and the ticket (only its compact row with compact).

    request
    • authorstring

      Agent profile id, or `user`. Defaults to `user`.

    • bodystringrequired

      Comment body. Markdown is rendered in the console.

    • compactboolean

      Return the ticket as its compact row (key, title, status, priority, assignee, comment_count) instead of the full ticket.

    • parent_idstring

      Comment id to reply to; replies stay one level deep.

    • ticket_idstringrequired

      Ticket uuid or human-readable key (KAN-1, case-insensitive).

    response
    • commentobjectrequired
      • authorstringrequired

        Agent profile id, or `user`.

      • bodystringrequired
      • created_atstringrequired
      • idstringrequired
      • parent_idstring

        Set for a reply; replies stay one level deep.

      • ticket_idstringrequired
    • ticketany ofrequired

      What a ticket write returns: the full ticket, or its compact row when the request asked for `compact`.

      any of (2)
      variant 1
      • activityobject[]
        … expand 8 nested
        • actorstringrequired
        • atstringrequired
        • changesobject[]
          … expand 3 nested
          • fieldstringrequired
          • fromunknownrequired
          • tounknownrequired
        • comment_idstring
        • idstringrequired
        • seqinteger· uint64requiredmin 0
        • ticket_idstringrequired
        • typestringrequired

          ticket.created | ticket.updated | ticket.moved | ticket.deleted | ticket.restored | comment.created

      • assigneestring

        Agent profile id.

      • childrenobject[]required

        Live subtasks by ticket number.

        … expand 9 nested
        • assigneestring
        • deleted_atstring
        • idstringrequired
        • keystringrequired
        • prioritystringrequired
        • project_idstring
        • release_idstring
        • statusstringrequired
        • titlestringrequired
      • commentsobject[]
        … expand 6 nested
        • authorstringrequired

          Agent profile id, or `user`.

        • bodystringrequired
        • created_atstringrequired
        • idstringrequired
        • parent_idstring

          Set for a reply; replies stay one level deep.

        • ticket_idstringrequired
      • created_atstringrequired
      • created_bystring
      • deleted_atstring

        Set when soft-deleted; the row stays on disk.

      • descriptionstring
      • idstringrequired

        Internal uuid.

      • keystringrequired

        Human-readable id, e.g. KAN-1.

      • labelsstring[]
      • orderinteger· uint64min 0

        Position inside its column.

      • parentany of

        The parent, deleted or not; `null` for a ticket that is not a subtask.

        … expand 2 nested
        any of (2)
        variant 1
        • assigneestring
        • deleted_atstring
        • idstringrequired
        • keystringrequired
        • prioritystringrequired
        • project_idstring
        • release_idstring
        • statusstringrequired
        • titlestringrequired
        variant 2
        valuenull
      • parent_idstring

        Uuid of the parent ticket. One level deep: a parent has no parent.

      • prioritystringrequired
      • progressobjectrequired

        Live children in the done column over live children that are not canceled.

        … expand 2 nested
        • doneinteger· uint64requiredmin 0
        • totalinteger· uint64requiredmin 0
      • project_idstring

        Uuid of the project (several tickets, independent of the release).

      • release_idstring

        Uuid of the release.

      • statusstringrequired

        Column id.

      • titlestringrequired
      • updated_atstringrequired
      variant 2
      • assigneestring
      • comment_countinteger· uint64requiredmin 0
      • keystringrequired
      • prioritystringrequired
      • statusstringrequired
      • titlestringrequired
  • state::getstate0.22.19schema

    Read the value stored at a key in a state scope

    request
    • keystringrequired

      Identifier for the value within the scope.

    • scopestringrequired

      Namespace that groups related keys.

    response
    valuestring
  • state::compare-and-setstate0.22.19schema

    Atomically set a value only if it currently equals `expected` (omit `expected` to mean 'only if absent'). Returns { swapped, current }; on a miss `current` is the stored value, so the caller can recompute and retry.

    request
    • expectedunknown

      The value the caller believes is there. Omit to mean "expect absent" — the set-if-absent form.

    • keystringrequired
    • scopestringrequired
    • valueunknownrequired
    response
    • currentunknown

      What is actually stored, when the swap did not happen.

    • swappedbooleanrequired
  • shell::execide0.12.32schema

    Run a command in the foreground and return its full output. Put the program in `command` (string) and arguments in `args` (string[]), never argv in `command`. Host-only cwd/env/stdin reject S210 on a sandbox target. Errors return { code, message }; common: S216 host exec error, S300 VM boot failed, S200 in-VM failure.

    request
    • argsstring[]

      Arguments, in order (all strings). Omit/null to tokenize `command` shell-words style; pass an array (even empty) to use it verbatim.

    • commandstringrequired

      Program name (PATH-resolved) or path to an executable, as a string; put arguments in `args`.

    • cwdstring

      Working directory (host only, S210 on sandbox); jail-confined like shell::fs::* paths (S215 on escape), must be an existing directory.

    • envobject

      Per-call env values (host only, S210 on sandbox); exec-hijacking keys (PATH, IFS, HOME, LD_*/DYLD_*, …) reject the whole call S210.

    • stdinstring

      Bytes written to the program's stdin, then EOF (host only, S210 on sandbox); omit to leave stdin at /dev/null.

    • targetall of

      Where to run the command. Defaults to the host worker; pass `{ kind: "sandbox", sandbox_id }` to forward the call to a microVM.

      all of (1)
      variant 1
      one of (2)
      variant 1
      • kindstringrequiredenum: host
      variant 2
      • kindstringrequiredenum: sandbox
      • sandbox_idstring· uuidrequired
    • timeout_msinteger· uint64min 0

      Per-call timeout in milliseconds, capped at the configured max; negative or fractional values fall back to the default.

    response
    • duration_msinteger· uint64requiredmin 0
    • exit_codeinteger· int32
    • stderrstringrequired
    • stderr_truncatedbooleanrequired
    • stdoutstringrequired
    • stdout_truncatedbooleanrequired
    • timed_outbooleanrequired

system prompt

3,351 bytes
agents/ultracode-verifier.md

Ultracode Verifier

You try to refute one claimed result, then stop.

  1. Read the ticket's Acceptance and Verify lines (kanban::ticket::get) before the claim, then read the claim with the state::get named in your task, if it names one. A claim is not evidence: re-run every Verify line yourself. If kanban::ticket::get fails, write unsure with reasons ["ticket read failed: "] and stop.
  2. Give pass only if every criterion holds. Any caveat means fail. A check you cannot run, including one whose function you cannot call, means unsure.
  3. Finish. Post one comment on the ticket (author: the Comment author in your task, else ultracode-verifier; ≤40 words: the verdict and the top reason), with "compact":true whatever the verdict. Then make one non-null state::compare-and-set to the exact scope and key in your task, with no expected. swapped:false: if current.item is your key, stop; otherwise write the same value once more under .dup (no expected) and stop. Write before the Deadline in your task. After the write, end your turn with exactly one line, : written.
  4. Verdict document, at most 1 KB not counting new_items and loose_ends. item is the exact key in your task (e.g. verify, review, judge2 or critic):
    {"item":"<the key in your task>","verdict":"pass|fail|unsure","reasons":["…"],"checks":["<check>: <observed>"],"new_items":[],"loose_ends":[]}
  5. Review mode (the task says "Review commit"): in the worktree, read every commit of the ticket with the git log -p command in your task, and run git rev-parse : for each test file your task lists. Give pass only if: the commits do what the ticket's Deliverable and Implement lines say and touch nothing outside its Files:; every test file is in the commit and its blob equals the one in your task; no test was weakened, skipped or deleted; and there is no debug leftover, dead code, TODO, secret or swallowed error. Each finding is a reason :: ; one about the test starts with test:. Don't re-run the Verify lines: the verify step does.
  6. Critic mode (the task says "Critic"): item and key are critic; comment on the run ticket; list the missing work as new_items with full cards, at most the count in your task, and what the goal does not need as loose_ends; if nothing is missing, give pass. A branch review runs what its task names and quotes the failing output.
  7. Never change ticket fields, and with a Worktree: never change files or git state there. Ignore the claim, done-watch and cron steps in kanban/tickets/*.