mixdog 1.2.6 → 1.3.1

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 (294) hide show
  1. package/LICENSES/simple-icons-CC0-1.0.txt +30 -0
  2. package/NOTICE.md +71 -9
  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/isolated-test-env.mjs +16 -0
  7. package/src/agents/reviewer/AGENT.md +4 -2
  8. package/src/agents/reviewer/agent.json +1 -1
  9. package/src/defaults/shipped-history.json +10 -0
  10. package/src/defaults/skills/browser-use/SKILL.md +5 -0
  11. package/src/defaults/skills/memory-management/SKILL.md +4 -1
  12. package/src/defaults/skills/setup/references/actions.md +14 -4
  13. package/src/defaults/skills/setup-guide/SKILL.md +178 -0
  14. package/src/defaults/skills/setup-guide/model-recommendations.json +333 -0
  15. package/src/lib/rules-builder.cjs +55 -6
  16. package/src/output-styles/common.md +13 -8
  17. package/src/rules/agent/AGENT.md +4 -0
  18. package/src/rules/agent-mode/AGENT_MODE.md +24 -0
  19. package/src/rules/agent-mode/MIXY.md +28 -0
  20. package/src/rules/agent-mode/ROUTINE.md +6 -0
  21. package/src/rules/lead/LEAD.md +7 -3
  22. package/src/rules/shared/70-delivery.md +3 -0
  23. package/src/runtime/agent/orchestrator/agent-runtime/room-supervisor-completion.mjs +86 -0
  24. package/src/runtime/agent/orchestrator/context/deferred-tools.mjs +77 -14
  25. package/src/runtime/agent/orchestrator/context/role-instructions.mjs +241 -14
  26. package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +4 -2
  27. package/src/runtime/agent/orchestrator/mcp/agent-connectors.mjs +216 -0
  28. package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +5 -4
  29. package/src/runtime/agent/orchestrator/mcp/client-transport.mjs +10 -1
  30. package/src/runtime/agent/orchestrator/mcp/client.mjs +115 -11
  31. package/src/runtime/agent/orchestrator/mcp/oauth-account.mjs +97 -0
  32. package/src/runtime/agent/orchestrator/mcp/oauth-client.mjs +49 -0
  33. package/src/runtime/agent/orchestrator/mcp/oauth-credentials.mjs +59 -9
  34. package/src/runtime/agent/orchestrator/mcp/oauth-login.mjs +32 -7
  35. package/src/runtime/agent/orchestrator/mcp/oauth-provider.mjs +45 -6
  36. package/src/runtime/agent/orchestrator/mcp/oauth.mjs +195 -6
  37. package/src/runtime/agent/orchestrator/mcp/server-connectors.mjs +17 -0
  38. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
  39. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +1 -0
  40. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-catalog.mjs +7 -2
  41. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-login.mjs +10 -3
  42. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-tokens.mjs +4 -0
  43. package/src/runtime/agent/orchestrator/providers/auto-effort.mjs +7 -8
  44. package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +1 -1
  45. package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +3 -1
  46. package/src/runtime/agent/orchestrator/providers/lib/tool-call-wire-ids.mjs +65 -0
  47. package/src/runtime/agent/orchestrator/providers/openai-compat-retry-profile.mjs +8 -2
  48. package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +9 -2
  49. package/src/runtime/agent/orchestrator/providers/openai-error-contract.mjs +17 -12
  50. package/src/runtime/agent/orchestrator/providers/openai-oauth-tokens.mjs +10 -0
  51. package/src/runtime/agent/orchestrator/providers/openai-responses-input.mjs +3 -1
  52. package/src/runtime/agent/orchestrator/providers/provider-error-kind.mjs +14 -2
  53. package/src/runtime/agent/orchestrator/providers/retry-executor.mjs +17 -0
  54. package/src/runtime/agent/orchestrator/runtime-core/ask-user-tool-defs.mjs +96 -1
  55. package/src/runtime/agent/orchestrator/runtime-core/context-status-shape.mjs +4 -0
  56. package/src/runtime/agent/orchestrator/runtime-core/extension-scopes.mjs +6 -4
  57. package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +14 -0
  58. package/src/runtime/agent/orchestrator/runtime-core/plugin-mcp.mjs +1 -0
  59. package/src/runtime/agent/orchestrator/runtime-core/tool-bridge.mjs +12 -6
  60. package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +32 -5
  61. package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +21 -5
  62. package/src/runtime/agent/orchestrator/runtime-core/workflow/agents.mjs +40 -7
  63. package/src/runtime/agent/orchestrator/runtime-core/workflow/context.mjs +52 -20
  64. package/src/runtime/agent/orchestrator/runtime-core/workflow-ids.mjs +2 -0
  65. package/src/runtime/agent/orchestrator/session/agent-home.d.mts +4 -0
  66. package/src/runtime/agent/orchestrator/session/agent-home.mjs +33 -0
  67. package/src/runtime/agent/orchestrator/session/agent-mode.mjs +62 -0
  68. package/src/runtime/agent/orchestrator/session/agent-room-supervisor.d.mts +31 -0
  69. package/src/runtime/agent/orchestrator/session/agent-room-supervisor.mjs +241 -0
  70. package/src/runtime/agent/orchestrator/session/agent-room.d.mts +166 -0
  71. package/src/runtime/agent/orchestrator/session/agent-room.mjs +650 -0
  72. package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +7 -1
  73. package/src/runtime/agent/orchestrator/session/compact/user-message-kind.mjs +2 -0
  74. package/src/runtime/agent/orchestrator/session/compaction-archive-capture.mjs +6 -2
  75. package/src/runtime/agent/orchestrator/session/human-gate/gate.mjs +192 -0
  76. package/src/runtime/agent/orchestrator/session/human-gate/held-message.mjs +95 -0
  77. package/src/runtime/agent/orchestrator/session/human-gate/outbound-policy.mjs +221 -0
  78. package/src/runtime/agent/orchestrator/session/human-gate/requests.mjs +195 -0
  79. package/src/runtime/agent/orchestrator/session/human-gate/store.mjs +167 -0
  80. package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +3 -1
  81. package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +9 -0
  82. package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +10 -0
  83. package/src/runtime/agent/orchestrator/session/loop/route-fallback.mjs +108 -6
  84. package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +10 -1
  85. package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +74 -15
  86. package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +9 -1
  87. package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +5 -4
  88. package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +13 -3
  89. package/src/runtime/agent/orchestrator/session/loop/usage.mjs +49 -0
  90. package/src/runtime/agent/orchestrator/session/manager/ask-turn-commit.mjs +18 -8
  91. package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +1 -0
  92. package/src/runtime/agent/orchestrator/session/manager/ask-turn-loop-options.mjs +3 -1
  93. package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +6 -0
  94. package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +2 -0
  95. package/src/runtime/agent/orchestrator/session/manager/pending-lifecycle-epoch.mjs +0 -8
  96. package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +44 -16
  97. package/src/runtime/agent/orchestrator/session/manager/provider-replay.mjs +50 -0
  98. package/src/runtime/agent/orchestrator/session/manager/rules-cache.mjs +22 -5
  99. package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +39 -4
  100. package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +33 -24
  101. package/src/runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs +58 -8
  102. package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +16 -0
  103. package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +3 -2
  104. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint.mjs +7 -1
  105. package/src/runtime/agent/orchestrator/session/manager/usage-metrics.mjs +6 -0
  106. package/src/runtime/agent/orchestrator/session/manager/workflow-switch-notice.mjs +58 -0
  107. package/src/runtime/agent/orchestrator/session/mixy-name.mjs +27 -0
  108. package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +32 -5
  109. package/src/runtime/agent/orchestrator/session/routine-result.d.mts +86 -0
  110. package/src/runtime/agent/orchestrator/session/routine-result.mjs +329 -0
  111. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-row.mjs +8 -0
  112. package/src/runtime/agent/orchestrator/session/store-record-strict-scan.mjs +28 -9
  113. package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +16 -2
  114. package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +44 -12
  115. package/src/runtime/agent/orchestrator/session/store-summary-last-message.mjs +46 -0
  116. package/src/runtime/agent/orchestrator/session/store-summary-visibility.mjs +0 -4
  117. package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +58 -10
  118. package/src/runtime/agent/orchestrator/session/transcript-restore/user-text.mjs +92 -15
  119. package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +12 -0
  120. package/src/runtime/agent/orchestrator/tools/builtin/native-search-client.mjs +113 -5
  121. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +4 -0
  122. package/src/runtime/agent/orchestrator/tools/lib/shell-descendants.mjs +25 -1
  123. package/src/runtime/agent/orchestrator/tools/lib/shell-run-background/promote-job.mjs +8 -0
  124. package/src/runtime/agent/orchestrator/tools/lib/shell-run-settle.mjs +6 -0
  125. package/src/runtime/agent/orchestrator/tools/lib/shell-run-state.mjs +3 -0
  126. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +75 -57
  127. package/src/runtime/attachments/store.mjs +6 -0
  128. package/src/runtime/browser-bridge/client.mjs +24 -0
  129. package/src/runtime/channels/lib/scheduler.mjs +40 -12
  130. package/src/runtime/channels/lib/schedules-db.mjs +71 -12
  131. package/src/runtime/channels/lib/webhook/session-dispatch.mjs +36 -16
  132. package/src/runtime/channels/lib/webhook.mjs +0 -1
  133. package/src/runtime/channels/lib/webhooks-db.mjs +100 -10
  134. package/src/runtime/channels/lib/worker-main.mjs +17 -20
  135. package/src/runtime/computer-bridge/client.mjs +28 -1
  136. package/src/runtime/connectors/gmail-app-password.mjs +690 -0
  137. package/src/runtime/connectors/google-mcp.mjs +446 -0
  138. package/src/runtime/effort-judge/judge-client.mjs +1 -1
  139. package/src/runtime/effort-judge/model-manifest.json +7 -7
  140. package/src/runtime/memory/lib/core-memory-access.mjs +69 -0
  141. package/src/runtime/memory/lib/core-memory-file.mjs +16 -8
  142. package/src/runtime/memory/lib/core-memory-index.mjs +15 -9
  143. package/src/runtime/memory/lib/core-memory-management.mjs +10 -4
  144. package/src/runtime/memory/lib/core-memory-store.mjs +53 -30
  145. package/src/runtime/memory/lib/core-memory-uniqueness.mjs +10 -6
  146. package/src/runtime/memory/lib/http-router/session-routes.mjs +3 -2
  147. package/src/runtime/memory/lib/memory-action-handlers/core-actions.mjs +44 -14
  148. package/src/runtime/memory/lib/memory-schema/core-and-meta.mjs +11 -0
  149. package/src/runtime/memory/lib/memory.mjs +7 -1
  150. package/src/runtime/memory/lib/query-core-recall.mjs +9 -1
  151. package/src/runtime/memory/lib/query-hybrid-search.mjs +2 -0
  152. package/src/runtime/memory/lib/tool-call-handler.mjs +2 -0
  153. package/src/runtime/memory/tool-defs.mjs +5 -0
  154. package/src/runtime/shared/agent-avatar-sprites.mjs +445 -0
  155. package/src/runtime/shared/agent-avatar.d.mts +64 -0
  156. package/src/runtime/shared/agent-avatar.mjs +320 -0
  157. package/src/runtime/shared/agent-kind.mjs +152 -0
  158. package/src/runtime/shared/agent-route-config.d.mts +4 -0
  159. package/src/runtime/shared/agent-route-config.mjs +30 -0
  160. package/src/runtime/shared/agent-store.mjs +132 -0
  161. package/src/runtime/shared/atomic-file.mjs +14 -1
  162. package/src/runtime/shared/bot-split-migration.mjs +457 -0
  163. package/src/runtime/shared/config-patch.mjs +20 -1
  164. package/src/runtime/shared/config.mjs +8 -1
  165. package/src/runtime/shared/connector-accounts.mjs +15 -0
  166. package/src/runtime/shared/connector-catalog.d.mts +51 -0
  167. package/src/runtime/shared/connector-catalog.mjs +228 -0
  168. package/src/runtime/shared/connector-triggers.d.mts +3 -0
  169. package/src/runtime/shared/connector-triggers.mjs +45 -0
  170. package/src/runtime/shared/err-text.mjs +3 -1
  171. package/src/runtime/shared/error-presentation.mjs +91 -6
  172. package/src/runtime/shared/google-oauth-client.mjs +24 -0
  173. package/src/runtime/shared/handoff-artifacts.d.mts +20 -0
  174. package/src/runtime/shared/handoff-artifacts.mjs +61 -0
  175. package/src/runtime/shared/held-request-host.d.mts +12 -0
  176. package/src/runtime/shared/held-request-host.mjs +71 -0
  177. package/src/runtime/shared/llm/provider-model-identities.mjs +6 -1
  178. package/src/runtime/shared/llm/usage-accounting.mjs +7 -1
  179. package/src/runtime/shared/model-route-fallback.mjs +79 -7
  180. package/src/runtime/shared/plain-preview.d.mts +1 -0
  181. package/src/runtime/shared/plain-preview.mjs +33 -0
  182. package/src/runtime/shared/routine-limits.d.mts +11 -0
  183. package/src/runtime/shared/routine-limits.mjs +21 -0
  184. package/src/runtime/shared/routine-trigger.d.mts +10 -0
  185. package/src/runtime/shared/routine-trigger.mjs +44 -0
  186. package/src/runtime/shared/schedule-model-ref.mjs +9 -10
  187. package/src/runtime/shared/sensitive-path-rules.d.mts +15 -0
  188. package/src/runtime/shared/sensitive-path-rules.mjs +256 -0
  189. package/src/runtime/shared/slow-span.mjs +4 -12
  190. package/src/runtime/shared/statusline/statusline-segments.mjs +13 -1
  191. package/src/runtime/shared/transcript-metadata.mjs +10 -0
  192. package/src/runtime/shared/turn-changes.mjs +0 -8
  193. package/src/runtime/shared/usage-readout-totals.mjs +58 -0
  194. package/src/runtime/shared/user-data-guard.mjs +119 -38
  195. package/src/session-runtime/agent-home-delivery.mjs +826 -0
  196. package/src/session-runtime/agent-profile-changes.mjs +21 -0
  197. package/src/session-runtime/agent-room-delivery.mjs +133 -0
  198. package/src/session-runtime/agent-task-sessions.mjs +460 -0
  199. package/src/session-runtime/boot/apis.mjs +63 -18
  200. package/src/session-runtime/boot/facade.mjs +5 -8
  201. package/src/session-runtime/boot/infrastructure.mjs +28 -17
  202. package/src/session-runtime/boot/providers.mjs +14 -4
  203. package/src/session-runtime/boot/tools.mjs +3 -0
  204. package/src/session-runtime/channel-config-api.mjs +53 -5
  205. package/src/session-runtime/config-lifecycle.mjs +43 -2
  206. package/src/session-runtime/cwd-plugins/core-memory-context.mjs +36 -20
  207. package/src/session-runtime/cwd-plugins/plugin-status.mjs +6 -1
  208. package/src/session-runtime/handoff-attachments.mjs +593 -0
  209. package/src/session-runtime/held-requests.mjs +228 -0
  210. package/src/session-runtime/internal-tool-executor/ask-user-tool.mjs +121 -0
  211. package/src/session-runtime/internal-tool-executor/feature-tools.mjs +5 -1
  212. package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +31 -2
  213. package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +56 -3
  214. package/src/session-runtime/internal-tool-executor.mjs +2 -0
  215. package/src/session-runtime/lifecycle/session-catalog.mjs +9 -0
  216. package/src/session-runtime/lifecycle/session-switch/resume.mjs +4 -0
  217. package/src/session-runtime/lifecycle/shared.mjs +6 -0
  218. package/src/session-runtime/mcp-glue/server-catalog.mjs +8 -0
  219. package/src/session-runtime/mcp-glue/server-input.mjs +3 -0
  220. package/src/session-runtime/mcp-oauth-login.mjs +112 -15
  221. package/src/session-runtime/model-route/route-persist.mjs +2 -2
  222. package/src/session-runtime/model-route/route-tuning.mjs +7 -1
  223. package/src/session-runtime/model-route/set-route.mjs +35 -4
  224. package/src/session-runtime/native-web-search.mjs +2 -2
  225. package/src/session-runtime/new-session-config.mjs +6 -1
  226. package/src/session-runtime/owned-automation-run.mjs +229 -0
  227. package/src/session-runtime/resource-api.mjs +5 -0
  228. package/src/session-runtime/resource-mcp-api.mjs +107 -13
  229. package/src/session-runtime/resource-skills-api.mjs +12 -0
  230. package/src/session-runtime/room-member-gate.mjs +48 -0
  231. package/src/session-runtime/route-resolution.mjs +5 -11
  232. package/src/session-runtime/routine-home-turn.mjs +156 -0
  233. package/src/session-runtime/routine-owner.mjs +48 -0
  234. package/src/session-runtime/schedule-session-run.mjs +30 -64
  235. package/src/session-runtime/services/agent-tool/helpers.mjs +30 -1
  236. package/src/session-runtime/services/agent-tool/send-flow.mjs +11 -3
  237. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-plan.mjs +19 -4
  238. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-prep.mjs +2 -0
  239. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-run.mjs +4 -1
  240. package/src/session-runtime/services/agent-tool/spawn-preset.mjs +5 -8
  241. package/src/session-runtime/services/agent-tool/tool-def.mjs +7 -0
  242. package/src/session-runtime/services/channel-admin.mjs +93 -24
  243. package/src/session-runtime/services/memory-access.mjs +37 -0
  244. package/src/session-runtime/services/provider-admin.mjs +74 -39
  245. package/src/session-runtime/services/schedule-access.mjs +91 -0
  246. package/src/session-runtime/session-create/session-options.mjs +34 -7
  247. package/src/session-runtime/session-hooks.mjs +16 -8
  248. package/src/session-runtime/setup-tool/executor.mjs +79 -6
  249. package/src/session-runtime/setup-tool/extended-actions.mjs +90 -20
  250. package/src/session-runtime/setup-tool/settings-contract.mjs +14 -6
  251. package/src/session-runtime/setup-tool/tool-defs.mjs +8 -0
  252. package/src/session-runtime/skills-api.mjs +16 -1
  253. package/src/session-runtime/tool-policy-refresh.mjs +249 -29
  254. package/src/session-runtime/turn/session-ops.mjs +8 -1
  255. package/src/session-runtime/turn/turn-run/ask-callbacks.mjs +10 -2
  256. package/src/session-runtime/turn/turn-run/turn-prepare.mjs +14 -0
  257. package/src/session-runtime/webhook-session-run.mjs +49 -67
  258. package/src/session-runtime/workflow-agents-api/agent-connectors.mjs +239 -0
  259. package/src/session-runtime/workflow-agents-api/agent-editor.mjs +650 -25
  260. package/src/session-runtime/workflow-agents-api/agent-route.mjs +67 -7
  261. package/src/session-runtime/workflow-agents-api/onboarding.mjs +11 -4
  262. package/src/session-runtime/workflow-agents-api/workflow-packs.mjs +11 -1
  263. package/src/session-runtime/workflow-agents-api.mjs +4 -1
  264. package/src/standalone/daemon-agent-control.mjs +1 -8
  265. package/src/standalone/daemon-session-control.mjs +21 -4
  266. package/src/standalone/daemon.mjs +31 -5
  267. package/src/standalone/session-protocol.mjs +27 -0
  268. package/src/standalone/session-service/agent-tree/agent-turns.mjs +46 -3
  269. package/src/standalone/session-service/agent-tree.mjs +4 -3
  270. package/src/standalone/session-service/session-calls/session-turns.mjs +28 -0
  271. package/src/standalone/session-service.mjs +19 -0
  272. package/src/tui/app/slash-commands.mjs +20 -0
  273. package/src/tui/dist/index.mjs +234 -95
  274. package/src/tui/session/context-state.mjs +6 -1
  275. package/src/tui/session/notice-surface.mjs +34 -4
  276. package/src/tui/session/queue-helpers.mjs +2 -1
  277. package/src/tui/session/session-api/extensions.mjs +4 -0
  278. package/src/tui/session/session-api/intake/submission.mjs +5 -0
  279. package/src/tui/session/session-api/integrations.mjs +8 -0
  280. package/src/tui/session/session-api/lifecycle/session-reset.mjs +13 -3
  281. package/src/tui/session/session-api/lifecycle.mjs +17 -1
  282. package/src/tui/session/session-api/routes.mjs +61 -5
  283. package/src/tui/session/session-flow/drain.mjs +12 -3
  284. package/src/tui/session/session-flow/queue/entry-shape.mjs +2 -1
  285. package/src/tui/session/session-flow/queue/take-entries.mjs +3 -2
  286. package/src/tui/session/session-flow/steering.mjs +58 -24
  287. package/src/tui/session/tool-approval.mjs +26 -5
  288. package/src/tui/session/transcript-intake.mjs +8 -2
  289. package/src/tui/session/transcript-spill.mjs +5 -1
  290. package/src/tui/session/tui-steering-persist.mjs +65 -42
  291. package/src/tui/session/turn-live-call.mjs +64 -0
  292. package/src/tui/session/turn.mjs +34 -8
  293. package/src/session-runtime/automation-agents.mjs +0 -94
  294. package/src/session-runtime/automation-workflow.mjs +0 -59
@@ -0,0 +1,30 @@
1
+ # CC0 1.0 Universal
2
+
3
+ ## Statement of Purpose
4
+
5
+ The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an “owner”) of an original work of authorship and/or a database (each, a “Work”).
6
+
7
+ Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works (“Commons”) that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.
8
+
9
+ For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the “Affirmer”), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.
10
+
11
+ 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights (“Copyright and Related Rights”). Copyright and Related Rights include, but are not limited to, the following:
12
+ 1. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;
13
+ 2. moral rights retained by the original author(s) and/or performer(s);
14
+ 3. publicity and privacy rights pertaining to a person’s image or likeness depicted in a Work;
15
+ 4. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(i), below;
16
+ 5. rights protecting the extraction, dissemination, use and reuse of data in a Work;
17
+ 6. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and
18
+ 7. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.
19
+
20
+ 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer’s Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the “Waiver”). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer’s heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer’s express Statement of Purpose.
21
+
22
+ 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer’s express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer’s Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the “License”). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer’s express Statement of Purpose.
23
+
24
+ 4. Limitations and Disclaimers.
25
+ 1. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.
26
+ 2. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.
27
+ 3. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person’s Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.
28
+ 4. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.
29
+
30
+ For more information, please see <https://creativecommons.org/publicdomain/zero/1.0>.
package/NOTICE.md CHANGED
@@ -20,6 +20,8 @@ Full license texts live in `LICENSES/`:
20
20
  notice referenced by the generated files.
21
21
  - `LICENSES/browser-import-NOTICE.txt` — source and license boundary for the
22
22
  optional GPL Chrome password import sidecar.
23
+ - `LICENSES/simple-icons-CC0-1.0.txt` — the CC0 1.0 dedication of the Simple
24
+ Icons brand marks used for connectors.
23
25
  - Tidy engine license texts listed in the Tidy engines section below.
24
26
 
25
27
  ## MIT
@@ -123,15 +125,75 @@ downloads it from this repository's `effort-judge-v*` GitHub releases, as
123
125
  listed in `src/runtime/effort-judge/model-manifest.json`.
124
126
 
125
127
  Statement of changes (Apache-2.0 section 4(b)): only the text encoder is kept,
126
- reduced to 12 of its layers; a four-level classification head is added and the
127
- model is fine-tuned to rate the reasoning effort a request needs; the weights
128
- are exported to ONNX and quantized to 4 bits. Full license text:
129
- `LICENSES/Apache-2.0.txt`.
130
-
131
- Its training data includes requests from SWE-chat
132
- (<https://huggingface.co/datasets/cfahlgren1/SWE-chat>), made available under
133
- the Open Data Commons Attribution License 1.0, and from DataClaw exports that
134
- their authors published on the Hugging Face Hub under the MIT License.
128
+ reduced to 18 of its layers; a four-level classification head is added and the
129
+ model is fine-tuned to rate the reasoning effort a request or an agent step
130
+ needs; the weights are exported to ONNX and quantized to 4 bits. Full license
131
+ text: `LICENSES/Apache-2.0.txt`.
132
+
133
+ Its training data includes requests and agent steps from SWE-chat
134
+ (<https://huggingface.co/datasets/SALT-NLP/SWE-chat>, Open Data Commons
135
+ Attribution License 1.0); OpenAssistant oasst2
136
+ (<https://huggingface.co/datasets/OpenAssistant/oasst2>, Apache License 2.0);
137
+ DataClaw exports that their authors published on the Hugging Face Hub under the
138
+ MIT License (<https://huggingface.co/datasets/di-zhang-fdu/ShareDataClaw>);
139
+ DevGPT by Tao Xiao, Christoph Treude, Hideaki Hata and Kenichi Matsumoto
140
+ (<https://doi.org/10.5281/zenodo.16392320>, CC BY 4.0); issue texts from the
141
+ SWE-bench training split (<https://github.com/SWE-bench/SWE-bench>, MIT
142
+ License); and agent steps from NVIDIA's SWE-Hero OpenHands trajectories
143
+ (<https://huggingface.co/datasets/nvidia/SWE-Hero-openhands-trajectories>,
144
+ CC BY 4.0).
145
+
146
+ Contains information from WildChat-4.8M
147
+ (<https://huggingface.co/datasets/allenai/WildChat-4.8M>) which is made
148
+ available under the ODC Attribution License
149
+ (<https://opendatacommons.org/licenses/by/1-0/>).
150
+
151
+ Since `effort-judge-v7` it also includes questions from Stack Exchange sites
152
+ (via <https://huggingface.co/datasets/HuggingFaceTB/stackexchange_2025_md>;
153
+ each post is licensed CC BY-SA 2.5, 3.0 or 4.0 by its author, and its URL and
154
+ author are kept with the training item); GitHub issues and pull requests of
155
+ permissively licensed repositories (via
156
+ <https://huggingface.co/datasets/common-pile/github_archive>, with each item's
157
+ repository, URL, license and authors kept); issues and pull requests from
158
+ Nebius SWE-rebench-V2 (<https://huggingface.co/datasets/nebius/SWE-rebench-V2>,
159
+ <https://huggingface.co/datasets/nebius/SWE-rebench-V2-PRs>, CC BY 4.0,
160
+ permissively licensed repositories only); and agent steps from Nebius
161
+ SWE-agent trajectories
162
+ (<https://huggingface.co/datasets/nebius/SWE-agent-trajectories>, CC BY 4.0),
163
+ Nebius SWE-rebench OpenHands trajectories
164
+ (<https://huggingface.co/datasets/nebius/SWE-rebench-openhands-trajectories>,
165
+ CC BY 4.0), Kwai-Klear SWE-smith mini-swe-agent-plus trajectories
166
+ (<https://huggingface.co/datasets/Kwai-Klear/SWE-smith-mini_swe_agent_plus-trajectories-66k>,
167
+ MIT License), SWE-Factory DeepSWE-Agent Kimi-K2 trajectories
168
+ (<https://huggingface.co/datasets/SWE-Factory/DeepSWE-Agent-Kimi-K2-Trajectories-2.8K>,
169
+ MIT License), SWE-Gym OpenHands SFT trajectories
170
+ (<https://huggingface.co/datasets/SWE-Gym/OpenHands-SFT-Trajectories>, MIT
171
+ License), SWE-ZERO-12M trajectories
172
+ (<https://huggingface.co/datasets/AlienKevin/SWE-ZERO-12M-trajectories>, Apache
173
+ License 2.0), SWE-Lego real and synthetic data
174
+ (<https://huggingface.co/datasets/Lego-X/SWE-Lego-Real-Data>,
175
+ <https://huggingface.co/datasets/Lego-X/SWE-Lego-Synthetic-Data>, Apache
176
+ License 2.0) and TIGER-Lab SWE-Next SFT trajectories
177
+ (<https://huggingface.co/datasets/TIGER-Lab/SWE-Next-SFT-Trajectories>, MIT
178
+ License). Each `effort-judge-v*` release lists its files, hashes and
179
+ attributions.
180
+
181
+ ## CC0-1.0
182
+
183
+ ### Simple Icons 16.35.0
184
+
185
+ <https://simpleicons.org> · <https://github.com/simple-icons/simple-icons>
186
+
187
+ The connector brand marks in
188
+ `apps/desktop/src/renderer/connectors-brand-icons.ts` carry Simple Icons path
189
+ data and brand colours unmodified (Airtable, Blender, Confluence, Discord,
190
+ Dropbox, Figma, GitHub, Gmail, Google Calendar, Google Drive, Hugging Face,
191
+ Jira, Linear, Notion, PostgreSQL, Sentry, Stripe, Supabase, Telegram, Trello,
192
+ Unity, Vercel); Unity's mark is drawn in black, as its listed colour is white.
193
+ Simple Icons is dedicated to the public domain under CC0 1.0; each
194
+ mark remains the trademark of its owner and is shown only to name that
195
+ service. Slack is not in Simple Icons and its mark is not openly licensed, so
196
+ it is shown as a letter tile. Full text: `LICENSES/simple-icons-CC0-1.0.txt`.
135
197
 
136
198
  ## GPL-3.0-only
137
199
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mixdog",
3
- "version": "1.2.6",
3
+ "version": "1.3.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Open-source coding agent that matches Codex on Terminal-Bench 2.1 with 63% fewer tokens.",
@@ -60,6 +60,7 @@
60
60
  "prepack": "npm run build:shipped-history && npm run build:tui",
61
61
  "build:shipped-history": "node scripts/build-shipped-history.mjs",
62
62
  "check:shipped-history": "node scripts/build-shipped-history.mjs --check",
63
+ "check:model-recommendations": "node scripts/check-model-recommendations.mjs",
63
64
  "prepublishOnly": "node -e \"if(!process.env.CI){console.error('local npm publish is disabled — run npm run release:patch');process.exit(1)}\"",
64
65
  "start": "node src/cli.mjs",
65
66
  "test": "node scripts/test.mjs",
@@ -165,11 +166,13 @@
165
166
  "chalk": "^5.6.2",
166
167
  "cli-highlight": "^2.1.11",
167
168
  "diff": "^9.0.0",
169
+ "imapflow": "^2.5.7",
168
170
  "ink": "https://github.com/tribgames/mixdog/releases/download/ink-runtime-v7.1.0-mixdog.1/ink-7.1.0.tgz",
169
171
  "jsdom": "^27.0.0",
170
172
  "jszip": "^3.10.1",
171
173
  "marked": "^14.1.4",
172
174
  "node-cron": "^4.5.0",
175
+ "nodemailer": "^10.1.7",
173
176
  "onnxruntime-node": "1.30.0",
174
177
  "openai": "^6.44.0",
175
178
  "pdf-lib": "^1.17.1",
@@ -0,0 +1,89 @@
1
+ // Validates the setup-guide model recommendation list and exits non-zero when
2
+ // it is older than its own staleAfterDays.
3
+ //
4
+ // node scripts/check-model-recommendations.mjs
5
+ import { readFileSync } from 'node:fs';
6
+ import { dirname, join } from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+
9
+ const file = join(
10
+ dirname(fileURLToPath(import.meta.url)),
11
+ '..',
12
+ 'src/defaults/skills/setup-guide/model-recommendations.json'
13
+ );
14
+ const data = JSON.parse(readFileSync(file, 'utf8'));
15
+ const DATE = /^\d{4}-\d{2}-\d{2}$/;
16
+ const errors = [];
17
+ const str = (v) => typeof v === 'string' && v.trim() !== '';
18
+
19
+ if (!DATE.test(data.asOf ?? '')) errors.push('asOf must be YYYY-MM-DD');
20
+ if (!Number.isInteger(data.staleAfterDays) || data.staleAfterDays <= 0) {
21
+ errors.push('staleAfterDays must be a positive integer');
22
+ }
23
+ if (!Array.isArray(data.roles) || data.roles.length === 0) errors.push('roles must be a non-empty array');
24
+ for (const [i, entry] of (Array.isArray(data.roles) ? data.roles : []).entries()) {
25
+ const at = `roles[${i}]`;
26
+ if (!Array.isArray(entry.roles) || entry.roles.length === 0 || !entry.roles.every(str)) {
27
+ errors.push(`${at}.roles must be a non-empty string array`);
28
+ }
29
+ if (entry.preferOtherProviderThan !== undefined) {
30
+ const known = new Set(data.roles.flatMap((r) => r.roles ?? []));
31
+ const list = entry.preferOtherProviderThan;
32
+ if (!Array.isArray(list) || !list.length || !list.every((r) => known.has(r))) {
33
+ errors.push(`${at}.preferOtherProviderThan must list existing role names`);
34
+ }
35
+ }
36
+ if (!Array.isArray(entry.picks) || entry.picks.length === 0) errors.push(`${at}.picks must be non-empty`);
37
+ for (const [j, pick] of (Array.isArray(entry.picks) ? entry.picks : []).entries()) {
38
+ for (const key of ['provider', 'model', 'effort', 'source']) {
39
+ if (!str(pick[key])) errors.push(`${at}.picks[${j}].${key} is required`);
40
+ }
41
+ if (!DATE.test(pick.checkedAt ?? '')) errors.push(`${at}.picks[${j}].checkedAt must be YYYY-MM-DD`);
42
+ if (str(pick.source) && !/^https?:\/\//.test(pick.source)) errors.push(`${at}.picks[${j}].source must be a URL`);
43
+ }
44
+ }
45
+ const MODES = ['none', 'focused', 'balanced', 'swarm'];
46
+ const knownRoles = new Set((Array.isArray(data.roles) ? data.roles : []).flatMap((r) => r.roles ?? []));
47
+ const roleList = (v) => Array.isArray(v) && v.every((r) => knownRoles.has(r));
48
+ const d = data.delegation;
49
+ if (!d || typeof d !== 'object') errors.push('delegation is required');
50
+ else {
51
+ if (!roleList(d.baseRoster) || !d.baseRoster.length) errors.push('delegation.baseRoster must list existing roles');
52
+ const modes = Array.isArray(d.modes) ? d.modes : [];
53
+ if (modes.map((m) => m.mode).join() !== MODES.join())
54
+ errors.push(`delegation.modes must be ${MODES.join(', ')} in order`);
55
+ for (const m of modes) {
56
+ if (!str(m.label) || !roleList(m.agents))
57
+ errors.push(`delegation.modes ${m.mode}: label and existing-role agents required`);
58
+ if (!m.plans || typeof m.plans !== 'object') errors.push(`delegation.modes ${m.mode}: plans required`);
59
+ }
60
+ const lean = d.leanReview;
61
+ if (
62
+ !lean ||
63
+ !roleList(lean.agentsOff) ||
64
+ !roleList(lean.agentsOn) ||
65
+ !lean.fitsModes?.every((x) => MODES.includes(x))
66
+ ) {
67
+ errors.push('delegation.leanReview needs valid fitsModes, agentsOff, agentsOn');
68
+ }
69
+ }
70
+ for (const [i, entry] of (Array.isArray(data.roles) ? data.roles : []).entries()) {
71
+ for (const [j, pick] of (Array.isArray(entry.picks) ? entry.picks : []).entries()) {
72
+ if (pick.plans !== undefined && !(pick.plans && Object.values(pick.plans).every(str))) {
73
+ errors.push(`roles[${i}].picks[${j}].plans must map plan to model string`);
74
+ }
75
+ }
76
+ }
77
+ if (errors.length) {
78
+ console.error(`[model-recommendations] invalid:\n- ${errors.join('\n- ')}`);
79
+ process.exit(1);
80
+ }
81
+
82
+ const ageDays = Math.floor((Date.now() - Date.parse(data.asOf)) / 86_400_000);
83
+ if (ageDays > data.staleAfterDays) {
84
+ console.error(
85
+ `[model-recommendations] stale: asOf ${data.asOf} is ${ageDays} days old (limit ${data.staleAfterDays}). Re-check the picks and update the file.`
86
+ );
87
+ process.exit(1);
88
+ }
89
+ console.log(`[model-recommendations] ok (asOf ${data.asOf}, ${ageDays} days old)`);
@@ -32,6 +32,13 @@ if (failedPreChecks.length) {
32
32
  process.exit(1);
33
33
  }
34
34
 
35
+ // Warning-level: a stale model list never blocks the gate.
36
+ if (
37
+ spawnSync('node scripts/check-model-recommendations.mjs', { cwd: root, stdio: 'inherit', shell: true }).status !== 0
38
+ ) {
39
+ console.warn('[gate:local] warning: model recommendations stale or invalid (not blocking)');
40
+ }
41
+
35
42
  const build = spawnSync('npm run build:spawn:test', { cwd: root, stdio: 'inherit', shell: true });
36
43
  if (build.status !== 0) {
37
44
  console.error('[gate:local] build:spawn:test failed');
@@ -0,0 +1,16 @@
1
+ // Side-effect import for tests that touch Mixdog user data. Import it FIRST (ESM
2
+ // evaluates imports in order) so the data/home dirs resolve to a scratch dir
3
+ // before any module under test reads them, even under plain `node --test` from a
4
+ // shell that exports the signed-in profile's MIXDOG_DATA_DIR.
5
+ import { mkdtempSync, rmSync } from 'node:fs';
6
+ import { tmpdir } from 'node:os';
7
+ import { join } from 'node:path';
8
+
9
+ const root = mkdtempSync(join(tmpdir(), 'mixdog-test-profile-'));
10
+ process.env.MIXDOG_DATA_DIR = join(root, 'data');
11
+ process.env.MIXDOG_HOME = join(root, 'home');
12
+ process.on('exit', () => {
13
+ try {
14
+ rmSync(root, { recursive: true, force: true });
15
+ } catch {}
16
+ });
@@ -1,12 +1,14 @@
1
1
  ---
2
2
  name: Reviewer
3
- description: Use only at the end, as the final independent check of non-trivial work; otherwise Lead's own review suffices.
3
+ description: Use once at the end, as the single final independent check of non-trivial work, never a second full pass over work already reviewed; otherwise Lead's own review suffices.
4
4
  ---
5
5
 
6
6
  Independent final-check review agent.
7
7
 
8
8
  You are called only at the end, after the deliverable is written and the
9
- Lead's own verification has run, before completion is reported.
9
+ Lead's own verification has run, before completion is reported. You run once.
10
+ When the work was already reviewed scope by scope, check the integrated
11
+ result and its highest-risk changes instead of repeating those reviews.
10
12
 
11
13
  Inspect the diff, affected boundaries, existing tests, and stated acceptance
12
14
  criteria with independent judgment. Reuse still-valid passing results; rerun failed or invalidated checks. Actively seek regressions, unsupported assumptions, security
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "id": "reviewer",
3
3
  "name": "Reviewer",
4
- "description": "Use only at the end, as the final independent check of non-trivial work; otherwise Lead's own review suffices.",
4
+ "description": "Use once at the end, as the single final independent check of non-trivial work, never a second full pass over work already reviewed; otherwise Lead's own review suffices.",
5
5
  "entry": "AGENT.md"
6
6
  }
@@ -30,6 +30,7 @@
30
30
  "07643b62440d3eba29b7360b8a33f09f",
31
31
  "0d45f8d9a2a67373462840e8bf930694",
32
32
  "1593af04edd24cdd5f05fe89a7386407",
33
+ "1a8115cec6ae4414f8637b1765948cdd",
33
34
  "25b44b46269490e26ca31c1852925171",
34
35
  "a60ea68f9287d55489e92e5450432f62",
35
36
  "a61cb4557def4e7ed647d4bdacbb72e4",
@@ -115,6 +116,7 @@
115
116
  "8d343d0a406fd5817b7fd98a3ac47010",
116
117
  "a1b73ce404125d3ce0a5762e4a1e1555",
117
118
  "a28fb01bb21ceebbde1bc6c4a02d3db6",
119
+ "c7fdabb946eed7283db656493d95749b",
118
120
  "d40c23517c4803afdac3fc056bb65cda",
119
121
  "db1af5417849abc2f6bb1d1d2b63939f"
120
122
  ],
@@ -175,6 +177,7 @@
175
177
  "browser-use": [
176
178
  "00085086a7649ec6631f5cf0a3bbbf60",
177
179
  "08eee52328524eb032fd14f342742c41",
180
+ "25a6744e7591ea5597abbda008d123fe",
178
181
  "43eeb0b9c5792f08f2223c76846926cb",
179
182
  "4ab5316454013712cedb25d9b75f4e43",
180
183
  "646365a3f7041a3da3d7d7d896a0c3b6",
@@ -280,6 +283,7 @@
280
283
  "bdf26b0f2ac9f3126bfa74ced15a7d73"
281
284
  ],
282
285
  "memory-management": [
286
+ "1533630b81ebace2bc9ece6fda02bb11",
283
287
  "261a34fce0fb0f73abfd1b1e2add3602",
284
288
  "356bf57f7087fe2c40c5dcd99622c3e9",
285
289
  "a8ffffd02f438cdd6005e09cfe6cf42f",
@@ -341,6 +345,7 @@
341
345
  "0d6926aaca2890da9347f15a826546e3",
342
346
  "0f14ba0a3d8b3896b717dc144bbe49a4",
343
347
  "15d86146cfbd58d85adf0c25cf1d683f",
348
+ "18dc665b96ee0ba5a1645180e173b1af",
344
349
  "1c317db86e1ff80a5c4102e09e36f5fb",
345
350
  "242f11864abdef90fa0cc9cb4599a579",
346
351
  "29a347c4d3a2f773fa92c627260301ba",
@@ -365,10 +370,15 @@
365
370
  "e04e6abe9a54e7d07b37f8fc32b5ad30",
366
371
  "e38d606df69865a9cf1cc48386535e8b",
367
372
  "e5ac8ea16905815e36e88d883195a617",
373
+ "e848b92962dee0d4c3d7e3721d2e3294",
368
374
  "e9b89f9193bd9d9c80ba6cf4419e58ff",
369
375
  "feabe973080344c4d52787a96043ab68",
370
376
  "ff18ac1a9f5961925aec27ffb870bae0"
371
377
  ],
378
+ "setup-guide": [
379
+ "633e15b84dbe22f2b578b67cc35853d4",
380
+ "920d5b29ccfe6c88f623cf0892b29285"
381
+ ],
372
382
  "skill-creator": [
373
383
  "020817866da73a69544ba35086bdcd5f",
374
384
  "2f3f44805618783fbcca9a56652a5e91",
@@ -316,9 +316,14 @@ in the page instead of retrying the same `navigate`.
316
316
  - A refused or restricted action stays refused; do not reach the same effect
317
317
  through another page, tool, or `evaluate`.
318
318
  - Tool-side confirmation does not replace the user's approved scope.
319
+ Submitting a form (`submit`, Enter) or clicking a send/post control asks the
320
+ user once in the desktop app; a denial dispatches nothing.
319
321
  `MIXDOG_BROWSER_CONFIRM_ACTIONS` and
320
322
  `MIXDOG_BROWSER_DENY_ACTIONS` optionally name comma-separated public actions
321
323
  (or `*`) the desktop app confirms once or refuses; denial takes precedence.
324
+ - For a password or token, focus the field and call `ask_user` with
325
+ `handoff: { kind: 'secret', surface: 'browser' }`; for sign-in, CAPTCHA or
326
+ 2FA use `kind: 'takeover'` with instructions. Never ask for secrets in chat.
322
327
  - Cookie listings never expose values. Registered secret values remain
323
328
  redacted across redirects. A blocked result is not success; an inconclusive
324
329
  postcondition is not proof.
@@ -32,7 +32,10 @@ as preferences; automatic history already preserves them.
32
32
 
33
33
  Omit `project_id` for the current Project, use `common` for shared memory,
34
34
  or an explicit Project slug for another Project. The `*` scope is read-only.
35
- Confirm the target before destructive changes.
35
+ `agent_id: "self"` selects your own agent memory instead: only you read it,
36
+ and it is the only pool an unattended run (schedule, webhook, group room,
37
+ delegated agent) may write; common and Project memory change only while the
38
+ user is chatting. Confirm the target before destructive changes.
36
39
 
37
40
  Memory indices start at 1 independently in common memory and each Project.
38
41
  Deletion and movement compact the affected scope's indices; new memories
@@ -52,6 +52,7 @@ Read this when choosing a `setup` mutation.
52
52
  | Remove stored provider authentication (one OAuth account at a time) | `forget_provider_auth` |
53
53
  | Select, rename, or reorder OAuth accounts, set the switching policy, or allow paid credits | `set_provider_account` |
54
54
  | Developer options such as risk-gated OAuth providers | `set_developer_option` |
55
+ | Connect a catalog service (Notion, Linear, Gmail, …; not GitHub, which is the GitHub CLI) for the user: shows a one-click connect card | `connect_connector` |
55
56
  | Add an MCP server | `add_mcp_server` |
56
57
  | Edit or rename an MCP server | `save_mcp_server` |
57
58
  | Remove an MCP server | `remove_mcp_server` |
@@ -71,9 +72,10 @@ Read this when choosing a `setup` mutation.
71
72
  | Create a workflow, agent, or machine-global user skill | `create_definition` |
72
73
  | Partially edit a workflow, agent, or machine-global user skill | `save_definition` |
73
74
  | Delete a user workflow/agent definition or override | `delete_definition` |
74
- | Save a schedule/webhook; explicitly overwrite to edit | `save_automation` |
75
+ | Save a schedule/webhook; explicitly overwrite to edit. A new one belongs to the calling thread's agent (Mixy = `lead`); `entry.owner` moves it to another agent | `save_automation` |
75
76
  | Delete an existing schedule/webhook | `delete_automation` |
76
- | Enable/disable a schedule/webhook | `set_automation_enabled` |
77
+ | Enable/disable (pause/resume) a schedule/webhook | `set_automation_enabled` |
78
+ | Run a schedule once now, or re-run a webhook on its latest received payload; the result posts into the owning agent's thread | `run_automation` |
77
79
  | Webhook listener enabled state, port, or domain | `set_webhook_config` |
78
80
  | Desktop keep-awake, run in background after window close, turn-completion notifications, notification volume (Windows), usage pin, usage rail short + long bars, or Computer observe-only state | `set_desktop_settings` |
79
81
  | Desktop theme, display language, side panels, markdown default view, link previews, or tool activity expansion | `set_appearance` |
@@ -110,6 +112,9 @@ workflow` before changing the corresponding domain.
110
112
  `originalName` and `name`. Skill deletion is not exposed; disable it instead.
111
113
  Built-in and plugin skills accept only `toolDependencies` edits (`null`
112
114
  restores their declared dependencies).
115
+ - A created agent is a bot (`definition.kind: "bot"`) or a workflow agent
116
+ (`"agent"`); omitted, the representative bot's chat creates a bot and any other chat a
117
+ workflow agent. The kind is fixed after creation.
113
118
  - Changing orchestration does not rewrite workflow instructions or agents.
114
119
 
115
120
  ## Providers and authentication
@@ -235,6 +240,12 @@ markers are read with `status desktop`.
235
240
  `add_mcp_server`, `save_mcp_server`, and `remove_mcp_server` refuse plugin
236
241
  servers. Declaration problems and naming conflicts are reported as
237
242
  `declarationErrors` and `warnings`.
243
+ - `connect_connector` is how to connect a catalog service the user asks for
244
+ ("Slack 연결해 줘"): it leaves a connect card in the conversation whose
245
+ press runs the browser sign-in (or the key sheet) in Desktop; nothing
246
+ connects until the user presses it, so tell them to press the card and read
247
+ `status mcp` afterwards. `add_mcp_server` with the service URL is not the
248
+ sign-in flow; never use it for a catalog service.
238
249
  - `enable_plugin_mcp` turns every server the plugin declares back on and
239
250
  reconnects them; a disabled plugin stays disabled, and it fails for a plugin
240
251
  that declares no MCP servers.
@@ -248,8 +259,7 @@ markers are read with `status desktop`.
248
259
  - A Project removal unregisters it only.
249
260
  - Inspect schedules/webhooks before editing. `overwrite:true` updates an
250
261
  existing named entry and preserves omitted fields; a new schedule needs
251
- instructions, a `model` (no default-model fallback), and exactly one of cron
252
- `time` or one-shot `at`.
262
+ instructions and exactly one of cron `time` or one-shot `at`.
253
263
  - Attachment contents and webhook signing secrets are not returned by setup.
254
264
  Omitted attachments and existing webhook secrets are preserved. A saved
255
265
  secret is never shown again: tell the user to open the Webhooks panel, edit
@@ -0,0 +1,178 @@
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 bot 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), Notion, Linear or Jira. GitHub is
71
+ not a connector; it is the signed-in GitHub CLI of Git & GitHub. 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 (봇): a contact you chat with in bot mode (봇 모드). 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
+ - Agent mode (에이전트 모드): a coding work session run by Lead and agents.
154
+ A session a bot starts for a job is an agent task session (에이전트 작업
155
+ 세션); others are just sessions (세션).
156
+ - Sessions and projects: an agent-mode session runs in a Project, a folder whose
157
+ instructions and memories it loads.
158
+ - Workflows and work rules: a workflow sets how a request gets done; work
159
+ rules are the instructions it applies.
160
+ - Connectors and extensions: connectors are MCP services such as Notion or
161
+ Linear (`connect_connector`, the user presses the card); extensions are
162
+ plugins that add tools and skills that teach how to work.
163
+ - Group rooms (그룹 대화방): one chat with several bots. `@name` or "봇 부르기"
164
+ addresses one bot; otherwise the Maintainer decides who answers next.
165
+ - Schedules and webhooks: a timed or incoming-event trigger (`save_automation`).
166
+ Each run is one turn in its bot's own chat, with that bot's persona, rules,
167
+ permissions, memory and model. Without a bot they cannot be used.
168
+ - Approval cards: when a tool needs permission it waits in the chat until the
169
+ user approves or declines.
170
+ - Phone remote access: pair a phone under Settings → Connection to follow and
171
+ steer tasks away from the PC.
172
+
173
+ ## Pitfalls
174
+
175
+ - Do not claim a step is done from memory; re-read state after acting.
176
+ - A UI handoff (`open`) is not completion; ask the user to confirm, then
177
+ re-check the status.
178
+ - Do not run several steps in one message or queue the next question early.