@polderlabs/bizar 10.25.2 → 10.28.0-beta.1
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/README.md +133 -91
- package/cli/bin.mjs +0 -60
- package/cli/commands/hook.mjs +0 -7
- package/cli/commands/openkan.mjs +11 -3
- package/cli/commands/setup-provider.mjs +4 -2
- package/cli/commands/tools.mjs +19 -6
- package/cli/commands/upgrade-defaults.mjs +6 -33
- package/cli/commands/util.mjs +1 -1
- package/cli/commands/validate.mjs +32 -26
- package/cli/commands/worker.mjs +30 -21
- package/cli/config-paths.mjs +0 -12
- package/cli/doctor.mjs +33 -23
- package/cli/install/interactive-setup.mjs +5 -4
- package/cli/openkan.mjs +57 -8
- package/cli/provision.mjs +50 -187
- package/config/agents/model-assignment.mjs +45 -97
- package/config/claude/CLAUDE.md +213 -0
- package/config/claude/agents/_shared/SKILLS.md +4 -2
- package/config/claude/agents/bizar-accessibility-architect.md +1 -0
- package/config/claude/agents/bizar-agent-evaluator.md +1 -0
- package/config/claude/agents/bizar-architect.md +1 -0
- package/config/claude/agents/bizar-build-error-resolver.md +1 -0
- package/config/claude/agents/bizar-chief-of-staff.md +1 -0
- package/config/claude/agents/bizar-code-architect.md +1 -0
- package/config/claude/agents/bizar-code-explorer.md +1 -0
- package/config/claude/agents/bizar-code-reviewer.md +1 -0
- package/config/claude/agents/bizar-code-simplifier.md +1 -0
- package/config/claude/agents/bizar-comment-analyzer.md +1 -0
- package/config/claude/agents/bizar-conversation-analyzer.md +1 -0
- package/config/claude/agents/bizar-cpp-build-resolver.md +1 -0
- package/config/claude/agents/bizar-cpp-reviewer.md +1 -0
- package/config/claude/agents/bizar-csharp-reviewer.md +1 -0
- package/config/claude/agents/bizar-dart-build-resolver.md +1 -0
- package/config/claude/agents/bizar-database-reviewer.md +1 -0
- package/config/claude/agents/bizar-django-build-resolver.md +1 -0
- package/config/claude/agents/bizar-django-reviewer.md +1 -0
- package/config/claude/agents/bizar-doc-updater.md +1 -0
- package/config/claude/agents/bizar-docs-lookup.md +1 -0
- package/config/claude/agents/bizar-end-to-end-runner.md +1 -0
- package/config/claude/agents/bizar-fastapi-reviewer.md +1 -0
- package/config/claude/agents/bizar-flutter-reviewer.md +1 -0
- package/config/claude/agents/bizar-fsharp-reviewer.md +1 -0
- package/config/claude/agents/bizar-gan-evaluator.md +1 -0
- package/config/claude/agents/bizar-gan-generator.md +1 -0
- package/config/claude/agents/bizar-gan-planner.md +1 -0
- package/config/claude/agents/bizar-go-build-resolver.md +1 -0
- package/config/claude/agents/bizar-go-reviewer.md +1 -0
- package/config/claude/agents/bizar-harmonyos-app-resolver.md +1 -0
- package/config/claude/agents/bizar-harness-optimizer.md +1 -0
- package/config/claude/agents/bizar-healthcare-reviewer.md +1 -0
- package/config/claude/agents/bizar-homelab-architect.md +1 -0
- package/config/claude/agents/bizar-java-build-resolver.md +1 -0
- package/config/claude/agents/bizar-java-reviewer.md +1 -0
- package/config/claude/agents/bizar-kotlin-build-resolver.md +1 -0
- package/config/claude/agents/bizar-kotlin-reviewer.md +1 -0
- package/config/claude/agents/bizar-loop-operator.md +1 -0
- package/config/claude/agents/bizar-marketing-agent.md +1 -0
- package/config/claude/agents/bizar-mle-reviewer.md +1 -0
- package/config/claude/agents/bizar-network-architect.md +1 -0
- package/config/claude/agents/bizar-network-config-reviewer.md +1 -0
- package/config/claude/agents/bizar-network-troubleshooter.md +1 -0
- package/config/claude/agents/bizar-opensource-forker.md +1 -0
- package/config/claude/agents/bizar-opensource-packager.md +1 -0
- package/config/claude/agents/bizar-opensource-sanitizer.md +1 -0
- package/config/claude/agents/bizar-performance-optimizer.md +1 -0
- package/config/claude/agents/bizar-php-reviewer.md +1 -0
- package/config/claude/agents/bizar-planner.md +1 -0
- package/config/claude/agents/bizar-pr-test-analyzer.md +1 -0
- package/config/claude/agents/bizar-python-reviewer.md +1 -0
- package/config/claude/agents/bizar-pytorch-build-resolver.md +1 -0
- package/config/claude/agents/bizar-rag-pipeline-reviewer.md +1 -0
- package/config/claude/agents/bizar-react-build-resolver.md +1 -0
- package/config/claude/agents/bizar-react-reviewer.md +1 -0
- package/config/claude/agents/bizar-refactor-cleaner.md +1 -0
- package/config/claude/agents/bizar-rust-build-resolver.md +1 -0
- package/config/claude/agents/bizar-rust-reviewer.md +1 -0
- package/config/claude/agents/bizar-security-reviewer.md +1 -0
- package/config/claude/agents/bizar-seo-specialist.md +1 -0
- package/config/claude/agents/bizar-silent-failure-hunter.md +1 -0
- package/config/claude/agents/bizar-spec-miner.md +1 -0
- package/config/claude/agents/bizar-swift-build-resolver.md +1 -0
- package/config/claude/agents/bizar-swift-reviewer.md +1 -0
- package/config/claude/agents/bizar-tdd-guide.md +1 -0
- package/config/claude/agents/bizar-type-design-analyzer.md +1 -0
- package/config/claude/agents/bizar-typescript-reviewer.md +1 -0
- package/config/claude/agents/bizar-vue-reviewer.md +1 -0
- package/config/claude/agents/office-greeter.md +1 -1
- package/config/claude/agents/office-manager.md +66 -32
- package/config/claude/agents/plan-architect.md +12 -12
- package/config/claude/agents/planner.md +18 -15
- package/config/claude/agents/qa-reviewer.md +14 -14
- package/config/claude/commands/bizplan-heavy.md +8 -0
- package/config/claude/commands/bizplan-light.md +8 -0
- package/config/claude/commands/bizplan.md +8 -0
- package/config/claude/commands/setup-provider.md +8 -2
- package/config/claude/hooks/README.md +14 -2
- package/config/claude/hooks/keyword-router.mjs +5 -3
- package/config/claude/hooks/persistent-mode.mjs +82 -32
- package/config/claude/hooks/worker-suggest.mjs +5 -5
- package/config/claude/hooks/workflow-route-guard.mjs +4 -3
- package/config/claude/settings.json +12 -1
- package/config/skills/autopilot/SKILL.md +33 -19
- package/config/skills/bizar/README.md +9 -0
- package/config/skills/bizar/SKILL.md +48 -0
- package/config/skills/bizplan/SKILL.md +334 -0
- package/config/skills/{ralplan → bizplan}/references/pre-mortem.md +10 -6
- package/config/skills/cancel/SKILL.md +12 -10
- package/config/skills/deep-interview/SKILL.md +8 -9
- package/config/skills/ralph/SKILL.md +19 -8
- package/config/skills/ultragoal/SKILL.md +101 -79
- package/config/skills/ultraqa/SKILL.md +17 -8
- package/config/skills/ultrawork/SKILL.md +17 -8
- package/config/skills/verify/SKILL.md +15 -7
- package/config/workflows/bizar-debug.js +21 -30
- package/config/workflows/bizar-implement.js +20 -30
- package/config/workflows/bizar-research.js +18 -29
- package/config/workflows/lib/dispatch.js +219 -998
- package/config/workflows/ultracode-research.js +18 -28
- package/config/workflows/ultracode-review.js +17 -27
- package/config/workflows/ultracode.js +19 -29
- package/package.json +6 -7
- package/packages/sdk/dist/autonomy/outcome-record.d.ts +1 -1
- package/packages/sdk/dist/autonomy/outcome-record.js +1 -1
- package/packages/sdk/dist/bench/auto-reduction.d.ts +3 -3
- package/packages/sdk/dist/bench/auto-reduction.js +3 -3
- package/packages/sdk/dist/handoff/bizplan.d.ts +191 -0
- package/packages/sdk/dist/handoff/bizplan.js +256 -0
- package/packages/sdk/dist/index.d.ts +2 -1
- package/packages/sdk/dist/index.js +6 -3
- package/packages/sdk/dist/mcp/bizplan.d.ts +36 -0
- package/packages/sdk/dist/mcp/bizplan.js +43 -0
- package/packages/sdk/dist/mcp/server.js +32 -23
- package/packages/sdk/dist/release/known-good-releases.d.ts +7 -0
- package/packages/sdk/dist/release/known-good-releases.js +43 -1
- package/packages/sdk/dist/version.d.ts +1 -1
- package/packages/sdk/dist/version.js +1 -1
- package/packages/sdk/package.json +6 -1
- package/cli/commands/model.mjs +0 -189
- package/cli/commands/models.mjs +0 -2808
- package/cli/commands/tier.mjs +0 -159
- package/cli/commands/workflow-gc.mjs +0 -221
- package/cli/commands/workflow.mjs +0 -347
- package/cli/core/ultragoal-state.mjs +0 -535
- package/cli/core/workflow-state.mjs +0 -630
- package/config/claude/commands/plan.md +0 -21
- package/config/claude/commands/ralplan.md +0 -8
- package/config/claude/hooks/agent-model-guard.mjs +0 -304
- package/config/claude/hooks/sessionstart-model-sync.mjs +0 -312
- package/config/claude/hooks/thinking-route.mjs +0 -311
- package/config/skills/ralplan/SKILL.md +0 -126
- package/packages/sdk/dist/handoff/ralplan.d.ts +0 -86
- package/packages/sdk/dist/handoff/ralplan.js +0 -94
- package/packages/sdk/dist/router/agent-model-registry.d.ts +0 -323
- package/packages/sdk/dist/router/agent-model-registry.js +0 -492
- package/packages/sdk/dist/router/codemod-intent.d.ts +0 -68
- package/packages/sdk/dist/router/codemod-intent.js +0 -112
- package/packages/sdk/dist/router/dispatch-evidence.d.ts +0 -176
- package/packages/sdk/dist/router/dispatch-evidence.js +0 -505
- package/packages/sdk/dist/router/failover-mirror.mjs +0 -315
- package/packages/sdk/dist/router/failover.d.ts +0 -188
- package/packages/sdk/dist/router/failover.js +0 -255
- package/packages/sdk/dist/router/index.d.ts +0 -176
- package/packages/sdk/dist/router/index.js +0 -238
- package/packages/sdk/dist/router/model-profile.d.ts +0 -229
- package/packages/sdk/dist/router/model-profile.js +0 -199
- package/packages/sdk/dist/router/model-router.d.ts +0 -113
- package/packages/sdk/dist/router/model-router.js +0 -268
- package/packages/sdk/dist/router/outcome-learner.d.ts +0 -180
- package/packages/sdk/dist/router/outcome-learner.js +0 -506
- package/packages/sdk/dist/router/q-learning-router.d.ts +0 -83
- package/packages/sdk/dist/router/q-learning-router.js +0 -277
- package/packages/sdk/dist/router/select-dispatch-model.d.ts +0 -227
- package/packages/sdk/dist/router/select-dispatch-model.js +0 -532
package/README.md
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
<img src="docs/assets/bizar-banner.svg" alt="Bizar: guarded autonomy for Claude Code" width="100%" />
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@polderlabs/bizar)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
[](https://docs.anthropic.com/en/docs/claude-code)
|
|
8
|
+
[](https://github.com/PolderLabsVOF/BizarHarness/releases)
|
|
9
|
+

|
|
10
|
+
[](https://www.npmjs.com/package/@polderlabs/openkan)
|
|
11
11
|
|
|
12
12
|
### Guarded autonomy for Claude Code
|
|
13
13
|
|
|
14
14
|
Choose your models once. Give Claude Code real work. Bizar supplies the routing,
|
|
15
15
|
specialists, guardrails, and evidence to carry it through responsibly.
|
|
16
16
|
|
|
17
|
-
`
|
|
17
|
+
`85 agents` · `85 skills` · `37 commands` · `21-tool MCP server`
|
|
18
18
|
|
|
19
19
|
</div>
|
|
20
20
|
|
|
@@ -35,47 +35,74 @@ the project you happen to be working on.
|
|
|
35
35
|
|
|
36
36
|
| You want | Bizar provides |
|
|
37
37
|
| --- | --- |
|
|
38
|
-
| A clean way to begin | A guided installer and
|
|
39
|
-
| Your own gateway models |
|
|
38
|
+
| A clean way to begin | A guided installer and a static four-alias dispatch surface |
|
|
39
|
+
| Your own gateway models | Four native aliases (`haiku`/`sonnet`/`opus`/`fable`) with OmniRoute handling ordered failover between configured full IDs |
|
|
40
40
|
| Useful parallel work | Isolated worktrees, scoped tasks, and specialist roles |
|
|
41
41
|
| Fewer surprises | Explicit safety checks for releases, publication, deployment, pushes, and destructive operations |
|
|
42
42
|
| Confidence at the end | Tests, architecture checks, E2E checks, and evidence-aware handoff |
|
|
43
43
|
|
|
44
|
-
##
|
|
44
|
+
## Before you install
|
|
45
|
+
|
|
46
|
+
<table>
|
|
47
|
+
<tr>
|
|
48
|
+
<td width="50%"><strong>Claude Code</strong><br />Bizar adds its integration to your user-level Claude Code configuration. Install Claude Code with Anthropic's installer first.</td>
|
|
49
|
+
<td width="50%"><strong>Node.js 22+</strong><br />OpenKan requires Node.js 22 or newer. Bizar and OpenKan install from npm.</td>
|
|
50
|
+
</tr>
|
|
51
|
+
<tr>
|
|
52
|
+
<td width="50%"><strong>OmniRoute</strong><br />Configure a gateway endpoint, API key, and model ID. OmniRoute resolves the full model IDs behind Bizar's four aliases and handles ordered failover.</td>
|
|
53
|
+
<td width="50%"><strong>Git</strong><br />Needed for isolated worktrees and normal project history. Bizar does not require a persistent daemon.</td>
|
|
54
|
+
</tr>
|
|
55
|
+
</table>
|
|
56
|
+
|
|
57
|
+
```mermaid
|
|
58
|
+
flowchart LR
|
|
59
|
+
CC[Claude Code] --> B[Bizar]
|
|
60
|
+
B --> OR[OmniRoute gateway]
|
|
61
|
+
OR --> M[Configured model IDs]
|
|
62
|
+
B --> OK[OpenKan]
|
|
63
|
+
OK --> S[.ok workspace]
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Configure OmniRoute once before installing Bizar. The command writes provider
|
|
67
|
+
settings to Claude Code and preserves existing hooks, permissions, and MCP
|
|
68
|
+
servers.
|
|
69
|
+
|
|
70
|
+
```sh
|
|
71
|
+
bizar setup-provider --gateway https://your-gateway.example/v1 --key "$YOUR_API_KEY" --model your/model-id
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Install Bizar
|
|
45
75
|
|
|
46
|
-
Install Bizar globally
|
|
47
|
-
|
|
76
|
+
Install Bizar globally and its Claude Code integration. Bizar dispatches
|
|
77
|
+
through four static aliases: `haiku`, `sonnet`, `opus`, and `fable`. OmniRoute
|
|
78
|
+
maps each alias to configured full model IDs and applies ordered failover.
|
|
48
79
|
|
|
49
80
|
```sh
|
|
50
81
|
npm install -g @polderlabs/bizar
|
|
51
82
|
bizar install
|
|
52
|
-
bizar models
|
|
53
83
|
```
|
|
54
84
|
|
|
55
|
-
Restart Claude Code after installation. The installer adds Bizar's agents,
|
|
56
|
-
default OpenKan planning runtime to
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
It preserves your configured gateway endpoint and credential values during a
|
|
60
|
-
clean reinstall.
|
|
85
|
+
Restart Claude Code after installation. The installer adds Bizar's agents,
|
|
86
|
+
skills, commands, hooks, settings, and the default OpenKan planning runtime to
|
|
87
|
+
your user-level Claude configuration. It preserves your configured gateway
|
|
88
|
+
endpoint and credentials during a clean reinstall.
|
|
61
89
|
|
|
62
|
-
On a new interactive install, Bizar also asks
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
90
|
+
On a new interactive install, Bizar also asks whether Claude Code agent teams
|
|
91
|
+
should be enabled, the OpenKan install directory, and whether the current
|
|
92
|
+
project should receive a `.ok/` workspace. OpenKan is installed from npm as
|
|
93
|
+
`@polderlabs/openkan@latest`; its package-owned agent and skill are
|
|
94
|
+
installed into the same Claude configuration. Use `bizar install --yes` for
|
|
95
|
+
CI or a prompt-free refresh.
|
|
68
96
|
|
|
69
97
|
For a completely fresh Bizar-managed Claude setup while retaining endpoint and
|
|
70
98
|
authentication settings:
|
|
71
99
|
|
|
72
100
|
```sh
|
|
73
101
|
bizar install --force
|
|
74
|
-
bizar models
|
|
75
102
|
```
|
|
76
103
|
|
|
77
104
|
Then open any repository in Claude Code and describe the outcome you want.
|
|
78
|
-
Mike
|
|
105
|
+
Mike, the Bizar coordinator, handles the rest.
|
|
79
106
|
|
|
80
107
|
> **Tip:** Run `bizar doctor` whenever you want to verify that the global
|
|
81
108
|
> install, Claude settings, hooks, skills, agents, and provider connection are
|
|
@@ -105,66 +132,87 @@ obvious edits stay small; larger requests get only the structure they need.
|
|
|
105
132
|
Writing agents work in Git worktrees, while read-only research stays light and
|
|
106
133
|
foregrounded.
|
|
107
134
|
|
|
108
|
-
##
|
|
135
|
+
## OmniRoute model aliases
|
|
109
136
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
the
|
|
137
|
+
Bizar dispatches through four static native aliases: `haiku`, `sonnet`,
|
|
138
|
+
`opus`, `fable`. Claude Code's native per-call `model` field accepts one of
|
|
139
|
+
these aliases. OmniRoute handles ordered failover between the configured full
|
|
140
|
+
gateway IDs for the chosen alias, so the operator never picks a picker-style
|
|
141
|
+
gateway ID per agent at this layer. There is no `bizar models` picker, no
|
|
142
|
+
`model-router.json`, no `userSelected` block, and no Agent-model-guard hook.
|
|
113
143
|
|
|
114
|
-
|
|
115
|
-
~/.claude/model-router.json
|
|
116
|
-
```
|
|
144
|
+
The four aliases are the entire dispatch surface:
|
|
117
145
|
|
|
118
|
-
|
|
119
|
-
|
|
146
|
+
| Alias | Use it for |
|
|
147
|
+
| --- | --- |
|
|
148
|
+
| `haiku` | Trivial, economical micro-edits |
|
|
149
|
+
| `sonnet` | Ordinary implementation, research, and planning |
|
|
150
|
+
| `opus` | Architecture, debugging, adversarial review, and high-risk work |
|
|
151
|
+
| `fable` | Explicit Anthropic OpenAI-compatible surfaces |
|
|
152
|
+
|
|
153
|
+
Workflow scripts (`config/workflows/*.js`) inline a tiny `dispatchAgent`
|
|
154
|
+
wrapper that picks the alias from a static policy; agent definitions stay
|
|
155
|
+
model-agnostic so the harness, not the agent, owns alias selection.
|
|
120
156
|
|
|
121
157
|
```mermaid
|
|
122
158
|
flowchart TD
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
Definitions --> Team["Agent-team teammates"]
|
|
159
|
+
Policy["Static alias policy\n(office-manager.md + workflow routeModel)"] --> Aliases["haiku · sonnet · opus · fable"]
|
|
160
|
+
Aliases --> OmniRoute["OmniRoute ordered failover\nper configured full ID"]
|
|
161
|
+
OmniRoute --> Agent["Subagents"]
|
|
162
|
+
OmniRoute --> Workflow["Workflow workers"]
|
|
163
|
+
OmniRoute --> Team["Agent-team teammates"]
|
|
129
164
|
```
|
|
130
165
|
|
|
131
|
-
Claude Code's native per-call model field has a small alias vocabulary. Bizar
|
|
132
|
-
avoids making that vocabulary a limitation: it projects each selected gateway
|
|
133
|
-
model into a global subagent definition whose frontmatter contains the full
|
|
134
|
-
model ID. The agent, workflow, and team routes use that definition. The four
|
|
135
|
-
native aliases are compatibility shortcuts only; they do not enable an
|
|
136
|
-
unselected provider or reduce your selected-model pool to four choices.
|
|
137
|
-
|
|
138
166
|
Useful inspection commands:
|
|
139
167
|
|
|
140
168
|
```sh
|
|
141
|
-
bizar models --list
|
|
142
|
-
bizar models --agent-types --json
|
|
143
|
-
bizar models explain todd
|
|
144
169
|
bizar doctor
|
|
145
170
|
```
|
|
146
171
|
|
|
172
|
+
## OpenKan owns durable work state
|
|
173
|
+
|
|
174
|
+
OpenKan is Bizar's default planning and progression system. Bizar orchestrates
|
|
175
|
+
the work; OpenKan stores project-local tasks, plans, PRDs, goals, and evidence
|
|
176
|
+
under `.ok/`. Bizar talks to OpenKan through the supported `ok` CLI boundary,
|
|
177
|
+
so OpenKan can evolve independently.
|
|
178
|
+
|
|
179
|
+
```mermaid
|
|
180
|
+
flowchart LR
|
|
181
|
+
R[Repository] --> I[ok init]
|
|
182
|
+
I --> O[.ok workspace]
|
|
183
|
+
O --> T[ok task]
|
|
184
|
+
O --> P[ok plan]
|
|
185
|
+
O --> G[ok prd]
|
|
186
|
+
B[Bizar agents and hooks] --> T
|
|
187
|
+
B --> P
|
|
188
|
+
B --> G
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
The installer can create an `.ok/` workspace for the current project. In an
|
|
192
|
+
existing repository, run `ok init`. Use `ok task`, `ok plan`, and `ok prd` as
|
|
193
|
+
the canonical commands. On OpenKan v0.5.0 and later, `ok` replaces the legacy
|
|
194
|
+
`openkan` command.
|
|
195
|
+
|
|
196
|
+
| Need | Command |
|
|
197
|
+
| --- | --- |
|
|
198
|
+
| Install or refresh OpenKan | `bizar openkan install` |
|
|
199
|
+
| Create project state | `ok init` |
|
|
200
|
+
| Track scoped work | `ok task` |
|
|
201
|
+
| Track plans and goals | `ok plan` and `ok prd` |
|
|
202
|
+
|
|
147
203
|
## A specialist bench, not a generic swarm
|
|
148
204
|
|
|
149
|
-
Bizar ships
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
worktrees, and implementation practice.
|
|
205
|
+
Bizar ships 85 agent definitions and 85 skill packs for architecture,
|
|
206
|
+
accessibility, security, testing, documentation, performance, build repair,
|
|
207
|
+
operations, planning, debugging, review, worktrees, and implementation
|
|
208
|
+
practice.
|
|
154
209
|
|
|
155
210
|
The coordinator selects specialists when their expertise reduces a concrete
|
|
156
|
-
risk. It does not create parallel workers merely to look busy.
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
Core coordination Specialist coverage
|
|
162
|
-
───────────────── ──────────────────────────────────
|
|
163
|
-
Mike · research · plan Architecture · accessibility · security
|
|
164
|
-
Implementation · review Build repair · tests · documentation
|
|
165
|
-
Verification · integration Frameworks · performance · operations
|
|
166
|
-
Evaluation · product and domain analysis
|
|
167
|
-
```
|
|
211
|
+
risk. It does not create parallel workers merely to look busy.
|
|
212
|
+
|
|
213
|
+
| Coordination | Specialist coverage |
|
|
214
|
+
| --- | --- |
|
|
215
|
+
| Research, planning, implementation, review, verification | Architecture, accessibility, security, tests, documentation, performance, build repair, operations, and domain analysis |
|
|
168
216
|
|
|
169
217
|
## Guardrails that stay out of the way
|
|
170
218
|
|
|
@@ -186,25 +234,10 @@ point where an external or difficult-to-reverse decision belongs to you.
|
|
|
186
234
|
|
|
187
235
|
## What gets installed
|
|
188
236
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
├── commands/ 39 slash-command surfaces
|
|
194
|
-
├── hooks/ routing, lifecycle, safety, evidence, and quality hooks
|
|
195
|
-
├── rules/ focused guidance for common development work
|
|
196
|
-
├── workflows/ native workflow definitions
|
|
197
|
-
├── settings.json Bizar-managed Claude Code integration
|
|
198
|
-
└── model-router.json operator-selected model state
|
|
199
|
-
|
|
200
|
-
~/.config/bizar/
|
|
201
|
-
├── installed.json install record
|
|
202
|
-
├── openkan/ managed @polderlabs/openkan npm runtime
|
|
203
|
-
├── openkan-install.json selected OpenKan home/package settings
|
|
204
|
-
├── evidence/ local dispatch and verification evidence
|
|
205
|
-
├── telemetry/ local routing and rejected-action feedback
|
|
206
|
-
└── worktree-queue.json completed worktree integration queue
|
|
207
|
-
```
|
|
237
|
+
| Location | Contents |
|
|
238
|
+
| --- | --- |
|
|
239
|
+
| `~/.claude/` | 85 agent definitions, 85 skills, 37 command surfaces, hooks, rules, workflows, and managed settings |
|
|
240
|
+
| `~/.config/bizar/` | Install record, managed OpenKan runtime, evidence, telemetry, and completed-worktree queue |
|
|
208
241
|
|
|
209
242
|
`bizar control` is a machine-readable command boundary for optional external
|
|
210
243
|
interfaces. Bizar deliberately does not include an embedded browser control
|
|
@@ -217,7 +250,6 @@ plane, background daemon, or general-purpose note vault.
|
|
|
217
250
|
| `bizar install` | Install or refresh Bizar, OpenKan, and the global Claude configuration |
|
|
218
251
|
| `bizar openkan install` | Refresh the managed `@polderlabs/openkan` npm runtime and its agent/skill |
|
|
219
252
|
| `bizar openkan init` | Initialise `.ok/` planning state in the current project |
|
|
220
|
-
| `bizar models` | Discover and select the models Bizar may dispatch |
|
|
221
253
|
| `bizar doctor` | Diagnose the global installation and provider connectivity |
|
|
222
254
|
| `bizar validate` | Run an install-focused health check |
|
|
223
255
|
| `ok task` | Inspect or coordinate scoped worktree tasks (OpenKan-native) |
|
|
@@ -255,6 +287,10 @@ make check
|
|
|
255
287
|
|
|
256
288
|
- [Documentation index](docs/INDEX.md)
|
|
257
289
|
- [Architecture](docs/architecture.md)
|
|
290
|
+
- [Branching model](docs/branches.md) — `master` (stable) · `beta` · `dev` (nightly)
|
|
291
|
+
- [Versioning rules](docs/versioning.md) — per-branch semver + conventional commits
|
|
292
|
+
- [Development workflow](docs/development.md) — local dev + promotion + manual builds
|
|
293
|
+
- [npm Trusted Publishing setup](docs/trusted-publishing.md) — one-time operator config
|
|
258
294
|
- [Model routing decisions](docs/decisions/)
|
|
259
295
|
- [Durable project progress, plans, and goals](.ok/)
|
|
260
296
|
- [MIT license](LICENSE)
|
|
@@ -262,3 +298,9 @@ make check
|
|
|
262
298
|
## License
|
|
263
299
|
|
|
264
300
|
MIT
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
<div align="center">
|
|
305
|
+
<a href="https://polderlabs.io/"><img src="docs/assets/sponsored-by-polderlabs.svg" alt="Sponsored by PolderLabs" width="100%" /></a>
|
|
306
|
+
</div>
|
package/cli/bin.mjs
CHANGED
|
@@ -108,7 +108,6 @@ function showHelp() {
|
|
|
108
108
|
artifact Toggle global browser completion artifacts
|
|
109
109
|
learn Manage bounded global preferences and project lessons
|
|
110
110
|
tools Inventory installed agents, skills, hooks, commands, and MCP tools
|
|
111
|
-
tier Explain the explicit configured model tier for a task
|
|
112
111
|
upgrade-defaults Reapply safe Bizar-owned Claude defaults
|
|
113
112
|
backup Create / list / verify / delete backups of BizarHarness state
|
|
114
113
|
restore Restore BizarHarness from a backup
|
|
@@ -132,16 +131,13 @@ function showHelp() {
|
|
|
132
131
|
goals <subcommand> OpenKan PRDs, goals, and milestones
|
|
133
132
|
claim <subcommand> OpenKan task lease shortcut
|
|
134
133
|
control <subcommand> Machine-readable agents/tasks/plans/goals/sessions/messages API
|
|
135
|
-
workflow <subcommand> Session-bound autopilot workflow state
|
|
136
134
|
hook <name> Run a portable Claude Code hook
|
|
137
135
|
worktree-merge <branch> Merge a feature branch with archive tag (no work lost)
|
|
138
136
|
worker <subcommand> Run an exact-model Claude process worker in a worktree
|
|
139
|
-
models Configure the global model picker and Models.dev metadata
|
|
140
137
|
evidence <subcommand> Inspect model-routing evidence
|
|
141
138
|
improve <subcommand> Propose and verify bounded self-edits
|
|
142
139
|
sandbox <subcommand> Manage local execution sandboxes
|
|
143
140
|
explain-run <id> Explain a recorded run
|
|
144
|
-
model Deprecated alias for models
|
|
145
141
|
|
|
146
142
|
Examples:
|
|
147
143
|
bizar install
|
|
@@ -452,22 +448,6 @@ async function main() {
|
|
|
452
448
|
break;
|
|
453
449
|
}
|
|
454
450
|
|
|
455
|
-
case 'models': {
|
|
456
|
-
const mod = await importCommand('models');
|
|
457
|
-
if (!mod) {
|
|
458
|
-
console.error(chalk.red(` ✗ Could not load models command module`));
|
|
459
|
-
process.exit(EXIT_ERROR);
|
|
460
|
-
return;
|
|
461
|
-
}
|
|
462
|
-
dbg('loaded command module:', 'models');
|
|
463
|
-
const found = await mod.run(cmd, cmdArgs, isHelpRequest);
|
|
464
|
-
if (found === false) {
|
|
465
|
-
console.error(chalk.red(` ✗ Usage: bizar models [--list|--set|--clear|--json] — run 'bizar models --help'`));
|
|
466
|
-
process.exit(EXIT_USAGE);
|
|
467
|
-
}
|
|
468
|
-
break;
|
|
469
|
-
}
|
|
470
|
-
|
|
471
451
|
case 'artifact': {
|
|
472
452
|
const mod = await importCommand('artifact');
|
|
473
453
|
if (!mod) { process.exit(EXIT_ERROR); return; }
|
|
@@ -483,7 +463,6 @@ async function main() {
|
|
|
483
463
|
}
|
|
484
464
|
|
|
485
465
|
case 'tools':
|
|
486
|
-
case 'tier':
|
|
487
466
|
case 'upgrade-defaults': {
|
|
488
467
|
const mod = await importCommand(cmd);
|
|
489
468
|
if (!mod) { process.exit(EXIT_ERROR); return; }
|
|
@@ -615,45 +594,6 @@ async function main() {
|
|
|
615
594
|
break;
|
|
616
595
|
}
|
|
617
596
|
|
|
618
|
-
case 'model': {
|
|
619
|
-
// Deprecated alias. Routes to the original `model.mjs` so the
|
|
620
|
-
// legacy JSON shape (`{ providers: { ... }, total: N }`) and table
|
|
621
|
-
// output keep working for existing scripts and tests. New code
|
|
622
|
-
// should use `bizar models` (see `case 'models'`).
|
|
623
|
-
const mod = await importCommand('model');
|
|
624
|
-
if (!mod) {
|
|
625
|
-
console.error(chalk.red(` ✗ Could not load model command module`));
|
|
626
|
-
process.exit(EXIT_ERROR);
|
|
627
|
-
return;
|
|
628
|
-
}
|
|
629
|
-
dbg('loaded command module (deprecated alias):', 'model');
|
|
630
|
-
if (!isHelpRequest) {
|
|
631
|
-
console.error(chalk.yellow(' ! `bizar model` is deprecated; use `bizar models` for the new picker surface.'));
|
|
632
|
-
}
|
|
633
|
-
const found = await mod.run(cmd, cmdArgs, isHelpRequest);
|
|
634
|
-
if (found === false) {
|
|
635
|
-
console.error(chalk.red(` ✗ Usage: bizar model <subcommand> — run 'bizar model --help'`));
|
|
636
|
-
process.exit(EXIT_USAGE);
|
|
637
|
-
}
|
|
638
|
-
break;
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
case 'workflow': {
|
|
642
|
-
const mod = await importCommand('workflow');
|
|
643
|
-
if (!mod) {
|
|
644
|
-
console.error(chalk.red(` ✗ Could not load workflow command module`));
|
|
645
|
-
process.exit(EXIT_ERROR);
|
|
646
|
-
return;
|
|
647
|
-
}
|
|
648
|
-
dbg('loaded command module:', 'workflow');
|
|
649
|
-
const found = await mod.run(cmd, cmdArgs, isHelpRequest);
|
|
650
|
-
if (found === false) {
|
|
651
|
-
console.error(chalk.red(` ✗ Usage: bizar workflow <subcommand> — run 'bizar workflow --help'`));
|
|
652
|
-
process.exit(EXIT_USAGE);
|
|
653
|
-
}
|
|
654
|
-
break;
|
|
655
|
-
}
|
|
656
|
-
|
|
657
597
|
case 'hook': {
|
|
658
598
|
const mod = await importCommand('hook');
|
|
659
599
|
if (!mod) {
|
package/cli/commands/hook.mjs
CHANGED
|
@@ -18,14 +18,12 @@ const HOOK_ROOT = resolve(PACKAGE_ROOT, 'config', 'claude', 'hooks');
|
|
|
18
18
|
const PRETOOL_SAFETY_LEAVES = new Set([
|
|
19
19
|
'pretooluse-editwrite', 'path-ownership-guard',
|
|
20
20
|
'pretooluse-bash', 'git-workflow-guard',
|
|
21
|
-
'agent-model-guard',
|
|
22
21
|
'workflow-route-guard',
|
|
23
22
|
]);
|
|
24
23
|
|
|
25
24
|
export const HOOK_PROGRAMS = Object.freeze({
|
|
26
25
|
'advisor-context': 'advisor-context.mjs',
|
|
27
26
|
'agent-grounding': 'agent-grounding.mjs',
|
|
28
|
-
'agent-model-guard': 'agent-model-guard.mjs',
|
|
29
27
|
'content-style-guard': 'content-style-guard.mjs',
|
|
30
28
|
'completion-artifact': 'completion-artifact.mjs',
|
|
31
29
|
'control-inbox': 'control-inbox.mjs',
|
|
@@ -40,11 +38,9 @@ export const HOOK_PROGRAMS = Object.freeze({
|
|
|
40
38
|
'pretooluse-bash': 'pretooluse-bash.mjs',
|
|
41
39
|
'pretooluse-editwrite': 'pretooluse-editwrite.mjs',
|
|
42
40
|
'sessionend-recall': 'sessionend-recall.mjs',
|
|
43
|
-
'sessionstart-model-sync': 'sessionstart-model-sync.mjs',
|
|
44
41
|
'sessionstart-prime': 'sessionstart-prime.mjs',
|
|
45
42
|
'simplify-guard': 'simplify-guard.mjs',
|
|
46
43
|
telemetry: 'telemetry.mjs',
|
|
47
|
-
'thinking-route': 'thinking-route.mjs',
|
|
48
44
|
'team-lifecycle': 'team-lifecycle.mjs',
|
|
49
45
|
'verify-deliverables': 'verify-deliverables.mjs',
|
|
50
46
|
'worker-suggest': 'worker-suggest.mjs',
|
|
@@ -59,12 +55,10 @@ export const EVENT_CHAINS = Object.freeze({
|
|
|
59
55
|
'keyword-router',
|
|
60
56
|
'workflow-route-guard',
|
|
61
57
|
'worker-suggest',
|
|
62
|
-
'thinking-route',
|
|
63
58
|
'telemetry',
|
|
64
59
|
]),
|
|
65
60
|
'session-start': Object.freeze([
|
|
66
61
|
'control-inbox',
|
|
67
|
-
'sessionstart-model-sync',
|
|
68
62
|
'sessionstart-prime',
|
|
69
63
|
'persistent-mode',
|
|
70
64
|
'telemetry',
|
|
@@ -238,7 +232,6 @@ export function selectEventChain(eventKey, input = '') {
|
|
|
238
232
|
if (toolName === 'Bash') {
|
|
239
233
|
return ['workflow-route-guard', 'pretooluse-bash', 'git-workflow-guard'];
|
|
240
234
|
}
|
|
241
|
-
if (toolName === 'Agent') return ['workflow-route-guard', 'agent-model-guard'];
|
|
242
235
|
return [];
|
|
243
236
|
}
|
|
244
237
|
|
package/cli/commands/openkan.mjs
CHANGED
|
@@ -19,6 +19,9 @@ Usage:
|
|
|
19
19
|
ok prd <add|list|show|update> Manage PRDs, goals, and milestones
|
|
20
20
|
ok doctor Validate the .ok/ workspace
|
|
21
21
|
bizar openkan dashboard [args...] Forward to the OpenKan dashboard CLI
|
|
22
|
+
(legacy openkan.mjs on pre-v0.5.0
|
|
23
|
+
releases; ok serve on v0.5.0+ where
|
|
24
|
+
the legacy binary is retired)
|
|
22
25
|
|
|
23
26
|
Canonical commands are \`ok task\`, \`ok plan\`, and \`ok prd\`; they use this
|
|
24
27
|
same OpenKan workspace. The Bizar planning aliases remain compatibility-only.
|
|
@@ -29,11 +32,16 @@ feature/progress files for live planning.
|
|
|
29
32
|
|
|
30
33
|
function runDashboard(args) {
|
|
31
34
|
const launcher = resolveOpenKanDashboard();
|
|
35
|
+
// OpenKan v0.5.0 dropped the legacy `openkan` dashboard launcher. The
|
|
36
|
+
// dashboard now ships as `ok serve`; route to that subcommand when the
|
|
37
|
+
// resolved launcher is the `ok` binary instead of `openkan.mjs`.
|
|
38
|
+
const isOkLauncher = launcher.endsWith('ok.mjs') || launcher.endsWith('ok.ts');
|
|
39
|
+
const launcherArgs = isOkLauncher ? ['serve', ...args] : args;
|
|
32
40
|
const command = launcher.endsWith('.ts')
|
|
33
|
-
? [process.execPath, '--experimental-strip-types', launcher, ...
|
|
41
|
+
? [process.execPath, '--experimental-strip-types', launcher, ...launcherArgs]
|
|
34
42
|
: launcher.endsWith('.mjs')
|
|
35
|
-
? [process.execPath, launcher, ...
|
|
36
|
-
: [launcher, ...
|
|
43
|
+
? [process.execPath, launcher, ...launcherArgs]
|
|
44
|
+
: [launcher, ...launcherArgs];
|
|
37
45
|
const result = spawnSync(command[0], command.slice(1), { cwd: process.cwd(), encoding: 'utf8', shell: false });
|
|
38
46
|
if (result.error) throw result.error;
|
|
39
47
|
print({ ok: result.status === 0, status: result.status ?? 1, stdout: result.stdout || '', stderr: result.stderr || '' });
|
|
@@ -43,7 +43,9 @@ export function updateProviderSettings(current, options) {
|
|
|
43
43
|
const next = { ...current, env: { ...(current.env || {}) } };
|
|
44
44
|
if (options.gateway !== undefined) {
|
|
45
45
|
next.env.ANTHROPIC_BASE_URL = options.gateway;
|
|
46
|
-
|
|
46
|
+
// Legacy compatibility: drop any pre-existing router-URL mirror so the
|
|
47
|
+
// install surface converges on a single provider URL.
|
|
48
|
+
delete next.env.BIZAR_MODEL_ROUTER_URL;
|
|
47
49
|
}
|
|
48
50
|
if (options.key !== undefined) next.env.ANTHROPIC_AUTH_TOKEN = options.key;
|
|
49
51
|
if (options.model !== undefined) next.env.ANTHROPIC_MODEL = options.model;
|
|
@@ -87,7 +89,7 @@ export async function runSetupProvider(args = []) {
|
|
|
87
89
|
|
|
88
90
|
if (options.list) {
|
|
89
91
|
console.log(` Settings: ${path}`);
|
|
90
|
-
console.log(` Gateway: ${current.env?.ANTHROPIC_BASE_URL ||
|
|
92
|
+
console.log(` Gateway: ${current.env?.ANTHROPIC_BASE_URL || '(Anthropic default)'}`);
|
|
91
93
|
console.log(` Model: ${current.env?.ANTHROPIC_MODEL || '(Claude Code default)'}`);
|
|
92
94
|
console.log(` API key: ${redact(current.env?.ANTHROPIC_AUTH_TOKEN || current.env?.ANTHROPIC_API_KEY)}`);
|
|
93
95
|
return { ok: true, path, settings: current };
|
package/cli/commands/tools.mjs
CHANGED
|
@@ -15,7 +15,7 @@ import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
|
15
15
|
import { join, resolve } from 'node:path';
|
|
16
16
|
import { fileURLToPath } from 'node:url';
|
|
17
17
|
|
|
18
|
-
import { resolveClaudeConfigDir
|
|
18
|
+
import { resolveClaudeConfigDir } from '../config-paths.mjs';
|
|
19
19
|
const __filename = fileURLToPath(import.meta.url);
|
|
20
20
|
const __dirname = resolve(__filename, '..', '..');
|
|
21
21
|
const CLAUDE_DIR = resolveClaudeConfigDir();
|
|
@@ -80,8 +80,6 @@ export async function runTools(cmdArgs) {
|
|
|
80
80
|
|
|
81
81
|
const settingsPath = join(CLAUDE_DIR, 'settings.json');
|
|
82
82
|
const hasSettings = existsSync(settingsPath);
|
|
83
|
-
const modelRouterPath = resolveGlobalModelRouter();
|
|
84
|
-
const hasModelRouter = existsSync(modelRouterPath);
|
|
85
83
|
|
|
86
84
|
const summary = {
|
|
87
85
|
userLevel: CLAUDE_DIR,
|
|
@@ -92,7 +90,6 @@ export async function runTools(cmdArgs) {
|
|
|
92
90
|
wiredCommands,
|
|
93
91
|
mcpTools,
|
|
94
92
|
settings: { path: settingsPath, present: hasSettings },
|
|
95
|
-
modelRouter: { path: modelRouterPath, present: hasModelRouter },
|
|
96
93
|
};
|
|
97
94
|
|
|
98
95
|
if (asJson) {
|
|
@@ -118,8 +115,24 @@ export async function runTools(cmdArgs) {
|
|
|
118
115
|
section(`wired bizar commands (${wiredCommands.length})`, wiredCommands.map((c) => 'bizar ' + c));
|
|
119
116
|
console.log(chalk.bold('\n settings'));
|
|
120
117
|
console.log(` ${hasSettings ? '✓' : '✗'} ${settingsPath}`);
|
|
121
|
-
|
|
122
|
-
|
|
118
|
+
if (hasSettings) {
|
|
119
|
+
try {
|
|
120
|
+
const parsed = JSON.parse(readFileSync(settingsPath, 'utf8'));
|
|
121
|
+
const env = (parsed && parsed.env) || {};
|
|
122
|
+
const aliases = {
|
|
123
|
+
sonnet: env.ANTHROPIC_DEFAULT_SONNET_MODEL,
|
|
124
|
+
haiku: env.ANTHROPIC_DEFAULT_HAIKU_MODEL,
|
|
125
|
+
opus: env.ANTHROPIC_DEFAULT_OPUS_MODEL,
|
|
126
|
+
fable: env.ANTHROPIC_DEFAULT_FABLE_MODEL,
|
|
127
|
+
};
|
|
128
|
+
console.log(chalk.bold(' alias map'));
|
|
129
|
+
for (const [key, value] of Object.entries(aliases)) {
|
|
130
|
+
console.log(` ${key.padEnd(8)} → ${value || '(unset)'}`);
|
|
131
|
+
}
|
|
132
|
+
const model = parsed?.model;
|
|
133
|
+
if (model) console.log(chalk.dim(` default model: ${model}`));
|
|
134
|
+
} catch { /* ignore malformed settings */ }
|
|
135
|
+
}
|
|
123
136
|
}
|
|
124
137
|
|
|
125
138
|
export async function run(name, args, isHelpRequest) {
|
|
@@ -35,42 +35,18 @@
|
|
|
35
35
|
import chalk from 'chalk';
|
|
36
36
|
import { existsSync, readFileSync, writeFileSync, copyFileSync } from 'node:fs';
|
|
37
37
|
import { join } from 'node:path';
|
|
38
|
-
import { resolveClaudeConfigDir
|
|
39
|
-
import { configuredFallbackModels } from './models.mjs';
|
|
38
|
+
import { resolveClaudeConfigDir } from '../config-paths.mjs';
|
|
40
39
|
|
|
41
40
|
const CLAUDE_DIR = resolveClaudeConfigDir();
|
|
42
41
|
const SETTINGS_PATH = join(CLAUDE_DIR, 'settings.json');
|
|
43
|
-
// 10.22.0 / Phase 4 spirit-of-constraint: the install model id comes
|
|
44
|
-
// from the operator's `userSelected.models[0]`, not a hardcoded literal.
|
|
45
|
-
// The Bizar global router is the sole model-policy source.
|
|
46
|
-
const BIZAR_ROUTER_PATH = resolveGlobalModelRouter();
|
|
47
|
-
|
|
48
|
-
function readConfiguredModels() {
|
|
49
|
-
for (const path of [BIZAR_ROUTER_PATH]) {
|
|
50
|
-
if (!existsSync(path)) continue;
|
|
51
|
-
try {
|
|
52
|
-
const parsed = JSON.parse(readFileSync(path, 'utf8'));
|
|
53
|
-
const list = Array.isArray(parsed?.userSelected?.models)
|
|
54
|
-
? parsed.userSelected.models.filter((id) => typeof id === 'string' && id.trim())
|
|
55
|
-
: [];
|
|
56
|
-
if (list.length > 0) return list;
|
|
57
|
-
const fallback = configuredFallbackModels(parsed);
|
|
58
|
-
if (fallback.length > 0) return fallback;
|
|
59
|
-
// An explicit empty selection is an intentional global policy.
|
|
60
|
-
if (path === BIZAR_ROUTER_PATH && parsed && typeof parsed === 'object'
|
|
61
|
-
&& Array.isArray(parsed.userSelected?.models)) {
|
|
62
|
-
return [];
|
|
63
|
-
}
|
|
64
|
-
} catch { /* keep falling through */ }
|
|
65
|
-
}
|
|
66
|
-
return [];
|
|
67
|
-
}
|
|
68
42
|
|
|
69
43
|
const STATIC_FAVORED = {
|
|
70
44
|
permissions: { defaultMode: 'bypassPermissions' },
|
|
71
45
|
worktree: { bgIsolation: 'worktree' },
|
|
72
|
-
// `model` is intentionally absent —
|
|
73
|
-
//
|
|
46
|
+
// `model` is intentionally absent — settings.json ships the alias
|
|
47
|
+
// binding (model + modelOverrides + the four ANTHROPIC_DEFAULT_*_MODEL
|
|
48
|
+
// env vars) as the canonical source. `upgrade-defaults` only re-applies
|
|
49
|
+
// the safe Bizar-owned UX defaults, not model policy.
|
|
74
50
|
alwaysThinkingEnabled: true,
|
|
75
51
|
effortLevel: 'high',
|
|
76
52
|
skipDangerousModePermissionPrompt: true,
|
|
@@ -79,10 +55,7 @@ const STATIC_FAVORED = {
|
|
|
79
55
|
};
|
|
80
56
|
|
|
81
57
|
function buildFavored() {
|
|
82
|
-
|
|
83
|
-
const picks = readConfiguredModels();
|
|
84
|
-
if (picks[0]) out.model = picks[0];
|
|
85
|
-
return out;
|
|
58
|
+
return { ...STATIC_FAVORED };
|
|
86
59
|
}
|
|
87
60
|
|
|
88
61
|
export async function run(name, args, isHelpRequest) {
|
package/cli/commands/util.mjs
CHANGED
|
@@ -82,7 +82,7 @@ export function showDoctorHelp() {
|
|
|
82
82
|
• hook wiring
|
|
83
83
|
• installed agents and skills
|
|
84
84
|
• required local tools
|
|
85
|
-
•
|
|
85
|
+
• alias map (ANTHROPIC_DEFAULT_*_MODEL)
|
|
86
86
|
|
|
87
87
|
Prints ✓/✗ for each check and a final summary. Exits non-zero
|
|
88
88
|
if any check fails. Use \`bizar doctor\` after installation or
|