@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.
- package/.claude/CLAUDE.md +15 -0
- package/.claude/agents/_shared/AGENT_BASELINE.md +168 -0
- package/.claude/agents/_shared/CLAUDE_TOOLS.md +412 -0
- package/.claude/agents/_shared/SKILLS.md +109 -0
- package/.claude/agents/agent-browser.md +80 -0
- package/.claude/agents/baldr.md +49 -0
- package/.claude/agents/forseti.md +51 -0
- package/.claude/agents/frigg.md +42 -0
- package/.claude/agents/heimdall.md +33 -0
- package/.claude/agents/hermod.md +53 -0
- package/.claude/agents/mimir.md +49 -0
- package/.claude/agents/odin.md +287 -0
- package/.claude/agents/quick.md +34 -0
- package/.claude/agents/semble-search.md +50 -0
- package/.claude/agents/thor.md +53 -0
- package/.claude/agents/tyr.md +56 -0
- package/.claude/agents/vidarr.md +54 -0
- package/.claude/agents/vor.md +53 -0
- package/.claude/commands/audit.md +25 -0
- package/.claude/commands/bizar.md +22 -0
- package/.claude/commands/explain.md +17 -0
- package/.claude/commands/init.md +29 -0
- package/.claude/commands/learn.md +44 -0
- package/.claude/commands/plan.md +35 -0
- package/.claude/commands/plow-through.md +50 -0
- package/.claude/commands/pr-review.md +49 -0
- package/.claude/commands/setup-provider.md +96 -0
- package/.claude/commands/tailscale-serve.md +100 -0
- package/.claude/commands/team.md +132 -0
- package/.claude/commands/test.md +62 -0
- package/.claude/commands/validate.md +68 -0
- package/.claude/commands/visual-plan.md +24 -0
- package/.claude/hooks/README.md +92 -0
- package/.claude/hooks/posttooluse-editwrite.mjs +91 -0
- package/.claude/hooks/pretooluse-bash.mjs +81 -0
- package/.claude/hooks/pretooluse-editwrite.mjs +139 -0
- package/.claude/hooks/sessionend-recall.mjs +74 -0
- package/.claude/hooks/sessionstart-prime.mjs +80 -0
- package/.claude/hooks/userpromptsubmit-tag.mjs +80 -0
- package/.claude/settings.json +116 -0
- package/.claude/skills/9router/SKILL.md +80 -0
- package/.claude/skills/9router-chat/SKILL.md +73 -0
- package/.claude/skills/9router-embeddings/SKILL.md +69 -0
- package/.claude/skills/9router-image/SKILL.md +86 -0
- package/.claude/skills/9router-stt/SKILL.md +79 -0
- package/.claude/skills/9router-tts/SKILL.md +80 -0
- package/.claude/skills/9router-web-fetch/SKILL.md +99 -0
- package/.claude/skills/9router-web-search/SKILL.md +91 -0
- package/.claude/skills/bizar/README.md +9 -0
- package/.claude/skills/bizar/SKILL.md +450 -0
- package/.claude/skills/cpp-coding-standards/README.md +28 -0
- package/.claude/skills/cpp-coding-standards/SKILL.md +634 -0
- package/.claude/skills/cpp-coding-standards/references/concurrency.md +320 -0
- package/.claude/skills/cpp-coding-standards/references/error-handling.md +229 -0
- package/.claude/skills/cpp-coding-standards/references/memory-safety.md +216 -0
- package/.claude/skills/cpp-coding-standards/references/modern-idioms.md +282 -0
- package/.claude/skills/cpp-coding-standards/references/review-checklist.md +96 -0
- package/.claude/skills/cpp-testing/README.md +28 -0
- package/.claude/skills/cpp-testing/SKILL.md +304 -0
- package/.claude/skills/cpp-testing/references/coverage.md +370 -0
- package/.claude/skills/cpp-testing/references/framework-compare.md +175 -0
- package/.claude/skills/cpp-testing/references/host-test-for-embedded.md +499 -0
- package/.claude/skills/cpp-testing/references/mocking.md +364 -0
- package/.claude/skills/cpp-testing/references/tdd-workflow.md +308 -0
- package/.claude/skills/cubesandbox/SKILL.md +148 -0
- package/.claude/skills/embedded-esp-idf/README.md +41 -0
- package/.claude/skills/embedded-esp-idf/SKILL.md +439 -0
- package/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +214 -0
- package/.claude/skills/embedded-esp-idf/references/host-tests.md +164 -0
- package/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +157 -0
- package/.claude/skills/embedded-esp-idf/references/kconfig.md +159 -0
- package/.claude/skills/embedded-esp-idf/references/logging-discipline.md +118 -0
- package/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +137 -0
- package/.claude/skills/embedded-esp-idf/references/nvs.md +121 -0
- package/.claude/skills/embedded-esp-idf/references/packed-structs.md +192 -0
- package/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +47 -0
- package/.claude/skills/embedded-esp-idf/scripts/size_check.sh +77 -0
- package/.claude/skills/glyph/SKILL.md +163 -0
- package/.claude/skills/harness-engineering/SKILL.md +143 -0
- package/.claude/skills/lightrag/SKILL.md +81 -0
- package/.claude/skills/memory-protocol/SKILL.md +105 -0
- package/.claude/skills/obsidian/SKILL.md +306 -0
- package/.claude/skills/read-the-damn-docs/SKILL.md +113 -0
- package/.claude/skills/self-improvement/SKILL.md +64 -0
- package/README.md +87 -59
- package/bizar-dash/dist/assets/{EnvVarsSection-DXM8gRm_.js → EnvVarsSection-B58aiJiE.js} +1 -1
- package/bizar-dash/dist/assets/{EnvVarsSection-DXM8gRm_.js.map → EnvVarsSection-B58aiJiE.js.map} +1 -1
- package/bizar-dash/dist/assets/{MobileChat-BnKN_Ks_.js → MobileChat-BJrqwVDd.js} +1 -1
- package/bizar-dash/dist/assets/{MobileChat-BnKN_Ks_.js.map → MobileChat-BJrqwVDd.js.map} +1 -1
- package/bizar-dash/dist/assets/{MobileSettings-DjCPxC-Q.js → MobileSettings-CEQNJNLJ.js} +1 -1
- package/bizar-dash/dist/assets/{MobileSettings-DjCPxC-Q.js.map → MobileSettings-CEQNJNLJ.js.map} +1 -1
- package/bizar-dash/dist/assets/{main-DYiZqMrn.js → main-IvfQAOfy.js} +1 -1
- package/bizar-dash/dist/assets/{main-DYiZqMrn.js.map → main-IvfQAOfy.js.map} +1 -1
- package/bizar-dash/dist/assets/{markdown-C6mXtQxD.js → markdown-tOLaD6nm.js} +1 -1
- package/bizar-dash/dist/assets/{markdown-C6mXtQxD.js.map → markdown-tOLaD6nm.js.map} +1 -1
- package/bizar-dash/dist/assets/{mobile-CMHqtLV2.js → mobile-DYCHcUpq.js} +1 -1
- package/bizar-dash/dist/assets/{mobile-CMHqtLV2.js.map → mobile-DYCHcUpq.js.map} +1 -1
- package/bizar-dash/dist/assets/{mobile-layout-3jIhHX_p.js → mobile-layout-CBHjpwsb.js} +2 -2
- package/bizar-dash/dist/assets/{mobile-layout-3jIhHX_p.js.map → mobile-layout-CBHjpwsb.js.map} +1 -1
- package/bizar-dash/dist/assets/{useSlashCommands-DtITw8Xv.js → useSlashCommands-Bd7_FA6U.js} +2 -2
- package/bizar-dash/dist/assets/{useSlashCommands-DtITw8Xv.js.map → useSlashCommands-Bd7_FA6U.js.map} +1 -1
- package/bizar-dash/dist/assets/{vendor-CeHGtduv.js → vendor-C843201K.js} +12 -12
- package/bizar-dash/dist/assets/vendor-C843201K.js.map +1 -0
- package/bizar-dash/dist/index.html +6 -6
- package/bizar-dash/dist/mobile.html +2 -2
- package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/bizar-dash/src/server/api.mjs +4 -4
- package/bizar-dash/src/server/background-store.mjs +15 -16
- package/bizar-dash/src/server/bg-poller.mjs +25 -35
- package/bizar-dash/src/server/bg-retry.mjs +66 -194
- package/bizar-dash/src/server/claude-bg-spawner.mjs +390 -0
- package/bizar-dash/src/server/claude-info.mjs +412 -0
- package/bizar-dash/src/server/{cline-runner.mjs → claude-runner.mjs} +53 -48
- package/bizar-dash/src/server/claude-sdk.mjs +191 -0
- package/bizar-dash/src/server/providers-store.mjs +22 -49
- package/bizar-dash/src/server/routes/background.mjs +24 -20
- package/bizar-dash/src/server/routes/chat.mjs +223 -326
- package/bizar-dash/src/server/routes/claude-session-detail.mjs +329 -0
- package/bizar-dash/src/server/routes/claude-sessions.mjs +259 -0
- package/bizar-dash/src/server/routes/tasks.mjs +20 -28
- package/bizar-dash/src/server/task-delegator.mjs +76 -77
- package/bizar-dash/src/web/components/chat/useChat.ts +23 -27
- package/bizar-dash/src/web/views/Chat.tsx +8 -8
- package/cli/bin.mjs +31 -18
- package/cli/commands/claude-cmd.mjs +348 -0
- package/cli/commands/install.mjs +12 -11
- package/cli/commands/sandbox.mjs +220 -0
- package/cli/commands/validate.mjs +252 -288
- package/cli/dev-link.test.mjs +11 -11
- package/cli/doctor.mjs +131 -213
- package/cli/install.mjs +33 -37
- package/cli/install.test.mjs +9 -9
- package/cli/provision-claude.mjs +893 -0
- package/cli/provision.mjs +330 -226
- package/cli/provision.test.mjs +102 -0
- package/cli/utils.mjs +72 -58
- package/config/AGENTS.md +28 -28
- package/config/agents/_shared/AGENT_BASELINE.md +104 -684
- package/config/skills/bizar/SKILL.md +197 -0
- package/config/skills/cubesandbox/SKILL.md +148 -0
- package/config/skills/harness-engineering/SKILL.md +142 -0
- package/install.sh +66 -44
- package/package.json +19 -11
- package/packages/sdk/ARCHITECTURE.md +40 -36
- package/packages/sdk/package-lock.json +32 -0
- package/packages/sdk/package.json +15 -5
- package/{plugins/bizar → packages/sdk}/src/dangerous-patterns.ts +6 -28
- package/packages/sdk/src/fingerprint.ts +0 -0
- package/packages/sdk/src/index.ts +38 -73
- package/packages/sdk/src/mcp/bin.ts +51 -0
- package/packages/sdk/src/mcp/server.ts +498 -0
- package/{plugins/bizar/src/memory-vault.ts → packages/sdk/src/memory/index.ts} +18 -21
- package/packages/sdk/tests/sdk.test.mjs +148 -0
- package/packages/sdk/vitest.config.ts +1 -1
- package/scripts/bh-full-e2e.mjs +166 -363
- package/scripts/check-deps.mjs +28 -46
- package/scripts/mirror-claude-md.sh +78 -0
- package/scripts/test-in-container.sh +157 -0
- package/templates/clean-state-checklist.md +3 -3
- package/templates/sprint-contract.md +2 -2
- package/bizar-dash/.bizar/activity.log +0 -3
- package/bizar-dash/.omx/logs/omx-2026-07-07.jsonl +0 -1
- package/bizar-dash/.omx/state/session.json +0 -10
- package/bizar-dash/bizar-design/EXPLANATION.md +0 -307
- package/bizar-dash/bizar-design/INSTRUCTIONS.md +0 -149
- package/bizar-dash/bizar-design/canvas.html +0 -281
- package/bizar-dash/bizar-design/canvas.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/components.css +0 -1665
- package/bizar-dash/bizar-design/components.html +0 -557
- package/bizar-dash/bizar-design/components.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/desktop/agents.html +0 -74
- package/bizar-dash/bizar-design/desktop/agents.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/desktop/memory.html +0 -75
- package/bizar-dash/bizar-design/desktop/memory.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/desktop/metrics.html +0 -63
- package/bizar-dash/bizar-design/desktop/metrics.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/desktop/overview.html +0 -95
- package/bizar-dash/bizar-design/desktop/overview.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/desktop/settings.html +0 -70
- package/bizar-dash/bizar-design/desktop/settings.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/icons.svg +0 -44
- package/bizar-dash/bizar-design/index.html +0 -192
- package/bizar-dash/bizar-design/index.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/mobile/agents.html +0 -29
- package/bizar-dash/bizar-design/mobile/agents.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/mobile/memory.html +0 -28
- package/bizar-dash/bizar-design/mobile/memory.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/mobile/metrics.html +0 -29
- package/bizar-dash/bizar-design/mobile/metrics.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/mobile/overview.html +0 -33
- package/bizar-dash/bizar-design/mobile/overview.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/mobile/settings.html +0 -28
- package/bizar-dash/bizar-design/mobile/settings.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/prototype.js +0 -114
- package/bizar-dash/bizar-design/tokens.css +0 -106
- package/bizar-dash/dist/assets/vendor-CeHGtduv.js.map +0 -1
- package/bizar-dash/node_modules/.package-lock.json +0 -6
- package/bizar-dash/package-lock.json +0 -6
- package/bizar-dash/src/server/cline-sdk.mjs +0 -132
- package/bizar-dash/src/server/routes/cline-session-detail.mjs +0 -559
- package/bizar-dash/src/server/routes/cline-sessions.mjs +0 -291
- package/cli/commands/cline-cmd.mjs +0 -289
- package/cli/commands/validate.test.mjs +0 -344
- package/cli/doctor.test.mjs +0 -350
- package/config/cline.json.template +0 -342
- package/packages/sdk/src/client.ts +0 -188
- package/packages/sdk/src/cline-events.ts +0 -134
- package/packages/sdk/src/cline-types.ts +0 -66
- package/packages/sdk/src/cline.ts +0 -339
- package/packages/sdk/src/errors.ts +0 -129
- package/packages/sdk/src/events.ts +0 -153
- package/packages/sdk/src/types.ts +0 -176
- package/packages/sdk/tests/client.test.ts +0 -217
- package/packages/sdk/tests/errors.test.ts +0 -108
- package/packages/sdk/tests/events.test.ts +0 -139
- package/packages/sdk/tests/fixtures/fetch-mock.ts +0 -152
- package/packages/sdk/tests/fixtures/sse-mock.ts +0 -30
- package/plugins/bizar/ARCHITECTURE.md +0 -142
- package/plugins/bizar/CONSTRAINTS.md +0 -67
- package/plugins/bizar/LICENSE +0 -21
- package/plugins/bizar/README.md +0 -448
- package/plugins/bizar/index.ts +0 -872
- package/plugins/bizar/package.json +0 -39
- package/plugins/bizar/scripts/check-forbidden-imports.sh +0 -33
- package/plugins/bizar/src/background-state.ts +0 -641
- package/plugins/bizar/src/background.ts +0 -1806
- package/plugins/bizar/src/cline-runner.ts +0 -203
- package/plugins/bizar/src/clineruntime.ts +0 -227
- package/plugins/bizar/src/commands-impl.ts +0 -151
- package/plugins/bizar/src/commands.ts +0 -1799
- package/plugins/bizar/src/compaction.d.mts +0 -48
- package/plugins/bizar/src/compaction.mjs +0 -192
- package/plugins/bizar/src/dashboard-client.ts +0 -233
- package/plugins/bizar/src/event-stream.ts +0 -606
- package/plugins/bizar/src/fingerprint.ts +0 -120
- package/plugins/bizar/src/handoff.ts +0 -79
- package/plugins/bizar/src/hooks/memory-flush-on-compact.ts +0 -123
- package/plugins/bizar/src/hooks/memory-inject.ts +0 -247
- package/plugins/bizar/src/hooks/memory-write-on-end.ts +0 -188
- package/plugins/bizar/src/hooks/skill-curator.ts +0 -180
- package/plugins/bizar/src/http-client.ts +0 -467
- package/plugins/bizar/src/key-rotation.ts +0 -218
- package/plugins/bizar/src/logger.ts +0 -144
- package/plugins/bizar/src/loop-engineering.ts +0 -241
- package/plugins/bizar/src/loop.ts +0 -176
- package/plugins/bizar/src/mistake-recovery.ts +0 -98
- package/plugins/bizar/src/odin.ts +0 -227
- package/plugins/bizar/src/options.ts +0 -470
- package/plugins/bizar/src/plan-fs.ts +0 -323
- package/plugins/bizar/src/reasoning-clean.ts +0 -454
- package/plugins/bizar/src/report.ts +0 -178
- package/plugins/bizar/src/research-prompt.ts +0 -35
- package/plugins/bizar/src/serve-info.ts +0 -228
- package/plugins/bizar/src/serve.ts +0 -496
- package/plugins/bizar/src/settings.ts +0 -349
- package/plugins/bizar/src/state.ts +0 -298
- package/plugins/bizar/src/tool-discipline.ts +0 -105
- package/plugins/bizar/src/tools/agent-browser.ts +0 -315
- package/plugins/bizar/src/tools/bg-collect.ts +0 -131
- package/plugins/bizar/src/tools/bg-get-comments.ts +0 -266
- package/plugins/bizar/src/tools/bg-kill.ts +0 -116
- package/plugins/bizar/src/tools/bg-pause.ts +0 -99
- package/plugins/bizar/src/tools/bg-report-progress.ts +0 -115
- package/plugins/bizar/src/tools/bg-resume.ts +0 -94
- package/plugins/bizar/src/tools/bg-send-message.ts +0 -223
- package/plugins/bizar/src/tools/bg-spawn.ts +0 -502
- package/plugins/bizar/src/tools/bg-status.ts +0 -130
- package/plugins/bizar/src/tools/graph-query.ts +0 -278
- package/plugins/bizar/src/tools/loop-engineering.ts +0 -193
- package/plugins/bizar/src/tools/memory-list.ts +0 -43
- package/plugins/bizar/src/tools/memory-read.ts +0 -69
- package/plugins/bizar/src/tools/memory-search.ts +0 -47
- package/plugins/bizar/src/tools/memory-write.ts +0 -54
- package/plugins/bizar/src/tools/open-kb.ts +0 -198
- package/plugins/bizar/src/tools/plan-action.ts +0 -785
- package/plugins/bizar/src/tools/read-glyph-feedback.ts +0 -191
- package/plugins/bizar/src/tools/team-spawn.ts +0 -73
- package/plugins/bizar/src/tools/team-status.ts +0 -76
- package/plugins/bizar/src/tools/wait-for-feedback.ts +0 -415
- package/plugins/bizar/src/trajectory.ts +0 -104
- package/plugins/bizar/tests/README.md +0 -99
- package/plugins/bizar/tests/attach-handler-bug.test.ts +0 -169
- package/plugins/bizar/tests/background-state.test.ts +0 -277
- package/plugins/bizar/tests/background.test.ts +0 -402
- package/plugins/bizar/tests/block.test.ts +0 -195
- package/plugins/bizar/tests/canonical-key-order.test.ts +0 -75
- package/plugins/bizar/tests/clineruntime-config.test.ts +0 -283
- package/plugins/bizar/tests/commands-impl.test.ts +0 -316
- package/plugins/bizar/tests/commands.test.ts +0 -584
- package/plugins/bizar/tests/compaction.test.ts +0 -264
- package/plugins/bizar/tests/config.test.ts +0 -128
- package/plugins/bizar/tests/dashboard-client.test.ts +0 -159
- package/plugins/bizar/tests/dispose.test.ts +0 -336
- package/plugins/bizar/tests/event-stream.test.ts +0 -409
- package/plugins/bizar/tests/event.test.ts +0 -262
- package/plugins/bizar/tests/fingerprint.test.ts +0 -162
- package/plugins/bizar/tests/http-client.test.ts +0 -404
- package/plugins/bizar/tests/init-helpers.test.ts +0 -203
- package/plugins/bizar/tests/integration/slash-command.test.ts +0 -349
- package/plugins/bizar/tests/integration/tool-routing.test.ts +0 -98
- package/plugins/bizar/tests/key-rotation.test.ts +0 -396
- package/plugins/bizar/tests/loop-engineering.test.ts +0 -168
- package/plugins/bizar/tests/loop.test.ts +0 -397
- package/plugins/bizar/tests/memory-write-on-end.test.ts +0 -92
- package/plugins/bizar/tests/mistake-recovery.test.ts +0 -116
- package/plugins/bizar/tests/odin.test.ts +0 -125
- package/plugins/bizar/tests/options.test.ts +0 -329
- package/plugins/bizar/tests/reasoning-clean.test.ts +0 -422
- package/plugins/bizar/tests/safety.test.ts +0 -256
- package/plugins/bizar/tests/serve.test.ts +0 -339
- package/plugins/bizar/tests/settings.test.ts +0 -351
- package/plugins/bizar/tests/stall-think.test.ts +0 -750
- package/plugins/bizar/tests/state.test.ts +0 -276
- package/plugins/bizar/tests/tool-discipline.test.ts +0 -77
- package/plugins/bizar/tests/tools/agent-browser.test.ts +0 -98
- package/plugins/bizar/tests/tools/bg-collect.test.ts +0 -337
- package/plugins/bizar/tests/tools/bg-get-comments.test.ts +0 -485
- package/plugins/bizar/tests/tools/bg-kill.test.ts +0 -235
- package/plugins/bizar/tests/tools/bg-pause.test.ts +0 -61
- package/plugins/bizar/tests/tools/bg-report-progress.test.ts +0 -79
- package/plugins/bizar/tests/tools/bg-resume.test.ts +0 -40
- package/plugins/bizar/tests/tools/bg-send-message.test.ts +0 -116
- package/plugins/bizar/tests/tools/bg-spawn-delegation.test.ts +0 -147
- package/plugins/bizar/tests/tools/bg-spawn-http.test.ts +0 -233
- package/plugins/bizar/tests/tools/bg-spawn.test.ts +0 -311
- package/plugins/bizar/tests/tools/bg-status.test.ts +0 -217
- package/plugins/bizar/tests/tools/cline-runner.test.ts +0 -115
- package/plugins/bizar/tests/tools/plan-action.test.ts +0 -599
- package/plugins/bizar/tests/tools/read-glyph-feedback.test.ts +0 -253
- package/plugins/bizar/tests/tools/wait-for-feedback.test.ts +0 -390
- package/plugins/bizar/tests/update-deadlock.test.ts +0 -151
- package/plugins/bizar/tsconfig.json +0 -29
package/cli/provision.test.mjs
CHANGED
|
@@ -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
|
|
19
|
-
*
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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, '
|
|
35
|
-
: join(homedir(), '.
|
|
32
|
+
? join(process.env.APPDATA, 'claude')
|
|
33
|
+
: join(homedir(), '.claude');
|
|
36
34
|
}
|
|
37
|
-
return join(homedir(), '.
|
|
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
|
|
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 =
|
|
63
|
-
const agentsDir =
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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 =
|
|
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('
|
|
165
|
+
if (components.includes('settings-json')) parts.push('settings.json');
|
|
152
166
|
if (components.includes('bizar')) parts.push('.bizar/ folder');
|
|
153
|
-
if (components.includes('
|
|
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
|
-
//
|
|
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 ~/.
|
|
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 `~/.
|
|
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**: `
|
|
149
|
+
- **Model**: `claude-3-5-haiku` (via Claude Code — Anthropic 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**: `
|
|
156
|
+
- **Model**: `claude-3-5-haiku` (via Claude Code — Anthropic 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**: `
|
|
162
|
+
- **Model**: `claude-3-5-haiku` (via Claude Code — Anthropic 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**: `
|
|
168
|
+
- **Model**: `claude-3-5-haiku` (via Claude Code — Anthropic 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 `
|
|
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,
|
|
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) |
|
|
292
|
+
> | Upstream (Claude.ai) | Claude Code |
|
|
293
293
|
> |---|---|
|
|
294
|
-
> | `view` | `
|
|
295
|
-
> | `str_replace` | `
|
|
296
|
-
> | `create_file` | `
|
|
297
|
-
> | `bash_tool` | `
|
|
298
|
-
> | `web_search` | `
|
|
299
|
-
> | `web_fetch` | `
|
|
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
|
|
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` |
|
|
304
|
-
> | `skill` | `
|
|
305
|
-
> | `task` (subagent dispatch) | `
|
|
306
|
-
> | MCP servers | `semble` (codebase search) and any user-added servers in
|
|
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
|
|
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
|
|
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 ~/.
|
|
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
|
|
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 `~/.
|
|
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 → `~/.
|
|
449
|
-
- Self-improvement logging → `~/.
|
|
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
|
|