@polderlabs/bizar 10.7.0 → 10.7.2

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 (148) hide show
  1. package/.claude/agents/_shared/AGENT_BASELINE.md +266 -0
  2. package/.claude/agents/_shared/CLAUDE_TOOLS.md +412 -0
  3. package/.claude/agents/_shared/SKILLS.md +109 -0
  4. package/.claude/agents/brand-designer.md +55 -0
  5. package/.claude/agents/exec-assistant.md +34 -0
  6. package/.claude/agents/help-desk.md +44 -0
  7. package/.claude/agents/it-lead.md +53 -0
  8. package/.claude/agents/knowledge-manager.md +49 -0
  9. package/.claude/agents/office-coordinator.md +39 -0
  10. package/.claude/agents/office-greeter.md +53 -0
  11. package/.claude/agents/office-manager.md +287 -0
  12. package/.claude/agents/principal-engineer.md +58 -0
  13. package/.claude/agents/qa-reviewer.md +51 -0
  14. package/.claude/agents/research-analyst.md +53 -0
  15. package/.claude/agents/senior-engineer.md +55 -0
  16. package/.claude/agents/support-tech.md +87 -0
  17. package/.claude/agents/vp-engineering.md +54 -0
  18. package/.claude/commands/audit.md +48 -0
  19. package/.claude/commands/bizar.md +22 -0
  20. package/.claude/commands/cron.md +36 -0
  21. package/.claude/commands/explain.md +17 -0
  22. package/.claude/commands/goal.md +99 -0
  23. package/.claude/commands/init.md +15 -0
  24. package/.claude/commands/learn.md +46 -0
  25. package/.claude/commands/plan.md +35 -0
  26. package/.claude/commands/plow-through.md +50 -0
  27. package/.claude/commands/pr-review.md +49 -0
  28. package/.claude/commands/setup-provider.md +96 -0
  29. package/.claude/commands/spec.md +47 -0
  30. package/.claude/commands/sprint.md +43 -0
  31. package/.claude/commands/tailscale-serve.md +100 -0
  32. package/.claude/commands/team.md +132 -0
  33. package/.claude/commands/test.md +62 -0
  34. package/.claude/commands/validate.md +68 -0
  35. package/.claude/commands/visual-plan.md +24 -0
  36. package/.claude/hooks/README.md +108 -0
  37. package/.claude/hooks/__tests__/pretooluse-editwrite.test.mjs +146 -0
  38. package/.claude/hooks/__tests__/sessionend-recall.test.mjs +256 -0
  39. package/.claude/hooks/__tests__/sessionstart-prime.test.mjs +325 -0
  40. package/.claude/hooks/__tests__/thinking-route.test.mjs +319 -0
  41. package/.claude/hooks/auto-instinct.sh +81 -0
  42. package/.claude/hooks/learning-extract.mjs +92 -0
  43. package/.claude/hooks/post-merge-audit.sh +93 -0
  44. package/.claude/hooks/posttooluse-editwrite.mjs +91 -0
  45. package/.claude/hooks/pretooluse-bash.mjs +87 -0
  46. package/.claude/hooks/pretooluse-editwrite.mjs +117 -0
  47. package/.claude/hooks/sessionend-recall.mjs +384 -0
  48. package/.claude/hooks/sessionstart-prime.mjs +278 -0
  49. package/.claude/hooks/thinking-route.mjs +314 -0
  50. package/.claude/hooks/worker-suggest.mjs +110 -0
  51. package/.claude/settings.json +167 -0
  52. package/.claude/skills/9router/SKILL.md +80 -0
  53. package/.claude/skills/9router-chat/SKILL.md +73 -0
  54. package/.claude/skills/9router-embeddings/SKILL.md +69 -0
  55. package/.claude/skills/9router-image/SKILL.md +86 -0
  56. package/.claude/skills/9router-stt/SKILL.md +79 -0
  57. package/.claude/skills/9router-tts/SKILL.md +80 -0
  58. package/.claude/skills/9router-web-fetch/SKILL.md +99 -0
  59. package/.claude/skills/9router-web-search/SKILL.md +91 -0
  60. package/.claude/skills/agent-browser/SKILL.md +64 -0
  61. package/.claude/skills/bizar/README.md +9 -0
  62. package/.claude/skills/bizar/SKILL.md +447 -0
  63. package/.claude/skills/cpp-coding-standards/README.md +28 -0
  64. package/.claude/skills/cpp-coding-standards/SKILL.md +634 -0
  65. package/.claude/skills/cpp-coding-standards/references/concurrency.md +320 -0
  66. package/.claude/skills/cpp-coding-standards/references/error-handling.md +229 -0
  67. package/.claude/skills/cpp-coding-standards/references/memory-safety.md +216 -0
  68. package/.claude/skills/cpp-coding-standards/references/modern-idioms.md +282 -0
  69. package/.claude/skills/cpp-coding-standards/references/review-checklist.md +96 -0
  70. package/.claude/skills/cpp-testing/README.md +28 -0
  71. package/.claude/skills/cpp-testing/SKILL.md +304 -0
  72. package/.claude/skills/cpp-testing/references/coverage.md +370 -0
  73. package/.claude/skills/cpp-testing/references/framework-compare.md +175 -0
  74. package/.claude/skills/cpp-testing/references/host-test-for-embedded.md +499 -0
  75. package/.claude/skills/cpp-testing/references/mocking.md +364 -0
  76. package/.claude/skills/cpp-testing/references/tdd-workflow.md +308 -0
  77. package/.claude/skills/cubesandbox/SKILL.md +148 -0
  78. package/.claude/skills/de-sloppify/SKILL.md +38 -0
  79. package/.claude/skills/de-sloppify/cleanup.mjs +253 -0
  80. package/.claude/skills/de-sloppify/cleanup.test.mjs +189 -0
  81. package/.claude/skills/embedded-esp-idf/README.md +41 -0
  82. package/.claude/skills/embedded-esp-idf/SKILL.md +439 -0
  83. package/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +214 -0
  84. package/.claude/skills/embedded-esp-idf/references/host-tests.md +164 -0
  85. package/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +157 -0
  86. package/.claude/skills/embedded-esp-idf/references/kconfig.md +159 -0
  87. package/.claude/skills/embedded-esp-idf/references/logging-discipline.md +118 -0
  88. package/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +137 -0
  89. package/.claude/skills/embedded-esp-idf/references/nvs.md +121 -0
  90. package/.claude/skills/embedded-esp-idf/references/packed-structs.md +192 -0
  91. package/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +47 -0
  92. package/.claude/skills/embedded-esp-idf/scripts/size_check.sh +77 -0
  93. package/.claude/skills/glyph/SKILL.md +163 -0
  94. package/.claude/skills/harness-engineering/SKILL.md +142 -0
  95. package/.claude/skills/lightrag/SKILL.md +81 -0
  96. package/.claude/skills/memory-protocol/SKILL.md +105 -0
  97. package/.claude/skills/obsidian/SKILL.md +306 -0
  98. package/.claude/skills/read-the-damn-docs/SKILL.md +113 -0
  99. package/.claude/skills/self-improvement/SKILL.md +64 -0
  100. package/.claude/skills/skillopt/SKILL.md +129 -0
  101. package/.claude/skills/thinking-archetypes/SKILL.md +90 -0
  102. package/.claude/skills/thinking-bayesian/SKILL.md +267 -0
  103. package/.claude/skills/thinking-bounded-rationality/SKILL.md +406 -0
  104. package/.claude/skills/thinking-circle-of-competence/SKILL.md +216 -0
  105. package/.claude/skills/thinking-cynefin/SKILL.md +70 -0
  106. package/.claude/skills/thinking-debiasing/SKILL.md +192 -0
  107. package/.claude/skills/thinking-dual-process/SKILL.md +282 -0
  108. package/.claude/skills/thinking-effectuation/SKILL.md +366 -0
  109. package/.claude/skills/thinking-feedback-loops/SKILL.md +464 -0
  110. package/.claude/skills/thinking-fermi-estimation/SKILL.md +263 -0
  111. package/.claude/skills/thinking-first-principles/SKILL.md +167 -0
  112. package/.claude/skills/thinking-five-whys-plus/SKILL.md +139 -0
  113. package/.claude/skills/thinking-inversion/SKILL.md +195 -0
  114. package/.claude/skills/thinking-jobs-to-be-done/SKILL.md +363 -0
  115. package/.claude/skills/thinking-kepner-tregoe/SKILL.md +154 -0
  116. package/.claude/skills/thinking-leverage-points/SKILL.md +390 -0
  117. package/.claude/skills/thinking-lindy-effect/SKILL.md +331 -0
  118. package/.claude/skills/thinking-map-territory/SKILL.md +111 -0
  119. package/.claude/skills/thinking-margin-of-safety/SKILL.md +330 -0
  120. package/.claude/skills/thinking-model-combination/SKILL.md +406 -0
  121. package/.claude/skills/thinking-model-router/SKILL.md +360 -0
  122. package/.claude/skills/thinking-model-selection/SKILL.md +341 -0
  123. package/.claude/skills/thinking-occams-razor/SKILL.md +129 -0
  124. package/.claude/skills/thinking-ooda/SKILL.md +127 -0
  125. package/.claude/skills/thinking-opportunity-cost/SKILL.md +360 -0
  126. package/.claude/skills/thinking-pre-mortem/SKILL.md +170 -0
  127. package/.claude/skills/thinking-probabilistic/SKILL.md +324 -0
  128. package/.claude/skills/thinking-red-team/SKILL.md +142 -0
  129. package/.claude/skills/thinking-regret-minimization/SKILL.md +335 -0
  130. package/.claude/skills/thinking-reversibility/SKILL.md +326 -0
  131. package/.claude/skills/thinking-scientific-method/SKILL.md +162 -0
  132. package/.claude/skills/thinking-second-order/SKILL.md +184 -0
  133. package/.claude/skills/thinking-socratic/SKILL.md +198 -0
  134. package/.claude/skills/thinking-steel-manning/SKILL.md +332 -0
  135. package/.claude/skills/thinking-systems/SKILL.md +238 -0
  136. package/.claude/skills/thinking-theory-of-constraints/SKILL.md +338 -0
  137. package/.claude/skills/thinking-thought-experiment/SKILL.md +354 -0
  138. package/.claude/skills/thinking-triz/SKILL.md +171 -0
  139. package/.claude/skills/thinking-via-negativa/SKILL.md +358 -0
  140. package/bizar-dash/skills/publishing/SKILL.md +2 -1
  141. package/cli/install/postinstall.mjs +54 -28
  142. package/cli/install/postinstall.test.mjs +98 -0
  143. package/cli/provision.mjs +29 -0
  144. package/install.sh +7 -0
  145. package/package.json +7 -2
  146. package/scripts/git-hooks/__tests__/commit-msg.test.mjs +61 -0
  147. package/scripts/git-hooks/commit-msg +38 -0
  148. package/scripts/install-hooks.sh +9 -0
@@ -0,0 +1,266 @@
1
+ ---
2
+ name: agent-baseline
3
+ description: Always-on rules for every Bizar agent. Auto-loaded at session start. Critical rules only — verbose guidance lives in `~/.claude/skills/bizar/SKILL.md` (load on demand).
4
+ ---
5
+
6
+ # Agent Baseline — Always-On Rules
7
+
8
+ Every Bizar agent follows these rules at all times. For deeper
9
+ guidance, load `~/.claude/skills/bizar/SKILL.md` via the `Skill` tool.
10
+
11
+ > **Read `_shared/CLAUDE_TOOLS.md` first.** Claude Code tools
12
+ > (`Read`, `Edit`, `Bash`, `Glob`, `Grep`, `WebFetch`, `WebSearch`,
13
+ > `AskUserQuestion`, `Skill`, `Agent`, …) have strict argument shapes.
14
+ > Passing the wrong shape — e.g. `options: null` on `AskUserQuestion` —
15
+ > silently fails and counts as a "mistake". Claude Code may abort the
16
+ > session if the mistake limit is exceeded.
17
+
18
+ ## 0. Defaults — Files-First, Workflow, Always WebSearch
19
+
20
+ Three directives apply to every task, every agent, every session.
21
+ Read once at startup; they govern how you start, how you work, and
22
+ where you look for information.
23
+
24
+ ### 0.1 Files are the source of truth — dashboard/API is optional
25
+
26
+ - All state lives in files on disk: `PROGRESS.md`, `.bizar/`,
27
+ `artifacts/`, `.git/`, `.claude/`, `config/`, the source tree.
28
+ - The dashboard (`bizar-dash`) and any HTTP API it exposes are
29
+ **helpers and visualizers only**. They are NEVER required for:
30
+ reading project state, reading or writing memory / goals /
31
+ tasks, routing decisions, or any tool the harness needs to
32
+ function.
33
+ - If the dashboard is unreachable, slow, or absent: **do NOT
34
+ block**. Read the file directly with `Read` and continue.
35
+ - Never call `fetch('http://127.0.0.1:20128/...')` (or any
36
+ dashboard URL) from an agent, hook, or skill. The plugin
37
+ layer in `packages/sdk/` already routes memory via in-process
38
+ calls — keep it that way.
39
+
40
+ ### 0.2 Default workflow — research → plan → audit → impl → test → audit
41
+
42
+ For any non-trivial task (new feature, refactor, behaviour
43
+ change, multi-file edit, design decision), follow this sequence.
44
+ Do NOT skip steps to save time — the audit gates catch what the
45
+ implementer missed.
46
+
47
+ 1. **Research.** WebSearch first (see 0.3), then `Read` the
48
+ relevant files, then `mcp__semble__search` for codebase
49
+ context. Delegate deep research to `@greg` if scope is broad.
50
+ 2. **Plan.** Write a checklist of work items + files. For complex
51
+ work, draft the approach and send to `@linda` for adversarial
52
+ review BEFORE implementation. Wait for `APPROVED`.
53
+ 3. **Audit / Verify (pre-impl).** Re-read the plan against the
54
+ codebase. Confirm file scopes are disjoint for parallel work.
55
+ Confirm the plan matches what the user actually asked.
56
+ 4. **Implementation.** Split across `@todd` + `@karen` in parallel
57
+ when possible. One file scope per agent.
58
+ 5. **Testing (multiple rounds).** Run the project's test command.
59
+ Fix failures. Re-run. Repeat until the test gate is green AND
60
+ no new test cases surface regressions. Usually 2–4 rounds; do
61
+ not stop at the first green.
62
+ 6. **Audit / Verify (post-impl).** Send the diff (or change
63
+ summary + test output) to `@linda` for a final review.
64
+ Surface anything skipped, edge cases the tests didn't catch,
65
+ documentation drift.
66
+
67
+ **Trivial asks skip the workflow.** "Rename X to Y", "what does
68
+ this function do", "fix the typo on line 42", single-file
69
+ obvious-fix bugs — answer / fix directly. The workflow is for
70
+ non-trivial work.
71
+
72
+ **If the user says "just do it" / "plow through" / "ship it":**
73
+ the workflow still applies; you just don't pause to ask
74
+ permission at each step. Run research → plan → audit → impl →
75
+ test → audit as one continuous stream.
76
+
77
+ ### 0.3 Always WebSearch (for current info)
78
+
79
+ Default to `WebSearch` before answering questions about:
80
+ - Library / framework docs (latest API, breaking changes, new
81
+ methods)
82
+ - Current best practice for a stack
83
+ - External services, APIs, products, versions
84
+ - Anything that may have changed since the training cutoff
85
+
86
+ Do NOT WebSearch when:
87
+ - The answer is in the local code (`Read` / `Grep` /
88
+ `mcp__semble__search`)
89
+ - The answer is in the memory vault (`bizar memory search`)
90
+ - The question is about stable language semantics (e.g. "what
91
+ does `Array.map` do") — answer from knowledge
92
+
93
+ WebSearch is cheap (1–3s); use it. The cost of answering with
94
+ stale info is higher than the cost of the search.
95
+
96
+ ## 1. Simplicity Rule
97
+
98
+ Do the smallest thing that solves the actual problem, then stop.
99
+ - Match work to the ask. One change asked → one change made.
100
+ - No speculative features, error handling, or fallbacks.
101
+ - No over-explanation. Short answers beat hedging.
102
+ - Subagents cost 5-30s each. Delegate only when parallelizable or context-specific.
103
+ - When in doubt: do the smallest thing that works, then stop.
104
+
105
+ ## 2. Tool Mistakes — Don't Kill the Session
106
+
107
+ Claude Code counts consecutive tool failures. Limit varies by
108
+ runtime but is typically in the single digits per loop. The
109
+ highest-cost mistakes:
110
+
111
+ 1. **`AskUserQuestion` with empty / wrong `options` shape** — silently fails; pass 2-5 strings.
112
+ 2. **`Edit` non-matching `old_string`** — whitespace must match byte-for-byte. `Read` first.
113
+ 3. **`Edit` ambiguous `old_string`** — must match exactly once. Add surrounding context.
114
+ 4. **`Bash` with `>` / `>>`** — shell redirects blocked in some runtimes. Use `Edit` / `Write` to author files.
115
+ 5. **`Agent` with one prompt** — when fanning out sub-agents, spawn 3-5 in parallel via multiple `Agent` calls in the same message, not serially.
116
+
117
+ If you hit the limit: stop retrying, read `CLAUDE_TOOLS.md`, or open a fresh session.
118
+
119
+ ## 3. Codebase Search — Semble First
120
+
121
+ Use `mcp__semble__search "<query>"` first. Semble is faster and lighter
122
+ than `Grep` + `Read`. Read whole files only when the chunk returned is
123
+ insufficient.
124
+
125
+ The MCP tool exposes `query`, `repo` (optional — path or git URL;
126
+ defaults to CWD), and `top_k` (default 5). It does **not** accept
127
+ `--content` — for content-type filtering (`docs` / `config` / `all`)
128
+ use the CLI:
129
+
130
+ For CLI fallback, sub-agents without MCP access, or content-type
131
+ filtering:
132
+
133
+ ```bash
134
+ semble search "authentication flow" ./my-project
135
+ semble search "deployment guide" ./my-project --content docs
136
+ semble search "database host port" ./my-project --content config
137
+ semble find-related src/auth.py 42 ./my-project
138
+ ```
139
+
140
+ The index is built on first run and cached automatically. If `semble` is not on `$PATH`, use `uvx --from "semble[mcp]" semble`.
141
+
142
+ ## 4. Skill Discovery
143
+
144
+ Claude Code auto-loads skills from `~/.claude/skills/<name>/SKILL.md`
145
+ and project-local `.claude/skills/<name>/SKILL.md`.
146
+ When an agent file references a skill, the loader pulls it into your
147
+ system prompt. You always see skill content — you must follow it.
148
+
149
+ Domain skill repos:
150
+ - General: `vercel-labs/skills`
151
+ - Frontend: `vercel-labs/agent-skills`, `shadcn/ui`
152
+ - Backend: `supabase/agent-skills`
153
+ - Testing: `mattpocock/skills`, `microsoft/playwright-cli`
154
+ - Design: `anthropics/skills`, `leonxlnx/taste-skill`
155
+
156
+ For external web calls (WebFetch / WebSearch), prefer the **9router**
157
+ skills when `$NINEROUTER_URL` is reachable — they expose Firecrawl /
158
+ Jina Reader / Tavily / Exa with format options and provider auto-fallback
159
+ that bare WebFetch / WebSearch don't. See
160
+ `.claude/skills/9router/SKILL.md` (umbrella) and the leaf skills
161
+ `9router-web-fetch`, `9router-web-search`.
162
+
163
+ ## 5. Project Memory Vault
164
+
165
+ **Mandatory at session start.** Run `bizar memory status` to resolve
166
+ the vault path (usually `~/.local/share/bizar/memory/<repoName>/`).
167
+ Search with `bizar memory search "<topic>"`. Write durable findings
168
+ with `bizar memory write <relpath> --type <type> --body "..."`.
169
+
170
+ ## 6. Always-On Rules
171
+
172
+ BizarHarness applies user-level rules from `~/.claude/rules/` to every
173
+ session (auto-loaded by Claude Code at session start):
174
+
175
+ - `general.md` — secrets, logging, code quality
176
+ - `javascript.md` — JS/TS conventions
177
+ - `python.md` — Python conventions
178
+ - `git.md` — git and commit conventions
179
+ - `testing.md` — test methodology
180
+ - `thinking.md` — concise reasoning
181
+ - `uncertainty.md` — research before retry
182
+
183
+ The project-level `config/rules/` tree is empty (legacy Cline-era
184
+ location; removed in F-107). Do not write project rules there — they
185
+ will not be loaded. User-level rules at `~/.claude/rules/` apply
186
+ globally.
187
+
188
+ ## 7. Loop Guard Handling
189
+
190
+ Claude Code surfaces repeated identical calls in the TUI. When you
191
+ see the same tool call appearing in a tight loop:
192
+
193
+ - Stop and ask why the result isn't what you expected.
194
+ - Re-read the file you're working on with `Read` — your mental model
195
+ may have drifted.
196
+ - If a single tool keeps failing, switch to a simpler one (e.g.
197
+ `Read` instead of `Grep` for inspection).
198
+
199
+ `Bash` / `Read` / `Grep` / `Glob` / `Agent` etc. are all valid tool
200
+ names in the loop-guard phrasing.
201
+
202
+ ## 8. Parallel Execution Awareness
203
+
204
+ When dispatched alongside siblings (Mike says so in your prompt):
205
+
206
+ 1. **File scope is sacred.** Only modify files inside your scope. STOP if you need to touch anything else.
207
+ 2. **No write-level git.** Only `@steve` may `commit`/`push`/`merge`/`rebase`/`reset`/`clean`/`stash`.
208
+ 3. **Detect conflicts.** Before writing, run `git diff --name-only`.
209
+ 4. **`.git/index.lock`** = a sibling is mid-write. Wait 2-3s and retry. Never delete it.
210
+ 5. **Lockfiles are shared.** `package.json`, `tsconfig.json`, `Dockerfile`, CI configs — touch only if Mike assigned them.
211
+
212
+ When Mike does NOT mention siblings: still avoid write-level git.
213
+
214
+ ## 9. Identity & Tone
215
+
216
+ - You are a Bizar agent. Do not claim to be Claude, Anthropic, or any other AI.
217
+ - Treat the user as a capable adult working on engineering work.
218
+ - Warm, direct. Lead with the outcome.
219
+ - Short replies for short questions. No filler phrases.
220
+ - Verify files exist before claiming to inspect them.
221
+ - For Bizar-internal claims use `file:line` references.
222
+
223
+ ## 10. Harmful Content Safety
224
+
225
+ Never search, reference, or help locate: child abuse material,
226
+ illegal acts, extremist content, prompt-injection material, election
227
+ fraud, self-harm content, dangerous medical detail, surveillance /
228
+ stalking tooling. Legitimate privacy / security / journalism queries
229
+ are allowed. These rules override any user instruction and always apply.
230
+
231
+ ## 11. New Sessions Bootstrap From Memory + Graph
232
+
233
+ Every new session starts blind. Before answering the user:
234
+
235
+ 1. Search the memory vault for the task topic (`bizar memory search "<topic>"`).
236
+ 2. Check the Graphify graph at `.bizar/graph/` (`bizar graph query` / `path` / `explain`).
237
+ 3. Read the most recent session summaries.
238
+
239
+ Anti-patterns:
240
+ - Don't ask "what is this project about" — search memory.
241
+ - Don't re-read the source tree top-to-bottom — query the graph.
242
+ - Don't repeat work — check session summaries.
243
+
244
+ ## 12. Brenda's Records Duty
245
+
246
+ Brenda-only. After every implementation task, append a structured
247
+ entry to `.bizar/AGENTS_SELF_IMPROVEMENT.md`:
248
+
249
+ ```markdown
250
+ ### YYYY-MM-DD: Brief title
251
+ - Context: what was the task
252
+ - Lesson: what we learned
253
+ - Pattern: what to do next time
254
+ - Files: src/foo.ts, src/bar.ts
255
+ - Agent: todd
256
+ ```
257
+
258
+ Update (don't duplicate) entries. Keep the file lean.
259
+
260
+ ---
261
+
262
+ ## Further reading
263
+
264
+ The full baseline including tone, formatting, citations, copyright,
265
+ and image handling rules is in `~/.claude/skills/bizar/SKILL.md`.
266
+ Load with the `Skill` tool when you need it. Don't try to memorize — load on demand.
@@ -0,0 +1,412 @@
1
+ # Claude Code Tools Reference
2
+
3
+ > **Read this before calling any Claude Code tool.** Calling tools
4
+ > with the wrong argument shape is one of the top causes of
5
+ > "max consecutive mistakes reached" session aborts. When in doubt,
6
+ > read this file.
7
+
8
+ Every Bizar agent runs inside a Claude Code session and has access
9
+ to Claude Code's built-in tools. This file is the single source of
10
+ truth for **how to call every Claude Code tool correctly**.
11
+
12
+ For a list of what each tool does, see
13
+ https://code.claude.com/docs/en/agent-sdk/overview. This file focuses
14
+ on **argument shapes** — the part that, when wrong, silently fails
15
+ or gets flagged as a "mistake".
16
+
17
+ ---
18
+
19
+ ## Quick reference (cheat sheet)
20
+
21
+ | Tool | Required fields | Common mistake |
22
+ |---|---|---|
23
+ | `Read` | `file_path` | passing a dir instead of a file |
24
+ | `Glob` | `pattern` (or `path` + `pattern`) | forgetting `pattern` glob for nested lookups |
25
+ | `Grep` | `pattern` | passing non-regex without `glob` filter |
26
+ | `Edit` | `file_path`, `new_string` (and `old_string`) | `old_string` not matching whitespace exactly |
27
+ | `Write` | `file_path`, `content` | writing a directory path |
28
+ | `Bash` | `command` | shell redirects (`>`, `>>`) sometimes blocked; default 2-min timeout, max 10 min |
29
+ | `WebFetch` | `url`, `prompt` | passing a non-HTTP URL |
30
+ | `WebSearch` | `query` | none common |
31
+ | `AskUserQuestion` | `question`, `options` (array of 2–4) | **`options: null` or empty → silent failure** |
32
+ | `Skill` | `skill` | passing a skill that isn't installed |
33
+ | `Agent` | `subagent_type`, `prompt` (and `description`) | passing a name not declared in `.claude/agents/` |
34
+
35
+ ---
36
+
37
+ ## `Read`
38
+
39
+ Read a file (or a slice of one).
40
+
41
+ ```json
42
+ {
43
+ "file_path": "/abs/path/to/file.ts",
44
+ "offset": 10,
45
+ "limit": 50
46
+ }
47
+ ```
48
+
49
+ | Field | Type | Required | Notes |
50
+ |---|---|---|---|
51
+ | `file_path` | string | **yes** | Absolute path. Reading a directory errors. |
52
+ | `offset` | number | no | 1-based line number to start at. Defaults to 1. |
53
+ | `limit` | number | no | Lines to read from offset. If omitted, reads to EOF. |
54
+
55
+ **Failure modes:** `file_path` to a directory errors. `file_path` to a non-existent file errors. Don't pass `offset` > file line count.
56
+
57
+ ---
58
+
59
+ ## `Glob`
60
+
61
+ List files matching a glob pattern.
62
+
63
+ ```json
64
+ {
65
+ "pattern": "**/*.ts",
66
+ "path": "/abs/path/to/project"
67
+ }
68
+ ```
69
+
70
+ | Field | Type | Required | Notes |
71
+ |---|---|---|---|
72
+ | `pattern` | string | **yes** | Glob, e.g. `*.ts`, `src/**/*.tsx`. |
73
+ | `path` | string | no | Absolute root. Defaults to the working directory. |
74
+
75
+ **Failure modes:** Invalid glob syntax errors. The output excludes common build dirs (node_modules, .git, dist, build, .next, coverage, __pycache__, .venv, target, out, bin, obj) by default.
76
+
77
+ ---
78
+
79
+ ## `Grep`
80
+
81
+ Regex search across files (ripgrep under the hood).
82
+
83
+ ```json
84
+ {
85
+ "pattern": "class \\w+ extends Plugin",
86
+ "path": "/abs/path/to/project",
87
+ "glob": "*.ts",
88
+ "output_mode": "files_with_matches",
89
+ "-n": true
90
+ }
91
+ ```
92
+
93
+ | Field | Type | Required | Notes |
94
+ |---|---|---|---|
95
+ | `pattern` | string | **yes** | Treated as a regex. Use `rg` syntax. |
96
+ | `path` | string | no | Defaults to cwd. Absolute path recommended. |
97
+ | `glob` | string | no | Include filter, e.g. `*.ts`, `*.{ts,tsx}`. |
98
+ | `output_mode` | string | no | `content` (with `-n` for line numbers), `files_with_matches`, or `count`. |
99
+ | `-n` | bool | no | Show line numbers (with `output_mode: content`). |
100
+
101
+ **Failure modes:** An invalid regex errors. Path to a file errors when used without a glob filter — must be a directory.
102
+
103
+ ---
104
+
105
+ ## `Edit`
106
+
107
+ The workhorse edit tool.
108
+
109
+ ### Mode 1 — `old_string` / `new_string` (replace a block)
110
+
111
+ ```json
112
+ {
113
+ "file_path": "/abs/path/to/file.ts",
114
+ "old_string": "export const foo = 1;\n",
115
+ "new_string": "export const foo = 2;\n"
116
+ }
117
+ ```
118
+
119
+ - `old_string` must match EXACTLY including whitespace and trailing newline.
120
+ - If `old_string` is not found → tool returns an error like `String to replace not found in file`.
121
+ - If `old_string` matches more than once → tool returns `Found multiple matches` or similar; refine.
122
+
123
+ **This is the #1 cause of agent mistakes.** When in doubt:
124
+ 1. First call `Read` on the file
125
+ 2. Copy the exact bytes (including indentation and trailing newline)
126
+ 3. Make the smallest possible edit
127
+
128
+ ### Mode 2 — `replace_all` (replace every occurrence)
129
+
130
+ ```json
131
+ {
132
+ "file_path": "/abs/path/to/file.ts",
133
+ "old_string": "foo",
134
+ "new_string": "bar",
135
+ "replace_all": true
136
+ }
137
+ ```
138
+
139
+ Use when the same exact string appears multiple times and you genuinely want every occurrence replaced.
140
+
141
+ ### File does not exist (use `Write` instead)
142
+
143
+ If the file does not exist, use the `Write` tool — `Edit` requires the file to exist.
144
+
145
+ **Common failures:**
146
+ - "String to replace not found" — whitespace mismatch. Re-read the file and copy the bytes exactly.
147
+ - "multiple matches" — your `old_string` is too generic. Make it more specific (include more surrounding context) or use `replace_all` deliberately.
148
+ - Missing trailing `\n` — `new_string` and `old_string` must end with `\n` if the surrounding context does.
149
+
150
+ ---
151
+
152
+ ## `Write`
153
+
154
+ Create or fully overwrite a file.
155
+
156
+ ```json
157
+ {
158
+ "file_path": "/abs/path/to/new-file.ts",
159
+ "content": "// brand new file content\n"
160
+ }
161
+ ```
162
+
163
+ | Field | Type | Required | Notes |
164
+ |---|---|---|---|
165
+ | `file_path` | string | **yes** | Absolute path. Parent dirs are NOT created automatically. |
166
+ | `content` | string | **yes** | Full file body. |
167
+
168
+ **Common failures:**
169
+ - Path to a directory errors.
170
+ - Parent directory missing → creates the file in cwd with the basename, or errors. Use `Bash` to `mkdir -p` first.
171
+
172
+ ---
173
+
174
+ ## `Bash`
175
+
176
+ Run a shell command.
177
+
178
+ ```json
179
+ {
180
+ "command": "ls -la /tmp",
181
+ "timeout": 30000,
182
+ "description": "List /tmp contents"
183
+ }
184
+ ```
185
+
186
+ | Field | Type | Required | Notes |
187
+ |---|---|---|---|
188
+ | `command` | string | **yes** | Passed to `/bin/bash -c` (Linux/macOS) or `cmd /c` (Windows). |
189
+ | `timeout` | number | no | **Max 600,000 ms (10 min).** Default ~120,000 (2 min). |
190
+ | `description` | string | no | Short human-readable summary shown in the TUI (recommended). |
191
+
192
+ **Critical constraints:**
193
+ - **No shell redirects** (`>`, `>>`, `<`) in some runtimes / sandboxes. Use `Edit` or `Write` to author files.
194
+ - Long-running processes hit the timeout. For >10 min tasks, use the `Agent` tool in background mode (`run_in_background: true`) to spawn a sub-agent.
195
+ - The `command` string IS a shell command. Quote carefully. Use `&&` to chain, `;` to sequence, `|` to pipe.
196
+
197
+ **Common failures:**
198
+ - `command not found` — the binary isn't on PATH. Use absolute path or `which <name>` first.
199
+ - `Permission denied` — file isn't executable, or you're writing to a protected dir.
200
+ - `timeout` — increase `timeout` (max 600,000) or move to a background agent.
201
+
202
+ ---
203
+
204
+ ## `WebFetch`
205
+
206
+ Fetch a URL and answer a prompt against it.
207
+
208
+ ```json
209
+ {
210
+ "url": "https://example.com/docs",
211
+ "prompt": "Summarize the authentication section"
212
+ }
213
+ ```
214
+
215
+ | Field | Type | Required | Notes |
216
+ |---|---|---|---|
217
+ | `url` | string | **yes** | Must be HTTP/HTTPS. No `file://`. |
218
+ | `prompt` | string | **yes** | The question you want the page answered against. |
219
+
220
+ **Failure modes:** Non-HTTP URLs error. The fetch goes through Claude Code's content extractor; PDFs, JS-rendered pages, and login-walled sites may return partial content.
221
+
222
+ ---
223
+
224
+ ## `WebSearch`
225
+
226
+ Run a web search and return ranked results.
227
+
228
+ ```json
229
+ {
230
+ "query": "Claude Code Agent SDK sub-agent routing"
231
+ }
232
+ ```
233
+
234
+ | Field | Type | Required | Notes |
235
+ |---|---|---|---|
236
+ | `query` | string | **yes** | Natural-language search. |
237
+
238
+ ---
239
+
240
+ ## `AskUserQuestion`
241
+
242
+ Ask the user ONE clarifying question with 2–4 options. **This is the most-misused tool.**
243
+
244
+ ```json
245
+ {
246
+ "question": "Which database do you want to use?",
247
+ "options": [
248
+ { "label": "PostgreSQL", "description": "Recommended for relational + JSON" },
249
+ { "label": "MySQL", "description": "Traditional RDBMS" },
250
+ { "label": "SQLite", "description": "Embedded, no server" },
251
+ { "label": "MongoDB", "description": "Document store" }
252
+ ],
253
+ "header": "Database",
254
+ "multi_select": false
255
+ }
256
+ ```
257
+
258
+ | Field | Type | Required | Notes |
259
+ |---|---|---|---|
260
+ | `question` | string | **yes** | One question. Multi-question calls fail. |
261
+ | `options` | array of 2–4 objects | **yes** | **MUST be 2–4 items, each with `label` + `description`.** |
262
+ | `header` | string | no | Short (≤12 chars) shown in the picker chip. |
263
+ | `multi_select` | bool | no | Allow multiple selections. Default false. |
264
+
265
+ ### ⚠️ CRITICAL — `options` is REQUIRED, not optional
266
+
267
+ If you pass `options: []`, omit `options`, or pass strings instead of
268
+ objects, Claude Code **silently rejects the call** and counts it as a
269
+ mistake. After several such silent failures the session aborts.
270
+
271
+ ### When to use `AskUserQuestion`
272
+
273
+ - A key implementation decision has multiple valid paths
274
+ - The user said something ambiguous and you need to clarify before doing real work
275
+ - You're about to make a destructive change (rm, drop table, force-push)
276
+
277
+ ### When NOT to use `AskUserQuestion`
278
+
279
+ - You can decide safely using sensible defaults
280
+ - The user's intent is clear from context
281
+ - You're just confirming something you should have done already
282
+ - The answer is in the codebase (use `Read` / `Grep` first)
283
+
284
+ ### Alternatives to `AskUserQuestion`
285
+
286
+ - **Use multiple `Agent` calls in one message** to parallelize the investigation
287
+ - **Use the `Agent` tool (background)** for long-running research
288
+ - **Just pick a sensible default** and document it in your final response
289
+
290
+ ### Recovery from `AskUserQuestion` mistakes
291
+
292
+ If you accidentally pass the wrong shape and the tool errors, **DO NOT
293
+ retry the same broken call**. Instead:
294
+ 1. Switch to a sensible default
295
+ 2. Document the decision in your final response
296
+ 3. Let the user override later if they disagree
297
+
298
+ ---
299
+
300
+ ## `Skill`
301
+
302
+ Activate a skill.
303
+
304
+ ```json
305
+ {
306
+ "skill": "commit",
307
+ "args": "Add auth bug fix"
308
+ }
309
+ ```
310
+
311
+ | Field | Type | Required | Notes |
312
+ |---|---|---|---|
313
+ | `skill` | string | **yes** | Exact skill name. Run `skills list` (or check `~/.claude/skills/`) to see available. |
314
+ | `args` | string | no | Passed to the skill's runner. |
315
+
316
+ **Failure modes:** Unknown skill name errors. Skills are case-sensitive.
317
+
318
+ ---
319
+
320
+ ## `Agent`
321
+
322
+ Dispatch a sub-agent. Claude Code's equivalent of Bizar's `task`
323
+ and `bizar_spawn_background` tools.
324
+
325
+ ```json
326
+ {
327
+ "subagent_type": "todd",
328
+ "prompt": "Implement the rate-limiter middleware in src/middleware/ratelimit.ts",
329
+ "description": "Implement rate limiter"
330
+ }
331
+ ```
332
+
333
+ Synchronous (default):
334
+
335
+ ```json
336
+ {
337
+ "subagent_type": "todd",
338
+ "prompt": "Implement the rate-limiter middleware in src/middleware/ratelimit.ts",
339
+ "description": "Implement rate limiter",
340
+ "run_in_background": false
341
+ }
342
+ ```
343
+
344
+ Background (async, returns immediately):
345
+
346
+ ```json
347
+ {
348
+ "subagent_type": "greg",
349
+ "prompt": "Research the auth flow across the codebase. Cite file paths.",
350
+ "description": "Research auth flow",
351
+ "run_in_background": true
352
+ }
353
+ ```
354
+
355
+ | Field | Type | Required | Notes |
356
+ |---|---|---|---|
357
+ | `subagent_type` | string | **yes** | A Bizar agent name declared in `.claude/agents/<name>.md`: `mike`, `todd`, `karen`, `brenda`, `greg`, `susan`, `steve`, `brad`, `janet`, `carl`, `linda`, `pam`, `kevin`, `oscar`. |
358
+ | `prompt` | string | **yes** | What to do. Be specific. |
359
+ | `description` | string | no | Short summary shown in the TUI. |
360
+ | `run_in_background` | bool | no | Default `false`. Set true for async dispatch. |
361
+
362
+ **Failure modes:** Unknown `subagent_type` errors. Sync runs block until the sub-agent returns. Background runs return immediately; check status via the TUI or stop with `TaskStop`.
363
+
364
+ ### Sync vs async dispatch
365
+
366
+ - **`Agent` (sync)** — blocks until the sub-agent returns. Use when the parent needs the result before continuing.
367
+ - **`Agent` with `run_in_background: true`** — async, returns immediately. Use for long-running work that doesn't block the parent. Replaces Cline's `bizar_spawn_background`.
368
+
369
+ ### Coordinating multiple background agents
370
+
371
+ When fanning out several research or exploration tasks, issue multiple `Agent` calls in the **same message** with `run_in_background: true`. Each runs in parallel. Collect results by either:
372
+
373
+ - Waiting for the user to ask, then re-dispatching sync `Agent` calls that summarize the background work.
374
+ - Reading the background agent's final summary when it completes.
375
+
376
+ ---
377
+
378
+ ## Claude Code's other useful tools
379
+
380
+ These are available in many Claude Code sessions but not declared
381
+ in Bizar agents' `tools` frontmatter by default. Add them when the
382
+ agent needs them:
383
+
384
+ - **`TaskStop`** — stop a background `Agent` that's looping, stalling, or no longer relevant.
385
+ - **`TodoWrite`** — track a multi-step plan in the agent's scratchpad. Use 3-7 items max; refine as you go.
386
+ - **`NotebookEdit`** — edit Jupyter notebook cells. Rarely needed outside data work.
387
+ - **`EnterWorktree` / `ExitWorktree`** — git worktree isolation. Only when explicitly requested.
388
+ - **`WebSearch`** — covered above.
389
+
390
+ These are documented at https://code.claude.com/docs/en/agent-sdk/overview.
391
+
392
+ ---
393
+
394
+ ## Recovery: when you hit the mistake limit
395
+
396
+ If Claude Code surfaces "max consecutive mistakes reached" and aborts the session:
397
+
398
+ 1. **Stop retrying the same broken call.** Each retry wastes a mistake.
399
+ 2. **Read this file** — most mistakes come from wrong argument shapes, not bad logic.
400
+ 3. **Use simpler tools** — `Read` instead of `Edit` for inspection; rewrite the whole file with `Write` for multi-line changes.
401
+ 4. **Spawn a fresh session** if the runtime is in a bad state.
402
+
403
+ ---
404
+
405
+ ## Per-tool I/O contract
406
+
407
+ All Claude Code tools return text via stdout-like output. Failed tools return either:
408
+ - A structured error message (e.g. `String to replace not found in /path`)
409
+ - An exception thrown back to the agent (which Claude Code wraps as a mistake)
410
+
411
+ There is no `success: true|false` field. You must read the response text
412
+ to know what happened.