@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,306 @@
1
+ ---
2
+ name: obsidian
3
+ description: Use the Bizar Memory Service for persistent project knowledge — local Obsidian-compatible Markdown + Git-shared sync. Read vault entries before non-trivial decisions; write after meaningful work. Three layers: Markdown (truth) → Git (collaboration) → LightRAG (derived index, Phase 2). Triggers when memory vaults, vault entries, or shared project knowledge are referenced.
4
+ version: 2
5
+ ---
6
+
7
+ # Bizar Memory Service — Project Knowledge
8
+
9
+ **The Bizar Memory Service is the project's persistent knowledge layer.** It replaces the disabled Hindsight MCP service. Every Bizar project uses the same three-layer architecture; only the backend mode (`local-only` vs `managed`) and the vault location differ.
10
+
11
+ The user has been working on this project — their notes contain the real context, the gotchas, the failed approaches, the preferred patterns. **Read the relevant vault entries before making any non-trivial decision.**
12
+
13
+ ## Quick Start for Agents
14
+
15
+ **First-time setup** (if `.bizar/memory.json` is missing):
16
+ ```bash
17
+ bizar memory setup --remote git@github.com:you/bizar-memory.git
18
+ bizar memory status # confirm vault reachable
19
+ bizar memory doctor # schema + secrets + git state
20
+ ```
21
+
22
+ Memory is accessed via the `bizar memory` CLI — agents have `Bash` access and can invoke it directly.
23
+
24
+ **Find the vault root:**
25
+ ```bash
26
+ bizar memory status
27
+ ```
28
+
29
+ **Search memory:**
30
+ ```bash
31
+ bizar memory search "<query>"
32
+ ```
33
+
34
+ **Read a specific note:**
35
+ ```bash
36
+ # 1. List notes to find the path
37
+ bizar memory list 2>/dev/null || ls ~/.local/share/bizar/memory/bizar-memory/projects/<projectId>/
38
+ # 2. Read the note
39
+ cat ~/.local/share/bizar/memory/bizar-memory/projects/<projectId>/<relpath>
40
+ ```
41
+
42
+ **Write a new note:**
43
+ ```bash
44
+ bizar memory write <relpath> \
45
+ --type <type> \
46
+ --status active \
47
+ --confidence verified \
48
+ --tag <tag1> --tag <tag2> \
49
+ --body "<body text>"
50
+ ```
51
+
52
+ `<relpath>` is relative to the project namespace root (e.g. `decisions/0001-foo.md`). Do NOT include the `projects/<projectId>/` prefix — that double-nests.
53
+
54
+ **Commit and push (if shared vault):**
55
+ ```bash
56
+ bizar memory sync
57
+ ```
58
+
59
+ **Health check:**
60
+ ```bash
61
+ bizar memory doctor
62
+ ```
63
+
64
+ ## The three layers
65
+
66
+ | Layer | Role | Backed by | Write path |
67
+ |---|---|---|---|
68
+ | **Markdown** | Canonical truth | Obsidian-flavoured `.md` files on disk | Author writes here; this is the only layer that is authoritative |
69
+ | **Git** | Collaboration / history | The vault directory is a Git repo (local-only mode keeps it as a local repo with no remote) | The `bizar memory sync` orchestrator runs `git add/commit/push` after a write |
70
+ | **LightRAG** (Phase 2) | Derived search index | A LightRAG server (disabled by default in `memory.json`) | NEVER write here directly — always rebuild from Markdown via `bizar memory reindex` |
71
+
72
+ **Rule of thumb:** if you wanted to "update the project's memory," write Markdown. Git and LightRAG follow.
73
+
74
+ ## Vault location
75
+
76
+ The root of the vault is determined by `.bizar/memory.json` in the active project. Two modes:
77
+
78
+ - **`local-only` (default)** — vault is `.obsidian/` inside this project. Single-machine. Stays out of any cross-project repo. Use this when the project is solo or when the project itself is private.
79
+ - **`managed`** — vault is `~/.local/share/bizar/memory/<repoName>/` (a user-level shared repo). Multiple projects contribute to the same Git repo under per-project namespaces. Use this when you want cross-project search and a single source of truth across all your Bizar projects.
80
+
81
+ `bizar memory status` prints the active mode and resolved paths; `bizar memory doctor` validates the vault is reachable and the Git state is consistent.
82
+
83
+ ## The three namespaces
84
+
85
+ Namespaces live at the vault root. Pick a namespace by deciding the SCOPE of the note, not the project.
86
+
87
+ | Namespace | Path (under vault root) | When to write here |
88
+ |---|---|---|
89
+ | **project** | `projects/<projectId>/` | Anything specific to THIS project — design decisions, postmortems, agent-tuning notes, project-local gotchas, daily logs of what happened in this repo |
90
+ | **global** | `global/bizar/` | Anything that applies to Bizar AS A SYSTEM, regardless of project — agent patterns, model-routing rules, CLI conventions, cross-project gotchas that should reach every project you work on |
91
+ | **user** | `users/<userId>/` | Anything that is purely personal — your preferences, your scratch notes, your "things I keep forgetting" |
92
+
93
+ Resolution rule: **memory root = `~/.local/share/bizar/memory/<repoName>/` (or `.obsidian/`) + the namespace you picked**. The `projectId` is the basename of the project root (e.g. `bizar` for `/path/to/bizar`); the `userId` is the OS username.
94
+
95
+ When in doubt, write to **project**. Promote to **global** only when the pattern repeats across another project; demote to **user** only when it's purely personal preference.
96
+
97
+ ## How to read vault entries
98
+
99
+ ### Via the dashboard REST API (canonical)
100
+
101
+ ```bash
102
+ # List notes under a namespace
103
+ curl -s http://127.0.0.1:4321/api/memory/notes?namespace=projects/bizar | jq
104
+
105
+ # Read a specific note (returns parsed frontmatter + body)
106
+ curl -s http://127.0.0.1:4321/api/memory/notes/projects/bizar/Architecture.md | jq
107
+
108
+ # Full-text search (Markdown content + frontmatter)
109
+ curl -s -X POST http://127.0.0.1:4321/api/memory/search \
110
+ -H 'Content-Type: application/json' \
111
+ -d '{"query":"router ordering","namespace":"projects/bizar"}' | jq
112
+ ```
113
+
114
+ ### Via the CLI
115
+
116
+ ```bash
117
+ bizar memory search "router ordering" # full-text search
118
+ bizar memory status # show mode + paths + git status
119
+ bizar memory doctor # health check
120
+ bizar memory log --tail 20 # recent operations log
121
+ bizar memory conflicts # list notes with status=conflict
122
+ ```
123
+
124
+ ## Operations
125
+
126
+ - **Open in Obsidian**: `/kb` — opens the project vault in Obsidian (resolves
127
+ from .bizar/memory.json; falls back to printing the path if Obsidian isn't
128
+ installed)
129
+
130
+ ### Via direct file read (acceptable for one-off reads)
131
+
132
+ ```bash
133
+ # local-only
134
+ cat .obsidian/projects/<projectId>/Architecture.md
135
+
136
+ # managed
137
+ cat ~/.local/share/bizar/memory/bizar-memory/projects/<projectId>/Architecture.md
138
+ ```
139
+
140
+ Direct reads bypass the dashboard, which is fine for diagnostics. Bypass the dashboard for writes too ONLY in an emergency (CI recovery, hook-driven bots) — always prefer the API for agent-driven writes so the schema, secret scan, and Git sync run.
141
+
142
+ ## How to write vault entries
143
+
144
+ ### Via the dashboard REST API (canonical)
145
+
146
+ ```bash
147
+ # Write or update a note — the API validates schema, scans for secrets, and
148
+ # runs the sync orchestrator (git commit) if memory.json.git.autoCommit is on.
149
+ curl -s -X POST http://127.0.0.1:4321/api/memory/notes \
150
+ -H 'Content-Type: application/json' \
151
+ -d '{
152
+ "path": "projects/bizar/adr/0001-router-ordering.md",
153
+ "namespace": "projects/bizar",
154
+ "frontmatter": {
155
+ "title": "Router ordering: Forseti before Tier 4/5",
156
+ "type": "architecture_decision",
157
+ "status": "active",
158
+ "confidence": "verified",
159
+ "date": "2026-06-29",
160
+ "tags": ["router", "agents"]
161
+ },
162
+ "body": "## Context\n...\n## Decision\n...\n## Consequences\n..."
163
+ }'
164
+
165
+ # LightRAG reindex — NEVER run during a write. Schedule from the
166
+ # orchestrator or run manually after a batch of writes.
167
+ curl -s -X POST http://127.0.0.1:4321/api/memory/reindex \
168
+ -H 'Content-Type: application/json' \
169
+ -d '{"namespace":"projects/bizar"}'
170
+ ```
171
+
172
+ The rich shape (path, namespace, frontmatter, body) is the canonical write. The legacy `/api/obsidian/notes` endpoint accepts the same body wrapped as `{ content: "<frontmatter + body>", path, namespace }` for back-compat.
173
+
174
+ ### Via the CLI
175
+
176
+ ```bash
177
+ bizar memory write "<path>" # opens $EDITOR for the body
178
+ bizar memory sync # git add/commit/push the staged notes
179
+ bizar memory commit -m "adr: 0001 router ordering"
180
+ bizar memory pull # fetch + rebase from configured remote
181
+ bizar memory push # push committed notes to remote
182
+ bizar memory reindex # rebuild LightRAG from Markdown (Phase 2)
183
+ bizar memory conflicts # human review surface for status=conflict
184
+ ```
185
+
186
+ ## When to read
187
+
188
+ - **At the start of every session** — skim the project namespace's index entries (`index/`, `_index.md`, anything tagged `type: project_index`).
189
+ - **Before any non-trivial implementation decision** — search the relevant namespace for prior art.
190
+ - **When you're about to suggest something the user has already tried** — search before recommending.
191
+ - **When the codebase feels like it's working around something you don't understand** — there's probably a vault entry explaining the why.
192
+ - **When you encounter a `// FIXME` or `// HACK` comment** — there's probably a vault entry explaining it.
193
+ - **Before claiming a pattern is "the Bizar way"** — global namespace might say otherwise.
194
+
195
+ ## When to write
196
+
197
+ - **After completing a meaningful piece of work** — what was decided, what was learned, what the consequences were.
198
+ - **On discovering a bug or postmortem** — `type: bug_postmortem` with the root cause, evidence links, and the fix.
199
+ - **When you find a pattern that should be reused** — `type: pattern`, with the rationale and a code snippet.
200
+ - **When the user corrects you** — `type: lesson_learned` with what was wrong, why, and the new rule.
201
+ - **When you make a design decision that should be remembered** — `type: architecture_decision` (the classic ADR format).
202
+ - **When you encode an active rule** that future sessions should follow — `type: active_rule`, and (importantly) also add it to `.bizar/AGENTS_SELF_IMPROVEMENT.md` under "Active Rules" so the orchestrator picks it up before vault lookups.
203
+
204
+ ## Write categories (matches the 11 schema `type` values)
205
+
206
+ | type | Use when |
207
+ |---|---|
208
+ | `architecture_decision` | ADR — context, decision, consequences |
209
+ | `pattern` | Reusable approach with code example |
210
+ | `lesson_learned` | A mistake or surprise the next agent should not repeat |
211
+ | `bug_postmortem` | Root-cause analysis of an actual bug, with evidence |
212
+ | `active_rule` | A standing rule for this project (mirror in `.bizar/AGENTS_SELF_IMPROVEMENT.md`) |
213
+ | `agent_memory` | Per-agent history — what THIS agent learned across sessions |
214
+ | `project_index` | Top-level entry points (`Architecture`, `Conventions`, `Entry-Points`) |
215
+ | `reference` | External API docs, tool notes, library gotchas |
216
+ | `workflow` | Multi-step procedure with prerequisites + steps + verification |
217
+ | `note` | Free-form scratch that doesn't fit another category |
218
+ | `adr` | Alias for `architecture_decision` (kept for legacy writers) |
219
+
220
+ ## Status values (frontmatter `status`)
221
+
222
+ | status | Meaning | When to use |
223
+ |---|---|---|
224
+ | `active` | Current truth | The note still reflects reality |
225
+ | `draft` | Work in progress | Agent is still thinking; do not auto-commit |
226
+ | `superseded` | Replaced by a newer note | **Always link `superseded_by` to the replacement** |
227
+ | `stale` | Probably outdated | Needs human review — the orchestrator tags these after a `--reindex` heuristic |
228
+ | `conflict` | Two versions disagree | **Requires human resolution** — never auto-resolve |
229
+ | `archived` | Kept for history, not searched | Visible only with explicit namespace filter |
230
+
231
+ ## Confidence values (frontmatter `confidence`)
232
+
233
+ | confidence | Meaning | Rule |
234
+ |---|---|---|
235
+ | `verified` | Proven with evidence | Always link the evidence file in the note body (`path:line` citation) |
236
+ | `inferred` | Likely true but unproven | Phrase the body as "appears to be" / "based on X, looks like" |
237
+ | `speculative` | Hypothesis to test | Mark with `type: pattern` and a clear "to verify" section |
238
+
239
+ **Prefer `verified`.** A note with no evidence is a hypothesis at best. The schema rejects writes missing required fields for `architecture_decision` and `lesson_learned`.
240
+
241
+ ## Conflict handling
242
+
243
+ The service NEVER auto-resolves a conflict. When the same path is written from two sources (e.g. local edit + remote pull that doesn't fast-forward), the orchestrator:
244
+
245
+ 1. Renames the incoming version to `<path>.conflict-<timestamp>.md`.
246
+ 2. Sets BOTH versions' `status: conflict`.
247
+ 3. Exits non-zero so the user can review.
248
+ 4. Lists both in `bizar memory conflicts`.
249
+
250
+ Human resolution:
251
+
252
+ 1. Read both versions.
253
+ 2. Decide which is canonical (usually the more recent or more evidence-backed).
254
+ 3. Edit the losing version: `status: superseded`, set `superseded_by: <winning-path>`, add a `## Why this was superseded` section.
255
+ 4. `bizar memory sync` to commit the resolution.
256
+
257
+ Never delete a superseded note — history matters.
258
+
259
+ ## Secret scanning (commit gate)
260
+
261
+ `bizar memory commit` (and the auto-commit path during a write) runs the secret scanner over the staged Markdown. Severities:
262
+
263
+ - **HIGH** — real API keys, bearer tokens, PEM blocks, password= assignments → **BLOCKS the commit**. Fix the leak first, then commit. Use `.template` files and `.gitignore` for live secrets (see `.bizar/AGENTS_SELF_IMPROVEMENT.md` rule #4 for the token-leak history).
264
+ - **MEDIUM** — credential-like patterns (e.g. `ghp_*` with weak validation), obvious test fixtures that could be mistaken for real keys → warns. Commit proceeds unless `--strict`.
265
+ - **LOW** — possible PII, dev URLs on non-public hosts → informational.
266
+
267
+ Override flags: `--allow-secrets` (HIGH-bypass), `--strict` (LOW-becomes-warning). Never use `--allow-secrets` to ship a real credential — fix the secret in the source, not the gate.
268
+
269
+ ## Markdown conventions (Obsidian-flavoured)
270
+
271
+ - **Frontmatter is YAML** between the leading and trailing `---` lines. Required keys depend on `type`; the validator in `memory-schema.mjs` enforces this.
272
+ - **`[[wikilinks]]`** point at note paths relative to the vault root (e.g. `[[projects/bizar/Architecture]]`, not `[[Architecture]]`).
273
+ - **Tag lists** (`tags: [a, b]`) drive search; keep them short and concrete.
274
+ - **Code blocks** with language tags survive parsing — use them for snippets longer than 2 lines.
275
+ - **Callouts** (`> [!note]`, `> [!warning]`) are preserved; use `> [!danger]` for HIGH-severity warnings.
276
+ - **Status emojis** are noise — keep notes emoji-free unless the user has put one in the frontmatter.
277
+
278
+ ## Sync model
279
+
280
+ The vault directory is a Git repo. `bizar memory sync` does, in order:
281
+
282
+ 1. **Pull** — `git fetch` and `git rebase` from the configured remote (no-op for local-only).
283
+ 2. **Schema check** — every staged file is validated by the schema in `memory-schema.mjs`. Bad files become `untracked` until fixed.
284
+ 3. **Secret scan** — staged content is scanned; HIGH blocks, MEDIUM warns.
285
+ 4. **Stage** — `git add` of all Markdown under the vault root.
286
+ 5. **Commit** — `git commit` with `commitMessageTemplate` (default `memory({projectId}): {summary}`).
287
+ 6. **Push** — only if `memory.json.git.autoPushOnSessionEnd` is true.
288
+
289
+ `autoCommitOnMemoryWrite` defaults to `false` — writes return success without committing. The user reviews and runs `bizar memory sync` themselves. This is the default for production deployments.
290
+
291
+ ## What NOT to write
292
+
293
+ - **Secrets, API keys, tokens** — the secret scanner blocks them, but defense in depth: never produce them in the first place.
294
+ - **Temporary scratch that won't be useful in 7 days** — keep that in a TODO comment in code, not the vault.
295
+ - **Long code dumps** — link with `path:line` so the note stays a living doc. Two-line snippets are fine.
296
+ - **Anything already obvious from reading the code** — the vault is for things code CAN'T say.
297
+ - **Notes that are already in another namespace** — search before writing to avoid duplicates; if you must mirror, link with `mirror_of: <other-path>`.
298
+
299
+ ## See also
300
+
301
+ - `.bizar/AGENTS_SELF_IMPROVEMENT.md` — project-specific active rules (read before vault lookups).
302
+ - `.bizar/PROJECT.md` — stack, conventions, entry points (Vör reads this first).
303
+ - `wiki/Architecture.md` — system-level architecture, including the Memory section.
304
+ - `wiki/Self-Improvement.md` — self-improvement log conventions.
305
+ - `config/skills/glyph/SKILL.md` — graphify knowledge graph (separate from the memory vault).
306
+ - `config/skills/obsidian-skills/SKILL.md` — Obsidian Markdown / Bases / Canvas / CLI (auto-installed by `install.sh` via `skills add kepano/obsidian-skills`).
@@ -0,0 +1,113 @@
1
+ ---
2
+ name: read-the-damn-docs
3
+ description: When using a library, tool, or API you don't fully understand, READ THE DOCS before guessing. Don't infer behavior from function names. The source of truth is the official documentation and source code, not your prior assumptions. Triggers when about to use an unfamiliar library/API or debugging an unfamiliar error.
4
+ version: 1
5
+ ---
6
+
7
+ # Read the Damn Docs
8
+
9
+ When you reach for a library, tool, or API you haven't used recently (or ever), **read the actual documentation** before writing code. Don't guess. Don't infer from function names. Don't assume "it probably works like X". The source of truth is the docs, then the source code, then examples. Everything else is noise.
10
+
11
+ ## Why this skill exists
12
+
13
+ LLMs are confidently wrong. They have a strong prior for "this is what libraries usually look like" — and that prior is sometimes right but often subtly wrong. Common failure modes:
14
+
15
+ - "The function is called `parseFoo` so it probably takes a string and returns an object" — wrong, it takes `{format, version}` and returns a promise
16
+ - "I'll just try it and see what error comes back" — wastes a turn, often hallucinates the fix
17
+ - "The README has an example, that's enough" — examples are cherry-picked; edge cases will bite you
18
+
19
+ The fix: spend 30-90 seconds reading the docs first. The cost is a single tool call. The benefit is a correct first attempt.
20
+
21
+ ## Hierarchy of truth
22
+
23
+ When resolving how a library/tool/API works, use this priority order:
24
+
25
+ 1. **Official documentation** (the canonical reference) — most authoritative
26
+ 2. **Source code** (the actual implementation) — definitive when docs are vague
27
+ 3. **Examples** (in the docs or repo) — show typical use, but don't trust edge cases
28
+ 4. **StackOverflow / GitHub issues** — useful for known footguns
29
+ 5. **Your prior model** — last resort, often wrong
30
+
31
+ **Stop at step 1 unless the docs are unclear.** If they are, drop to step 2.
32
+
33
+ ## Practical workflow
34
+
35
+ ```
36
+ 1. IDENTIFY: "I'm about to use library X for the first time (or first time in months)"
37
+ 2. READ: WebFetch the official docs for the specific function/method I'll call
38
+ - Don't read the entire docs — read the specific section
39
+ 3. VERIFY: cross-check against source if anything is ambiguous
40
+ 4. NOTE: write down the gotchas in your agent memory or a relevant file
41
+ 5. USE: now write the code, knowing the actual API
42
+ ```
43
+
44
+ ## When to invoke this skill
45
+
46
+ Use it whenever:
47
+
48
+ - You're using a library you haven't touched in this session
49
+ - You're using a function/method whose exact signature you don't remember
50
+ - The function name is misleading or you have low confidence
51
+ - You're upgrading to a new major version of a library
52
+ - You're switching between similar libraries (axios vs fetch, etc.)
53
+ - You're using a CLI tool you don't have muscle memory for
54
+ - You're hitting an error you don't recognize and "guessing" the fix
55
+
56
+ ## Anti-patterns
57
+
58
+ ### "I'll just try it"
59
+
60
+ Don't write code, run it, see the error, and fix from there. That works for trivial cases but burns turns on anything non-trivial. Read the docs first.
61
+
62
+ ### "The function name tells me what it does"
63
+
64
+ `Array.prototype.flatMap`, `Promise.allSettled`, `fs.opendirSync` — names are hints, not specs. The actual behavior (sync vs async, return shape, error cases) is in the docs.
65
+
66
+ ### "I used this library before, I know it"
67
+
68
+ Libraries change. APIs deprecate. Defaults shift. Even if you used something 6 months ago, a quick doc check (30 seconds) saves 10 minutes of debugging when your prior knowledge is stale.
69
+
70
+ ### "The README example is enough"
71
+
72
+ README examples are demos, not documentation. They show one happy path. The real API has edge cases, error modes, and options that aren't in the example.
73
+
74
+ ### "The error message is enough to fix it"
75
+
76
+ Sometimes. But error messages are often misleading or incomplete. Reading the docs for the function that errored often reveals the actual constraint.
77
+
78
+ ## Examples
79
+
80
+ ### Good: Read first
81
+
82
+ ```
83
+ [Agent wants to use the Vite `defineConfig` API for the first time]
84
+ Agent: "Let me check the Vite docs for the exact shape of `defineConfig`."
85
+ [WebFetch https://vitejs.dev/config/]
86
+ Agent: "OK, `defineConfig` accepts a UserConfig object with `plugins`, `build`, etc.
87
+ I need a `define` key for compile-time constants."
88
+ [Writes correct config]
89
+ ```
90
+
91
+ ### Bad: Guess
92
+
93
+ ```
94
+ [Agent wants to use the Vite `defineConfig` API for the first time]
95
+ Agent: "defineConfig is probably a function that takes a config object with
96
+ common options like plugins and build. Let me just write it."
97
+ [Writes config with `define: { __VERSION__: '1.0' }`]
98
+ [Runs vite build, gets a warning about an unexpected option]
99
+ Agent: "Hmm, the docs must have changed. Let me guess it's a different syntax."
100
+ [Wastes 2-3 turns guessing before reading the docs]
101
+ ```
102
+
103
+ ## Where to read
104
+
105
+ - **WebFetch** the official docs URL: `WebFetch <url>` — fast, gives you the actual current docs
106
+ - **Source code** via Semble search: `mcp__semble__search "functionName" <repo>` — useful when docs are vague
107
+ - **Local docs** if available: Semble search for project's own docs
108
+
109
+ ## See also
110
+
111
+ - [[obsidian]] — write postmortems and patterns to the project vault
112
+ - [[glyph]] — create a glyph when the design decision is non-trivial
113
+ - The agent baseline — `simplest thing that works` rule
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: self-improvement
3
+ description: Use when setting up, configuring, or debugging the project-level self-improvement system. Every task records lessons learned to .bizar/AGENTS_SELF_IMPROVEMENT.md for agent behavior improvement across sessions. Triggers when appending/updating self-improvement entries or reading active rules.
4
+ ---
5
+
6
+ # Self Improvement
7
+
8
+ Project-level learning system. Every task records what worked, what didn't, and what patterns to follow next time — stored in `.bizar/AGENTS_SELF_IMPROVEMENT.md` at the project root.
9
+
10
+ ## How It Works
11
+
12
+ 1. **Session start**: Odin reads `.bizar/AGENTS_SELF_IMPROVEMENT.md` from project root and factors active rules into routing
13
+ 2. **During work**: Agents follow documented patterns and avoid previously-caught mistakes
14
+ 3. **Task completion**: Odin dispatches @heimdall to append a structured entry to the file
15
+ 4. **Next session**: The cycle repeats — agents get smarter over time
16
+
17
+ ## File Format
18
+
19
+ The file lives at `<project-root>/.bizar/AGENTS_SELF_IMPROVEMENT.md`. Structure:
20
+
21
+ ```markdown
22
+ # Self Improvement
23
+
24
+ ## Active Rules
25
+ <!-- Keep top 5-10 actionable patterns here. Extract from recent entries. -->
26
+
27
+ ## Log
28
+
29
+ ### 2026-06-16: Brief descriptive title
30
+ - **Context**: What was the task
31
+ - **Lesson**: What we learned
32
+ - **Pattern**: What to do next time
33
+ - **Files**: src/foo.ts, src/bar.ts
34
+ - **Agent**: thor, tyr
35
+ ```
36
+
37
+ ## Entry Rules for Agents
38
+
39
+ When writing an entry:
40
+
41
+ - **File per project** — `.bizar/AGENTS_SELF_IMPROVEMENT.md` at the root of whatever project you're working in
42
+ - **If file doesn't exist**, create it with the header template
43
+ - **Entry format**: H3 date header, bullet list with Context, Lesson, Pattern, Files, Agent
44
+ - **Active Rules**: At the top, keep 5-10 distilled patterns from recent entries. If adding a new entry makes it necessary, add a rule too or promote a pattern from an entry.
45
+ - **Deduplicate**: Don't repeat the same lesson. If the same lesson comes up again, update the existing entry's date instead.
46
+ - **Be specific**: "Always use strictNullChecks" not "TypeScript is good"
47
+ - **Agent tag**: Use the subagent name (thor, tyr, heimdall, mimir, etc.)
48
+
49
+ ## Setup
50
+
51
+ For a new project where no such file exists yet, create the initial file:
52
+
53
+ ```
54
+ # Self Improvement
55
+
56
+ Template for project-specific agent learning. Entries are auto-appended by Odin
57
+ at task completion and read at session start.
58
+
59
+ ## Active Rules
60
+
61
+ <!-- Top 5-10 actionable patterns extracted from recent entries -->
62
+
63
+ ## Log
64
+ ```