mixdog 1.2.5 → 1.3.0

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/LICENSES/simple-icons-CC0-1.0.txt +30 -0
  2. package/NOTICE.md +19 -0
  3. package/package.json +4 -1
  4. package/scripts/check-model-recommendations.mjs +89 -0
  5. package/scripts/gate-local.mjs +7 -0
  6. package/scripts/lib/gate-scheduler.mjs +2 -2
  7. package/scripts/lib/isolated-test-env.mjs +16 -0
  8. package/scripts/lib/run-node-tests.mjs +5 -14
  9. package/scripts/provider-pingpong-live.mjs +9 -9
  10. package/src/agents/advisor/AGENT.md +4 -4
  11. package/src/agents/advisor/agent.json +1 -1
  12. package/src/agents/reviewer/AGENT.md +5 -4
  13. package/src/agents/reviewer/agent.json +1 -1
  14. package/src/defaults/shipped-history.json +17 -0
  15. package/src/defaults/skills/browser-use/SKILL.md +7 -1
  16. package/src/defaults/skills/computer-use/SKILL.md +3 -1
  17. package/src/defaults/skills/memory-management/SKILL.md +4 -1
  18. package/src/defaults/skills/setup/references/actions.md +11 -4
  19. package/src/defaults/skills/setup-guide/SKILL.md +175 -0
  20. package/src/defaults/skills/setup-guide/model-recommendations.json +333 -0
  21. package/src/defaults/skills/visualize/SKILL.md +3 -2
  22. package/src/lib/rules-builder.cjs +56 -7
  23. package/src/output-styles/common.md +22 -6
  24. package/src/output-styles/detailed.md +7 -5
  25. package/src/output-styles/minimal.md +7 -3
  26. package/src/output-styles/simple.md +2 -3
  27. package/src/rules/agent/AGENT.md +7 -1
  28. package/src/rules/agent-mode/AGENT_MODE.md +24 -0
  29. package/src/rules/agent-mode/MIXY.md +21 -0
  30. package/src/rules/agent-mode/ROUTINE.md +6 -0
  31. package/src/rules/lead/LEAD.md +9 -4
  32. package/src/rules/shared/10-tool-workflow.md +2 -1
  33. package/src/rules/shared/60-verification.md +4 -5
  34. package/src/rules/shared/70-delivery.md +3 -0
  35. package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +2 -1
  36. package/src/runtime/agent/orchestrator/agent-runtime/room-supervisor-completion.mjs +86 -0
  37. package/src/runtime/agent/orchestrator/config.mjs +6 -0
  38. package/src/runtime/agent/orchestrator/context/deferred-tools.mjs +77 -14
  39. package/src/runtime/agent/orchestrator/context/role-instructions.mjs +182 -13
  40. package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +5 -3
  41. package/src/runtime/agent/orchestrator/internal-agents.mjs +10 -0
  42. package/src/runtime/agent/orchestrator/mcp/agent-connectors.mjs +215 -0
  43. package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +58 -64
  44. package/src/runtime/agent/orchestrator/mcp/client-transport.mjs +10 -1
  45. package/src/runtime/agent/orchestrator/mcp/client.mjs +122 -15
  46. package/src/runtime/agent/orchestrator/mcp/oauth-account.mjs +97 -0
  47. package/src/runtime/agent/orchestrator/mcp/oauth-callback.mjs +2 -3
  48. package/src/runtime/agent/orchestrator/mcp/oauth-client.mjs +49 -0
  49. package/src/runtime/agent/orchestrator/mcp/oauth-credentials.mjs +59 -9
  50. package/src/runtime/agent/orchestrator/mcp/oauth-login.mjs +32 -7
  51. package/src/runtime/agent/orchestrator/mcp/oauth-provider.mjs +45 -6
  52. package/src/runtime/agent/orchestrator/mcp/oauth.mjs +195 -6
  53. package/src/runtime/agent/orchestrator/mcp/server-connectors.mjs +17 -0
  54. package/src/runtime/agent/orchestrator/providers/account-pool.mjs +9 -2
  55. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
  56. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +41 -19
  57. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +3 -2
  58. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-start.mjs +4 -1
  59. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events.mjs +2 -0
  60. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn.mjs +3 -0
  61. package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +2 -1
  62. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +3 -1
  63. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-login.mjs +11 -5
  64. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-tokens.mjs +4 -0
  65. package/src/runtime/agent/orchestrator/providers/catalog-deadline.mjs +163 -0
  66. package/src/runtime/agent/orchestrator/providers/catalog-failures.mjs +34 -0
  67. package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +1 -1
  68. package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs +38 -14
  69. package/src/runtime/agent/orchestrator/providers/lib/oauth-page.mjs +100 -26
  70. package/src/runtime/agent/orchestrator/providers/lib/send-callbacks.mjs +24 -0
  71. package/src/runtime/agent/orchestrator/providers/oauth-credential-probes.mjs +13 -0
  72. package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +2 -1
  73. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-send.mjs +1 -0
  74. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/chunk-events.mjs +4 -0
  75. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +3 -1
  76. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream.mjs +2 -0
  77. package/src/runtime/agent/orchestrator/providers/openai-compat-models.mjs +49 -4
  78. package/src/runtime/agent/orchestrator/providers/openai-compat-presets.mjs +0 -7
  79. package/src/runtime/agent/orchestrator/providers/openai-compat-responses-events.mjs +7 -1
  80. package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +1 -0
  81. package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +2 -0
  82. package/src/runtime/agent/orchestrator/providers/openai-compat-xai-send.mjs +1 -0
  83. package/src/runtime/agent/orchestrator/providers/openai-error-contract.mjs +17 -12
  84. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events.mjs +5 -1
  85. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state.mjs +11 -2
  86. package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +1 -0
  87. package/src/runtime/agent/orchestrator/providers/openai-oauth-login.mjs +45 -16
  88. package/src/runtime/agent/orchestrator/providers/openai-oauth-tokens.mjs +10 -0
  89. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +1 -0
  90. package/src/runtime/agent/orchestrator/providers/openai-ws-connect.mjs +196 -0
  91. package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +74 -9
  92. package/src/runtime/agent/orchestrator/providers/openai-ws-stream/event-switch.mjs +14 -1
  93. package/src/runtime/agent/orchestrator/providers/openai-ws-stream.mjs +2 -0
  94. package/src/runtime/agent/orchestrator/providers/opencode-go-oauth-login.mjs +194 -0
  95. package/src/runtime/agent/orchestrator/providers/opencode-go-oauth-tokens.mjs +353 -0
  96. package/src/runtime/agent/orchestrator/providers/opencode-go-oauth.mjs +293 -0
  97. package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +33 -100
  98. package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +23 -14
  99. package/src/runtime/agent/orchestrator/providers/registry.mjs +41 -27
  100. package/src/runtime/agent/orchestrator/runtime-core/ask-user-tool-defs.mjs +98 -4
  101. package/src/runtime/agent/orchestrator/runtime-core/context-status-shape.mjs +4 -0
  102. package/src/runtime/agent/orchestrator/runtime-core/extension-scopes.mjs +6 -4
  103. package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +15 -8
  104. package/src/runtime/agent/orchestrator/runtime-core/plugin-mcp.mjs +1 -0
  105. package/src/runtime/agent/orchestrator/runtime-core/tool-bridge.mjs +12 -6
  106. package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +32 -5
  107. package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +10 -4
  108. package/src/runtime/agent/orchestrator/runtime-core/workflow/agents.mjs +4 -1
  109. package/src/runtime/agent/orchestrator/runtime-core/workflow/context.mjs +50 -20
  110. package/src/runtime/agent/orchestrator/runtime-core/workflow-ids.mjs +2 -0
  111. package/src/runtime/agent/orchestrator/session/agent-home.d.mts +4 -0
  112. package/src/runtime/agent/orchestrator/session/agent-home.mjs +33 -0
  113. package/src/runtime/agent/orchestrator/session/agent-mode.mjs +62 -0
  114. package/src/runtime/agent/orchestrator/session/agent-pool-progress.mjs +15 -3
  115. package/src/runtime/agent/orchestrator/session/agent-room-supervisor.d.mts +31 -0
  116. package/src/runtime/agent/orchestrator/session/agent-room-supervisor.mjs +241 -0
  117. package/src/runtime/agent/orchestrator/session/agent-room.d.mts +162 -0
  118. package/src/runtime/agent/orchestrator/session/agent-room.mjs +641 -0
  119. package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +7 -1
  120. package/src/runtime/agent/orchestrator/session/compact/execution-tail.mjs +74 -13
  121. package/src/runtime/agent/orchestrator/session/compact/forked-summary.mjs +102 -0
  122. package/src/runtime/agent/orchestrator/session/compact/runner.mjs +8 -2
  123. package/src/runtime/agent/orchestrator/session/compact/summary.mjs +16 -0
  124. package/src/runtime/agent/orchestrator/session/compact/user-message-kind.mjs +2 -0
  125. package/src/runtime/agent/orchestrator/session/compaction-archive-capture.mjs +6 -2
  126. package/src/runtime/agent/orchestrator/session/human-gate/gate.mjs +165 -0
  127. package/src/runtime/agent/orchestrator/session/human-gate/held-message.mjs +95 -0
  128. package/src/runtime/agent/orchestrator/session/human-gate/outbound-policy.mjs +221 -0
  129. package/src/runtime/agent/orchestrator/session/human-gate/requests.mjs +195 -0
  130. package/src/runtime/agent/orchestrator/session/human-gate/store.mjs +167 -0
  131. package/src/runtime/agent/orchestrator/session/lifecycle-scan.mjs +9 -0
  132. package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +3 -1
  133. package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +39 -2
  134. package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +10 -0
  135. package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +16 -1
  136. package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +82 -33
  137. package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +11 -4
  138. package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +5 -4
  139. package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +13 -3
  140. package/src/runtime/agent/orchestrator/session/loop/usage.mjs +7 -0
  141. package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +1 -0
  142. package/src/runtime/agent/orchestrator/session/manager/ask-turn-loop-options.mjs +6 -1
  143. package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +6 -0
  144. package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +2 -0
  145. package/src/runtime/agent/orchestrator/session/manager/ask-turn-steering-drain.mjs +13 -5
  146. package/src/runtime/agent/orchestrator/session/manager/pending-lifecycle-epoch.mjs +0 -8
  147. package/src/runtime/agent/orchestrator/session/manager/pending-message-entry.mjs +10 -7
  148. package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +62 -22
  149. package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +44 -16
  150. package/src/runtime/agent/orchestrator/session/manager/rules-cache.mjs +22 -5
  151. package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +23 -1
  152. package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +81 -34
  153. package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +39 -4
  154. package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +27 -5
  155. package/src/runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs +55 -8
  156. package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +16 -0
  157. package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +3 -2
  158. package/src/runtime/agent/orchestrator/session/manager/usage-metrics.mjs +6 -0
  159. package/src/runtime/agent/orchestrator/session/manager/workflow-switch-notice.mjs +58 -0
  160. package/src/runtime/agent/orchestrator/session/manager.mjs +2 -2
  161. package/src/runtime/agent/orchestrator/session/mixy-name.mjs +24 -0
  162. package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +32 -5
  163. package/src/runtime/agent/orchestrator/session/request-fork.mjs +47 -0
  164. package/src/runtime/agent/orchestrator/session/routine-result.d.mts +70 -0
  165. package/src/runtime/agent/orchestrator/session/routine-result.mjs +277 -0
  166. package/src/runtime/agent/orchestrator/session/side-question-store.mjs +16 -1
  167. package/src/runtime/agent/orchestrator/session/side-question.mjs +5 -43
  168. package/src/runtime/agent/orchestrator/session/store/fs-probe.mjs +10 -0
  169. package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +73 -6
  170. package/src/runtime/agent/orchestrator/session/store/load-session.mjs +40 -0
  171. package/src/runtime/agent/orchestrator/session/store/save-fault.mjs +15 -0
  172. package/src/runtime/agent/orchestrator/session/store/session-paths.mjs +12 -0
  173. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-row.mjs +8 -0
  174. package/src/runtime/agent/orchestrator/session/store-agent-worker-header.mjs +36 -0
  175. package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +258 -43
  176. package/src/runtime/agent/orchestrator/session/store-record-strict-scan.mjs +325 -0
  177. package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +84 -21
  178. package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +44 -12
  179. package/src/runtime/agent/orchestrator/session/store-summary-last-message.mjs +46 -0
  180. package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +46 -30
  181. package/src/runtime/agent/orchestrator/session/store-summary-visibility.mjs +0 -4
  182. package/src/runtime/agent/orchestrator/session/store-transcript-cache.mjs +144 -45
  183. package/src/runtime/agent/orchestrator/session/store-transcript-projection.mjs +32 -13
  184. package/src/runtime/agent/orchestrator/session/store-transcript-worker.mjs +364 -38
  185. package/src/runtime/agent/orchestrator/session/store.mjs +9 -2
  186. package/src/runtime/agent/orchestrator/session/task-wait-control.mjs +43 -12
  187. package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +23 -6
  188. package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +44 -1
  189. package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +12 -6
  190. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/backgrounded-result.mjs +13 -7
  191. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/bashism-rewrite.mjs +1 -1
  192. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/benign-exit.mjs +7 -1
  193. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/completed-result.mjs +40 -7
  194. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/deadline-plan.mjs +37 -34
  195. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/inline-hoist.mjs +1 -1
  196. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/spawn-env.mjs +0 -4
  197. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +6 -0
  198. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +29 -27
  199. package/src/runtime/agent/orchestrator/tools/builtin/external-tool-adapters.mjs +1 -1
  200. package/src/runtime/agent/orchestrator/tools/builtin/find-files-tool.mjs +28 -11
  201. package/src/runtime/agent/orchestrator/tools/builtin/git-command-policy.mjs +12 -3
  202. package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +203 -101
  203. package/src/runtime/agent/orchestrator/tools/builtin/git-repo-rw-lock.mjs +90 -41
  204. package/src/runtime/agent/orchestrator/tools/builtin/lib/list-helpers.mjs +17 -1
  205. package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-delivery.mjs +199 -0
  206. package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +12 -0
  207. package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-task-output.mjs +165 -39
  208. package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +25 -13
  209. package/src/runtime/agent/orchestrator/tools/builtin/native-search-client.mjs +113 -5
  210. package/src/runtime/agent/orchestrator/tools/builtin/read-batch.mjs +7 -6
  211. package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +19 -4
  212. package/src/runtime/agent/orchestrator/tools/builtin/read-line-collector.mjs +5 -3
  213. package/src/runtime/agent/orchestrator/tools/builtin/read-single-render.mjs +25 -7
  214. package/src/runtime/agent/orchestrator/tools/builtin/read-special-files.mjs +2 -1
  215. package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-render.mjs +3 -1
  216. package/src/runtime/agent/orchestrator/tools/builtin/search-glob-tool.mjs +12 -5
  217. package/src/runtime/agent/orchestrator/tools/builtin/search-grep-tool.mjs +61 -22
  218. package/src/runtime/agent/orchestrator/tools/builtin/search-path-diagnostics.mjs +32 -8
  219. package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +193 -19
  220. package/src/runtime/agent/orchestrator/tools/builtin/shell-direct-exe.mjs +57 -7
  221. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +123 -32
  222. package/src/runtime/agent/orchestrator/tools/builtin/shell-lossless-compact.mjs +26 -1
  223. package/src/runtime/agent/orchestrator/tools/builtin/shell-output.mjs +13 -28
  224. package/src/runtime/agent/orchestrator/tools/builtin/task-tool.mjs +90 -11
  225. package/src/runtime/agent/orchestrator/tools/builtin/wait-budgets.mjs +23 -0
  226. package/src/runtime/agent/orchestrator/tools/builtin.mjs +54 -10
  227. package/src/runtime/agent/orchestrator/tools/code-graph/build.mjs +22 -28
  228. package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +11 -7
  229. package/src/runtime/agent/orchestrator/tools/destructive-warning.mjs +126 -9
  230. package/src/runtime/agent/orchestrator/tools/graph-manifest.json +13 -13
  231. package/src/runtime/agent/orchestrator/tools/lib/owned-shell-trees.mjs +15 -6
  232. package/src/runtime/agent/orchestrator/tools/lib/shell-descendants.mjs +64 -2
  233. package/src/runtime/agent/orchestrator/tools/lib/shell-run-background/promote-job.mjs +10 -2
  234. package/src/runtime/agent/orchestrator/tools/lib/shell-run-background/promotion-results.mjs +13 -3
  235. package/src/runtime/agent/orchestrator/tools/lib/shell-run-settle.mjs +8 -0
  236. package/src/runtime/agent/orchestrator/tools/lib/shell-run-state.mjs +6 -1
  237. package/src/runtime/agent/orchestrator/tools/patch/v4a-convert.mjs +1 -1
  238. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +104 -55
  239. package/src/runtime/agent/orchestrator/tools/shell-policy.mjs +7 -2
  240. package/src/runtime/agent/orchestrator/tools/shell-powershell.mjs +39 -23
  241. package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +6 -2
  242. package/src/runtime/agent/orchestrator/tools/spawn-manifest.json +13 -13
  243. package/src/runtime/attachments/office-extract.mjs +11 -9
  244. package/src/runtime/browser-bridge/client.mjs +24 -0
  245. package/src/runtime/channels/lib/scheduler.mjs +40 -12
  246. package/src/runtime/channels/lib/schedules-db.mjs +71 -12
  247. package/src/runtime/channels/lib/webhook/session-dispatch.mjs +36 -16
  248. package/src/runtime/channels/lib/webhook.mjs +0 -1
  249. package/src/runtime/channels/lib/webhooks-db.mjs +100 -10
  250. package/src/runtime/channels/lib/worker-main.mjs +17 -20
  251. package/src/runtime/computer-bridge/client.mjs +28 -1
  252. package/src/runtime/connectors/gmail-app-password.mjs +690 -0
  253. package/src/runtime/connectors/google-mcp.mjs +446 -0
  254. package/src/runtime/memory/lib/core-memory-access.mjs +69 -0
  255. package/src/runtime/memory/lib/core-memory-file.mjs +16 -8
  256. package/src/runtime/memory/lib/core-memory-index.mjs +15 -9
  257. package/src/runtime/memory/lib/core-memory-management.mjs +10 -4
  258. package/src/runtime/memory/lib/core-memory-store.mjs +53 -30
  259. package/src/runtime/memory/lib/core-memory-uniqueness.mjs +10 -6
  260. package/src/runtime/memory/lib/embedding-tokenizer.mjs +32 -18
  261. package/src/runtime/memory/lib/http-router/session-routes.mjs +3 -2
  262. package/src/runtime/memory/lib/memory-action-handlers/core-actions.mjs +44 -14
  263. package/src/runtime/memory/lib/memory-schema/core-and-meta.mjs +11 -0
  264. package/src/runtime/memory/lib/memory.mjs +7 -1
  265. package/src/runtime/memory/lib/query-core-recall.mjs +9 -1
  266. package/src/runtime/memory/lib/query-hybrid-search.mjs +2 -0
  267. package/src/runtime/memory/lib/runtime-fetcher.mjs +1 -1
  268. package/src/runtime/memory/lib/tool-call-handler.mjs +9 -5
  269. package/src/runtime/memory/tool-defs.mjs +5 -0
  270. package/src/runtime/office/authoring/pptx-script-normalize.mjs +11 -8
  271. package/src/runtime/office/core/tabular.mjs +1 -1
  272. package/src/runtime/office/design/library/design-template-inspect.mjs +7 -4
  273. package/src/runtime/office/portable/docx-formatting.mjs +1 -1
  274. package/src/runtime/office/portable/docx-runs.mjs +1 -1
  275. package/src/runtime/office/portable/docx-tracked-edits.mjs +2 -2
  276. package/src/runtime/office/portable/portable-docx-edits.mjs +11 -10
  277. package/src/runtime/office/portable/portable-docx-operations.mjs +21 -17
  278. package/src/runtime/office/portable/portable-docx-parts.mjs +15 -9
  279. package/src/runtime/office/portable/portable-docx-styles.mjs +4 -1
  280. package/src/runtime/office/portable/portable-docx-xml.mjs +9 -9
  281. package/src/runtime/office/portable/portable-opc.mjs +27 -13
  282. package/src/runtime/office/portable/portable-pivot.mjs +3 -3
  283. package/src/runtime/office/portable/portable-pptx-chart.mjs +3 -3
  284. package/src/runtime/office/portable/portable-pptx-charts.mjs +24 -18
  285. package/src/runtime/office/portable/portable-pptx-core.mjs +5 -5
  286. package/src/runtime/office/portable/portable-pptx-deck.mjs +8 -4
  287. package/src/runtime/office/portable/portable-pptx-package.mjs +7 -4
  288. package/src/runtime/office/portable/portable-pptx-shapes.mjs +18 -9
  289. package/src/runtime/office/portable/portable-sheet-parts.mjs +9 -3
  290. package/src/runtime/office/portable/portable-sheet-xml.mjs +5 -5
  291. package/src/runtime/office/portable/portable-xlsx-charts.mjs +4 -1
  292. package/src/runtime/office/portable/portable-xlsx-drawings.mjs +10 -6
  293. package/src/runtime/office/portable/portable-xlsx-operations.mjs +8 -5
  294. package/src/runtime/office/portable/portable-xlsx-pivot-ops.mjs +1 -1
  295. package/src/runtime/office/portable/portable-xlsx-reference-shift.mjs +11 -7
  296. package/src/runtime/office/portable/portable-xlsx-sheet-edits.mjs +6 -3
  297. package/src/runtime/office/portable/portable-xml.mjs +1 -1
  298. package/src/runtime/shared/agent-avatar-sprites.mjs +445 -0
  299. package/src/runtime/shared/agent-avatar.d.mts +64 -0
  300. package/src/runtime/shared/agent-avatar.mjs +320 -0
  301. package/src/runtime/shared/agent-route-config.d.mts +3 -0
  302. package/src/runtime/shared/agent-route-config.mjs +16 -0
  303. package/src/runtime/shared/atomic-file.mjs +36 -14
  304. package/src/runtime/shared/background-tasks.mjs +60 -20
  305. package/src/runtime/shared/child-spawn-gate.mjs +26 -16
  306. package/src/runtime/shared/config.mjs +8 -11
  307. package/src/runtime/shared/connector-accounts.mjs +15 -0
  308. package/src/runtime/shared/connector-catalog.d.mts +52 -0
  309. package/src/runtime/shared/connector-catalog.mjs +230 -0
  310. package/src/runtime/shared/connector-triggers.d.mts +3 -0
  311. package/src/runtime/shared/connector-triggers.mjs +43 -0
  312. package/src/runtime/shared/file-lock.mjs +7 -1
  313. package/src/runtime/shared/file-permissions-worker.mjs +38 -0
  314. package/src/runtime/shared/file-permissions.d.mts +19 -4
  315. package/src/runtime/shared/file-permissions.mjs +310 -4
  316. package/src/runtime/shared/git-runner-worker.mjs +6 -78
  317. package/src/runtime/shared/google-oauth-client.mjs +24 -0
  318. package/src/runtime/shared/held-request-host.d.mts +12 -0
  319. package/src/runtime/shared/held-request-host.mjs +71 -0
  320. package/src/runtime/shared/llm/http-agent.mjs +7 -3
  321. package/src/runtime/shared/llm/provider-catalog-registry.mjs +10 -0
  322. package/src/runtime/shared/llm/usage-accounting.mjs +2 -0
  323. package/src/runtime/shared/llm/usage-ledger-import.mjs +32 -3
  324. package/src/runtime/shared/llm/usage-ledger-rollup.mjs +12 -5
  325. package/src/runtime/shared/llm/usage-ledger-worker.mjs +1 -1
  326. package/src/runtime/shared/llm/usage-ledger.mjs +20 -5
  327. package/src/runtime/shared/memory-snapshot.mjs +5 -1
  328. package/src/runtime/shared/notify-trace.mjs +8 -1
  329. package/src/runtime/shared/plain-preview.d.mts +1 -0
  330. package/src/runtime/shared/plain-preview.mjs +28 -0
  331. package/src/runtime/shared/pristine-execution-contract.json +5 -1
  332. package/src/runtime/shared/process-runner-worker.mjs +7 -0
  333. package/src/runtime/shared/process-runner.mjs +38 -0
  334. package/src/runtime/shared/provider-accounts.mjs +2 -1
  335. package/src/runtime/shared/provider-api-key.mjs +0 -1
  336. package/src/runtime/shared/read-row-numbers.mjs +1 -1
  337. package/src/runtime/shared/resource-admission.mjs +60 -18
  338. package/src/runtime/shared/routine-limits.d.mts +11 -0
  339. package/src/runtime/shared/routine-limits.mjs +21 -0
  340. package/src/runtime/shared/routine-trigger.d.mts +10 -0
  341. package/src/runtime/shared/routine-trigger.mjs +44 -0
  342. package/src/runtime/shared/run-child.mjs +84 -0
  343. package/src/runtime/shared/schedule-model-ref.mjs +9 -10
  344. package/src/runtime/shared/session-activity-signal.mjs +23 -0
  345. package/src/runtime/shared/shell-output-summary.mjs +23 -0
  346. package/src/runtime/shared/singleton-owner.mjs +126 -42
  347. package/src/runtime/shared/slow-span.mjs +4 -12
  348. package/src/runtime/shared/statusline/statusline-segments.mjs +13 -1
  349. package/src/runtime/shared/tool-output-limit.mjs +4 -2
  350. package/src/runtime/shared/tool-output-marker.mjs +58 -0
  351. package/src/runtime/shared/transcript-metadata.mjs +10 -0
  352. package/src/runtime/shared/turn-changes.mjs +0 -8
  353. package/src/runtime/shared/usage-readout-totals.mjs +56 -0
  354. package/src/runtime/shared/user-data-guard.mjs +131 -34
  355. package/src/runtime/shared/worktrees/activity-gate.mjs +33 -8
  356. package/src/runtime/shared/worktrees/git-head.mjs +20 -2
  357. package/src/runtime/shared/worktrees/lock.mjs +3 -2
  358. package/src/runtime/terminal-bridge/tool-defs.mjs +1 -1
  359. package/src/runtime/tidy/runners/biome.mjs +3 -1
  360. package/src/runtime/tidy/shadow.mjs +2 -1
  361. package/src/runtime/web-search/index.mjs +5 -7
  362. package/src/runtime/web-search/lib/formatter.mjs +42 -6
  363. package/src/runtime/web-search/tool-defs.mjs +6 -1
  364. package/src/session-runtime/agent-home-delivery.mjs +459 -0
  365. package/src/session-runtime/agent-profile-changes.mjs +21 -0
  366. package/src/session-runtime/agent-room-delivery.mjs +92 -0
  367. package/src/session-runtime/agent-task-sessions.mjs +200 -0
  368. package/src/session-runtime/boot/apis.mjs +50 -18
  369. package/src/session-runtime/boot/facade.mjs +5 -8
  370. package/src/session-runtime/boot/infrastructure.mjs +28 -17
  371. package/src/session-runtime/boot/tools.mjs +3 -0
  372. package/src/session-runtime/channel-config-api.mjs +53 -5
  373. package/src/session-runtime/cwd-plugins/core-memory-context.mjs +36 -20
  374. package/src/session-runtime/cwd-plugins/plugin-status.mjs +6 -1
  375. package/src/session-runtime/held-requests.mjs +228 -0
  376. package/src/session-runtime/internal-tool-executor/ask-user-tool.mjs +121 -0
  377. package/src/session-runtime/internal-tool-executor/feature-tools.mjs +5 -1
  378. package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +31 -2
  379. package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +31 -2
  380. package/src/session-runtime/internal-tool-executor.mjs +2 -0
  381. package/src/session-runtime/lifecycle/session-catalog.mjs +9 -0
  382. package/src/session-runtime/lifecycle/session-switch/context-switch.mjs +4 -3
  383. package/src/session-runtime/lifecycle/session-switch/resume.mjs +11 -4
  384. package/src/session-runtime/lifecycle/session-switch/session-delete.mjs +3 -3
  385. package/src/session-runtime/lifecycle/shared.mjs +25 -2
  386. package/src/session-runtime/lifecycle/teardown/session-close.mjs +2 -0
  387. package/src/session-runtime/lifecycle/teardown.mjs +5 -2
  388. package/src/session-runtime/lifecycle-api.mjs +3 -1
  389. package/src/session-runtime/mcp-glue/server-catalog.mjs +8 -0
  390. package/src/session-runtime/mcp-glue/server-input.mjs +3 -0
  391. package/src/session-runtime/mcp-oauth-login.mjs +112 -15
  392. package/src/session-runtime/model-route/set-route.mjs +14 -3
  393. package/src/session-runtime/owned-automation-run.mjs +229 -0
  394. package/src/session-runtime/provider-auth/login.mjs +10 -6
  395. package/src/session-runtime/provider-auth/setup.mjs +19 -2
  396. package/src/session-runtime/provider-catalog-cache.mjs +101 -25
  397. package/src/session-runtime/provider-models/catalog-load.mjs +14 -3
  398. package/src/session-runtime/provider-models/row-hydration.mjs +4 -0
  399. package/src/session-runtime/provider-models.mjs +76 -10
  400. package/src/session-runtime/provider-readiness.mjs +4 -0
  401. package/src/session-runtime/resource-api.mjs +5 -0
  402. package/src/session-runtime/resource-mcp-api.mjs +107 -13
  403. package/src/session-runtime/resource-skills-api.mjs +12 -0
  404. package/src/session-runtime/room-member-gate.mjs +48 -0
  405. package/src/session-runtime/routine-home-turn.mjs +156 -0
  406. package/src/session-runtime/routine-owner.mjs +48 -0
  407. package/src/session-runtime/schedule-session-run.mjs +30 -64
  408. package/src/session-runtime/services/agent-tool/close-flow.mjs +2 -1
  409. package/src/session-runtime/services/agent-tool/helpers.mjs +10 -0
  410. package/src/session-runtime/services/agent-tool/job-views/agent-list.mjs +10 -2
  411. package/src/session-runtime/services/agent-tool/job-views/session-progress.mjs +13 -4
  412. package/src/session-runtime/services/agent-tool/notify.mjs +15 -4
  413. package/src/session-runtime/services/agent-tool/restart-notify.mjs +134 -0
  414. package/src/session-runtime/services/agent-tool/send-flow.mjs +24 -1
  415. package/src/session-runtime/services/agent-tool/spawn-flow/deferred-spawn.mjs +2 -1
  416. package/src/session-runtime/services/agent-tool/spawn-flow/job-start.mjs +4 -3
  417. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-plan.mjs +19 -4
  418. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-prep.mjs +2 -0
  419. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-run.mjs +5 -1
  420. package/src/session-runtime/services/agent-tool/tag-registry/tag-lookup.mjs +8 -3
  421. package/src/session-runtime/services/agent-tool/tag-registry.mjs +3 -0
  422. package/src/session-runtime/services/agent-tool/worker-index/row-shape.mjs +4 -0
  423. package/src/session-runtime/services/agent-tool/worker-index.mjs +44 -10
  424. package/src/session-runtime/services/agent-tool.mjs +20 -0
  425. package/src/session-runtime/services/channel-admin.mjs +93 -24
  426. package/src/session-runtime/services/memory-access.mjs +37 -0
  427. package/src/session-runtime/services/provider-admin.mjs +166 -59
  428. package/src/session-runtime/services/schedule-access.mjs +91 -0
  429. package/src/session-runtime/services/usage-dashboard-model.mjs +2 -2
  430. package/src/session-runtime/services/usage-dashboard.mjs +27 -69
  431. package/src/session-runtime/session-create/session-options.mjs +34 -7
  432. package/src/session-runtime/session-hooks.mjs +16 -8
  433. package/src/session-runtime/setup-tool/executor.mjs +68 -6
  434. package/src/session-runtime/setup-tool/extended-actions.mjs +72 -14
  435. package/src/session-runtime/setup-tool/settings-contract.mjs +8 -6
  436. package/src/session-runtime/setup-tool/tool-defs.mjs +8 -0
  437. package/src/session-runtime/skills-api.mjs +16 -1
  438. package/src/session-runtime/tool-policy-refresh.mjs +238 -29
  439. package/src/session-runtime/turn/session-ops.mjs +10 -3
  440. package/src/session-runtime/turn/turn-run/ask-callbacks.mjs +11 -2
  441. package/src/session-runtime/turn/turn-run/turn-prepare.mjs +3 -0
  442. package/src/session-runtime/usage-stats-api.mjs +6 -1
  443. package/src/session-runtime/webhook-session-run.mjs +49 -67
  444. package/src/session-runtime/workflow-agents-api/agent-connectors.mjs +239 -0
  445. package/src/session-runtime/workflow-agents-api/agent-editor.mjs +556 -22
  446. package/src/session-runtime/workflow-agents-api/workflow-packs.mjs +11 -1
  447. package/src/session-runtime/workflow-agents-api.mjs +4 -1
  448. package/src/standalone/channel-transport/http-routes.mjs +10 -9
  449. package/src/standalone/daemon-agent-control.mjs +1 -8
  450. package/src/standalone/daemon-desktop-runtime.mjs +20 -7
  451. package/src/standalone/daemon-owner.mjs +117 -25
  452. package/src/standalone/daemon-session-control.mjs +11 -2
  453. package/src/standalone/daemon.mjs +61 -17
  454. package/src/standalone/session-call-cache.mjs +6 -0
  455. package/src/standalone/session-protocol.mjs +28 -1
  456. package/src/standalone/session-service/retention/busy.mjs +7 -2
  457. package/src/standalone/session-service/session-calls/session-turns.mjs +9 -0
  458. package/src/standalone/session-service.mjs +19 -0
  459. package/src/standalone/session-transport/routes.mjs +7 -6
  460. package/src/tui/app/model-options.mjs +39 -2
  461. package/src/tui/app/model-picker.mjs +16 -2
  462. package/src/tui/app/provider-setup-picker.mjs +1 -2
  463. package/src/tui/app/slash-commands.mjs +20 -0
  464. package/src/tui/dist/index.mjs +487 -128
  465. package/src/tui/session/context-state.mjs +6 -1
  466. package/src/tui/session/notice-surface.mjs +35 -4
  467. package/src/tui/session/notice-text.mjs +0 -1
  468. package/src/tui/session/queue-helpers.mjs +2 -1
  469. package/src/tui/session/session-api/extensions.mjs +4 -0
  470. package/src/tui/session/session-api/intake/submission.mjs +12 -13
  471. package/src/tui/session/session-api/integrations.mjs +9 -5
  472. package/src/tui/session/session-api/lifecycle/session-reset.mjs +13 -3
  473. package/src/tui/session/session-api/lifecycle.mjs +17 -1
  474. package/src/tui/session/session-api/routes.mjs +48 -3
  475. package/src/tui/session/session-flow/drain.mjs +20 -3
  476. package/src/tui/session/session-flow/queue/entry-shape.mjs +2 -1
  477. package/src/tui/session/session-flow/queue/take-entries.mjs +3 -2
  478. package/src/tui/session/session-flow/steering.mjs +104 -24
  479. package/src/tui/session/session-flow.mjs +2 -0
  480. package/src/tui/session/tool-approval.mjs +26 -5
  481. package/src/tui/session/transcript-intake.mjs +6 -2
  482. package/src/tui/session/transcript-spill.mjs +5 -1
  483. package/src/tui/session/tui-steering-persist.mjs +65 -42
  484. package/src/tui/session/turn-live-call.mjs +56 -0
  485. package/src/tui/session/turn-stream.mjs +33 -0
  486. package/src/tui/session/turn.mjs +50 -7
  487. package/src/ui/statusline.mjs +1 -6
  488. package/src/ui/streaming-markdown-heal.mjs +24 -7
  489. package/src/vendor/statusline/bin/statusline-route.mjs +0 -1
  490. package/src/vendor/statusline/src/gateway/route-meta.mjs +0 -1
  491. package/src/workflows/default/WORKFLOW.md +9 -13
  492. package/src/session-runtime/automation-agents.mjs +0 -94
  493. package/src/session-runtime/automation-workflow.mjs +0 -59
@@ -0,0 +1,175 @@
1
+ ---
2
+ name: setup-guide
3
+ description: Guide a new user through first setup and explain Mixdog concepts.
4
+ when_to_use: 'Mixy''s first chat; how to start, what to do first, what a Mixdog term means; not one named setting.'
5
+ dependencies:
6
+ tools:
7
+ - type: tool
8
+ value: setup
9
+ ---
10
+
11
+ # Setup guide
12
+
13
+ Walk a new user through Mixdog's first setup one step at a time, and explain
14
+ Mixdog's concepts in plain words. Changes go through the `setup` tool, never
15
+ through file edits. One named setting the user already chose belongs to `setup`.
16
+
17
+ ## Style
18
+
19
+ Reply as in agent mode: one step or one concept per message, short plain
20
+ sentences, no tables or headings, in the user's language. In Korean use the
21
+ formal polite style (~합니다 / ~하세요, never ~해요). Say "봇" for Mixy and
22
+ other contacts, "에이전트" only for workflow agents. Never print ids, file
23
+ names or dotted internal names. End a step with one question, not a list of options.
24
+
25
+ ## Mode
26
+
27
+ - Setup walk-through: the user accepted setup help ("기본 설정부터 같이 할까요?"),
28
+ or asks how to start or what to do first.
29
+ - Concept question: answer it from the glossary below, then stop. Go deeper
30
+ only when asked, and offer the matching setup step only if it is not done.
31
+
32
+ ## Opening
33
+
34
+ Start in this order, one message each:
35
+
36
+ 1. Say you will go through setup one thing at a time.
37
+ 2. Check `status features` and `status mcp` first. Offer add-ons tier by tier;
38
+ finish a tier before the next. Never mention a feature that is already on
39
+ or installed, and skip a tier with nothing missing.
40
+ 3. Then the connectors, then the steps below.
41
+
42
+ Tier 1, essential: Media generation, Git & GitHub (`git`), Visualize. If any
43
+ is missing or off, say it is essential and ask once for all of them
44
+ ("필수 기능인데 설치할까요?").
45
+
46
+ Tier 2, recommended: Memory (`memory`), Computer Use (`computer`), Browser Use
47
+ (`browser`). Offer the missing ones in one short line.
48
+
49
+ Tier 3, optional: Voice transcription (`voice`), Local Provider
50
+ (`localProvider`), Code Tidy (`tidy`). Offer the missing ones in one short line.
51
+
52
+ Install only what the user accepts. How each is done:
53
+
54
+ - `install_builtin` with the name for git, memory, autoEffort, computer,
55
+ browser, voice, localProvider and tidy. Git installs system Git through the
56
+ Desktop when this chat is open there. Auto reasoning can be unsupported on
57
+ a machine: report that instead of retrying. Computer Use and Browser Use
58
+ need the Desktop, and the user approves OS permission dialogs. Local
59
+ Provider only prepares the runtime; models belong to `local-provider`.
60
+ - Memory is install-only; its later on/off is `set_memory_enabled`.
61
+ - Visualize has no install: `set_builtin_enabled` turns it on.
62
+ - Media generation has no setup action: `open plugins` and let the user turn
63
+ it on there, then re-check `status features`.
64
+
65
+ Connectors come after the tiers. First explain in a sentence or two: a
66
+ connector links an outside service so bots and agents can read and act in it,
67
+ and anything that sends or posts asks first through an approval card. Then
68
+ suggest by what the user does, only these: Gmail (with a Google app password;
69
+ it needs 2-Step Verification on the Google account, and the connect window
70
+ opens the app-password page in the browser), GitHub (comes with Git & GitHub),
71
+ Notion, Linear or Jira. Do not suggest Google Calendar or Google
72
+ Drive; their Google sign-in is still under review. Connect one with
73
+ `connect_connector`; it only leaves a card, so tell the user to press it and
74
+ confirm with `status mcp`.
75
+
76
+ ## Walk-through
77
+
78
+ The steps mirror the desktop starter guide and its checklist; do not keep
79
+ separate progress. Read state first with `setup` `status` (`providers`,
80
+ `onboarding`, `mcp`, `plugins`, `agents`, `connection`) and skip steps already
81
+ done. Take the first open step, explain it in a sentence or two, ask, then act.
82
+
83
+ 1. provider: done when a provider is authenticated (`status providers`). Sign-in
84
+ and API keys are entered by the user: `open providers`, never ask for a key
85
+ in chat. Suggest a subscription sign-in (Claude, ChatGPT, Gemini and the
86
+ like) first; an API key only when the user has no subscription or asks.
87
+ 2. project: done when a Project exists or `onboarding` lists `project` as
88
+ visited. A folder is optional. Register one with `save_project` for a path
89
+ the user names.
90
+ 3. workflow: done when `onboarding` lists `workflow` as visited. Explain
91
+ workflows and agents, `open workflows` so the user can turn agents on and
92
+ pick models (`set_agent_route` once they name a model). Recommend models
93
+ from `${MIXDOG_SKILL_DIR}/model-recommendations.json`, role by role, only
94
+ among providers the user is signed in to (`status providers`) and only a
95
+ model the provider's model list actually offers; picks are an ordered list
96
+ of any length, so recommend the first one that qualifies and otherwise take
97
+ the next. A subscription sign-in always comes first: when the user has one,
98
+ take the first qualifying pick it offers before any pick that would bill an
99
+ API key, and only fall back to API-key providers when no subscription
100
+ offers one. If `asOf` is older than `staleAfterDays`, say the list may be out of
101
+ date. Never print ids or file names. Roles with
102
+ `preferOtherProviderThan` (Reviewer, Advisor) work best with the opposite
103
+ tendency from the model doing the work: pick the first qualifying model whose
104
+ provider differs from the chosen Lead's and Heavy Worker's providers, and
105
+ fall back to the plain first pick only when the user has a single signed-in
106
+ provider. Give the reason in one line: a different model family catches what
107
+ the main one misses. Suggest turning on the Maintainer with
108
+ a cheap model at the lowest effort; it also decides turns in group rooms.
109
+ A pick may carry `plans`: when the Lead provider's plan (`plan` in
110
+ `status providers`) is listed there, recommend that model instead. A null or
111
+ unlisted plan keeps the pick as is; never fail on an unknown plan.
112
+ Delegation and roster come from `delegation` in the data file. First ask
113
+ once how the user likes to work: one agent doing everything, or splitting
114
+ work across agents. Say plainly that Solo is a good choice at any plan: it
115
+ is the most efficient, and with a strong model its quality is often not much
116
+ lower; delegation trades more usage for speed and parallel work. Then suggest
117
+ the mode whose `plans` lists the Lead provider's plan (the default
118
+ suggestion), but the user's preference overrides it. Ask once; set it with
119
+ `set_orchestration_mode`, and say it can be changed later in settings. The
120
+ roster follows the chosen mode: turn on only `baseRoster` plus that mode's
121
+ `agents`, using `set_agent_route` with `route.disabled` set false for what
122
+ the user accepts and true for the rest; do not enable others. Offer
123
+ `leanReview` for Solo or focused as a cost saver: the Lead reviews its own
124
+ work, Reviewer stays off, Advisor is on but used rarely (only when stuck).
125
+ Advisor in balanced or swarm is a light, occasional second opinion from a
126
+ different model family at key decision points, not on every task. Say in
127
+ one line that more agents can be turned on later on the Workflows page.
128
+ Right after the models are picked, explain Auto reasoning: it adjusts
129
+ reasoning depth per message, so hard work may come out slightly lower in
130
+ quality but cost is much lower. Ask whether to turn it on
131
+ (`install_builtin` `autoEffort`). If declined, say in one line that it can
132
+ be turned on later from the model picker.
133
+ 4. remote: done when a device is paired (`status connection`) or `remote` is
134
+ visited. Pairing is user-operated: `open connection`.
135
+ 5. extensions: done when `extensions` is visited. Explain plugins and skills;
136
+ offer only built-ins not already covered by the tiers above.
137
+ 6. mixy: done once Mixy exists, which is already true when this skill runs in
138
+ Mixy's chat. Offer to make another bot when the user wants one.
139
+
140
+ After a change, report it in a sentence and move on. The user may stop at any
141
+ step; do not insist.
142
+
143
+ ## Glossary
144
+
145
+ - Bot (봇): an agent-mode contact you chat with. Mixy is the representative
146
+ bot; the user can have it make others, such as a GitHub Watcher.
147
+ - Agent (에이전트): a workflow sub-agent such as Worker or Reviewer that
148
+ does part of a task. Users add their own on the Workflows page with the
149
+ "에이전트 +" button. Bots are people-facing; agents work behind a task.
150
+ - Default agents (기본 에이전트): built-in helpers listed on Workflows, such as
151
+ Web Search (runs the web search tool) and the Maintainer (memory upkeep and
152
+ session titles). They need a model route to work.
153
+ - Sessions and projects: a coding session runs in a Project, a folder whose
154
+ instructions and memories it loads.
155
+ - Workflows and work rules: a workflow sets how a request gets done; work
156
+ rules are the instructions it applies.
157
+ - Connectors and extensions: connectors are MCP services such as GitHub or
158
+ Notion (`connect_connector`, the user presses the card); extensions are
159
+ plugins that add tools and skills that teach how to work.
160
+ - Group rooms (그룹 대화방): one chat with several bots. `@name` or "봇 부르기"
161
+ addresses one bot; otherwise the Maintainer decides who answers next.
162
+ - Schedules and webhooks: a timed or incoming-event trigger (`save_automation`).
163
+ Each run is one turn in its bot's own chat, with that bot's persona, rules,
164
+ permissions, memory and model. Without a bot they cannot be used.
165
+ - Approval cards: when a tool needs permission it waits in the chat until the
166
+ user approves or declines.
167
+ - Phone remote access: pair a phone under Settings → Connection to follow and
168
+ steer tasks away from the PC.
169
+
170
+ ## Pitfalls
171
+
172
+ - Do not claim a step is done from memory; re-read state after acting.
173
+ - A UI handoff (`open`) is not completion; ask the user to confirm, then
174
+ re-check the status.
175
+ - Do not run several steps in one message or queue the next question early.
@@ -0,0 +1,333 @@
1
+ {
2
+ "asOf": "2026-10-20",
3
+ "staleAfterDays": 14,
4
+ "delegation": {
5
+ "note": "Default suggestion by the Lead provider's plan (status providers, plan). The user's working style overrides it; the roster follows the chosen mode. Solo is a valid choice at any plan.",
6
+ "unknownPlan": "ask the user which plan they have; if they do not know, suggest focused",
7
+ "baseRoster": ["Maintainer", "Web Search"],
8
+ "leanReview": {
9
+ "fitsModes": ["none", "focused"],
10
+ "description": "Cost-saving alternative to a Reviewer agent: the Lead reviews its own work, and the Advisor is called only when work gets stuck (errors recur, results stop converging).",
11
+ "agentsOff": ["Reviewer"],
12
+ "agentsOn": ["Advisor"],
13
+ "advisorUse": "only when stuck; rarely"
14
+ },
15
+ "modes": [
16
+ {
17
+ "mode": "none",
18
+ "label": "Solo",
19
+ "agents": [],
20
+ "advisorUse": null,
21
+ "plans": {
22
+ "Anthropic": ["none"],
23
+ "OpenAI": ["free", "none"],
24
+ "Google": ["free-tier"],
25
+ "other": "API key only or no subscription"
26
+ }
27
+ },
28
+ {
29
+ "mode": "focused",
30
+ "label": "Focused",
31
+ "agents": ["Worker", "Reviewer"],
32
+ "advisorUse": null,
33
+ "plans": { "Anthropic": ["pro"], "OpenAI": ["plus"], "Google": ["standard-tier", "legacy-tier"] }
34
+ },
35
+ {
36
+ "mode": "balanced",
37
+ "label": "Balanced",
38
+ "agents": ["Worker", "Reviewer", "Heavy Worker", "Advisor"],
39
+ "advisorUse": "sparingly: a light second opinion from a different model family only at key decision points (before choosing an approach, when results stop converging), not on every task; it runs rarely so it costs little",
40
+ "plans": {
41
+ "Anthropic": ["team", "enterprise"],
42
+ "OpenAI": ["team", "business", "enterprise"],
43
+ "Google": ["g1-pro-tier"]
44
+ }
45
+ },
46
+ {
47
+ "mode": "swarm",
48
+ "label": "Swarm",
49
+ "agents": ["Worker", "Reviewer", "Heavy Worker", "Advisor", "Writer", "Front Worker"],
50
+ "advisorUse": "sparingly, same as balanced",
51
+ "plans": { "Anthropic": ["max"], "OpenAI": ["pro"], "Google": ["g1-ultra-tier"] }
52
+ }
53
+ ]
54
+ },
55
+ "roles": [
56
+ {
57
+ "roles": ["Lead", "Bot default"],
58
+ "picks": [
59
+ {
60
+ "provider": "Anthropic",
61
+ "model": "Claude Opus 5.5",
62
+ "effort": "medium",
63
+ "plans": { "pro": "Claude Sonnet 5.5" },
64
+ "checkedAt": "2026-10-20",
65
+ "source": "https://benchlm.ai/anthropic/api-pricing"
66
+ },
67
+ {
68
+ "provider": "OpenAI",
69
+ "model": "GPT-6.1 Sol",
70
+ "effort": "medium",
71
+ "checkedAt": "2026-10-20",
72
+ "source": "https://benchlm.ai/openai/api-pricing"
73
+ },
74
+ {
75
+ "provider": "DeepSeek",
76
+ "model": "DeepSeek V4.1 Flash",
77
+ "effort": "none",
78
+ "note": "budget; no effort setting",
79
+ "checkedAt": "2026-10-20",
80
+ "source": "https://api-docs.deepseek.com/quick_start/pricing/"
81
+ }
82
+ ]
83
+ },
84
+ {
85
+ "roles": ["Heavy Worker"],
86
+ "picks": [
87
+ {
88
+ "provider": "Anthropic",
89
+ "model": "Claude Opus 5.5",
90
+ "effort": "medium",
91
+ "plans": { "pro": "Claude Sonnet 5.5" },
92
+ "checkedAt": "2026-10-20",
93
+ "source": "https://platform.claude.com/docs/en/build-with-claude/effort"
94
+ },
95
+ {
96
+ "provider": "OpenAI",
97
+ "model": "GPT-6.1 Sol",
98
+ "effort": "high",
99
+ "note": "xhigh for the hardest long runs",
100
+ "checkedAt": "2026-10-20",
101
+ "source": "https://openai.com/index/practical-guide-building-gpt-6/"
102
+ },
103
+ {
104
+ "provider": "Google",
105
+ "model": "Gemini 4 Argon",
106
+ "effort": "high",
107
+ "note": "budget",
108
+ "checkedAt": "2026-10-20",
109
+ "source": "https://ai.google.dev/gemini-api/docs/generate-content/latest-model"
110
+ }
111
+ ]
112
+ },
113
+ {
114
+ "roles": ["Advisor"],
115
+ "preferOtherProviderThan": ["Lead", "Heavy Worker"],
116
+ "picks": [
117
+ {
118
+ "provider": "OpenAI",
119
+ "model": "GPT-6 Astra",
120
+ "effort": "xhigh",
121
+ "checkedAt": "2026-10-20",
122
+ "source": "https://openai.com/index/practical-guide-building-gpt-6/"
123
+ },
124
+ {
125
+ "provider": "Anthropic",
126
+ "model": "Claude Opus 5.5",
127
+ "effort": "xhigh",
128
+ "checkedAt": "2026-10-20",
129
+ "source": "https://platform.claude.com/docs/en/build-with-claude/effort"
130
+ },
131
+ {
132
+ "provider": "Google",
133
+ "model": "Gemini 4 Argon",
134
+ "effort": "high",
135
+ "note": "budget; high is its top level",
136
+ "checkedAt": "2026-10-20",
137
+ "source": "https://ai.google.dev/gemini-api/docs/generate-content/latest-model"
138
+ }
139
+ ]
140
+ },
141
+ {
142
+ "roles": ["Reviewer"],
143
+ "preferOtherProviderThan": ["Lead", "Heavy Worker"],
144
+ "picks": [
145
+ {
146
+ "provider": "OpenAI",
147
+ "model": "GPT-6 Astra",
148
+ "effort": "high",
149
+ "checkedAt": "2026-10-20",
150
+ "source": "https://www.benchleader.com/best/llm-for-coding"
151
+ },
152
+ {
153
+ "provider": "Anthropic",
154
+ "model": "Claude Opus 5.5",
155
+ "effort": "high",
156
+ "checkedAt": "2026-10-20",
157
+ "source": "https://benchlm.ai/anthropic/api-pricing"
158
+ },
159
+ {
160
+ "provider": "Google",
161
+ "model": "Gemini 4 Argon",
162
+ "effort": "high",
163
+ "note": "budget",
164
+ "checkedAt": "2026-10-20",
165
+ "source": "https://benchlm.ai/google/api-pricing"
166
+ }
167
+ ]
168
+ },
169
+ {
170
+ "roles": ["Writer"],
171
+ "picks": [
172
+ {
173
+ "provider": "Google",
174
+ "model": "Gemini 4 Argon",
175
+ "effort": "medium",
176
+ "checkedAt": "2026-10-20",
177
+ "source": "https://ai.google.dev/gemini-api/docs/generate-content/latest-model"
178
+ },
179
+ {
180
+ "provider": "Google",
181
+ "model": "Gemini 3.8 Flash",
182
+ "effort": "medium",
183
+ "checkedAt": "2026-10-20",
184
+ "source": "https://ai.google.dev/gemini-api/docs/generate-content/latest-model"
185
+ },
186
+ {
187
+ "provider": "Anthropic",
188
+ "model": "Claude Sonnet 5.5",
189
+ "effort": "medium",
190
+ "checkedAt": "2026-10-20",
191
+ "source": "https://benchlm.ai/anthropic/api-pricing"
192
+ },
193
+ {
194
+ "provider": "OpenAI",
195
+ "model": "GPT-6.1 Sol",
196
+ "effort": "medium",
197
+ "checkedAt": "2026-10-20",
198
+ "source": "https://benchlm.ai/openai/api-pricing"
199
+ }
200
+ ]
201
+ },
202
+ {
203
+ "roles": ["Worker"],
204
+ "picks": [
205
+ {
206
+ "provider": "Anthropic",
207
+ "model": "Claude Sonnet 5.5",
208
+ "effort": "medium",
209
+ "checkedAt": "2026-10-20",
210
+ "source": "https://benchlm.ai/anthropic/api-pricing"
211
+ },
212
+ {
213
+ "provider": "OpenAI",
214
+ "model": "GPT-6.1 Sol",
215
+ "effort": "medium",
216
+ "checkedAt": "2026-10-20",
217
+ "source": "https://benchlm.ai/openai/api-pricing"
218
+ },
219
+ {
220
+ "provider": "DeepSeek",
221
+ "model": "DeepSeek V4.1 Flash",
222
+ "effort": "none",
223
+ "note": "budget; no effort setting",
224
+ "checkedAt": "2026-10-20",
225
+ "source": "https://api-docs.deepseek.com/quick_start/pricing/"
226
+ }
227
+ ]
228
+ },
229
+ {
230
+ "roles": ["Front Worker"],
231
+ "picks": [
232
+ {
233
+ "provider": "Anthropic",
234
+ "model": "Claude Opus 5.5",
235
+ "effort": "medium",
236
+ "checkedAt": "2026-10-20",
237
+ "source": "https://www.benchleader.com/best/llm-for-coding"
238
+ },
239
+ {
240
+ "provider": "DeepSeek",
241
+ "model": "DeepSeek V4.1 Flash",
242
+ "effort": "none",
243
+ "note": "budget; no effort setting",
244
+ "checkedAt": "2026-10-20",
245
+ "source": "https://api-docs.deepseek.com/quick_start/pricing/"
246
+ },
247
+ {
248
+ "provider": "Google",
249
+ "model": "Gemini 4 Argon",
250
+ "effort": "medium",
251
+ "checkedAt": "2026-10-20",
252
+ "source": "https://ai.google.dev/gemini-api/docs/generate-content/latest-model"
253
+ },
254
+ {
255
+ "provider": "OpenAI",
256
+ "model": "GPT-6.1 Sol",
257
+ "effort": "medium",
258
+ "checkedAt": "2026-10-20",
259
+ "source": "https://benchlm.ai/openai/api-pricing"
260
+ }
261
+ ]
262
+ },
263
+ {
264
+ "roles": ["Web Search"],
265
+ "picks": [
266
+ {
267
+ "provider": "xAI",
268
+ "model": "Grok 4.7",
269
+ "effort": "none",
270
+ "checkedAt": "2026-10-20",
271
+ "source": "https://benchlm.ai/providers/xai"
272
+ },
273
+ {
274
+ "provider": "OpenAI",
275
+ "model": "GPT-6.1 Sol",
276
+ "effort": "low",
277
+ "checkedAt": "2026-10-20",
278
+ "source": "https://benchlm.ai/openai/api-pricing"
279
+ },
280
+ {
281
+ "provider": "Google",
282
+ "model": "Gemini 3.8 Flash",
283
+ "effort": "low",
284
+ "checkedAt": "2026-10-20",
285
+ "source": "https://benchlm.ai/google/api-pricing"
286
+ },
287
+ {
288
+ "provider": "Anthropic",
289
+ "model": "Claude Sonnet 5.5",
290
+ "effort": "low",
291
+ "checkedAt": "2026-10-20",
292
+ "source": "https://benchlm.ai/anthropic/api-pricing"
293
+ }
294
+ ]
295
+ },
296
+ {
297
+ "roles": ["Maintainer"],
298
+ "note": "The Maintainer also decides turns in group rooms; there is no separate role for that.",
299
+ "picks": [
300
+ {
301
+ "provider": "OpenAI",
302
+ "model": "GPT-6 Luna",
303
+ "effort": "low",
304
+ "checkedAt": "2026-10-20",
305
+ "source": "https://benchlm.ai/openai/api-pricing"
306
+ },
307
+ {
308
+ "provider": "DeepSeek",
309
+ "model": "DeepSeek V4.1 Flash",
310
+ "effort": "none",
311
+ "note": "no effort setting",
312
+ "checkedAt": "2026-10-20",
313
+ "source": "https://api-docs.deepseek.com/quick_start/pricing/"
314
+ },
315
+ {
316
+ "provider": "Anthropic",
317
+ "model": "Claude Haiku 5.5",
318
+ "effort": "low",
319
+ "checkedAt": "2026-10-20",
320
+ "source": "https://benchlm.ai/anthropic/api-pricing"
321
+ },
322
+ {
323
+ "provider": "Zhipu",
324
+ "model": "GLM-5.3-Flash",
325
+ "effort": "none",
326
+ "note": "budget",
327
+ "checkedAt": "2026-10-20",
328
+ "source": "https://www.benchleader.com/best/llm-for-coding"
329
+ }
330
+ ]
331
+ }
332
+ ]
333
+ }
@@ -24,8 +24,9 @@ tradeoffs, and wording decisions stay in chat even when the topic is UI.
24
24
  - *Show* — any artifact you produced or changed (HTML, deck, document, sheet,
25
25
  PDF, image, video, a local dev page): `open` it once when it is ready. Edits
26
26
  reload the tab by themselves; never reopen to refresh.
27
- - *Mockup* — a UI change before implementation, or the user asks for a
28
- 시안/mockup/preview. §2.
27
+ - *Mockup* — the user asks for a mockup or preview, or a UI change whose
28
+ look the user still has to decide. A change whose look is already settled
29
+ is built directly. §2.
29
30
  - *Options* — the direction is genuinely open (the user is unsure, or two
30
31
  readings of the request lead to different layouts). §3.
31
32
  - *Explain* — a flow, state machine, architecture, or data path the user needs
@@ -139,7 +139,7 @@ function buildLanguageSection(dataDir) {
139
139
  // mistranslate, so the two clauses would be dead text.
140
140
  if (language.prompt !== 'English') {
141
141
  lines.push(
142
- `- Preserve identifiers, paths, commands, API names, and exact errors. For technical jargon, use the established term or a plain functional description, never an invented literal translation.`
142
+ `- Preserve identifiers, paths, commands, API names, and exact errors. Keep technical terms in their established form, usually the original English (blocker, cache, commit); add a short plain explanation only when the reader may not know it. Never invent a literal translation.`
143
143
  );
144
144
  }
145
145
  return `# Language\n\n${lines.join('\n')}`;
@@ -361,17 +361,64 @@ function buildRouteRulesContent({
361
361
  return omitToolRoutes(parts.join('\n'), omitTools, allowTools);
362
362
  }
363
363
 
364
- function buildLeadRoleContent({ PLUGIN_ROOT, includeLeadBrief = true }) {
364
+ // LEAD.md is split for BP3 prefix sharing (every Lead shares `common`; the
365
+ // mode-variant passages and the identity line move later):
366
+ // - `common`: every line but the identity line and the two passages below;
367
+ // - `coding` / `agent`: those two passages as bullets — LEAD.md's own text
368
+ // for coding mode, the conversational variants for agent mode;
369
+ // - `identity`: the coding identity sentence ("You are Mixdog, …").
370
+ const LEAD_IDENTITY_LINE = /^- (You are Mixdog, a coding agent\.)\n/m;
371
+ const LEAD_PROGRESS_PASSAGE = / (Before your first tool call, briefly state[\s\S]*?narration or plan repeats\.)/;
372
+ const LEAD_REPORT_PASSAGE = / (On an agent report, review its diff[\s\S]*?not a completed request\.)/;
373
+ const AGENT_MODE_PROGRESS =
374
+ '- Just answer conversation. Quick tool use (checking memory, leaving a\n' +
375
+ ' reaction) needs no announcement. When starting longer work (research,\n' +
376
+ ' delegation, multi-step tasks), say what you are doing, and share the\n' +
377
+ ' result when it finishes.';
378
+ const AGENT_MODE_REPORT =
379
+ '- On an agent report, check the result against what you delegated and\n' +
380
+ ' relay it in your own words, keeping uncertainty, failures and sources\n' +
381
+ ' intact. Review a diff only when you delegated code.';
382
+
383
+ function buildLeadRoleContent({ PLUGIN_ROOT, includeLeadBrief = true, part = 'common' }) {
365
384
  const RULES_DIR = path.join(PLUGIN_ROOT, 'rules');
366
- const lead = readOptional(path.join(RULES_DIR, 'lead', 'LEAD.md'));
367
- if (!lead) return '';
385
+ const raw = readOptional(path.join(RULES_DIR, 'lead', 'LEAD.md'));
386
+ if (!raw) return '';
368
387
  // Delegation-free sessions (headless, no delegatable agents) never expose the `agent` tool,
369
388
  // so Lead guidance marked `<!-- tools: agent -->` (briefing, completion
370
389
  // notifications) is dropped there and kept verbatim for delegating workflows.
371
- return omitToolRoutes(lead, includeLeadBrief ? [] : ['agent']);
390
+ const lead = omitToolRoutes(raw, includeLeadBrief ? [] : ['agent']);
391
+ if (part === 'identity') return lead.match(LEAD_IDENTITY_LINE)?.[1] || '';
392
+ const progress = lead.match(LEAD_PROGRESS_PASSAGE);
393
+ const report = lead.match(LEAD_REPORT_PASSAGE);
394
+ if (part === 'coding' || part === 'agent') {
395
+ const agentMode = part === 'agent';
396
+ const bullets = [
397
+ progress && (agentMode ? AGENT_MODE_PROGRESS : `- ${progress[1]}`),
398
+ report && (agentMode ? AGENT_MODE_REPORT : `- ${report[1]}`),
399
+ ].filter(Boolean);
400
+ return bullets.length ? `# Progress and Reports\n\n${bullets.join('\n')}` : '';
401
+ }
402
+ return lead.replace(LEAD_IDENTITY_LINE, '').replace(LEAD_PROGRESS_PASSAGE, '').replace(LEAD_REPORT_PASSAGE, '');
403
+ }
404
+
405
+ // The agent-mode rule files (rules/agent-mode/): `conduct` (AGENT_MODE.md,
406
+ // every agent-mode Lead), `mixy` (MIXY.md, Mixy only) and `routine`
407
+ // (ROUTINE.md, schedule/webhook runs only).
408
+ const AGENT_MODE_PARTS = {
409
+ conduct: ['AGENT_MODE.md', ''],
410
+ // Neutral heading: the user may rename Mixy (its identity line says the name).
411
+ mixy: ['MIXY.md', '# Your Role\n\n'],
412
+ routine: ['ROUTINE.md', '# Routine Run\n\n'],
413
+ };
414
+
415
+ function buildAgentModeContent({ PLUGIN_ROOT, part = 'conduct' }) {
416
+ const [file, heading] = AGENT_MODE_PARTS[part] || AGENT_MODE_PARTS.conduct;
417
+ const body = readOptional(path.join(PLUGIN_ROOT, 'rules', 'agent-mode', file)).trim();
418
+ return body ? `${heading}${body}` : '';
372
419
  }
373
420
 
374
- function buildLeadMetaContent({ PLUGIN_ROOT, DATA_DIR }) {
421
+ function buildLeadMetaContent({ PLUGIN_ROOT, DATA_DIR, includeOutputStyle = true }) {
375
422
  const parts = [];
376
423
 
377
424
  const profilePreferences = buildProfilePreferencesContent(DATA_DIR);
@@ -382,7 +429,8 @@ function buildLeadMetaContent({ PLUGIN_ROOT, DATA_DIR }) {
382
429
  // (workflow, role, persona, memory, session lines) sits between it and the
383
430
  // first reply.
384
431
 
385
- const outputStyle = loadOutputStyle({ PLUGIN_ROOT, DATA_DIR });
432
+ // Agent mode answers by AGENT_MODE.md alone; the coding Output Style stays out.
433
+ const outputStyle = includeOutputStyle ? loadOutputStyle({ PLUGIN_ROOT, DATA_DIR }) : '';
386
434
  if (outputStyle) parts.push(outputStyle);
387
435
 
388
436
  return parts.join('\n\n');
@@ -430,6 +478,7 @@ module.exports = {
430
478
  buildSharedToolContent,
431
479
  buildRouteRulesContent,
432
480
  buildLeadRoleContent,
481
+ buildAgentModeContent,
433
482
  buildLeadMetaContent,
434
483
  buildLeadLanguageContent,
435
484
  buildAgentRoleContent,
@@ -7,15 +7,31 @@ partial: true
7
7
 
8
8
  ## Shared Output Format
9
9
 
10
- - Lead with the answer; no restated request or closing recap. Natural,
10
+ - Lead with the answer; no restated request, closing recap, or offer. Natural,
11
11
  complete sentences in the reader's vocabulary, each point once; no arrow
12
12
  chains or unexplained shorthand.
13
- - Plain prose for simple questions; headings, lists, or tables only for real
14
- structure. GitHub-flavored Markdown, `$$…$$` for display math.
15
13
  - Distinguish facts, inference, and uncertainty; keep exact literals and
16
14
  material risks. Caveats only when they change the reader's next step.
17
- - Never pad: no tangents, unsolicited offers, raw dumps, or process recaps.
18
- Explicit depth requests win; depth applies to substantive answers, not the
19
- one-line pre-tool briefing.
15
+ - Show only what the reader needs: the decision, the result, the blocker, and
16
+ the action. No tangents, raw dumps, or process narration. Explicit depth
17
+ requests win; depth applies to substantive answers, not the one-line
18
+ pre-tool briefing.
20
19
  - At every depth keep decision-relevant failures, security warnings, and
21
20
  destructive-action confirmations; quote needed error text exactly.
21
+
22
+ Layout (GitHub-flavored Markdown, `$$…$$` for display math): the content picks
23
+ the format at every depth; depth sets only how much is said.
24
+
25
+ - Mixed content gets one short block per kind (result, cause, finding,
26
+ decision needed, remaining work) under a plain label in the reader's
27
+ language, never one running paragraph; what the reader must decide or do
28
+ comes last, on its own.
29
+ - A single answer or cause is short prose paragraphs without labels. Three or
30
+ more parallel items are a flat one-line list, numbered only for order, never
31
+ nested. A comparison across items is a small table with short cells.
32
+ - Commands, paths, identifiers, and literals go in code; multi-line code,
33
+ diffs, and output in fenced blocks.
34
+ - Bold only what the reader scans for: the decision or warning they must not
35
+ miss, a list item's leading label, the decisive number, the winning option;
36
+ never a sentence or a heading substitute. Headings only for long
37
+ multi-section answers; no emoji or horizontal rules.