diff --git a/src/hooks/atlas/system-reminder-templates.test.ts b/src/hooks/atlas/system-reminder-templates.test.ts
index cc2aaee95..042a95165 100644
--- a/src/hooks/atlas/system-reminder-templates.test.ts
+++ b/src/hooks/atlas/system-reminder-templates.test.ts
@@ -1,5 +1,6 @@
import { describe, it, expect } from "bun:test"
import {
+ BOULDER_COMPLETE_PROMPT,
BOULDER_CONTINUATION_PROMPT,
SINGLE_TASK_DIRECTIVE,
VERIFICATION_REMINDER,
@@ -47,6 +48,14 @@ describe("VERIFICATION_REMINDER", () => {
})
})
+describe("BOULDER_COMPLETE_PROMPT", () => {
+ it("contains the required placeholders", () => {
+ expect(BOULDER_COMPLETE_PROMPT).toContain("{PLAN_NAME}")
+ expect(BOULDER_COMPLETE_PROMPT).toContain("{ELAPSED_HUMAN}")
+ expect(BOULDER_COMPLETE_PROMPT).toContain("{TASK_BREAKDOWN}")
+ })
+})
+
describe("VERIFICATION_REMINDER_GEMINI", () => {
it("contains node_modules exclusion pathspec in git diff command", () => {
expect(VERIFICATION_REMINDER_GEMINI).toContain(":!node_modules")
diff --git a/src/hooks/atlas/system-reminder-templates.ts b/src/hooks/atlas/system-reminder-templates.ts
index 7f42a7acb..d6e3b0cbf 100644
--- a/src/hooks/atlas/system-reminder-templates.ts
+++ b/src/hooks/atlas/system-reminder-templates.ts
@@ -33,6 +33,17 @@ RULES:
- Do not stop until all tasks are complete
- If blocked, document the blocker and move to the next task`
+export const BOULDER_COMPLETE_PROMPT = `
+BOULDER COMPLETE: plan "{PLAN_NAME}" is fully checked.
+
+Total elapsed: {ELAPSED_HUMAN}
+
+Per-task breakdown:
+{TASK_BREAKDOWN}
+
+Per your instructions, print the final ORCHESTRATION COMPLETE summary in your next turn. This nudge fires at most once.
+`
+
export const VERIFICATION_REMINDER = `**THE SUBAGENT JUST CLAIMED THIS TASK IS DONE. THEY ARE PROBABLY LYING.**
Subagents say "done" when code has errors, tests pass trivially, logic is wrong,
diff --git a/src/hooks/atlas/types.ts b/src/hooks/atlas/types.ts
index 8b39867e8..4c03d3966 100644
--- a/src/hooks/atlas/types.ts
+++ b/src/hooks/atlas/types.ts
@@ -48,4 +48,5 @@ export interface SessionState {
waitingForFinalWaveApproval?: boolean
pendingFinalWaveTaskCount?: number
approvedFinalWaveTaskCount?: number
+ boulderCompletionNudgedAt?: Record
}