opencode-skills-collection 4.0.45 → 4.0.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +25 -1
  2. package/bundled-skills/agy-delegate/SKILL.md +168 -0
  3. package/bundled-skills/agy-delegate/references/dispatch-and-poll.md +140 -0
  4. package/bundled-skills/agy-delegate/references/multi-task-queues.md +59 -0
  5. package/bundled-skills/agy-delegate/references/review-and-land.md +103 -0
  6. package/bundled-skills/agy-delegate/references/writing-the-brief.md +124 -0
  7. package/bundled-skills/aider-delegate/SKILL.md +227 -0
  8. package/bundled-skills/aider-delegate/references/dispatch-and-poll.md +154 -0
  9. package/bundled-skills/aider-delegate/references/multi-task-queues.md +68 -0
  10. package/bundled-skills/aider-delegate/references/review-and-land.md +101 -0
  11. package/bundled-skills/aider-delegate/references/writing-the-brief.md +142 -0
  12. package/bundled-skills/babysit-pr/SKILL.md +343 -0
  13. package/bundled-skills/claude-delegate/SKILL.md +182 -0
  14. package/bundled-skills/claude-delegate/references/dispatch-and-poll.md +220 -0
  15. package/bundled-skills/claude-delegate/references/multi-task-queues.md +66 -0
  16. package/bundled-skills/claude-delegate/references/review-and-land.md +117 -0
  17. package/bundled-skills/claude-delegate/references/writing-the-brief.md +158 -0
  18. package/bundled-skills/cline-delegate/SKILL.md +140 -0
  19. package/bundled-skills/cline-delegate/references/dispatch-and-poll.md +142 -0
  20. package/bundled-skills/cline-delegate/references/multi-task-queues.md +58 -0
  21. package/bundled-skills/cline-delegate/references/review-and-land.md +80 -0
  22. package/bundled-skills/cline-delegate/references/writing-the-brief.md +129 -0
  23. package/bundled-skills/codex-delegate/SKILL.md +177 -0
  24. package/bundled-skills/codex-delegate/references/dispatch-and-poll.md +161 -0
  25. package/bundled-skills/codex-delegate/references/multi-task-queues.md +66 -0
  26. package/bundled-skills/codex-delegate/references/review-and-land.md +126 -0
  27. package/bundled-skills/codex-delegate/references/writing-the-brief.md +125 -0
  28. package/bundled-skills/commandcode-delegate/SKILL.md +188 -0
  29. package/bundled-skills/commandcode-delegate/references/dispatch-and-poll.md +222 -0
  30. package/bundled-skills/commandcode-delegate/references/multi-task-queues.md +81 -0
  31. package/bundled-skills/commandcode-delegate/references/review-and-land.md +144 -0
  32. package/bundled-skills/commandcode-delegate/references/writing-the-brief.md +147 -0
  33. package/bundled-skills/copilot-delegate/SKILL.md +159 -0
  34. package/bundled-skills/copilot-delegate/references/dispatch-and-poll.md +143 -0
  35. package/bundled-skills/copilot-delegate/references/multi-task-queues.md +58 -0
  36. package/bundled-skills/copilot-delegate/references/review-and-land.md +80 -0
  37. package/bundled-skills/copilot-delegate/references/writing-the-brief.md +140 -0
  38. package/bundled-skills/cursor-delegate/SKILL.md +170 -0
  39. package/bundled-skills/cursor-delegate/references/dispatch-and-poll.md +162 -0
  40. package/bundled-skills/cursor-delegate/references/multi-task-queues.md +59 -0
  41. package/bundled-skills/cursor-delegate/references/review-and-land.md +93 -0
  42. package/bundled-skills/cursor-delegate/references/writing-the-brief.md +126 -0
  43. package/bundled-skills/debate-review/SKILL.md +85 -0
  44. package/bundled-skills/debate-review/assets/prompts/review-debate.md +51 -0
  45. package/bundled-skills/debate-review/assets/prompts/review-main.md +64 -0
  46. package/bundled-skills/debate-review/assets/prompts/review-rebuttal.md +42 -0
  47. package/bundled-skills/debate-review/references/comment-format.md +63 -0
  48. package/bundled-skills/debate-review/references/schema.md +95 -0
  49. package/bundled-skills/delegate-setup/SKILL.md +215 -0
  50. package/bundled-skills/delegate-setup/references/schema.md +100 -0
  51. package/bundled-skills/delegate-setup/references/setup-dialogue.md +101 -0
  52. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  53. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  54. package/bundled-skills/docs/maintainers/repo-growth-seo.md +1 -1
  55. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  56. package/bundled-skills/docs/users/aas-core.md +1 -1
  57. package/bundled-skills/docs/users/bundles.md +1 -1
  58. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  59. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  60. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  61. package/bundled-skills/docs/users/usage.md +3 -3
  62. package/bundled-skills/docs/users/visual-guide.md +4 -4
  63. package/bundled-skills/falsify/SKILL.md +263 -0
  64. package/bundled-skills/falsify/references/bias-catalog.md +42 -0
  65. package/bundled-skills/falsify/references/mental-models.md +135 -0
  66. package/bundled-skills/falsify/templates/thinking-ledger.md +104 -0
  67. package/bundled-skills/graceful-shutdown/SKILL.md +379 -0
  68. package/bundled-skills/grok-delegate/SKILL.md +179 -0
  69. package/bundled-skills/grok-delegate/references/dispatch-and-poll.md +171 -0
  70. package/bundled-skills/grok-delegate/references/multi-task-queues.md +67 -0
  71. package/bundled-skills/grok-delegate/references/review-and-land.md +130 -0
  72. package/bundled-skills/grok-delegate/references/writing-the-brief.md +119 -0
  73. package/bundled-skills/kimi-delegate/SKILL.md +137 -0
  74. package/bundled-skills/kimi-delegate/references/dispatch-and-poll.md +134 -0
  75. package/bundled-skills/kimi-delegate/references/multi-task-queues.md +58 -0
  76. package/bundled-skills/kimi-delegate/references/review-and-land.md +92 -0
  77. package/bundled-skills/kimi-delegate/references/writing-the-brief.md +132 -0
  78. package/bundled-skills/omp-delegate/SKILL.md +186 -0
  79. package/bundled-skills/omp-delegate/references/dispatch-and-poll.md +155 -0
  80. package/bundled-skills/omp-delegate/references/multi-task-queues.md +59 -0
  81. package/bundled-skills/omp-delegate/references/review-and-land.md +95 -0
  82. package/bundled-skills/omp-delegate/references/writing-the-brief.md +149 -0
  83. package/bundled-skills/opencode-delegate/SKILL.md +189 -0
  84. package/bundled-skills/opencode-delegate/references/dispatch-and-poll.md +156 -0
  85. package/bundled-skills/opencode-delegate/references/multi-task-queues.md +68 -0
  86. package/bundled-skills/opencode-delegate/references/review-and-land.md +125 -0
  87. package/bundled-skills/opencode-delegate/references/writing-the-brief.md +142 -0
  88. package/bundled-skills/pi-delegate/SKILL.md +148 -0
  89. package/bundled-skills/pi-delegate/references/dispatch-and-poll.md +146 -0
  90. package/bundled-skills/pi-delegate/references/multi-task-queues.md +59 -0
  91. package/bundled-skills/pi-delegate/references/review-and-land.md +95 -0
  92. package/bundled-skills/pi-delegate/references/writing-the-brief.md +132 -0
  93. package/bundled-skills/qoder-delegate/SKILL.md +151 -0
  94. package/bundled-skills/qoder-delegate/references/dispatch-and-poll.md +119 -0
  95. package/bundled-skills/qoder-delegate/references/multi-task-queues.md +43 -0
  96. package/bundled-skills/qoder-delegate/references/review-and-land.md +66 -0
  97. package/bundled-skills/qoder-delegate/references/writing-the-brief.md +85 -0
  98. package/bundled-skills/sandbase-mcp/SKILL.md +194 -0
  99. package/bundled-skills/ui-slop-score/SKILL.md +2 -2
  100. package/bundled-skills/unsloth-finetuning/SKILL.md +352 -0
  101. package/bundled-skills/vibe-delegate/SKILL.md +147 -0
  102. package/bundled-skills/vibe-delegate/references/dispatch-and-poll.md +144 -0
  103. package/bundled-skills/vibe-delegate/references/multi-task-queues.md +59 -0
  104. package/bundled-skills/vibe-delegate/references/review-and-land.md +87 -0
  105. package/bundled-skills/vibe-delegate/references/writing-the-brief.md +131 -0
  106. package/bundled-skills/warp-delegate/SKILL.md +192 -0
  107. package/bundled-skills/warp-delegate/references/dispatch-and-poll.md +163 -0
  108. package/bundled-skills/warp-delegate/references/multi-task-queues.md +80 -0
  109. package/bundled-skills/warp-delegate/references/review-and-land.md +123 -0
  110. package/bundled-skills/warp-delegate/references/writing-the-brief.md +105 -0
  111. package/bundled-skills/zcode-delegate/SKILL.md +202 -0
  112. package/bundled-skills/zcode-delegate/references/dispatch-and-poll.md +113 -0
  113. package/bundled-skills/zcode-delegate/references/multi-task-queues.md +87 -0
  114. package/bundled-skills/zcode-delegate/references/review-and-land.md +81 -0
  115. package/bundled-skills/zcode-delegate/references/writing-the-brief.md +120 -0
  116. package/package.json +1 -1
  117. package/skills_index.json +660 -0
@@ -0,0 +1,59 @@
1
+ # Multi-task queues
2
+
3
+ The single-task loop scales to a queue: a removal across layers, a migration across files, or a
4
+ refactor sweep. Sequencing and bookkeeping make it trustworthy.
5
+
6
+ ## Run sequentially, one commit per task
7
+
8
+ Run tasks **one at a time, in dependency order**, landing each after review and gates before
9
+ dispatching the next:
10
+
11
+ ```bash
12
+ node "<skill-dir>/scripts/relay.mjs" --brief task-01.txt --cd /path/to/repo
13
+ ```
14
+
15
+ - Later briefs can rely on earlier work only after it lands.
16
+ - One commit per task keeps history reviewable and each step revertible.
17
+ - A clean tree before each dispatch keeps `touchedFiles` honest.
18
+
19
+ Use parallel runs only for genuinely independent tasks in separate working trees. Sequential is the
20
+ default because it preserves clean task boundaries.
21
+
22
+ ## Carry decided constraints forward
23
+
24
+ Fresh Vibe sessions do not remember earlier tasks. If task 2 chooses a helper name, fixture location,
25
+ or interface that task 5 needs, write that fact into task 5's brief.
26
+
27
+ Use a resumed Vibe session only for rework on the same task. Send a delta brief with `--resume-last`;
28
+ use `--session <id>` only for an id obtained outside the relay because Vibe's stream does not expose
29
+ one. Start unrelated queue items in fresh sessions.
30
+
31
+ ## Keep a progress file
32
+
33
+ For more than two or three tasks, maintain one progress file beside the work:
34
+
35
+ - **Status table** — queued / at-implementer / reviewed+committed, with the commit hash.
36
+ - **Per-task review notes** — what landed, what you verified, and gate outcomes.
37
+ - **Needs your eyes** — design decisions, non-blocking nitpicks, and questions for the human.
38
+ - **End-of-run checklist** — the final cross-task verification.
39
+
40
+ Update it when each task lands, not in one batch at the end.
41
+
42
+ ## Close with a coherence check
43
+
44
+ After the last task:
45
+
46
+ - Run the full test/build once more.
47
+ - Search repo-wide for the thing the queue changed.
48
+ - Replay migrations from a clean state and check drift when applicable.
49
+ - Push and open or update the PR only after the final tree is coherent.
50
+
51
+ ## When to stop and ask
52
+
53
+ Proceed on work that follows from the agreed plan. Stop and surface when:
54
+
55
+ - A task cannot be completed correctly within its brief.
56
+ - Review calls the plan itself into question.
57
+ - Gates reveal a problem affecting already-landed tasks.
58
+
59
+ Report the landed state, commit hashes, and open question, then wait.
@@ -0,0 +1,87 @@
1
+ # Review and land
2
+
3
+ Vibe did the typing; you own the judgment. Verify against reality, never the self-report, and read the
4
+ diff as generated code because a green gate cannot catch every failure mode.
5
+
6
+ ## Check tests before trusting gates
7
+
8
+ If the diff touches existing tests, review those edits first:
9
+
10
+ - Treat unbriefed test edits as a contract change, not part of the fix.
11
+ - Treat newly skipped, disabled, or commented-out tests as failing until proven otherwise.
12
+ - Treat loosened assertions the same way: contains/truthy replacing exact matches, broadened error
13
+ types, and widened tolerances all weaken the gate.
14
+
15
+ ## Re-run the gates yourself
16
+
17
+ `result.json` carries Vibe's claims, not evidence. Re-run the project's actual test, lint, and build
18
+ commands in the working tree and read their output. Passing is necessary, not sufficient.
19
+
20
+ For changes with a specialized verification shape:
21
+
22
+ - **Migrations or schema:** round-trip them and check for drift.
23
+ - **Removals or renames:** grep for dangling references.
24
+ - **Stateful behavior:** exercise the behavior, not just compilation.
25
+
26
+ ## Read the diff against the brief
27
+
28
+ Start with `touchedFiles`, open the diff, and compare it to the brief:
29
+
30
+ - **Scope creep** — changes the brief excluded.
31
+ - **Scope shortfall** — missed behavior, edges, or cleanup.
32
+ - **Quiet judgment calls** — defensible but unasked decisions that need review.
33
+
34
+ ## The implementer sweep
35
+
36
+ Check every diff for patterns gates often miss:
37
+
38
+ - Hardcoded success or fixture data on a real-work path.
39
+ - Catch-all error handling that returns a default instead of propagating or recovering.
40
+ - Imports, dependencies, methods, and signatures not present in the installed version.
41
+ - Unused imports, uncalled helpers, unreachable branches, and scaffolding comments.
42
+ - A second client, error idiom, or logging style beside the repo's existing one.
43
+ - Tests that assert internals instead of behavior, or near-duplicate test bodies.
44
+ - Optional parameters, config flags, and abstractions with no caller.
45
+ - Guards for impossible cases that hide trust-boundary validation.
46
+
47
+ Send anything blocking back to Vibe as a delta brief, or fix it in the tree, and report either choice
48
+ to the human. Run relevant guard skills if installed.
49
+
50
+ ## The commit boundary
51
+
52
+ When the gates pass and the diff holds, **the orchestrator commits**, never the implementer. Write a
53
+ clear message describing what landed.
54
+
55
+ From dispatch until that commit, the uncommitted working tree is the authoritative copy of Vibe's
56
+ work. Never reflexively run `git checkout`, `reset`, `clean`, or switch branches after an interrupted
57
+ run. Inspect `git status`, `git diff`, `git diff --cached` for staged changes, and open every untracked
58
+ file (`??`) directly because no diff shows its contents. After inspection, discarding a bad or
59
+ premise-contaminated change can be correct; the rule is to preserve the evidence until it is reviewed.
60
+
61
+ ## Rework: send the delta
62
+
63
+ Continue the same session with only the correction:
64
+
65
+ ```bash
66
+ echo "The fix is right, but the test mocks the DB session. Use the real migrated fixture and remove
67
+ the unused import." | node "<skill-dir>/scripts/relay.mjs" --resume-last --cd /path/to/repo
68
+ ```
69
+
70
+ Vibe's stream does not expose a session id, so use `--resume-last` normally. Use `--session <id>` only
71
+ when the id came from outside the relay. Rework gets the same gate rerun, test review, diff review, and
72
+ implementer sweep.
73
+
74
+ Default `accept-edits` runs cannot execute most gates headlessly; the orchestrator runs them.
75
+ `--full-access` permits arbitrary shell/tool execution and requires explicit human authorization.
76
+
77
+ ## Surface, do not absorb
78
+
79
+ The human opted into delegation, so committing verified, gate-passing work is the contract. Keep them
80
+ in the loop when the work changes shape:
81
+
82
+ - Report design decisions and defensible-but-unrequested turns.
83
+ - Note non-blocking nitpicks you did not block on.
84
+ - Stop and ask if correct completion requires going beyond the brief.
85
+
86
+ For a queue, keep these notes in the progress file described in
87
+ [multi-task-queues.md](multi-task-queues.md).
@@ -0,0 +1,131 @@
1
+ # Writing the brief
2
+
3
+ A brief is the entire task as Vibe will see it. It runs in a separate session with **no memory of your
4
+ conversation, no access to prior notes, and no shared context** — only the text you send and whatever
5
+ it can inspect in the workspace. If a constraint is not in the brief or discoverable in the repo, it
6
+ does not exist for Vibe.
7
+
8
+ ## Resumed sessions
9
+
10
+ A resumed run keeps the session context. Send only the delta brief with `--resume-last` or
11
+ `--session <id>`.
12
+
13
+ ## The shape that works
14
+
15
+ Use a compact, block-structured brief. State the task, what done means, the few constraints that
16
+ matter, and the report Vibe must return.
17
+
18
+ ```xml
19
+ <task>
20
+ One or two sentences: the concrete job and where it lives. Then the specifics — current state, what to
21
+ change, and explicitly what to leave untouched. The leave-untouched list prevents unrelated refactors.
22
+ </task>
23
+
24
+ <verification_loop>
25
+ These are the real project gates the orchestrator will run after dispatch:
26
+ <the project's real test command>
27
+ <the project's real lint/format command>
28
+ <the project's real build/typecheck command>
29
+ If shell execution was explicitly authorized for this run, run them and fix what they surface.
30
+ Otherwise do not claim they ran; perform the inspections available to you and report the gates as not run.
31
+ </verification_loop>
32
+
33
+ <action_safety>
34
+ Keep changes scoped to the task. No unrelated refactors, renames, or cleanup unless required for
35
+ correctness. Do NOT run git add or git commit — the orchestrator commits after reviewing. Leave the
36
+ work uncommitted in the working tree.
37
+ </action_safety>
38
+
39
+ <structured_output_contract>
40
+ End with a report in this exact shape:
41
+ 1. What changed and why
42
+ 2. Files touched
43
+ 3. Gate outcomes with counts, or exactly which gates were not run
44
+ 4. Anything you deviated on, left open, or want a decision on
45
+ </structured_output_contract>
46
+ ```
47
+
48
+ Add extra blocks only when the task needs them:
49
+
50
+ - **Debugging or open-ended fixes** — add `<completeness_contract>` (resolve fully, not just the
51
+ first plausible cause) and `<missing_context_gating>` (find missing repo facts or state what is
52
+ unknown).
53
+ - **Research or recommendations** — add `<research_mode>` (separate observed facts, inferences, and
54
+ open questions).
55
+
56
+ ## Always ask for the report explicitly
57
+
58
+ The relay uses Vibe's last non-empty assistant message as `finalMessage`. Without a
59
+ closing summary, the edits may exist but the result is hard to review. The
60
+ `<structured_output_contract>` block makes the expected report explicit.
61
+
62
+ ## Discover the real gates
63
+
64
+ Read the repo's `AGENTS.md`, `CLAUDE.md`, `Makefile`, `package.json`, or equivalent first and copy the
65
+ actual commands into `<verification_loop>`. Default `accept-edits` runs cannot execute most gates
66
+ headlessly, but naming them lets the orchestrator run the same commands after dispatch. Ask Vibe to
67
+ run them only when the human explicitly authorized `--full-access`.
68
+
69
+ ## Honor repo conventions
70
+
71
+ Restate the load-bearing house rules in the brief. Vibe can inspect the workspace, but the important
72
+ constraints should be directly in front of it.
73
+
74
+ ## One task per brief
75
+
76
+ Keep each brief bounded. One brief → one Vibe run → one reviewed commit keeps the diff and rollback
77
+ clean. Split mixed implementation, review, documentation, and roadmap requests into separate
78
+ dispatches.
79
+
80
+ ## Premises freeze at dispatch
81
+
82
+ Vibe starts from the brief's facts and there is no steering channel mid-run. Audit ownership, target
83
+ branch, constraints, and other judgment-bearing premises before dispatch. If one proves wrong while
84
+ the run is live, stop it and inspect the working tree before sending a corrected brief; reconcile any
85
+ partial or premise-contaminated edits rather than discounting them after the fact.
86
+
87
+ ## A worked example
88
+
89
+ ```xml
90
+ <task>
91
+ In the payments service at services/billing/, the refund path double-charges when a refund is retried
92
+ after a network timeout. Make refund submission idempotent: check for an existing refund by idempotency
93
+ key before creating a new one. Touch only services/billing/refund.py and its tests. Leave the charge
94
+ path, API routes, and data models untouched.
95
+ </task>
96
+
97
+ <verification_loop>
98
+ The orchestrator will run:
99
+ pytest tests/billing/ -q
100
+ ruff check services/billing/
101
+ If shell execution is authorized for this run, run them and fix failures. Otherwise report them as
102
+ not run and confirm only refund.py and its test file changed.
103
+ </verification_loop>
104
+
105
+ <action_safety>
106
+ Scope strictly to the refund idempotency fix. No unrelated refactors. Do NOT git add or commit; leave
107
+ changes in the working tree for review.
108
+ </action_safety>
109
+
110
+ <structured_output_contract>
111
+ Report: (1) the root cause and fix, (2) files touched, (3) pytest and ruff outcomes with counts or
112
+ that they were not run,
113
+ (4) anything left open or needing a decision.
114
+ </structured_output_contract>
115
+ ```
116
+
117
+ ## Argv delivery limits
118
+
119
+ Vibe's headless mode requires the brief as a command-line argument via `--prompt`. The relay reads a
120
+ file or stdin for convenience, then passes the text with `--prompt=<brief>`. The equals form binds a
121
+ brief that starts with `-` instead of treating it as another flag.
122
+
123
+ This has two consequences:
124
+
125
+ - The brief is visible in the host process list (`ps`, `/proc`). Keep secrets out of it on shared
126
+ machines; reference workspace files or environment variables instead.
127
+ - A brief over 120 KB on POSIX or 12 KB on Windows is rejected before launch because the platforms
128
+ cap command arguments. Put large context in the workspace and tell Vibe which file to read.
129
+
130
+ Dispatch with [dispatch-and-poll.md](dispatch-and-poll.md), then review and commit with
131
+ [review-and-land.md](review-and-land.md).
@@ -0,0 +1,192 @@
1
+ ---
2
+ name: warp-delegate
3
+ description: Delegate coding tasks to the Warp Agent CLI (`oz`) only when the user
4
+ explicitly requests it, while the orchestrator retains review and landing responsibility.
5
+ risk: safe
6
+ category: agent-orchestration
7
+ source: https://github.com/amElnagdy/delegate-skills
8
+ source_repo: amElnagdy/delegate-skills
9
+ source_type: community
10
+ date_added: '2026-08-26'
11
+ license: MIT
12
+ license_source: https://github.com/amElnagdy/delegate-skills/blob/master/LICENSE
13
+ compatibility: Requires the `oz` CLI (Warp Agent CLI) installed and authenticated
14
+ (`oz login`, or `WARP_API_KEY` for a headless host; Warp AI features need an eligible
15
+ Warp plan or your own provider key), Node 18+, and git. The orchestrating agent
16
+ must be able to run shell commands and read files. Shell examples assume bash/zsh
17
+ (macOS/Linux, or Git Bash/WSL on Windows).
18
+ metadata:
19
+ version: 0.5.0
20
+ ---
21
+ # Warp Delegate
22
+
23
+ ## When to Use
24
+
25
+ - You want to delegate a bounded coding task to a separate `warp` implementer (`Warp Agent CLI`) and then review its diff yourself.
26
+ - The user explicitly asked for delegation to this implementer.
27
+
28
+ You are the **orchestrator**. Delegate a bounded coding task to a separate **implementer** - the
29
+ Warp Agent CLI - then review what it produced and land it yourself. You write the brief and own the
30
+ judgment; the implementer makes changes in its own conversation; you verify and commit.
31
+
32
+ The loop needs only a shell command and file access, so any comparable orchestrator can drive it.
33
+
34
+ ## The binary is `oz`, not `warp`
35
+
36
+ Warp ships two different programs, and only one of them can be delegated to:
37
+
38
+ - **`oz`** - the Warp Agent CLI. Headless and scriptable; `oz agent run` executes an agent against a
39
+ local directory. **This is what the relay drives.**
40
+ - **`warp`** - the interactive Warp TUI. It requires a terminal device, has no prompt or print flag
41
+ (its only options are `--resume`, `--auto-approve`, `--api-key`, and the provider-key commands),
42
+ and exits with `Device not configured` when stdin is a pipe. It cannot be relayed.
43
+
44
+ If `oz` is missing but `warp` is installed, you have the TUI, not the CLI.
45
+
46
+ ## When NOT to use this
47
+
48
+ - The task is small enough to do inline; delegation overhead is not worth it.
49
+ - The `oz` CLI is not installed or authenticated.
50
+ - You need a sandboxed or read-only implementer. `oz agent run` has **no sandbox, no permission
51
+ mode, and no read-only run** - see [Autonomy and permissions](#autonomy-and-permissions).
52
+ - The work must stay off Warp's servers. `oz agent run` uploads an end-of-run workspace snapshot
53
+ unless `--no-snapshot` is passed, and conversations live server-side.
54
+
55
+ ## Prerequisites (check once)
56
+
57
+ 1. Install the Warp Agent CLI - see <https://docs.warp.dev/cli/>.
58
+ 2. Authenticate: `oz login`, or set `WARP_API_KEY` for CI, a container, or any headless host.
59
+ 3. Confirm the account has AI quota. **A working login is not enough** - unlike the other CLIs in
60
+ this package. `oz whoami` can succeed while every dispatch fails with `In order to use Warp's AI
61
+ features, subscribe to a Warp plan, or bring your own inference.` Warp records this internally as
62
+ `QuotaLimit` / "lack of AI quota", so it is a credit condition on the account rather than a
63
+ CLI-specific entitlement: `oz` runs the same agent harness as the Warp app and draws on the same
64
+ account, plan, and credits. Check that `oz whoami` names the account holding the plan - if it
65
+ does not, `oz logout && oz login` fixes it. Otherwise confirm the plan's AI credits are not
66
+ spent, or store your own provider key -
67
+ `warp --set-provider-api-key <openai|anthropic|google|grok>`, or `/api-keys` inside the TUI.
68
+ Bring-your-own-key needs no paid Warp plan.
69
+ 4. Confirm `oz --version` succeeds and `oz whoami` prints your user.
70
+ 5. Work in, or point `--cd` at, the target git repository.
71
+
72
+ On macOS the CLI is distributed as a signed Developer ID binary; a first run may be held by
73
+ Gatekeeper until it is approved.
74
+
75
+ ## Choose the model (optional)
76
+
77
+ Omit `--model` to use Warp's configured default. To pick another, choose an id from `oz model list`
78
+ and pass it verbatim. The relay accepts letters, digits, and `. _ : / -` only, so a value cannot be
79
+ mistaken for another `oz` flag.
80
+
81
+ ## The loop
82
+
83
+ Run these five steps per task. Steps 1, 4, and 5 require judgment; 2 and 3 are mechanical.
84
+
85
+ ### 1. Write the brief
86
+
87
+ Warp sees only the text you send plus what it can inspect in the workspace - no chat history or
88
+ shared context. Include the goal, current state, what to change, what to leave untouched, the
89
+ project's **actual** gates, and a report contract. Tell it not to commit. Keep one task per brief.
90
+ The brief is delivered as the `--prompt` value on argv, so it is visible in the host process list -
91
+ keep secrets out of it and reference workspace files instead. See
92
+ [references/writing-the-brief.md](references/writing-the-brief.md).
93
+
94
+ ### 2. Dispatch
95
+
96
+ Use the bundled relay. It runs `oz agent run --output-format ndjson`, captures the event stream, and
97
+ writes `result.json`. (`<skill-dir>` is the installed folder containing this `SKILL.md`.)
98
+
99
+ ```bash
100
+ node "<skill-dir>/scripts/relay.mjs" --brief brief.txt --cd /path/to/repo
101
+ # choose a model: add --model <id from oz model list>
102
+ # use an agent profile: add --profile <id>
103
+ # label the run: add --name <label>
104
+ # continue an existing conversation: add --conversation <id> (delta brief only)
105
+ # base the run on a Warp skill: add --skill <name|repo:name|org/repo:name>
106
+ # start MCP servers: add --mcp <path-or-inline-json> (repeatable)
107
+ # suppress the workspace snapshot upload: add --no-snapshot
108
+ # hard time limit (watchdog): add --timeout 2h (the 30m default suits short runs; implementation briefs routinely need 1-2h)
109
+ # see all options: node .../relay.mjs --help
110
+ ```
111
+
112
+ The relay pins the workspace with both the child process's cwd and Warp's own `--cwd`. It writes
113
+ artifacts under the system temp dir by default and never commits. See
114
+ [references/dispatch-and-poll.md](references/dispatch-and-poll.md).
115
+
116
+ ### 3. Wait for completion
117
+
118
+ The relay blocks until `oz` finishes. Run it with the orchestrator's background-command facility, or
119
+ background it in the shell and poll for `result.json`. A pre-run usage error exits 2 and writes no
120
+ result; a missing `oz` exits 127 and writes `status: "warp_unavailable"`.
121
+
122
+ Trust process state and the working tree over a progress display. Completion means the process
123
+ exited and `result.json` exists. Warp's report is the `finalMessage` field in `result.json` (also
124
+ printed on stdout between the report markers); the raw event stream is always in `events.jsonl`.
125
+
126
+ ### 4. Review - do not trust the self-report
127
+
128
+ Treat Warp's final message and gate claims as claims:
129
+
130
+ - Re-run the project's gates yourself.
131
+ - Read the diff against the brief, starting with `touchedFiles`.
132
+ - Run relevant guard skills if installed.
133
+ - Round-trip migrations and grep for dangling references after removals or renames.
134
+
135
+ Because there is no read-only mode to fall back on, the diff is the **only** record you get - and it
136
+ records what git can see in the workspace afterward, not everything the run did. Dispatch from a
137
+ clean tree so the two are as close as they can be. See
138
+ [references/review-and-land.md](references/review-and-land.md).
139
+
140
+ ### 5. Land it
141
+
142
+ The implementer edits the working tree; **the orchestrator commits.** Commit only after the gates
143
+ pass and the diff holds. If rework is needed, send a delta brief with `--conversation <id>` using the
144
+ `conversationId` from `result.json`, then review again.
145
+
146
+ ## Autonomy and permissions
147
+
148
+ `oz agent run` has **no sandbox, no permission mode, and no read-only mode**. A headless run reads,
149
+ writes, edits, and executes commands with your own user permissions and never prompts. There is
150
+ nothing in the CLI to restrict that surface, so this relay ships no `--read-only` flag - offering one
151
+ would imply an enforcement that does not exist. The controls you actually have are:
152
+
153
+ 1. **Scope by directory.** `--cd` pins the workspace, and the relay passes it to Warp's own `--cwd`.
154
+ Treat this as *aim*, not a fence: on oz 0.2026.05.27 shell commands did run in the pinned
155
+ workspace, but the agent's file tool resolved bare relative paths against `$HOME`. Name absolute
156
+ paths in the brief - see [references/writing-the-brief.md](references/writing-the-brief.md).
157
+ 2. **Review the diff.** `touchedFiles` is `git status --porcelain` taken after the run - post-run,
158
+ git-visible worktree state, not a log of what the agent did. It cannot show an ignored file, an
159
+ edit the run made and then reverted, or a write outside the repository (see item 1), and it
160
+ carries anything that was already dirty before dispatch. Dispatch from a clean tree so those are
161
+ the same set, and treat the diff as the best available record, not a complete one.
162
+ 3. **Snapshot egress.** `--no-snapshot` forwards Warp's flag so the end-of-run workspace snapshot is
163
+ not uploaded. Without it, the upload is Warp's default.
164
+
165
+ `--auto-approve` belongs to the interactive `warp` TUI and has no bearing on `oz agent run`.
166
+
167
+ ## Authorization model
168
+
169
+ Delegation is something the human opts into. Once they have ("run this queue", "proceed"),
170
+ committing verified, gate-passing work is the agreed contract. Two limits remain: **surface, don't
171
+ absorb** (report Warp's design decisions, defensible-but-unasked turns, and non-blocking nitpicks)
172
+ and **stop for scope changes** (if correct completion needs going beyond the brief, ask instead of
173
+ expanding the mandate). See [references/review-and-land.md](references/review-and-land.md).
174
+
175
+ ## References
176
+
177
+ - [references/writing-the-brief.md](references/writing-the-brief.md) - structure, report contract,
178
+ real gates, argv delivery, and delta briefs.
179
+ - [references/dispatch-and-poll.md](references/dispatch-and-poll.md) - flags, artifacts,
180
+ `result.json`, polling, and failure recovery.
181
+ - [references/review-and-land.md](references/review-and-land.md) - review checklist, commit
182
+ boundary, and rework through Warp conversations.
183
+ - [references/multi-task-queues.md](references/multi-task-queues.md) - sequential queues,
184
+ constraint carry-forward, progress tracking, and the final coherence pass.
185
+
186
+
187
+ ## Limitations
188
+
189
+ - Docs-only import — executable `scripts/relay.mjs` not included; see upstream for full runtime. Requires `warp` CLI, Node 18+, git.
190
+ - Relay never commits — it only returns structured result JSON; you review and land the commit.
191
+
192
+ > Adapted from [amElnagdy/delegate-skills](https://github.com/amElnagdy/delegate-skills) (MIT) — docs-only, runtime not bundled.
@@ -0,0 +1,163 @@
1
+ # Dispatch and poll
2
+
3
+ The relay is the only Warp-specific machinery in this skill. It launches `oz agent run`, captures
4
+ the event stream, and writes one result file the orchestrator can read.
5
+
6
+ ## What the relay runs
7
+
8
+ ```text
9
+ oz agent run --output-format ndjson --cwd <cd> [--model …] [--profile …] [--name …]
10
+ [--conversation …] [--skill …] [--mcp … …] [--no-snapshot] --prompt <brief>
11
+ ```
12
+
13
+ `--output-format ndjson` makes Warp emit one JSON object per line, so a long run reports progress
14
+ instead of buffering to the end. The workspace is pinned twice: the child process's cwd and Warp's
15
+ own `--cwd`.
16
+
17
+ ## Flags
18
+
19
+ | Flag | Effect |
20
+ | --- | --- |
21
+ | `--brief <file>` | Path to the brief. Omit to read it from stdin. |
22
+ | `--cd <dir>` | Working root (default: current directory). Also passed as Warp's `--cwd`. |
23
+ | `--lane <name>` | Resolve dials from a `delegate-setup` fleet lane. Explicit flags win. |
24
+ | `--model <id>` | Warp model id from `oz model list`. Letters, digits, and `. _ : / -` only. |
25
+ | `--profile <id>` | Warp agent profile. |
26
+ | `--name <label>` | Labels the run in Warp's own run list. |
27
+ | `--conversation <id>` | Continue an existing Warp conversation. Send a delta brief only. |
28
+ | `--skill <spec>` | Warp skill as the base prompt: `name`, `repo:name`, or `org/repo:name`. |
29
+ | `--mcp <spec>` | MCP config path or inline JSON. Repeatable. |
30
+ | `--no-snapshot` | Forward Warp's `--no-snapshot` so no end-of-run workspace snapshot is uploaded. |
31
+ | `--timeout <dur>` | Relay watchdog, h/m/s (default `30m`). Warp has no timeout flag of its own. |
32
+ | `--out-dir <dir>` | Artifact directory (default: a fresh dir under the system temp dir). |
33
+
34
+ Values for `--model`, `--profile`, and `--conversation` are token-validated. `--skill`, `--mcp`, and
35
+ `--name` accept freer text but must not start with `-`, which `oz` would read as another flag.
36
+
37
+ ## Artifacts
38
+
39
+ Written to `--out-dir`:
40
+
41
+ - `brief.txt` — exactly what was sent.
42
+ - `events.jsonl` — the raw ndjson stream, byte for byte. The fallback whenever a parsed field looks
43
+ wrong.
44
+ - `final.txt` — the assembled report, when one was captured.
45
+ - `stderr.txt` — everything Warp wrote to stderr.
46
+ - `result.json` — the structured result, written atomically via a temp file and rename, so a polling
47
+ reader never sees a half-written file.
48
+
49
+ ## `result.json`
50
+
51
+ Schema id `delegate-relay.result.v1`. Synthetic example:
52
+
53
+ ```json
54
+ {
55
+ "schema": "delegate-relay.result.v1",
56
+ "tool": "oz",
57
+ "status": "completed",
58
+ "exitCode": 0,
59
+ "signal": null,
60
+ "ozVersion": "Oz v0.0000.00.00.00.00.stable_01",
61
+ "workdir": "/path/to/repo",
62
+ "model": null,
63
+ "profile": null,
64
+ "snapshotDisabled": false,
65
+ "resumed": false,
66
+ "runId": "00000000-0000-0000-0000-000000000000",
67
+ "runUrl": "https://oz.warp.dev/runs/00000000-0000-0000-0000-000000000000",
68
+ "conversationId": null,
69
+ "finalMessage": "Changed src/export/csv.ts …",
70
+ "touchedFiles": [" M src/export/csv.ts", "?? src/export/csv.test.ts"],
71
+ "startedAt": "2026-01-01T00:00:00.000Z",
72
+ "finishedAt": "2026-01-01T00:04:12.000Z"
73
+ }
74
+ ```
75
+
76
+ Field notes:
77
+
78
+ - **`status`** — `completed`, `failed`, `timeout`, `aborted`, or `warp_unavailable`.
79
+ - **`touchedFiles`** — `git status --porcelain` lines. `null` when git cannot report (not a
80
+ repository, git missing); `[]` when the tree is genuinely clean. `[]` and `null` mean different
81
+ things — do not collapse them.
82
+ - **`runId` / `runUrl`** — from Warp's `run_started` system event. `runUrl` opens the run in Warp.
83
+ - **`conversationId`** — the handle to pass back as `--conversation` for rework. Present only when
84
+ Warp emitted it on the stream.
85
+ - **`finalMessage`** — Warp's own report. Assembled from the text-bearing events in the stream; see
86
+ the caveat below.
87
+ - **`stderrTail`** — last 20 stderr lines, included on every non-clean outcome.
88
+
89
+ ### What `finalMessage` actually contains
90
+
91
+ Confirmed against a live edit run on oz 0.2026.05.27. The stream carries:
92
+
93
+ | Event | Meaning |
94
+ | --- | --- |
95
+ | `{"type":"system","event_type":"run_started","run_id":…,"run_url":…}` | Run registered. |
96
+ | `{"type":"system","event_type":"conversation_started","conversation_id":…}` | The `--conversation` handle. Re-emitted on a resumed run carrying the *same* id, so `conversationId` stays stable across a rework chain. |
97
+ | `{"type":"agent","text":…}` | Agent output. **This is what `finalMessage` is built from.** |
98
+ | `{"type":"agent_reasoning","text":…}` | Private reasoning. Same shape, deliberately **excluded**. |
99
+ | `{"type":"tool_call"\|"tool_result"\|"tool_error",…}` | Tool traffic. No `text` field. |
100
+
101
+ Two consequences:
102
+
103
+ - **`finalMessage` is the whole narration, not just the closing report.** Warp emits no distinct
104
+ final-message event, so every `agent` chunk is concatenated — including running commentary like
105
+ "Now let me run both gates." This is why the brief must specify a report contract: `FILES:` /
106
+ `GATES:` / `NOTES:` at the end gives you a stable anchor to read instead of parsing prose.
107
+ - **`agent_reasoning` must stay excluded.** It carries a `text` field of exactly the same shape, so
108
+ matching on `text` alone splices the model's reasoning into the report.
109
+
110
+ Past those two rules the extraction stays tolerant — it also accepts `agent_output`, `content`, and
111
+ a nested `message.content` — so a renamed output event still reports rather than yielding an empty
112
+ `finalMessage`. If one ever does come back empty on a successful run, `events.jsonl` holds the raw
113
+ stream and `collectText` is the one place to correct.
114
+
115
+ ## Exit codes
116
+
117
+ | Code | Meaning |
118
+ | --- | --- |
119
+ | `0` | Warp exited 0 and reported no stream error. |
120
+ | `1` | Generic failure, or a stream-reported agent error even when `oz` exited 0. |
121
+ | `2` | Usage error — bad flag, bad `--timeout`, missing or empty brief. **No result file is written.** |
122
+ | `124` | The bounded `oz --version` preflight timed out; Warp was never dispatched. |
123
+ | `127` | `oz` is not on PATH. A result file **is** written, with `status: "warp_unavailable"`. |
124
+ | `128 + n` | The child died on signal *n*; `signal` records which. |
125
+
126
+ ## Polling
127
+
128
+ The relay blocks until the run ends. Background it and poll for `result.json`:
129
+
130
+ ```bash
131
+ node "<skill-dir>/scripts/relay.mjs" --brief brief.txt --cd /path/to/repo \
132
+ --out-dir /tmp/warp-run-1 &
133
+ until [ -f /tmp/warp-run-1/result.json ]; do sleep 5; done
134
+ ```
135
+
136
+ Completion means the process exited **and** `result.json` exists. Do not infer completion from
137
+ stdout going quiet — a long tool call looks identical to a finished run.
138
+
139
+ ## Timeouts and aborts
140
+
141
+ `oz` has no timeout flag, so the watchdog is the relay's. When `--timeout` expires the relay kills
142
+ the whole process group (SIGTERM, then SIGKILL after 10s) and writes `status: "timeout"`.
143
+
144
+ If the relay itself is killed, it still writes `status: "aborted"`, forwards the kill to `oz`, and
145
+ re-snapshots `touchedFiles` after a 2-second grace window so files flushed during shutdown are
146
+ recorded. On Windows the process tree is felled with `taskkill /t /f`; Windows delivers no catchable
147
+ SIGTERM, so the aborted path cannot be driven there.
148
+
149
+ **A timed-out or aborted run leaves a partially edited tree.** Inspect `git status` and `git diff`
150
+ before re-dispatching. If the state is incoherent, discard it against the recorded baseline rather
151
+ than stashing — a bare `git stash` leaves behind every file the run created. See
152
+ [review-and-land.md](review-and-land.md#rework-through-a-conversation).
153
+
154
+ ## Failure recovery
155
+
156
+ | Symptom | What it means | Do |
157
+ | --- | --- | --- |
158
+ | `warp_unavailable`, exit 127 | `oz` is not on PATH | Install the Warp Agent CLI; check `oz --version`. |
159
+ | stderr `subscribe to a Warp plan, or bring your own inference` | Authenticated, but the account has no AI quota. Warp logs it as `QuotaLimit` / "lack of AI quota". `oz` shares the Warp app's account, plan, and credits, so this is a credit condition, not a CLI-only gate | Check `oz whoami` names the account holding the plan - if not, `oz logout && oz login`. Otherwise confirm its AI credits are not spent, or store your own provider key: `warp --set-provider-api-key <openai\|anthropic\|google\|grok>` (or `/api-keys` in the TUI). Bring-your-own-key needs no paid plan. Warp's log is at `~/Library/Logs/oz/warp.log` on macOS. |
160
+ | `Device not configured` | The `warp` TUI was launched, not `oz` | Use `oz`; the TUI cannot be relayed. |
161
+ | exit 2, no result file | Usage error | Read the relay's stderr line; fix the flag. |
162
+ | `status: "timeout"` | The watchdog fired | Raise `--timeout`, or split the brief. |
163
+ | Empty `finalMessage`, exit 0 | Text extraction missed the event shape | Read `events.jsonl`; see the caveat above. |