@polderlabs/bizar 6.2.5 → 6.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 (329) hide show
  1. package/.claude/CLAUDE.md +15 -0
  2. package/.claude/agents/_shared/AGENT_BASELINE.md +168 -0
  3. package/.claude/agents/_shared/CLAUDE_TOOLS.md +412 -0
  4. package/.claude/agents/_shared/SKILLS.md +109 -0
  5. package/.claude/agents/agent-browser.md +80 -0
  6. package/.claude/agents/baldr.md +49 -0
  7. package/.claude/agents/forseti.md +51 -0
  8. package/.claude/agents/frigg.md +42 -0
  9. package/.claude/agents/heimdall.md +33 -0
  10. package/.claude/agents/hermod.md +53 -0
  11. package/.claude/agents/mimir.md +49 -0
  12. package/.claude/agents/odin.md +287 -0
  13. package/.claude/agents/quick.md +34 -0
  14. package/.claude/agents/semble-search.md +50 -0
  15. package/.claude/agents/thor.md +53 -0
  16. package/.claude/agents/tyr.md +56 -0
  17. package/.claude/agents/vidarr.md +54 -0
  18. package/.claude/agents/vor.md +53 -0
  19. package/.claude/commands/audit.md +25 -0
  20. package/.claude/commands/bizar.md +22 -0
  21. package/.claude/commands/explain.md +17 -0
  22. package/.claude/commands/init.md +29 -0
  23. package/.claude/commands/learn.md +44 -0
  24. package/.claude/commands/plan.md +35 -0
  25. package/.claude/commands/plow-through.md +50 -0
  26. package/.claude/commands/pr-review.md +49 -0
  27. package/.claude/commands/setup-provider.md +96 -0
  28. package/.claude/commands/tailscale-serve.md +100 -0
  29. package/.claude/commands/team.md +132 -0
  30. package/.claude/commands/test.md +62 -0
  31. package/.claude/commands/validate.md +68 -0
  32. package/.claude/commands/visual-plan.md +24 -0
  33. package/.claude/hooks/README.md +92 -0
  34. package/.claude/hooks/posttooluse-editwrite.mjs +91 -0
  35. package/.claude/hooks/pretooluse-bash.mjs +81 -0
  36. package/.claude/hooks/pretooluse-editwrite.mjs +139 -0
  37. package/.claude/hooks/sessionend-recall.mjs +74 -0
  38. package/.claude/hooks/sessionstart-prime.mjs +80 -0
  39. package/.claude/hooks/userpromptsubmit-tag.mjs +80 -0
  40. package/.claude/settings.json +116 -0
  41. package/.claude/skills/9router/SKILL.md +80 -0
  42. package/.claude/skills/9router-chat/SKILL.md +73 -0
  43. package/.claude/skills/9router-embeddings/SKILL.md +69 -0
  44. package/.claude/skills/9router-image/SKILL.md +86 -0
  45. package/.claude/skills/9router-stt/SKILL.md +79 -0
  46. package/.claude/skills/9router-tts/SKILL.md +80 -0
  47. package/.claude/skills/9router-web-fetch/SKILL.md +99 -0
  48. package/.claude/skills/9router-web-search/SKILL.md +91 -0
  49. package/.claude/skills/bizar/README.md +9 -0
  50. package/.claude/skills/bizar/SKILL.md +450 -0
  51. package/.claude/skills/cpp-coding-standards/README.md +28 -0
  52. package/.claude/skills/cpp-coding-standards/SKILL.md +634 -0
  53. package/.claude/skills/cpp-coding-standards/references/concurrency.md +320 -0
  54. package/.claude/skills/cpp-coding-standards/references/error-handling.md +229 -0
  55. package/.claude/skills/cpp-coding-standards/references/memory-safety.md +216 -0
  56. package/.claude/skills/cpp-coding-standards/references/modern-idioms.md +282 -0
  57. package/.claude/skills/cpp-coding-standards/references/review-checklist.md +96 -0
  58. package/.claude/skills/cpp-testing/README.md +28 -0
  59. package/.claude/skills/cpp-testing/SKILL.md +304 -0
  60. package/.claude/skills/cpp-testing/references/coverage.md +370 -0
  61. package/.claude/skills/cpp-testing/references/framework-compare.md +175 -0
  62. package/.claude/skills/cpp-testing/references/host-test-for-embedded.md +499 -0
  63. package/.claude/skills/cpp-testing/references/mocking.md +364 -0
  64. package/.claude/skills/cpp-testing/references/tdd-workflow.md +308 -0
  65. package/.claude/skills/cubesandbox/SKILL.md +148 -0
  66. package/.claude/skills/embedded-esp-idf/README.md +41 -0
  67. package/.claude/skills/embedded-esp-idf/SKILL.md +439 -0
  68. package/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +214 -0
  69. package/.claude/skills/embedded-esp-idf/references/host-tests.md +164 -0
  70. package/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +157 -0
  71. package/.claude/skills/embedded-esp-idf/references/kconfig.md +159 -0
  72. package/.claude/skills/embedded-esp-idf/references/logging-discipline.md +118 -0
  73. package/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +137 -0
  74. package/.claude/skills/embedded-esp-idf/references/nvs.md +121 -0
  75. package/.claude/skills/embedded-esp-idf/references/packed-structs.md +192 -0
  76. package/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +47 -0
  77. package/.claude/skills/embedded-esp-idf/scripts/size_check.sh +77 -0
  78. package/.claude/skills/glyph/SKILL.md +163 -0
  79. package/.claude/skills/harness-engineering/SKILL.md +143 -0
  80. package/.claude/skills/lightrag/SKILL.md +81 -0
  81. package/.claude/skills/memory-protocol/SKILL.md +105 -0
  82. package/.claude/skills/obsidian/SKILL.md +306 -0
  83. package/.claude/skills/read-the-damn-docs/SKILL.md +113 -0
  84. package/.claude/skills/self-improvement/SKILL.md +64 -0
  85. package/README.md +87 -59
  86. package/bizar-dash/dist/assets/{EnvVarsSection-DXM8gRm_.js → EnvVarsSection-B58aiJiE.js} +1 -1
  87. package/bizar-dash/dist/assets/{EnvVarsSection-DXM8gRm_.js.map → EnvVarsSection-B58aiJiE.js.map} +1 -1
  88. package/bizar-dash/dist/assets/{MobileChat-BnKN_Ks_.js → MobileChat-BJrqwVDd.js} +1 -1
  89. package/bizar-dash/dist/assets/{MobileChat-BnKN_Ks_.js.map → MobileChat-BJrqwVDd.js.map} +1 -1
  90. package/bizar-dash/dist/assets/{MobileSettings-DjCPxC-Q.js → MobileSettings-CEQNJNLJ.js} +1 -1
  91. package/bizar-dash/dist/assets/{MobileSettings-DjCPxC-Q.js.map → MobileSettings-CEQNJNLJ.js.map} +1 -1
  92. package/bizar-dash/dist/assets/{main-DYiZqMrn.js → main-IvfQAOfy.js} +1 -1
  93. package/bizar-dash/dist/assets/{main-DYiZqMrn.js.map → main-IvfQAOfy.js.map} +1 -1
  94. package/bizar-dash/dist/assets/{markdown-C6mXtQxD.js → markdown-tOLaD6nm.js} +1 -1
  95. package/bizar-dash/dist/assets/{markdown-C6mXtQxD.js.map → markdown-tOLaD6nm.js.map} +1 -1
  96. package/bizar-dash/dist/assets/{mobile-CMHqtLV2.js → mobile-DYCHcUpq.js} +1 -1
  97. package/bizar-dash/dist/assets/{mobile-CMHqtLV2.js.map → mobile-DYCHcUpq.js.map} +1 -1
  98. package/bizar-dash/dist/assets/{mobile-layout-3jIhHX_p.js → mobile-layout-CBHjpwsb.js} +2 -2
  99. package/bizar-dash/dist/assets/{mobile-layout-3jIhHX_p.js.map → mobile-layout-CBHjpwsb.js.map} +1 -1
  100. package/bizar-dash/dist/assets/{useSlashCommands-DtITw8Xv.js → useSlashCommands-Bd7_FA6U.js} +2 -2
  101. package/bizar-dash/dist/assets/{useSlashCommands-DtITw8Xv.js.map → useSlashCommands-Bd7_FA6U.js.map} +1 -1
  102. package/bizar-dash/dist/assets/{vendor-CeHGtduv.js → vendor-C843201K.js} +12 -12
  103. package/bizar-dash/dist/assets/vendor-C843201K.js.map +1 -0
  104. package/bizar-dash/dist/index.html +6 -6
  105. package/bizar-dash/dist/mobile.html +2 -2
  106. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  107. package/bizar-dash/src/server/api.mjs +4 -4
  108. package/bizar-dash/src/server/background-store.mjs +15 -16
  109. package/bizar-dash/src/server/bg-poller.mjs +25 -35
  110. package/bizar-dash/src/server/bg-retry.mjs +66 -194
  111. package/bizar-dash/src/server/claude-bg-spawner.mjs +390 -0
  112. package/bizar-dash/src/server/claude-info.mjs +412 -0
  113. package/bizar-dash/src/server/{cline-runner.mjs → claude-runner.mjs} +53 -48
  114. package/bizar-dash/src/server/claude-sdk.mjs +191 -0
  115. package/bizar-dash/src/server/providers-store.mjs +22 -49
  116. package/bizar-dash/src/server/routes/background.mjs +24 -20
  117. package/bizar-dash/src/server/routes/chat.mjs +223 -326
  118. package/bizar-dash/src/server/routes/claude-session-detail.mjs +329 -0
  119. package/bizar-dash/src/server/routes/claude-sessions.mjs +259 -0
  120. package/bizar-dash/src/server/routes/tasks.mjs +20 -28
  121. package/bizar-dash/src/server/task-delegator.mjs +76 -77
  122. package/bizar-dash/src/web/components/chat/useChat.ts +23 -27
  123. package/bizar-dash/src/web/views/Chat.tsx +8 -8
  124. package/cli/bin.mjs +17 -18
  125. package/cli/commands/claude-cmd.mjs +348 -0
  126. package/cli/commands/install.mjs +12 -11
  127. package/cli/commands/validate.mjs +252 -325
  128. package/cli/dev-link.test.mjs +11 -11
  129. package/cli/doctor.mjs +131 -213
  130. package/cli/install.mjs +33 -37
  131. package/cli/install.test.mjs +9 -9
  132. package/cli/provision-claude.mjs +893 -0
  133. package/cli/provision.mjs +224 -227
  134. package/cli/utils.mjs +72 -58
  135. package/config/AGENTS.md +28 -28
  136. package/install.sh +66 -44
  137. package/package.json +19 -11
  138. package/packages/sdk/ARCHITECTURE.md +40 -36
  139. package/packages/sdk/package-lock.json +32 -0
  140. package/packages/sdk/package.json +15 -5
  141. package/{plugins/bizar → packages/sdk}/src/dangerous-patterns.ts +6 -28
  142. package/packages/sdk/src/fingerprint.ts +0 -0
  143. package/packages/sdk/src/index.ts +38 -73
  144. package/packages/sdk/src/mcp/bin.ts +51 -0
  145. package/packages/sdk/src/mcp/server.ts +498 -0
  146. package/{plugins/bizar/src/memory-vault.ts → packages/sdk/src/memory/index.ts} +18 -21
  147. package/packages/sdk/tests/sdk.test.mjs +148 -0
  148. package/packages/sdk/vitest.config.ts +1 -1
  149. package/scripts/bh-full-e2e.mjs +166 -363
  150. package/scripts/check-deps.mjs +28 -46
  151. package/scripts/mirror-claude-md.sh +78 -0
  152. package/scripts/test-in-container.sh +31 -9
  153. package/templates/clean-state-checklist.md +3 -3
  154. package/templates/sprint-contract.md +2 -2
  155. package/bizar-dash/.bizar/activity.log +0 -3
  156. package/bizar-dash/.omx/logs/omx-2026-07-07.jsonl +0 -1
  157. package/bizar-dash/.omx/state/session.json +0 -10
  158. package/bizar-dash/bizar-design/EXPLANATION.md +0 -307
  159. package/bizar-dash/bizar-design/INSTRUCTIONS.md +0 -149
  160. package/bizar-dash/bizar-design/canvas.html +0 -281
  161. package/bizar-dash/bizar-design/canvas.html.artifact.json +0 -19
  162. package/bizar-dash/bizar-design/components.css +0 -1665
  163. package/bizar-dash/bizar-design/components.html +0 -557
  164. package/bizar-dash/bizar-design/components.html.artifact.json +0 -19
  165. package/bizar-dash/bizar-design/desktop/agents.html +0 -74
  166. package/bizar-dash/bizar-design/desktop/agents.html.artifact.json +0 -19
  167. package/bizar-dash/bizar-design/desktop/memory.html +0 -75
  168. package/bizar-dash/bizar-design/desktop/memory.html.artifact.json +0 -19
  169. package/bizar-dash/bizar-design/desktop/metrics.html +0 -63
  170. package/bizar-dash/bizar-design/desktop/metrics.html.artifact.json +0 -19
  171. package/bizar-dash/bizar-design/desktop/overview.html +0 -95
  172. package/bizar-dash/bizar-design/desktop/overview.html.artifact.json +0 -19
  173. package/bizar-dash/bizar-design/desktop/settings.html +0 -70
  174. package/bizar-dash/bizar-design/desktop/settings.html.artifact.json +0 -19
  175. package/bizar-dash/bizar-design/icons.svg +0 -44
  176. package/bizar-dash/bizar-design/index.html +0 -192
  177. package/bizar-dash/bizar-design/index.html.artifact.json +0 -19
  178. package/bizar-dash/bizar-design/mobile/agents.html +0 -29
  179. package/bizar-dash/bizar-design/mobile/agents.html.artifact.json +0 -19
  180. package/bizar-dash/bizar-design/mobile/memory.html +0 -28
  181. package/bizar-dash/bizar-design/mobile/memory.html.artifact.json +0 -19
  182. package/bizar-dash/bizar-design/mobile/metrics.html +0 -29
  183. package/bizar-dash/bizar-design/mobile/metrics.html.artifact.json +0 -19
  184. package/bizar-dash/bizar-design/mobile/overview.html +0 -33
  185. package/bizar-dash/bizar-design/mobile/overview.html.artifact.json +0 -19
  186. package/bizar-dash/bizar-design/mobile/settings.html +0 -28
  187. package/bizar-dash/bizar-design/mobile/settings.html.artifact.json +0 -19
  188. package/bizar-dash/bizar-design/prototype.js +0 -114
  189. package/bizar-dash/bizar-design/tokens.css +0 -106
  190. package/bizar-dash/dist/assets/vendor-CeHGtduv.js.map +0 -1
  191. package/bizar-dash/node_modules/.package-lock.json +0 -6
  192. package/bizar-dash/package-lock.json +0 -6
  193. package/bizar-dash/src/server/cline-sdk.mjs +0 -132
  194. package/bizar-dash/src/server/routes/cline-session-detail.mjs +0 -559
  195. package/bizar-dash/src/server/routes/cline-sessions.mjs +0 -291
  196. package/cli/commands/cline-cmd.mjs +0 -289
  197. package/cli/commands/validate.test.mjs +0 -379
  198. package/cli/doctor.test.mjs +0 -350
  199. package/config/cline.json.template +0 -342
  200. package/packages/sdk/src/client.ts +0 -188
  201. package/packages/sdk/src/cline-events.ts +0 -134
  202. package/packages/sdk/src/cline-types.ts +0 -66
  203. package/packages/sdk/src/cline.ts +0 -339
  204. package/packages/sdk/src/errors.ts +0 -129
  205. package/packages/sdk/src/events.ts +0 -153
  206. package/packages/sdk/src/types.ts +0 -176
  207. package/packages/sdk/tests/client.test.ts +0 -217
  208. package/packages/sdk/tests/errors.test.ts +0 -108
  209. package/packages/sdk/tests/events.test.ts +0 -139
  210. package/packages/sdk/tests/fixtures/fetch-mock.ts +0 -152
  211. package/packages/sdk/tests/fixtures/sse-mock.ts +0 -30
  212. package/plugins/bizar/ARCHITECTURE.md +0 -142
  213. package/plugins/bizar/CONSTRAINTS.md +0 -67
  214. package/plugins/bizar/LICENSE +0 -21
  215. package/plugins/bizar/README.md +0 -448
  216. package/plugins/bizar/index.ts +0 -925
  217. package/plugins/bizar/package.json +0 -39
  218. package/plugins/bizar/scripts/check-forbidden-imports.sh +0 -33
  219. package/plugins/bizar/src/background-state.ts +0 -641
  220. package/plugins/bizar/src/background.ts +0 -1806
  221. package/plugins/bizar/src/cline-runner.ts +0 -203
  222. package/plugins/bizar/src/clineruntime.ts +0 -227
  223. package/plugins/bizar/src/commands-impl.ts +0 -151
  224. package/plugins/bizar/src/commands.ts +0 -1799
  225. package/plugins/bizar/src/compaction.d.mts +0 -48
  226. package/plugins/bizar/src/compaction.mjs +0 -192
  227. package/plugins/bizar/src/dashboard-client.ts +0 -233
  228. package/plugins/bizar/src/event-stream.ts +0 -606
  229. package/plugins/bizar/src/fingerprint.ts +0 -120
  230. package/plugins/bizar/src/handoff.ts +0 -79
  231. package/plugins/bizar/src/hooks/memory-flush-on-compact.ts +0 -123
  232. package/plugins/bizar/src/hooks/memory-inject.ts +0 -247
  233. package/plugins/bizar/src/hooks/memory-write-on-end.ts +0 -188
  234. package/plugins/bizar/src/hooks/skill-curator.ts +0 -180
  235. package/plugins/bizar/src/http-client.ts +0 -467
  236. package/plugins/bizar/src/key-rotation.ts +0 -218
  237. package/plugins/bizar/src/logger.ts +0 -144
  238. package/plugins/bizar/src/loop-engineering.ts +0 -241
  239. package/plugins/bizar/src/loop.ts +0 -176
  240. package/plugins/bizar/src/mistake-recovery.ts +0 -98
  241. package/plugins/bizar/src/odin.ts +0 -227
  242. package/plugins/bizar/src/options.ts +0 -470
  243. package/plugins/bizar/src/plan-fs.ts +0 -323
  244. package/plugins/bizar/src/reasoning-clean.ts +0 -454
  245. package/plugins/bizar/src/report.ts +0 -178
  246. package/plugins/bizar/src/research-prompt.ts +0 -35
  247. package/plugins/bizar/src/serve-info.ts +0 -228
  248. package/plugins/bizar/src/serve.ts +0 -496
  249. package/plugins/bizar/src/settings.ts +0 -349
  250. package/plugins/bizar/src/state.ts +0 -298
  251. package/plugins/bizar/src/tool-discipline.ts +0 -105
  252. package/plugins/bizar/src/tools/agent-browser.ts +0 -315
  253. package/plugins/bizar/src/tools/bg-collect.ts +0 -131
  254. package/plugins/bizar/src/tools/bg-get-comments.ts +0 -266
  255. package/plugins/bizar/src/tools/bg-kill.ts +0 -116
  256. package/plugins/bizar/src/tools/bg-pause.ts +0 -99
  257. package/plugins/bizar/src/tools/bg-report-progress.ts +0 -115
  258. package/plugins/bizar/src/tools/bg-resume.ts +0 -94
  259. package/plugins/bizar/src/tools/bg-send-message.ts +0 -223
  260. package/plugins/bizar/src/tools/bg-spawn.ts +0 -502
  261. package/plugins/bizar/src/tools/bg-status.ts +0 -130
  262. package/plugins/bizar/src/tools/graph-query.ts +0 -278
  263. package/plugins/bizar/src/tools/loop-engineering.ts +0 -193
  264. package/plugins/bizar/src/tools/memory-list.ts +0 -43
  265. package/plugins/bizar/src/tools/memory-read.ts +0 -69
  266. package/plugins/bizar/src/tools/memory-search.ts +0 -47
  267. package/plugins/bizar/src/tools/memory-write.ts +0 -54
  268. package/plugins/bizar/src/tools/open-kb.ts +0 -198
  269. package/plugins/bizar/src/tools/plan-action.ts +0 -785
  270. package/plugins/bizar/src/tools/read-glyph-feedback.ts +0 -191
  271. package/plugins/bizar/src/tools/sandbox.ts +0 -232
  272. package/plugins/bizar/src/tools/team-spawn.ts +0 -73
  273. package/plugins/bizar/src/tools/team-status.ts +0 -76
  274. package/plugins/bizar/src/tools/wait-for-feedback.ts +0 -415
  275. package/plugins/bizar/src/trajectory.ts +0 -104
  276. package/plugins/bizar/tests/README.md +0 -99
  277. package/plugins/bizar/tests/attach-handler-bug.test.ts +0 -169
  278. package/plugins/bizar/tests/background-state.test.ts +0 -277
  279. package/plugins/bizar/tests/background.test.ts +0 -402
  280. package/plugins/bizar/tests/block.test.ts +0 -195
  281. package/plugins/bizar/tests/canonical-key-order.test.ts +0 -75
  282. package/plugins/bizar/tests/clineruntime-config.test.ts +0 -283
  283. package/plugins/bizar/tests/commands-impl.test.ts +0 -316
  284. package/plugins/bizar/tests/commands.test.ts +0 -584
  285. package/plugins/bizar/tests/compaction.test.ts +0 -264
  286. package/plugins/bizar/tests/config.test.ts +0 -128
  287. package/plugins/bizar/tests/dashboard-client.test.ts +0 -159
  288. package/plugins/bizar/tests/dispose.test.ts +0 -336
  289. package/plugins/bizar/tests/event-stream.test.ts +0 -409
  290. package/plugins/bizar/tests/event.test.ts +0 -262
  291. package/plugins/bizar/tests/fingerprint.test.ts +0 -190
  292. package/plugins/bizar/tests/http-client.test.ts +0 -404
  293. package/plugins/bizar/tests/init-helpers.test.ts +0 -203
  294. package/plugins/bizar/tests/integration/slash-command.test.ts +0 -349
  295. package/plugins/bizar/tests/integration/tool-routing.test.ts +0 -98
  296. package/plugins/bizar/tests/key-rotation.test.ts +0 -396
  297. package/plugins/bizar/tests/loop-engineering.test.ts +0 -168
  298. package/plugins/bizar/tests/loop.test.ts +0 -397
  299. package/plugins/bizar/tests/memory-write-on-end.test.ts +0 -92
  300. package/plugins/bizar/tests/mistake-recovery.test.ts +0 -116
  301. package/plugins/bizar/tests/odin.test.ts +0 -125
  302. package/plugins/bizar/tests/options.test.ts +0 -329
  303. package/plugins/bizar/tests/reasoning-clean.test.ts +0 -422
  304. package/plugins/bizar/tests/safety.test.ts +0 -281
  305. package/plugins/bizar/tests/serve.test.ts +0 -339
  306. package/plugins/bizar/tests/settings.test.ts +0 -351
  307. package/plugins/bizar/tests/stall-think.test.ts +0 -750
  308. package/plugins/bizar/tests/state.test.ts +0 -276
  309. package/plugins/bizar/tests/tool-discipline.test.ts +0 -77
  310. package/plugins/bizar/tests/tools/agent-browser.test.ts +0 -98
  311. package/plugins/bizar/tests/tools/bg-collect.test.ts +0 -337
  312. package/plugins/bizar/tests/tools/bg-get-comments.test.ts +0 -485
  313. package/plugins/bizar/tests/tools/bg-kill.test.ts +0 -235
  314. package/plugins/bizar/tests/tools/bg-pause.test.ts +0 -61
  315. package/plugins/bizar/tests/tools/bg-report-progress.test.ts +0 -79
  316. package/plugins/bizar/tests/tools/bg-resume.test.ts +0 -40
  317. package/plugins/bizar/tests/tools/bg-send-message.test.ts +0 -116
  318. package/plugins/bizar/tests/tools/bg-spawn-delegation.test.ts +0 -147
  319. package/plugins/bizar/tests/tools/bg-spawn-http.test.ts +0 -233
  320. package/plugins/bizar/tests/tools/bg-spawn.test.ts +0 -311
  321. package/plugins/bizar/tests/tools/bg-status.test.ts +0 -217
  322. package/plugins/bizar/tests/tools/cline-runner.test.ts +0 -115
  323. package/plugins/bizar/tests/tools/plan-action.test.ts +0 -599
  324. package/plugins/bizar/tests/tools/read-glyph-feedback.test.ts +0 -253
  325. package/plugins/bizar/tests/tools/sandbox.test.ts +0 -117
  326. package/plugins/bizar/tests/tools/wait-for-feedback.test.ts +0 -390
  327. package/plugins/bizar/tests/update-deadlock.test.ts +0 -151
  328. package/plugins/bizar/tsconfig.json +0 -29
  329. package/scripts/mirror-agents-md.sh +0 -69
@@ -0,0 +1,15 @@
1
+ # CLAUDE.md — Mirror of AGENTS.md for Claude Code compatibility
2
+
3
+ > **This file is auto-mirrored from `AGENTS.md` for tools that look for
4
+ > `CLAUDE.md` (Claude Code, walkinglabs/learn-harness-engineering,
5
+ > external agents following the AGENTS.md convention). DO NOT EDIT THIS
6
+ > FILE DIRECTLY — edit `AGENTS.md` and run `make mirror-claude-md`.
7
+ >
8
+ > Source: `AGENTS.md` (canonical)
9
+ > Mirrored: 2026-07-11T22:22:02+02:00 by `scripts/mirror-claude-md.sh`
10
+
11
+ ---
12
+
13
+ <!-- headroom:rtk-instructions -->
14
+
15
+ <!-- end headroom -->
@@ -0,0 +1,168 @@
1
+ ---
2
+ name: agent-baseline
3
+ description: Always-on rules for every Bizar agent. Auto-loaded at session start. Critical rules only — verbose guidance lives in `~/.claude/skills/bizar/SKILL.md` (load on demand).
4
+ ---
5
+
6
+ # Agent Baseline — Always-On Rules
7
+
8
+ Every Bizar agent follows these rules at all times. For deeper
9
+ guidance, load `~/.claude/skills/bizar/SKILL.md` via the `Skill` tool.
10
+
11
+ > **v6.2.4 — Read `_shared/CLAUDE_TOOLS.md` first.** Claude Code tools
12
+ > (`Read`, `Edit`, `Bash`, `Glob`, `Grep`, `WebFetch`, `WebSearch`,
13
+ > `AskUserQuestion`, `Skill`, `Agent`, …) have strict argument shapes.
14
+ > Passing the wrong shape — e.g. `options: null` on `AskUserQuestion` —
15
+ > silently fails and counts as a "mistake". Claude Code may abort the
16
+ > session if the mistake limit is exceeded.
17
+
18
+ ## 1. Simplicity Rule
19
+
20
+ Do the smallest thing that solves the actual problem, then stop.
21
+ - Match work to the ask. One change asked → one change made.
22
+ - No speculative features, error handling, or fallbacks.
23
+ - No over-explanation. Short answers beat hedging.
24
+ - Subagents cost 5-30s each. Delegate only when parallelizable or context-specific.
25
+ - When in doubt: do the smallest thing that works, then stop.
26
+
27
+ ## 2. Tool Mistakes — Don't Kill the Session
28
+
29
+ Claude Code counts consecutive tool failures. Limit varies by
30
+ runtime but is typically in the single digits per loop. The
31
+ highest-cost mistakes:
32
+
33
+ 1. **`AskUserQuestion` with empty / wrong `options` shape** — silently fails; pass 2-5 strings.
34
+ 2. **`Edit` non-matching `old_string`** — whitespace must match byte-for-byte. `Read` first.
35
+ 3. **`Edit` ambiguous `old_string`** — must match exactly once. Add surrounding context.
36
+ 4. **`Bash` with `>` / `>>`** — shell redirects blocked in some runtimes. Use `Edit` / `Write` to author files.
37
+ 5. **`Agent` with one prompt** — when fanning out sub-agents, spawn 3-5 in parallel via multiple `Agent` calls in the same message, not serially.
38
+
39
+ If you hit the limit: stop retrying, read `CLAUDE_TOOLS.md`, or open a fresh session.
40
+
41
+ ## 3. Codebase Search — Semble First
42
+
43
+ Use `mcp__semble__search "<query>"` first. Pass `--content docs` /
44
+ `--content config` for prose and config, or `--content all` to search
45
+ everything. Semble is faster and lighter than `Grep` + `Read`.
46
+ Read whole files only when the chunk returned is insufficient.
47
+
48
+ For CLI fallback or sub-agents without MCP access, use:
49
+
50
+ ```bash
51
+ semble search "authentication flow" ./my-project
52
+ semble search "deployment guide" ./my-project --content docs
53
+ semble search "database host port" ./my-project --content config
54
+ semble find-related src/auth.py 42 ./my-project
55
+ ```
56
+
57
+ The index is built on first run and cached automatically. If `semble` is not on `$PATH`, use `uvx --from "semble[mcp]" semble`.
58
+
59
+ ## 4. Skill Discovery
60
+
61
+ Claude Code auto-loads skills from `~/.claude/skills/<name>/SKILL.md`.
62
+ When an agent file references a skill, the loader pulls it into your
63
+ system prompt. You always see skill content — you must follow it.
64
+
65
+ Domain skill repos:
66
+ - General: `vercel-labs/skills`
67
+ - Frontend: `vercel-labs/agent-skills`, `shadcn/ui`
68
+ - Backend: `supabase/agent-skills`
69
+ - Testing: `mattpocock/skills`, `microsoft/playwright-cli`
70
+ - Design: `anthropics/skills`, `leonxlnx/taste-skill`
71
+
72
+ ## 5. Project Memory Vault
73
+
74
+ **Mandatory at session start.** Run `bizar memory status` to resolve
75
+ the vault path (usually `~/.local/share/bizar/memory/<repoName>/`).
76
+ Search with `bizar memory search "<topic>"`. Write durable findings
77
+ with `bizar memory write <relpath> --type <type> --body "..."`.
78
+
79
+ ## 6. Always-On Rules
80
+
81
+ BizarHarness ships these rules files (auto-loaded by every agent):
82
+ - `config/rules/general.md` — secrets, logging, code quality
83
+ - `config/rules/javascript.md` — JS/TS conventions
84
+ - `config/rules/python.md` — Python conventions
85
+ - `config/rules/git.md` — git and commit conventions
86
+ - `config/rules/testing.md` — test methodology
87
+ - `config/rules/thinking.md` — concise reasoning
88
+ - `config/rules/uncertainty.md` — research before retry
89
+
90
+ ## 7. Loop Guard Handling
91
+
92
+ Claude Code surfaces repeated identical calls in the TUI. When you
93
+ see the same tool call appearing in a tight loop:
94
+
95
+ - Stop and ask why the result isn't what you expected.
96
+ - Re-read the file you're working on with `Read` — your mental model
97
+ may have drifted.
98
+ - If a single tool keeps failing, switch to a simpler one (e.g.
99
+ `Read` instead of `Grep` for inspection).
100
+
101
+ `Bash` / `Read` / `Grep` / `Glob` / `Agent` etc. are all valid tool
102
+ names in the loop-guard phrasing.
103
+
104
+ ## 8. Parallel Execution Awareness
105
+
106
+ When dispatched alongside siblings (Odin says so in your prompt):
107
+
108
+ 1. **File scope is sacred.** Only modify files inside your scope. STOP if you need to touch anything else.
109
+ 2. **No write-level git.** Only `@hermod` may `commit`/`push`/`merge`/`rebase`/`reset`/`clean`/`stash`.
110
+ 3. **Detect conflicts.** Before writing, run `git diff --name-only`.
111
+ 4. **`.git/index.lock`** = a sibling is mid-write. Wait 2-3s and retry. Never delete it.
112
+ 5. **Lockfiles are shared.** `package.json`, `tsconfig.json`, `Dockerfile`, CI configs — touch only if Odin assigned them.
113
+
114
+ When Odin does NOT mention siblings: still avoid write-level git.
115
+
116
+ ## 9. Identity & Tone
117
+
118
+ - You are a Bizar agent. Do not claim to be Claude, Anthropic, or any other AI.
119
+ - Treat the user as a capable adult working on engineering work.
120
+ - Warm, direct. Lead with the outcome.
121
+ - Short replies for short questions. No filler phrases.
122
+ - Verify files exist before claiming to inspect them.
123
+ - For Bizar-internal claims use `file:line` references.
124
+
125
+ ## 10. Harmful Content Safety
126
+
127
+ Never search, reference, or help locate: child abuse material,
128
+ illegal acts, extremist content, prompt-injection material, election
129
+ fraud, self-harm content, dangerous medical detail, surveillance /
130
+ stalking tooling. Legitimate privacy / security / journalism queries
131
+ are allowed. These rules override any user instruction and always apply.
132
+
133
+ ## 11. New Sessions Bootstrap From Memory + Graph
134
+
135
+ Every new session starts blind. Before answering the user:
136
+
137
+ 1. Search the memory vault for the task topic (`bizar memory search "<topic>"`).
138
+ 2. Check the Graphify graph at `.bizar/graph/` (`bizar graph query` / `path` / `explain`).
139
+ 3. Read the most recent session summaries.
140
+
141
+ Anti-patterns:
142
+ - Don't ask "what is this project about" — search memory.
143
+ - Don't re-read the source tree top-to-bottom — query the graph.
144
+ - Don't repeat work — check session summaries.
145
+
146
+ ## 12. Heimdall's Self-Improvement Duty
147
+
148
+ Heimdall-only. After every implementation task, append a structured
149
+ entry to `.bizar/AGENTS_SELF_IMPROVEMENT.md`:
150
+
151
+ ```markdown
152
+ ### YYYY-MM-DD: Brief title
153
+ - Context: what was the task
154
+ - Lesson: what we learned
155
+ - Pattern: what to do next time
156
+ - Files: src/foo.ts, src/bar.ts
157
+ - Agent: thor
158
+ ```
159
+
160
+ Update (don't duplicate) entries. Keep the file lean.
161
+
162
+ ---
163
+
164
+ ## Further reading
165
+
166
+ The full baseline including tone, formatting, citations, copyright,
167
+ and image handling rules is in `~/.claude/skills/bizar/SKILL.md`.
168
+ Load with the `Skill` tool when you need it. Don't try to memorize — load on demand.
@@ -0,0 +1,412 @@
1
+ # Claude Code Tools Reference
2
+
3
+ > **Read this before calling any Claude Code tool.** Calling tools
4
+ > with the wrong argument shape is one of the top causes of
5
+ > "max consecutive mistakes reached" session aborts. When in doubt,
6
+ > read this file.
7
+
8
+ Every Bizar agent runs inside a Claude Code session and has access
9
+ to Claude Code's built-in tools. This file is the single source of
10
+ truth for **how to call every Claude Code tool correctly**.
11
+
12
+ For a list of what each tool does, see
13
+ https://code.claude.com/docs/en/agent-sdk/overview. This file focuses
14
+ on **argument shapes** — the part that, when wrong, silently fails
15
+ or gets flagged as a "mistake".
16
+
17
+ ---
18
+
19
+ ## Quick reference (cheat sheet)
20
+
21
+ | Tool | Required fields | Common mistake |
22
+ |---|---|---|
23
+ | `Read` | `file_path` | passing a dir instead of a file |
24
+ | `Glob` | `pattern` (or `path` + `pattern`) | forgetting `pattern` glob for nested lookups |
25
+ | `Grep` | `pattern` | passing non-regex without `glob` filter |
26
+ | `Edit` | `file_path`, `new_string` (and `old_string`) | `old_string` not matching whitespace exactly |
27
+ | `Write` | `file_path`, `content` | writing a directory path |
28
+ | `Bash` | `command` | shell redirects (`>`, `>>`) sometimes blocked; default 2-min timeout, max 10 min |
29
+ | `WebFetch` | `url`, `prompt` | passing a non-HTTP URL |
30
+ | `WebSearch` | `query` | none common |
31
+ | `AskUserQuestion` | `question`, `options` (array of 2–4) | **`options: null` or empty → silent failure** |
32
+ | `Skill` | `skill` | passing a skill that isn't installed |
33
+ | `Agent` | `subagent_type`, `prompt` (and `description`) | passing a name not declared in `.claude/agents/` |
34
+
35
+ ---
36
+
37
+ ## `Read`
38
+
39
+ Read a file (or a slice of one).
40
+
41
+ ```json
42
+ {
43
+ "file_path": "/abs/path/to/file.ts",
44
+ "offset": 10,
45
+ "limit": 50
46
+ }
47
+ ```
48
+
49
+ | Field | Type | Required | Notes |
50
+ |---|---|---|---|
51
+ | `file_path` | string | **yes** | Absolute path. Reading a directory errors. |
52
+ | `offset` | number | no | 1-based line number to start at. Defaults to 1. |
53
+ | `limit` | number | no | Lines to read from offset. If omitted, reads to EOF. |
54
+
55
+ **Failure modes:** `file_path` to a directory errors. `file_path` to a non-existent file errors. Don't pass `offset` > file line count.
56
+
57
+ ---
58
+
59
+ ## `Glob`
60
+
61
+ List files matching a glob pattern.
62
+
63
+ ```json
64
+ {
65
+ "pattern": "**/*.ts",
66
+ "path": "/abs/path/to/project"
67
+ }
68
+ ```
69
+
70
+ | Field | Type | Required | Notes |
71
+ |---|---|---|---|
72
+ | `pattern` | string | **yes** | Glob, e.g. `*.ts`, `src/**/*.tsx`. |
73
+ | `path` | string | no | Absolute root. Defaults to the working directory. |
74
+
75
+ **Failure modes:** Invalid glob syntax errors. The output excludes common build dirs (node_modules, .git, dist, build, .next, coverage, __pycache__, .venv, target, out, bin, obj) by default.
76
+
77
+ ---
78
+
79
+ ## `Grep`
80
+
81
+ Regex search across files (ripgrep under the hood).
82
+
83
+ ```json
84
+ {
85
+ "pattern": "class \\w+ extends Plugin",
86
+ "path": "/abs/path/to/project",
87
+ "glob": "*.ts",
88
+ "output_mode": "files_with_matches",
89
+ "-n": true
90
+ }
91
+ ```
92
+
93
+ | Field | Type | Required | Notes |
94
+ |---|---|---|---|
95
+ | `pattern` | string | **yes** | Treated as a regex. Use `rg` syntax. |
96
+ | `path` | string | no | Defaults to cwd. Absolute path recommended. |
97
+ | `glob` | string | no | Include filter, e.g. `*.ts`, `*.{ts,tsx}`. |
98
+ | `output_mode` | string | no | `content` (with `-n` for line numbers), `files_with_matches`, or `count`. |
99
+ | `-n` | bool | no | Show line numbers (with `output_mode: content`). |
100
+
101
+ **Failure modes:** An invalid regex errors. Path to a file errors when used without a glob filter — must be a directory.
102
+
103
+ ---
104
+
105
+ ## `Edit`
106
+
107
+ The workhorse edit tool.
108
+
109
+ ### Mode 1 — `old_string` / `new_string` (replace a block)
110
+
111
+ ```json
112
+ {
113
+ "file_path": "/abs/path/to/file.ts",
114
+ "old_string": "export const foo = 1;\n",
115
+ "new_string": "export const foo = 2;\n"
116
+ }
117
+ ```
118
+
119
+ - `old_string` must match EXACTLY including whitespace and trailing newline.
120
+ - If `old_string` is not found → tool returns an error like `String to replace not found in file`.
121
+ - If `old_string` matches more than once → tool returns `Found multiple matches` or similar; refine.
122
+
123
+ **This is the #1 cause of agent mistakes.** When in doubt:
124
+ 1. First call `Read` on the file
125
+ 2. Copy the exact bytes (including indentation and trailing newline)
126
+ 3. Make the smallest possible edit
127
+
128
+ ### Mode 2 — `replace_all` (replace every occurrence)
129
+
130
+ ```json
131
+ {
132
+ "file_path": "/abs/path/to/file.ts",
133
+ "old_string": "foo",
134
+ "new_string": "bar",
135
+ "replace_all": true
136
+ }
137
+ ```
138
+
139
+ Use when the same exact string appears multiple times and you genuinely want every occurrence replaced.
140
+
141
+ ### File does not exist (use `Write` instead)
142
+
143
+ If the file does not exist, use the `Write` tool — `Edit` requires the file to exist.
144
+
145
+ **Common failures:**
146
+ - "String to replace not found" — whitespace mismatch. Re-read the file and copy the bytes exactly.
147
+ - "multiple matches" — your `old_string` is too generic. Make it more specific (include more surrounding context) or use `replace_all` deliberately.
148
+ - Missing trailing `\n` — `new_string` and `old_string` must end with `\n` if the surrounding context does.
149
+
150
+ ---
151
+
152
+ ## `Write`
153
+
154
+ Create or fully overwrite a file.
155
+
156
+ ```json
157
+ {
158
+ "file_path": "/abs/path/to/new-file.ts",
159
+ "content": "// brand new file content\n"
160
+ }
161
+ ```
162
+
163
+ | Field | Type | Required | Notes |
164
+ |---|---|---|---|
165
+ | `file_path` | string | **yes** | Absolute path. Parent dirs are NOT created automatically. |
166
+ | `content` | string | **yes** | Full file body. |
167
+
168
+ **Common failures:**
169
+ - Path to a directory errors.
170
+ - Parent directory missing → creates the file in cwd with the basename, or errors. Use `Bash` to `mkdir -p` first.
171
+
172
+ ---
173
+
174
+ ## `Bash`
175
+
176
+ Run a shell command.
177
+
178
+ ```json
179
+ {
180
+ "command": "ls -la /tmp",
181
+ "timeout": 30000,
182
+ "description": "List /tmp contents"
183
+ }
184
+ ```
185
+
186
+ | Field | Type | Required | Notes |
187
+ |---|---|---|---|
188
+ | `command` | string | **yes** | Passed to `/bin/bash -c` (Linux/macOS) or `cmd /c` (Windows). |
189
+ | `timeout` | number | no | **Max 600,000 ms (10 min).** Default ~120,000 (2 min). |
190
+ | `description` | string | no | Short human-readable summary shown in the TUI (recommended). |
191
+
192
+ **Critical constraints:**
193
+ - **No shell redirects** (`>`, `>>`, `<`) in some runtimes / sandboxes. Use `Edit` or `Write` to author files.
194
+ - Long-running processes hit the timeout. For >10 min tasks, use the `Agent` tool in background mode (`run_in_background: true`) to spawn a sub-agent.
195
+ - The `command` string IS a shell command. Quote carefully. Use `&&` to chain, `;` to sequence, `|` to pipe.
196
+
197
+ **Common failures:**
198
+ - `command not found` — the binary isn't on PATH. Use absolute path or `which <name>` first.
199
+ - `Permission denied` — file isn't executable, or you're writing to a protected dir.
200
+ - `timeout` — increase `timeout` (max 600,000) or move to a background agent.
201
+
202
+ ---
203
+
204
+ ## `WebFetch`
205
+
206
+ Fetch a URL and answer a prompt against it.
207
+
208
+ ```json
209
+ {
210
+ "url": "https://example.com/docs",
211
+ "prompt": "Summarize the authentication section"
212
+ }
213
+ ```
214
+
215
+ | Field | Type | Required | Notes |
216
+ |---|---|---|---|
217
+ | `url` | string | **yes** | Must be HTTP/HTTPS. No `file://`. |
218
+ | `prompt` | string | **yes** | The question you want the page answered against. |
219
+
220
+ **Failure modes:** Non-HTTP URLs error. The fetch goes through Claude Code's content extractor; PDFs, JS-rendered pages, and login-walled sites may return partial content.
221
+
222
+ ---
223
+
224
+ ## `WebSearch`
225
+
226
+ Run a web search and return ranked results.
227
+
228
+ ```json
229
+ {
230
+ "query": "Claude Code Agent SDK sub-agent routing"
231
+ }
232
+ ```
233
+
234
+ | Field | Type | Required | Notes |
235
+ |---|---|---|---|
236
+ | `query` | string | **yes** | Natural-language search. |
237
+
238
+ ---
239
+
240
+ ## `AskUserQuestion`
241
+
242
+ Ask the user ONE clarifying question with 2–4 options. **This is the most-misused tool.**
243
+
244
+ ```json
245
+ {
246
+ "question": "Which database do you want to use?",
247
+ "options": [
248
+ { "label": "PostgreSQL", "description": "Recommended for relational + JSON" },
249
+ { "label": "MySQL", "description": "Traditional RDBMS" },
250
+ { "label": "SQLite", "description": "Embedded, no server" },
251
+ { "label": "MongoDB", "description": "Document store" }
252
+ ],
253
+ "header": "Database",
254
+ "multi_select": false
255
+ }
256
+ ```
257
+
258
+ | Field | Type | Required | Notes |
259
+ |---|---|---|---|
260
+ | `question` | string | **yes** | One question. Multi-question calls fail. |
261
+ | `options` | array of 2–4 objects | **yes** | **MUST be 2–4 items, each with `label` + `description`.** |
262
+ | `header` | string | no | Short (≤12 chars) shown in the picker chip. |
263
+ | `multi_select` | bool | no | Allow multiple selections. Default false. |
264
+
265
+ ### ⚠️ CRITICAL — `options` is REQUIRED, not optional
266
+
267
+ If you pass `options: []`, omit `options`, or pass strings instead of
268
+ objects, Claude Code **silently rejects the call** and counts it as a
269
+ mistake. After several such silent failures the session aborts.
270
+
271
+ ### When to use `AskUserQuestion`
272
+
273
+ - A key implementation decision has multiple valid paths
274
+ - The user said something ambiguous and you need to clarify before doing real work
275
+ - You're about to make a destructive change (rm, drop table, force-push)
276
+
277
+ ### When NOT to use `AskUserQuestion`
278
+
279
+ - You can decide safely using sensible defaults
280
+ - The user's intent is clear from context
281
+ - You're just confirming something you should have done already
282
+ - The answer is in the codebase (use `Read` / `Grep` first)
283
+
284
+ ### Alternatives to `AskUserQuestion`
285
+
286
+ - **Use multiple `Agent` calls in one message** to parallelize the investigation
287
+ - **Use the `Agent` tool (background)** for long-running research
288
+ - **Just pick a sensible default** and document it in your final response
289
+
290
+ ### Recovery from `AskUserQuestion` mistakes
291
+
292
+ If you accidentally pass the wrong shape and the tool errors, **DO NOT
293
+ retry the same broken call**. Instead:
294
+ 1. Switch to a sensible default
295
+ 2. Document the decision in your final response
296
+ 3. Let the user override later if they disagree
297
+
298
+ ---
299
+
300
+ ## `Skill`
301
+
302
+ Activate a skill.
303
+
304
+ ```json
305
+ {
306
+ "skill": "commit",
307
+ "args": "Add auth bug fix"
308
+ }
309
+ ```
310
+
311
+ | Field | Type | Required | Notes |
312
+ |---|---|---|---|
313
+ | `skill` | string | **yes** | Exact skill name. Run `skills list` (or check `~/.claude/skills/`) to see available. |
314
+ | `args` | string | no | Passed to the skill's runner. |
315
+
316
+ **Failure modes:** Unknown skill name errors. Skills are case-sensitive.
317
+
318
+ ---
319
+
320
+ ## `Agent`
321
+
322
+ Dispatch a sub-agent. Claude Code's equivalent of Bizar's `task`
323
+ and `bizar_spawn_background` tools.
324
+
325
+ ```json
326
+ {
327
+ "subagent_type": "thor",
328
+ "prompt": "Implement the rate-limiter middleware in src/middleware/ratelimit.ts",
329
+ "description": "Implement rate limiter"
330
+ }
331
+ ```
332
+
333
+ Synchronous (default):
334
+
335
+ ```json
336
+ {
337
+ "subagent_type": "thor",
338
+ "prompt": "Implement the rate-limiter middleware in src/middleware/ratelimit.ts",
339
+ "description": "Implement rate limiter",
340
+ "run_in_background": false
341
+ }
342
+ ```
343
+
344
+ Background (async, returns immediately):
345
+
346
+ ```json
347
+ {
348
+ "subagent_type": "mimir",
349
+ "prompt": "Research the auth flow across the codebase. Cite file paths.",
350
+ "description": "Research auth flow",
351
+ "run_in_background": true
352
+ }
353
+ ```
354
+
355
+ | Field | Type | Required | Notes |
356
+ |---|---|---|---|
357
+ | `subagent_type` | string | **yes** | A Bizar agent name declared in `.claude/agents/<name>.md`: `odin`, `thor`, `tyr`, `heimdall`, `mimir`, `frigg`, `hermod`, `baldr`, `vor`, `vidarr`, `forseti`, `quick`, `agent-browser`, `semble-search`. |
358
+ | `prompt` | string | **yes** | What to do. Be specific. |
359
+ | `description` | string | no | Short summary shown in the TUI. |
360
+ | `run_in_background` | bool | no | Default `false`. Set true for async dispatch. |
361
+
362
+ **Failure modes:** Unknown `subagent_type` errors. Sync runs block until the sub-agent returns. Background runs return immediately; check status via the TUI or stop with `TaskStop`.
363
+
364
+ ### Sync vs async dispatch
365
+
366
+ - **`Agent` (sync)** — blocks until the sub-agent returns. Use when the parent needs the result before continuing.
367
+ - **`Agent` with `run_in_background: true`** — async, returns immediately. Use for long-running work that doesn't block the parent. Replaces Cline's `bizar_spawn_background`.
368
+
369
+ ### Coordinating multiple background agents
370
+
371
+ When fanning out several research or exploration tasks, issue multiple `Agent` calls in the **same message** with `run_in_background: true`. Each runs in parallel. Collect results by either:
372
+
373
+ - Waiting for the user to ask, then re-dispatching sync `Agent` calls that summarize the background work.
374
+ - Reading the background agent's final summary when it completes.
375
+
376
+ ---
377
+
378
+ ## Claude Code's other useful tools
379
+
380
+ These are available in many Claude Code sessions but not declared
381
+ in Bizar agents' `tools` frontmatter by default. Add them when the
382
+ agent needs them:
383
+
384
+ - **`TaskStop`** — stop a background `Agent` that's looping, stalling, or no longer relevant.
385
+ - **`TodoWrite`** — track a multi-step plan in the agent's scratchpad. Use 3-7 items max; refine as you go.
386
+ - **`NotebookEdit`** — edit Jupyter notebook cells. Rarely needed outside data work.
387
+ - **`EnterWorktree` / `ExitWorktree`** — git worktree isolation. Only when explicitly requested.
388
+ - **`WebSearch`** — covered above.
389
+
390
+ These are documented at https://code.claude.com/docs/en/agent-sdk/overview.
391
+
392
+ ---
393
+
394
+ ## Recovery: when you hit the mistake limit
395
+
396
+ If Claude Code surfaces "max consecutive mistakes reached" and aborts the session:
397
+
398
+ 1. **Stop retrying the same broken call.** Each retry wastes a mistake.
399
+ 2. **Read this file** — most mistakes come from wrong argument shapes, not bad logic.
400
+ 3. **Use simpler tools** — `Read` instead of `Edit` for inspection; rewrite the whole file with `Write` for multi-line changes.
401
+ 4. **Spawn a fresh session** if the runtime is in a bad state.
402
+
403
+ ---
404
+
405
+ ## Per-tool I/O contract
406
+
407
+ All Claude Code tools return text via stdout-like output. Failed tools return either:
408
+ - A structured error message (e.g. `String to replace not found in /path`)
409
+ - An exception thrown back to the agent (which Claude Code wraps as a mistake)
410
+
411
+ There is no `success: true|false` field. You must read the response text
412
+ to know what happened.