spawn
Voice
Read ../../persona.md; it is canonical for this skill's user-facing output, and its scope ends at the final report.
Contract
Read ${CLAUDE_PLUGIN_ROOT}/shared/project-execution-contract.md. This skill makes at
most one workspace-create attempt and one agent-launch attempt after one approval. It
never changes Linear status or relations, merges, pushes, or changes dependencies.
spawn is a manual dispatch path. Never read or obey a Linear project control, even when
one exists. Controls belong only to project activation, orchestration, status, stop, and
project-wide reconciliation.
Mode selection
- Use issue mode when the positional input is exactly one Linear issue identifier
and
--quick is absent.
- Use quick-fix mode when
--quick is present or the positional input is a free-form
objective rather than exactly one issue identifier. Remove --quick and recognized
transport flags from the objective but preserve the user's wording.
- If neither mode has a non-empty identifier or objective, ask one concise clarification
before any discovery. Never reinterpret an unavailable Linear issue as a quick fix.
Issue mode
- Before dispatch, read
${CLAUDE_PLUGIN_ROOT}/shared/agent-runtime-map.md, select the
active runtime name for monkey-maestro:linear-reader, and dispatch it in
MODE: selected for only the exact Linear issue. Require its exact project id, title,
branch, description, status, blocker ids, and current direct blocker rows.
- A
completed or canceled issue returns already-terminal. A blocked issue or any
unknown project, status, membership, or blocker fact refuses dispatch. A ready or
explicitly named started issue may proceed. Manual issue spawn does not calculate
project capacity and does not read the rest of the project.
- Resolve the exact Superset task with
superset tasks get <issueId> --json. Require its
exact Linear issue and project binding. Calculate taskDigest as the first eight
hexadecimal characters of SHA-256 over the exact task id. Set the workspace name to
linear-<lowercaseIssueId>-<taskDigest> and use bindingArgs = --task <taskId>. This is
the same issue identity required of project orchestration.
Quick-fix mode
- Use the complete non-empty free-form objective as the source of truth. Do not dispatch
linear-reader. There is no Linear issue, task, project control, or capacity
calculation in this mode.
- Normalize the objective by trimming it and replacing every whitespace run with one
ASCII space. For the slug, lowercase that normalized value, apply Unicode NFKD, remove
combining marks, replace every run outside
a-z0-9 with one hyphen, trim hyphens, take
the first 48 characters, and trim any final hyphen again. Calculate the first eight
hexadecimal characters of SHA-256 over the normalized objective with Node. Use
quick-fix when the slug would otherwise be empty.
- Set the branch name to
quick/<slug>-<digest> and the workspace name to
quick-<slug>-<digest>. Use
bindingArgs = --branch <branchName> --skip-branch-prefix so Superset preserves that
exact branch instead of applying the project's configured prefix. This stable identity
makes the same objective recover the same workspace while distinct objectives do not
collide merely because their readable slugs match.
- Build the worker prompt from the exact objective plus the quick-fix ownership and
handoff rules in the shared contract. The worker prompt must not invoke
linear-devotee:greet or imply that a Linear issue exists.
Transport discovery
Resolve host, Superset project, and agent independently from an explicit argument, then
from narrow local discovery. Never consult a project control.
- For a missing host, run
superset status --json. Use its non-empty hostId only when
it reports running: true and healthy: true.
- For a missing project, inspect the current path and
git rev-parse --path-format=absolute --git-common-dir, then run
superset projects list --local --json. Prefer the exact id following
.superset/worktrees/ in the current path when present in the list; otherwise use the
single project whose path owns the current path or Git common directory; otherwise use
the sole listed local project.
- For a missing agent, run
superset agents list --host <targetHostId> --json. Use the
active runtime (codex or claude) only when that exact preset or id is listed;
otherwise use the sole listed agent.
- Failed, malformed, empty, or ambiguous discovery supplies no value. Gather every
unresolved selector and its deterministic available choices into one concise
clarification. The reply supplies configuration only; it is not mutation approval.
Workspace inspection and approval
- List workspaces once with the resolved Superset project and exact workspace-name
search. In issue mode keep only exact task-bound matches. In quick-fix mode keep only
exact name-and-branch matches. Multiple exact matches are ambiguous and refuse
mutation; an unavailable or malformed listing also refuses.
- With one matching workspace, list live terminals for that exact workspace. A live
terminal returns
already-running without approval or launch. Zero matches previews
create; one match with no live terminal previews recover. An unavailable or
malformed terminal result refuses mutation. Treat any live terminal conservatively as
an existing worker because the CLI exposes no stronger agent/shell discriminator.
- Show one final preview containing mode, issue status and blockers or quick-fix
objective, task or branch, host, Superset project, agent, create/recover action,
workspace name, and the complete worker prompt. For
create, first resolve tagArgs
using Workspace groups in the shared contract and include the inherited groups
(or root) in this preview; unresolved placement refuses creation. For recover, show
the matched workspace's existing groups and preserve them. Ask exactly once:
Create or recover this displayed worker? (y / cancel)
Mutation
- On approval, use the existing exact workspace or attempt one create without embedding
an agent. Expand
bindingArgs to the exact mode-specific argument defined above:
superset workspaces create \
--project <supersetProjectId> \
--host <targetHostId> \
<bindingArgs> \
--name <workspaceName> \
<tagArgs> \
--json
- A
create action launches only when the response explicitly says created and
returns the exact mode-bound workspace id. If it says reused, another invocation won
the create race: report concurrent-reuse and launch nothing. For recover, retain
the exact preflight workspace id.
- Immediately list the chosen workspace's live terminals once more. If a worker
appeared, report
already-running and stop. If the check is unavailable or malformed,
launch nothing. Otherwise attempt one agent launch and require explicit success before
reporting dispatched:
superset agents create \
--workspace <workspaceId> \
--host <targetHostId> \
--agent <defaultAgent> \
--prompt <workerPrompt> \
--json
- Preserve a successfully created or recovered workspace when launch explicitly fails
and report
launch-failed. A transport error or malformed launch response is
launch-unknown; never retry during the same invocation. In issue mode direct the user
to read-only monkey-maestro:reconcile <projectId> <issueId>. In quick-fix mode report
the exact workspace and require a later identical spawn to repeat both terminal checks
before any recovery launch. Never write execution telemetry.
Worker prompts
An issue worker prompt starts with linear-devotee:greet <issueId> and preserves the
selected issue's title, branch, and description verbatim. Extract scope, acceptance
criteria, and required checks only when the description states them; otherwise label each
missing section not specified in Linear and never infer it. Include the shared ownership
rules.
A quick-fix worker prompt starts directly with the exact objective, requires repository
instructions to be read before editing, scopes ownership to this fix and workspace,
requires appropriate checks, and forbids reverting others' edits, merging, pushing,
changing dependencies, or changing Linear. It ends with a concise DONE/BLOCKED handoff.
Report
monkey-maestro:spawn report
Mode: issue | quick-fix
Work: <issue id / live status / blockers | quick-fix objective>
Binding: <task id | branch name>
Workspace: created | reused | none
Groups: <inherited tags or root for create; existing groups for recover>
Result: dispatched | already-running | concurrent-reuse | launch-failed | launch-unknown | already-terminal | blocked | canceled | degraded
1---2name: spawn3description: Use when the user explicitly wants either one Linear-authorized issue launched or recovered in a task-linked Superset workspace, or one free-form quick fix launched in a branch-bound workspace.4---56# spawn78## Voice910Read `../../persona.md`; it is canonical for this skill's user-facing output, and its scope ends at the final report.1112## Contract1314Read `${CLAUDE_PLUGIN_ROOT}/shared/project-execution-contract.md`. This skill makes at15most one workspace-create attempt and one agent-launch attempt after one approval. It16never changes Linear status or relations, merges, pushes, or changes dependencies.1718`spawn` is a manual dispatch path. Never read or obey a Linear project control, even when19one exists. Controls belong only to project activation, orchestration, status, stop, and20project-wide reconciliation.2122## Mode selection23241. Use **issue mode** when the positional input is exactly one Linear issue identifier25 and `--quick` is absent.262. Use **quick-fix mode** when `--quick` is present or the positional input is a free-form27 objective rather than exactly one issue identifier. Remove `--quick` and recognized28 transport flags from the objective but preserve the user's wording.293. If neither mode has a non-empty identifier or objective, ask one concise clarification30 before any discovery. Never reinterpret an unavailable Linear issue as a quick fix.3132## Issue mode33341. Before dispatch, read `${CLAUDE_PLUGIN_ROOT}/shared/agent-runtime-map.md`, select the35 active runtime name for `monkey-maestro:linear-reader`, and dispatch it in36 `MODE: selected` for only the exact Linear issue. Require its exact project id, title,37 branch, description, status, blocker ids, and current direct blocker rows.382. A `completed` or `canceled` issue returns `already-terminal`. A blocked issue or any39 unknown project, status, membership, or blocker fact refuses dispatch. A ready or40 explicitly named `started` issue may proceed. Manual issue spawn does not calculate41 project capacity and does not read the rest of the project.423. Resolve the exact Superset task with `superset tasks get <issueId> --json`. Require its43 exact Linear issue and project binding. Calculate `taskDigest` as the first eight44 hexadecimal characters of SHA-256 over the exact task id. Set the workspace name to45 `linear-<lowercaseIssueId>-<taskDigest>` and use `bindingArgs = --task <taskId>`. This is46 the same issue identity required of project orchestration.4748## Quick-fix mode49501. Use the complete non-empty free-form objective as the source of truth. Do not dispatch51 `linear-reader`. There is no Linear issue, task, project control, or capacity52 calculation in this mode.532. Normalize the objective by trimming it and replacing every whitespace run with one54 ASCII space. For the slug, lowercase that normalized value, apply Unicode NFKD, remove55 combining marks, replace every run outside `a-z0-9` with one hyphen, trim hyphens, take56 the first 48 characters, and trim any final hyphen again. Calculate the first eight57 hexadecimal characters of SHA-256 over the normalized objective with Node. Use58 `quick-fix` when the slug would otherwise be empty.593. Set the branch name to `quick/<slug>-<digest>` and the workspace name to60 `quick-<slug>-<digest>`. Use61 `bindingArgs = --branch <branchName> --skip-branch-prefix` so Superset preserves that62 exact branch instead of applying the project's configured prefix. This stable identity63 makes the same objective recover the same workspace while distinct objectives do not64 collide merely because their readable slugs match.654. Build the worker prompt from the exact objective plus the quick-fix ownership and66 handoff rules in the shared contract. The worker prompt must not invoke67 `linear-devotee:greet` or imply that a Linear issue exists.6869## Transport discovery7071Resolve host, Superset project, and agent independently from an explicit argument, then72from narrow local discovery. Never consult a project control.73741. For a missing host, run `superset status --json`. Use its non-empty `hostId` only when75 it reports `running: true` and `healthy: true`.762. For a missing project, inspect the current path and77 `git rev-parse --path-format=absolute --git-common-dir`, then run78 `superset projects list --local --json`. Prefer the exact id following79 `.superset/worktrees/` in the current path when present in the list; otherwise use the80 single project whose path owns the current path or Git common directory; otherwise use81 the sole listed local project.823. For a missing agent, run `superset agents list --host <targetHostId> --json`. Use the83 active runtime (`codex` or `claude`) only when that exact preset or id is listed;84 otherwise use the sole listed agent.854. Failed, malformed, empty, or ambiguous discovery supplies no value. Gather every86 unresolved selector and its deterministic available choices into one concise87 clarification. The reply supplies configuration only; it is not mutation approval.8889## Workspace inspection and approval90911. List workspaces once with the resolved Superset project and exact workspace-name92 search. In issue mode keep only exact task-bound matches. In quick-fix mode keep only93 exact name-and-branch matches. Multiple exact matches are ambiguous and refuse94 mutation; an unavailable or malformed listing also refuses.952. With one matching workspace, list live terminals for that exact workspace. A live96 terminal returns `already-running` without approval or launch. Zero matches previews97 `create`; one match with no live terminal previews `recover`. An unavailable or98 malformed terminal result refuses mutation. Treat any live terminal conservatively as99 an existing worker because the CLI exposes no stronger agent/shell discriminator.1003. Show one final preview containing mode, issue status and blockers or quick-fix101 objective, task or branch, host, Superset project, agent, create/recover action,102 workspace name, and the complete worker prompt. For `create`, first resolve `tagArgs`103 using **Workspace groups** in the shared contract and include the inherited groups104 (or root) in this preview; unresolved placement refuses creation. For `recover`, show105 the matched workspace's existing groups and preserve them. Ask exactly once:106107```text108Create or recover this displayed worker? (y / cancel)109```110111## Mutation1121131. On approval, use the existing exact workspace or attempt one create without embedding114 an agent. Expand `bindingArgs` to the exact mode-specific argument defined above:115116```text117superset workspaces create \118 --project <supersetProjectId> \119 --host <targetHostId> \120 <bindingArgs> \121 --name <workspaceName> \122 <tagArgs> \123 --json124```1251262. A `create` action launches only when the response explicitly says `created` and127 returns the exact mode-bound workspace id. If it says `reused`, another invocation won128 the create race: report `concurrent-reuse` and launch nothing. For `recover`, retain129 the exact preflight workspace id.1303. Immediately list the chosen workspace's live terminals once more. If a worker131 appeared, report `already-running` and stop. If the check is unavailable or malformed,132 launch nothing. Otherwise attempt one agent launch and require explicit success before133 reporting `dispatched`:134135```text136superset agents create \137 --workspace <workspaceId> \138 --host <targetHostId> \139 --agent <defaultAgent> \140 --prompt <workerPrompt> \141 --json142```1431444. Preserve a successfully created or recovered workspace when launch explicitly fails145 and report `launch-failed`. A transport error or malformed launch response is146 `launch-unknown`; never retry during the same invocation. In issue mode direct the user147 to read-only `monkey-maestro:reconcile <projectId> <issueId>`. In quick-fix mode report148 the exact workspace and require a later identical spawn to repeat both terminal checks149 before any recovery launch. Never write execution telemetry.150151## Worker prompts152153An issue worker prompt starts with `linear-devotee:greet <issueId>` and preserves the154selected issue's title, branch, and description verbatim. Extract scope, acceptance155criteria, and required checks only when the description states them; otherwise label each156missing section `not specified in Linear` and never infer it. Include the shared ownership157rules.158159A quick-fix worker prompt starts directly with the exact objective, requires repository160instructions to be read before editing, scopes ownership to this fix and workspace,161requires appropriate checks, and forbids reverting others' edits, merging, pushing,162changing dependencies, or changing Linear. It ends with a concise DONE/BLOCKED handoff.163164## Report165166```text167monkey-maestro:spawn report168 Mode: issue | quick-fix169 Work: <issue id / live status / blockers | quick-fix objective>170 Binding: <task id | branch name>171 Workspace: created | reused | none172 Groups: <inherited tags or root for create; existing groups for recover>173 Result: dispatched | already-running | concurrent-reuse | launch-failed | launch-unknown | already-terminal | blocked | canceled | degraded174```