Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion plugins/genie/agents/engineer.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,13 @@ After the implementation works:
Run the validation command from the wish. Record output. Confirm each acceptance criterion is met.

## 7. Report Completion
After completing all deliverables and validation, call `genie done <slug>#<group>` to report completion. The slug and group are in your initial prompt. This signals the orchestrator that your work is finished so it can advance to the next wave.
After completing all deliverables and validation:
1. Run validation commands from the wish
2. Commit and push your work
3. Call: `genie done <slug>#<group>` — marks the group complete in state (source of truth)
4. Call: `genie send 'Group <N> complete. <summary>' --to team-lead` — sends durable notification

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For consistency and to reduce ambiguity for the agent, it would be better to use <group> here instead of <N>. The genie done command on the preceding line uses <group>, and the corresponding initialPrompt in dispatch.ts is constructed with the actual group number. Using <group> makes it explicit which value should be substituted.

Suggested change
4. Call: `genie send 'Group <N> complete. <summary>' --to team-lead` — sends durable notification
4. Call: `genie send 'Group <group> complete. <summary>' --to team-lead` — sends durable notification


The slug and group are in your initial prompt. Both commands are mandatory — state is how the orchestrator tracks progress, the message is how team-lead gets notified.
</process>

<success_criteria>
Expand Down
8 changes: 7 additions & 1 deletion plugins/genie/agents/engineer/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,13 @@ After the implementation works:
Run the validation command from the wish. Record output. Confirm each acceptance criterion is met.

## 7. Report Completion
After completing all deliverables and validation, call `genie done <slug>#<group>` to report completion. The slug and group are in your initial prompt. This signals the orchestrator that your work is finished so it can advance to the next wave.
After completing all deliverables and validation:
1. Run validation commands from the wish
2. Commit and push your work

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Drop mandatory worker commit/push step

Making Commit and push your work a required engineer step can stall normal orchestration: workers now have to push before calling genie done, so any push failure (no remote access, auth issues, branch protection) prevents state completion and causes genie work to hang until timeout, and it also conflicts with the team-lead flow that already performs the canonical git add/commit/push in Phase 3 (plugins/genie/agents/team-lead/AGENTS.md lines 36-40).

Useful? React with 👍 / 👎.

3. Call: `genie done <slug>#<group>` — marks the group complete in state (source of truth)
4. Call: `genie send 'Group <N> complete. <summary>' --to team-lead` — sends durable notification

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For consistency and to reduce ambiguity for the agent, it would be better to use <group> here instead of <N>. The genie done command on the preceding line uses <group>, and the corresponding initialPrompt in dispatch.ts is constructed with the actual group number. Using <group> makes it explicit which value should be substituted.

Suggested change
4. Call: `genie send 'Group <N> complete. <summary>' --to team-lead` — sends durable notification
4. Call: `genie send 'Group <group> complete. <summary>' --to team-lead` — sends durable notification


The slug and group are in your initial prompt. Both commands are mandatory — state is how the orchestrator tracks progress, the message is how team-lead gets notified.
</process>

<success_criteria>
Expand Down
7 changes: 7 additions & 0 deletions plugins/genie/agents/fix.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,13 @@ Report when complete:
- Anything remaining or needing attention
</done_report>

<completion_reporting>
On completion, report to team-lead via durable message:
- Call: `genie send 'Fix applied — <summary>' --to team-lead`

This is mandatory. The message is how team-lead gets notified that the fix is done.
</completion_reporting>

<constraints>
- Minimal change surface — only affected files
- Intermediate worker — execute the task and report back. The orchestrator makes the ship/no-ship decision.
Expand Down
7 changes: 7 additions & 0 deletions plugins/genie/agents/fix/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,13 @@ Report when complete:
- Anything remaining or needing attention
</done_report>

<completion_reporting>
On completion, report to team-lead via durable message:
- Call: `genie send 'Fix applied — <summary>' --to team-lead`

This is mandatory. The message is how team-lead gets notified that the fix is done.
</completion_reporting>

<constraints>
- Minimal change surface — only affected files
- Intermediate worker — execute the task and report back. The orchestrator makes the ship/no-ship decision.
Expand Down
7 changes: 7 additions & 0 deletions plugins/genie/agents/qa.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,13 @@ New Tests Written: [N] ([list files])
```
</output_format>

<completion_reporting>
On completion, report your result to team-lead via durable message:
- Call: `genie send '<PASS|FAIL> — <summary>' --to team-lead`

This is mandatory. The message is how team-lead gets notified of your QA result.
</completion_reporting>

<constraints>
- Evidence required for every verdict — no "it looks fine"
- Never skip running tests
Expand Down
7 changes: 7 additions & 0 deletions plugins/genie/agents/qa/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,13 @@ New Tests Written: [N] ([list files])
```
</output_format>

<completion_reporting>
On completion, report your result to team-lead via durable message:
- Call: `genie send '<PASS|FAIL> — <summary>' --to team-lead`

This is mandatory. The message is how team-lead gets notified of your QA result.
</completion_reporting>

<constraints>
- Evidence required for every verdict — no "it looks fine"
- Never skip running tests
Expand Down
7 changes: 7 additions & 0 deletions plugins/genie/agents/reviewer.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,13 @@ Validation: <PASS|FAIL with output>
```
</output_format>

<completion_reporting>
On completion, report your verdict to team-lead via durable message:
- Call: `genie send '<SHIP|FIX-FIRST|BLOCKED> — <summary>' --to team-lead`

This is mandatory. The message is how team-lead gets notified of your verdict.
</completion_reporting>

<constraints>
- Binary verdict only — no "partial pass"
- Evidence required — don't assume, verify
Expand Down
7 changes: 7 additions & 0 deletions plugins/genie/agents/reviewer/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,13 @@ Validation: <PASS|FAIL with output>
```
</output_format>

<completion_reporting>
On completion, report your verdict to team-lead via durable message:
- Call: `genie send '<SHIP|FIX-FIRST|BLOCKED> — <summary>' --to team-lead`

This is mandatory. The message is how team-lead gets notified of your verdict.
</completion_reporting>

<constraints>
- Binary verdict only — no "partial pass"
- Evidence required — don't assume, verify
Expand Down
11 changes: 11 additions & 0 deletions plugins/genie/agents/team-lead.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,17 @@ genie team done <team>
```
</process>

<monitoring>
**State file is source of truth. Messages are notifications.**

When checking progress (after Phase 2 completes or if you need to diagnose):
1. **Primary:** `genie status <slug>` — reads the state file directly. Deterministic, instant, always accurate.
2. **Secondary:** `genie inbox` — durable messages from workers. May lag behind state.
3. **Bonus:** SendMessage from workers arrives between tool calls — use it but don't depend on it.

Never rely on messages alone to determine completion. Always check `genie status` first.
</monitoring>

<constraints>
- NEVER write code. `genie work` dispatches engineers.
- NEVER use `sleep`.
Expand Down
11 changes: 11 additions & 0 deletions plugins/genie/agents/team-lead/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,17 @@ genie team done <team>
```
</process>

<monitoring>
**State file is source of truth. Messages are notifications.**

When checking progress (after Phase 2 completes or if you need to diagnose):
1. **Primary:** `genie status <slug>` — reads the state file directly. Deterministic, instant, always accurate.
2. **Secondary:** `genie inbox` — durable messages from workers. May lag behind state.
3. **Bonus:** SendMessage from workers arrives between tool calls — use it but don't depend on it.

Never rely on messages alone to determine completion. Always check `genie status` first.
</monitoring>

<constraints>
- NEVER write code. `genie work` dispatches engineers.
- NEVER use `sleep`.
Expand Down
4 changes: 2 additions & 2 deletions src/term-commands/dispatch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -543,7 +543,7 @@ export async function workDispatchCommand(agentName: string, ref: string): Promi
team: process.env.GENIE_TEAM ?? 'genie',
role: `${agentName}-${group}`,
extraArgs: ['--append-system-prompt-file', contextFile],
initialPrompt: `Execute Group ${group} of wish "${slug}". Your full context is in the system prompt. Read the wish at ${wishPath} if needed. Implement all deliverables, run validation, and report completion. When done, run: genie done ${slug}#${group}`,
initialPrompt: `Execute Group ${group} of wish "${slug}". Your full context is in the system prompt. Read the wish at ${wishPath} if needed. Implement all deliverables, run validation, and report completion.\n\nWhen done:\n1. Run: genie done ${slug}#${group}\n2. Run: genie send 'Group ${group} complete. <summary>' --to team-lead`,
});
}

Expand Down Expand Up @@ -598,7 +598,7 @@ export async function reviewCommand(agentName: string, ref: string): Promise<voi
provider: 'claude',
team: process.env.GENIE_TEAM ?? 'genie',
extraArgs: ['--append-system-prompt-file', contextFile],
initialPrompt: `Review "${ref}". Your context and diff are in the system prompt. Evaluate against acceptance criteria and return SHIP, FIX-FIRST, or BLOCKED with severity-tagged findings.`,
initialPrompt: `Review "${ref}". Your context and diff are in the system prompt. Evaluate against acceptance criteria and return SHIP, FIX-FIRST, or BLOCKED with severity-tagged findings.\n\nWhen done, report your verdict:\nRun: genie send '<SHIP|FIX-FIRST|BLOCKED> — <summary>' --to team-lead`,
});
}

Expand Down
Loading