worker-critic¶
The worker-critic skill defines the protocol for a structured multi-agent revision loop. The orchestrator manages the loop; the worker produces drafts; the critic evaluates them. The loop terminates on approval or after 3 iterations.
Loop protocol¶
orchestrator โ worker (Initial Draft mode)
worker โ draft v1
orchestrator โ critic (draft v1 + rubric)
critic โ [STATUS: APPROVED] or [STATUS: REJECTED] + feedback
if APPROVED โ done
if REJECTED โ orchestrator โ worker (Revision mode: draft v1 + feedback)
worker โ draft v2
orchestrator โ critic (draft v2)
critic โ [STATUS: APPROVED] or [STATUS: REJECTED] + feedback
if APPROVED โ done
if REJECTED โ orchestrator โ worker (Revision mode: draft v2 + feedback)
worker โ draft v3
orchestrator โ critic (draft v3)
critic โ [STATUS: APPROVED] or [STATUS: REJECTED] + feedback
if APPROVED โ done
if REJECTED (3rd rejection) โ halt loop; present draft v3; append unresolved feedback to critic-log.md
Max iterations¶
Strictly 3. The orchestrator tracks iteration count (1, 2, 3). On the 3rd rejection the orchestrator halts the loop, presents the current draft to the user as-is, and appends the unresolved critique to .neuroflow/{phase}/critic-log.md. It does not attempt a 4th revision.
Critic output format¶
The critic response must begin with exactly one of:
or
On APPROVED: A brief 1โ2 sentence statement of why the draft passes. No further action required.
On REJECTED: The status token is immediately followed by a bulleted list of specific, actionable fixes โ no prose preamble before the bullets:
[STATUS: REJECTED]
- Fix X: [specific description of what is wrong and what the correct form should be]
- Fix Y: [specific description]
- Fix Z: [specific description]
On subsequent rounds (iteration 2 and 3): The critic compares the new draft against the previously-rejected version. It confirms which items from the prior feedback were addressed and flags only items that remain unresolved. It must not invent new requirements โ new issues may be noted but cannot be the sole basis for rejection if all prior feedback was addressed.
Worker modes¶
Initial Draft mode¶
Triggered on iteration 1. The worker receives the task parameters and rubric from the orchestrator and generates the best output it can without revision history.
Input format the orchestrator provides to the worker:
Task: {task description}
Phase: {active phase}
Rubric: {acceptance criteria derived from project_config.md, flow.md, and user-stated requirements}
Mode: Initial Draft
Revision mode¶
Triggered on iterations 2 and 3. The worker receives the previous draft and the critic's specific feedback.
Input format the orchestrator provides to the worker:
Task: {task description}
Phase: {active phase}
Rubric: {rubric โ same as iteration 1}
Mode: Revision
Previous Draft:
{draft from prior iteration}
Critic Feedback:
{bulleted feedback list from critic}
Revision rules for the worker: - Address each bullet point specifically - Maintain overall intent and structure from the previous draft โ do not start from scratch - Only change what the feedback requires; do not silently alter unrelated sections
Loop state tracking¶
After each round, the orchestrator writes the iteration state to .neuroflow/{phase}/critic-log.md.
File format:
# Critic Log โ {phase}
## Iteration 1
- Status: REJECTED
- Summary: [one-sentence summary of the main feedback]
## Iteration 2
- Status: APPROVED
## Final: APPROVED after 2 iterations
If the loop halts at max iterations:
## Iteration 3
- Status: REJECTED (LOOP HALTED โ max iterations reached)
- Unresolved feedback:
- [item 1]
- [item 2]
## Final: HALTED after 3 iterations โ unresolved critique appended above
Integration¶
Any phase command or agent can activate the worker-critic loop by invoking the worker-critic skill. The active phase determines which worker is used.
Worker selection:
| Phase | Worker |
|---|---|
| paper | paper-writer agent |
| poster | /poster command acts as worker; poster-critic agent is the critic |
| all other phases | general-purpose agent with the phase skill loaded as the prompt context |
How to pass context to a general-purpose worker:
For phases without a dedicated agent, construct the worker prompt as:
[Phase skill content: neuroflow:phase-{phase}]
[Current .neuroflow/{phase}/ context]
Task: {task description}
Rubric: {rubric}
Mode: Initial Draft | Revision
If the phase has no direct match, use the closest phase skill and note the choice in critic-log.md.
Orchestrator role¶
The orchestrator is the coordinating entity that runs the worker-critic loop. It is not a separate agent โ it is the current Claude instance (or the invoking agent) that:
- Reads the task and determines the active phase
- Constructs the rubric from
project_config.md,flow.md, and user-stated criteria - Selects and instructs the worker
- Routes the draft to the critic
- Tracks iteration count (1โ3) and applies the termination conditions
- Writes to
critic-log.mdafter each round - Presents the final output or halts with unresolved feedback
The orchestrator does not produce content itself โ it coordinates, routes, and records.
Termination conditions¶
The loop terminates when either of the following is reached:
(a) APPROVED โ the critic returns [STATUS: APPROVED]; the orchestrator presents the final draft to the user and writes APPROVED to critic-log.md.
(b) 3rd rejection โ the critic returns [STATUS: REJECTED] on iteration 3; the orchestrator halts the loop immediately, presents the current draft to the user, appends the unresolved feedback to .neuroflow/{phase}/critic-log.md, and informs the user that the loop has halted with outstanding critique.
Rubric construction¶
The orchestrator constructs the rubric from:
.neuroflow/project_config.mdโ project goals, modality, target journal / funder / output.neuroflow/flow.mdโ current phase context and open items.neuroflow/{phase}/flow.mdโ phase-specific progress and constraints- User-stated acceptance criteria for the current task
The rubric is passed to both the worker (as task framing) and the critic (as the evaluation standard). It must be concrete and measurable โ not a list of wishes.