opencode-skills-collection 4.0.45 → 4.0.47
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.
- package/bundled-skills/.antigravity-install-manifest.json +25 -1
- package/bundled-skills/agy-delegate/SKILL.md +168 -0
- package/bundled-skills/agy-delegate/references/dispatch-and-poll.md +140 -0
- package/bundled-skills/agy-delegate/references/multi-task-queues.md +59 -0
- package/bundled-skills/agy-delegate/references/review-and-land.md +103 -0
- package/bundled-skills/agy-delegate/references/writing-the-brief.md +124 -0
- package/bundled-skills/aider-delegate/SKILL.md +227 -0
- package/bundled-skills/aider-delegate/references/dispatch-and-poll.md +154 -0
- package/bundled-skills/aider-delegate/references/multi-task-queues.md +68 -0
- package/bundled-skills/aider-delegate/references/review-and-land.md +101 -0
- package/bundled-skills/aider-delegate/references/writing-the-brief.md +142 -0
- package/bundled-skills/babysit-pr/SKILL.md +343 -0
- package/bundled-skills/claude-delegate/SKILL.md +182 -0
- package/bundled-skills/claude-delegate/references/dispatch-and-poll.md +220 -0
- package/bundled-skills/claude-delegate/references/multi-task-queues.md +66 -0
- package/bundled-skills/claude-delegate/references/review-and-land.md +117 -0
- package/bundled-skills/claude-delegate/references/writing-the-brief.md +158 -0
- package/bundled-skills/cline-delegate/SKILL.md +140 -0
- package/bundled-skills/cline-delegate/references/dispatch-and-poll.md +142 -0
- package/bundled-skills/cline-delegate/references/multi-task-queues.md +58 -0
- package/bundled-skills/cline-delegate/references/review-and-land.md +80 -0
- package/bundled-skills/cline-delegate/references/writing-the-brief.md +129 -0
- package/bundled-skills/codex-delegate/SKILL.md +177 -0
- package/bundled-skills/codex-delegate/references/dispatch-and-poll.md +161 -0
- package/bundled-skills/codex-delegate/references/multi-task-queues.md +66 -0
- package/bundled-skills/codex-delegate/references/review-and-land.md +126 -0
- package/bundled-skills/codex-delegate/references/writing-the-brief.md +125 -0
- package/bundled-skills/commandcode-delegate/SKILL.md +188 -0
- package/bundled-skills/commandcode-delegate/references/dispatch-and-poll.md +222 -0
- package/bundled-skills/commandcode-delegate/references/multi-task-queues.md +81 -0
- package/bundled-skills/commandcode-delegate/references/review-and-land.md +144 -0
- package/bundled-skills/commandcode-delegate/references/writing-the-brief.md +147 -0
- package/bundled-skills/copilot-delegate/SKILL.md +159 -0
- package/bundled-skills/copilot-delegate/references/dispatch-and-poll.md +143 -0
- package/bundled-skills/copilot-delegate/references/multi-task-queues.md +58 -0
- package/bundled-skills/copilot-delegate/references/review-and-land.md +80 -0
- package/bundled-skills/copilot-delegate/references/writing-the-brief.md +140 -0
- package/bundled-skills/cursor-delegate/SKILL.md +170 -0
- package/bundled-skills/cursor-delegate/references/dispatch-and-poll.md +162 -0
- package/bundled-skills/cursor-delegate/references/multi-task-queues.md +59 -0
- package/bundled-skills/cursor-delegate/references/review-and-land.md +93 -0
- package/bundled-skills/cursor-delegate/references/writing-the-brief.md +126 -0
- package/bundled-skills/debate-review/SKILL.md +85 -0
- package/bundled-skills/debate-review/assets/prompts/review-debate.md +51 -0
- package/bundled-skills/debate-review/assets/prompts/review-main.md +64 -0
- package/bundled-skills/debate-review/assets/prompts/review-rebuttal.md +42 -0
- package/bundled-skills/debate-review/references/comment-format.md +63 -0
- package/bundled-skills/debate-review/references/schema.md +95 -0
- package/bundled-skills/delegate-setup/SKILL.md +215 -0
- package/bundled-skills/delegate-setup/references/schema.md +100 -0
- package/bundled-skills/delegate-setup/references/setup-dialogue.md +101 -0
- package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
- package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
- package/bundled-skills/docs/maintainers/repo-growth-seo.md +1 -1
- package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
- package/bundled-skills/docs/users/aas-core.md +1 -1
- package/bundled-skills/docs/users/bundles.md +1 -1
- package/bundled-skills/docs/users/claude-code-skills.md +1 -1
- package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
- package/bundled-skills/docs/users/kiro-integration.md +1 -1
- package/bundled-skills/docs/users/usage.md +3 -3
- package/bundled-skills/docs/users/visual-guide.md +4 -4
- package/bundled-skills/falsify/SKILL.md +263 -0
- package/bundled-skills/falsify/references/bias-catalog.md +42 -0
- package/bundled-skills/falsify/references/mental-models.md +135 -0
- package/bundled-skills/falsify/templates/thinking-ledger.md +104 -0
- package/bundled-skills/graceful-shutdown/SKILL.md +379 -0
- package/bundled-skills/grok-delegate/SKILL.md +179 -0
- package/bundled-skills/grok-delegate/references/dispatch-and-poll.md +171 -0
- package/bundled-skills/grok-delegate/references/multi-task-queues.md +67 -0
- package/bundled-skills/grok-delegate/references/review-and-land.md +130 -0
- package/bundled-skills/grok-delegate/references/writing-the-brief.md +119 -0
- package/bundled-skills/kimi-delegate/SKILL.md +137 -0
- package/bundled-skills/kimi-delegate/references/dispatch-and-poll.md +134 -0
- package/bundled-skills/kimi-delegate/references/multi-task-queues.md +58 -0
- package/bundled-skills/kimi-delegate/references/review-and-land.md +92 -0
- package/bundled-skills/kimi-delegate/references/writing-the-brief.md +132 -0
- package/bundled-skills/omp-delegate/SKILL.md +186 -0
- package/bundled-skills/omp-delegate/references/dispatch-and-poll.md +155 -0
- package/bundled-skills/omp-delegate/references/multi-task-queues.md +59 -0
- package/bundled-skills/omp-delegate/references/review-and-land.md +95 -0
- package/bundled-skills/omp-delegate/references/writing-the-brief.md +149 -0
- package/bundled-skills/opencode-delegate/SKILL.md +189 -0
- package/bundled-skills/opencode-delegate/references/dispatch-and-poll.md +156 -0
- package/bundled-skills/opencode-delegate/references/multi-task-queues.md +68 -0
- package/bundled-skills/opencode-delegate/references/review-and-land.md +125 -0
- package/bundled-skills/opencode-delegate/references/writing-the-brief.md +142 -0
- package/bundled-skills/pi-delegate/SKILL.md +148 -0
- package/bundled-skills/pi-delegate/references/dispatch-and-poll.md +146 -0
- package/bundled-skills/pi-delegate/references/multi-task-queues.md +59 -0
- package/bundled-skills/pi-delegate/references/review-and-land.md +95 -0
- package/bundled-skills/pi-delegate/references/writing-the-brief.md +132 -0
- package/bundled-skills/qoder-delegate/SKILL.md +151 -0
- package/bundled-skills/qoder-delegate/references/dispatch-and-poll.md +119 -0
- package/bundled-skills/qoder-delegate/references/multi-task-queues.md +43 -0
- package/bundled-skills/qoder-delegate/references/review-and-land.md +66 -0
- package/bundled-skills/qoder-delegate/references/writing-the-brief.md +85 -0
- package/bundled-skills/sandbase-mcp/SKILL.md +194 -0
- package/bundled-skills/ui-slop-score/SKILL.md +2 -2
- package/bundled-skills/unsloth-finetuning/SKILL.md +352 -0
- package/bundled-skills/vibe-delegate/SKILL.md +147 -0
- package/bundled-skills/vibe-delegate/references/dispatch-and-poll.md +144 -0
- package/bundled-skills/vibe-delegate/references/multi-task-queues.md +59 -0
- package/bundled-skills/vibe-delegate/references/review-and-land.md +87 -0
- package/bundled-skills/vibe-delegate/references/writing-the-brief.md +131 -0
- package/bundled-skills/warp-delegate/SKILL.md +192 -0
- package/bundled-skills/warp-delegate/references/dispatch-and-poll.md +163 -0
- package/bundled-skills/warp-delegate/references/multi-task-queues.md +80 -0
- package/bundled-skills/warp-delegate/references/review-and-land.md +123 -0
- package/bundled-skills/warp-delegate/references/writing-the-brief.md +105 -0
- package/bundled-skills/zcode-delegate/SKILL.md +202 -0
- package/bundled-skills/zcode-delegate/references/dispatch-and-poll.md +113 -0
- package/bundled-skills/zcode-delegate/references/multi-task-queues.md +87 -0
- package/bundled-skills/zcode-delegate/references/review-and-land.md +81 -0
- package/bundled-skills/zcode-delegate/references/writing-the-brief.md +120 -0
- package/package.json +1 -1
- package/skills_index.json +660 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Writing the brief
|
|
2
|
+
|
|
3
|
+
A brief is the entire task as Antigravity will see it. It runs in a separate conversation with **no
|
|
4
|
+
memory of your conversation, no access to your prior notes, and no shared context** - only the text you
|
|
5
|
+
send and whatever it can inspect in the workspace. If a constraint is not in the brief or discoverable
|
|
6
|
+
in the repo, it does not exist for Antigravity.
|
|
7
|
+
|
|
8
|
+
## Model choice
|
|
9
|
+
|
|
10
|
+
`agy` has a configured default model, so a fresh dispatch does not require `--model`. Pass `--model`
|
|
11
|
+
only when the human has named a preferred Antigravity model label for this task. `agy models` shows the
|
|
12
|
+
available labels.
|
|
13
|
+
|
|
14
|
+
A resumed run keeps the conversation context. Send only the delta brief.
|
|
15
|
+
|
|
16
|
+
## The shape that works
|
|
17
|
+
|
|
18
|
+
Antigravity responds well to compact, block-structured prompts with XML tags rather than long prose.
|
|
19
|
+
State the task, what "done" looks like, how to behave by default, and the few constraints that actually
|
|
20
|
+
matter. Add a block only when the task needs it.
|
|
21
|
+
|
|
22
|
+
```xml
|
|
23
|
+
<task>
|
|
24
|
+
One or two sentences: the concrete job and where it lives. Then the specifics - current state, what to
|
|
25
|
+
change, and explicitly what to leave untouched. The "leave untouched" list is what keeps Antigravity
|
|
26
|
+
from wandering into unrelated refactors.
|
|
27
|
+
</task>
|
|
28
|
+
|
|
29
|
+
<verification_loop>
|
|
30
|
+
Run these before finishing and fix anything they surface, don't just report it:
|
|
31
|
+
<the project's real test command>
|
|
32
|
+
<the project's real lint/format command>
|
|
33
|
+
<the project's real build/typecheck command>
|
|
34
|
+
Confirm the working tree shows only the intended changes afterward.
|
|
35
|
+
</verification_loop>
|
|
36
|
+
|
|
37
|
+
<action_safety>
|
|
38
|
+
Keep changes scoped to the task. No unrelated refactors, renames, or cleanup unless required for
|
|
39
|
+
correctness. Do NOT run git add or git commit - the orchestrator commits after reviewing. Leave the
|
|
40
|
+
work uncommitted in the working tree.
|
|
41
|
+
</action_safety>
|
|
42
|
+
|
|
43
|
+
<structured_output_contract>
|
|
44
|
+
End with a report in this exact shape:
|
|
45
|
+
1. What changed and why
|
|
46
|
+
2. Files touched
|
|
47
|
+
3. Gate outcomes (paste the test/lint counts)
|
|
48
|
+
4. Anything you deviated on, left open, or want a decision on
|
|
49
|
+
</structured_output_contract>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
That four-block skeleton covers most implementation tasks. Reach for extra blocks when the task profile
|
|
53
|
+
calls for them:
|
|
54
|
+
|
|
55
|
+
- **Debugging / open-ended fixes** - add `<completeness_contract>` (resolve fully, don't stop at the
|
|
56
|
+
first plausible fix) and `<missing_context_gating>` (don't guess missing repo facts; find them or
|
|
57
|
+
state what's unknown).
|
|
58
|
+
- **Research / recommendations** - add `<research_mode>` (separate observed facts, inferences, open
|
|
59
|
+
questions).
|
|
60
|
+
|
|
61
|
+
## Always ask for the report explicitly
|
|
62
|
+
|
|
63
|
+
The relay captures `agy --print` stdout as `finalMessage`. If Antigravity finishes without a closing
|
|
64
|
+
summary, the result is not useful to review. The `<structured_output_contract>` block is what guarantees
|
|
65
|
+
a report you can read.
|
|
66
|
+
|
|
67
|
+
## Discover the real gates
|
|
68
|
+
|
|
69
|
+
`<verification_loop>` is only useful if it names the project's *actual* commands. Read the repo's
|
|
70
|
+
`AGENTS.md` / `CLAUDE.md` / `Makefile` / `package.json` first and copy the real ones in (`make test`,
|
|
71
|
+
`npm run lint`, `cargo test`, `pytest -q`, whatever it is). A brief that says "run the tests" without
|
|
72
|
+
naming them gets you an implementer that guesses - or skips.
|
|
73
|
+
|
|
74
|
+
## Honor the repo's conventions
|
|
75
|
+
|
|
76
|
+
If the project has house rules in `AGENTS.md`, `CLAUDE.md`, or a similar file, restate the load-bearing
|
|
77
|
+
ones in the brief. Antigravity can inspect the workspace, but compliance is more reliable when the
|
|
78
|
+
important rules are directly in front of it.
|
|
79
|
+
|
|
80
|
+
## One task per brief
|
|
81
|
+
|
|
82
|
+
Keep each brief to a single, bounded job. "Review this, fix what you find, update the docs, and suggest
|
|
83
|
+
a roadmap" produces a muddled run; split it into separate dispatches. One brief -> one Antigravity run
|
|
84
|
+
-> one commit keeps review and rollback clean.
|
|
85
|
+
|
|
86
|
+
## Premises freeze at dispatch
|
|
87
|
+
|
|
88
|
+
The implementer starts from the brief's facts and there is no steering channel mid-run. Audit the
|
|
89
|
+
fact block before sending — ownership, target branch, constraints, anything a judgment call rests
|
|
90
|
+
on. If a premise turns out wrong while the run is live, stop the run and re-dispatch a corrected
|
|
91
|
+
brief rather than discounting the output afterward; for a write-capable run, inspect the working
|
|
92
|
+
tree and reconcile any partial or premise-contaminated edits — keep or revert them — before the
|
|
93
|
+
re-dispatch.
|
|
94
|
+
|
|
95
|
+
## A worked example
|
|
96
|
+
|
|
97
|
+
```xml
|
|
98
|
+
<task>
|
|
99
|
+
In the payments service at services/billing/, the refund path double-charges when a refund is retried
|
|
100
|
+
after a network timeout. Make refund submission idempotent: check for an existing refund by idempotency
|
|
101
|
+
key before creating a new one. Touch only services/billing/refund.py and its tests. Leave the charge
|
|
102
|
+
path, API routes, and data models untouched.
|
|
103
|
+
</task>
|
|
104
|
+
|
|
105
|
+
<verification_loop>
|
|
106
|
+
Run and make green before finishing:
|
|
107
|
+
pytest tests/billing/ -q
|
|
108
|
+
ruff check services/billing/
|
|
109
|
+
Confirm git status shows only refund.py and its test file changed.
|
|
110
|
+
</verification_loop>
|
|
111
|
+
|
|
112
|
+
<action_safety>
|
|
113
|
+
Scope strictly to the refund idempotency fix. No unrelated refactors. Do NOT git add or commit; leave
|
|
114
|
+
changes in the working tree for review.
|
|
115
|
+
</action_safety>
|
|
116
|
+
|
|
117
|
+
<structured_output_contract>
|
|
118
|
+
Report: (1) the root cause and your fix, (2) files touched, (3) pytest + ruff outcomes with counts,
|
|
119
|
+
(4) anything you left open or want decided.
|
|
120
|
+
</structured_output_contract>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Send this with `relay.mjs` (see [dispatch-and-poll.md](dispatch-and-poll.md)); review the result and
|
|
124
|
+
commit it yourself (see [review-and-land.md](review-and-land.md)).
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aider-delegate
|
|
3
|
+
description: Delegate coding tasks to Aider (`aider`) only when the user explicitly
|
|
4
|
+
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 `aider` CLI (`python -m pip install aider-chat`), Node
|
|
14
|
+
18+, and git. Aider must be able to authenticate to a model before dispatch - export
|
|
15
|
+
the provider key it expects (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, …) or set it
|
|
16
|
+
in Aider's own config; a local OpenAI-compatible endpoint still needs a non-empty
|
|
17
|
+
`OPENAI_API_KEY`. The orchestrating agent must be able to run shell commands and
|
|
18
|
+
read files. Shell examples assume bash/zsh (macOS/Linux, or Git Bash/WSL on Windows).
|
|
19
|
+
metadata:
|
|
20
|
+
version: 0.5.0
|
|
21
|
+
---
|
|
22
|
+
# Aider Delegate
|
|
23
|
+
|
|
24
|
+
## When to Use
|
|
25
|
+
|
|
26
|
+
- You want to delegate a bounded coding task to a separate `aider` implementer (`Aider`) and then review its diff yourself.
|
|
27
|
+
- The user explicitly asked for delegation to this implementer.
|
|
28
|
+
|
|
29
|
+
You are the **orchestrator**. Hand a bounded coding task to a separate **implementer** - Aider - then
|
|
30
|
+
review what it produced and land it yourself. You write the brief and own the judgment; Aider does the
|
|
31
|
+
typing in its own run; you verify and commit.
|
|
32
|
+
|
|
33
|
+
The loop needs only a shell command and file access, so any comparable orchestrator can drive it.
|
|
34
|
+
|
|
35
|
+
## The one thing to know about Aider
|
|
36
|
+
|
|
37
|
+
**Aider commits by default.** Two of its defaults would destroy the reviewable diff this skill exists
|
|
38
|
+
to produce:
|
|
39
|
+
|
|
40
|
+
- `--auto-commits` (default `True`) - Aider commits its own edits after each exchange.
|
|
41
|
+
- `--dirty-commits` (default `True`) - Aider commits **your** pre-existing uncommitted work before it
|
|
42
|
+
starts editing.
|
|
43
|
+
|
|
44
|
+
The relay always passes `--no-auto-commits` and `--no-dirty-commits`, and neither is configurable
|
|
45
|
+
through it. If you ever drive `aider` by hand instead of through the relay, pass both yourself, or the
|
|
46
|
+
work lands as commits you never reviewed. The relay also passes `--no-gitignore`, because Aider
|
|
47
|
+
otherwise writes `.aider*` into `.gitignore` on startup and dirties the tree you are about to read.
|
|
48
|
+
|
|
49
|
+
## When NOT to use this
|
|
50
|
+
|
|
51
|
+
- The task is small enough to do inline; delegation overhead is not worth it.
|
|
52
|
+
- The `aider` CLI is not installed, or no model is configured for it.
|
|
53
|
+
- You want the implementer to manage its own commits. Aider can, but this skill deliberately turns
|
|
54
|
+
that off - the diff is the deliverable.
|
|
55
|
+
|
|
56
|
+
## Prerequisites (check once)
|
|
57
|
+
|
|
58
|
+
1. Install Aider - `python -m pip install aider-chat`, or the standalone installer from the
|
|
59
|
+
[Aider install docs](https://aider.chat/docs/install.html).
|
|
60
|
+
2. Configure a model. Aider reads provider keys from the environment (`OPENAI_API_KEY`,
|
|
61
|
+
`ANTHROPIC_API_KEY`, …) or its own config; see [Aider's model docs](https://aider.chat/docs/llms.html).
|
|
62
|
+
3. Confirm `aider --version` succeeds.
|
|
63
|
+
4. Work in, or point `--cd` at, the target git repository.
|
|
64
|
+
|
|
65
|
+
## Choose the model
|
|
66
|
+
|
|
67
|
+
Aider uses its own configured model when `--model` is omitted. Pass `--model <name>` to pick another.
|
|
68
|
+
|
|
69
|
+
## Local and self-hosted models
|
|
70
|
+
|
|
71
|
+
Aider talks to any OpenAI-compatible endpoint, so this is also the skill for delegating to a model
|
|
72
|
+
running on the user's own hardware - llama.cpp's server, Ollama, vLLM, LM Studio, or anything else
|
|
73
|
+
that serves the same API. Pair `--model` with `--api-base`:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
node "<skill-dir>/scripts/relay.mjs" --brief brief.txt --cd /path/to/repo \
|
|
77
|
+
--model openai/<served-model-name> --api-base http://127.0.0.1:<port>/v1
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Three things differ from a hosted provider:
|
|
81
|
+
|
|
82
|
+
- **The `openai/` prefix is required.** It tells Aider to speak the OpenAI protocol to your endpoint;
|
|
83
|
+
the part after it is whatever name your server reports, not a provider catalog name.
|
|
84
|
+
- **A placeholder key is still needed.** Export any non-empty `OPENAI_API_KEY`. The client library
|
|
85
|
+
requires the header even when the server ignores its value.
|
|
86
|
+
- **Ask for a smaller edit format.** Local models often fail Aider's default `diff` format, which
|
|
87
|
+
requires exact search/replace blocks. `--edit-format whole` trades tokens for reliability; keep the
|
|
88
|
+
brief's scope tight with `--file` so whole-file rewrites stay cheap.
|
|
89
|
+
|
|
90
|
+
A local endpoint that is not running looks like a hang, not an error: Aider retries the connection
|
|
91
|
+
until the relay's `--timeout` watchdog fires and reports `status: "timeout"`. Confirm the server is up
|
|
92
|
+
before dispatching a long brief.
|
|
93
|
+
|
|
94
|
+
### Staying offline
|
|
95
|
+
|
|
96
|
+
No account or provider registration is involved: Aider is a pip install, the endpoint is yours, and
|
|
97
|
+
`OPENAI_API_KEY` only has to be non-empty. The relay pins the flags that would otherwise reach the
|
|
98
|
+
network on their own - `--no-check-update`, `--no-analytics` (Aider's own default is `random`, which
|
|
99
|
+
opts some sessions in by itself), and `--no-detect-urls`, without which Aider offers to scrape any URL
|
|
100
|
+
in the brief and `--yes-always` accepts that offer silently.
|
|
101
|
+
|
|
102
|
+
`--no-suggest-shell-commands` closes the remaining path by which a run could reach the network without
|
|
103
|
+
being asked to. What stays outside the relay's control is the brief itself: instructions that tell
|
|
104
|
+
Aider to install a package or call an API will still be carried out, and `--auto-lint` runs the
|
|
105
|
+
repository's own tooling. Offline here means nothing in the dispatch path reaches out on its own - not
|
|
106
|
+
that a sandbox is stopping it.
|
|
107
|
+
|
|
108
|
+
## The loop
|
|
109
|
+
|
|
110
|
+
Run these five steps per task. Steps 1, 4, and 5 require judgment; 2 and 3 are mechanical.
|
|
111
|
+
|
|
112
|
+
### 1. Write the brief
|
|
113
|
+
|
|
114
|
+
Aider sees only the text you send plus the files in its editing scope - no chat history or shared
|
|
115
|
+
context. Include the goal, current state, what to change, what to leave untouched, the project's
|
|
116
|
+
**actual** gates, and a report contract. Keep one task per brief. See
|
|
117
|
+
[references/writing-the-brief.md](references/writing-the-brief.md).
|
|
118
|
+
|
|
119
|
+
### 2. Dispatch
|
|
120
|
+
|
|
121
|
+
Use the bundled helper. It wraps Aider's headless `--message-file` mode, captures the run, and writes
|
|
122
|
+
`result.json`. (`<skill-dir>` is the installed folder containing this `SKILL.md`.)
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
node "<skill-dir>/scripts/relay.mjs" --brief brief.txt --cd /path/to/repo
|
|
126
|
+
# choose a model: add --model <name>
|
|
127
|
+
# point at an OpenAI-compatible server: add --api-base <url>
|
|
128
|
+
# scope the edit surface: add --file <path> (repeatable), --read <path> for context only
|
|
129
|
+
# dry run, no files modified: add --read-only
|
|
130
|
+
# continue the previous chat: add --resume-last (delta brief only)
|
|
131
|
+
# hard time limit (watchdog): add --timeout 2h (the 30m default suits short runs; implementation briefs routinely need 1-2h)
|
|
132
|
+
# see all options: node .../relay.mjs --help
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
The child process's cwd pins the workspace. The brief is delivered with `--message-file`, so it never
|
|
136
|
+
rides argv: it stays out of the host process list and clear of the OS argument size cap. The relay
|
|
137
|
+
writes artifacts under the system temp dir by default and never commits. See
|
|
138
|
+
[references/dispatch-and-poll.md](references/dispatch-and-poll.md).
|
|
139
|
+
|
|
140
|
+
### 3. Wait for completion
|
|
141
|
+
|
|
142
|
+
The helper blocks until Aider finishes. Run it with the orchestrator's background-command facility, or
|
|
143
|
+
background it in the shell and poll for `result.json`. A pre-run usage error exits 2 and writes no
|
|
144
|
+
result; a missing `aider` exits 127 and writes `status: "aider_unavailable"`.
|
|
145
|
+
|
|
146
|
+
Trust process state and the working tree over a progress display. Completion means the process exited
|
|
147
|
+
and `result.json` exists. Aider's report is the `finalMessage` field in `result.json` (also printed in
|
|
148
|
+
full on stdout between the report markers).
|
|
149
|
+
|
|
150
|
+
Aider exits 0 even when it never reached a model, so the relay scans the run for Aider's own endpoint
|
|
151
|
+
and authentication errors and reports `status: "failed"` when it finds one. Treat a `failed` status
|
|
152
|
+
with an `error` mentioning the endpoint as a configuration problem, not a coding failure.
|
|
153
|
+
|
|
154
|
+
### 4. Review - do not trust the self-report
|
|
155
|
+
|
|
156
|
+
Treat Aider's final message and gate claims as claims:
|
|
157
|
+
|
|
158
|
+
- Re-run the project's gates yourself.
|
|
159
|
+
- Read the diff against the brief, starting with `touchedFiles`.
|
|
160
|
+
- Run relevant guard skills if installed.
|
|
161
|
+
- Round-trip migrations and grep for dangling references after removals or renames.
|
|
162
|
+
|
|
163
|
+
Aider's `--auto-lint` is on by default, so it may have already run a linter and fixed its own
|
|
164
|
+
complaints. That is Aider's lint, not your gates - run yours anyway. See
|
|
165
|
+
[references/review-and-land.md](references/review-and-land.md).
|
|
166
|
+
|
|
167
|
+
### 5. Land it
|
|
168
|
+
|
|
169
|
+
The implementer edits the working tree; **the orchestrator commits.** Commit only after the gates pass
|
|
170
|
+
and the diff holds. If rework is needed, send a delta brief with `--resume-last`, then review again.
|
|
171
|
+
|
|
172
|
+
## Autonomy and permissions
|
|
173
|
+
|
|
174
|
+
The relay passes `--yes-always`, Aider's own term for auto-confirming every prompt, because a headless
|
|
175
|
+
run cannot answer one. **Understand what that consents to in advance.** Auto-confirmation applies to
|
|
176
|
+
every prompt Aider would otherwise raise, and Aider's prompts are not limited to file edits: left at
|
|
177
|
+
its defaults it also offers to run shell commands it has suggested, and `--yes-always` would accept
|
|
178
|
+
those with nobody reading them. The relay therefore pins `--no-suggest-shell-commands`, which removes
|
|
179
|
+
that path.
|
|
180
|
+
|
|
181
|
+
What remains is not a sandbox, and nothing here pretends otherwise. Aider has no permission modes and
|
|
182
|
+
no isolation: within its file scope it edits freely, and `--auto-lint` (on by default) runs whatever
|
|
183
|
+
linter the repository configures. A brief that tells Aider to run a command still gets a command run.
|
|
184
|
+
Delegation is the authorization; if a run must not be able to touch the host, run it in a container or
|
|
185
|
+
a throwaway worktree, because no flag in this relay will give you that.
|
|
186
|
+
|
|
187
|
+
**File selection is not a security boundary.** `--file`, `--read`, and `--subtree-only` set what Aider
|
|
188
|
+
puts in its chat context, which is a scoping and token-cost decision. They do not confine what it can
|
|
189
|
+
reach. See [references/writing-the-brief.md](references/writing-the-brief.md).
|
|
190
|
+
|
|
191
|
+
`--read-only` maps to Aider's `--dry-run`, which performs the run without modifying files. The relay
|
|
192
|
+
does not independently verify that claim - it reports what `git status --porcelain` shows and warns if
|
|
193
|
+
a `--read-only` run left the tree changed. `touchedFiles` and the diff, not a flag, are the guarantee.
|
|
194
|
+
|
|
195
|
+
## Resume
|
|
196
|
+
|
|
197
|
+
Aider has no session ids. Its resume unit is the chat history file it keeps in the repository
|
|
198
|
+
(`.aider.chat.history.md`), so `--resume-last` maps to Aider's `--restore-chat-history` and
|
|
199
|
+
`--history-file` pins a specific one. Because that history lives in the repo, resume is per-worktree,
|
|
200
|
+
not per-user: two clones of the same project do not share it.
|
|
201
|
+
|
|
202
|
+
## Authorization model
|
|
203
|
+
|
|
204
|
+
Delegation is something the human opts into. Once they have ("run this queue", "proceed"), committing
|
|
205
|
+
verified, gate-passing work is the agreed contract. Two limits remain: **surface, don't absorb**
|
|
206
|
+
(report Aider's design decisions, defensible-but-unasked turns, and non-blocking nitpicks) and **stop
|
|
207
|
+
for scope changes** (if correct completion needs going beyond the brief, ask instead of expanding the
|
|
208
|
+
mandate). See [references/review-and-land.md](references/review-and-land.md).
|
|
209
|
+
|
|
210
|
+
## References
|
|
211
|
+
|
|
212
|
+
- [references/writing-the-brief.md](references/writing-the-brief.md) - structure, report contract,
|
|
213
|
+
real gates, file scope, and delta briefs.
|
|
214
|
+
- [references/dispatch-and-poll.md](references/dispatch-and-poll.md) - flags, artifacts,
|
|
215
|
+
`result.json`, polling, and failure recovery.
|
|
216
|
+
- [references/review-and-land.md](references/review-and-land.md) - review checklist, the commit
|
|
217
|
+
boundary, and rework through Aider's chat history.
|
|
218
|
+
- [references/multi-task-queues.md](references/multi-task-queues.md) - sequential queues, constraint
|
|
219
|
+
carry-forward, progress tracking, and the final coherence pass.
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
## Limitations
|
|
223
|
+
|
|
224
|
+
- Docs-only import — executable `scripts/relay.mjs` not included; see upstream for full runtime. Requires `aider` CLI, Node 18+, git.
|
|
225
|
+
- Relay never commits — it only returns structured result JSON; you review and land the commit.
|
|
226
|
+
|
|
227
|
+
> Adapted from [amElnagdy/delegate-skills](https://github.com/amElnagdy/delegate-skills) (MIT) — docs-only, runtime not bundled.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Dispatch and poll
|
|
2
|
+
|
|
3
|
+
The relay (`scripts/relay.mjs`) is the whole dispatch mechanic: it launches Aider headlessly, captures
|
|
4
|
+
the run, and writes a structured `result.json`. Node built-ins only, no dependencies, and it never
|
|
5
|
+
commits.
|
|
6
|
+
|
|
7
|
+
## Before the first run
|
|
8
|
+
|
|
9
|
+
1. `aider --version` succeeds.
|
|
10
|
+
2. A model is configured - either Aider's own default, or the `--model` you intend to pass. Provider
|
|
11
|
+
keys come from the environment or Aider's config.
|
|
12
|
+
3. The target directory is a git repository. Without git the relay cannot report `touchedFiles`, and
|
|
13
|
+
the diff is the deliverable.
|
|
14
|
+
4. The working tree is clean, or you know exactly what was already dirty. `touchedFiles` reports
|
|
15
|
+
everything git sees, not only what Aider wrote.
|
|
16
|
+
|
|
17
|
+
## Dispatching
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
node "<skill-dir>/scripts/relay.mjs" --brief brief.txt --cd /path/to/repo
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
| Flag | Effect |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| `--brief <file>` | Path to the brief. Omit to read it from stdin. |
|
|
26
|
+
| `--cd <dir>` | Working root for Aider. Default: current directory. |
|
|
27
|
+
| `--lane <name>` | Apply a fleet lane's dials from delegate-setup. Explicit flags win. |
|
|
28
|
+
| `--model <name>` | Aider's `--model`. Default: Aider's own configured model. |
|
|
29
|
+
| `--api-base <url>` | Aider's `--openai-api-base`, for an OpenAI-compatible server. |
|
|
30
|
+
| `--edit-format <fmt>` | Aider's `--edit-format` (e.g. `diff`, `whole`, `udiff`). |
|
|
31
|
+
| `--architect` | Aider's `--architect` edit format. Mutually exclusive with `--edit-format`. |
|
|
32
|
+
| `--file <path>` | Add a file to Aider's editing scope. Repeatable. |
|
|
33
|
+
| `--read <path>` | Add a read-only context file. Repeatable. |
|
|
34
|
+
| `--subtree-only` | Restrict Aider to the current subtree. |
|
|
35
|
+
| `--read-only` | Dispatch as Aider's `--dry-run`: no files modified. |
|
|
36
|
+
| `--resume-last` | Restore Aider's chat history for this repo. Send a delta brief. |
|
|
37
|
+
| `--history-file <path>` | Pin a specific chat history file (Aider's `--chat-history-file`). |
|
|
38
|
+
| `--timeout <dur>` | Relay watchdog, h/m/s. Default `30m`. |
|
|
39
|
+
| `--out-dir <dir>` | Where run artifacts go. Default: a fresh dir under the system temp dir. A reused directory has its previous `final.txt` and `result.json` removed before dispatch, so a poller can never read the last run's result as this one's. |
|
|
40
|
+
|
|
41
|
+
Relative `--file`, `--read`, and `--history-file` paths resolve against `--cd`, not the relay's own
|
|
42
|
+
cwd, so they mean what they look like they mean regardless of flag order.
|
|
43
|
+
|
|
44
|
+
### Local and self-hosted endpoints
|
|
45
|
+
|
|
46
|
+
`--api-base` points Aider at any OpenAI-compatible server - llama.cpp's server, Ollama, vLLM,
|
|
47
|
+
LM Studio - so a delegated run can go to a model on the user's own hardware:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
node "<skill-dir>/scripts/relay.mjs" --brief brief.txt --cd /path/to/repo \
|
|
51
|
+
--model openai/<served-model-name> --api-base http://127.0.0.1:<port>/v1 \
|
|
52
|
+
--edit-format whole --file src/target.py
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
The `openai/` prefix selects the protocol, not a provider catalog entry; the name after it is
|
|
56
|
+
whatever the server reports. Export any non-empty `OPENAI_API_KEY` - the client library requires the
|
|
57
|
+
header even when the server ignores its value. `--edit-format whole` is the usual choice for smaller
|
|
58
|
+
local models, which frequently cannot produce the exact search/replace blocks Aider's default `diff`
|
|
59
|
+
format needs; pair it with `--file` so whole-file rewrites stay small.
|
|
60
|
+
|
|
61
|
+
A server that is not listening reads as a hang rather than an error: Aider retries the connection
|
|
62
|
+
until the `--timeout` watchdog fires and the relay reports `status: "timeout"`. Check the endpoint is
|
|
63
|
+
up before dispatching a long brief.
|
|
64
|
+
|
|
65
|
+
The default `30m` watchdog suits short runs. Implementation briefs routinely need `--timeout 1h` or
|
|
66
|
+
`2h`; a watchdog that fires mid-edit leaves a partial tree.
|
|
67
|
+
|
|
68
|
+
## What the relay always passes
|
|
69
|
+
|
|
70
|
+
These are not configurable, and the reason matters:
|
|
71
|
+
|
|
72
|
+
| Flag | Why |
|
|
73
|
+
| --- | --- |
|
|
74
|
+
| `--no-auto-commits` | Aider's `--auto-commits` defaults to `True` and would commit its own edits. |
|
|
75
|
+
| `--no-dirty-commits` | Aider's `--dirty-commits` defaults to `True` and would commit your pre-existing uncommitted work before starting. |
|
|
76
|
+
| `--no-gitignore` | Aider otherwise writes `.aider*` into `.gitignore` on startup, dirtying the tree. |
|
|
77
|
+
| `--yes-always` | A headless run cannot answer a confirmation prompt. |
|
|
78
|
+
| `--no-suggest-shell-commands` | The other half of `--yes-always`. Aider's `--suggest-shell-commands` defaults to `True`, and an auto-confirmed suggestion runs on the host with nobody reading it. This is a blast-radius reduction, not a sandbox. |
|
|
79
|
+
| `--no-analytics` | No telemetry from a dispatched run. Aider's own `--analytics` default is `random`, which opts some sessions in by itself. |
|
|
80
|
+
| `--no-check-update` | No version check on a dispatch path. |
|
|
81
|
+
| `--no-detect-urls` | Aider's `--detect-urls` defaults to `True` and offers to scrape any URL in the message. Under `--yes-always` that offer is auto-accepted, so a URL in the brief becomes an unannounced outbound fetch - and, with Playwright absent, a run that hangs until the watchdog fires. |
|
|
82
|
+
| `--no-pretty` | Colour codes would corrupt the captured report. |
|
|
83
|
+
| `--no-stream` | Whole responses; the relay captures text, not a live view. |
|
|
84
|
+
|
|
85
|
+
The first two are why this skill can promise a reviewable diff. If you drive `aider` by hand instead,
|
|
86
|
+
pass them yourself.
|
|
87
|
+
|
|
88
|
+
## Artifacts and result fields
|
|
89
|
+
|
|
90
|
+
Everything lands in the run directory (temp by default, so the repo under review stays clean):
|
|
91
|
+
|
|
92
|
+
| File | Contents |
|
|
93
|
+
| --- | --- |
|
|
94
|
+
| `brief.txt` | The brief as dispatched - and the file Aider reads via `--message-file`. |
|
|
95
|
+
| `final.txt` | Aider's report, when one was captured. |
|
|
96
|
+
| `stderr.txt` | Aider's stderr, streamed through to your terminal as well. |
|
|
97
|
+
| `result.json` | The structured result, written atomically. |
|
|
98
|
+
|
|
99
|
+
`result.json` speaks `delegate-relay.result.v1`:
|
|
100
|
+
|
|
101
|
+
| Field | Meaning |
|
|
102
|
+
| --- | --- |
|
|
103
|
+
| `status` | `completed`, `failed`, `timeout`, `aborted`, or `aider_unavailable`. |
|
|
104
|
+
| `exitCode` | Aider's exit code, or 128+signal, or 127 when the binary is missing. An exit-0 model/endpoint failure detected in the report is remapped to `1`. |
|
|
105
|
+
| `signal` | The signal that killed the child, else `null`. |
|
|
106
|
+
| `aiderVersion` | What `aider --version` reported. |
|
|
107
|
+
| `finalMessage` | Aider's own report. |
|
|
108
|
+
| `touchedFiles` | `git status --porcelain` lines. `[]` when the tree is clean, `null` when git cannot report. |
|
|
109
|
+
| `readOnly` | Whether this was dispatched as a dry run. |
|
|
110
|
+
| `resumed` | Whether chat history was restored. |
|
|
111
|
+
| `error` | Present on **every** non-clean outcome, including an ordinary nonzero exit; says what went wrong. |
|
|
112
|
+
| `stderrTail` | Last stderr lines, on a non-clean outcome. |
|
|
113
|
+
|
|
114
|
+
## Waiting for completion
|
|
115
|
+
|
|
116
|
+
The relay blocks until Aider exits. Run it under the orchestrator's background-command facility, or
|
|
117
|
+
background it and poll for `result.json` - it is published atomically via rename, so a poller never
|
|
118
|
+
reads a half-written file.
|
|
119
|
+
|
|
120
|
+
Completion means the process exited and `result.json` exists. Trust that over any progress display.
|
|
121
|
+
|
|
122
|
+
## When a run misbehaves
|
|
123
|
+
|
|
124
|
+
- **Exit 2, no result file.** A usage error - bad flag, missing value, empty brief, unparseable
|
|
125
|
+
`--timeout`. Nothing was dispatched. Fix the command.
|
|
126
|
+
- **Exit 127, `status: "aider_unavailable"`.** `aider` is not on PATH. Install it, or check that the
|
|
127
|
+
environment running the relay sees the same PATH you do.
|
|
128
|
+
- **`status: "failed"` with an endpoint or authentication `error`.** Aider exits 0 even when it never
|
|
129
|
+
reached a model, so the relay scans the run for Aider's own errors and reports this rather than a
|
|
130
|
+
false success. It is a configuration problem: check the model name, `--api-base`, and provider key.
|
|
131
|
+
- **`status: "timeout"`.** The watchdog fired and the process tree was killed, possibly mid-edit.
|
|
132
|
+
Inspect `touchedFiles` before re-dispatching; re-run with a longer `--timeout`.
|
|
133
|
+
- **`status: "aborted"`.** The relay itself was killed and forwarded the kill to Aider. Same caution:
|
|
134
|
+
the tree may be partial.
|
|
135
|
+
- **`--read-only` run that changed something.** Aider's `--dry-run` is Aider's promise, not the
|
|
136
|
+
relay's measurement, so the relay warns when a read-only run leaves changed paths behind. Only the
|
|
137
|
+
files Aider *generates* are excluded from that check - `.aider.chat.history.md`,
|
|
138
|
+
`.aider.input.history`, `.aider.llm.history`, and the `.aider.tags.cache.v*` directory - because it
|
|
139
|
+
writes them even under `--dry-run`. Aider's user-managed settings are deliberately **not** excluded:
|
|
140
|
+
if `.aider.conf.yml`, `.aider.model.settings.yml`, `.aider.model.metadata.json`, or `.aiderignore`
|
|
141
|
+
changed during a dry run, that is exactly what the warning is for. Everything, generated or not,
|
|
142
|
+
still appears in `touchedFiles`, which reports git verbatim.
|
|
143
|
+
|
|
144
|
+
## Recovering lost work
|
|
145
|
+
|
|
146
|
+
If the orchestrator loses the relay's output, the run directory still has everything: `final.txt` for
|
|
147
|
+
the report, `stderr.txt` for the failure, `result.json` for the structured facts. Nothing was
|
|
148
|
+
committed, so the working tree is exactly as Aider left it - `git diff` is the source of truth.
|
|
149
|
+
|
|
150
|
+
## The commit boundary
|
|
151
|
+
|
|
152
|
+
The relay never runs `git commit`, `git add`, or `git push`, and it disables Aider's own committing.
|
|
153
|
+
Reviewing and committing are the orchestrator's job, after the gates pass. See
|
|
154
|
+
[review-and-land.md](review-and-land.md).
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Multi-task queues
|
|
2
|
+
|
|
3
|
+
A queue is several bounded tasks run through the same loop, one after another, with you reviewing
|
|
4
|
+
between them. It is not a way to dispatch a large task in parallel pieces.
|
|
5
|
+
|
|
6
|
+
## Run sequentially, one commit per task
|
|
7
|
+
|
|
8
|
+
Dispatch task N, review it, commit it, then dispatch task N+1. The reasons are practical:
|
|
9
|
+
|
|
10
|
+
- **A clean base per task.** Reviewing a diff means reading what this task changed. If two runs edit
|
|
11
|
+
the tree at once, `touchedFiles` stops telling you who did what.
|
|
12
|
+
- **Aider's chat history is per-repository.** `--resume-last` restores the history file in the repo,
|
|
13
|
+
so concurrent runs in one worktree share and clobber it. Genuine parallelism needs separate
|
|
14
|
+
worktrees, each with its own history.
|
|
15
|
+
- **Failure stays contained.** A bad task N is one commit to inspect, not a tangle.
|
|
16
|
+
|
|
17
|
+
If you truly need parallelism, use `git worktree` so each run gets its own tree, its own
|
|
18
|
+
`.aider.chat.history.md`, and its own reviewable diff.
|
|
19
|
+
|
|
20
|
+
## Carry decided constraints forward
|
|
21
|
+
|
|
22
|
+
Aider starts each non-resumed run with no memory of the previous one. Anything decided in task 1 that
|
|
23
|
+
constrains task 3 must be restated in task 3's brief:
|
|
24
|
+
|
|
25
|
+
- Names, signatures, and interfaces settled earlier.
|
|
26
|
+
- Patterns chosen ("we used the repository pattern here, follow it").
|
|
27
|
+
- Boundaries that held ("still do not touch migrations/").
|
|
28
|
+
|
|
29
|
+
A queue that does not carry constraints forward produces N locally-reasonable changes that do not
|
|
30
|
+
agree with each other.
|
|
31
|
+
|
|
32
|
+
## Keep a progress file
|
|
33
|
+
|
|
34
|
+
For anything longer than three tasks, keep a small file outside the repo tracking: task, status,
|
|
35
|
+
commit sha, and any decision that later tasks depend on.
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
1. reject negative windows done a1b2c3d ValueError, not clamp
|
|
39
|
+
2. propagate through scheduler done e4f5g6h callers let it raise
|
|
40
|
+
3. document the new behavior pending follow decision from 1
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
It survives a lost session, and it is what you carry forward into each brief.
|
|
44
|
+
|
|
45
|
+
## Close with a coherence check
|
|
46
|
+
|
|
47
|
+
Individually-correct tasks can still add up to something incoherent. After the last one, review the
|
|
48
|
+
whole range as one diff:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
git diff <sha-before-queue>..HEAD
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Look for interfaces that drifted between tasks, duplicated helpers introduced independently, docs that
|
|
55
|
+
describe an earlier iteration, and dead code left by a later task. Fix the seams before calling the
|
|
56
|
+
queue done.
|
|
57
|
+
|
|
58
|
+
## When to stop and ask
|
|
59
|
+
|
|
60
|
+
Stop the queue and go back to the human when:
|
|
61
|
+
|
|
62
|
+
- A task fails twice for the same reason. The brief is wrong, not the implementer.
|
|
63
|
+
- A task reveals the plan itself was wrong - a later task no longer makes sense.
|
|
64
|
+
- Correct completion needs a scope change: a `DO NOT TOUCH` file, a public interface, a new
|
|
65
|
+
dependency.
|
|
66
|
+
- The queue's assumptions have gone stale because reality moved under it.
|
|
67
|
+
|
|
68
|
+
Finishing a queue on a false premise is worse than stopping in the middle of it.
|