diff --git a/packages/boulder-state/src/index.ts b/packages/boulder-state/src/index.ts index 604c4a423..ad48dc166 100644 --- a/packages/boulder-state/src/index.ts +++ b/packages/boulder-state/src/index.ts @@ -20,6 +20,7 @@ export { getWorkByPlanName, getWorkForSession, getWorkResumeOptions, + normalizeSessionId, readBoulderState, resolveBoulderPlanPath, resolveBoulderPlanPathForWork, diff --git a/src/cli/config-manager/detect-current-config.ts b/src/cli/config-manager/detect-current-config.ts index e1fb39823..bc3034b9a 100644 --- a/src/cli/config-manager/detect-current-config.ts +++ b/src/cli/config-manager/detect-current-config.ts @@ -79,6 +79,7 @@ export function detectCurrentConfig(): DetectedConfig { hasOpenAI: true, hasGemini: false, hasCopilot: false, + hasCodex: false, hasOpencodeZen: true, hasZaiCodingPlan: false, hasKimiForCoding: false, diff --git a/src/features/AGENTS.md b/src/features/AGENTS.md index 439782e85..77e088e2b 100644 --- a/src/features/AGENTS.md +++ b/src/features/AGENTS.md @@ -16,7 +16,7 @@ File counts are NON-TEST `.ts` files only (test files co-located but excluded fr | **background-agent** | 30 / 1 subdir (spawner/) | HIGH | yes | Task lifecycle, concurrency (5/key), 3s polling, spawner pattern, circuit breaker. Newer files: `parent-wake-notifier.ts` (587 LOC), `loop-detector`, `error-classifier`, `fallback-retry-handler`, `process-cleanup`, `subagent-spawn-limits`, `session-status-classifier`, `compaction-aware-message-resolver`. | | **tmux-subagent** | 27 | HIGH | yes | Tmux pane management, grid planning, session orchestration via `runTmuxCommand` | | **opencode-skill-loader** | 25 / 1 subdir (merger/) | HIGH | yes | YAML frontmatter skill discovery from 4 scopes (project > opencode > user > global) | -| **builtin-skills** | 18 / 5 subdirs | LOW–MED | yes | 10 built-in skill files (git-master, playwright, frontend-ui-ux, review-work, ai-slop-remover, dev-browser, playwright-cli, **team-mode**, …) | +| **builtin-skills** | 17 / 5 subdirs | LOW–MED | yes | Built-in skill files (git-master, playwright, frontend-ui-ux, review-work, dev-browser, playwright-cli, **team-mode**, …) | | **skill-mcp-manager** | 11 | HIGH | yes | Tier-3 MCP client lifecycle per session (stdio + HTTP + OAuth) | | **claude-code-plugin-loader** | 11 | MEDIUM | yes | Unified Claude Code plugin discovery (commands, agents, skills, hooks, MCPs) | | **builtin-commands** | 11 / 1 subdir (templates/) | LOW | yes | Command templates: refactor, init-deep, handoff, ulw-loop, etc. | @@ -70,7 +70,7 @@ Eligible members: sisyphus, atlas, sisyphus-junior, hephaestus only. See [`team- State-first tmux integration. Centralized tmux command execution through `src/shared/tmux/runner.ts` (`runTmuxCommand`). Direct `Bun.spawn(["tmux", ...])` is FORBIDDEN — would drift from retry/timeout discipline. -### builtin-skills (10 skills) +### builtin-skills | Skill | LOC | MCP | Notes | |-------|-----|-----|-------| @@ -79,7 +79,7 @@ State-first tmux integration. Centralized tmux command execution through `src/sh | playwright-cli | 268 | — | Browser automation via CLI | | dev-browser | 221 | — | Persistent page state browser | | review-work | ~500 | — | 5-agent post-implementation review orchestrator | -| ai-slop-remover | ~300 | — | Remove AI code patterns | +| $omo:remove-ai-slops | — | — | Remove AI code patterns | | **team-mode** | — | — | Loaded only when `team_mode.enabled` (skill explains the 12 tools to agents) | | frontend-ui-ux | 79 | — | Design-first UI development | | (git-master-skill-metadata) | — | — | Companion to git-master | diff --git a/src/features/builtin-commands/templates/remove-ai-slops.ts b/src/features/builtin-commands/templates/remove-ai-slops.ts index 3807e06d2..5328cff3e 100644 --- a/src/features/builtin-commands/templates/remove-ai-slops.ts +++ b/src/features/builtin-commands/templates/remove-ai-slops.ts @@ -23,7 +23,7 @@ Analyzes all files changed in the current branch (compared to parent commit), re Use TodoWrite to create the task list: 1. Get changed files from branch -2. Run ai-slop-remover on each file in parallel +2. Run $omo:remove-ai-slops on each file in parallel 3. Critically review all changes 4. Fix any issues found @@ -42,20 +42,20 @@ git diff $(git merge-base "$BASE_BRANCH" HEAD)..HEAD --name-only If \`git symbolic-ref refs/remotes/origin/HEAD\` is unavailable, detect the base branch at runtime using the repo's configured remote default branch. Only fall back to \`main\` as a last resort. ### Phase 2: Parallel AI Slop Removal -For each changed file, spawn an agent in parallel using the Task tool with the ai-slop-remover skill: +For each changed file, spawn an agent in parallel using the Task tool with the $omo:remove-ai-slops skill: \`\`\` -task(category="quick", load_skills=["ai-slop-remover"], run_in_background=true, description="Remove AI slops from {filename}", prompt="Remove AI slops from: {file_path}") +task(category="quick", load_skills=["remove-ai-slops"], run_in_background=true, description="Remove AI slops from {filename}", prompt="Remove AI slops from: {file_path}") \`\`\` **CRITICAL**: Launch ALL agents in a SINGLE message with multiple Task tool calls for maximum parallelism. -Before running ai-slop-remover on each file, save a file-specific rollback artifact that captures only the delta introduced by the slop-removal pass. Use a safe pattern such as generating a per-file patch and reverse-applying it if review fails. +Before running $omo:remove-ai-slops on each file, save a file-specific rollback artifact that captures only the delta introduced by the slop-removal pass. Use a safe pattern such as generating a per-file patch and reverse-applying it if review fails. Do NOT use \`git checkout -- {file_path}\` or any rollback that discards pre-existing branch changes in the file. ### Phase 3: Critical Review -After all ai-slop-remover agents complete, perform a critical review with the following checklist: +After all $omo:remove-ai-slops agents complete, perform a critical review with the following checklist: **Safety Verification**: - [ ] No functional logic was accidentally removed @@ -79,7 +79,7 @@ After all ai-slop-remover agents complete, perform a critical review with the fo If any issues are found during critical review: 1. Identify the specific problem 2. Explain why it's a problem -3. Revert only the ai-slop-remover delta using the saved per-file patch or an equivalent reverse-apply workflow +3. Revert only the $omo:remove-ai-slops delta using the saved per-file patch or an equivalent reverse-apply workflow 4. If remaining ai-slops are found after reverting, remove them by editing the file yourself - with parallel tool calls, per-file 5. Verify the fix doesn't introduce new issues @@ -136,14 +136,14 @@ Team mode is enabled for this session. The rules below **override Phase 2-4** of { "kind": "category", "category": "quick", - "prompt": "You run ai-slop-remover on ONE file per task. Load ai-slop-remover via the skill tool. Read the task description for the file path. Apply the skill's detection criteria verbatim. After edits: run lsp_diagnostics on the file. Report via team_send_message(teamRunId=, to=\"lead\", summary=, body=) + team_task_update(status=completed). On ambiguity: send team_send_message(teamRunId=, to=\"lead\", summary=\"UNCLEAR\", body=) + team_task_update(status=pending). Never git add, never run tests, never touch other files." + "prompt": "You run $omo:remove-ai-slops on ONE file per task. Load $omo:remove-ai-slops via the skill tool. Read the task description for the file path. Apply the skill's detection criteria verbatim. After edits: run lsp_diagnostics on the file. Report via team_send_message(teamRunId=, to=\"lead\", summary=, body=) + team_task_update(status=completed). On ambiguity: send team_send_message(teamRunId=, to=\"lead\", summary=\"UNCLEAR\", body=) + team_task_update(status=pending). Never git add, never run tests, never touch other files." }, { "kind": "category", "category": "quick", "prompt": "Same contract as peer quick worker." }, { "kind": "category", "category": "quick", "prompt": "Same contract as peer quick worker." }, { "kind": "category", "category": "unspecified-low", - "prompt": "You are the FIX worker. You claim rework tasks that the lead creates after the external reviewer flags issues. Read the reviewer's per-hunk rollback instructions in the task description, apply the reverse patch, then run ai-slop-remover ONLY on the non-rolled-back remainder. Same reporting contract as quick peers. Handle UNCLEAR escalations the same way." + "prompt": "You are the FIX worker. You claim rework tasks that the lead creates after the external reviewer flags issues. Read the reviewer's per-hunk rollback instructions in the task description, apply the reverse patch, then run $omo:remove-ai-slops ONLY on the non-rolled-back remainder. Same reporting contract as quick peers. Handle UNCLEAR escalations the same way." } ] } @@ -162,7 +162,7 @@ Rationale for this composition: team_send_message( teamRunId=, to="*", kind="announcement", summary="slop-criteria", - body= + body= ) \`\`\` 3. Before spawning tasks, save a per-file rollback artifact that captures only the delta the slop-removal pass will introduce. Do NOT use \`git checkout -- \` — that would discard pre-existing branch changes. @@ -187,7 +187,7 @@ While any team task is \`pending | claimed | in_progress\`: \`\`\` If \`deep\` is unavailable in this session, fall back to \`category="unspecified-high"\`. - On a reviewer task returning FAIL: - - Create a rework team task: \`team_task_create(subject="rework: ", description=)\`. The \`unspecified-low\` fix member claims it. + - Create a rework team task: \`team_task_create(subject="rework: ", description=)\`. The \`unspecified-low\` fix member claims it. - Create a new reviewer task paired to the rework completion (same incremental pattern). - Loop until every file has a PASS from the reviewer AND no team task is outstanding.