EXECUTE NOW
Target: $ARGUMENTS
Parse arguments:
- N (required unless --dry-run): number of tasks to process
- --parallel: concurrent claim workers (max 5) + cross-connect validation
- --batch [id]: process only tasks from specific batch
- --type [type]: process only tasks at a specific phase (extract, create, reflect, reweave, verify, enrich)
- --dry-run: show what would execute without running
- --handoff: output structured RALPH HANDOFF block at end (for pipeline chaining)
Step 0: Read Vocabulary
Read ops/derivation-manifest.md (or fall back to ops/derivation.md) for domain vocabulary mapping. All output must use domain-native terms. If neither file exists, use universal terms.
START NOW. Process queue tasks.
MANDATORY CONSTRAINT: SUBAGENT SPAWNING IS NOT OPTIONAL
You MUST use the Task tool to spawn a subagent for EVERY task. No exceptions.
This is not a suggestion. This is not an optimization you can skip for "simple" tasks. The entire architecture depends on fresh context isolation per phase. Executing tasks inline in the lead session:
- Contaminates context (later tasks run on degraded attention)
- Skips the handoff protocol (learnings are not captured)
- Violates the ralph pattern (one phase per context window)
If you catch yourself about to execute a task directly instead of spawning a subagent, STOP. Call the Task tool. Every time. For every task. Including create tasks. Including "simple" tasks.
The lead session's ONLY job is: read queue, spawn subagent, evaluate return, update queue, repeat.
Phase Configuration
Each phase maps to specific Task tool parameters. Use these EXACTLY when spawning subagents.
| Phase | Skill Invoked | Purpose |
|---|---|---|
| extract | /reduce | Extract claims from source material |
| create | (inline note creation) | Write the {DOMAIN:note} file |
| enrich | /enrich | Add content to existing {DOMAIN:note} |
| reflect | /reflect | Find connections, update {DOMAIN:topic map}s |
| reweave | /reweave | Update older {DOMAIN:note_plural} with new connections |
| verify | /verify | Description quality + schema + health checks |
All phases use the same subagent configuration:
- subagent_type: knowledge-worker (if available) or default
- mode: dontAsk
Subagents inherit the session model. Users running opus get opus quality on processing phases. Users running sonnet get sonnet everywhere. Fresh context per phase already ensures efficiency — every phase gets full capability in the smart zone.
Step 1: Read Queue State
Read the queue file. Check these locations in order:
ops/queue.yamlops/queue/queue.yamlops/queue/queue.json
Parse the queue. Identify ALL pending tasks.
Queue structure (v2 schema):
The queue uses current_phase and completed_phases per task entry:
phase_order:
claim: [create, reflect, reweave, verify]
enrichment: [enrich, reflect, reweave, verify]
tasks:
- id: source-name
type: extract
status: pending
source: ops/queue/archive/2026-01-30-source/source.md
file: source-name.md
created: "2026-01-30T10:00:00Z"
- id: claim-010
type: claim
status: pending
target: "claim title here"
batch: source-name
file: source-name-010.md
current_phase: reflect
completed_phases: [create]
If the queue file does not exist or is empty, report: "Queue is empty. Use /seed or /pipeline to add sources."
Step 2: Filter Tasks
Build a list of actionable tasks — tasks where status == "pending". Order by position in the tasks array (first = highest priority).
Apply filters:
- If
--batchspecified: keep only tasks wherebatchmatches - If
--typespecified: keep only tasks wherecurrent_phasematches (e.g.,--type reflectfinds tasks whosecurrent_phaseis "reflect")
The phase_order header defines the phase sequence:
claim: create -> reflect -> reweave -> verifyenrichment: enrich -> reflect -> reweave -> verify
Step 3: If --dry-run, Report and Stop
Show this and STOP (do not process):
--=={ ralph dry-run }==--
Queue: X total tasks (Y pending, Z done)
Phase distribution:
Claims: {create: N, reflect: N, reweave: N, verify: N}
Enrichments: {enrich: N, reflect: N, reweave: N, verify: N}
Next tasks to process:
1. {id} — phase: {current_phase} — {target}
2. {id} — phase: {current_phase} — {target}
...
Estimated: ~{N} subagent spawns
Step 4: Process Loop (SERIAL MODE)
If --parallel is set, skip to Step 6 instead.
Process up to N tasks (default 1). For each iteration:
4a. Select Next Task
Pick the first pending task from the filtered list. Read its metadata: id, type, file, target, batch, current_phase, completed_phases.
The current_phase determines which skill to invoke.
Report:
=== Processing task {i}/{N}: {id} — phase: {current_phase} ===
Target: {target}
File: {file}
4b. Build Subagent Prompt
Construct a prompt based on current_phase. Every prompt MUST include:
- Reference to the task file path (from queue's
filefield) - The task identity (id, current_phase, target)
- The skill to invoke with
--handoff ONE PHASE ONLYconstraint- Instruction to output RALPH HANDOFF block
Phase-specific prompts:
For extract phase (type=extract tasks only):
Read the task file at ops/queue/{FILE} for context.
You are processing task {ID} from the work queue.
Phase: extract | Target: {TARGET}
Run /reduce --handoff on the source file referenced in the task file.
After extraction: create per-claim task files, update the queue with new entries
(1 entry per claim with current_phase/completed_phases), output RALPH HANDOFF.
ONE PHASE ONLY. Do NOT run reflect or other phases.
For create phase:
Read the task file at ops/queue/{FILE} for context.
You are processing task {ID} from the work queue.
Phase: create | Target claim: {TARGET}
Create a {DOMAIN:note} for this claim in {DOMAIN:notes}/[claim as sentence].md
Follow note design patterns:
- YAML frontmatter with description (adds info beyond title), topics
- Body: 150-400 words showing reasoning with connective words
- Footer: Source (wiki link), Relevant Notes (with context), Topics
Update the task file's ## Create section.
ONE PHASE ONLY. Do NOT run reflect.
For enrich phase:
Read the task file at ops/queue/{FILE} for context.
You are processing task {ID} from the work queue.
Phase: enrich | Target: {TARGET}
Run /enrich --handoff using the task file for context.
The task file specifies which existing {DOMAIN:note} to enrich and what to add.
ONE PHASE ONLY. Do NOT run reflect.
For reflect phase:
Build sibling list: Query the queue for other claims in the same batch where completed_phases includes "create" (note already exists). Format as wiki links.
Read the task file at ops/queue/{FILE} for context.
You are processing task {ID} from the work queue.
Phase: reflect | Target: {TARGET}
OTHER CLAIMS FROM THIS BATCH (check connections to these alongside regular discovery):
{for each sibling in batch where completed_phases includes "create":}
- [[{SIBLING_TARGET}]]
{end for, or "None yet" if this is the first claim}
Run /reflect --handoff on: {TARGET}
Use dual discovery: {DOMAIN:topic map} exploration AND semantic search.
Add inline links where genuine connections exist — including sibling claims listed above.
Update relevant {DOMAIN:topic map} with this {DOMAIN:note}.
ONE PHASE ONLY. Do NOT run reweave.
For reweave phase:
Same sibling list as reflect (re-query queue for freshest state):
Read the task file at ops/queue/{FILE} for context.
You are processing task {ID} from the work queue.
Phase: reweave | Target: {TARGET}
OTHER CLAIMS FROM THIS BATCH:
{for each sibling in batch where completed_phases includes "create":}
- [[{SIBLING_TARGET}]]
{end for}
Run /reweave --handoff for: {TARGET}
This is the BACKWARD pass. Find