@polderlabs/bizar-omp 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +284 -338
  2. package/dist/cli/doctor.d.ts +4 -4
  3. package/dist/core/types.d.ts +29 -0
  4. package/dist/core/types.d.ts.map +1 -1
  5. package/dist/extension.d.ts.map +1 -1
  6. package/dist/extension.js +47 -11
  7. package/dist/extension.js.map +1 -1
  8. package/dist/omp/compatibility.d.ts +15 -5
  9. package/dist/omp/compatibility.d.ts.map +1 -1
  10. package/dist/omp/compatibility.js +12 -2
  11. package/dist/omp/compatibility.js.map +1 -1
  12. package/dist/omp/dispatch-lifecycle.d.ts +14 -0
  13. package/dist/omp/dispatch-lifecycle.d.ts.map +1 -1
  14. package/dist/omp/dispatch-lifecycle.js +10 -1
  15. package/dist/omp/dispatch-lifecycle.js.map +1 -1
  16. package/dist/omp/omb-sessions.d.ts +8 -1
  17. package/dist/omp/omb-sessions.d.ts.map +1 -1
  18. package/dist/omp/omb-sessions.js +20 -17
  19. package/dist/omp/omb-sessions.js.map +1 -1
  20. package/dist/omp/rpc.d.ts +3 -0
  21. package/dist/omp/rpc.d.ts.map +1 -1
  22. package/dist/omp/session-ownership.d.ts +64 -0
  23. package/dist/omp/session-ownership.d.ts.map +1 -0
  24. package/dist/omp/session-ownership.js +269 -0
  25. package/dist/omp/session-ownership.js.map +1 -0
  26. package/dist/omp/task-model-selector.d.ts +58 -0
  27. package/dist/omp/task-model-selector.d.ts.map +1 -0
  28. package/dist/omp/task-model-selector.js +144 -0
  29. package/dist/omp/task-model-selector.js.map +1 -0
  30. package/dist/scripts/emit-compatibility-receipt.js +13 -3
  31. package/dist/scripts/emit-compatibility-receipt.js.map +1 -1
  32. package/docs/assets/bizar-omp-banner.svg +51 -18
  33. package/docs/compatibility/baseline.json +9 -8
  34. package/docs/compatibility/supported-surfaces.json +11 -3
  35. package/docs/releases/0.9.0.md +35 -0
  36. package/docs/releases/support-matrix.md +1 -1
  37. package/package.json +1 -1
  38. package/skills/omp-native-development/SKILL.md +5 -3
  39. package/skills/omp-native-development/assets/tests/acceptance-matrix.json +417 -0
  40. package/skills/omp-native-development/references/accuracy-and-versioning.md +1 -1
  41. package/skills/omp-native-development/references/bizar-integration-contract.md +1 -1
  42. package/skills/omp-native-development/references/developer-handoff.md +3 -1
  43. package/skills/omp-native-development/references/execution-and-lifecycle.md +4 -0
  44. package/skills/omp-native-development/references/native-validation-matrix.md +25 -0
  45. package/skills/omp-native-development/references/sessions-sdk-rpc.md +17 -0
  46. package/skills/omp-native-development/references/settings-providers-security.md +11 -0
  47. package/skills/omp-native-development/references/source-manifest.json +20 -4
package/README.md CHANGED
@@ -1,79 +1,35 @@
1
1
  <div align="center">
2
- <img src="docs/assets/bizar-omp-banner.svg" alt="BizarHarness OMP: autonomous engineering with evidence in the loop" width="100%" />
2
+ <img src="docs/assets/bizar-omp-banner.svg" alt="BizarOMP — native workflow, evidence, and session control for oh-my-pi" width="100%" />
3
3
 
4
4
  <p>
5
- <a href="https://www.npmjs.com/package/@polderlabs/bizar-omp"><img src="https://img.shields.io/npm/v/%40polderlabs%2Fbizar-omp?style=flat-square&color=0f766e&label=npm" alt="npm version" /></a>
6
- <a href="https://github.com/PolderLabs/BizarHarness-OMP/releases"><img src="https://img.shields.io/github/v/release/PolderLabs/BizarHarness-OMP?style=flat-square&color=2563eb&label=release" alt="latest GitHub release" /></a>
7
- <img src="https://img.shields.io/badge/OMP-18.4.8-2563eb?style=flat-square" alt="OMP 18.4.8" />
8
- <img src="https://img.shields.io/badge/Node.js-22%2B-18181b?style=flat-square&logo=nodedotjs&logoColor=5fa04e" alt="Node.js 22 or newer" />
9
- <img src="https://img.shields.io/badge/Bun-1.3.14%2B-18181b?style=flat-square&logo=bun&logoColor=fbf0df" alt="Bun 1.3.14 or newer" />
10
- <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-18181b?style=flat-square" alt="MIT license" /></a>
5
+ <a href="https://www.npmjs.com/package/@polderlabs/bizar-omp"><img src="https://img.shields.io/npm/v/%40polderlabs%2Fbizar-omp?style=flat-square&label=npm&color=cf0d77" alt="npm version" /></a>
6
+ <a href="https://github.com/PolderLabs/BizarHarness-OMP/releases/latest"><img src="https://img.shields.io/github/v/release/PolderLabs/BizarHarness-OMP?style=flat-square&label=release&color=0a6ed1" alt="latest GitHub release" /></a>
7
+ <img src="https://img.shields.io/badge/OMP-18.6.1-232833?style=flat-square" alt="OMP 18.6.1 qualified baseline" />
8
+ <img src="https://img.shields.io/badge/Node.js-22%2B-232833?style=flat-square&logo=nodedotjs&logoColor=ffffff" alt="Node.js 22 or newer" />
9
+ <img src="https://img.shields.io/badge/Bun-1.3.14%2B-232833?style=flat-square&logo=bun&logoColor=ffffff" alt="Bun 1.3.14 or newer" />
10
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-232833?style=flat-square" alt="MIT license" /></a>
11
11
  </p>
12
12
 
13
- <p><strong>Native engineering workflows for oh-my-pi.</strong><br />
14
- Plan the work, keep sessions alive, verify the result, and inspect the proof.</p>
13
+ <p><strong>Native workflow, evidence, and session control for <a href="https://github.com/can1357/oh-my-pi">oh-my-pi</a>.</strong></p>
15
14
  </div>
16
15
 
17
- > [!IMPORTANT]
18
- > BizarHarness OMP is an extension for [oh-my-pi](https://github.com/can1357/oh-my-pi), not a second agent runtime. OMP still owns models, credentials, tools, task execution, sessions, and conversation state.
19
-
20
- ## Start here
21
-
22
- Choose the path that matches what you are trying to do:
23
-
24
- | Your goal | Run this | What it gives you |
25
- | --- | --- | --- |
26
- | Set up the complete experience | `npx --yes @polderlabs/bizar-omp setup` | `omb`, `bizar-omp`, the OMP extension, native agents, skills, rules, prompts, tools, and model roles |
27
- | Preview setup before changing anything | `npx --yes @polderlabs/bizar-omp setup --dry-run` | A report of the plugin and missing settings the installer would add |
28
- | Start one durable engineering session | `omb` | OMP inside a Bizar-owned tmux host, with reconnect support |
29
- | Switch between projects and sessions | `omb agents` | The full session hub and new-session picker |
30
- | Watch sessions in a browser | `omb dashboard --open` | A local, loopback-only dashboard with a single-use link |
31
- | Stop or restart everything Bizar owns | `omb stop` / `omb restart` | Bizar sessions, the daemon, and the tray, with a per-resource report |
32
- | Update an installed Bizar command | `omb update` | The latest global `omb` package and, when OMP is available, its enabled plugin |
33
- | Install only the OMP extension | `omp plugin install @polderlabs/bizar-omp` | Extension discovery without installing the `omb` and `bizar-omp` shell commands |
34
-
35
- The shortest useful path is:
36
-
37
- ```sh
38
- npx --yes @polderlabs/bizar-omp setup
39
- omb
40
- ```
41
-
42
- The setup command is safe to preview and safe to run again. It preserves credentials, provider choices, approval policies, explicit `false` or empty settings, and project overrides. It proposes only settings that are absent.
43
-
44
- ## How Bizar fits into OMP
45
-
46
- <img src="docs/assets/bizar-omp-workflow.svg" alt="Bizar OMP workflow: plan, run, verify, integrate" width="100%" />
47
-
48
- Bizar adds the engineering contract around an OMP session:
16
+ BizarOMP extends OMP with durable operator sessions, explicit engineering workflows, specialist roles, verification evidence, a local browser control plane, and an integrated Android companion. It is designed for long-running agentic engineering work where the result needs to be inspectable and the runtime needs to remain under operator control.
49
17
 
50
- | You need | Bizar adds |
51
- | --- | --- |
52
- | A proportionate process | Focused, bounded, and full workflow tiers selected from scope and risk |
53
- | Durable work | `omb` sessions in tmux, or psmux on Windows, with reconnect and a cross-project hub |
54
- | Specialist help | Native roles for planning, research, implementation, review, security, verification, architecture, and documentation |
55
- | A stronger finish line | Acceptance criteria, host-observed checks, fresh evidence, review decisions, and serialized integration admission |
56
- | A readable operator view | OMP's native Advisor, visible agents, session activity, a local dashboard, and inspectable projections |
57
-
58
- The ownership boundary is deliberate:
59
-
60
- | OMP owns | Bizar owns |
61
- | --- | --- |
62
- | Models, providers, credentials, tools, task execution, session files, and conversation state | Workflow intent, acceptance, evidence freshness, candidate lineage, resource ownership, review policy, and integration admission |
63
-
64
- Bizar does not replace OMP's task system, add a parallel scheduler, or provide a Claude Code, MCP, or background-daemon compatibility layer.
18
+ > [!IMPORTANT]
19
+ > BizarOMP is not a second agent runtime. OMP remains the authority for models, providers, credentials, tools, task execution, session files, conversation state, and native agent behavior. Bizar adds workflow policy, evidence, resource ownership, session supervision, and integration gates around that runtime.
65
20
 
66
- ## Install
21
+ ## Quick start
67
22
 
68
23
  ### Requirements
69
24
 
70
- - Node.js 22 or newer
71
- - Bun 1.3.14 or newer
72
- - OMP 18.4.8 on `PATH`
73
- - OMP 18.4.4, 18.4.2, 18.4.1, 18.3.2, 18.3.0, 18.2.11, 18.2.8, 18.2.7, 18.2.6, 18.2.5, 18.2.4 remain regression-qualified
74
- - tmux on Linux and macOS, or [psmux](https://github.com/psmux/psmux) on Windows for durable sessions
25
+ | Component | Requirement |
26
+ | --- | --- |
27
+ | Node.js | 22 or newer |
28
+ | Bun | 1.3.14 or newer |
29
+ | OMP | 18.6.1 qualified baseline |
30
+ | Durable terminal sessions | `tmux` on Linux/macOS or `psmux` on Windows |
75
31
 
76
- Check the host before installing:
32
+ Check the host:
77
33
 
78
34
  ```sh
79
35
  node --version
@@ -81,374 +37,369 @@ bun --version
81
37
  omp --version
82
38
  ```
83
39
 
84
- ### Full installation
85
-
86
- This is the supported path for a complete Bizar OMP setup:
40
+ Install the complete BizarOMP experience:
87
41
 
88
42
  ```sh
89
43
  npx --yes @polderlabs/bizar-omp setup
44
+ omb
90
45
  ```
91
46
 
92
- The installer:
47
+ The setup command installs the `omb` and `bizar-omp` commands, registers the OMP extension, installs the Bizar agents and assets, and applies only the missing Bizar-owned defaults. Existing credentials, provider choices, project overrides, approval policy, explicit `false` values, and unrelated model-role configuration are preserved.
93
48
 
94
- 1. Installs the exact Bizar package version globally, providing `omb` and `bizar-omp`.
95
- 2. Registers and enables that same version through OMP's plugin manager.
96
- 3. Installs the extension, eight specialist agents, skills, rules, prompts, tools, and model roles.
97
- 4. Makes the Bizar Orchestrator the default conversation and enables OMP's native Advisor.
98
- 5. Adds only absent compatibility settings for background work, visible agents, and readable output.
99
- 6. Writes a recoverable receipt for settings it changed and reads the result back.
100
-
101
- For a reproducible install, pin the version:
49
+ Preview the installation first:
102
50
 
103
51
  ```sh
104
- npx --yes @polderlabs/bizar-omp@0.7.3 setup
52
+ npx --yes @polderlabs/bizar-omp setup --dry-run
105
53
  ```
106
54
 
107
- For a named OMP profile or a non-standard OMP binary:
55
+ For a reproducible install of the latest published release:
108
56
 
109
57
  ```sh
110
- npx --yes @polderlabs/bizar-omp setup --profile bizar
111
- npx --yes @polderlabs/bizar-omp setup --omp /path/to/omp
58
+ npx --yes @polderlabs/bizar-omp@0.9.0 setup
112
59
  ```
113
60
 
114
- Preview or script the same operation:
61
+ If you only want the native OMP extension:
115
62
 
116
63
  ```sh
117
- npx --yes @polderlabs/bizar-omp setup --dry-run
118
- npx --yes @polderlabs/bizar-omp setup --json
64
+ omp plugin install @polderlabs/bizar-omp
119
65
  ```
120
66
 
121
- The interactive installer shows detected versions, each phase, settings it will add, the recovery receipt, and the next commands. `--json` produces machine-readable output for shell automation.
67
+ That extension-only path does not install `omb` on `PATH`.
122
68
 
123
- To update an installed global `omb` command to the latest published release:
69
+ ## What BizarOMP adds
124
70
 
125
- ```sh
126
- omb update
127
- ```
128
-
129
- Use `omb update --check` to inspect versions without changing anything, or `omb update --dry-run` to preview the package and plugin refresh. The global command is updated even when OMP is not available; the plugin refresh is skipped until OMP is installed. `omb update` never installs or upgrades the OMP runtime. Use `omp update` explicitly for that operation. Plugin refresh uses the new Bizar package’s qualification guard and refuses an unqualified host before changing native settings.
71
+ | Surface | What it adds |
72
+ | --- | --- |
73
+ | Durable runtime | Persistent OMP sessions hosted through `omb` with reconnect, ownership tracking, and cross-project discovery |
74
+ | Engineering workflow | Focused, bounded, and full workflow tiers with explicit objectives, acceptance criteria, review policy, and stop conditions |
75
+ | Evidence | Candidate-bound verification records, freshness checks, inspectable blockers, and serialized integration admission |
76
+ | Specialist agents | Native OMP roles for architecture, planning, research, implementation, review, security, verification, and documentation |
77
+ | Operator interfaces | Terminal hub, local browser dashboard, daemon, optional tray, machine-readable session inventory, and runtime controls |
78
+ | Mobile control | Integrated Android client and host bridge for paired remote control without moving provider credentials off the host |
79
+ | Model-role management | Bizar role mappings built on OMP's native model catalog and role system rather than a parallel model router |
130
80
 
131
- ### Extension-only installation
81
+ ## Architecture
132
82
 
133
- Use this when you already manage `omb` separately or only need the OMP extension:
83
+ BizarOMP deliberately separates runtime ownership from workflow ownership.
134
84
 
135
- ```sh
136
- omp plugin install @polderlabs/bizar-omp
85
+ ```text
86
+ Terminal / Browser / Android
87
+ │
88
+ ▼
89
+ ┌─────────────────────────────┐
90
+ │ Bizar operator layer │
91
+ │ omb · hub · dashboard │
92
+ │ mobile host · workflow │
93
+ │ evidence · admission │
94
+ └──────────────┬──────────────┘
95
+ │ native extension / RPC / Collab
96
+ ▼
97
+ ┌─────────────────────────────┐
98
+ │ oh-my-pi │
99
+ │ sessions · models · tools │
100
+ │ agents · providers · auth │
101
+ │ task lifecycle · journals │
102
+ └──────────────┬──────────────┘
103
+ │
104
+ ▼
105
+ Host filesystem / tools
137
106
  ```
138
107
 
139
- This does not install `omb` or `bizar-omp` on `PATH`. For checkout development, link the package instead:
108
+ | OMP owns | BizarOMP owns |
109
+ | --- | --- |
110
+ | Model registry and selection | Workflow intent and tiering |
111
+ | Provider credentials and authentication | Acceptance and evidence policy |
112
+ | Native tools and task execution | Candidate lineage and freshness |
113
+ | Conversation/session state | Bizar-owned session supervision |
114
+ | Agent lifecycle and native isolation | Integration admission and resource ownership |
115
+ | Approval and project policy | Operator projections, dashboard, and mobile control surfaces |
140
116
 
141
- ```sh
142
- omp plugin link /path/to/bizaromp
143
- ```
117
+ This boundary is a core design constraint. Bizar does not emulate OMP's task loop, shadow its credential store, or introduce a second scheduler.
144
118
 
145
- ### Check, repair, or remove
119
+ ## Engineering workflow
146
120
 
147
- ```sh
148
- bizar-omp install-doctor
149
- omp plugin list
150
- omp plugin doctor
151
- ```
121
+ <img src="docs/assets/bizar-omp-workflow.svg" alt="BizarOMP workflow: plan, run, verify, integrate" width="100%" />
152
122
 
153
- `install-doctor` reports the active plugin, receipt state, settings drift, and the policies Bizar left under OMP's control. Uninstall only the Bizar integration with:
123
+ The main OMP conversation acts as the Bizar orchestrator. Give it the outcome and constraints; Bizar selects the smallest workflow tier that can safely prove the change.
154
124
 
155
- ```sh
156
- bizar-omp uninstall
157
- ```
125
+ | Tier | Intended scope | Typical proof |
126
+ | --- | --- | --- |
127
+ | Focused | Small, local, understood changes | Targeted check, diff review, smoke test |
128
+ | Bounded | Contained behavior changes and small features | Explicit acceptance plus focused tests |
129
+ | Full | Security, migrations, concurrency, architecture, cross-cutting work | Planning, isolated implementation, review, fresh evidence, serialized integration |
158
130
 
159
- Install and uninstall share an owner lease. After an interrupted installer exits,
160
- `bizar-omp uninstall` can recover the abandoned lease and restore its recorded
161
- changes. A live owner blocks concurrent transactions; on Linux, process start
162
- time also distinguishes reused PIDs. Legacy plain `.bizar-install.lock` files
163
- have no owner identity and remain blocked for manual inspection.
131
+ The tier is based on effect scope and risk rather than how difficult the reasoning feels. A small credential or concurrency change can require the full path; a complex but isolated investigation can remain bounded.
164
132
 
165
- Uninstall restores a setting only when it still contains the value Bizar applied. If you changed that value later, Bizar preserves your change. Remove the global shell commands separately when needed:
133
+ Start and inspect a managed workflow inside OMP:
166
134
 
167
- ```sh
168
- npm uninstall --global @polderlabs/bizar-omp
135
+ ```text
136
+ /bizar run <objective>
137
+ /bizar status
138
+ /bizar evidence
139
+ /bizar inspect
140
+ /bizar recipe <objective>
141
+ /bizar capabilities
142
+ /bizar cancel [reason]
169
143
  ```
170
144
 
171
- ## Your first durable session
145
+ The corresponding LLM tools include `bizar_workflow`, `bizar_verify`, `bizar_evidence`, `bizar_integrate`, `bizar_inspect`, `bizar_recipe_preview`, `bizar_capabilities`, and `bizar_apply_model_roles`.
146
+
147
+ A stale check, changed candidate, unresolved blocker, or unknown native capability is not silently converted into success.
172
148
 
173
- ### 1. Start OMP through `omb`
149
+ ## Durable sessions with `omb`
174
150
 
175
- The extension registers `/bizar` with `init`, `run`, `status`, `next`, `cancel`, `evidence`, `inspect`, and `model-roles` subcommands, plus `/bizar-dashboard` and `/bizar-models` as direct commands. `/bizar-models preview` shows the live plan without writing settings; `/bizar-models` hands the live catalog and a deterministic baseline to the active agent and persists only the approved distribution while preserving non-Bizar roles and the configured global/project storage scope. OmniRoute route combos can resolve in OMP's catalog without having an executable backend. Bizar therefore excludes these opaque selectors from automatic role assignment, reports gateway 404 (no executable targets) separately from 429 (rate limit or quota), and never switches to another route automatically. Check the combo's eligible targets and limits in OmniRoute; use a concrete model selector when execution is required. Start with `/bizar run <objective>`; the LLM tools are `bizar_workflow`, `bizar_verify`, `bizar_evidence`, `bizar_integrate`, `bizar_recipe_preview`, `bizar_inspect`, `bizar_capabilities`, and `bizar_apply_model_roles`.
151
+ `omb` is the operator entry point. Unknown `omb` arguments are passed through to OMP, so normal OMP usage remains available: `omb --resume` reopens a conversation and `omb --export` writes a handoff, and both are OMP's own options rather than `omb`'s.
176
152
 
177
153
  ```sh
178
154
  omb
155
+ omb "fix the failing test"
156
+ omb --resume
179
157
  ```
180
158
 
181
- `omb` starts OMP inside a Bizar-owned tmux session from the first process. Closing the terminal client detaches from the session; it does not stop the host or its background agents. Run `omb` again in the same directory to reconnect to the most recently active live session.
159
+ When durable hosting is available, `omb` starts OMP inside a Bizar-owned multiplexer session. Closing the terminal detaches the client without terminating the host. Running `omb` again in the same project reconnects to the most relevant live session.
182
160
 
183
- OMB starts OMP in its normal project and profile session directory, so both entry points discover and write the same native JSONL, including when OMP atomically rewrites it during compaction. The extension holds an ownership lease while a journal is open and refuses a resume that would create a second writer. The extension keeps a private Bizar-to-OMP identity binding for dashboard history and rename safety; deleting an OMB session removes the native journal from OMP discovery and leaves a Bizar tombstone.
184
-
185
- Use a task-specific session when you want an explicit name:
161
+ Create or select explicit sessions:
186
162
 
187
163
  ```sh
188
164
  omb new "Investigate the API timeout"
189
165
  omb --session api-retries
190
166
  ```
191
167
 
192
- `omp` remains the direct OMP command. Use it when you do not need durable tmux or psmux behavior.
193
-
194
- ### 2. Ask for work in the main conversation
168
+ OMP still writes its native journal. Bizar tracks the mapping and enforces one active writer for the same owned conversation so reconnect, dashboard, and mobile control do not silently create competing writers.
195
169
 
196
- The main conversation is the Bizar Orchestrator. Give it the outcome and constraints in plain language. It selects the smallest workflow tier that fits the work:
170
+ ### Session hub
197
171
 
198
- | Tier | Good fit | Typical proof |
199
- | --- | --- | --- |
200
- | Focused | A typo, small documentation edit, or narrow local fix | Targeted check, diff review, or smoke test |
201
- | Bounded | A contained behavior change or small feature | Acceptance criteria and focused tests |
202
- | Full | Security, architecture, migrations, concurrency, or cross-cutting work | Planning, isolation, review, fresh evidence, and serialized integration |
172
+ ```sh
173
+ omb agents
174
+ omb a
175
+ omb agents --new
176
+ omb hub
177
+ ```
203
178
 
204
- The tier follows what a change can break — effect scope, ambiguity, trust boundary, reversibility, file count, and whether the cause is known — not how hard the reasoning is. A subtle two-file fix can use a stronger model and still stay focused; a credential, migration, concurrency or irreversible change forces the full tier regardless of which model runs it. A tier can escalate when the scope or risk changes, and a focused request still gets validation.
179
+ The hub provides:
205
180
 
206
- Recipes propose the minimum sufficient proof for the changed scope and say why each check was kept or deferred. Host verification reuses a fresh passing record for the same check, target tree and admitted CheckSpec instead of re-running it, and a per-run validation budget refuses a check that would overrun the wall clock it was meant to be bounded by.
181
+ - current-directory and all-project scopes;
182
+ - active, stopped, and combined session filters;
183
+ - attach, continue, rename, delete, refresh, settings, and new-session actions;
184
+ - recursive project discovery from a configured project root;
185
+ - privacy-safe activity summaries derived from Bizar's session view;
186
+ - optional mouse input and tray integration.
207
187
 
208
- ### 3. Inspect the work
188
+ The session state reflects journal activity and host liveness rather than tmux attachment alone. A detached session can continue to be `working`.
209
189
 
210
- Inside OMP, these commands expose the workflow state and proof:
190
+ For scripts and integrations:
211
191
 
212
- ```text
213
- /bizar run <objective> Start a bounded workflow
214
- /bizar status Show the active workflow state
215
- /bizar evidence List recorded checks and evidence
216
- /bizar inspect Explain blockers and evidence lineage
217
- /bizar recipe <objective> Preview an inspectable recipe
218
- /bizar capabilities Show native qualification boundaries
219
- /bizar cancel [reason] Cancel the active workflow
192
+ ```sh
193
+ omb sessions --json
194
+ omb help sessions
220
195
  ```
221
196
 
222
- The tools behind these commands keep completion tied to fresh, host-observed checks. A stale check, changed candidate, missing review, or unknown native capability remains a blocker instead of being silently treated as success.
197
+ ## Browser dashboard
223
198
 
224
- Useful model and dashboard commands are also available:
199
+ Start or open the local dashboard:
225
200
 
226
- ```text
227
- /bizar-models Ask the agent to distribute OMP's models across Bizar roles
228
- /bizar-models preview Show the live catalog's deterministic baseline without writing settings
229
- /bizar-models health Validate configured role selectors
230
- /bizar-dashboard Print a single-use local dashboard link
231
- /bizar-dashboard open Open the dashboard in the default browser
232
- /bizar-dashboard stop Stop the dashboard daemon
201
+ ```sh
202
+ omb dashboard
203
+ omb dashboard --open
204
+ omb dashboard --json
233
205
  ```
234
206
 
235
- `/bizar-models` reads OMP's authenticated model catalog locally, reports what changed since the last observation, and hands the catalog, the current mapping, and a deterministic baseline to the active agent, which decides the distribution and persists it through the native `bizar_apply_model_roles` tool. That tool validates every selector against the live catalog and writes the whole mapping or nothing, preserving unrelated roles; a host without agent messaging applies the baseline itself. It does not promise a particular provider, model family, price, or quality level.
236
-
237
- Ordinary session startup leaves OMP's persistent model roles, tags and cycle
238
- order unchanged. Setup and explicit model-role assignment own those changes.
239
- Main-orchestrator activation requires OMP's native main-agent identity and
240
- session ID; task children and depth-zero clones cannot activate it. Hosts that
241
- cannot expose that identity refuse activation.
207
+ The dashboard is a self-contained local operator UI backed by the Bizar daemon. It provides session selection, structured conversation history, bounded live console capture, prompt sending, terminal attach, lifecycle controls, model/thinking/permission defaults for newly created sessions, and OMP/provider settings surfaces.
242
208
 
243
- Command reports are longer than a status line can show, so the complete text is appended to `.bizar-omp/run.log` in the project the command ran in, as one JSON line per run with its timestamp, command event, and last session entry. The status line shows the fitted summary.
209
+ Security properties are intentionally narrow:
244
210
 
245
- ## The `omb agents` hub
211
+ - the dashboard binds to `127.0.0.1`;
212
+ - access uses a single-use code with a short expiry;
213
+ - the exchanged token stays in browser session memory;
214
+ - provider secrets remain write-only;
215
+ - session-list payloads exclude environment values, raw prompts, pane commands, process IDs, credentials, and terminal history;
216
+ - console capture is authenticated, bounded, and control-sequence stripped;
217
+ - mutations are serialized and ownership-checked.
246
218
 
247
- Open the session switcher from any project:
219
+ Daemon lifecycle:
248
220
 
249
221
  ```sh
250
- omb agents
251
- omb agents --new # open the new-session picker immediately
252
- omb hub # alias for omb agents
222
+ omb daemon start
223
+ omb daemon status
224
+ omb daemon restart
225
+ omb daemon stop
253
226
  ```
254
227
 
255
- By default the hub shows the sessions of the current directory, including sessions whose host has stopped. Press `Tab` to switch to every project, and again to return. Press `f` to cycle the state filter between `Active`, `Stopped`, and `Both`. It includes:
228
+ If daemon ownership cannot be verified, Bizar reports that state as unknown and refuses unsafe takeover rather than treating an uncertain lock as stopped.
256
229
 
257
- - A `Cwd`/`All` scope row and an `Active`/`Stopped`/`Both` state row in the header, and matching filters in the plain-text view.
258
- - One full-width, workspace-grouped session list with a compact selected-session strip.
259
- - Attach, continue, rename, delete, refresh, settings, help, and reconnect controls.
260
- - A new-session selector opened with `n`.
261
- - Recursive search inside the configured Project directory root, parent navigation, recent paths, autocomplete, and direct absolute paths.
262
- - Optional task text and an explicit session name.
263
- - Privacy-safe activity summaries derived from the session journal. Prompts, thinking text, shell commands, tool output, credentials, and raw terminal history are not rendered.
264
- - Optional native tray controls for opening the hub, creating a session, attaching a named session, stopping the daemon, and quitting the tray.
230
+ ## Android companion
265
231
 
266
- ### Hub controls
232
+ The integrated mobile workspace lives in [mobile/](mobile/README.md). It contains:
267
233
 
268
- | Key | Action |
269
- | --- | --- |
270
- | `Tab` | Switch the list between this directory (`Cwd`) and every project (`All`) |
271
- | `f` | Cycle the state filter between `Active`, `Stopped`, and `Both` |
272
- | `Enter` | Attach to the selected live session, or continue a stopped one by restarting its host |
273
- | `n` | Open the full new-session menu |
274
- | `e` | Rename the selected session inline |
275
- | `d` | Delete the selected Bizar session |
276
- | `s` | Open settings |
277
- | `r` | Refresh without moving selection or scroll |
278
- | `?` | Open help |
279
- | `q` | Exit the hub |
234
+ - `apps/mobile` — React Native Android client;
235
+ - `packages/host` — loopback host bridge supervising the installed OMP runtime;
236
+ - `packages/protocol` — versioned shared transport and capability contracts.
280
237
 
281
- Mouse clicks select sessions and a second click opens a live one. Mouse scrolling moves through the session list while the hub is open. The hub enables terminal SGR mouse reporting only for its own lifetime. Mouse behavior inside an attached OMP session follows the session's OMP and multiplexer settings.
238
+ The architecture keeps OMP on the user's machine:
282
239
 
283
- To configure project discovery, open `s`, select `Project directory root`, press `Enter`, enter a path such as `~/projects`, and save. Use `Agents view scope` to make `Cwd` or `All` the opening view; the choice is shared by every hub window. Use `Sessions shown` to keep only active sessions, only stopped ones, or both; stopped sessions are shown by default so a conversation whose host exited stays reachable. Pressing `Enter` on a stopped session restarts a host bound to that exact conversation and attaches to it. Deleting a session also tombstones its native journal so a recent history entry cannot reappear as an unopenable session; deleting an already unhosted row removes that stale history entry.
284
-
285
- ### Session states
286
-
287
- | State | Meaning |
288
- | --- | --- |
289
- | `working` | The journal shows unfinished work. |
290
- | `waiting` | The agent finished its turn and is waiting for input, whether or not a client is attached. |
291
- | `connected` | A client is attached and no structured activity has been journaled yet. |
292
- | `disconnected` | The host is live and unattached, and the journal gives no evidence either way. |
293
- | `stopped` | No host is observed and the journal is silent. |
294
-
295
- State follows journal activity and host liveness, not tmux attachment alone. A detached session can remain `working`. Activity that stops advancing is marked `stalled`; old journal data is marked `stale`.
296
-
297
- ### Optional tray
240
+ ```text
241
+ Android app
242
+ │ HTTPS + authenticated WebSocket
243
+ ▼
244
+ Cloudflare edge
245
+ │ outbound Cloudflare Tunnel
246
+ ▼
247
+ 127.0.0.1 Bizar mobile host
248
+ │ supervised JSONL / native control
249
+ ▼
250
+ installed OMP
251
+ ```
298
252
 
299
- Enable the tray from hub Settings or use:
253
+ Pair a device:
300
254
 
301
255
  ```sh
302
- omb tray start
303
- omb tray status
304
- omb tray stop
256
+ omb pair
305
257
  ```
306
258
 
307
- The native tray backend is available on supported Linux, macOS, and Windows hosts. Unsupported desktop environments keep the terminal hub and daemon available.
259
+ Mobile uses the same desktop OMB session inventory. Existing desktop-owned sessions are controlled through the qualified native paths rather than by opening the same OMP journal with a second writer.
308
260
 
309
- ## Browser dashboard and daemon
261
+ Anonymous Cloudflare Quick Tunnels are supported as ephemeral development endpoints. Named tunnels and custom hostnames are the persistent mode. Provider credentials stay on the host.
310
262
 
311
- The daemon keeps a session snapshot fresh independently of a terminal client. The dashboard binds to loopback and uses a single-use access code that expires after five minutes.
312
-
313
- If daemon ownership cannot be verified, status reports `UNKNOWN` and retains
314
- the lock. Start, shutdown signaling, and mobile management refuse that uncertain
315
- owner. Inspect `omb daemon status` and establish that the recorded process has
316
- stopped before repairing or quarantining its lock; an unknown state does not
317
- mean the daemon is stopped.
263
+ Mobile source-development commands:
318
264
 
319
265
  ```sh
320
- omb daemon start
321
- omb daemon status
322
- omb daemon restart
323
- omb daemon stop
266
+ omb mobile workspace install
267
+ omb mobile workspace check
268
+ omb mobile app start
269
+ omb mobile app android
270
+ omb mobile app android:release
324
271
  ```
325
272
 
326
- Open the dashboard:
273
+ The mobile workspace has its own pnpm lockfile and is intentionally excluded from the npm package's `files` allowlist. See [mobile/README.md](mobile/README.md) for architecture, security boundaries, and build requirements.
327
274
 
328
- ```sh
329
- omb dashboard # print the local URL
330
- omb dashboard --open # print and open it in the default browser
331
- omb dashboard --json # emit { url, port, pid, code }
332
- omb dashboard stop # stop the daemon; tmux sessions keep running
333
- ```
275
+ ## Native agents and model roles
334
276
 
335
- The dashboard is organized around the active session. Choose a workspace session, read its live tmux console, and send a message from the composer with **Ctrl Enter**. Console output refreshes automatically without pulling you back to the bottom when you scroll up. **Open terminal** remains available for full-screen OMP interaction.
277
+ Bizar installs native specialist definitions rather than inventing a private worker protocol.
336
278
 
337
- Custom provider edits are serialized. A busy editor or a detected external
338
- `models.yml` change returns a conflict; reload before retrying. Provider keys
339
- remain write-only, and updates preserve existing YAML comments and unrelated
340
- metadata. External editors do not share Bizar's lease, so avoid overlapping
341
- native/manual file edits with dashboard updates.
279
+ | Specialist | Purpose |
280
+ | --- | --- |
281
+ | Architect | System boundaries, interfaces, and cross-cutting design |
282
+ | Planner | Scope, dependencies, sequencing, and acceptance |
283
+ | Researcher | Evidence-grounded investigation |
284
+ | Implementer | Focused implementation in the assigned workspace |
285
+ | Reviewer | Independent correctness review |
286
+ | Security reviewer | Threat- and trust-boundary review |
287
+ | Verifier | Reproducible validation and evidence |
288
+ | Documentation | User and maintainer documentation |
342
289
 
343
- Create, rename, attach, and stop actions stay alongside the selected session. The new-session dialog lets you choose an available OMP model, thinking level, and permission mode. Dashboard settings can save those three choices as defaults for future dashboard-created sessions, alongside the shared project-root, auto-attach, mouse-forwarding, stopped-session, and tray preferences. Existing sessions keep the runtime they were launched with.
290
+ Concrete models remain an OMP concern. Bizar role mappings are selectors over OMP's live catalog and preserve operator-owned roles and settings.
344
291
 
345
- Permission choices map directly to OMP: **Always ask** auto-approves read-only tools, **Allow workspace writes** also auto-approves workspace writes, and **Auto approve all** uses OMP's `yolo` approval mode. OMP policy may still prompt or block an operation. Attach uses a terminal emulator from `PATH`; set `BIZAR_TERMINAL` to override detection. If no emulator is available, the dashboard returns the exact attach command.
292
+ Useful commands:
346
293
 
347
- The dashboard does not fetch a remote frontend. It serves one self-contained page, binds to `127.0.0.1`, and keeps the exchanged token in browser session memory. `omb dashboard --open` replaces an incompatible resident daemon before opening the page, so an upgrade cannot leave stale dashboard styling or scripts running. The session-list payload excludes credentials, environment values, pane commands, process ids, prompts, and terminal history. Opening a session console makes a separate authenticated request for a bounded, control-sequence-stripped capture of that exact Bizar-owned tmux pane; composer input is length-limited and sent literally to that pane.
294
+ ```text
295
+ /bizar-models
296
+ /bizar-models preview
297
+ /bizar-models health
298
+ ```
348
299
 
349
- ## Stopping and restarting the runtime
300
+ `/bizar-models preview` shows the proposed mapping without writing settings. Applying a mapping validates selectors against OMP's live catalog and writes the Bizar mapping atomically rather than partially mutating it.
350
301
 
351
- `omb stop` is the single teardown path for everything Bizar owns: Bizar-named tmux sessions, the daemon, and the tray. With no target flag it stops all three, and stopping something that is not running is a success rather than an error.
302
+ ## `omb` command reference
352
303
 
353
- ```sh
354
- omb stop # sessions, daemon, and tray
355
- omb stop --all # sessions and services (the default)
356
- omb stop --sessions # only Bizar-owned tmux sessions
357
- omb stop --session ADDRESS # one session, repeatable: Bizar name, session id,
358
- # or the digest its name carries
359
- omb stop --idle # only sessions with no client and no work in flight
360
- omb stop --daemon # only the daemon (alias: --dashboard)
361
- omb stop --tray # only the tray
362
- omb stop --force # also stop sessions a client is attached to
363
- omb stop --dry-run # report what would stop without stopping it
364
- omb stop --json # { command, dryRun, stopped, started, skipped,
365
- # planned, failed, resources }
304
+ ```text
305
+ omb help
306
+ omb help <command>
307
+ omb help --json
366
308
  ```
367
309
 
368
- Every `omb stop` row reports what happened to that resource — `stopped`, `skipped` with the reason, `planned` for a dry run, or `failed` — and states `stopped` as a boolean as well, so a reader that only asks whether a resource is now stopped does not have to know the action vocabulary.
310
+ | Command | Purpose |
311
+ | --- | --- |
312
+ | `omb [omp args]` | Run or attach OMP with durable Bizar session handling |
313
+ | `omb agents` / `omb a` | Interactive cross-project session hub |
314
+ | `omb sessions` / `omb s` | Session inventory, including machine-readable output |
315
+ | `omb dashboard` | Start/open the local browser dashboard |
316
+ | `omb daemon` | Manage the detached loopback daemon |
317
+ | `omb tray` | Manage the optional native tray |
318
+ | `omb pair` | Pair the Android companion with this host |
319
+ | `omb mobile` | Manage mobile host and source workspace operations |
320
+ | `omb stop` | Stop selected or all Bizar-owned runtime resources |
321
+ | `omb restart` | Restart the Bizar runtime services |
322
+ | `omb update` | Update the global Bizar package and enabled OMP plugin |
323
+ | `omb help` | Show command help and the public dispatch surface |
369
324
 
370
- Only Bizar-owned sessions are ever candidates, `omb stop` never stops the session it is running inside, and an address that does not name exactly one session is refused with exit code 2 before anything is stopped. A Bizar name that is not running is a success with a `not found` row, so the same command twice is safe.
325
+ Use `omb help <command>` for the authoritative options of each command instead of relying on copied flag lists in external notes.
371
326
 
372
- Target flags are additive, except that `--all` together with `--session NAME` narrows the session selection to the sessions named while the daemon and the tray are still stopped. The daemon and the tray are signalled only while the recorded lock's PID is verified to still be that process, so a lock that cannot be verified is skipped with a reason instead of signalled.
327
+ ## Update, diagnose, and remove
373
328
 
374
- A session is reported `stopped` only when its absence is proven: a `kill-session` the multiplexer refused, or a refusal that could not be confirmed by listing the sessions, is reported as `failed` rather than as a stop that did not happen. A multiplexer that is not installed, or that has no server running, stops nothing and reports success.
329
+ Inspect the installation:
375
330
 
376
331
  ```sh
377
- omb restart # stop the runtime, then start the daemon and tray
378
- omb restart --force # also stop sessions a client is attached to
379
- omb restart --dry-run # report the plan without stopping or starting
380
- omb restart --json # { command, dryRun, stopped, started, skipped,
381
- # planned, failed, resources, url }
332
+ bizar-omp install-doctor
333
+ omp plugin list
334
+ omp plugin doctor
382
335
  ```
383
336
 
384
- `omb restart` always stops the whole runtime first, so `omb stop` owns the target flags: `--all`, `--sessions`, `--session NAME`, `--daemon`, `--dashboard`, `--tray`, and `--idle` are all refused with an error that points at `omb stop` and exit code 2. It starts the daemon, starts the tray only when the tray is enabled in hub settings, and prints a fresh single-use dashboard link. Agent sessions are not relaunched: their journals are kept, so `omb` in a project or the hub brings a session back.
385
-
386
- `omb restart` reports exactly one row per resource — each Bizar-owned tmux session, the daemon, the tray, and the dashboard. A row's `state` is the state observed before the command acted, and its `action` is what the restart did with that resource overall: `started` when the resource was stopped and started again (reason `stopped, then started`), `stopped` when it ended stopped (a session, or a tray that settings no longer run), `skipped` when there was nothing to do, and `failed` on a failure. A stop that failed leaves that resource's row `failed` even when the resource was started again, and the exit code is nonzero; the daemon and the tray are still started, so the runtime is left usable.
387
-
388
- `omb restart --dry-run` uses the same one-row-per-resource shape, including the dashboard row, with action `planned` and reason `stop, then start`; a tray that settings do not enable is `skipped` instead. In `--json`, `url` is always present: the freshly minted dashboard access link, or `null` when no link was minted, which is a dry run or a dashboard that failed to start.
389
-
390
- `omb help` lists the commands, and `omb help <command>` prints that command's own usage; `--help` works on every command too.
337
+ Check or update Bizar:
391
338
 
392
339
  ```sh
393
- omb help # every command
394
- omb help stop # one command's usage
395
- omb help --json # { commands: [{ name, names, summary, usage }] }
340
+ omb update --check
341
+ omb update --dry-run
342
+ omb update
396
343
  ```
397
344
 
398
- `omb --help` and `omb -h` are omb's own tokens and print omb's table; use `omp --help` for OMP's own help. `--session ADDRESS`, `--session-id ADDRESS`, and `--new` are omb's launcher options and are consumed before OMP sees them; anything else `omb` does not recognise is passed through to OMP, so `omb --resume` and `omb "fix the failing test"` keep their OMP meaning.
399
-
400
- ## Native roles and assets
345
+ `omb update` updates Bizar itself. It does not silently upgrade OMP; use OMP's own update path for the runtime.
401
346
 
402
- Installation registers visible `bizar_*` roles without replacing operator-owned mappings. The default package includes:
347
+ Remove the Bizar integration:
403
348
 
404
- - Bizar Orchestrator and Advisor integration.
405
- - Specialist agents for architecture, planning, research, implementation, review, security, verification, and documentation.
406
- - The `bizar-omp` orientation and workflow skills.
407
- - Native rules, prompts, tools, evidence schemas, and the OMP-native development reference skill.
349
+ ```sh
350
+ bizar-omp uninstall
351
+ npm uninstall --global @polderlabs/bizar-omp
352
+ ```
408
353
 
409
- The role names are selectors, not guarantees of speed, cost, provider, or model quality. Inspect the resolved OMP catalog when those properties matter.
354
+ Install/uninstall operations use an owner lease and a recovery receipt. Bizar only restores a setting when it still matches the value Bizar previously applied; later operator edits are preserved.
410
355
 
411
356
  ## Safety and ownership boundaries
412
357
 
413
- - Bizar is trusted in-process extension code. OMP extensions and shell commands are not an OS sandbox.
414
- - Credentials, API keys, `.env` contents, and private control links are excluded from logs, commits, and evidence bundles.
415
- - OMP keeps ownership of credentials, providers, model selections, approval policies, tool policies, and project overrides.
416
- - Managed worker changes stay isolated and require explicit parent integration. Bizar never silently applies worker patches.
417
- - Git worktree cleanup is preview-first, ownership-aware, and non-forced. Ignored or uncertain content blocks cleanup.
418
- - A journal has at most one writer. A host that resumes a different conversation probes the target for a competing writer, then moves its own generation binding and journal manifest together; if either cannot be written, the host is left deliberately unrecoverable rather than still bound to the conversation it left, and a dead pane refuses to respawn instead of resuming the wrong one. The probe is point-in-time — OMP emits no cancellation event for a switch that does not commit, so ownership is re-established on the confirmed switch rather than held across that gap.
419
- - The agents hub never presents an unanswered multiplexer scan as an empty session list. A refused scan keeps the last confirmed rows and marks the view degraded; a refused scan at startup is reported rather than opening an empty hub.
420
- - Managed-workflow refusals name the run, its phase, and the cancel that releases it. A run left mid-flight otherwise blocks every `task` call and every non-allowlisted tool for the rest of the session with no in-band way out.
421
- - Install only in projects and environments you trust. Review `setup --dry-run` and `bizar-omp install-doctor` before making changes.
358
+ BizarOMP is infrastructure around an agent runtime, so its boundaries are explicit:
422
359
 
423
- ### Qualification boundary
360
+ - Bizar extension code is trusted in-process code. It is not an operating-system sandbox.
361
+ - OMP remains the source of truth for providers, credentials, models, approval policy, tools, and conversation state.
362
+ - Managed worker output is not silently integrated. Candidate identity, evidence, and admission state remain explicit.
363
+ - Verification evidence is tied to the candidate it observed; changed candidates invalidate stale proof.
364
+ - Bizar-owned Git cleanup is non-forced and ownership-aware. Uncertain or ignored content blocks automatic cleanup.
365
+ - Session journals are single-writer resources. Unknown ownership blocks mutation instead of being guessed away.
366
+ - Dashboard and mobile projections intentionally expose less than the local terminal runtime.
367
+ - Credentials, API keys, `.env` contents, and private control links are excluded from normal workflow logs and evidence bundles.
368
+ - Mobile remote control does not move provider secrets to the phone.
369
+ - Unsupported native execution paths are reported as capability boundaries rather than being presented as universally managed.
424
370
 
425
- The 0.6.7 release ships the `omb a` alias for the agents view, an interactive Ink progress panel for `omb update`, and a live Server-Sent Events chat stream with connection status in the dashboard, published on [npm](https://www.npmjs.com/package/@polderlabs/bizar-omp) and available as a [GitHub release](https://github.com/PolderLabs/BizarHarness-OMP/releases/tag/v0.6.7).
426
-
427
- The release does not claim OS sandboxing, provider model quality, universal native task or eval interception, automatic cleanup of an unqualified native isolation backend, or Claude Code/AO compatibility. See the [support matrix](docs/releases/support-matrix.md) for the current boundary.
371
+ Read [docs/releases/support-matrix.md](docs/releases/support-matrix.md) for the current qualification boundary.
428
372
 
429
373
  ## Compatibility
430
374
 
431
- | Component | Qualified baseline |
375
+ Current source-tree package: `@polderlabs/bizar-omp@0.8.1`. Latest published release: [0.8.1](https://github.com/PolderLabs/BizarHarness-OMP/releases/tag/v0.8.1).
376
+
377
+ | Component | Qualified state |
432
378
  | --- | --- |
433
- | OMP | 18.4.8 at release commit `717f97f4d22b3d65c4a4eef6a744255d46f4d1a6`; 18.4.4, 18.4.2, 18.4.1, 18.3.2, 18.3.0, 18.2.11, 18.2.8, 18.2.7, 18.2.6, 18.2.5, and 18.2.4 remain regression-qualified |
434
- | Node.js | 22.x and 24.x |
435
- | Bun | 1.3.14 compatibility job |
436
- | Package | `@polderlabs/bizar-omp@0.7.3` |
379
+ | BizarOMP source | 0.8.1 |
380
+ | Latest published release | 0.8.1 |
381
+ | OMP | 18.6.1 at release commit `2a2c6dcbbb558c0f8145f67f28b3370984f2bf60` |
382
+ | OMP regression baseline | 18.4.4 remains regression-qualified in the current support matrix |
383
+ | OMP accepted versions | 18.2.4, 18.2.5, 18.2.6, 18.2.7, 18.2.8, 18.2.11, 18.3.0, 18.3.2, 18.4.1, 18.4.2, 18.4.4 and 18.4.8 remain qualified alongside the 18.6.1 baseline |
384
+ | Node.js | 22.x and 24.x in CI |
385
+ | Bun | 1.3.14 compatibility job; package requires >= 1.3.14 |
386
+ | Durable session backend | tmux on Linux/macOS; psmux on Windows |
387
+ | License | MIT |
388
+
389
+ The compatibility receipt is committed at [compatibility-receipt.json](compatibility-receipt.json). Upstream OMP changes require a new contract run and compatibility baseline; Bizar does not broaden a version range to hide an unqualified runtime.
437
390
 
438
- Upstream OMP changes require a new compatibility baseline and contract run. The package does not widen a version range to hide an unqualified runtime.
391
+ ## Development
439
392
 
440
- ## Development and verification
393
+ Install dependencies and run the canonical repository gate:
441
394
 
442
395
  ```sh
443
396
  npm ci
444
397
  make check
445
398
  ```
446
399
 
447
- `make check` is the canonical contributor gate: typecheck, tests, package verification, generated documentation checks, and secret scanning. It builds the tree **once** and hands that build to the tests and the package/receipt checks, so a gate run no longer compiles the same unchanged sources three times. A content-addressed build stamp means a tree that has not changed since the last build costs no compile at all.
400
+ `make check` covers typechecking, tests, package verification, generated-document checks, and secret scanning.
448
401
 
449
- Each step still builds for itself when run on its own, so nothing loses a precondition:
450
-
451
- `make verify` is the same gate under its alias. Build the package directly with:
402
+ Individual package checks:
452
403
 
453
404
  ```sh
454
405
  npm run build
@@ -456,53 +407,48 @@ npm run verify:package
456
407
  npm run pack:check
457
408
  ```
458
409
 
459
- The native OMP qualification needs the OMP source package. When it is available:
410
+ OMP source qualification, when the target OMP source package is available:
460
411
 
461
412
  ```sh
462
413
  npm run verify:omp
463
414
  npm run verify:omp:registry
464
415
  ```
465
416
 
466
- ### Mobile app and host
467
-
468
- The Android app, shared protocol, and mobile host are maintained together in the
469
- isolated [mobile workspace](https://github.com/PolderLabs/BizarHarness-OMP/tree/main/mobile/README.md).
470
- Its pnpm lockfile and build
471
- configuration stay separate from Bizar's npm package so React Native tooling
472
- does not affect the CLI package or its release contents.
473
-
474
- Mobile development commands require pnpm 11 and the Android SDK/JDK for device
475
- builds. They are intended for a Bizar source checkout. The host implementation
476
- is an internal module and all operator commands are under `omb mobile`.
477
- Bizar installs `omb` as the operator command and leaves `omp` as the native OMP
478
- executable. Older installations that wrapped `omp` are restored during the next
479
- Bizar install.
480
-
481
- From the Bizar repository root, mobile workspace operations are also under
482
- `omb mobile`:
417
+ The Android workspace is intentionally isolated from the npm package and uses pnpm 11 plus the Android SDK/JDK for device builds:
483
418
 
484
419
  ```sh
485
420
  omb mobile workspace install
486
421
  omb mobile workspace check
487
- omb mobile app start
488
422
  ```
489
423
 
490
- For a device build, set up the Android SDK and JDK as described in the mobile
491
- guide, then run `omb mobile app android` for a debug install or
492
- `omb mobile app android:release` for a standalone APK. Build the internal host
493
- with `omb mobile build`, then use `omb pair`, `omb mobile devices` or
494
- `omb mobile tunnel` from the same checkout. Pairing and the mobile gateway are
495
- supervised by the OMB daemon.
496
-
497
- `omb mobile sessions claims --json` reports unreadable claim records and exits
498
- nonzero when the inventory cannot be trusted. Such records block ownership
499
- changes until repaired or quarantined after the previous writer is confirmed
500
- stopped. Device-registry writes are serialized; retry a busy operation after the
501
- current writer finishes. Uncertain mutation receipts or interrupted recovery
502
- operations require local inspection before repair. See the
503
- [audit recovery notes](docs/security/project-audit-2026-10-01.md#recovery-and-release).
504
-
505
- Release notes and compatibility records live in [`docs/releases/`](docs/releases/). See [CONTRIBUTING.md](CONTRIBUTING.md) for branch conventions, release tags, and trusted publishing.
424
+ ## Repository map
425
+
426
+ | Path | Purpose |
427
+ | --- | --- |
428
+ | [src/](src/) | Extension, workflow engine, evidence, OMP integration, CLI, daemon, dashboard, and runtime code |
429
+ | [agents/](agents/) | Native Bizar specialist definitions |
430
+ | [skills/](skills/) | Bizar and OMP-native agent skills |
431
+ | [rules/](rules/) | Runtime and workflow rules |
432
+ | [prompts/](prompts/) | Prompt assets used by the extension |
433
+ | [schemas/](schemas/) | Typed evidence and workflow schemas |
434
+ | [tests/](tests/) | Unit, integration, contract, runtime, ownership, dashboard, and compatibility tests |
435
+ | [mobile/](mobile/) | Android app, mobile host, shared protocol, docs, and mobile test suites |
436
+ | [docs/](docs/) | Architecture, compatibility, development, security, decisions, and release records |
437
+ | [audits/](audits/) | Structured historical repository audits and evidence |
438
+ | [compatibility-receipt.json](compatibility-receipt.json) | Current source/runtime qualification receipt |
439
+
440
+ ## Documentation
441
+
442
+ Start with these references:
443
+
444
+ - [DESIGN.md](DESIGN.md) — dashboard/mobile product and interface contract.
445
+ - [CONTRIBUTING.md](CONTRIBUTING.md) — contributor workflow and release conventions.
446
+ - [docs/releases/support-matrix.md](docs/releases/support-matrix.md) — current qualification boundary.
447
+ - [docs/releases/0.8.0.md](docs/releases/0.8.0.md) — latest published release note.
448
+ - [docs/compatibility/](docs/compatibility/) — OMP compatibility records.
449
+ - [docs/security/](docs/security/) — security reviews, recovery notes, and threat-oriented audits.
450
+ - [mobile/README.md](mobile/README.md) — mobile architecture, pairing, transport, and development.
451
+ - [AGENTS.md](AGENTS.md) — repository instructions for development agents.
506
452
 
507
453
  ## License
508
454