mixdog 1.4.0 → 1.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (493) hide show
  1. package/package.json +3 -2
  2. package/scripts/build-shipped-history.mjs +115 -33
  3. package/scripts/check-voice-runtime-inputs.mjs +25 -0
  4. package/scripts/gate-local.mjs +183 -63
  5. package/scripts/latest-guard.mjs +21 -9
  6. package/scripts/lib/gate-scheduler.mjs +138 -32
  7. package/scripts/lib/gate-timing-reporter.mjs +16 -0
  8. package/scripts/lib/isolated-test-env.mjs +10 -5
  9. package/scripts/lib/run-node-tests.mjs +91 -66
  10. package/scripts/lib/scoped-temp.d.mts +16 -0
  11. package/scripts/lib/scoped-temp.mjs +124 -0
  12. package/scripts/lib/stale-temp.mjs +44 -0
  13. package/scripts/lib/test-failure-records.mjs +14 -1
  14. package/scripts/lib/test-failure-summary.mjs +16 -4
  15. package/scripts/lib/test-spawn-ledger.mjs +12 -3
  16. package/scripts/post-release-check.mjs +1 -6
  17. package/scripts/pptx-kit-index.mjs +17 -5
  18. package/scripts/suite-health.mjs +115 -24
  19. package/scripts/test-data-dir.mjs +10 -7
  20. package/scripts/test.mjs +9 -14
  21. package/src/agents/advisor/AGENT.md +4 -4
  22. package/src/agents/advisor/agent.json +1 -1
  23. package/src/agents/explore/AGENT.md +22 -0
  24. package/src/agents/explore/agent.json +6 -0
  25. package/src/app.mjs +4 -0
  26. package/src/cli.mjs +7 -0
  27. package/src/defaults/agents.json +7 -0
  28. package/src/defaults/shipped-history.json +23 -2
  29. package/src/defaults/skills/browser-use/SKILL.md +10 -5
  30. package/src/defaults/skills/code-tidy/SKILL.md +71 -102
  31. package/src/defaults/skills/code-tidy/references/agent-cleanup.md +66 -114
  32. package/src/defaults/skills/code-tidy/references/cleanup-report.md +19 -35
  33. package/src/defaults/skills/code-tidy/references/dead-code.md +3 -9
  34. package/src/defaults/skills/code-tidy/references/test-suite-slop.md +16 -27
  35. package/src/defaults/skills/computer-use/SKILL.md +16 -4
  36. package/src/defaults/skills/goal-management/SKILL.md +1 -1
  37. package/src/defaults/skills/setup/references/actions.md +12 -6
  38. package/src/defaults/skills/setup/references/surfaces.md +2 -2
  39. package/src/defaults/skills/setup-guide/SKILL.md +5 -2
  40. package/src/defaults/skills/setup-guide/model-recommendations.json +13 -0
  41. package/src/defaults/skills/skill-creator/SKILL.md +85 -190
  42. package/src/defaults/skills/skill-creator/references/design.md +70 -162
  43. package/src/defaults/skills/skill-creator/references/evaluation.md +33 -92
  44. package/src/defaults/skills/test-suite/SKILL.md +194 -0
  45. package/src/defaults/skills/test-suite/references/case-management.md +51 -0
  46. package/src/defaults/skills/test-suite/references/flaky-policy.md +39 -0
  47. package/src/defaults/skills/test-suite/references/reliability.md +49 -0
  48. package/src/defaults/skills/test-suite/references/suite-design.md +78 -0
  49. package/src/defaults/skills/test-suite/scripts/inventory.mjs +335 -0
  50. package/src/defaults/skills/visualize/SKILL.md +6 -2
  51. package/src/lib/rules-builder.cjs +35 -42
  52. package/src/output-styles/common.md +2 -2
  53. package/src/output-styles/simple.md +1 -1
  54. package/src/rules/agent/AGENT.md +5 -4
  55. package/src/rules/lead/LEAD.md +12 -7
  56. package/src/rules/shared/10-tool-workflow.md +3 -1
  57. package/src/rules/shared/20-research.md +3 -6
  58. package/src/rules/shared/40-editing.md +1 -0
  59. package/src/rules/shared/45-destructive.md +0 -2
  60. package/src/rules/shared/50-execution.md +2 -0
  61. package/src/rules/shared/60-verification.md +10 -9
  62. package/src/rules/shared/70-delivery.md +8 -9
  63. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/abort-link.mjs +5 -1
  64. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch.mjs +10 -1
  65. package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +156 -24
  66. package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +13 -0
  67. package/src/runtime/agent/orchestrator/agent-runtime/maintenance-route.mjs +4 -1
  68. package/src/runtime/agent/orchestrator/cache-break-trace.mjs +2 -0
  69. package/src/runtime/agent/orchestrator/config.mjs +12 -7
  70. package/src/runtime/agent/orchestrator/context/deferred-tools.mjs +8 -8
  71. package/src/runtime/agent/orchestrator/context/role-instructions.mjs +5 -26
  72. package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +3 -1
  73. package/src/runtime/agent/orchestrator/internal-agents.mjs +3 -14
  74. package/src/runtime/agent/orchestrator/mcp/agent-connectors.mjs +122 -12
  75. package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +5 -3
  76. package/src/runtime/agent/orchestrator/mcp/client-config.mjs +13 -2
  77. package/src/runtime/agent/orchestrator/mcp/client-transport.mjs +152 -58
  78. package/src/runtime/agent/orchestrator/mcp/client.mjs +51 -18
  79. package/src/runtime/agent/orchestrator/mcp/oauth-login.mjs +88 -54
  80. package/src/runtime/agent/orchestrator/mcp/oauth.mjs +42 -26
  81. package/src/runtime/agent/orchestrator/providers/account-pool.mjs +54 -8
  82. package/src/runtime/agent/orchestrator/providers/anthropic-api-recovery.mjs +1 -1
  83. package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +37 -31
  84. package/src/runtime/agent/orchestrator/providers/anthropic-api-transport.mjs +8 -2
  85. package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens-recovery.mjs +6 -2
  86. package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +2 -2
  87. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
  88. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +31 -21
  89. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request/initial-status.mjs +3 -1
  90. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +14 -3
  91. package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +6 -0
  92. package/src/runtime/agent/orchestrator/providers/anthropic-turn-result.mjs +2 -2
  93. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-login.mjs +3 -1
  94. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-tokens.mjs +2 -2
  95. package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +1 -1
  96. package/src/runtime/agent/orchestrator/providers/command-code-oauth-login.mjs +1 -10
  97. package/src/runtime/agent/orchestrator/providers/command-code-oauth.mjs +1 -1
  98. package/src/runtime/agent/orchestrator/providers/cursor.mjs +3 -0
  99. package/src/runtime/agent/orchestrator/providers/custom-provider-config.mjs +40 -0
  100. package/src/runtime/agent/orchestrator/providers/custom-provider-keys.mjs +34 -0
  101. package/src/runtime/agent/orchestrator/providers/custom-provider.mjs +3 -0
  102. package/src/runtime/agent/orchestrator/providers/devin-auth.mjs +14 -7
  103. package/src/runtime/agent/orchestrator/providers/devin-wire-transport.mjs +3 -2
  104. package/src/runtime/agent/orchestrator/providers/devin.mjs +3 -0
  105. package/src/runtime/agent/orchestrator/providers/gemini-response.mjs +2 -2
  106. package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +4 -1
  107. package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs +248 -41
  108. package/src/runtime/agent/orchestrator/providers/lib/anthropic-prefix-trace.mjs +76 -11
  109. package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +45 -6
  110. package/src/runtime/agent/orchestrator/providers/lib/first-output-window.mjs +58 -0
  111. package/src/runtime/agent/orchestrator/providers/lib/listen-on.mjs +14 -0
  112. package/src/runtime/agent/orchestrator/providers/lib/oauth-page.mjs +0 -18
  113. package/src/runtime/agent/orchestrator/providers/lib/oauth-token-utils.mjs +138 -6
  114. package/src/runtime/agent/orchestrator/providers/mimo-oauth-login.mjs +1 -10
  115. package/src/runtime/agent/orchestrator/providers/mimo-oauth.mjs +1 -1
  116. package/src/runtime/agent/orchestrator/providers/model-cache.mjs +100 -33
  117. package/src/runtime/agent/orchestrator/providers/muse-code-oauth.mjs +1 -1
  118. package/src/runtime/agent/orchestrator/providers/oauth-secret-fields.fixtures.mjs +45 -0
  119. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-send.mjs +1 -0
  120. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/chunk-events.mjs +9 -2
  121. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +7 -0
  122. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream.mjs +14 -3
  123. package/src/runtime/agent/orchestrator/providers/openai-compat-responses-events.mjs +4 -2
  124. package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +1 -0
  125. package/src/runtime/agent/orchestrator/providers/openai-compat-stream-common.mjs +5 -3
  126. package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +16 -3
  127. package/src/runtime/agent/orchestrator/providers/openai-compat-xai-send.mjs +1 -0
  128. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/output-items.mjs +5 -2
  129. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events.mjs +13 -3
  130. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state.mjs +13 -2
  131. package/src/runtime/agent/orchestrator/providers/openai-http-sse-watchdogs.mjs +81 -42
  132. package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +8 -0
  133. package/src/runtime/agent/orchestrator/providers/openai-oauth-login.mjs +160 -31
  134. package/src/runtime/agent/orchestrator/providers/openai-ws-stream/event-switch.mjs +22 -12
  135. package/src/runtime/agent/orchestrator/providers/openai-ws-stream.mjs +7 -1
  136. package/src/runtime/agent/orchestrator/providers/openai-ws-watchdogs.mjs +49 -22
  137. package/src/runtime/agent/orchestrator/providers/opencode-go-oauth.mjs +1 -1
  138. package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +3 -1
  139. package/src/runtime/agent/orchestrator/providers/registry.mjs +45 -2
  140. package/src/runtime/agent/orchestrator/providers/vertex-ai-auth.mjs +622 -0
  141. package/src/runtime/agent/orchestrator/providers/vertex-ai-maas.mjs +185 -0
  142. package/src/runtime/agent/orchestrator/providers/vertex-ai-models.mjs +445 -0
  143. package/src/runtime/agent/orchestrator/providers/vertex-ai.mjs +567 -0
  144. package/src/runtime/agent/orchestrator/runtime-core/ask-user-tool-defs.mjs +41 -13
  145. package/src/runtime/agent/orchestrator/runtime-core/builtin-features.mjs +2 -0
  146. package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +8 -6
  147. package/src/runtime/agent/orchestrator/runtime-core/session-text.mjs +7 -3
  148. package/src/runtime/agent/orchestrator/runtime-core/tool-catalog-data.mjs +3 -0
  149. package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +6 -1
  150. package/src/runtime/agent/orchestrator/runtime-core/workflow/context.mjs +14 -5
  151. package/src/runtime/agent/orchestrator/runtime-core/workflow-ids.mjs +1 -0
  152. package/src/runtime/agent/orchestrator/runtime-core/workflow.mjs +5 -2
  153. package/src/runtime/agent/orchestrator/session/agent-room.d.mts +30 -5
  154. package/src/runtime/agent/orchestrator/session/agent-room.mjs +171 -37
  155. package/src/runtime/agent/orchestrator/session/cache/scoped-cache.mjs +1 -3
  156. package/src/runtime/agent/orchestrator/session/cache-warm.mjs +102 -12
  157. package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +4 -1
  158. package/src/runtime/agent/orchestrator/session/compact/execution-tail.mjs +1 -8
  159. package/src/runtime/agent/orchestrator/session/compact/messages.mjs +23 -0
  160. package/src/runtime/agent/orchestrator/session/compact/observation-supersession.mjs +103 -23
  161. package/src/runtime/agent/orchestrator/session/compact/runner.mjs +160 -36
  162. package/src/runtime/agent/orchestrator/session/context-utils.mjs +13 -1
  163. package/src/runtime/agent/orchestrator/session/conversation-import/claude.mjs +164 -23
  164. package/src/runtime/agent/orchestrator/session/conversation-import/codex.mjs +139 -19
  165. package/src/runtime/agent/orchestrator/session/conversation-import/convert.mjs +38 -7
  166. package/src/runtime/agent/orchestrator/session/conversation-import/imported-session.mjs +3 -0
  167. package/src/runtime/agent/orchestrator/session/conversation-import/turns.mjs +100 -22
  168. package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +4 -3
  169. package/src/runtime/agent/orchestrator/session/human-gate/requests.mjs +36 -6
  170. package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +33 -3
  171. package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +9 -2
  172. package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +1 -1
  173. package/src/runtime/agent/orchestrator/session/loop/provider-tool-exclusions.mjs +13 -5
  174. package/src/runtime/agent/orchestrator/session/loop/route-fallback.mjs +14 -0
  175. package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +13 -1
  176. package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +23 -4
  177. package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +2 -0
  178. package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +23 -1
  179. package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +39 -21
  180. package/src/runtime/agent/orchestrator/session/loop/turn-limits.mjs +13 -8
  181. package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +50 -28
  182. package/src/runtime/agent/orchestrator/session/manager/ask-turn-loop-options.mjs +3 -3
  183. package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +3 -1
  184. package/src/runtime/agent/orchestrator/session/manager/owner-route-fallbacks.mjs +2 -2
  185. package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +1 -0
  186. package/src/runtime/agent/orchestrator/session/manager/route-fallback-chain.mjs +2 -1
  187. package/src/runtime/agent/orchestrator/session/manager/rules-cache.mjs +30 -13
  188. package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +63 -6
  189. package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +7 -0
  190. package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +15 -0
  191. package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +35 -13
  192. package/src/runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs +24 -14
  193. package/src/runtime/agent/orchestrator/session/manager/session-scratch-environment.mjs +70 -0
  194. package/src/runtime/agent/orchestrator/session/manager/session-tool-surface.mjs +0 -3
  195. package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +10 -6
  196. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-context.mjs +4 -0
  197. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint.mjs +3 -0
  198. package/src/runtime/agent/orchestrator/session/manager/turn-interruption.mjs +56 -29
  199. package/src/runtime/agent/orchestrator/session/manager/turn-reap.mjs +125 -0
  200. package/src/runtime/agent/orchestrator/session/mixy-name.mjs +11 -5
  201. package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +5 -1
  202. package/src/runtime/agent/orchestrator/session/prompt-cache-touch-store.mjs +30 -7
  203. package/src/runtime/agent/orchestrator/session/restart-prefix-parity.fixture.mjs +154 -0
  204. package/src/runtime/agent/orchestrator/session/store/session-delete.mjs +7 -0
  205. package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +4 -0
  206. package/src/runtime/agent/orchestrator/session/store-summary-fields.mjs +15 -0
  207. package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +37 -8
  208. package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +252 -39
  209. package/src/runtime/agent/orchestrator/session/store-transcript-cache.mjs +163 -64
  210. package/src/runtime/agent/orchestrator/session/store-transcript-projection.mjs +164 -4
  211. package/src/runtime/agent/orchestrator/session/store-transcript-worker.mjs +142 -18
  212. package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +61 -2
  213. package/src/runtime/agent/orchestrator/stall-policy.mjs +23 -0
  214. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/completed-result.mjs +6 -2
  215. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/invocation-plan.mjs +2 -2
  216. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/spawn-env.mjs +4 -2
  217. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +6 -1
  218. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +46 -20
  219. package/src/runtime/agent/orchestrator/tools/builtin/cache-layers.mjs +7 -1
  220. package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +67 -31
  221. package/src/runtime/agent/orchestrator/tools/builtin/git-worktree-tool.mjs +25 -13
  222. package/src/runtime/agent/orchestrator/tools/builtin/lib/scoped-search-flight.mjs +9 -5
  223. package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +58 -20
  224. package/src/runtime/agent/orchestrator/tools/builtin/read-single-stream.mjs +7 -1
  225. package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +6 -3
  226. package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-dispatch.mjs +1 -1
  227. package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-publication.mjs +23 -12
  228. package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-snapshot.mjs +6 -1
  229. package/src/runtime/agent/orchestrator/tools/builtin/read-tool.mjs +1 -8
  230. package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.mjs +20 -15
  231. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +96 -20
  232. package/src/runtime/agent/orchestrator/tools/builtin/task-tool.mjs +59 -10
  233. package/src/runtime/agent/orchestrator/tools/code-graph/dispatch/federation.mjs +3 -1
  234. package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +1 -1
  235. package/src/runtime/agent/orchestrator/tools/graph-manifest.json +13 -13
  236. package/src/runtime/agent/orchestrator/tools/lib/isolated-test-env.mjs +4 -3
  237. package/src/runtime/agent/orchestrator/tools/lib/native-spawn-client.mjs +99 -2
  238. package/src/runtime/agent/orchestrator/tools/lib/owned-shell-trees.mjs +2 -0
  239. package/src/runtime/agent/orchestrator/tools/lib/shell-descendants.mjs +103 -13
  240. package/src/runtime/agent/orchestrator/tools/lib/shell-run-background/promote-job.mjs +3 -1
  241. package/src/runtime/agent/orchestrator/tools/lib/shell-run-settle.mjs +49 -15
  242. package/src/runtime/agent/orchestrator/tools/lib/shell-run-spawn.mjs +45 -27
  243. package/src/runtime/agent/orchestrator/tools/lib/shell-run-state.mjs +34 -10
  244. package/src/runtime/agent/orchestrator/tools/lib/shell-warm-standby.mjs +28 -4
  245. package/src/runtime/agent/orchestrator/tools/lib/wait-until-fixture.mjs +26 -0
  246. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +7 -2
  247. package/src/runtime/agent/orchestrator/tools/spawn-manifest.json +13 -13
  248. package/src/runtime/channels/lib/webhook/signature.mjs +4 -1
  249. package/src/runtime/channels/lib/whisper-port.mjs +29 -11
  250. package/src/runtime/channels/lib/whisper-server.mjs +10 -1
  251. package/src/runtime/computer-bridge/action-schema.mjs +2 -2
  252. package/src/runtime/computer-bridge/core-actions.mjs +2 -2
  253. package/src/runtime/computer-bridge/error-recovery.mjs +5 -4
  254. package/src/runtime/computer-bridge/linux-action-capabilities.mjs +24 -5
  255. package/src/runtime/computer-bridge/linux-readiness.d.mts +7 -2
  256. package/src/runtime/connectors/connector-accounts-mcp.mjs +236 -103
  257. package/src/runtime/connectors/gmail-app-password.mjs +3 -3
  258. package/src/runtime/explore/explorer.mjs +93 -0
  259. package/src/runtime/explore/tool-defs.mjs +35 -0
  260. package/src/runtime/explore/tool.mjs +123 -0
  261. package/src/runtime/local-provider/server-process.mjs +2 -1
  262. package/src/runtime/media/adapters/gemini-video.mjs +4 -1
  263. package/src/runtime/media/adapters/xai-media.mjs +2 -1
  264. package/src/runtime/memory/index.mjs +4 -0
  265. package/src/runtime/memory/lib/embedding-provider.mjs +4 -1
  266. package/src/runtime/memory/lib/embedding-worker.mjs +10 -3
  267. package/src/runtime/memory/lib/memory-action-handlers/cycle-backfill-action.mjs +1 -7
  268. package/src/runtime/memory/lib/memory-chunk-quality.mjs +1 -6
  269. package/src/runtime/office/authoring/pdf-author-action.mjs +1 -6
  270. package/src/runtime/office/design/design-art-direction.mjs +29 -27
  271. package/src/runtime/office/pdf/pdf-writer.mjs +6 -1
  272. package/src/runtime/office/portable/portable-snapshot-docx.mjs +7 -1
  273. package/src/runtime/office/portable/portable-snapshot-shared.mjs +6 -1
  274. package/src/runtime/office/quality/assurance-rendered.mjs +9 -2
  275. package/src/runtime/office/quality/assurance-structure-docx.mjs +4 -2
  276. package/src/runtime/office/quality/design-review.mjs +1 -5
  277. package/src/runtime/office/quality/document-brief.mjs +1 -5
  278. package/src/runtime/office/quality/forced-break-pages.mjs +9 -6
  279. package/src/runtime/office/quality/quality-pipeline.mjs +1 -1
  280. package/src/runtime/shared/agent-route-config.mjs +17 -2
  281. package/src/runtime/shared/atomic-file.mjs +103 -2
  282. package/src/runtime/shared/background-tasks.mjs +15 -6
  283. package/src/runtime/shared/bot-owned-work.mjs +56 -0
  284. package/src/runtime/shared/connector-accounts.mjs +5 -5
  285. package/src/runtime/shared/connector-catalog.d.mts +11 -4
  286. package/src/runtime/shared/connector-catalog.mjs +60 -52
  287. package/src/runtime/shared/custom-provider-keys.mjs +20 -0
  288. package/src/runtime/shared/defaults-separation.mjs +1 -4
  289. package/src/runtime/shared/fetch-safe-listen.d.mts +16 -0
  290. package/src/runtime/shared/fetch-safe-listen.mjs +50 -0
  291. package/src/runtime/shared/file-has-data.mjs +26 -2
  292. package/src/runtime/shared/file-lock.mjs +13 -15
  293. package/src/runtime/shared/git-launch.d.mts +9 -0
  294. package/src/runtime/shared/git-launch.mjs +213 -0
  295. package/src/runtime/shared/git-runner-worker.mjs +2 -1
  296. package/src/runtime/shared/handoff-artifacts.d.mts +2 -1
  297. package/src/runtime/shared/handoff-artifacts.mjs +18 -8
  298. package/src/runtime/shared/idle-auto-clear-gate.mjs +29 -7
  299. package/src/runtime/shared/llm/cost.mjs +11 -2
  300. package/src/runtime/shared/llm/http-agent.mjs +313 -29
  301. package/src/runtime/shared/llm/model-catalog-projection.mjs +3 -2
  302. package/src/runtime/shared/llm/model-catalog.mjs +46 -6
  303. package/src/runtime/shared/llm/provider-catalog-registry.mjs +3 -0
  304. package/src/runtime/shared/llm/system-proxy.mjs +452 -0
  305. package/src/runtime/shared/loopback-listener.mjs +25 -2
  306. package/src/runtime/shared/model-route-chain.d.mts +7 -2
  307. package/src/runtime/shared/model-route-chain.mjs +22 -4
  308. package/src/runtime/shared/open-url.mjs +10 -0
  309. package/src/runtime/shared/provider-accounts.mjs +52 -2
  310. package/src/runtime/shared/session-activity-signal.mjs +14 -0
  311. package/src/runtime/shared/session-scratch.mjs +37 -0
  312. package/src/runtime/shared/staged-install-worker.mjs +5 -0
  313. package/src/runtime/shared/staged-update.mjs +47 -2
  314. package/src/runtime/shared/tool-card-model/agent-surface.mjs +1 -3
  315. package/src/runtime/shared/tool-card-model/card-status.mjs +15 -2
  316. package/src/runtime/shared/tool-result-summary.mjs +1 -1
  317. package/src/runtime/shared/tool-surface.mjs +113 -36
  318. package/src/runtime/shared/tool-work-units.mjs +6 -0
  319. package/src/runtime/shared/turn-snapshot-store.mjs +13 -6
  320. package/src/runtime/shared/turn-worktree-snapshot.mjs +414 -54
  321. package/src/runtime/shared/worktrees/activity-gate.mjs +215 -318
  322. package/src/runtime/shared/worktrees/activity-ledger-worker.mjs +56 -0
  323. package/src/runtime/shared/worktrees/activity-ledger.mjs +391 -0
  324. package/src/runtime/shared/worktrees/branch-management.mjs +9 -3
  325. package/src/runtime/shared/worktrees/contract.mjs +4 -1
  326. package/src/runtime/shared/worktrees/git.mjs +72 -0
  327. package/src/runtime/shared/worktrees/manager.mjs +285 -168
  328. package/src/runtime/shared/worktrees/test-support.mjs +6 -10
  329. package/src/runtime/tidy/install.mjs +95 -15
  330. package/src/runtime/tidy/languages.mjs +17 -15
  331. package/src/runtime/tidy/process.mjs +7 -4
  332. package/src/runtime/tidy/resolve.mjs +19 -16
  333. package/src/runtime/tidy/runners/biome.mjs +3 -3
  334. package/src/runtime/tidy/tool.mjs +1 -1
  335. package/src/runtime/tidy/worktree.mjs +10 -6
  336. package/src/runtime/visualize-bridge/client.mjs +6 -1
  337. package/src/runtime/visualize-bridge/tool-defs.mjs +7 -2
  338. package/src/runtime/web-search/index.mjs +1 -1
  339. package/src/session-runtime/agent-home-delivery.mjs +41 -0
  340. package/src/session-runtime/agent-task-sessions.mjs +458 -312
  341. package/src/session-runtime/agent-tool-routing.mjs +8 -41
  342. package/src/session-runtime/boot/tools.mjs +7 -1
  343. package/src/session-runtime/bot-status.mjs +107 -101
  344. package/src/session-runtime/bot-target.mjs +38 -0
  345. package/src/session-runtime/channel-config-api.mjs +6 -1
  346. package/src/session-runtime/connector-merge-migration.mjs +18 -15
  347. package/src/session-runtime/conversation-import/codex-titles.mjs +88 -0
  348. package/src/session-runtime/conversation-import/discovery.mjs +401 -36
  349. package/src/session-runtime/conversation-import/service.mjs +35 -8
  350. package/src/session-runtime/handoff-attachments.mjs +82 -31
  351. package/src/session-runtime/held-requests.mjs +3 -1
  352. package/src/session-runtime/internal-tool-executor/ask-user-tool.mjs +12 -13
  353. package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +1 -0
  354. package/src/session-runtime/internal-tool-executor/feature-tools.mjs +2 -0
  355. package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +8 -0
  356. package/src/session-runtime/internal-tool-executor/reaction-tool.mjs +4 -1
  357. package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +145 -112
  358. package/src/session-runtime/lifecycle/cold-heir.mjs +11 -6
  359. package/src/session-runtime/lifecycle/session-catalog.mjs +9 -1
  360. package/src/session-runtime/lifecycle/teardown/session-close.mjs +6 -1
  361. package/src/session-runtime/lifecycle/teardown.mjs +1 -1
  362. package/src/session-runtime/mcp-glue/server-catalog.mjs +16 -10
  363. package/src/session-runtime/mcp-glue/server-input.mjs +4 -1
  364. package/src/session-runtime/mixy-heartbeat.mjs +1 -1
  365. package/src/session-runtime/model-route/set-route.mjs +11 -2
  366. package/src/session-runtime/provider-auth/login.mjs +2 -2
  367. package/src/session-runtime/provider-catalog-cache.mjs +82 -36
  368. package/src/session-runtime/provider-models/catalog-load.mjs +23 -6
  369. package/src/session-runtime/provider-models.mjs +4 -2
  370. package/src/session-runtime/resource-mcp-api.mjs +98 -35
  371. package/src/session-runtime/resource-mcp-connector-accounts.mjs +44 -31
  372. package/src/session-runtime/resource-mcp-secrets.mjs +28 -11
  373. package/src/session-runtime/resource-mcp-servers.mjs +5 -4
  374. package/src/session-runtime/resource-recall-api.mjs +6 -1
  375. package/src/session-runtime/runtime-feature-gates.mjs +5 -1
  376. package/src/session-runtime/services/agent-tool/execute.mjs +14 -9
  377. package/src/session-runtime/services/agent-tool/job-views/agent-list.mjs +20 -4
  378. package/src/session-runtime/services/agent-tool/model-select.mjs +48 -7
  379. package/src/session-runtime/services/agent-tool/render.mjs +71 -17
  380. package/src/session-runtime/services/agent-tool/send-flow.mjs +10 -2
  381. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-prep.mjs +8 -3
  382. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-run.mjs +4 -1
  383. package/src/session-runtime/services/agent-tool/spawn-preset.mjs +6 -2
  384. package/src/session-runtime/services/agent-tool/tool-def.mjs +9 -9
  385. package/src/session-runtime/services/agent-watchdog-registry.mjs +32 -4
  386. package/src/session-runtime/services/channel-worker/daemon-spawn.mjs +2 -0
  387. package/src/session-runtime/services/daemon-candidate.mjs +4 -1
  388. package/src/session-runtime/services/memory-runtime-proxy/daemon-spawn.mjs +4 -0
  389. package/src/session-runtime/services/plugin-admin.mjs +10 -6
  390. package/src/session-runtime/services/provider-admin.mjs +283 -11
  391. package/src/session-runtime/session-turn-api.mjs +2 -0
  392. package/src/session-runtime/settings-builtin-tools-api.mjs +4 -1
  393. package/src/session-runtime/settings-system-api.mjs +1 -1
  394. package/src/session-runtime/setup-tool/agent-settings-actions.mjs +13 -3
  395. package/src/session-runtime/setup-tool/connector-widen-approval.mjs +96 -0
  396. package/src/session-runtime/setup-tool/executor.mjs +6 -2
  397. package/src/session-runtime/setup-tool/tool-defs.mjs +2 -1
  398. package/src/session-runtime/tool-policy/policy-stage.mjs +1 -0
  399. package/src/session-runtime/turn/agent-ops.mjs +23 -0
  400. package/src/session-runtime/workflow-agents-api/agent-connectors.mjs +49 -11
  401. package/src/session-runtime/workflow-agents-api/agent-editor.mjs +5 -1
  402. package/src/session-runtime/workflow-agents-api/agent-route.mjs +25 -5
  403. package/src/session-runtime/workflow-agents-api/onboarding.mjs +3 -3
  404. package/src/session-runtime/workspace/activity-guards.mjs +176 -0
  405. package/src/session-runtime/workspace/session-view.mjs +149 -0
  406. package/src/session-runtime/workspace/side-checkouts.mjs +203 -0
  407. package/src/session-runtime/workspace/transition-runner.mjs +188 -0
  408. package/src/session-runtime/workspace/transitions.mjs +108 -1041
  409. package/src/session-runtime/workspace/workspace-merge.mjs +132 -0
  410. package/src/session-runtime/workspace/worktree-intents.mjs +242 -0
  411. package/src/session-runtime/workspace/worktree-maintenance.mjs +80 -0
  412. package/src/session-runtime/workspace/worktree-setup.mjs +85 -0
  413. package/src/session-runtime/workspace/worktree-tool.mjs +73 -56
  414. package/src/standalone/daemon-desktop-runtime.mjs +2 -0
  415. package/src/standalone/daemon-session-control.mjs +169 -138
  416. package/src/standalone/daemon.mjs +7 -0
  417. package/src/standalone/desktop-service-registry.mjs +9 -0
  418. package/src/standalone/local-session-runtime.mjs +5 -1
  419. package/src/standalone/session-client/daemon-unavailable.mjs +3 -0
  420. package/src/standalone/session-client.mjs +5 -1
  421. package/src/standalone/session-frame-stream.mjs +83 -11
  422. package/src/standalone/session-protocol.mjs +4 -0
  423. package/src/standalone/session-service/agent-tree/agent-turns.mjs +16 -12
  424. package/src/standalone/session-service/agent-tree.mjs +45 -9
  425. package/src/standalone/session-service/projection/transcript-window.mjs +700 -64
  426. package/src/standalone/session-service/session-calls/session-action.mjs +10 -3
  427. package/src/standalone/session-service/session-calls/session-views.mjs +160 -104
  428. package/src/standalone/session-service/stored-reader.mjs +127 -40
  429. package/src/standalone/session-transport/client-registry/client-grace.mjs +12 -9
  430. package/src/tui/App.jsx +154 -164
  431. package/src/tui/app/app-view/floating-panel.jsx +10 -4
  432. package/src/tui/app/app-view/text-entry-labels.mjs +1 -0
  433. package/src/tui/app/clipboard.mjs +21 -10
  434. package/src/tui/app/model-picker/route-selection/fast-parameters.mjs +1 -3
  435. package/src/tui/app/model-picker/route-selection.mjs +5 -6
  436. package/src/tui/app/prompt-handlers/use-prompt-history-nav.mjs +1 -1
  437. package/src/tui/app/prompt-handlers/use-prompt-interrupt.mjs +3 -0
  438. package/src/tui/app/prompt-submit/provider-prompts.mjs +3 -1
  439. package/src/tui/app/provider-setup/api-key-actions.mjs +31 -1
  440. package/src/tui/app/provider-setup/oauth-actions.mjs +58 -21
  441. package/src/tui/app/provider-setup/provider-items.mjs +8 -2
  442. package/src/tui/app/provider-setup-picker.mjs +29 -18
  443. package/src/tui/app/shell-layout/row-budgets.mjs +12 -10
  444. package/src/tui/app/slash-commands.mjs +1 -0
  445. package/src/tui/app/slash-dispatch/session-commands.mjs +46 -0
  446. package/src/tui/app/slash-dispatch.mjs +1 -1
  447. package/src/tui/app/use-btw-panel.mjs +29 -0
  448. package/src/tui/app/use-context-panel-refresh.mjs +31 -0
  449. package/src/tui/app/use-model-catalog-cache.mjs +13 -10
  450. package/src/tui/app/use-mouse-input.mjs +11 -0
  451. package/src/tui/app/use-onboarding-start.mjs +8 -3
  452. package/src/tui/app/use-panel-transition.mjs +10 -1
  453. package/src/tui/app/use-pasted-buffers.mjs +28 -20
  454. package/src/tui/app/use-prompt-draft-flow.mjs +7 -0
  455. package/src/tui/app/use-prompt-layout-rows.mjs +3 -3
  456. package/src/tui/app/use-prompt-queue-history.mjs +3 -2
  457. package/src/tui/app/use-selection-focus.mjs +11 -2
  458. package/src/tui/app/use-selection-geometry.mjs +18 -9
  459. package/src/tui/app/use-selection-paint.mjs +4 -4
  460. package/src/tui/app/use-selection-stitch.mjs +3 -3
  461. package/src/tui/app/use-slash-palette.mjs +62 -0
  462. package/src/tui/app/use-terminal-chrome.mjs +2 -2
  463. package/src/tui/app/use-transcript-activity.mjs +47 -32
  464. package/src/tui/app/use-transcript-follow.mjs +12 -4
  465. package/src/tui/app/use-transcript-scroll.mjs +46 -17
  466. package/src/tui/app/use-transcript-swap-reset.mjs +27 -0
  467. package/src/tui/app/use-transcript-window/geometry.mjs +19 -5
  468. package/src/tui/app/use-transcript-window/instance-state.mjs +4 -0
  469. package/src/tui/app/use-transcript-window/selection-shift.mjs +5 -1
  470. package/src/tui/app/use-transcript-window.mjs +21 -11
  471. package/src/tui/app/use-tui-ready.mjs +18 -0
  472. package/src/tui/app/use-welcome-prompt-hint.mjs +5 -0
  473. package/src/tui/app/use-workflow-tab-cycle.mjs +5 -3
  474. package/src/tui/components/Picker.jsx +27 -3
  475. package/src/tui/components/QuestionPanel.jsx +13 -4
  476. package/src/tui/components/SignInUrl.jsx +68 -0
  477. package/src/tui/components/TextEntryPanel.jsx +76 -46
  478. package/src/tui/components/sign-in-url-layout.mjs +24 -0
  479. package/src/tui/dist/index.mjs +1963 -1361
  480. package/src/tui/session/goal-turn-state.mjs +6 -2
  481. package/src/tui/session/session-api/controls.mjs +4 -0
  482. package/src/tui/session/session-api/extensions.mjs +8 -0
  483. package/src/tui/session/session-api/intake/abort.mjs +2 -1
  484. package/src/tui/session/session-api/intake.mjs +2 -0
  485. package/src/tui/session/session-api/integrations.mjs +2 -2
  486. package/src/tui/session/session-api/routes-agent-definitions.mjs +1 -0
  487. package/src/tui/session/session-api/settings.mjs +2 -2
  488. package/src/tui/session/session-flow/queue/take-entries.mjs +11 -0
  489. package/src/tui/session/transcript-spill/spill-writer.mjs +15 -0
  490. package/src/tui/session/transcript-spill.mjs +92 -4
  491. package/src/tui/session/transcript-store.mjs +2 -0
  492. package/src/ui/statusline-agents.mjs +1 -3
  493. package/src/defaults/skills/skill-creator/references/source-review.md +0 -94
@@ -1,135 +1,87 @@
1
1
  # Agent-level cleanup
2
2
 
3
- Read this before the agent-level layer of `code-tidy`. It owns the deletion
4
- ladder, the lens checklists, what counts as slop, and the risk tiers. The skill
5
- body owns scope, order, approvals, and the list of things that are never
6
- removed or renamed.
3
+ Owns the deletion ladder, lenses, slop categories, and risk tiers. The skill
4
+ body owns scope, order, approvals, and the never-remove list.
7
5
 
8
6
  ## Behavior boundary
9
7
 
10
- Classify risk by evidence, not by syntax. Equivalence includes observable
11
- outputs and errors, side effects and module initialization, and any call
12
- identity, receiver, or asynchronous ordering that consumers rely on. Removing
13
- an unused binding can remove initialization; inlining a wrapper can change
14
- its call contract. Neither is SAFE merely because it looks redundant.
15
-
16
- Use current callers, contracts, and relevant tests to establish equivalence.
17
- Passing tests that do not exercise the affected behavior are not proof.
18
- An intended change to failures, returned values, compatibility, or concurrency
19
- is RISKY: report it as a separate correction or migration, not a cleanup edit.
20
-
21
- **Source-text guards.** Some tests assert on source text rather than behavior,
22
- so an extraction breaks them without touching behavior: a packaging test that
23
- reads three files as one concatenated string and enforces five `indexOf`
24
- orderings; a repo-wide audit asserting an identifier appears in no file outside
25
- two named modules; a coverage test requiring literal action names to stay in
26
- one file. Search the suite for them first (reads of source paths, ordering
27
- `indexOf` chains, identifier-absence assertions) and record what each pins;
28
- moving code across such a guard is a contract change, not a tidying.
29
-
30
- **Dependency arrays.** A hook or watcher dependency array that contradicts its
31
- own body — the body reads values the array does not key — is a defect
32
- candidate, not an idiom to preserve and report. Verify reachability at the
33
- producer: when the key can actually repeat (two publishers stamping
34
- `Date.now()` in the same millisecond drop the second update), fix it by adding
35
- the values the body reads while keeping the existing key, with a test that
36
- fails without the fix, delivered as its own change set under "Bugs found".
37
- When the producer makes repetition unreachable, leave the array and record that
38
- evidence as `kept`.
8
+ Classify risk by evidence, not syntax. Equivalence includes observable outputs
9
+ and errors, side effects and module initialization, and any call identity,
10
+ receiver, or ordering consumers rely on. Removing an unused binding can remove
11
+ initialization; inlining a wrapper can change its call contract.
12
+
13
+ Establish equivalence from current callers, contracts, and tests that exercise
14
+ the affected behavior. An intended change to failures, returned values,
15
+ compatibility, or concurrency is RISKY: report it as a separate correction.
16
+
17
+ **Source-text guards.** Some tests assert on source text rather than behavior
18
+ (file reads of source paths, `indexOf` ordering chains, identifier-absence or
19
+ literal-presence assertions), so a move breaks them without changing behavior.
20
+ Search only for guards a proposed move can affect, and record what each pins.
21
+ Moving code across such a guard is a contract change, not a tidying.
22
+
23
+ **Dependency arrays.** A suspected correctness defect is outside cleanup;
24
+ report its evidence without changing behavior.
39
25
 
40
26
  ## Deletion ladder
41
27
 
42
- Run the ladder on every selected unit (function, class, module, config knob)
43
- in scope before looking for smells. Only code that lands on the
44
- last rung goes on to the lenses.
28
+ Run on each selected unit before looking for smells; only code that lands on
29
+ the last rung goes on to the lenses.
45
30
 
46
- | Rung | Question | Typical win |
31
+ | Rung | Question | Result |
47
32
  |---|---|---|
48
- | Delete | Is there evidence the behavior is no longer needed? Check callers, requirements, flags, and compatibility obligations | remove the verified obsolete unit; retire tests only under the test-suite slop rules |
49
- | Reuse | Does a helper in this repo already do it? (`code_graph symbol_search`, `grep` for the pattern's distinctive call) | reimplementation replaced by a call |
50
- | Platform | Does the stdlib, runtime, or an already-installed dependency do it? (`URLSearchParams`, `path.relative`, `Array.prototype.at`, `pathlib`, an imported util) | hand-rolled parser/formatter/debounce replaced |
51
- | Simplify | It must exist here; make it smaller | proceeds to the lenses |
52
-
53
- A unit replaced by one platform call is a larger and safer win than any
54
- in-place cleanup; take it before analysing the unit's smells.
33
+ | Delete | Is there evidence the behavior is no longer needed (callers, requirements, flags, compatibility)? | remove the verified obsolete unit |
34
+ | Reuse | Does a repo helper already do it? | replaced by a call |
35
+ | Platform | Does the runtime, stdlib, or an installed dependency do it? | hand-rolled code replaced |
36
+ | Simplify | It must exist; make it smaller | proceeds to the lenses |
55
37
 
56
38
  ## Lenses
57
39
 
58
- Each lens judges the units in scope and may search the whole
59
- repository for evidence (an existing helper, a sibling call site); a finding
60
- without a path-plus-symbol pointer is dropped. Run every lens unless the user named a focus.
61
- Judge each selected function or class in its full context, including relevant
62
- callers and tests, even when it has no pending diff. Do not restrict review to
63
- recently edited lines or silently widen the edit scope to its consumers.
64
-
65
- **Reuse** — new code that duplicates an existing utility, constant, type
66
- guard, or pattern: hand-rolled string/path manipulation, custom env checks,
67
- ad-hoc validation, re-implemented parsing. Name the existing thing and where it
68
- lives. Before flagging a new dependency import, check `package.json` /
69
- `pyproject.toml` for a library already installed that covers it.
70
-
71
- **Quality** — redundant state (values derivable from existing state, caches
72
- that need not exist); parameter sprawl (a parameter bolted on where the
73
- function should be restructured, a boolean parameter that selects between two
74
- behaviors — split the function instead); copy-paste-with-variation; leaky
75
- abstractions; stringly-typed code where a constant, enum, or registry exists;
76
- slop patterns from the table below.
77
-
78
- **Efficiency** — redundant computation, repeated file reads, duplicate API
79
- calls, N+1 access; independent operations run sequentially; heavy work on
80
- startup or per-request paths; existence pre-checks instead of doing the
81
- operation and handling the error; unbounded growth, missing cleanup,
82
- listener/handle leaks; closures capturing a whole scope for long-lived
83
- objects; whole-file reads where a slice would do. Only apply an efficiency
84
- change whose behavioral equivalence is obvious; never restructure an
85
- algorithm with subtle correctness implications without a test that pins it.
86
-
87
- **Altitude** — a fix applied too shallowly: a caller-specific branch added to
88
- a generic path (`if (caller === X)`, a magic-value escape hatch); a symptom
89
- patched at one call site while siblings keep the same flaw; a workaround
90
- stacked on a workaround; a wrapper added to avoid touching the thing that
91
- needs changing; a flag introduced to route around a broken default. Name
92
- the mechanism the change is dodging and the deeper fix. When the deeper fix
93
- is larger than the cleanup, report it as its own task instead of doing it
94
- here.
40
+ Use the lenses to identify supported improvements within scope; stop
41
+ investigating a candidate when its disposition is established. Each lens may
42
+ search the whole repository for evidence; a finding without a path+symbol
43
+ pointer is dropped. Judge units in full context, not only recently edited
44
+ lines, and never widen the edit scope to consumers. Skip lenses the user's
45
+ focus excludes.
46
+
47
+ - **Reuse** — new code duplicating an existing utility, constant, guard, or
48
+ installed library. Name the existing thing.
49
+ - **Quality** — redundant or derivable state, parameter sprawl (a boolean
50
+ selecting between behaviors), copy-paste-with-variation, leaky abstractions,
51
+ stringly-typed code where a constant or registry exists, slop below.
52
+ - **Efficiency** — redundant work, repeated reads, N+1 access, needless
53
+ sequencing, leaks, existence pre-checks instead of handling the error. Apply
54
+ only when equivalence is obvious; otherwise report it.
55
+ - **Altitude** — a fix applied too shallowly: a caller-specific branch in a
56
+ generic path, a symptom patched at one site, a workaround on a workaround.
57
+ Name the deeper fix; when it exceeds the cleanup, report it as its own task.
95
58
 
96
59
  ## Slop categories
97
60
 
98
61
  | Category | Flag | Keep | Fix |
99
62
  |---|---|---|---|
100
- | Obvious comments | restating the code, section dividers, commented-out code, vague TODOs, narration of the change or of the caller | WHY comments (business rule, workaround, invariant), ticket links, regex/algorithm notes, BDD markers, license/attribution notices, tool directives, public API docs | delete only with high confidence; preserve token boundaries and significant line breaks |
101
- | Over-defensive code | null checks on guaranteed values, try/catch around code that cannot throw, type checks on statically typed params, defaults for required params, validation duplicated inside a boundary, broad catch-all | I/O error handling, nullable DB fields, a top-level catch-all that logs and rethrows | remove only when a test proves the guard redundant; changing which errors are caught or propagated is RISKY |
102
- | Fake resilience | a fallback that turns a missing input or a failed call into a plausible value (`?? 0`, an empty-object default, a stub record); a catch that only rethrows the same error; a catch that logs without the error and continues | a default the caller's contract names, a retry or degraded mode the docs describe | remove only proven redundant behavior; replacing a default with a failure or changing the error contract is a separate RISKY correction |
103
- | Excessive complexity | nesting > 3, nested ternaries, 4+ predicates in one condition, > 5 positional params, functions > 50 lines doing several things, clever one-liners, a 4+ branch ladder comparing one value against constants, a hand-rolled loop the language has an idiom for (`for i in range(len(xs))`, an index loop over a collection, `count() > 0` for "any") | a hot path that intentionally uses a dense idiom | guard clauses, early returns, explicit if/else, an options object, a lookup table, the language's own idiom, extract by responsibility |
104
- | Needless abstraction | pass-through wrappers, single-use helpers, speculative indirection, one-implementer interfaces that add no seam, factories that only call a constructor | abstractions that give a real seam (tests, multiple implementers, framework boundary) | inline only after verifying the behavior boundary above |
105
- | Boundary violations | wrong-layer imports, import cycles between modules, business logic in a handler, one module reading another's private state, side effects in a pure-named function | short-circuits already established as a pattern here | move to the owning layer; break a cycle by moving the shared piece out; flag when unsure |
106
- | Dead code | unused imports/locals/private functions, unreachable branches, stale feature flags, debug leftovers, code removed but still referenced | whatever the dead-code procedure lists as never dead | remove through the dead-code procedure linked from the skill |
107
- | Duplication | copy-pasted branches with trivial differences, two helpers doing the same thing, repeated literal sequences, one exported type or interface redeclared in several files | incidental similarity between things that serve different intents and may diverge | consolidate only when intents match |
108
- | Type escapes | `as any`, `@ts-ignore`, `# type: ignore` without reason, a lint or compiler warning suppressed without one (`eslint-disable`, `# noqa`, `#pragma warning disable`), `object`/`Any` annotations where a union or Protocol fits, a value re-coerced to the type it already has (`String(s)` on a `string`) | an escape or suppression whose comment names the upstream bug it works around | narrow with a guard, a precise type, or `unknown` plus a check; drop a coercion the type already guarantees; fix the warning or record why it is silenced |
109
- | Hardcoded config | environment-specific URLs and endpoints, provider/account/project ids, absolute paths and path strings spliced with `/`, a literal branch for one caller or one environment, unnamed numeric thresholds | test fixtures, documentation examples, a literal the contract itself fixes (wire strings, protocol constants) | read it through the project's existing config or env accessor; name the literal. A credential in source is a bug — report it, never merely relocate it |
110
- | Placeholder naming | numbered or filler names on new code (`data2`, `helper1`, `tmp`, `handleStuff`, a `Manager` holding two functions) | names the project's own idioms establish | rename locals after their intent; an exported rename is a contract change, so RISKY |
111
- | Oversized modules | files past the skill's 1,000-line review threshold or mixing responsibilities | a cohesive module or script with no useful responsibility boundary | split confirmed independent responsibilities; never `utils`/`helpers`/`common`/`part2` dump files |
63
+ | Comments | restating the code, step narration, history or changelog notes, dividers, commented-out code, a comment the code contradicts, a TODO with no owner or issue | a non-obvious why (external constraint, invariant, tradeoff), directives, public API docs, issue links | delete or correct; a "do not change" comment gets a proposed test or type that enforces it, applied only with approval |
64
+ | Over-defensive code | checks on guaranteed values, try/catch around code that cannot throw, duplicated validation | I/O handling, trust boundaries, a logging top-level catch | remove only when a test proves the guard redundant; changing which errors propagate is RISKY |
65
+ | Fake resilience | a fallback turning missing input or failure into a plausible value; a catch that only rethrows or swallows | a default the contract names, documented retry or degraded mode | remove only proven redundant behavior; changing the error contract is RISKY |
66
+ | Excessive complexity | deep nesting, nested ternaries, long conditions, many params, clever one-liners, hand-rolled loops with an idiom | a deliberately dense hot path | guard clauses, early returns, lookup table, options object, extract by responsibility |
67
+ | Needless abstraction | pass-through wrappers, single-use helpers, speculative indirection | a real seam (tests, multiple implementers, framework boundary) | inline after the behavior boundary check |
68
+ | Boundary violations | wrong-layer imports, cycles, logic in handlers, reading another module's private state | an established pattern | move to the owning layer; flag when unsure |
69
+ | Dead code | unused imports/locals/private functions, unreachable branches, debug leftovers | the never-dead list | follow `dead-code.md` |
70
+ | Duplication | copy-pasted branches, two helpers doing one thing, redeclared types | similarity serving different intents | consolidate only when intents match |
71
+ | Type escapes | `any`, unexplained ignores and suppressions, redundant coercions | an escape whose comment names the upstream bug | narrow with a guard or precise type; fix the warning or record why silenced |
72
+ | Hardcoded config | environment-specific URLs, ids, absolute paths, unnamed thresholds | fixtures, docs, contract-fixed literals | use the project's config accessor; name the literal. A credential in source is a defect: report it |
73
+ | Placeholder naming | `data2`, `tmp`, `handleStuff` on new code | the project's own idioms | rename locals; an exported rename is RISKY |
74
+ | Oversized modules | files past the review threshold mixing responsibilities | a cohesive module | split confirmed independent responsibilities; no `utils`/`common` dumps |
112
75
 
113
76
  ## Risk tiers
114
77
 
115
- Every finding carries one tier:
116
-
117
- | Tier | Meaning | Examples | Handling |
118
- |---|---|---|---|
119
- | SAFE | equivalence established, including initialization and parsing | verified unused binding with no initialization effects, nonsemantic comment, redundant type assertion | apply as one batch |
120
- | CAREFUL | same semantics, structure changes | rename a local, flatten a ternary, guard clause, verified wrapper inlining, extract a helper, split responsibilities while preserving entry points, consolidate duplicates, name a magic number | apply one source unit at a time (including required new modules); verified by the single final check; undo only this run's edits if it cannot be fixed |
121
- | RISKY | may change behavior or a contract | public API or export rename, route/DB column/config key rename, error-handling change, concurrency change, N+1 restructuring, altitude fix in shared infrastructure | report only, with the test coverage status; never auto-apply |
122
-
123
- Conflict resolution when lenses disagree: correctness > the user's stated
124
- focus > readability and reuse > micro-performance. When two defensible
125
- rewrites of the same region remain, apply the one that touches less code and
126
- record the alternative; when the principles cannot separate them, apply
127
- neither and record both.
128
-
129
- ## Small tidyings (CAREFUL tier)
130
-
131
- Structure-only moves the slop table does not already cover: normalize two
132
- variants of the same pattern to one form; put coupled functions next to each
133
- other; declare a variable where it is initialized; blank line between chunks
134
- that do different things; merge over-fragmented pieces back into one readable
135
- block before re-splitting. One tidying per change set.
78
+ | Tier | Meaning | Handling |
79
+ |---|---|---|
80
+ | SAFE | equivalence established, including initialization | apply as one batch |
81
+ | CAREFUL | same semantics, structure changes (local rename, guard clause, verified inlining, helper extraction, responsibility split, consolidation) | one source unit at a time, including required new modules |
82
+ | RISKY | may change behavior or a contract (public rename, error-handling or concurrency change, shared-infrastructure fix) | report with test coverage status; apply only the items the user approves |
83
+
84
+ When lenses disagree: correctness > the user's focus > readability and reuse >
85
+ micro-performance. Between two defensible rewrites, apply the one touching
86
+ less code and record the alternative; if principles cannot separate them,
87
+ apply neither.
@@ -1,43 +1,27 @@
1
- # Candidate list and report
1
+ # Report
2
2
 
3
- Findings and risk tiers come from `agent-cleanup.md`; this file owns how they
4
- are recorded and reported. Keep the list in the conversation, not a file.
3
+ Findings and tiers come from `agent-cleanup.md`. Keep the list in the
4
+ conversation, not a file. Record only findings with a path+symbol, a cost, and
5
+ an action; threshold hits are signals, not findings.
5
6
 
6
- ## Candidates
7
-
8
- One line per candidate, with a stable ID (`C-01`):
9
-
10
- ```text
11
- [ID] path · symbol → problem → cost → action | tier: SAFE/CAREFUL/RISKY | confidence: high/medium/low | status: completed/kept/unfinished
12
- ```
13
-
14
- - Register only a lens finding with a path+symbol location, a cost, and an
15
- action. A finding that cannot name its cost is a nit: drop it. Threshold
16
- hits (long files or functions, deep nesting) are signals, not candidates.
17
- - Findings sharing a root cause group under one ID, each member keeping its
18
- path and symbol. Code moved by an extraction keeps its origin ID.
19
- - Confidence is `low` when callers, contracts, and tests do not explain why
20
- the code exists; medium/low candidates stay unfinished until that question
21
- is resolved. Approval to apply does not authorize guessing.
22
- - `completed` carries evidence of what changed; `kept` carries a concrete
23
- reason (keep rule or external contract); `unfinished` carries the blocker
24
- (pending, blocked, deferred, unverified).
25
-
26
- Overall cleanup is complete only when every partition is done, the final
27
- check has passed, and every candidate is completed or kept with evidence.
28
- Otherwise report "overall partial" with the remaining paths and IDs.
7
+ Each entry carries: path · symbol, action or blocker, risk tier, evidence
8
+ (what changed, why kept, or what blocks it). Findings sharing a root cause
9
+ group together. Unresolved intent stays unfinished; approval to apply does not
10
+ authorize guessing.
29
11
 
30
12
  ## Final report
31
13
 
14
+ Include only sections that have content:
15
+
32
16
  ```text
33
17
  Scope: <paths | whole project> · Mode: report|apply · Overall: complete|partial
34
- Deterministic: engines used/missing · files changed · diagnostics remaining · structural applied/skipped
35
- Completed: [ID] path · symbol — [Lens/TIER] what changed
36
- Kept: [ID] path · symbol — reason
37
- Unfinished: [ID] path · symbol — remaining work · status · next
38
- Noticed, not applied (RISKY or out of scope): [ID] path · symbol — why · test coverage
39
- Bugs found (not fixed here): <issues>
40
- Verification: tests <result> · typecheck <result> · tidy check <remaining diagnostics> · pre-existing failures <list|none>
41
- Blocked or unverified: <check> — <reason> → <paths> (write "none" if none)
42
- Needs your decision: <RISKY findings, bugs, unresolved intent, unfinished candidates>
18
+ Deterministic: engines used/missing · files changed · diagnostics remaining
19
+ Completed / Kept / Unfinished: entries as above
20
+ Noticed, not applied (RISKY or out of scope): entries · test coverage
21
+ Defects found (not fixed here): <issues>
22
+ Verification: checks run and results · failures and established attribution · blocked or unverified checks with reason
23
+ Needs your decision: <RISKY findings, defects, unresolved intent, unfinished items>
43
24
  ```
25
+
26
+ Complete means every partition was reviewed and the required checks passed or
27
+ are reported blocked; otherwise report partial with the remaining paths.
@@ -45,8 +45,6 @@ found" and never settle it by installing the package.
45
45
  effectful initializers, and the last unused import binding can still load a
46
46
  module for registration or initialization. Preserve required initialization
47
47
  rather than deleting it with the binding.
48
- 5. Record the symbol, kind, classified usage and contract evidence, side-effect
49
- result, and proposed action in the candidate list.
50
48
 
51
49
  ## Never dead
52
50
 
@@ -79,7 +77,7 @@ evidence. Apply this procedure before classifying an old path as dead:
79
77
  4. For a verified obsolete path, inventory its callers, flags/config, tests,
80
78
  docs, files, and dependencies. Remove only approved members in the order
81
79
  below; request scope expansion before editing related files outside it.
82
- 5. Record the retirement evidence and any remaining items. A still-required path is kept with its contract; an unknown obligation
80
+ 5. A still-required path is kept with its contract; an unknown obligation
83
81
  leaves the candidate blocked, not assumed obsolete.
84
82
 
85
83
  ## Remove in order
@@ -94,9 +92,5 @@ evidence. Apply this procedure before classifying an old path as dead:
94
92
  project's own package manager.
95
93
 
96
94
  Group edits by file so one batch never touches a file another batch edits.
97
- Verification and rollback follow the skill body (section 5).
98
-
99
- ## Report
100
-
101
- Use the shared candidate list and closing report, with usage and side-effect
102
- evidence per ID.
95
+ Verification and rollback follow the skill body (section 5). Record usage and
96
+ side-effect evidence in the common report format (`cleanup-report.md`).
@@ -1,31 +1,20 @@
1
1
  # Test-suite slop
2
2
 
3
- Read this when tests are in scope for agent-level cleanup. Tests accumulate
4
- through repeated agent corrections the same way production code does:
3
+ Read this when tests are in scope. Pruning rules and the test workflow belong
4
+ to the `test-suite` skill (Prune); this file only adds the cleanup gate.
5
5
 
6
- First distinguish redundant coverage from removing a supported behavior.
7
- Keep distinct observable success, rejection, error, and compatibility cases.
8
- Before removing a behavior and its tests, require independent evidence from
9
- current requirements, real callers, or a specification; tests existing only
10
- for that branch are neither proof of necessity nor permission to delete it.
6
+ First tell redundant coverage from removing a supported behavior. Keep
7
+ distinct observable success, rejection, error, and compatibility cases. Before
8
+ removing a behavior and its tests, require independent evidence from current
9
+ requirements, real callers, or a specification; a test existing only for that
10
+ branch is neither proof of necessity nor permission to delete it. A closed
11
+ loop (a fallback justified by its test, a test justified by the fallback) is
12
+ no evidence either; unresolved intent blocks deletion.
11
13
 
12
- - **Dominated tests** — several tests reach the same branch and the same
13
- result; one asserts the observable output, the others only check
14
- construction, type, or non-emptiness. Keep the strongest, delete the rest
15
- and the fixtures that served only them.
16
- - **Accumulated regression tests** — a near-identical test appended after each
17
- correction, or parameter permutations whose values never cross a new branch,
18
- equivalence class, or failure mode. Keep the smallest set that still covers
19
- distinct regressions, and a permutation only where it marks a real boundary.
20
- - **Tautological assertions** — assertions that cannot fail: `assert True`,
21
- two equal literals compared, a state the fixture itself guarantees, a mock
22
- verifying the setup that fed it. Delete, or rewrite against the observable
23
- result.
24
- - **Verification theater** — checksums, receipts, validators, or
25
- recomputation where producer and verifier share the same information and
26
- failure domain. They cannot fail independently; delete.
27
- - **Closed justification loop** — a fallback exists because a test exercises
28
- it and the test exists because the fallback was added. Neither is evidence
29
- for deleting the pair. Apply the independent-evidence gate above first;
30
- unresolved intent blocks deletion. A distinct externally observable
31
- rejection, error, or compatibility test is not a loop; preserve its coverage.
14
+ Delete a test only when it is dominated (same branch and result as a stronger
15
+ test), tautological (cannot fail), a permutation crossing no new branch, or
16
+ verification theater (verifier and producer share one failure domain), or it
17
+ asserts a removal, a restated constant or copied production logic, and name
18
+ the test that still owns the contract. Deleting a contract test needs the
19
+ user's approval. Merging into an owner, rewriting source-text assertions, and
20
+ everything else follows `test-suite`.
@@ -8,6 +8,8 @@ dependencies:
8
8
  tools:
9
9
  - type: tool
10
10
  value: computer
11
+ - type: tool
12
+ value: handoff_user
11
13
  ---
12
14
 
13
15
  # Computer Use
@@ -180,13 +182,21 @@ GNOME with Mixdog's own shell extension, which the app sets up); prefer accessib
180
182
  the turn, like any session exit, releases what the session pressed, and a
181
183
  failed release is reported rather than assumed.
182
184
  Execution stops at the first failure or when the target transitions
183
- (popup, dialog, window change) and returns one fresh observation. An act
185
+ (a popup, dialog, or window change present at the settle check, about
186
+ 150 ms after the input) and returns one fresh observation. An act
184
187
  whose first action uses a `ref` returns accessibility only (`ax`) unless
185
188
  that tree is unusable; pass `observe: "state"` when the next step needs
186
189
  pixels, a `frame_id`, or visual confirmation.
187
190
  4. Read the returned observation, including any successor target. It replaces
188
191
  the pre-action state: continue from it without another capture when usable.
189
192
  Recapture only when evidence is missing, failed, expired, or invalidated.
193
+ That observation shows one window, never the others on screen. Windows the
194
+ settle check saw are in `window_transition.opened_windows`; a window that
195
+ opened later is named by the next command's
196
+ `windows_opened_since_last_action` (since, not necessarily caused by, your
197
+ last action). After a click that may open a popup (sign-in, OAuth,
198
+ connect, continue, authorize), run `list` (kind windows, `query` with the
199
+ app or expected title) before concluding nothing opened.
190
200
 
191
201
  Prefer semantic `ref` > SOM/OCR `element` > coordinates. When pixels are
192
202
  reported `pixel_unavailable`, coordinate input fails closed but fresh semantic
@@ -241,9 +251,9 @@ your results and that browser's pixels are withheld until this turn ends
241
251
  (`ax` reads still work), but a page that redisplays it can expose it, and other
242
252
  programs of the same Windows user are outside this protection. A username is
243
253
  an identifier and is not hidden. Continue with keys (`act` key Enter). On a
244
- refusal, hand the secret to the user (`ask_user` kind `secret`,
254
+ refusal, hand the secret to the user (`handoff_user` kind `secret`,
245
255
  surface `computer`); one-time codes, passkeys, security keys and app approvals
246
- are the user's step (`ask_user` kind `takeover`). Never type a password or
256
+ are the user's step (`handoff_user` kind `takeover`). Never type a password or
247
257
  code with `type`/`set_value`, even one shown on screen.
248
258
 
249
259
  **Keyboard-driven navigation** — `act` with `key` steps such as `ctrl+s`
@@ -251,7 +261,9 @@ and a trailing short `wait`; verify with `verify` rather than another capture.
251
261
  `alt+f4` is blocked in every delivery mode. To close a window, obtain the
252
262
  user's go-ahead and use `window` with the `close` operation.
253
263
 
254
- **Dialog appears mid-sequence** — `act` halts automatically. Use its successful
264
+ **Dialog appears mid-sequence** — `act` halts when the settle check sees it; a
265
+ dialog that opens later arrives in the next command's
266
+ `windows_opened_since_last_action`. Use its successful
255
267
  successor observation to handle the dialog; capture only if it is unusable.
256
268
  Returning to the original window also requires a fresh observation, whether
257
269
  returned by the action or obtained through `capture`.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: goal-management
3
3
  description: Manage the task list of approved work carried across turns, its progress, approvals, and completion.
4
- when_to_use: 'Explicit Goal (`goal` tool) requests, approved multi-turn work in progress (migrations, improvement passes); not single-turn tasks or recurring schedules.'
4
+ when_to_use: 'Goal requests or approved multi-turn work in progress; not one-turn tasks or recurring schedules.'
5
5
  dependencies:
6
6
  tools:
7
7
  - type: tool
@@ -52,7 +52,7 @@ Read this when choosing a `setup` mutation.
52
52
  | Permanently delete confirmed, unchanged, unused model files | `delete_local_model` |
53
53
  | TUI system shell | `set_system_shell` |
54
54
  | Automatic updates | `set_auto_update` |
55
- | Mixy's heartbeat: a regular check that wakes her only when something needs attention and only after the user had no operation for 30 minutes (no sent turn, no keyboard/mouse/wheel input in the desktop app's windows) (on by default; `status features` reports `heartbeat.enabled` and `heartbeat.intervalMinutes`) | `set_heartbeat_enabled` |
55
+ | Mixy's heartbeat: a regular check that wakes her only when something needs attention and only after the user had no operation for 30 minutes (no sent turn, no keyboard/mouse/wheel input in the desktop app's windows) (off by default; `status features` reports `heartbeat.enabled` and `heartbeat.intervalMinutes`) | `set_heartbeat_enabled` |
56
56
  | How often the heartbeat checks: `minutes` 30, 60 (default), 120 or 240; applies from the next tick, counted from the last check | `set_heartbeat_interval` |
57
57
  | Bots' emoji reactions on the user's messages (on by default; `status features` reports `reactions.enabled`) | `set_reactions_enabled` |
58
58
  | Worktree defaults: new tasks on the current branch or a new worktree, branch prefix, large-repository warning size, automatic cleanup | `set_worktree_settings` |
@@ -103,7 +103,7 @@ Read this when choosing a `setup` mutation.
103
103
  | Read a Project's connector switches | `read_project_connectors` |
104
104
  | An agent's action permission (block/ask per action kind) | `set_agent_permission` |
105
105
  | Switch a connector off for an agent / a Project (switching it back on is done in the desktop app) | `set_agent_connector`, `set_project_connector` |
106
- | One connector tool of an agent to needs_approval or disabled | `set_agent_connector_tool` |
106
+ | One connector tool of an agent to disabled, needs_approval or auto (a widening asks the user on an approval card) | `set_agent_connector_tool` |
107
107
  | Bring back an archived bot or agent (`definitionKind: "agent"`) | `restore_definition` |
108
108
  | Bot display order (Bots page, Sessions bot section; `status agents` `botOrder`) | `set_bot_order` |
109
109
 
@@ -344,10 +344,16 @@ markers are read with `status desktop`.
344
344
  `status mcp` afterwards. `add_mcp_server` with the service URL is not the
345
345
  sign-in flow; never use it for a catalog service.
346
346
  - Agent permissions and connector switches change only toward less: `block`
347
- or `ask`, a connector off, a tool to `needs_approval`/`disabled`. Anything
348
- that lets an agent do more without asking (`allow`, a connector back on, a
349
- tool to `auto`) is refused ("make it on the desktop"); `open agents` and let
350
- the person do it. Payments and permanent deletes always ask regardless.
347
+ or `ask`, a connector off, a tool to `disabled`. An action permission
348
+ `allow` or a connector back on is refused ("make it on the desktop");
349
+ `open agents` and let the person do it. One connector tool's widening
350
+ (`set_agent_connector_tool` from `disabled` to `needs_approval`/`auto`, or
351
+ `needs_approval` to `auto`) asks the user instead: the call waits on an
352
+ approval card (on the desktop or a paired phone) offering "needs approval",
353
+ "auto" or Deny, whatever level was asked; the result's `permission` and
354
+ `note` say what was applied. Only a press on that card decides it: never
355
+ treat a chat reply as approval, and ask again for each change. Payments and
356
+ permanent deletes always ask regardless.
351
357
  Connector ids are MCP server names from `read_agent_settings`; a bot's
352
358
  thread changes only its own bot.
353
359
  - `enable_plugin_mcp` turns every server the plugin declares back on and
@@ -134,8 +134,8 @@ The setup tool does not mutate:
134
134
  browser action confirmations (`MIXDOG_BROWSER_CONFIRM_ACTIONS`,
135
135
  `MIXDOG_BROWSER_CONFIRM_SUBMIT`; see the browser-use skill);
136
136
  - widening an agent's authority: action permission `allow`, a connector
137
- switched back on for an agent or Project, a connector tool to `auto`
138
- (setup only narrows them);
137
+ switched back on for an agent or Project (setup only narrows them; a
138
+ single connector tool's widening asks the user on an approval card);
139
139
  - the remote-access switch ("Use this PC from other devices") and this PC's
140
140
  name: turning it off from a phone would cut that phone off mid-session;
141
141
  - permanently deleting an archived bot (Sessions → Archived → delete);
@@ -106,6 +106,8 @@ done. Take the first open step, explain it in a sentence or two, ask, then act.
106
106
  provider. Give the reason in one line: a different model family catches what
107
107
  the main one misses. Suggest turning on the Maintainer with
108
108
  a cheap model at the lowest effort; it also decides turns in group rooms.
109
+ Offer Explore the same way, from its own picks: a cheap model that
110
+ searches code for the Lead in separate parallel sessions.
109
111
  A pick may carry `plans`: when the Lead provider's plan (`plan` in
110
112
  `status providers`) is listed there, recommend that model instead. A null or
111
113
  unlisted plan keeps the pick as is; never fail on an unknown plan.
@@ -152,8 +154,9 @@ step; do not insist.
152
154
  does part of a task. Users add their own on the Workflows page with the
153
155
  "에이전트 +" button. Bots are people-facing; agents work behind a task.
154
156
  - Default agents (기본 에이전트): built-in helpers listed on Workflows, such as
155
- Web Search (runs the web search tool) and the Maintainer (memory upkeep and
156
- session titles). They need a model route to work.
157
+ Web Search (runs the web search tool), the Maintainer (memory upkeep and
158
+ session titles) and Explore (code search for the Lead). They need a model
159
+ route to work.
157
160
  - Agent mode (에이전트 모드): a coding work session run by Lead and agents.
158
161
  A session a bot starts for a job is an agent task session (에이전트 작업
159
162
  세션); others are just sessions (세션).
@@ -328,6 +328,19 @@
328
328
  "source": "https://www.benchleader.com/best/llm-for-coding"
329
329
  }
330
330
  ]
331
+ },
332
+ {
333
+ "roles": ["Explore"],
334
+ "note": "Measured on Mixdog code searches: Haiku found the key locations; cheaper models tested missed about half on unseen questions. With no qualifying pick, leave Explore off.",
335
+ "picks": [
336
+ {
337
+ "provider": "Anthropic",
338
+ "model": "Claude Haiku 5.5",
339
+ "effort": "low",
340
+ "checkedAt": "2026-10-29",
341
+ "source": "https://benchlm.ai/anthropic/api-pricing"
342
+ }
343
+ ]
331
344
  }
332
345
  ]
333
346
  }