AGENTS.md
packages/omo-opencode/src/hooks/todo-continuation-enforcer/AGENTS.mdAGENTS.md
Quality
66/100
Scores the file, not the repository.Length
521 words
8 headings · 3 code blocksRepository
67k
— · pushed 0 days agoLast changed
2 days ago
First indexed 2 days ago.1# src/hooks/todo-continuation-enforcer/ (Boulder Continuation Mechanism)23**Generated:** 2026-07-17 (7d664b96b)45## OVERVIEW6717 source files (~1690 LOC). The "boulder" Continuation Tier hook: forces Sisyphus to keep rolling when incomplete todos remain. Fires on `session.idle`, injects a continuation prompt after a 2s countdown toast.89## HOW IT WORKS1011```12session.idle13 → Is main session (not prometheus/compaction/plan)? (DEFAULT_SKIP_AGENTS)14 → No abort detected recently? (ABORT_WINDOW_MS = 3s)15 → Todos still incomplete? (todo.ts)16 → No background tasks running?17 → Cooldown passed? (CONTINUATION_COOLDOWN_MS = 5s, exponential backoff)18 → Failure count < max? (MAX_CONSECUTIVE_FAILURES = 5)19 → Not paused at turn boundary? (continuationBlockReason)20 → Start 2s countdown toast → inject CONTINUATION_PROMPT21```2223## TURN-BOUNDARY PAUSE2425After injecting `CONTINUATION_PROMPT` the hook watches the next turn before26rearming. `awaitingPostInjectionProgressCheck` is set on injection; assistant27activity (`message.updated` / `message.part.updated` / `message.part.delta` with28role=assistant, or `tool.execute.before/after`) marks `continuationResponseObserved`.2930On the next `session.idle`, `trackContinuationProgress` resolves the pause:3132- No progress + `continuationResponseObserved` set: `continuationBlockReason = "directive-response"`. The assistant answered without advancing todos, so rearming stops.33- Genuine user message inside the accepted-continuation window: `continuationBlockReason = "user-interruption"`. Synthetic/internal split messages (continuation echo, system directives) are filtered out. When the user `message.updated` event lacks parts, classification is deferred to `message.part.updated` by stashing `pendingUserMessageID`.3435While `continuationBlockReason` is set, `handleSessionIdle` and `continuation-injection.ts` skip. It is cleared on real todo progress, abort, or a fresh injection.3637## KEY FILES3839| File | Purpose |40|------|---------|41| `handler.ts` | `createTodoContinuationHandler()`: event router. Handles `session.error` (abort + token-limit detection) and `session.compacted`; delegates `session.idle` and the message lifecycle to idle/non-idle handlers |42| `idle-event.ts` | `handleSessionIdle()`: main decision gate for `session.idle` |43| `non-idle-events.ts` | `handleNonIdleEvent()`: `message.updated` / `message.part.updated` / `message.part.delta` and `tool.execute` handlers; classifies user interruptions vs assistant turns for the turn-boundary pause |44| `session-state.ts` | `SessionStateStore`: per-session failure/abort/cooldown/progress state |45| `todo.ts` | Check todo completion status via session store |46| `countdown.ts` | 2s countdown toast before injection |47| `abort-detection.ts` | Detect MessageAbortedError / AbortError |48| `continuation-injection.ts` | Build + inject CONTINUATION_PROMPT into session |49| `message-directory.ts` | Temp dir for message injection exchange |50| `constants.ts` | Timing constants, CONTINUATION_PROMPT, skip agents |51| `types.ts` | `SessionState`, handler argument types |5253## CONSTANTS5455```typescript56DEFAULT_SKIP_AGENTS = ["prometheus", "compaction", "plan"]57CONTINUATION_COOLDOWN_MS = 5_000 // 5s base, exponential backoff per failure58MAX_CONSECUTIVE_FAILURES = 5 // Then 5min pause (exponential backoff)59FAILURE_RESET_WINDOW_MS = 5 * 60_000 // 5min window for failure reset60COUNTDOWN_SECONDS = 261ABORT_WINDOW_MS = 3000 // Grace after abort signal62```6364## STATE PER SESSION6566```typescript67interface SessionState {68 stagnationCount: number // Turns without todo progress69 consecutiveFailures: number // Resets after FAILURE_RESET_WINDOW_MS70 lastInjectedAt?: number // Cooldown base (exponential backoff)71 abortDetectedAt?: number // Cleared after ABORT_WINDOW_MS72 wasCancelled?: boolean // Abort/cancel flag73 tokenLimitDetected?: boolean // Skip retry on context overflow74 awaitingPostInjectionProgressCheck?: boolean // Injected, awaiting next turn75 continuationResponseObserved?: boolean // Assistant replied to injection76 continuationBlockReason?: "directive-response" | "user-interruption"77 pendingUserMessageID?: string // Deferred user msg pending part classification78 countdownStartedAt?: number79 inFlight?: boolean // Injection in progress80 allTodosCompletedAt?: number81}82```8384## RELATIONSHIP TO ATLAS8586`todoContinuationEnforcer` handles **main Sisyphus sessions** only.87`atlasHook` handles **boulder/ralph/subagent sessions** with a different decision gate.88Both fire on `session.idle` but check session type first.89
Also in code-yeongyu/oh-my-openagent
Diff this repo’s formatsOne repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| code-yeongyu/oh-my-openagentpackages/omo-opencode/src/features/claude-code-agent-loader/AGENTS.md · 67k | AGENTS.md | archdeploymentagent-behaviour | 62/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentpackages/omo-opencode/src/features/claude-code-mcp-loader/AGENTS.md · 67k | AGENTS.md | lint-formatarchsecuritydeployment+1 | 66/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentpackages/omo-opencode/src/tools/background-task/AGENTS.md · 67k | AGENTS.md | arch | 70/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentscript/AGENTS.md · 67k | AGENTS.md | buildtestarchdeployment | 80/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentpackages/omo-opencode/src/features/claude-code-plugin-loader/AGENTS.md · 67k | AGENTS.md | archdeploymentagent-behaviour | 70/100 | 2 days ago | |
| code-yeongyu/oh-my-openagent.agents/AGENTS.md · 67k | AGENTS.md | stylearchtesting-strategydatabase | 64/100 | 2 days ago | |
| code-yeongyu/oh-my-openagent.opencode/AGENTS.md · 67k | AGENTS.md | stylearchdo-not | 71/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentAGENTS.md · 67k | AGENTS.md | setupbuildtestlint-format+11 | 84/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentassets/AGENTS.md · 67k | AGENTS.md | buildteststylearch | 88/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentbin/AGENTS.md · 67k | AGENTS.md | teststylearch | 64/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentpackages/AGENTS.md · 67k | AGENTS.md | buildtestlint-formatstyle+3 | 83/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentpackages/agents-md-core/AGENTS.md · 67k | AGENTS.md | archdependenciesapi | 48/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentpackages/boulder-state/AGENTS.md · 67k | AGENTS.md | archapi | 48/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentpackages/claude-code-compat-core/AGENTS.md · 67k | AGENTS.md | archagent-behaviour | 56/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentpackages/comment-checker-core/AGENTS.md · 67k | AGENTS.md | archdependenciesapi | 48/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentpackages/delegate-core/AGENTS.md · 67k | AGENTS.md | stylearchdependenciesapi | 60/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentpackages/git-bash-mcp/AGENTS.md · 67k | AGENTS.md | buildtestlint-formatarch+1 | 82/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentpackages/hashline-core/AGENTS.md · 67k | AGENTS.md | archtypesdependenciesapi | 48/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentpackages/lsp-core/AGENTS.md · 67k | AGENTS.md | archmonorepo | 43/100 | 2 days ago | |
| code-yeongyu/oh-my-openagentpackages/lsp-daemon/AGENTS.md · 67k | AGENTS.md | buildtestlint-formatarch+1 | 89/100 | today |
Diff against packages/omo-opencode/src/features/claude-code-agent-loader/AGENTS.md Diff against packages/omo-opencode/src/features/claude-code-mcp-loader/AGENTS.md Diff against packages/omo-opencode/src/tools/background-task/AGENTS.md Diff against script/AGENTS.md Diff against packages/omo-opencode/src/features/claude-code-plugin-loader/AGENTS.md Diff against .agents/AGENTS.md Diff against .opencode/AGENTS.md Diff against AGENTS.md Diff against assets/AGENTS.md Diff against bin/AGENTS.md Diff against packages/AGENTS.md Diff against packages/agents-md-core/AGENTS.md Diff against packages/boulder-state/AGENTS.md Diff against packages/claude-code-compat-core/AGENTS.md Diff against packages/comment-checker-core/AGENTS.md Diff against packages/delegate-core/AGENTS.md Diff against packages/git-bash-mcp/AGENTS.md Diff against packages/hashline-core/AGENTS.md Diff against packages/lsp-core/AGENTS.md Diff against packages/lsp-daemon/AGENTS.md
Similar configs
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| aaif-goose/gooseAGENTS.md · 52k | AGENTS.md | setupbuildtestlint-format+6 | 100/100 | 3 days ago | |
| TryGhost/Ghoste2e/AGENTS.md · 55k | AGENTS.md | setupteststylearch+2 | 100/100 | 3 days ago | |
| duckduckgo/content-scope-scriptsspecial-pages/AGENTS.md · 70 | AGENTS.md | buildteststylearch+3 | 100/100 | 3 days ago | |
| n8n-io/n8npackages/@n8n/agents/AGENTS.md · 199k | AGENTS.md | buildteststylearch+3 | 100/100 | 3 days ago | |
| mui/material-uiAGENTS.md · 99k | AGENTS.md | setupbuildtestlint-format+9 | 100/100 | 3 days ago | |
| SkeneTechnologies/skene-cookbookAGENTS.md · 51 | AGENTS.md | setupbuildtestlint-format+7 | 100/100 | 2 days ago | |
| trick77/agents-md-syncAGENTS.md · 2 | AGENTS.md | setupbuildteststyle+5 | 100/100 | 3 days ago | |
| code-yeongyu/oh-my-openagentpackages/web/AGENTS.md · 67k | AGENTS.md | setupbuildtestlint-format+6 | 100/100 | 2 days ago |
