@polderlabs/bizar 10.26.0 → 10.28.0-beta.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.
- package/README.md +107 -58
- package/cli/bin.mjs +0 -17
- package/cli/commands/openkan.mjs +11 -3
- package/cli/commands/validate.mjs +6 -6
- package/cli/openkan.mjs +57 -8
- package/cli/provision.mjs +4 -1
- package/config/claude/CLAUDE.md +4 -4
- 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 +38 -5
- package/config/claude/agents/plan-architect.md +12 -12
- 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/hooks/keyword-router.mjs +5 -3
- package/config/claude/hooks/persistent-mode.mjs +82 -32
- package/config/claude/hooks/worker-suggest.mjs +4 -4
- package/config/skills/autopilot/SKILL.md +33 -19
- 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 +4 -5
- package/config/workflows/bizar-implement.js +5 -6
- package/config/workflows/bizar-research.js +4 -5
- package/config/workflows/ultracode-research.js +4 -5
- package/config/workflows/ultracode-review.js +3 -4
- package/config/workflows/ultracode.js +4 -5
- package/package.json +6 -7
- 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 -6
- 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/workflow-gc.mjs +0 -221
- package/cli/commands/workflow.mjs +0 -261
- package/cli/core/ultragoal-state.mjs +0 -535
- package/cli/core/workflow-state.mjs +0 -627
- package/config/claude/commands/plan.md +0 -21
- package/config/claude/commands/ralplan.md +0 -8
- 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/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
|
|
|
@@ -41,24 +41,51 @@ the project you happen to be working on.
|
|
|
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
76
|
Install Bizar globally and its Claude Code integration. Bizar dispatches
|
|
47
|
-
through four static
|
|
48
|
-
|
|
49
|
-
chosen alias, so there is no model picker step.
|
|
77
|
+
through four static aliases: `haiku`, `sonnet`, `opus`, and `fable`. OmniRoute
|
|
78
|
+
maps each alias to configured full model IDs and applies ordered failover.
|
|
50
79
|
|
|
51
80
|
```sh
|
|
52
81
|
npm install -g @polderlabs/bizar
|
|
53
82
|
bizar install
|
|
54
83
|
```
|
|
55
84
|
|
|
56
|
-
Restart Claude Code after installation. The installer adds Bizar's agents,
|
|
57
|
-
default OpenKan planning runtime to
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
It preserves your configured gateway endpoint and credential values during a
|
|
61
|
-
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.
|
|
62
89
|
|
|
63
90
|
On a new interactive install, Bizar also asks whether Claude Code agent teams
|
|
64
91
|
should be enabled, the OpenKan install directory, and whether the current
|
|
@@ -75,7 +102,7 @@ bizar install --force
|
|
|
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,9 +132,9 @@ 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
|
-
Bizar dispatches through four static native aliases
|
|
137
|
+
Bizar dispatches through four static native aliases: `haiku`, `sonnet`,
|
|
111
138
|
`opus`, `fable`. Claude Code's native per-call `model` field accepts one of
|
|
112
139
|
these aliases. OmniRoute handles ordered failover between the configured full
|
|
113
140
|
gateway IDs for the chosen alias, so the operator never picks a picker-style
|
|
@@ -116,10 +143,12 @@ gateway ID per agent at this layer. There is no `bizar models` picker, no
|
|
|
116
143
|
|
|
117
144
|
The four aliases are the entire dispatch surface:
|
|
118
145
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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 |
|
|
123
152
|
|
|
124
153
|
Workflow scripts (`config/workflows/*.js`) inline a tiny `dispatchAgent`
|
|
125
154
|
wrapper that picks the alias from a static policy; agent definitions stay
|
|
@@ -140,25 +169,50 @@ Useful inspection commands:
|
|
|
140
169
|
bizar doctor
|
|
141
170
|
```
|
|
142
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
|
+
|
|
143
203
|
## A specialist bench, not a generic swarm
|
|
144
204
|
|
|
145
|
-
Bizar ships
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
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.
|
|
150
209
|
|
|
151
210
|
The coordinator selects specialists when their expertise reduces a concrete
|
|
152
211
|
risk. It does not create parallel workers merely to look busy.
|
|
153
212
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
Mike · research · plan Architecture · accessibility · security
|
|
158
|
-
Implementation · review Build repair · tests · documentation
|
|
159
|
-
Verification · integration Frameworks · performance · operations
|
|
160
|
-
Evaluation · product and domain analysis
|
|
161
|
-
```
|
|
213
|
+
| Coordination | Specialist coverage |
|
|
214
|
+
| --- | --- |
|
|
215
|
+
| Research, planning, implementation, review, verification | Architecture, accessibility, security, tests, documentation, performance, build repair, operations, and domain analysis |
|
|
162
216
|
|
|
163
217
|
## Guardrails that stay out of the way
|
|
164
218
|
|
|
@@ -180,25 +234,10 @@ point where an external or difficult-to-reverse decision belongs to you.
|
|
|
180
234
|
|
|
181
235
|
## What gets installed
|
|
182
236
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
├── commands/ 39 slash-command surfaces
|
|
188
|
-
├── hooks/ routing, lifecycle, safety, evidence, and quality hooks
|
|
189
|
-
├── rules/ focused guidance for common development work
|
|
190
|
-
├── workflows/ native workflow definitions
|
|
191
|
-
├── settings.json Bizar-managed Claude Code integration
|
|
192
|
-
└── agents/ Bizar agent definitions (alias-agnostic)
|
|
193
|
-
|
|
194
|
-
~/.config/bizar/
|
|
195
|
-
├── installed.json install record
|
|
196
|
-
├── openkan/ managed @polderlabs/openkan npm runtime
|
|
197
|
-
├── openkan-install.json selected OpenKan home/package settings
|
|
198
|
-
├── evidence/ local dispatch and verification evidence
|
|
199
|
-
├── telemetry/ local routing and rejected-action feedback
|
|
200
|
-
└── worktree-queue.json completed worktree integration queue
|
|
201
|
-
```
|
|
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 |
|
|
202
241
|
|
|
203
242
|
`bizar control` is a machine-readable command boundary for optional external
|
|
204
243
|
interfaces. Bizar deliberately does not include an embedded browser control
|
|
@@ -248,6 +287,10 @@ make check
|
|
|
248
287
|
|
|
249
288
|
- [Documentation index](docs/INDEX.md)
|
|
250
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
|
|
251
294
|
- [Model routing decisions](docs/decisions/)
|
|
252
295
|
- [Durable project progress, plans, and goals](.ok/)
|
|
253
296
|
- [MIT license](LICENSE)
|
|
@@ -255,3 +298,9 @@ make check
|
|
|
255
298
|
## License
|
|
256
299
|
|
|
257
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
|
@@ -131,7 +131,6 @@ function showHelp() {
|
|
|
131
131
|
goals <subcommand> OpenKan PRDs, goals, and milestones
|
|
132
132
|
claim <subcommand> OpenKan task lease shortcut
|
|
133
133
|
control <subcommand> Machine-readable agents/tasks/plans/goals/sessions/messages API
|
|
134
|
-
workflow <subcommand> Session-bound autopilot workflow state
|
|
135
134
|
hook <name> Run a portable Claude Code hook
|
|
136
135
|
worktree-merge <branch> Merge a feature branch with archive tag (no work lost)
|
|
137
136
|
worker <subcommand> Run an exact-model Claude process worker in a worktree
|
|
@@ -595,22 +594,6 @@ async function main() {
|
|
|
595
594
|
break;
|
|
596
595
|
}
|
|
597
596
|
|
|
598
|
-
case 'workflow': {
|
|
599
|
-
const mod = await importCommand('workflow');
|
|
600
|
-
if (!mod) {
|
|
601
|
-
console.error(chalk.red(` ✗ Could not load workflow command module`));
|
|
602
|
-
process.exit(EXIT_ERROR);
|
|
603
|
-
return;
|
|
604
|
-
}
|
|
605
|
-
dbg('loaded command module:', 'workflow');
|
|
606
|
-
const found = await mod.run(cmd, cmdArgs, isHelpRequest);
|
|
607
|
-
if (found === false) {
|
|
608
|
-
console.error(chalk.red(` ✗ Usage: bizar workflow <subcommand> — run 'bizar workflow --help'`));
|
|
609
|
-
process.exit(EXIT_USAGE);
|
|
610
|
-
}
|
|
611
|
-
break;
|
|
612
|
-
}
|
|
613
|
-
|
|
614
597
|
case 'hook': {
|
|
615
598
|
const mod = await importCommand('hook');
|
|
616
599
|
if (!mod) {
|
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 || '' });
|
|
@@ -44,12 +44,12 @@ export const REQUIRED_AGENTS = [
|
|
|
44
44
|
|
|
45
45
|
export const REQUIRED_COMMANDS = [
|
|
46
46
|
'artifact.md', 'audit.md', 'autopilot.md', 'backup.md', 'bizar.md',
|
|
47
|
-
'
|
|
48
|
-
'
|
|
49
|
-
'
|
|
50
|
-
'
|
|
51
|
-
'
|
|
52
|
-
'ultrawork.md', 'update.md', 'validate.md', 'verify.md',
|
|
47
|
+
'bizplan.md', 'bizplan-heavy.md', 'bizplan-light.md', 'browser.md',
|
|
48
|
+
'cancel.md', 'cron.md', 'deep-interview.md', 'doctor.md', 'explain.md',
|
|
49
|
+
'init.md', 'learn.md', 'plow-through.md', 'pr-review.md', 'quick.md',
|
|
50
|
+
'ralph.md', 'rca.md', 'repair.md', 'restore.md', 'setup-provider.md',
|
|
51
|
+
'spec.md', 'sprint.md', 'team.md', 'test.md', 'tools.md', 'ultracode.md',
|
|
52
|
+
'ultraqa.md', 'ultrawork.md', 'update.md', 'validate.md', 'verify.md',
|
|
53
53
|
];
|
|
54
54
|
|
|
55
55
|
// v6.3.0 — Claude Code hook adapter scripts (executable, .mjs extension).
|
package/cli/openkan.mjs
CHANGED
|
@@ -46,6 +46,32 @@ function nodeMajorVersion() {
|
|
|
46
46
|
return match ? Number(match[1]) : 0;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Parse a semver-like string into [major, minor, patch] numeric parts.
|
|
51
|
+
* Pre-release / build metadata is stripped. Returns null when the input
|
|
52
|
+
* does not look like a version the caller can compare.
|
|
53
|
+
*/
|
|
54
|
+
function parseOpenKanVersion(version) {
|
|
55
|
+
if (typeof version !== 'string') return null;
|
|
56
|
+
const match = version.trim().match(/^v?(\d+)\.(\d+)(?:\.(\d+))?/);
|
|
57
|
+
if (!match) return null;
|
|
58
|
+
return [Number(match[1]), Number(match[2]), Number(match[3] || 0)];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* True when the installed OpenKan version ships the legacy `openkan` binary.
|
|
63
|
+
* v0.5.0 dropped the `openkan <cmd>` entry point; the `ok` CLI is the only
|
|
64
|
+
* supported surface from that release forward. Callers use this to decide
|
|
65
|
+
* whether to install the legacy `~/.local/bin/openkan` shim, clean up a
|
|
66
|
+
* stale one, or route dashboard launches through `ok serve`.
|
|
67
|
+
*/
|
|
68
|
+
export function installedOpenKanSupportsLegacyBin(home) {
|
|
69
|
+
const version = readInstalledOpenKanVersion(home);
|
|
70
|
+
const parsed = parseOpenKanVersion(version);
|
|
71
|
+
if (!parsed) return true; // unknown version: be conservative and keep legacy behaviour
|
|
72
|
+
return parsed[0] < 0 || (parsed[0] === 0 && parsed[1] < 5);
|
|
73
|
+
}
|
|
74
|
+
|
|
49
75
|
export class OpenKanError extends Error {
|
|
50
76
|
constructor(code, message, details = {}) {
|
|
51
77
|
super(message);
|
|
@@ -163,13 +189,19 @@ export function resolveOpenKanDashboard(options = {}) {
|
|
|
163
189
|
const cwd = resolve(options.cwd || process.cwd());
|
|
164
190
|
const explicitHome = options.home || process.env.BIZAR_OPENKAN_HOME;
|
|
165
191
|
const home = explicitHome ? resolve(explicitHome) : resolveOpenKanHome({ cwd });
|
|
166
|
-
const
|
|
167
|
-
if (
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
192
|
+
const legacySupported = installedOpenKanSupportsLegacyBin(home);
|
|
193
|
+
if (legacySupported) {
|
|
194
|
+
const managed = join(openKanPackageRoot(home), 'bin', 'openkan.mjs');
|
|
195
|
+
if (existsSync(managed)) return managed;
|
|
196
|
+
const legacy = join(home, 'bin', 'openkan.mjs');
|
|
197
|
+
if (existsSync(legacy)) return legacy;
|
|
198
|
+
const configuredBin = options.openkanBin || process.env.BIZAR_OPENKAN_BIN || executableOnPath('openkan');
|
|
199
|
+
if (configuredBin && existsSync(configuredBin)) return configuredBin;
|
|
200
|
+
throw new OpenKanError('OPENKAN_NOT_FOUND', 'OpenKan is required. Run `bizar openkan install`.');
|
|
201
|
+
}
|
|
202
|
+
// OpenKan v0.5.0+ drops the legacy `openkan` binary; the dashboard is
|
|
203
|
+
// served via `ok serve`. Always route to the `ok` launcher.
|
|
204
|
+
return resolveOpenKanOk({ cwd, home });
|
|
173
205
|
}
|
|
174
206
|
|
|
175
207
|
function nodeArgs(launcher, args) {
|
|
@@ -327,7 +359,23 @@ export function installOpenKanCommandShims({ home, env = process.env } = {}) {
|
|
|
327
359
|
try { mkdirSync(binDir, { recursive: true, mode: 0o755 }); } catch (error) {
|
|
328
360
|
return { ok: false, installed: [], preserved: [], message: `OpenKan command directory unavailable: ${error.message}` };
|
|
329
361
|
}
|
|
330
|
-
|
|
362
|
+
const legacyBinSupported = installedOpenKanSupportsLegacyBin(home);
|
|
363
|
+
// OpenKan v0.5.0 dropped the legacy `openkan` binary. If the user
|
|
364
|
+
// upgraded from an earlier release, retire any existing shim so agent
|
|
365
|
+
// shells stop hitting a dangling or legacy symlink.
|
|
366
|
+
if (!legacyBinSupported) {
|
|
367
|
+
const staleShim = join(binDir, process.platform === 'win32' ? 'openkan.cmd' : 'openkan');
|
|
368
|
+
if (existsSync(staleShim)) {
|
|
369
|
+
try {
|
|
370
|
+
unlinkSync(staleShim);
|
|
371
|
+
commands.push({ name: 'openkan', path: staleShim, status: 'retired' });
|
|
372
|
+
} catch (error) {
|
|
373
|
+
commands.push({ name: 'openkan', path: staleShim, status: 'failed', error: error.message });
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
const shimNames = legacyBinSupported ? ['ok', 'openkan'] : ['ok'];
|
|
378
|
+
for (const name of shimNames) {
|
|
331
379
|
const target = join(packageBin, `${name}.mjs`);
|
|
332
380
|
const shim = join(binDir, process.platform === 'win32' ? `${name}.cmd` : name);
|
|
333
381
|
if (!existsSync(target)) continue;
|
|
@@ -365,6 +413,7 @@ export function installOpenKanCommandShims({ home, env = process.env } = {}) {
|
|
|
365
413
|
ok: failed.length === 0,
|
|
366
414
|
installed: commands.filter((entry) => entry.status === 'installed'),
|
|
367
415
|
preserved: commands.filter((entry) => entry.status === 'preserved'),
|
|
416
|
+
retired: commands.filter((entry) => entry.status === 'retired'),
|
|
368
417
|
message: failed.length === 0
|
|
369
418
|
? `OpenKan native commands ready in ${binDir}`
|
|
370
419
|
: `OpenKan command shims failed: ${failed.map((entry) => `${entry.name}: ${entry.error}`).join('; ')}`,
|
package/cli/provision.mjs
CHANGED
|
@@ -1044,8 +1044,11 @@ export function setupMcpServer({ dryRun = false } = {}) {
|
|
|
1044
1044
|
if (existing && existing.mcpServers && existing.mcpServers.bizar) {
|
|
1045
1045
|
return { ok: true, message: `bizar MCP server already registered in ${settingsPath}` };
|
|
1046
1046
|
}
|
|
1047
|
-
|
|
1047
|
+
// Honour `dryRun` BEFORE checking for the `claude` CLI: a dry-run
|
|
1048
|
+
// should never fail just because the host does not have Claude Code
|
|
1049
|
+
// installed (CI runners, fresh dev containers, agent sandboxes).
|
|
1048
1050
|
if (dryRun) return { ok: true, message: '[dry-run] would run: claude mcp add bizar -- npx -y @polderlabs/bizar-sdk mcp' };
|
|
1051
|
+
if (!haveCmd('claude')) return { ok: false, message: 'claude CLI not on PATH' };
|
|
1049
1052
|
const r = spawnSync('claude', ['mcp', 'add', '-f', '-s', 'user', 'bizar', '--', 'npx', '-y', '@polderlabs/bizar-sdk', 'mcp'], { stdio: 'inherit', timeout: 60_000 });
|
|
1050
1053
|
if (r.status !== 0) return { ok: false, message: `claude mcp add exited with code ${r.status}` };
|
|
1051
1054
|
return { ok: true, message: 'bizar MCP server registered' };
|
package/config/claude/CLAUDE.md
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
Bizar Harness is a Claude Code-native, guarded-autonomy harness. It ships project and user-level agents, skills, slash commands, hooks, an MCP server, CLI utilities, and verification scripts. OpenKan is bundled as Bizar’s default durable planning, progression, task, and PRD-goal system; Bizar integrates with it only through the `.ok/` workspace and its supported CLI boundary.
|
|
15
15
|
|
|
16
|
-
If you are an agent: read this file, inspect `.ok/` with `
|
|
16
|
+
If you are an agent: read this file, inspect `.ok/` with `ok task list` and `ok prd list`, then run `make check` before changing code.
|
|
17
17
|
|
|
18
18
|
## Commands
|
|
19
19
|
|
|
@@ -26,9 +26,9 @@ make check-arch # architectural and removed-surface checks
|
|
|
26
26
|
make verify-removed-surfaces # prove deleted subsystems are absent
|
|
27
27
|
make verify-repo-structure # prove tracked/package paths are clean
|
|
28
28
|
make clean-check # debug-artifact/static hygiene gate
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
ok task list # OpenKan task progression
|
|
30
|
+
ok plan list # OpenKan plans
|
|
31
|
+
ok prd list # OpenKan PRD goals
|
|
32
32
|
make session-start # lifecycle compatibility target
|
|
33
33
|
make session-end # lifecycle compatibility target
|
|
34
34
|
```
|