@polderlabs/bizar 6.2.4 → 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 (332) 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 +31 -18
  125. package/cli/commands/claude-cmd.mjs +348 -0
  126. package/cli/commands/install.mjs +12 -11
  127. package/cli/commands/sandbox.mjs +220 -0
  128. package/cli/commands/validate.mjs +252 -288
  129. package/cli/dev-link.test.mjs +11 -11
  130. package/cli/doctor.mjs +131 -213
  131. package/cli/install.mjs +33 -37
  132. package/cli/install.test.mjs +9 -9
  133. package/cli/provision-claude.mjs +893 -0
  134. package/cli/provision.mjs +330 -226
  135. package/cli/provision.test.mjs +102 -0
  136. package/cli/utils.mjs +72 -58
  137. package/config/AGENTS.md +28 -28
  138. package/config/agents/_shared/AGENT_BASELINE.md +104 -684
  139. package/config/skills/bizar/SKILL.md +197 -0
  140. package/config/skills/cubesandbox/SKILL.md +148 -0
  141. package/config/skills/harness-engineering/SKILL.md +142 -0
  142. package/install.sh +66 -44
  143. package/package.json +19 -11
  144. package/packages/sdk/ARCHITECTURE.md +40 -36
  145. package/packages/sdk/package-lock.json +32 -0
  146. package/packages/sdk/package.json +15 -5
  147. package/{plugins/bizar → packages/sdk}/src/dangerous-patterns.ts +6 -28
  148. package/packages/sdk/src/fingerprint.ts +0 -0
  149. package/packages/sdk/src/index.ts +38 -73
  150. package/packages/sdk/src/mcp/bin.ts +51 -0
  151. package/packages/sdk/src/mcp/server.ts +498 -0
  152. package/{plugins/bizar/src/memory-vault.ts → packages/sdk/src/memory/index.ts} +18 -21
  153. package/packages/sdk/tests/sdk.test.mjs +148 -0
  154. package/packages/sdk/vitest.config.ts +1 -1
  155. package/scripts/bh-full-e2e.mjs +166 -363
  156. package/scripts/check-deps.mjs +28 -46
  157. package/scripts/mirror-claude-md.sh +78 -0
  158. package/scripts/test-in-container.sh +157 -0
  159. package/templates/clean-state-checklist.md +3 -3
  160. package/templates/sprint-contract.md +2 -2
  161. package/bizar-dash/.bizar/activity.log +0 -3
  162. package/bizar-dash/.omx/logs/omx-2026-07-07.jsonl +0 -1
  163. package/bizar-dash/.omx/state/session.json +0 -10
  164. package/bizar-dash/bizar-design/EXPLANATION.md +0 -307
  165. package/bizar-dash/bizar-design/INSTRUCTIONS.md +0 -149
  166. package/bizar-dash/bizar-design/canvas.html +0 -281
  167. package/bizar-dash/bizar-design/canvas.html.artifact.json +0 -19
  168. package/bizar-dash/bizar-design/components.css +0 -1665
  169. package/bizar-dash/bizar-design/components.html +0 -557
  170. package/bizar-dash/bizar-design/components.html.artifact.json +0 -19
  171. package/bizar-dash/bizar-design/desktop/agents.html +0 -74
  172. package/bizar-dash/bizar-design/desktop/agents.html.artifact.json +0 -19
  173. package/bizar-dash/bizar-design/desktop/memory.html +0 -75
  174. package/bizar-dash/bizar-design/desktop/memory.html.artifact.json +0 -19
  175. package/bizar-dash/bizar-design/desktop/metrics.html +0 -63
  176. package/bizar-dash/bizar-design/desktop/metrics.html.artifact.json +0 -19
  177. package/bizar-dash/bizar-design/desktop/overview.html +0 -95
  178. package/bizar-dash/bizar-design/desktop/overview.html.artifact.json +0 -19
  179. package/bizar-dash/bizar-design/desktop/settings.html +0 -70
  180. package/bizar-dash/bizar-design/desktop/settings.html.artifact.json +0 -19
  181. package/bizar-dash/bizar-design/icons.svg +0 -44
  182. package/bizar-dash/bizar-design/index.html +0 -192
  183. package/bizar-dash/bizar-design/index.html.artifact.json +0 -19
  184. package/bizar-dash/bizar-design/mobile/agents.html +0 -29
  185. package/bizar-dash/bizar-design/mobile/agents.html.artifact.json +0 -19
  186. package/bizar-dash/bizar-design/mobile/memory.html +0 -28
  187. package/bizar-dash/bizar-design/mobile/memory.html.artifact.json +0 -19
  188. package/bizar-dash/bizar-design/mobile/metrics.html +0 -29
  189. package/bizar-dash/bizar-design/mobile/metrics.html.artifact.json +0 -19
  190. package/bizar-dash/bizar-design/mobile/overview.html +0 -33
  191. package/bizar-dash/bizar-design/mobile/overview.html.artifact.json +0 -19
  192. package/bizar-dash/bizar-design/mobile/settings.html +0 -28
  193. package/bizar-dash/bizar-design/mobile/settings.html.artifact.json +0 -19
  194. package/bizar-dash/bizar-design/prototype.js +0 -114
  195. package/bizar-dash/bizar-design/tokens.css +0 -106
  196. package/bizar-dash/dist/assets/vendor-CeHGtduv.js.map +0 -1
  197. package/bizar-dash/node_modules/.package-lock.json +0 -6
  198. package/bizar-dash/package-lock.json +0 -6
  199. package/bizar-dash/src/server/cline-sdk.mjs +0 -132
  200. package/bizar-dash/src/server/routes/cline-session-detail.mjs +0 -559
  201. package/bizar-dash/src/server/routes/cline-sessions.mjs +0 -291
  202. package/cli/commands/cline-cmd.mjs +0 -289
  203. package/cli/commands/validate.test.mjs +0 -344
  204. package/cli/doctor.test.mjs +0 -350
  205. package/config/cline.json.template +0 -342
  206. package/packages/sdk/src/client.ts +0 -188
  207. package/packages/sdk/src/cline-events.ts +0 -134
  208. package/packages/sdk/src/cline-types.ts +0 -66
  209. package/packages/sdk/src/cline.ts +0 -339
  210. package/packages/sdk/src/errors.ts +0 -129
  211. package/packages/sdk/src/events.ts +0 -153
  212. package/packages/sdk/src/types.ts +0 -176
  213. package/packages/sdk/tests/client.test.ts +0 -217
  214. package/packages/sdk/tests/errors.test.ts +0 -108
  215. package/packages/sdk/tests/events.test.ts +0 -139
  216. package/packages/sdk/tests/fixtures/fetch-mock.ts +0 -152
  217. package/packages/sdk/tests/fixtures/sse-mock.ts +0 -30
  218. package/plugins/bizar/ARCHITECTURE.md +0 -142
  219. package/plugins/bizar/CONSTRAINTS.md +0 -67
  220. package/plugins/bizar/LICENSE +0 -21
  221. package/plugins/bizar/README.md +0 -448
  222. package/plugins/bizar/index.ts +0 -872
  223. package/plugins/bizar/package.json +0 -39
  224. package/plugins/bizar/scripts/check-forbidden-imports.sh +0 -33
  225. package/plugins/bizar/src/background-state.ts +0 -641
  226. package/plugins/bizar/src/background.ts +0 -1806
  227. package/plugins/bizar/src/cline-runner.ts +0 -203
  228. package/plugins/bizar/src/clineruntime.ts +0 -227
  229. package/plugins/bizar/src/commands-impl.ts +0 -151
  230. package/plugins/bizar/src/commands.ts +0 -1799
  231. package/plugins/bizar/src/compaction.d.mts +0 -48
  232. package/plugins/bizar/src/compaction.mjs +0 -192
  233. package/plugins/bizar/src/dashboard-client.ts +0 -233
  234. package/plugins/bizar/src/event-stream.ts +0 -606
  235. package/plugins/bizar/src/fingerprint.ts +0 -120
  236. package/plugins/bizar/src/handoff.ts +0 -79
  237. package/plugins/bizar/src/hooks/memory-flush-on-compact.ts +0 -123
  238. package/plugins/bizar/src/hooks/memory-inject.ts +0 -247
  239. package/plugins/bizar/src/hooks/memory-write-on-end.ts +0 -188
  240. package/plugins/bizar/src/hooks/skill-curator.ts +0 -180
  241. package/plugins/bizar/src/http-client.ts +0 -467
  242. package/plugins/bizar/src/key-rotation.ts +0 -218
  243. package/plugins/bizar/src/logger.ts +0 -144
  244. package/plugins/bizar/src/loop-engineering.ts +0 -241
  245. package/plugins/bizar/src/loop.ts +0 -176
  246. package/plugins/bizar/src/mistake-recovery.ts +0 -98
  247. package/plugins/bizar/src/odin.ts +0 -227
  248. package/plugins/bizar/src/options.ts +0 -470
  249. package/plugins/bizar/src/plan-fs.ts +0 -323
  250. package/plugins/bizar/src/reasoning-clean.ts +0 -454
  251. package/plugins/bizar/src/report.ts +0 -178
  252. package/plugins/bizar/src/research-prompt.ts +0 -35
  253. package/plugins/bizar/src/serve-info.ts +0 -228
  254. package/plugins/bizar/src/serve.ts +0 -496
  255. package/plugins/bizar/src/settings.ts +0 -349
  256. package/plugins/bizar/src/state.ts +0 -298
  257. package/plugins/bizar/src/tool-discipline.ts +0 -105
  258. package/plugins/bizar/src/tools/agent-browser.ts +0 -315
  259. package/plugins/bizar/src/tools/bg-collect.ts +0 -131
  260. package/plugins/bizar/src/tools/bg-get-comments.ts +0 -266
  261. package/plugins/bizar/src/tools/bg-kill.ts +0 -116
  262. package/plugins/bizar/src/tools/bg-pause.ts +0 -99
  263. package/plugins/bizar/src/tools/bg-report-progress.ts +0 -115
  264. package/plugins/bizar/src/tools/bg-resume.ts +0 -94
  265. package/plugins/bizar/src/tools/bg-send-message.ts +0 -223
  266. package/plugins/bizar/src/tools/bg-spawn.ts +0 -502
  267. package/plugins/bizar/src/tools/bg-status.ts +0 -130
  268. package/plugins/bizar/src/tools/graph-query.ts +0 -278
  269. package/plugins/bizar/src/tools/loop-engineering.ts +0 -193
  270. package/plugins/bizar/src/tools/memory-list.ts +0 -43
  271. package/plugins/bizar/src/tools/memory-read.ts +0 -69
  272. package/plugins/bizar/src/tools/memory-search.ts +0 -47
  273. package/plugins/bizar/src/tools/memory-write.ts +0 -54
  274. package/plugins/bizar/src/tools/open-kb.ts +0 -198
  275. package/plugins/bizar/src/tools/plan-action.ts +0 -785
  276. package/plugins/bizar/src/tools/read-glyph-feedback.ts +0 -191
  277. package/plugins/bizar/src/tools/team-spawn.ts +0 -73
  278. package/plugins/bizar/src/tools/team-status.ts +0 -76
  279. package/plugins/bizar/src/tools/wait-for-feedback.ts +0 -415
  280. package/plugins/bizar/src/trajectory.ts +0 -104
  281. package/plugins/bizar/tests/README.md +0 -99
  282. package/plugins/bizar/tests/attach-handler-bug.test.ts +0 -169
  283. package/plugins/bizar/tests/background-state.test.ts +0 -277
  284. package/plugins/bizar/tests/background.test.ts +0 -402
  285. package/plugins/bizar/tests/block.test.ts +0 -195
  286. package/plugins/bizar/tests/canonical-key-order.test.ts +0 -75
  287. package/plugins/bizar/tests/clineruntime-config.test.ts +0 -283
  288. package/plugins/bizar/tests/commands-impl.test.ts +0 -316
  289. package/plugins/bizar/tests/commands.test.ts +0 -584
  290. package/plugins/bizar/tests/compaction.test.ts +0 -264
  291. package/plugins/bizar/tests/config.test.ts +0 -128
  292. package/plugins/bizar/tests/dashboard-client.test.ts +0 -159
  293. package/plugins/bizar/tests/dispose.test.ts +0 -336
  294. package/plugins/bizar/tests/event-stream.test.ts +0 -409
  295. package/plugins/bizar/tests/event.test.ts +0 -262
  296. package/plugins/bizar/tests/fingerprint.test.ts +0 -162
  297. package/plugins/bizar/tests/http-client.test.ts +0 -404
  298. package/plugins/bizar/tests/init-helpers.test.ts +0 -203
  299. package/plugins/bizar/tests/integration/slash-command.test.ts +0 -349
  300. package/plugins/bizar/tests/integration/tool-routing.test.ts +0 -98
  301. package/plugins/bizar/tests/key-rotation.test.ts +0 -396
  302. package/plugins/bizar/tests/loop-engineering.test.ts +0 -168
  303. package/plugins/bizar/tests/loop.test.ts +0 -397
  304. package/plugins/bizar/tests/memory-write-on-end.test.ts +0 -92
  305. package/plugins/bizar/tests/mistake-recovery.test.ts +0 -116
  306. package/plugins/bizar/tests/odin.test.ts +0 -125
  307. package/plugins/bizar/tests/options.test.ts +0 -329
  308. package/plugins/bizar/tests/reasoning-clean.test.ts +0 -422
  309. package/plugins/bizar/tests/safety.test.ts +0 -256
  310. package/plugins/bizar/tests/serve.test.ts +0 -339
  311. package/plugins/bizar/tests/settings.test.ts +0 -351
  312. package/plugins/bizar/tests/stall-think.test.ts +0 -750
  313. package/plugins/bizar/tests/state.test.ts +0 -276
  314. package/plugins/bizar/tests/tool-discipline.test.ts +0 -77
  315. package/plugins/bizar/tests/tools/agent-browser.test.ts +0 -98
  316. package/plugins/bizar/tests/tools/bg-collect.test.ts +0 -337
  317. package/plugins/bizar/tests/tools/bg-get-comments.test.ts +0 -485
  318. package/plugins/bizar/tests/tools/bg-kill.test.ts +0 -235
  319. package/plugins/bizar/tests/tools/bg-pause.test.ts +0 -61
  320. package/plugins/bizar/tests/tools/bg-report-progress.test.ts +0 -79
  321. package/plugins/bizar/tests/tools/bg-resume.test.ts +0 -40
  322. package/plugins/bizar/tests/tools/bg-send-message.test.ts +0 -116
  323. package/plugins/bizar/tests/tools/bg-spawn-delegation.test.ts +0 -147
  324. package/plugins/bizar/tests/tools/bg-spawn-http.test.ts +0 -233
  325. package/plugins/bizar/tests/tools/bg-spawn.test.ts +0 -311
  326. package/plugins/bizar/tests/tools/bg-status.test.ts +0 -217
  327. package/plugins/bizar/tests/tools/cline-runner.test.ts +0 -115
  328. package/plugins/bizar/tests/tools/plan-action.test.ts +0 -599
  329. package/plugins/bizar/tests/tools/read-glyph-feedback.test.ts +0 -253
  330. package/plugins/bizar/tests/tools/wait-for-feedback.test.ts +0 -390
  331. package/plugins/bizar/tests/update-deadlock.test.ts +0 -151
  332. package/plugins/bizar/tsconfig.json +0 -29
@@ -219,4 +219,106 @@ describe('buildServiceEnvFile()', () => {
219
219
  });
220
220
  });
221
221
 
222
+ // ── writeBizarSkillLock (v6.2.5) ──────────────────────────────────────────────
223
+ //
224
+ // Cline's marketplace UI reads `~/.agents/.skill-lock.json` to decide
225
+ // whether a skill is installed. Without writing entries there, users
226
+ // see "No skills installed" in Cline's Skills tab even though SKILL.md
227
+ // files are correctly mirrored to `~/.cline/skills/` and
228
+ // `~/.agents/skills/`. These tests pin the contract of the
229
+ // `writeBizarSkillLock` helper that the installer uses.
230
+
231
+ describe('writeBizarSkillLock() — Cline marketplace registration', () => {
232
+ let home, skillsSrc, agentsDir;
233
+
234
+ beforeEach(() => {
235
+ home = freshHome();
236
+ process.env.HOME = home;
237
+ delete process.env.XDG_CONFIG_HOME;
238
+ skillsSrc = join(home, 'config', 'skills');
239
+ agentsDir = join(home, '.agents');
240
+ mkdirSync(skillsSrc, { recursive: true });
241
+ mkdirSync(join(skillsSrc, 'bizar'), { recursive: true });
242
+ writeFileSync(join(skillsSrc, 'bizar', 'SKILL.md'), '# Bizar skill');
243
+ mkdirSync(join(skillsSrc, '9router'), { recursive: true });
244
+ writeFileSync(join(skillsSrc, '9router', 'SKILL.md'), '# 9router skill');
245
+ mkdirSync(agentsDir, { recursive: true });
246
+ });
247
+
248
+ afterEach(() => {
249
+ restoreHome();
250
+ if (home && existsSync(home)) rmSync(home, { recursive: true, force: true });
251
+ });
252
+
253
+ test('writes lock file with all skills as bizar/builtin', async () => {
254
+ const { writeBizarSkillLock } = await import('./provision.mjs');
255
+ const result = writeBizarSkillLock({ skillsSrc, agentsDir });
256
+ assert.equal(result.ok, true);
257
+ assert.equal(result.count, 2);
258
+
259
+ const lockPath = join(agentsDir, '.skill-lock.json');
260
+ assert.ok(existsSync(lockPath));
261
+ const lock = JSON.parse(readFileSync(lockPath, 'utf8'));
262
+ assert.ok(lock.skills.bizar, 'bizar entry should exist');
263
+ assert.ok(lock.skills['9router'], '9router entry should exist');
264
+ assert.equal(lock.skills.bizar.source, 'bizar/builtin');
265
+ assert.equal(lock.skills['9router'].source, 'bizar/builtin');
266
+ assert.equal(lock.skills.bizar.pluginName, 'bizar');
267
+ assert.ok(lock.skills.bizar.installedAt);
268
+ assert.ok(lock.skills.bizar.updatedAt);
269
+ });
270
+
271
+ test('preserves user-installed skills (does not overwrite non-bizar source)', async () => {
272
+ const lockPath = join(agentsDir, '.skill-lock.json');
273
+ const preExisting = {
274
+ version: 3,
275
+ skills: {
276
+ 'user-installed-skill': {
277
+ source: 'vercel-labs/agent-skills',
278
+ sourceType: 'github',
279
+ sourceUrl: 'https://github.com/vercel-labs/agent-skills.git',
280
+ skillPath: 'skills/foo/SKILL.md',
281
+ installedAt: '2026-06-13T10:03:13.744Z',
282
+ updatedAt: '2026-06-13T10:03:13.744Z',
283
+ },
284
+ },
285
+ };
286
+ writeFileSync(lockPath, JSON.stringify(preExisting));
287
+
288
+ const { writeBizarSkillLock } = await import('./provision.mjs');
289
+ writeBizarSkillLock({ skillsSrc, agentsDir });
290
+
291
+ const lock = JSON.parse(readFileSync(lockPath, 'utf8'));
292
+ assert.ok(lock.skills['user-installed-skill'], 'user skill must remain');
293
+ assert.equal(
294
+ lock.skills['user-installed-skill'].source,
295
+ 'vercel-labs/agent-skills',
296
+ 'user skill source must NOT be overwritten',
297
+ );
298
+ assert.ok(lock.skills.bizar, 'bizar entry should be added');
299
+ });
300
+
301
+ test('is idempotent — re-running updates timestamps, does not duplicate', async () => {
302
+ const { writeBizarSkillLock } = await import('./provision.mjs');
303
+ writeBizarSkillLock({ skillsSrc, agentsDir });
304
+ const lock1 = JSON.parse(readFileSync(join(agentsDir, '.skill-lock.json'), 'utf8'));
305
+ const firstInstalledAt = lock1.skills.bizar.installedAt;
306
+
307
+ // tiny delay to make updatedAt observable
308
+ await new Promise((r) => setTimeout(r, 10));
309
+ writeBizarSkillLock({ skillsSrc, agentsDir });
310
+ const lock2 = JSON.parse(readFileSync(join(agentsDir, '.skill-lock.json'), 'utf8'));
311
+ assert.equal(lock2.skills.bizar.installedAt, firstInstalledAt);
312
+ assert.notEqual(lock2.skills.bizar.updatedAt, lock1.skills.bizar.updatedAt);
313
+ });
314
+
315
+ test('returns ok=true with count=0 if skillsSrc missing', async () => {
316
+ rmSync(skillsSrc, { recursive: true, force: true });
317
+ const { writeBizarSkillLock } = await import('./provision.mjs');
318
+ const result = writeBizarSkillLock({ skillsSrc, agentsDir });
319
+ assert.equal(result.ok, true);
320
+ assert.equal(result.count, 0);
321
+ });
322
+ });
323
+
222
324
  console.log(' provision.mjs tests loaded — run with: node --test cli/provision.test.mjs');
package/cli/utils.mjs CHANGED
@@ -15,30 +15,56 @@ export function repoPath(...parts) {
15
15
  }
16
16
 
17
17
  /**
18
- * Resolve the Cline global config directory.
19
- *
20
- * Mirrors Cline's `resolveClineDir()` in `@cline/shared/storage`:
21
- * 1. `process.env.CLINE_DIR` (explicit override)
22
- * 2. `$HOME/.cline` (the Cline default since v3.0)
23
- *
24
- * v6.1.0 Bizar is Cline-only. The pre-v5.6 `~/.config/cline/` path
25
- * (the OpenCode-era layout) is no longer supported; the previous
26
- * `legacyClineConfigDir()` helper has been removed.
27
- */
28
- export function clineConfigDir() {
29
- if (process.env.CLINE_DIR && process.env.CLINE_DIR.trim()) {
30
- return process.env.CLINE_DIR.trim();
18
+ * Resolve the Claude Code global config directory.
19
+ *
20
+ * v6.3.0 Bizar is Claude Code-native. The legacy `~/.cline/`
21
+ * path is kept as a back-compat alias via the wrappers below.
22
+ *
23
+ * 1. `process.env.CLAUDE_CONFIG_DIR` (explicit override)
24
+ * 2. `$HOME/.claude` (Claude Code default)
25
+ */
26
+ export function claudeConfigDir() {
27
+ if (process.env.CLAUDE_CONFIG_DIR && process.env.CLAUDE_CONFIG_DIR.trim()) {
28
+ return process.env.CLAUDE_CONFIG_DIR.trim();
31
29
  }
32
30
  if (isWin) {
33
31
  return process.env.APPDATA
34
- ? join(process.env.APPDATA, 'cline')
35
- : join(homedir(), '.cline');
32
+ ? join(process.env.APPDATA, 'claude')
33
+ : join(homedir(), '.claude');
36
34
  }
37
- return join(homedir(), '.cline');
35
+ return join(homedir(), '.claude');
38
36
  }
39
37
 
38
+ export function claudeAgentsDir() {
39
+ return join(claudeConfigDir(), 'agents');
40
+ }
41
+
42
+ export function claudeSkillsDir() {
43
+ return join(claudeConfigDir(), 'skills');
44
+ }
45
+
46
+ export function claudeCommandsDir() {
47
+ return join(claudeConfigDir(), 'commands');
48
+ }
49
+
50
+ export function claudeHooksDir() {
51
+ return join(claudeConfigDir(), 'hooks');
52
+ }
53
+
54
+ /**
55
+ * @deprecated v6.3.0 — Claude Code migration. Use `claudeConfigDir()`.
56
+ * Thin wrapper so older scripts that haven't been migrated keep working.
57
+ */
58
+ export function clineConfigDir() {
59
+ return claudeConfigDir();
60
+ }
61
+
62
+ /**
63
+ * @deprecated v6.3.0 — Claude Code migration. Use `claudeAgentsDir()`.
64
+ * Thin wrapper so older scripts that haven't been migrated keep working.
65
+ */
40
66
  export function clineAgentsDir() {
41
- return join(clineConfigDir(), 'agents');
67
+ return claudeAgentsDir();
42
68
  }
43
69
 
44
70
  async function tryReadVersion(filePath) {
@@ -58,53 +84,41 @@ function commandExists(command) {
58
84
  return probe.status === 0;
59
85
  }
60
86
 
87
+ /**
88
+ * @deprecated v6.3.0 — Claude Code migration. Use `detectClaude()`.
89
+ * Probe for the legacy Cline CLI to power compat reports.
90
+ */
61
91
  export async function detectCline() {
62
- const configDir = clineConfigDir();
63
- const agentsDir = clineAgentsDir();
64
-
92
+ const configDir = claudeConfigDir();
93
+ const agentsDir = claudeAgentsDir();
65
94
  let exists = false;
66
95
  let version = '';
67
-
68
96
  try {
69
97
  await access(configDir, constants.F_OK);
70
98
  exists = true;
99
+ } catch {
100
+ exists = false;
101
+ }
102
+ return { exists, version, configDir, agentsDir };
103
+ }
71
104
 
72
- if (isWin) {
73
- const winPaths = [
74
- join(process.env.APPDATA || homedir(), 'npm', 'node_modules', 'cline', 'package.json'),
75
- join(process.env.APPDATA || homedir(), 'npm', 'node_modules', 'cline', 'package.json'),
76
- join(process.env.APPDATA || homedir(), 'npm-global', 'node_modules', 'cline', 'package.json'),
77
- join(process.env.APPDATA || homedir(), 'npm-global', 'node_modules', 'cline', 'package.json'),
78
- join(homedir(), 'node_modules', 'cline', 'package.json'),
79
- join(homedir(), 'node_modules', 'cline', 'package.json'),
80
- ];
81
- for (const p of winPaths) {
82
- version = await tryReadVersion(p);
83
- if (version) break;
84
- }
85
- } else {
86
- const posixPaths = [
87
- join(homedir(), '.local', 'share', 'cline', 'package.json'),
88
- join(homedir(), '.local', 'share', 'cline', 'package.json'),
89
- '/usr/local/lib/node_modules/cline/package.json',
90
- '/usr/local/lib/node_modules/cline/package.json',
91
- '/usr/lib/node_modules/cline/package.json',
92
- '/usr/lib/node_modules/cline/package.json',
93
- join(homedir(), '.npm-global', 'lib', 'node_modules', 'cline', 'package.json'),
94
- join(homedir(), '.npm-global', 'lib', 'node_modules', 'cline', 'package.json'),
95
- join(homedir(), 'node_modules', 'cline', 'package.json'),
96
- join(homedir(), 'node_modules', 'cline', 'package.json'),
97
- ];
98
- for (const p of posixPaths) {
99
- version = await tryReadVersion(p);
100
- if (version) break;
101
- }
105
+ /**
106
+ * Probe for the Claude Code CLI on PATH.
107
+ * Returns `{ exists, version }`. v6.3.0+ replacement for `detectCline()`.
108
+ */
109
+ export async function detectClaude() {
110
+ let exists = false;
111
+ let version = '';
112
+ try {
113
+ const probe = spawnSync('claude', ['--version'], { encoding: 'utf8', timeout: 5000 });
114
+ if (probe.status === 0) {
115
+ exists = true;
116
+ version = (probe.stdout || probe.stderr || '').trim().split('\n')[0];
102
117
  }
103
118
  } catch {
104
119
  exists = false;
105
120
  }
106
-
107
- return { exists, version, configDir, agentsDir };
121
+ return { exists, version, configDir: claudeConfigDir(), agentsDir: claudeAgentsDir() };
108
122
  }
109
123
 
110
124
  export async function detectHeadroom() {
@@ -133,7 +147,7 @@ export async function detectSkillsCli() {
133
147
  }
134
148
 
135
149
  export async function detectInstalledAgents() {
136
- const agentsDir = clineAgentsDir();
150
+ const agentsDir = claudeAgentsDir();
137
151
  try {
138
152
  await access(agentsDir, constants.F_OK);
139
153
  return agentsDir;
@@ -148,9 +162,9 @@ export function buildSummary(components, agents, target, skillPacks = []) {
148
162
  if (components.includes('agents-md')) parts.push('AGENTS.md');
149
163
  if (components.includes('skill-bizar')) parts.push('bizar skill');
150
164
  if (components.includes('skill-improve')) parts.push('self-improvement skill');
151
- if (components.includes('cline-json')) parts.push('cline.json');
165
+ if (components.includes('settings-json')) parts.push('settings.json');
152
166
  if (components.includes('bizar')) parts.push('.bizar/ folder');
153
- if (components.includes('plugin-bizar')) parts.push('Bizar plugin');
167
+ if (components.includes('mcp-bizar')) parts.push('Bizar MCP server');
154
168
  if (components.includes('rules')) parts.push('rules');
155
169
  if (components.includes('hooks')) parts.push('hooks');
156
170
  if (components.includes('commands')) parts.push('commands');
@@ -167,7 +181,7 @@ export function buildSummary(components, agents, target, skillPacks = []) {
167
181
  };
168
182
  }
169
183
 
170
- // ── Path helpers ─────────────────────────────────────────────────────────────────
184
+ // Path helpers
171
185
 
172
186
  /**
173
187
  * Return the platform-specific Bizar config directory.
@@ -204,4 +218,4 @@ export function whichPath(cmd) {
204
218
  } catch {
205
219
  return null;
206
220
  }
207
- }
221
+ }
package/config/AGENTS.md CHANGED
@@ -54,7 +54,7 @@ which skills 2>/dev/null
54
54
  skills list --json
55
55
 
56
56
  # View installed skill files
57
- ls ~/.cline/skills/<skill-name>/SKILL.md
57
+ ls ~/.claude/skills/<skill-name>/SKILL.md
58
58
  ```
59
59
 
60
60
  ### How to Install
@@ -72,7 +72,7 @@ skills add <owner/repo> -s "<skill-name>" -y
72
72
  1. **Assess**: When given a task, consider whether a skill might exist for it
73
73
  2. **Check installed**: Run `skills list --json` to see what's already available
74
74
  3. **Try known repos**: Based on the task domain, attempt installation from known skill repos (e.g., `skills add supabase/agent-skills --all -y` for database work, `skills add vercel-labs/agent-skills --all -y` for frontend work)
75
- 4. **Use**: After installing, the skill instructions are at `~/.cline/skills/<skill-name>/SKILL.md` — load them with the `skill` tool
75
+ 4. **Use**: After installing, the skill instructions are at `~/.claude/skills/<skill-name>/SKILL.md` — load them with the `skill` tool
76
76
  5. **Skip**: If no skill is found after trying likely repos, proceed without
77
77
 
78
78
  ### Known Skill Repositories by Domain
@@ -146,26 +146,26 @@ Odin (`@odin`) is the All-Father and primary/default agent. He analyzes each req
146
146
 
147
147
  ### Frigg
148
148
 
149
- - **Model**: `cline/deepseek-v4-flash-free` (via Cline Zen — free tier)
149
+ - **Model**: `claude-3-5-haiku` (via Claude CodeAnthropic API, free tier)
150
150
  - **Use for**: Read-only codebase Q&A. Use `@frigg` to ask questions about the project and get answers with file references — never modifies anything.
151
151
  - **Mode**: Primary (directly selectable by the user via `@frigg`)
152
152
  - **Cost**: Free
153
153
 
154
154
  ### Vör
155
155
 
156
- - **Model**: `cline/deepseek-v4-flash-free` (via Cline Zen — free tier)
156
+ - **Model**: `claude-3-5-haiku` (via Claude CodeAnthropic API, free tier)
157
157
  - **Use for**: Clarifying ambiguous or incomplete requests. First reads project context (`.bizar/PROJECT.md`, obsidian, project files), then only asks targeted, project-specific questions if still unclear. Never asks generic questions.
158
158
  - **Cost**: Free
159
159
 
160
160
  ### Heimdall
161
161
 
162
- - **Model**: `cline/deepseek-v4-flash-free` (via Cline Zen — free tier)
162
+ - **Model**: `claude-3-5-haiku` (via Claude CodeAnthropic API, free tier)
163
163
  - **Use for**: Simple tasks, mechanical work, quick edits, file operations. The ever-watchful guardian.
164
164
  - **Cost**: Free
165
165
 
166
166
  ### Mimir
167
167
 
168
- - **Model**: `cline/deepseek-v4-flash-free` (via Cline Zen — free tier)
168
+ - **Model**: `claude-3-5-haiku` (via Claude CodeAnthropic API, free tier)
169
169
  - **Use for**: Deep codebase research, exploration, documentation analysis. Semble-first search approach.
170
170
  - **Cost**: Free
171
171
 
@@ -207,7 +207,7 @@ Odin (`@odin`) is the All-Father and primary/default agent. He analyzes each req
207
207
 
208
208
  ### Routing Heuristic
209
209
 
210
- Odin dispatches all tasks to subagents via the `task` tool. When work items are **independent**, he launches them as **parallel `task` calls in a single message**.
210
+ Odin dispatches all tasks to subagents via the Claude Code `Agent` tool. When work items are **independent**, he launches them as **parallel `Agent` calls in a single message** with `subagent_type` set to the target agent's name.
211
211
 
212
212
  **Before dispatching any task, Odin runs `bizar memory status` to confirm the vault is reachable.** No `bank_id` is needed — `bizar memory status` resolves everything from the project root.
213
213
 
@@ -285,25 +285,25 @@ From the project root, the user (or heimdall via `/init` or any other agent prom
285
285
 
286
286
  ## General Agent Baseline — Always-On Behavior
287
287
 
288
- This section is the single source of truth for every Bizar agent's behavior. It is **adapted from the upstream system prompt and translated to Bizar**. Every Claude-specific reference has been mapped to the Bizar equivalent (BizarHarness, cline, obsidian, Semble, Skills CLI, agent-browser, the cline tool set). All agents **MUST** follow these rules at all times.
288
+ This section is the single source of truth for every Bizar agent's behavior. It is **adapted from the upstream system prompt and translated to Bizar**. Every Claude-specific reference has been mapped to the Bizar equivalent (BizarHarness, Claude Code, obsidian, Semble, Skills CLI, agent-browser, Claude Code's native tool set). All agents **MUST** follow these rules at all times.
289
289
 
290
- > **Tool name translation table** (used throughout this baseline):
290
+ > **Tool name translation table** (used throughout this baseline): this section maps Claude.ai tool names (e.g. `view`) to Claude Code tool names (e.g. `Read`). Starting with v6.3.0 (DEC-011), Claude Code's native tools are the source of truth — the harness no longer maintains its own tool set. The Bizar column below is the Claude Code column when they match.
291
291
  >
292
- > | Upstream (Claude.ai) | Bizar equivalent |
292
+ > | Upstream (Claude.ai) | Claude Code |
293
293
  > |---|---|
294
- > | `view` | `read` |
295
- > | `str_replace` | `edit` |
296
- > | `create_file` | `write` |
297
- > | `bash_tool` | `bash` |
298
- > | `web_search` | `websearch` (cline built-in) |
299
- > | `web_fetch` | `webfetch` (cline built-in) |
294
+ > | `view` | `Read` |
295
+ > | `str_replace` | `Edit` |
296
+ > | `create_file` | `Write` |
297
+ > | `bash_tool` | `Bash` |
298
+ > | `web_search` | `WebSearch` |
299
+ > | `web_fetch` | `WebFetch` |
300
300
  > | `present_files` | not applicable — Bizar delivers files via the dashboard (`@polderlabs/bizar-dash/src/server/routes/artifacts.mjs`) or by writing to the workspace |
301
- > | `image_search` / `places_*` / `weather_fetch` / `recipe_display_v0` / `fetch_sports_data` / `message_compose_v1` / `recommend_claude_apps` | not available in Bizar — do not assume these exist |
301
+ > | `image_search` / `places_*` / `weather_fetch` / `recipe_display_v0` / `fetch_sports_data` / `message_compose_v1` / `recommend_claude_apps` | not available in Claude Code — do not assume these exist |
302
302
  > | `search_mcp_registry` / `suggest_connectors` | use the `skills` CLI (`skills add <owner/repo> -s <name>`) to discover and install skills instead |
303
- > | `ask_user_input_v0` | Bizar has a `question` tool same shape, single high-value question |
304
- > | `skill` | `skill` — load a SKILL.md from `~/.cline/skills/<name>/` or installed equivalent |
305
- > | `task` (subagent dispatch) | `task` same — used by Odin to dispatch subagents |
306
- > | MCP servers | `semble` (codebase search) and any user-added servers in `config/cline.json` |
303
+ > | `ask_user_input_v0` | `AskUserQuestion` — single high-value question |
304
+ > | `skill` | `Skill` — load a SKILL.md from `~/.claude/skills/<name>/` or `.claude/skills/<name>/` |
305
+ > | `task` (subagent dispatch) | `Agent` (with `subagent_type`, `run_in_background`, `isolation: "worktree"`) — used by Odin to dispatch subagents |
306
+ > | MCP servers | `semble` (codebase search) and any user-added servers in `.claude/mcp.json` |
307
307
 
308
308
  ### Simplicity Rule — do not overcomplicate
309
309
 
@@ -321,7 +321,7 @@ This section is the single source of truth for every Bizar agent's behavior. It
321
321
 
322
322
  ### Identity preamble
323
323
 
324
- - Bizar is a Norse-pantheon multi-agent system for cline. Odin is the default primary agent; Frigg, Vör, Mimir, Heimdall, Hermod, Thor, Baldr, Tyr, Vidarr, and Forseti are the subagents.
324
+ - Bizar is a Norse-pantheon multi-agent system for Claude Code. Odin is the default primary agent; Frigg, Vör, Mimir, Heimdall, Hermod, Thor, Baldr, Tyr, Vidarr, and Forseti are the subagents.
325
325
  - The agent does not have a fixed identity outside its role definition. Do not claim to be Claude, Anthropic, or any other AI.
326
326
  - Treat the user as a capable adult working on engineering work unless the context clearly indicates otherwise.
327
327
 
@@ -388,7 +388,7 @@ This section is the single source of truth for every Bizar agent's behavior. It
388
388
  - For facts that change quickly (current positions, prices, breaking news) or anything that could have changed recently, **search before answering**: use `websearch` and `webfetch` or delegate to `@mimir` for deep research.
389
389
  - For stable technical knowledge (language semantics, well-established APIs, mathematical truths), answer directly without search.
390
390
  - Default to running `bizar memory search "<topic>"` at session start to retrieve prior project context before answering anything project-specific.
391
- - When formulating date-sensitive queries, use the actual current date (Bizar's cline environment provides this). Do not hardcode years.
391
+ - When formulating date-sensitive queries, use the actual current date (Bizar's Claude Code environment provides this). Do not hardcode years.
392
392
  - Do not over-rely on memory; if uncertain, search. Confabulating costs the user more than searching.
393
393
 
394
394
  ### mcp_servers_and_skills
@@ -407,7 +407,7 @@ The `skills` CLI (`npm install -g skills`) installs skill packs from skills.sh.
407
407
  ```bash
408
408
  which skills 2>/dev/null
409
409
  skills list --json
410
- ls ~/.cline/skills/<skill-name>/SKILL.md
410
+ ls ~/.claude/skills/<skill-name>/SKILL.md
411
411
  ```
412
412
 
413
413
  If not installed but relevant, install it from a known repo by domain:
@@ -424,7 +424,7 @@ Load the SKILL.md via the `skill` tool before writing code or making changes cov
424
424
 
425
425
  #### Browser interaction
426
426
 
427
- For browser-driven E2E validation, use **agent-browser** (the Python tool from https://github.com/browser-use/agent-browser). Invoke via `bash` heredoc:
427
+ For browser-driven E2E validation, use **agent-browser** (the Rust-native tool from https://github.com/vercel-labs/agent-browser; the earlier Python build at https://github.com/browser-use/agent-browser is archived as of the v6.0.0 migration). Invoke via `bash` heredoc:
428
428
 
429
429
  ```bash
430
430
  agent-browser <<'PY'
@@ -434,7 +434,7 @@ print(page_info())
434
434
  PY
435
435
  ```
436
436
 
437
- Common operations: `new_tab`, `goto_url`, `wait_for_load`, `page_info`, `click_at_xy`, `fill_input`, `press_key`, `scroll`, `capture_screenshot`, `js`, `cdp("Domain.method", ...)`. Read the SKILL.md at `~/.cline/skills/agent-browser/SKILL.md` on first use. Do **not** install headless Chrome via raw shell commands when agent-browser is available.
437
+ Common operations: `new_tab`, `goto_url`, `wait_for_load`, `page_info`, `click_at_xy`, `fill_input`, `press_key`, `scroll`, `capture_screenshot`, `js`, `cdp("Domain.method", ...)`. Read the SKILL.md at `~/.claude/skills/agent-browser/SKILL.md` on first use. Do **not** install headless Chrome via raw shell commands when agent-browser is available.
438
438
 
439
439
  ### skills_mandatory_read
440
440
 
@@ -445,8 +445,8 @@ Concrete triggers:
445
445
  - Backend/API work → framework-specific skill
446
446
  - Browser E2E → `agent-browser` SKILL.md
447
447
  - Skill creation → `skill-creator` SKILL.md
448
- - BizarHarness-specific work → `~/.cline/skills/bizar/` SKILL.md (always)
449
- - Self-improvement logging → `~/.cline/skills/self-improvement/` SKILL.md (always)
448
+ - BizarHarness-specific work → `~/.claude/skills/bizar/` SKILL.md (always)
449
+ - Self-improvement logging → `~/.claude/skills/self-improvement/` SKILL.md (always)
450
450
 
451
451
  ### file_creation_advice
452
452