paused status until you decide to continue.
This is the human-in-the-loop mechanism for reviewing intermediate results before proceeding with later tasks.
Checkpoints vs Approval Gates vs Quality Gates
| Checkpoints | Approval Gates | Quality Gates | |
|---|---|---|---|
| What it does | Pauses the mission at a defined point | Pauses a task and asks approve/reject | Blocks tasks until a score threshold is met |
| Scope | Mission-level | Task-level | Mission-level (group of tasks) |
| Trigger | Always — when afterTasks complete | Conditional — when a hook fires and condition matches | Automatic — when afterTasks complete |
| Resolution | Manual resume (no decision needed) | Approve, reject, or revise (decision required) | Automatic — passes or fails based on scores |
| Mission status | paused | Stays active (task is awaiting_approval) | Stays active (tasks are blocked) |
| Use case | ”Stop here so I can review before continuing" | "Should this task proceed?" | "Is the quality good enough to continue?” |
Quick Start
Add acheckpoints array to your mission:
Analyze codebase completes, the mission pauses. You get a Slack notification. You review the analysis output. When you’re satisfied, you resume the checkpoint and Apply refactoring starts.
Checkpoint Fields
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Unique name within the mission (used in events and API) |
afterTasks | string[] | Yes | Tasks that must complete before the checkpoint triggers |
blocksTasks | string[] | Yes | Tasks that are blocked until the checkpoint is resumed |
notifyChannels | string[] | No | Notification channels to alert when the checkpoint is reached |
message | string | No | Message included in the notification |
Resuming a Checkpoint
When a checkpoint is active, the mission shows statuspaused. Resume it through any interface:
- HTTP API
- CLI
- TUI
active and the blocked tasks become eligible for execution.
Mission Status Lifecycle
active. The mission only reaches completed when all tasks are done (and all checkpoints have been passed).
Examples
Code review before deployment
Analysis review before implementation
Combining with quality gates
Checkpoints and quality gates can coexist in the same mission. Quality gates are automatic (they check scores), checkpoints are manual (they always pause):Write tests is blocked by a quality gate (automatic — checks implementation score). Final review is blocked by a checkpoint (manual — always pauses).
Notifications
IfnotifyChannels is set on a checkpoint, Polpo automatically registers notification rules for checkpoint:reached and checkpoint:resumed events. The notification includes the checkpoint name, message, and the mission/task context.
See Notifications for channel configuration.
Events
| Event | When | Payload |
|---|---|---|
checkpoint:reached | A checkpoint is triggered (all afterTasks done) | missionId, group, checkpointName, message, afterTasks, blocksTasks, reachedAt |
checkpoint:resumed | A checkpoint is manually resumed | missionId, group, checkpointName |
Checkpoints in Playbooks
Checkpoints work in Playbooks — use{{placeholders}} in task titles referenced by afterTasks and blocksTasks: