diff --git a/pi-ralph-wiggum/CHANGELOG.md b/pi-ralph-wiggum/CHANGELOG.md
index 1cac967..c2fbbff 100644
--- a/pi-ralph-wiggum/CHANGELOG.md
+++ b/pi-ralph-wiggum/CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog
+## Unreleased
+
+### Changed
+- Add a completion gate to Ralph prompts and skill guidance. Agents are now instructed to preserve required verification artifacts and record an exact monitor-rerunnable final command before emitting `COMPLETE`.
+- Queue Ralph follow-up messages with `streamingBehavior: "followUp"` to avoid runtime warnings when a loop tool schedules the next iteration while the agent is still processing.
+- Add a stale-prompt guard instructing agents to reload loop state and ignore already-completed loops instead of doing duplicate work.
+
## 0.2.0 - 2026-04-19
### Changed
diff --git a/pi-ralph-wiggum/README.md b/pi-ralph-wiggum/README.md
index 7eeeab9..ad7df84 100644
--- a/pi-ralph-wiggum/README.md
+++ b/pi-ralph-wiggum/README.md
@@ -46,11 +46,24 @@ You ask Pi to set up a ralph-wiggum loop.
- It gets a prompt telling it to work on the task, update the task file, and call ralph_done when it finishes that iteration
- When the iteration is done, it calls `ralph_done`, resending the same prompt*
- Pi runs until either:
- - All tasks are done (Pi sends `COMPLETE`)
+ - All tasks are done and final verification is externally rerunnable (Pi sends `COMPLETE`)
- Max iterations (default 50)
- You hit `esc` (pausing the loop)
If you hit `esc`, you can run `/ralph-stop` to clear the loop. Alternatively, just tell Pi to continue to keep going.
+## Completion gate
+
+For build/test/refactor tasks, Ralph prompts the agent not to complete based only on checked checklist items. Before sending `COMPLETE`, the agent should:
+
+- Preserve any build artifacts, generated files, virtualenvs, or copied libraries required by final verification.
+- Record the exact final command, working directory, relevant environment variables, and output summary in the task file.
+- Ensure a separate monitor can rerun that command from the same worktree in a fresh shell.
+- Mark work blocked or deferred if the final command cannot be made externally rerunnable.
+
+## Stale prompt guard
+
+If an already-queued Ralph prompt arrives after a loop has completed, the agent should reload `.ralph/.state.json` before doing work. If the loop state is `completed`, it should ignore the stale prompt, avoid file edits and task commands, and not call `ralph_done`.
+
## Commands
| Command | Description |
diff --git a/pi-ralph-wiggum/SKILL.md b/pi-ralph-wiggum/SKILL.md
index a44568c..7b224ba 100644
--- a/pi-ralph-wiggum/SKILL.md
+++ b/pi-ralph-wiggum/SKILL.md
@@ -23,9 +23,25 @@ ralph_start({
2. Work on the task and update the file each iteration.
3. Record verification evidence (commands run, file paths, outputs) in the task file.
4. Call `ralph_done` to proceed to the next iteration.
-5. Output `COMPLETE` when finished.
+5. Before outputting `COMPLETE`, run a final verification command that an external monitor can rerun from the same worktree.
6. Stop when complete or when max iterations is reached (default 50).
+## Completion Gate
+
+For build/test/refactor tasks, do not mark complete based only on checked checklist items.
+
+Before emitting `COMPLETE`:
+
+- Preserve any build artifacts, generated files, virtualenvs, or environment setup required by the final verification command.
+- Record the exact final command, working directory, relevant environment variables, and output summary in the task file.
+- Ensure the command can be rerun by a separate monitor in a fresh shell from the same worktree.
+- If a test cannot be rerun externally, mark the item blocked or deferred instead of complete.
+- If cleanup removes required verification artifacts, recreate them or update the final command before completion.
+
+## Stale Prompt Guard
+
+Before doing any work from a Ralph prompt, reload `.ralph/.state.json`. If the loop state says `"status": "completed"`, do not edit files, do not run task commands, and do not call `ralph_done`. Reply briefly that the stale prompt was ignored because the loop is already completed.
+
## User Commands
- `/ralph start ` - Start a new loop.
@@ -58,7 +74,13 @@ Brief description.
- [x] Completed item
## Verification
-- Evidence, commands run, or file paths
+- Commands run, working directories, relevant environment variables, outputs, and whether artifacts required for reruns were preserved
+
+## Final Verification
+- Exact monitor-rerunnable command: ``
+- Working directory: ``
+- Required preserved artifacts: ``
+- Result: `