Hard-coded 'scout' references reached the model even when the scout agent was disabled via task.disabledAgents or absent from the session spawn list. Gate every such reference on scout actually being spawnable: the task tool description, the delegation gates, the plan-mode and workflowz notices, the glob/grep/ast-grep guidance, and the task specialization advisory. Prompt shape is otherwise unchanged; only erroneous references to the unavailable subagent are dropped. Closes #7313
84 lines
5.9 KiB
Markdown
84 lines
5.9 KiB
Markdown
{{#if asyncEnabled}}{{#if batchEnabled}}Delegate work to background subagents by passing multiple items in a single `tasks[]` batch.
|
|
Execution does not block — you receive IDs immediately.{{else}}Delegate work to ONE background subagent per call.
|
|
Execution does not block — you receive an ID immediately.{{/if}}{{#if hasBlockingAgents}}
|
|
Agents marked BLOCKING run inline — results return in this call; non-blocking items in the same batch still spawn as background jobs.{{/if}}{{else}}{{#if batchEnabled}}Run subagents synchronously by passing items in a `tasks[]` batch. Execution blocks until all work finishes.{{else}}Run ONE subagent synchronously. Execution blocks until work finishes.{{/if}}{{/if}}
|
|
{{#if asyncEnabled}}
|
|
|
|
# Async Job Contract
|
|
- Results auto-deliver. A settled `hub jobs`/`hub wait` snapshot is the delivery; no duplicate `async-result` follows.
|
|
- Job IDs are process-local and expire roughly five minutes after settlement. Afterward, use the agent ID with `hub send`, `agent://<id>`, or `history://<id>`.
|
|
- `completed` means successful yield/job exit, not artifact acceptance. Verify claimed changes.
|
|
{{/if}}
|
|
|
|
# Task Design
|
|
- **Agent typing:** Pick each item's `agent` type.{{#if scoutAvailable}} Read-only research MUST use `agent: "scout"` (faster model).{{/if}} Use default worker only when no specialist fits.
|
|
- **No overhead:** Each `task` MUST instruct its agent to skip formatters, linters, and project-wide test suites. Run those once at the end.
|
|
- **One-pass:** Prefer agents that investigate AND edit in one pass;{{#if scoutAvailable}} spin a read-only scout only when affected files are genuinely unknown.{{/if}}
|
|
- **Overlap is safe:** Concurrent edits to the same files auto-resolve{{#if ircEnabled}}; worst case, agents coordinate directly over IRC{{/if}}. NEVER shrink or serialize a batch to avoid file overlap. Two prerequisites:
|
|
1. Every task MUST skip validation (build/lint/tests) — validating mid-flight blocks agents on each other's edits.
|
|
2. Decide cross-task contracts up front (e.g. the interface A implements and B consumes) and state them in the {{#if batchEnabled}}batch `context`{{else}}task{{/if}}, not left for agents to negotiate.
|
|
|
|
# Inputs
|
|
{{#if batchEnabled}}
|
|
- `context`: Shared project state, constraints, and contracts. Applies to the entire batch; do not duplicate this background into individual tasks.
|
|
- `tasks[]`: Array of subagents to spawn.
|
|
- `name`: A stable CamelCase identifier (≤32 chars), used to address the agent (IRC, job ids). Generated automatically if omitted.
|
|
- `agent`: The agent type running this item (e.g. {{#if scoutAvailable}}`scout`, {{/if}}`reviewer`). Omitting it gives you the general-purpose worker (`{{defaultAgent}}`) — NEVER pass that name explicitly. Only omit it after checking the agent list below and finding no specialist that fits.{{#if allowedAgentsText}} Current spawn policy allows: {{allowedAgentsText}}.{{/if}}
|
|
- `task`: Complete, self-contained instructions. One-liners or missing acceptance criteria are PROHIBITED.
|
|
{{#if effortEnabled}} - `effort`: Scale w/ complexity of this task: `"lo"`|`"med"`|`"hi"`
|
|
{{/if}}
|
|
- `outputSchema`: Invocation-specific JSON Schema. Overrides the selected agent and parent-session schemas.
|
|
- `schemaMode`: `"permissive"` (default) accepts a retry-exhausted invalid result with a warning; `"strict"` fails it.
|
|
{{#if isolationEnabled}}
|
|
{{#if applyIsolatedChanges}}
|
|
- `isolated`: Run in a dedicated worktree; successful changes are automatically applied to the parent checkout.
|
|
{{else}}
|
|
- `isolated`: Run in a dedicated worktree; changes are retained as patch or branch artifacts without modifying the parent checkout.
|
|
{{/if}}
|
|
{{/if}}
|
|
{{else}}
|
|
- `name`: A stable CamelCase identifier (≤32 chars), used to address the agent (IRC, job ids). Generated automatically if omitted.
|
|
- `agent`: The agent type to spawn (e.g. {{#if scoutAvailable}}`scout`, {{/if}}`reviewer`). Omitting it gives you the general-purpose worker (`{{defaultAgent}}`) — NEVER pass that name explicitly. Only omit it after checking the agent list below and finding no specialist that fits.{{#if allowedAgentsText}} Current spawn policy allows: {{allowedAgentsText}}.{{/if}}
|
|
- `task`: Complete, self-contained instructions. One-liners or missing acceptance criteria are PROHIBITED.
|
|
{{#if effortEnabled}}- `effort`: Scale w/ complexity of this task: `"lo"`|`"med"`|`"hi"`
|
|
{{/if}}
|
|
- `outputSchema`: Invocation-specific JSON Schema. Overrides the selected agent and parent-session schemas.
|
|
- `schemaMode`: `"permissive"` (default) accepts a retry-exhausted invalid result with a warning; `"strict"` fails it.
|
|
{{#if isolationEnabled}}
|
|
{{#if applyIsolatedChanges}}
|
|
- `isolated`: Run in a dedicated worktree; successful changes are automatically applied to the parent checkout.
|
|
{{else}}
|
|
- `isolated`: Run in a dedicated worktree; changes are retained as patch or branch artifacts without modifying the parent checkout.
|
|
{{/if}}
|
|
{{/if}}
|
|
{{/if}}
|
|
|
|
# Communication
|
|
Subagents start blank — no conversation history.{{#if ircEnabled}} Parent-to-subagent IRC delivered immediately as steering.{{/if}}
|
|
Pass large payloads via `local://<path>` URIs, NEVER inline text.
|
|
|
|
# Format Contracts
|
|
{{#if batchEnabled}}
|
|
`context` format:
|
|
# Goal ← what the batch accomplishes
|
|
# Constraints ← rules and session decisions
|
|
# Contract ← shared interfaces
|
|
{{/if}}
|
|
|
|
`task` format:
|
|
# Target ← exact files and symbols; explicit non-goals
|
|
# Change ← step-by-step add/remove/rename; APIs and patterns
|
|
# Acceptance ← observable result; no project-wide commands
|
|
|
|
# Available Agents
|
|
{{#if spawningDisabled}}
|
|
Agent spawning is currently disabled.
|
|
{{else}}
|
|
Pick the most specific agent; use default worker only when no specialist fits.
|
|
{{#list agents join="\n"}}
|
|
### {{name}}{{#if readOnly}} (READ-ONLY){{/if}}{{#if blocking}} (BLOCKING: inline result){{/if}}
|
|
{{description}}
|
|
{{#if readOnly}}Use ONLY for investigation; do edits yourself or assign to a writing agent.{{/if}}
|
|
{{/list}}
|
|
{{/if}}
|