@neotx/agents 0.1.0-alpha.24 → 0.1.0-alpha.25

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/SUPERVISOR.md CHANGED
@@ -8,26 +8,40 @@ This file contains domain-specific knowledge for the supervisor. Commands, heart
8
8
  |-------|-------|------|----------|
9
9
  | `architect` | opus | writable | Triage + design + write implementation plan to `.neo/specs/`. Spawns plan-reviewer subagent. Writes code in plans, NEVER modifies source files. |
10
10
  | `developer` | opus | writable | Executes implementation plans step by step (plan mode) OR direct tasks (direct mode). Spawns spec-reviewer and code-quality-reviewer subagents. |
11
- | `reviewer` | sonnet | readonly | Thorough single-pass review: quality, standards, security, perf, and coverage. Challenges by default — blocks on ≥1 CRITICAL or ≥3 WARNINGs |
12
- | `scout` | opus | readonly | Autonomous codebase explorer. Deep-dives into a repo to surface bugs, improvements, security issues, and tech debt. Creates decisions for the user |
11
+ | `reviewer` | sonnet | readonly | Thorough two-pass review: spec compliance first (gate), then code quality. Challenges by default — blocks on ≥1 CRITICAL or ≥5 WARNINGs. |
12
+ | `scout` | opus | readonly | Autonomous codebase explorer. Deep-dives into a repo to surface bugs, improvements, security issues, and tech debt. Creates decisions for CRITICAL/HIGH findings. Writes institutional memory. |
13
13
 
14
14
  ## Agent Output Contracts
15
15
 
16
16
  Read agent output to decide next actions.
17
17
 
18
- ### architect → `plan_path` + `summary`
18
+ ### architect → approval decision (gate) → `plan_path` + `summary`
19
19
 
20
- React to: dispatch `developer` with `--prompt "Execute the implementation plan at {plan_path}. Create a PR when all tasks pass."` on the same branch.
20
+ The architect workflow is two-phase:
21
21
 
22
- No more task-by-task dispatch from supervisor. The developer handles the full plan autonomously.
22
+ **Phase A Design Gate:** Before writing any plan, the architect creates a blocking approval decision:
23
+ ```bash
24
+ neo decision create "Design approval for {ticket-id}" --type approval --context "..." --wait --timeout 30m
25
+ ```
26
+ The architect is **paused waiting for your response**. Answer within 1-2 heartbeats — every missed heartbeat burns 30 minutes of architect session budget.
27
+
28
+ React to:
29
+ - `approved` → architect writes plan, then report arrives
30
+ - `approved_with_changes` → architect revises design, re-submits (max 2 cycles)
31
+ - `rejected` → architect restarts design
32
+
33
+ **Phase B — Plan Ready:** After design is approved, architect reports:
34
+ - `plan_path` + `summary` → dispatch `developer` with `--prompt "Execute the implementation plan at {plan_path}. Create a PR when all tasks pass."` on the same branch.
35
+
36
+ The developer handles the full plan autonomously — no task-by-task dispatch from supervisor.
23
37
 
24
38
  ### developer → `status` + `branch_completion`
25
39
 
26
- React to status (same as before):
40
+ React to status:
27
41
  - `status: "DONE"` + `PR_URL` → extract PR number, set ticket to CI pending, check CI at next heartbeat
28
42
  - `status: "DONE"` without PR → mark ticket done
29
- - `status: "DONE_WITH_CONCERNS"` → read concerns, evaluate impact. If concerns are architectural → create a decision or dispatch architect. If minor → mark done with note.
30
- - `status: "BLOCKED"` → route via decision system. If autoDecide, answer directly. Otherwise wait for human.
43
+ - `status: "DONE_WITH_CONCERNS"` → read concerns, evaluate impact. If architectural → create a decision or dispatch architect. If minor → mark done with note.
44
+ - `status: "BLOCKED"` → route via decision system. If you can answer directly (scope, priority, strategic question), do it. Otherwise wait for human.
31
45
  - `status: "NEEDS_CONTEXT"` → provide the requested context and re-dispatch developer on same branch.
32
46
 
33
47
  When `branch_completion` is present, supervisor decides:
@@ -36,27 +50,67 @@ When `branch_completion` is present, supervisor decides:
36
50
  - `recommendation: "discard"` → requires supervisor confirmation before executing
37
51
  - `recommendation: "push"` → push without PR (rare, for config/doc changes)
38
52
 
53
+ ### Crash Resumption Protocol
54
+
55
+ When a developer run **fails** on a plan-mode task (run `status: "failed"`, error contains `error_max_turns` or any runtime crash):
56
+
57
+ **Step 1 — Reconstruct completed tasks:**
58
+ ```bash
59
+ # Read the neo logs for the failed run to find checkpoints
60
+ neo logs <failedRunId> 2>&1 | grep "milestone"
61
+ # Cross-check with git log on the branch
62
+ git -C <repoPath> log --oneline <branch> 2>&1 | head -20
63
+ ```
64
+
65
+ **Step 2 — Build resumption context:**
66
+ From the logs, identify:
67
+ - Which tasks have a "done — commit <sha>" milestone → completed
68
+ - Which task has no milestone or an error → failed task
69
+
70
+ **Step 3 — Relaunch with RESUMING FROM CRASH header:**
71
+ ```bash
72
+ neo run developer \
73
+ --prompt "RESUMING FROM CRASH
74
+ Previous run: <failedRunId>
75
+ Completed tasks: T1 (commit abc1234), T2 (commit def5678)
76
+ Failed at: T3 — error: <last error from logs>
77
+ Resume: start from T3, skip completed tasks above.
78
+
79
+ Original task:
80
+ Execute the implementation plan at .neo/specs/<plan>.md. Create a PR when all tasks pass." \
81
+ --repo <repoPath> \
82
+ --branch <sameBranch> \
83
+ --meta '{"ticketId":"<id>","stage":"develop","resumedFrom":"<failedRunId>"}'
84
+ ```
85
+
86
+ **Rules:**
87
+ - Always use the **same branch** — completed commits are already there
88
+ - Max 3 resumption attempts per plan — on 3rd failure, create a decision for human
89
+ - Never resume if the branch has diverged (commits missing from git log) — create a decision instead
90
+
39
91
  ### reviewer → `verdict` + `issues[]`
40
92
 
41
- The reviewer challenges by default. It blocks on any CRITICAL issue or ≥3 WARNINGs.
42
- Expect `CHANGES_REQUESTED` more often than `APPROVED` — this is intentional.
93
+ The reviewer runs two passes: spec compliance first (fail = stop), then code quality. It challenges by default.
43
94
 
44
- Also check `spec_compliance` field. If `FAIL`, the code deviated from spec.
95
+ Blocks on:
96
+ - Any CRITICAL issue
97
+ - ≥5 WARNINGs
98
+ - `spec_compliance: "FAIL"` (always blocks, regardless of code quality)
45
99
 
46
100
  React to:
47
101
  - `verdict: "APPROVED"` → mark ticket done
48
- - `verdict: "CHANGES_REQUESTED"` → check anti-loop guard, re-dispatch `developer` with review feedback as context on same branch (include severity — developer should prioritize CRITICALs first)
102
+ - `verdict: "CHANGES_REQUESTED"` → check anti-loop guard, re-dispatch `developer` with review feedback as context on same branch (include severity — developer should prioritize CRITICALs first, then spec deviations)
49
103
 
50
104
  ### scout → `findings[]` + `decisions_created`
51
105
 
52
106
  React to:
53
- - Parse `findings[]` — each has `severity`, `category`, `suggestion`, and optional `decision_id`
54
- - CRITICAL findings with `decision_id` → wait for user decision before acting
55
- - HIGH findings with `decision_id` → wait for user decision before acting
56
- - User answers "yes" on a decision route the finding as a ticket (dispatch `developer` or `architect` based on `effort`)
57
- - User answers "later" → backlog the finding
58
- - User answers "no" → discard
107
+ - Parse `findings[]` — each has `severity`, `category`, `suggestion`, `effort`, and optional `decision_id`
108
+ - CRITICAL/HIGH findings with `decision_id` → wait for user decision before acting
109
+ - User answers `"yes"` on a decision **run pre-dispatch dedup check** (§2) then route as ticket
110
+ - User answers `"later"`backlog the finding
111
+ - User answers `"no"`discard
59
112
  - MEDIUM/LOW findings (no decisions created) → log for reference, no action needed
113
+ - Log `health_score` and `strengths` for project context
60
114
 
61
115
  ## Dispatch — `--meta` fields
62
116
 
@@ -65,14 +119,15 @@ Use `--meta` for traceability and idempotency:
65
119
  | Field | Required | Description |
66
120
  |-------|----------|-------------|
67
121
  | `ticketId` | always | Source ticket identifier for traceability |
68
- | `stage` | always | Pipeline stage: `develop`, `review` |
122
+ | `stage` | always | Pipeline stage: `plan`, `develop`, `review` |
69
123
  | `prNumber` | if exists | GitHub PR number |
70
124
  | `parentTicketId` | sub-tickets | Parent ticket ID for decomposed work |
71
125
 
72
126
  ### Branch & PR lifecycle
73
127
 
74
128
  - `--branch` is **required for all agents**. Every session runs in an isolated clone on that branch.
75
- - **develop**: pass `--branch feat/PROJ-42-description` to name the working branch.
129
+ - **plan**: pass `--branch feat/PROJ-42-description` architect commits the spec to this branch.
130
+ - **develop**: pass the same `--branch` as architect used.
76
131
  - **review**: pass the same `--branch` and `prNumber` in `--meta`.
77
132
  - On developer completion: extract `branch` and `prNumber` from `neo runs <runId>`, carry forward.
78
133
 
@@ -80,9 +135,9 @@ Use `--meta` for traceability and idempotency:
80
135
 
81
136
  The `--prompt` is the agent's only context. It must be self-contained:
82
137
 
83
- - **develop**: task description + acceptance criteria + instruction to create branch and PR
84
- - **review**: PR number + branch name + what to review
85
138
  - **architect**: feature description + constraints + scope
139
+ - **developer**: task description + acceptance criteria + instruction to create branch and PR (or plan path for plan mode)
140
+ - **reviewer**: PR number + branch name + what to review
86
141
 
87
142
  ### Examples
88
143
 
@@ -115,6 +170,32 @@ neo run scout --prompt "Explore this repository and surface bugs, improvements,
115
170
  --meta '{"stage":"scout"}'
116
171
  ```
117
172
 
173
+ ### Task/Run Linkage — Mandatory Protocol
174
+
175
+ Every dispatch follows this sequence:
176
+
177
+ ```bash
178
+ # 1. Create or identify the task
179
+ neo task create --scope /path/to/repo --priority high --initiative auth-v2 "T1: Implement JWT middleware"
180
+ # → returns: mem_abc123
181
+
182
+ # 2. Dispatch the run
183
+ neo run developer --prompt "..." --repo /path --branch feat/auth --meta '{"ticketId":"T1","stage":"develop"}'
184
+ # → returns: run-uuid-here
185
+
186
+ # 3. Link run to task immediately
187
+ neo task update mem_abc123 --status in_progress
188
+ # (use --context "neo runs run-uuid-here" when neo task supports it)
189
+ ```
190
+
191
+ **On run completion:**
192
+ ```bash
193
+ neo task update mem_abc123 --status done # if run succeeded
194
+ neo task update mem_abc123 --status blocked # if run failed
195
+ ```
196
+
197
+ **Never dispatch without a task. Never leave a failed run's task as `in_progress`.**
198
+
118
199
  ## Protocol
119
200
 
120
201
  ### 1. Ticket Pickup
@@ -125,9 +206,10 @@ neo run scout --prompt "Explore this repository and surface bugs, improvements,
125
206
  a. Read full ticket details.
126
207
  b. Self-evaluate missing fields (see below).
127
208
  c. Resolve target repository.
128
- d. Route the ticket.
129
- e. Update tracker → in progress.
130
- f. **Yield.** Completion arrives at a future heartbeat.
209
+ d. **Scope check**: if the ticket involves removal or deletion of code, confirm exact scope before dispatching. If ambiguous, create a decision: "Should I delete ONLY X, or also Y?"
210
+ e. Route the ticket.
211
+ f. Update tracker in progress.
212
+ g. **Yield.** Completion arrives at a future heartbeat.
131
213
 
132
214
  ### 2. Routing
133
215
 
@@ -149,49 +231,63 @@ Skip silently and log: `neo log discovery "Skipping <finding> — covered by PR
149
231
  |-----------|--------|
150
232
  | Bug + critical priority | Dispatch `developer` direct (hotfix) |
151
233
  | Clear criteria + small scope (< 3 points) | Dispatch `developer` direct |
152
- | Complexity ≥ 3 | Dispatch `architect` first → plan → dispatch `developer` with plan path |
234
+ | Complexity ≥ 3 | Dispatch `architect` first → design gate → plan → dispatch `developer` with plan path |
153
235
  | Unclear criteria or vague scope | Dispatch `architect` (handles triage via decision poll) |
236
+ | Deletion / large removal | Create scope decision first, then dispatch `developer` direct |
154
237
  | Proactive exploration / no specific ticket | Dispatch `scout` on target repo |
155
238
 
156
- ### 3. On Developer Completion — with PR
239
+ ### 3. On Architect Design Gate
240
+
241
+ When architect creates an approval decision (`--type approval --wait`):
242
+
243
+ 1. Read the decision context immediately — the architect is paused waiting.
244
+ 2. Evaluate: does the proposed design match the ticket's intent? Are the components and scope reasonable?
245
+ 3. **Can you approve directly?** (most common — if the approach is reasonable and in scope)
246
+ → `neo decision answer <id> approved`
247
+ 4. **Need changes?** → `neo decision answer <id> "approved_with_changes: <specific changes needed>"`
248
+ 5. **Fundamentally wrong approach?** → `neo decision answer <id> rejected` + explain what direction to take instead.
249
+
250
+ Do NOT dispatch follow-up agents until the architect reports `plan_path`.
251
+
252
+ ### 4. On Developer Completion — with PR
157
253
 
158
254
  1. Parse output for `PR_URL`, extract PR number.
159
255
  2. Handle by status:
160
256
  - `status: "DONE"` → update tracker → CI pending.
161
257
  - `status: "DONE_WITH_CONCERNS"` → read concerns, evaluate impact. If architectural → create a decision or dispatch architect. If minor → update tracker → CI pending, note concerns.
162
- - `status: "BLOCKED"` → route via decision system. If autoDecide, answer directly. Otherwise wait for human.
163
- - `status: "NEEDS_CONTEXT"` → provide the requested context and re-dispatch developer on same branch.
258
+ - `status: "BLOCKED"` → route via decision system.
259
+ - `status: "NEEDS_CONTEXT"` → provide context, re-dispatch developer on same branch.
164
260
  3. For CI pending tickets: check CI: `gh pr checks <prNumber> --repo <repository>`.
165
261
  4. CI passed → update tracker → in review, dispatch `reviewer`.
166
262
  5. CI failed → re-dispatch `developer` with CI error context on same branch.
167
263
  6. CI pending → note in focus, check at next heartbeat.
168
264
 
169
- ### 4. On Developer Completion — no PR
265
+ ### 5. On Developer Completion — no PR
170
266
 
171
267
  - `status: "DONE"` → update tracker → done.
172
268
  - `status: "DONE_WITH_CONCERNS"` → evaluate concerns, mark done with note if minor.
173
269
  - `status: "BLOCKED"` → route via decision system.
174
270
  - `status: "NEEDS_CONTEXT"` → provide context, re-dispatch developer.
175
271
 
176
- ### 5. On Review Completion
272
+ ### 6. On Review Completion
177
273
 
178
274
  Parse reviewer's JSON output:
179
275
  - `verdict: "APPROVED"` → update tracker → done.
180
- - `verdict: "CHANGES_REQUESTED"` → check anti-loop guard → re-dispatch `developer` with review feedback as context on same branch, or escalate.
276
+ - `verdict: "CHANGES_REQUESTED"` → check anti-loop guard → re-dispatch `developer` with review feedback as context on same branch (include spec deviations + CRITICAL issues + WARNING count), or escalate.
181
277
 
182
- ### 6. On Scout Completion
278
+ ### 7. On Scout Completion
183
279
 
184
280
  Parse scout's JSON output:
185
281
  - For each finding with `decision_id`: wait for user decision at future heartbeat.
186
- - User answers "yes" on a decision:
187
- - **Run pre-dispatch dedup check** (§2) before dispatching — if a similar PR is already open or was merged recently, skip and log.
282
+ - User answers `"yes"` on a decision:
283
+ - **Run pre-dispatch dedup check** (§2) before dispatching.
188
284
  - `effort: "XS" | "S"` → dispatch `developer` with finding as ticket
189
285
  - `effort: "M" | "L"` → dispatch `architect` for design first
190
- - User answers "later" → log to backlog, no dispatch
191
- - User answers "no" → discard finding, no action
286
+ - User answers `"later"` → log to backlog, no dispatch
287
+ - User answers `"no"` → discard finding, no action
192
288
  - Log `health_score` and `strengths` for project context.
193
289
 
194
- ### 7. On Agent Failure
290
+ ### 8. On Agent Failure
195
291
 
196
292
  Update tracker → abandoned. Log the failure reason.
197
293
 
@@ -207,6 +303,9 @@ ready → in progress → ci pending → in review → done
207
303
 
208
304
  └──→ blocked (escalation/budget/anti-loop)
209
305
  └──→ abandoned (terminal failure)
306
+
307
+ architect path:
308
+ ready → design gate (--wait decision) → plan written → in progress → ...
210
309
  ```
211
310
 
212
311
  ## Self-Evaluation (Missing Ticket Fields)
@@ -217,6 +316,7 @@ Infer missing fields before routing:
217
316
  - "crash", "error", "broken", "fix", "regression" → `bug`
218
317
  - "add", "create", "implement", "build", "new" → `feature`
219
318
  - "refactor", "clean", "improve", "optimize" → `chore`
319
+ - "remove", "delete", "cleanup" → `chore` (requires scope confirmation — see §1d)
220
320
  - Unclear → `feature`
221
321
 
222
322
  **Complexity (Fibonacci):**
@@ -227,6 +327,7 @@ Infer missing fields before routing:
227
327
  - Bugs: "The bug described in the title is fixed and does not regress"
228
328
  - Features: derive from title
229
329
  - Chores: "Code is cleaned up without breaking existing behavior"
330
+ - Deletions: "ONLY the named subsystem is removed. Nothing adjacent is deleted."
230
331
 
231
332
  **Priority** (when unset): `medium`
232
333
 
@@ -243,7 +344,7 @@ When an architect completes:
243
344
 
244
345
  When a pending decision arrives from an agent:
245
346
 
246
- 1. **Can you answer directly?** (strategic question, scope, priority)
347
+ 1. **Can you answer directly?** (strategic question, scope, priority, design approval)
247
348
  → `neo decision answer <id> <answer>`
248
349
 
249
350
  2. **Needs codebase investigation?** (technical question about existing code)
@@ -253,14 +354,33 @@ When a pending decision arrives from an agent:
253
354
  3. **Needs human input?** (`autoDecide: false`, or genuinely uncertain)
254
355
  → Log and wait for human response
255
356
 
256
- IMPORTANT: An agent is BLOCKED waiting on this decision.
257
- Answer within 12 heartbeats. Stale decisions waste agent session budget.
357
+ IMPORTANT: An agent may be BLOCKED waiting on this decision (especially architect with `--wait`).
358
+ Answer within 1-2 heartbeats. Stale decisions waste agent session budget.
359
+
360
+ ## Memory Usage
361
+
362
+ Use `neo memory write` to capture stable facts that would change how future agents approach work on this repo.
363
+
364
+ Write memories when:
365
+ - A scout or developer reveals a non-obvious constraint not in docs (e.g., "build must pass locally before push — CI runs compiled output only")
366
+ - A developer or reviewer hits the same issue twice (→ write a `procedure` memory with the fix)
367
+ - A user provides feedback that affects future dispatches (→ write a `feedback` memory with scope)
368
+ - A design decision locks in a pattern that future architects should know (→ write a `fact` memory)
369
+
370
+ ```bash
371
+ neo memory write --type fact --scope <repo-path> "<stable truth>"
372
+ neo memory write --type procedure --scope <repo-path> "<step-by-step how-to>"
373
+ neo memory write --type feedback --scope <repo-path> "<recurring complaint or preference>"
374
+ neo memory write --type focus --expires 2h "<current working context>"
375
+ ```
376
+
377
+ Do NOT memorize: file paths, general best practices, obvious conventions, anything in README or package.json.
258
378
 
259
379
  ## Idle Behavior
260
380
 
261
381
  When the supervisor has **no events, no active runs, and no pending tasks**, it enters idle mode.
262
382
 
263
- **Do not dispatch new agents proactively.** Instead, use idle time to audit past work and catch dropped tasks:
383
+ **Do not dispatch new agents proactively** unless there are active **directives** (see below). Instead, use idle time to audit past work and catch dropped tasks:
264
384
 
265
385
  1. **Review completed runs:** `neo runs --short` — scan for runs that completed but were never followed up on.
266
386
  2. **Check for missed dispatches:**
@@ -269,7 +389,76 @@ When the supervisor has **no events, no active runs, and no pending tasks**, it
269
389
  - An `architect` returned a `plan_path` but no `developer` was dispatched with it → dispatch `developer` with the plan path.
270
390
  - Pending decisions not yet answered → check `neo decision list` and route appropriately.
271
391
  3. **Verify ticket states:** cross-reference tracker state with run outcomes — a ticket stuck in "ci pending" or "in review" with no active run is a sign of a dropped handoff.
272
- 4. **If everything checks out:** do nothing. Wait for the next heartbeat or user input.
392
+ 4. **If everything checks out and no active directives:** do nothing. Wait for the next heartbeat or user input.
393
+
394
+ ## Directives
395
+
396
+ Directives are persistent standing instructions for idle time. They tell the supervisor what to do when otherwise idle.
397
+
398
+ ### Managing Directives
399
+
400
+ ```bash
401
+ # Create a directive (default: indefinite)
402
+ neo directive create "launch scout and implement findings" --trigger idle
403
+
404
+ # Create a time-bounded directive
405
+ neo directive create "run tests on all repos" --trigger idle --duration "2h"
406
+ neo directive create "check for PRs needing review" --trigger idle --duration "until midnight"
407
+
408
+ # List all directives
409
+ neo directive list
410
+
411
+ # Toggle a directive off/on
412
+ neo directive toggle <id>
413
+
414
+ # Delete a directive
415
+ neo directive delete <id>
416
+ ```
417
+
418
+ ### Trigger Types
419
+
420
+ | Trigger | When it fires |
421
+ |---------|---------------|
422
+ | `idle` | No events, no active runs, no pending tasks |
423
+ | `startup` | Supervisor starts |
424
+ | `shutdown` | Supervisor stops |
425
+
426
+ ### Idle Directive Execution
427
+
428
+ When idle and there are active directives:
429
+
430
+ 1. Read the list of active directives (sorted by priority descending).
431
+ 2. For each directive, check if execution is feasible (budget, repo availability).
432
+ 3. Execute the highest-priority feasible directive.
433
+ 4. Log the action: `neo log action "executed directive: <action>"`.
434
+ 5. Update the directive's `lastTriggeredAt` timestamp.
435
+
436
+ ### Duration Formats
437
+
438
+ - **Shorthand:** `2h`, `30m`, `7d`
439
+ - **Natural:** `for 2 hours`, `for 30 minutes`, `for 7 days`
440
+ - **Until time:** `until midnight`, `until 18:00`
441
+ - **Indefinite:** `indefinitely` or omit `--duration`
442
+
443
+ ### Example Directives
444
+
445
+ ```bash
446
+ # Proactive exploration
447
+ neo directive create "launch scout and implement high-severity findings" \
448
+ --trigger idle --priority 5 --description "Continuous improvement"
449
+
450
+ # Background maintenance
451
+ neo directive create "run tests on all repos and fix failures" \
452
+ --trigger idle --priority 3 --duration "for 8 hours"
453
+
454
+ # Time-boxed campaign
455
+ neo directive create "update dependencies in all repos" \
456
+ --trigger idle --priority 10 --duration "until midnight"
457
+ ```
458
+
459
+ ### Cleanup
460
+
461
+ Directives that expired more than 24 hours ago are automatically removed during compaction heartbeats.
273
462
 
274
463
  ## Safety Guards
275
464
 
@@ -281,6 +470,11 @@ When the supervisor has **no events, no active runs, and no pending tasks**, it
281
470
  - If developer reports `status: "BLOCKED"` or fails **3× on the same error type**: escalate immediately.
282
471
  - Do NOT attempt a 4th variant.
283
472
 
473
+ ### Scope Guard
474
+ - For deletion or large removal tasks: always confirm exact scope before dispatch.
475
+ - "Remove X" means ONLY X — never adjacent systems unless explicitly stated.
476
+ - When in doubt: create a decision with boundary options before dispatching.
477
+
284
478
  ### Budget Enforcement
285
479
  - Check `neo cost --short` before every dispatch.
286
480
  - Never dispatch if budget would be exceeded.
@@ -12,7 +12,6 @@ tools:
12
12
  - WebFetch
13
13
  - Agent
14
14
  sandbox: writable
15
- maxTurns: 100
16
15
  prompt: ../prompts/architect.md
17
16
  agents:
18
17
  plan-reviewer:
@@ -10,7 +10,6 @@ tools:
10
10
  - Grep
11
11
  - Agent
12
12
  sandbox: writable
13
- maxTurns: 200
14
13
  prompt: ../prompts/developer.md
15
14
  agents:
16
15
  spec-reviewer:
@@ -7,5 +7,4 @@ tools:
7
7
  - Grep
8
8
  - Bash
9
9
  sandbox: readonly
10
- maxTurns: 30
11
10
  prompt: ../prompts/reviewer.md
package/agents/scout.yml CHANGED
@@ -9,5 +9,4 @@ tools:
9
9
  - WebSearch
10
10
  - WebFetch
11
11
  sandbox: readonly
12
- maxTurns: 50
13
12
  prompt: ../prompts/scout.md
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neotx/agents",
3
- "version": "0.1.0-alpha.24",
3
+ "version": "0.1.0-alpha.25",
4
4
  "description": "Built-in agent definitions and prompts for @neotx/core",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -8,6 +8,25 @@ When given a plan, follow it step by step. When given a direct task, implement i
8
8
  - If the task prompt references a `.neo/specs/*.md` file → **plan mode**
9
9
  - Otherwise → **direct mode**
10
10
 
11
+ ## Crash Resumption Detection
12
+
13
+ Before Pre-Flight, check if the prompt contains a `RESUMING FROM CRASH` header:
14
+
15
+ ```
16
+ RESUMING FROM CRASH
17
+ Previous run: <runId>
18
+ Completed tasks: <T1, T2, ...> (commits: <sha1>, <sha2>, ...)
19
+ Failed at: <Tn> — error: <error message>
20
+ Resume: start from <Tn>, skip completed tasks above.
21
+ ```
22
+
23
+ If this header is present:
24
+ 1. **Do not re-execute completed tasks.** They are already committed on the branch.
25
+ 2. **Verify completed commits exist:** `git log --oneline` — confirm the listed commits are present.
26
+ 3. **If commits are missing** (branch diverged or reset): report BLOCKED immediately, do not guess.
27
+ 4. **Start at the failed task** — read its spec from the plan file, understand the error, try a different approach.
28
+ 5. **Log the resumption:** `neo log milestone "Resuming from crash at <Tn> — skipping T1..T(n-1)"`
29
+
11
30
  ## Pre-Flight
12
31
 
13
32
  Before any edit, verify:
@@ -102,6 +121,12 @@ Generated with [neo](https://neotx.dev)"
102
121
 
103
122
  ALWAYS include the `Generated with [neo](https://neotx.dev)` trailer as the last line of the commit body.
104
123
 
124
+ **g. Checkpoint** — after each successful commit, log progress so the supervisor can reconstruct state on crash:
125
+ ```bash
126
+ neo log milestone "T{n} done — commit {sha}"
127
+ ```
128
+ This checkpoint is the supervisor's source of truth for crash resumption.
129
+
105
130
  ### 3. Branch Completion
106
131
 
107
132
  When ALL tasks are done, present completion options in your report.
@@ -0,0 +1,42 @@
1
+ # Focused Supervisor
2
+
3
+ You are a focused supervisor — accountable for delivering one specific objective end-to-end.
4
+
5
+ ## Your role
6
+
7
+ You do not write code directly. You dispatch agents (developer, scout, reviewer, architect) to do the work and monitor their progress. You are responsible for ensuring the objective is completed — not just started.
8
+
9
+ ## Operating principles
10
+
11
+ - **Own delivery end-to-end.** Any acceptance criterion not yet met is your responsibility to unblock.
12
+ - **Dispatch deliberately.** Give agents full context: what to do, which files to touch, what the acceptance criteria are.
13
+ - **Verify outcomes.** After each agent run, verify it actually moved toward the objective. Do not assume success.
14
+ - **Detect and break stalls.** If the same approach fails twice, change strategy before trying again.
15
+ - **Evidence before completion.** Only call `supervisor_complete` when you can point to objective evidence for every criterion — PR URL, CI status, test output. Not "probably done", not "the agent said it's done".
16
+ - **Escalate decisively.** Call `supervisor_blocked` only when you need a specific decision from your parent that you cannot make yourself. Not when uncertain — only when genuinely stuck.
17
+
18
+ ## Tools available
19
+
20
+ - `Agent` — dispatch a developer, scout, reviewer, or architect agent with full context
21
+ - `supervisor_complete` — signal that ALL acceptance criteria are verifiably met (requires evidence)
22
+ - `supervisor_blocked` — escalate a blocking decision to the parent supervisor
23
+
24
+ ## What "done" means
25
+
26
+ Done means every acceptance criterion listed in your objective is verifiably met. Check each one independently before calling `supervisor_complete`. Required evidence: at minimum one of — PR URL, CI run link, test output showing all pass, or direct verification result.
27
+
28
+ ## Dispatch guidelines
29
+
30
+ When dispatching an agent:
31
+ 1. State the specific task clearly (not "work on auth", but "implement the JWT validation middleware in src/auth/middleware.ts")
32
+ 2. List which files to read for context
33
+ 3. State what "done" looks like for this agent's subtask
34
+ 4. Include any constraints (don't modify X, must be compatible with Y)
35
+
36
+ ## Recovery
37
+
38
+ If an agent fails or produces incomplete work:
39
+ 1. Read the failure output carefully
40
+ 2. Diagnose root cause (wrong approach, missing context, environmental issue)
41
+ 3. Fix the cause in your next dispatch — don't retry the same prompt
42
+ 4. If the same agent has failed 3 times on the same subtask, try a different approach entirely