superbee 0.4.3 → 0.4.4-pre.10

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "superbee",
3
- "version": "0.4.3",
3
+ "version": "0.4.4-pre.10",
4
4
  "type": "module",
5
5
  "description": "Agent-facing Superbee CLI for reading and writing local OKF knowledge bundles: context notes, docs, cross-links, and live bundle Views.",
6
6
  "keywords": [
@@ -41,6 +41,10 @@
41
41
  "./portable-export": {
42
42
  "types": "./dist/portable-export.d.ts",
43
43
  "default": "./dist/portable-export.mjs"
44
+ },
45
+ "./publication/site-manifest": {
46
+ "types": "./dist/publication/site-manifest-entry.d.ts",
47
+ "default": "./dist/publication-site-manifest.mjs"
44
48
  }
45
49
  },
46
50
  "files": [
@@ -63,10 +67,9 @@
63
67
  "test": "node --test test/*.test.mjs",
64
68
  "gen:skill": "node scripts/gen-skill.mjs",
65
69
  "check:skill": "node scripts/gen-skill.mjs --check",
66
- "prepublishOnly": "node -e \"console.error('superbee is released by .github/workflows/release.yml (npm stage publish); do not run npm publish here'); process.exit(1)\""
70
+ "prepublishOnly": "node -e \"console.error('superbee is released by .github/workflows/release.yml (OIDC trusted publishing); do not run npm publish here'); process.exit(1)\""
67
71
  },
68
72
  "devDependencies": {
69
- "@modelcontextprotocol/sdk": "^1.32.1",
70
73
  "@superbee/board-git": "*",
71
74
  "@superbee/bundle-descriptor": "*",
72
75
  "@superbee/core": "*",
@@ -90,6 +93,6 @@
90
93
  "darwin",
91
94
  "linux"
92
95
  ],
93
- "readme": "# superbee\n\nShared, versioned, conflict-safe knowledge for AI coding agents, stored as plain markdown in\nyour repo.\n\nSuperbee is pre-1.0. Commands and formats may change between releases.\n\n## What is Superbee?\n\nAgents forget everything between sessions, overwrite each other's work, and keep what they know\ninvisible to the humans they work for. Superbee fixes all three with a **knowledge bundle**: a\nfolder of markdown documents, by convention `.superbee/` at your project root, that agents read\nand write through a small command-line tool.\n\n- **Context that persists.** Agents write context notes, decisions, plans, and research into the\n bundle. The next session, or a different agent, picks up where the last one left off. An\n optional `SessionStart` hook for Claude Code, Codex, and OpenCode orients every new session\n automatically.\n- **Safe for many writers.** Each write can carry the actor that made it. A writer can name the\n version it last read; if anyone changed the document since, the write fails with a typed\n conflict error instead of silently overwriting their work.\n- **Visible to humans.** The bundle is plain markdown. Open it in any editor, render it on\n GitHub, diff it in git. `superbee ui` serves it locally as cross-linked pages with backlinks and\n a live activity feed. No bundle content leaves your machine until you run `superbee sync`, which\n shares the bundle with teammates through the board: a copy of the bundle kept on its own git\n branch, separate from your code.\n- **Views on demand.** Ask your agent for a dashboard, a timeline, a filtered task queue, or a\n reading view of one dense document. It builds a self-contained HTML page, stores it in the bundle\n as a View, and `superbee ui` hosts it in a sandboxed frame. A View reads the bundle live and can\n change it only through a write you confirm. Views are bundle content, so they travel with `sync`.\n- **Built for agents.** Output is structured and token-lean, and errors carry a small, stable set\n of exit codes. Agents act on responses without parsing prose or flooding their context window.\n- **Yours, and portable.** Bundles follow the Open Knowledge Format (OKF), a convention of\n markdown with frontmatter, so they outlive the tool: hand the folder to someone else, or read it\n with anything that speaks markdown. New bundles are written as OKF v0.2, and existing v0.1\n bundles keep working as they are. Reading and writing the bundle works offline; only sharing\n needs a network. The document schemas, called kinds, live inside the bundle, so it describes\n its own structure.\n\nBees build comb one cell at a time. The comb holds what the colony gathers, and its shape shows\nthe next bee where to build and what belongs where. Superbee works the same way: people and\nagents record what they learn in a structure that fits their domain, and that structure guides\nwhoever works next. Each session builds on the last instead of starting over.\n\nThe npm package is one self-contained executable with zero runtime dependencies, plus an Agent\nSkill, an instruction file your agent loads, that teaches it how to use the tool.\n\n## Install\n\nRequires a supported Node.js 22, 24, or 26 release (22.14.0 minimum) on macOS or Linux. Native Windows is not supported by this package.\n\n```sh\nnpm install -g superbee\n```\n\nStable releases publish on npm's `latest` tag and prereleases on `next`.\n\nWindows adapters and the `superbee-windows` executable live in a separate repository and are\nnot included in `superbee`. Most Windows users should run Superbee in WSL2, where npm sees a\nLinux platform and the normal installation applies. An experimental, unsupported native Windows\nbuild is available as open source, with build-from-source instructions: https://github.com/Holaxis-ai/superbee-windows-cli\n\n### Upgrading an existing Windows installation\n\nThe first release containing the Windows extraction removes native Windows support from this\npackage. Its npm `os` metadata permits only `darwin` and `linux`, so a Windows upgrade to an affected\nversion is rejected with `EBADPLATFORM`. This applies to existing prerelease users too. Forcing the\ninstallation does not restore support: the executable refuses commands on unsupported hosts\nbefore running them (the bare `--version` flag can still identify the installed build).\n\nThere is no supported Windows replacement on npm. The alternatives are WSL2 or the experimental\nbuild from source at https://github.com/Holaxis-ai/superbee-windows-cli; neither carries a\nfirst-party support promise for native Windows. An older installed version is not converted or\nremoved by this source change, and existing bundle files are not migrated by it. Review the affected release's notes before changing an existing\nWindows installation. macOS/Linux users can continue using the normal installation and setup flow.\n\nRun `superbee version --check` to compare your install with the current stable release.\n\n## First run: let your agent finish setup\n\n`npm install` gives you the CLI. The integrations (the Agent Skill, the `SessionStart` hook, and\nMCP server registration, where MCP is the Model Context Protocol) are installed by your agent,\nnot by hand. Ask it:\n\n> Run `superbee setup` and follow its instructions.\n\nSetup itself changes nothing. It inspects your configuration and returns one safe next command at\na time, and the agent runs each with your approval. Setup knows Claude Code, Codex, and OpenCode,\nplus Claude Desktop for the MCP registration only.\n\nFor a fresh cloud container, provision Superbee in the environment setup step before agent tool\nuse. Generated hooks bind absolute Node and CLI paths from their installation, so a project hook\ncopied from a laptop does not install Superbee or provide a working container launcher. Configure\nhooks inside the environment and verify startup in a fresh session. Startup pulls are best-effort;\ninspect an explicit `superbee sync` receipt to verify publication of edits.\n\n## Everyday use\n\nYou rarely type Superbee commands yourself. You ask your agent, and the Agent Skill translates the\nrequest into CLI calls:\n\n- \"Set up a Superbee bundle for this project and track our tasks in it.\"\n- \"Write up what we decided about the auth design as a doc, and link it to the task.\"\n- \"What did the last session leave off on? Check the context notes.\"\n- \"Sync the board so my teammate's agent sees this.\"\n- \"Give me a view of the open tasks grouped by owner.\"\n\nBehind those requests the agent uses a small set of commands: `init --dir .superbee` creates the\nbundle, `new` creates a document of a declared kind, `doc write` writes a free-form one,\n`doc update` changes a document, `link add` connects two, `list` and `doc read` query them, and\n`sync` shares the board. `superbee --help` lists the commands, and `superbee <command> --help`\ngives each one's full reference.\n\nThe two commands meant for you are the ones that show you the knowledge:\n\n```sh\nsuperbee ui --open # the whole bundle, rendered in your browser\nsuperbee doc open <id> # one document, by an id from `superbee list`\n```\n\n## Upgrading from aslite\n\nIf you installed the earlier `@holaxis/aslite` package or its marketplace plugin: install\n`superbee` alongside it, have your agent run `superbee setup` to migrate the integrations, then\nrun `npm uninstall -g @holaxis/aslite`. Existing `.agentstate-lite/` bundles and\n`.agentstate.json` bindings keep working with no migration.\n\n## Learn more\n\nThe [repository](https://github.com/Holaxis-ai/superbee) holds the source, the\n[CLI contract](https://github.com/Holaxis-ai/superbee/blob/main/packages/superbee/AXI-CONTRACT.md),\nand the [wire protocol](https://github.com/Holaxis-ai/superbee/blob/main/docs/WIRE-PROTOCOL.md).\n\n## License\n\nApache-2.0 © 2026 Holaxis\n",
96
+ "readme": "# superbee\n\nShared, versioned, conflict-safe knowledge for AI coding agents, stored as plain markdown in\nyour repo.\n\nSuperbee is pre-1.0. Commands and formats may change between releases.\n\n## What is Superbee?\n\nAgents forget everything between sessions, overwrite each other's work, and keep what they know\ninvisible to the humans they work for. Superbee fixes all three with a **knowledge bundle**: a\nfolder of markdown documents, by convention `.superbee/` at your project root, that agents read\nand write through a small command-line tool.\n\n- **Context that persists.** Agents write context notes, decisions, plans, and research into the\n bundle. The next session, or a different agent, picks up where the last one left off. An\n optional `SessionStart` hook for Claude Code, Codex, and OpenCode orients every new session\n automatically.\n- **Safe for many writers.** Each write can carry the actor that made it. A writer can name the\n version it last read; if anyone changed the document since, the write fails with a typed\n conflict error instead of silently overwriting their work.\n- **Visible to humans.** The bundle is plain markdown. Open it in any editor, render it on\n GitHub, diff it in git. `superbee ui` serves it locally as cross-linked pages with backlinks and\n a live activity feed. No bundle content leaves your machine until you run `superbee sync`, which\n shares the bundle with teammates through the board: a copy of the bundle kept on its own git\n branch, separate from your code.\n- **Views on demand.** Ask your agent for a dashboard, a timeline, a filtered task queue, or a\n reading view of one dense document. It builds a self-contained HTML page, stores it in the bundle\n as a View, and `superbee ui` hosts it in a sandboxed frame. A View reads the bundle live and can\n change it only through a write you confirm. Views are bundle content, so they travel with `sync`.\n- **Built for agents.** Output is structured and token-lean, and errors carry a small, stable set\n of exit codes. Agents act on responses without parsing prose or flooding their context window.\n- **Yours, and portable.** Bundles follow the Open Knowledge Format (OKF), a convention of\n markdown with frontmatter, so they outlive the tool: hand the folder to someone else, or read it\n with anything that speaks markdown. New bundles are written as OKF v0.2, and existing v0.1\n bundles keep working as they are. Reading and writing the bundle works offline; only sharing\n needs a network. The document schemas, called kinds, live inside the bundle, so it describes\n its own structure.\n\nBees build comb one cell at a time. The comb holds what the colony gathers, and its shape shows\nthe next bee where to build and what belongs where. Superbee works the same way: people and\nagents record what they learn in a structure that fits their domain, and that structure guides\nwhoever works next. Each session builds on the last instead of starting over.\n\nThe npm package is one self-contained executable with zero runtime dependencies, plus an Agent\nSkill, an instruction file your agent loads, that teaches it how to use the tool.\n\n## Install\n\nRequires a supported Node.js 22, 24, or 26 release (22.14.0 minimum) on macOS or Linux. Native Windows is not supported by this package.\n\n```sh\nnpm install -g superbee\n```\n\nStable releases publish on npm's `latest` tag and prereleases on `next`. To try the prerelease:\n\n```sh\nnpm install -g superbee@next\n```\n\nWindows adapters and the `superbee-windows` executable live in a separate repository and are\nnot included in `superbee`. Most Windows users should run Superbee in WSL2, where npm sees a\nLinux platform and the normal installation applies. An experimental, unsupported native Windows\nbuild is available as open source, with build-from-source instructions: https://github.com/Holaxis-ai/superbee-windows-cli\n\n### Upgrading an existing Windows installation\n\nThe first release containing the Windows extraction removes native Windows support from this\npackage. Its npm `os` metadata permits only `darwin` and `linux`, so a Windows upgrade to an affected\nversion is rejected with `EBADPLATFORM`. This applies to existing prerelease users too. Forcing the\ninstallation does not restore support: the executable refuses commands on unsupported hosts\nbefore running them (the bare `--version` flag can still identify the installed build).\n\nThere is no supported Windows replacement on npm. The alternatives are WSL2 or the experimental\nbuild from source at https://github.com/Holaxis-ai/superbee-windows-cli; neither carries a\nfirst-party support promise for native Windows. An older installed version is not converted or\nremoved by this source change, and existing bundle files are not migrated by it. Review the affected release's notes before changing an existing\nWindows installation. macOS/Linux users can continue using the normal installation and setup flow.\n\nRun `superbee version --check` to compare your install with the current stable release.\n\n## First run: let your agent finish setup\n\n`npm install` gives you the CLI. The integrations (the Agent Skill, the `SessionStart` hook, and\nMCP server registration, where MCP is the Model Context Protocol) are installed by your agent,\nnot by hand. Ask it:\n\n> Run `superbee setup` and follow its instructions.\n\nSetup itself changes nothing. It inspects your configuration and returns one safe next command at\na time, and the agent runs each with your approval. Setup knows Claude Code, Codex, and OpenCode,\nplus Claude Desktop for the MCP registration only.\n\nFor a fresh cloud container, provision Superbee in the environment setup step before agent tool\nuse. Generated hooks bind absolute Node and CLI paths from their installation, so a project hook\ncopied from a laptop does not install Superbee or provide a working container launcher. Configure\nhooks inside the environment and verify startup in a fresh session. Startup pulls are best-effort;\ninspect an explicit `superbee sync` receipt to verify publication of edits.\n\n## Everyday use\n\nYou rarely type Superbee commands yourself. You ask your agent, and the Agent Skill translates the\nrequest into CLI calls:\n\n- \"Set up a Superbee bundle for this project and track our tasks in it.\"\n- \"Write up what we decided about the auth design as a doc, and link it to the task.\"\n- \"What did the last session leave off on? Check the context notes.\"\n- \"Sync the board so my teammate's agent sees this.\"\n- \"Give me a view of the open tasks grouped by owner.\"\n\nBehind those requests the agent uses a small set of commands: `init --dir .superbee` creates the\nbundle, `new` creates a document of a declared kind, `doc write` writes a free-form one,\n`doc update` changes a document, `link add` connects two, `list` and `doc read` query them, and\n`sync` shares the board. `superbee --help` lists the commands, and `superbee <command> --help`\ngives each one's full reference.\n\nThe two commands meant for you are the ones that show you the knowledge:\n\n```sh\nsuperbee ui --open # the whole bundle, rendered in your browser\nsuperbee doc open <id> # one document, by an id from `superbee list`\nsuperbee view open <id> # one exact local registered View, through a private one-use browser handoff\n```\n\nIn a hosted checkout, `superbee view read <id>` prints a View page's version on the host and\n`superbee view update <id> --expected-version <version>` replaces the page there (sync never sends\n`views/`). Uploading a page never approves its execution.\n\n## Upgrading from aslite\n\nIf you installed the earlier `@holaxis/aslite` package or its marketplace plugin: install\n`superbee` alongside it, have your agent run `superbee setup` to migrate the integrations, then\nrun `npm uninstall -g @holaxis/aslite`. Existing `.agentstate-lite/` bundles and\n`.agentstate.json` bindings keep working with no migration.\n\n## Learn more\n\nThe [repository](https://github.com/Holaxis-ai/superbee) holds the source, the\n[CLI contract](https://github.com/Holaxis-ai/superbee/blob/main/packages/superbee/AXI-CONTRACT.md),\nand the [wire protocol](https://github.com/Holaxis-ai/superbee/blob/main/docs/WIRE-PROTOCOL.md).\n\n## License\n\nApache-2.0 © 2026 Holaxis\n",
94
97
  "readmeFilename": "README.md"
95
98
  }
@@ -23,7 +23,7 @@ invent an official support commitment or managed admission.
23
23
 
24
24
  Validation reads the selected recipe directory and inert accepted plugin metadata. It never imports a module named by the recipe,
25
25
  discovers a bundle, writes a document or makes a provider request. Unknown profiles are explicit
26
- `PROFILE_NOT_AVAILABLE` refusals, not successful compatibility claims. Core supplies `rest-json`; `github-issues` requires explicit registration of the independently installed GitHub plugin. Registered plugin spec checks are deferred to source test/bind/run; validation never imports its module.
26
+ `PROFILE_NOT_AVAILABLE` refusals, not successful compatibility claims. Core supplies `rest-json`; `github-issues` requires explicit registration of the independently installed GitHub plugin. Registered plugin spec checks are deferred to source test/bind/run (new bound-GET policies defer them to run); validation never imports its module.
27
27
  An explicitly selected test double does not establish compatibility for an unavailable profile.
28
28
 
29
29
  The complete package is checked for core's secret-shaped text, including README files; `.env` and
@@ -81,6 +81,15 @@ and findings for every run. A recipe's definitions-only directory and recorded f
81
81
  separate. Expected values are compared exactly; missing expectation keys, changed receipts, unused
82
82
  recorded exchanges, unscripted requests and failed core invariants fail the command.
83
83
 
84
+ For a source with an explicit `request.read_policy`, the fixture author may supply the optional
85
+ top-level `readPolicyApproval` object: `{"contract":1,"digest":"sha256:<reviewed policy digest>"}`.
86
+ Obtain that digest from Core's public `inspectSourceReadPolicy(connector, boundFeed)` for the exact
87
+ reviewed declaration and bound Feed, then record it explicitly. The CLI forwards this fixture data
88
+ to the public Core harness; it never calculates or grants approval automatically. Core refuses
89
+ missing, stale or nonmatching approval before provider requests. The object permits only `contract`
90
+ and `digest`; legacy fixtures without an explicit read policy need no approval. This assertion
91
+ applies only to recorded testing: it grants no live feed binding consent, credential or transport.
92
+
84
93
  Each exchange records the method and URL expected by the public harness and a response (`status`,
85
94
  optional headers and body), `{ "fail": true }`, or `{ "hang": true }`. Runs may specify `mode`, `at`,
86
95
  `edits` and a bounded engine `budget`. Fixture records can include hostile URLs and other attack
@@ -119,6 +128,32 @@ The public [superbee-plugins repository](https://github.com/Holaxis-ai/superbee-
119
128
  qualify mapping and observation behavior; live provider access and managed catalog admission remain
120
129
  separate evidence.
121
130
 
131
+ ## Register a trusted source implementation
132
+
133
+ Source registration accepts a reviewed built folder containing `package.json` with a
134
+ `superbeeIntegration` descriptor: contract 1, a slug `id`, exact compatible `core`, 1–32
135
+ `profiles` (`id`, positive `version`, relative `.mjs` `entry`) and a `recipes` mapping of
136
+ slug keys to inert Markdown recipe roots. Profile ids cannot shadow built-ins or another
137
+ accepted plugin. Each entry exports `createSourceProfile(helpers)` and returns its declared
138
+ extension profile, using the existing public Core helpers. Entries must be self-contained;
139
+ registration hashes finite UTF-8 bytes, not a dependency graph, publisher identity or sandbox.
140
+ Names and declared paths are bounded; traversal, links, overlapping roots and reserved object
141
+ keys are refused. No provider-specific CLI change is needed for another compatible source.
142
+
143
+ Register each source folder explicitly, review the proposal and accept its exact digest.
144
+ Resolve its recipes as `<plugin-id>:<recipe-key>`; `source plugin remove <plugin-id>`
145
+ deactivates its future selections. Registration does not grant credentials or alter Core's
146
+ provider host, method or resource policy. A new authenticated provider needs a reviewed Core
147
+ credential-host policy change; additional local GET endpoints require the explicit bound policy and
148
+ feed approval described below. Source and operation registrations are independent grants with separate bind/run
149
+ contracts; a package descriptor never automatically activates another capability.
150
+
151
+ Existing GitHub acceptance and feed consent remain valid for identical bytes. The first
152
+ successful registration/removal converts the old single-GitHub pointer to a source collection
153
+ at the same private state location. Listing and selection leave the active pointer unchanged. After that conversion, older
154
+ CLI list/select/remove paths refuse the new state; older registration writers are unsupported
155
+ and can replace that collection. Do not use old CLI binaries as writers after upgrading.
156
+
122
157
  ## Register the GitHub integration from a source checkout
123
158
 
124
159
  The GitHub integration is distributed through the public Git repository; no integration npm
@@ -154,6 +189,57 @@ Rebinding changed consent resets observations and accepted tuples for reacquisit
154
189
  availability with `superbee source plugin remove github`; already selected runs may finish their
155
190
  selected generation. Existing bundle content and retained generations are preserved.
156
191
 
192
+ ## Request a narrowly bound local GET policy
193
+
194
+ A source may opt into a reviewed local endpoint through its existing Connector `request` block:
195
+
196
+ ```yaml
197
+ host: api.github.com
198
+ method: GET
199
+ path: '/repos/{owner}/{repo}/pulls'
200
+ items: ''
201
+ query: {state: all}
202
+ headers: {accept: application/vnd.github+json, x-github-api-version: '2026-03-10'}
203
+ paging: {kind: page-number, page_param: page, size_param: per_page, size: 30}
204
+ read_policy:
205
+ contract: 1
206
+ kind: bound-get
207
+ bindings: {owner: segment, repo: segment}
208
+ required_permissions: {pull_requests: read}
209
+ header_provider: github
210
+ ```
211
+
212
+ Its identity resource can be `https://github.com/{owner}/{repo}/pulls`. For detail, declare a separate
213
+ source with resource `https://github.com/{owner}/{repo}/pull/{number}`, path
214
+ `/repos/{owner}/{repo}/pulls/{number}`, `number: positive-integer`, no list query and paging none.
215
+ The integration owns object normalization. [GitHub's REST documentation](https://docs.github.com/en/rest/pulls/pulls)
216
+ provides the endpoint and Pull requests read minimum; opaque token grants remain provider-enforced.
217
+
218
+ Review the endpoint/query read semantics before accepting its binding: GET alone is not a safety
219
+ proof. Core admits only the exact declared host/path and resource parameters. Contract 1 supports
220
+ none/page-number paging with distinct page/size names outside query, required single page/size
221
+ values, exact query literals or whole bound values, and no body, GraphQL, watermark or cursor form.
222
+ Every declared header is required exactly once with its exact value on every hop. Case duplicates,
223
+ omitted/changed headers, query/paging collisions and undeclared authority refuse. Credential and
224
+ method-override headers remain forbidden. For anonymous version-header reads, use auth none,
225
+ explicit `domains: [api.github.com]`, and omit permission minima. Header-provider constraints grant
226
+ no credential host or environment lookup and preserve keyless robots checks.
227
+
228
+ New-policy binding preview/acceptance is inert, using accepted profile metadata. Execution compares
229
+ private consent before module import or credential lookup. Changing policy, binding, implementation
230
+ or resolved semantics requires reapproval and resets observation/accepted state. Installing a plugin
231
+ or recipe grants no network access. Managed execution still needs separately deployed operator
232
+ admission, and local code remains trusted code with ambient process authority.
233
+
234
+ Library hosts use inert `inspectSourceReadPolicy` from `@superbee/core/connectors` and pass its
235
+ approved `{contract: 1, digest}` as `observeSource.readPolicyApproval`. Missing/stale approval denies
236
+ before callbacks/replay. It is an explicit host assertion, not a review certificate. Public recorded
237
+ `SourceFixture` accepts the same explicit `readPolicyApproval`; it is never production consent.
238
+ CLI `source test` JSON remains unchanged and cannot approve these policies. Test them through the
239
+ supported public Core/harness API; do not import private CLI runner/transport seams. Native installed
240
+ registration/bind/refusal, installed public-Core observation, internal transport conformance and live
241
+ provider execution are distinct evidence.
242
+
157
243
  ## Bind and run a local Source Feed
158
244
 
159
245
  After installing a recipe and creating its Source Feed in a local or Git bundle, preview consent:
@@ -80,17 +80,38 @@ Only run it when the person asks for the move.
80
80
 
81
81
  ## Sharing a hosted bundle, and retiring one
82
82
 
83
- `superbee access list <bundle>` shows the person's own access and, for a workspace admin, everyone
84
- with access. When the person asks you to share a bundle with someone, run
85
- `superbee access grant <bundle> <email> --level read|write` without `--yes` first, show the
86
- preview, then run the `--yes` command it names. `access revoke <bundle> <email>` works the same
87
- way. Only a workspace admin may change access. `person_not_member` means the person must invite
88
- them from the Members page in the Superbee app first. Repeating a grant or revoke is safe.
83
+ `superbee access list <bundle>` shows the person's own access and, when the host names it, the
84
+ workspace's web Access page (`access_page`). Sharing is managed there, not from the CLI: hosted
85
+ Superbee answers `access grant` and `access revoke --yes` with `admin_on_web` and changes nothing.
86
+ When the person asks you to share a bundle with someone, tell them a workspace admin gives that
87
+ member read or write on the Access page (`https://<workspace host>/settings/access`); the person
88
+ must already be a member of the workspace (invited from the Members page first). A bundle that
89
+ `superbee publish --to hosted` creates is readable only by its creator until then.
89
90
 
90
91
  `superbee bundle retire <bundle>` is the person's step, never yours: it needs them to type the
91
92
  bundle id in their own terminal. If it refuses with `needs_person_at_terminal`, show the person
92
93
  the host's statement and give them the command; do not try to work around it.
93
94
 
95
+ ## Registering a site's CI: `workload register`
96
+
97
+ A site whose content lives in hosted Superbee reads it in CI as a registered workload app. In the
98
+ site's repository, `superbee workload register` reads the repository and owner ids and the default
99
+ branch with the person's `gh` (`gh api repos/<owner>/<repo>`), and the workflow, workspace and
100
+ bundle from `release.config.json`. It opens the workspace's workload apps page with the form filled
101
+ in: both workflow refs `<owner>/<repo>/<workflow path>@refs/heads/<branch>`, events schedule,
102
+ repository_dispatch and workflow_dispatch, and the bundle at read. A site that publishes to hosted
103
+ (`reconcile.adapter: "hosted"`) also gets its `<bundle> site` line and the GitHub environment
104
+ `reconcile.environment` names (hosted refuses a site app without one). Otherwise the environment
105
+ stays empty, because the job that mints the token runs outside any GitHub environment; pass
106
+ `--environment <name>` only when that job declares one. `--no-open` prints the link instead, and
107
+ `--url` names the workspace's address when it can't be derived from `content.origin`.
108
+
109
+ Nothing is registered by the command. Registering is the person's step on the web: a workspace
110
+ administrator reviews every value on the page and clicks Register. Then the App id the page shows
111
+ goes in `release.config.json` as `reconcile.app` for a hosted site; a site that only reads hosted
112
+ content runs the printed `gh variable set HOSTED_APP_ID --repo <owner>/<repo> --body <app-id>`
113
+ instead. The values travel in the link's fragment, which the browser never sends to a server.
114
+
94
115
  ## Sign-in: relay the link, then retry
95
116
 
96
117
  First run on a machine, in order:
@@ -307,6 +328,15 @@ with a `held` row, reason `unsafe_id`, and the rest of the bundle syncs. A host
307
328
  differs only in letter case from another is held as `case_collision`. Both are renamed in the
308
329
  Superbee app, by the person.
309
330
 
331
+ An edit that removes an outbound link the document had is held as `dropped_links`, and the row
332
+ names the links it removes. Usually the removal is a mistake (a rewrite from a partial read):
333
+ restore the links. When removing them is intended, `superbee sync --replace-links <id>` sends that
334
+ one document's edit as the file stands in that run, against the version it was checked against;
335
+ once admitted it is sent like any other change, retried by a later sync if the host was busy. It
336
+ covers no other document and no later edit, and it never admits a body carrying a
337
+ truncated-preview notice.
338
+ `superbee status` shows the same hold before you sync.
339
+
310
340
  ## The bundle's front page (the root `index.md`)
311
341
 
312
342
  The root `index.md` syncs as one file of its own when the host lets you change the bundle's front
@@ -370,7 +400,10 @@ bundle for everyone.
370
400
  the `superbee sync --accept-deletes blobs:<count>:<digest>` command it names.
371
401
  - **Receipt:** `blobs.rows` has one row per request, keyed by file and request id: `committed`,
372
402
  `conflict`, `refused`, `unknown` or `held`. `blobs.counts` totals them. An `unknown` row is
373
- looked up by the same request on the next sync; it is never sent twice.
403
+ looked up by the same request on the next sync; it is never sent twice. A `refused` row whose
404
+ `result.error.code` is `path_collision` is a new file whose path, or one of its folders, differs
405
+ from an existing document or file only by letter case or Unicode form; nothing was written, and
406
+ sync exits 5. Rename the file or folder to a distinct path, then promote it again.
374
407
  - **Conflicts:** after a `conflict` row (the host's version changed), the file is held until it is
375
408
  resolved. `superbee sync --inspect --doc <key>` shows the recorded versions and MIME types.
376
409
  `superbee sync --resolve keep --doc <key>` keeps your file: the next sync sends it as it is over
@@ -406,7 +439,11 @@ somewhere else. Taking a bundle out of hosted is `superbee export` (below), and
406
439
  person asks for it.
407
440
 
408
441
  `checkout` adds the folder to the workspace catalog, where `catalog list` shows it with
409
- `home: hosted`. The local MCP app (`superbee mcp`) serves it through the folder, by that label or
442
+ `home: hosted`. `checkout --release` forgets the label checkout gave it; a label you chose is
443
+ kept. `superbee catalog remove <label>` forgets any other entry, such as one `catalog list`
444
+ reports `available: false` (its folder is gone); it never touches the folder or the checkout. It
445
+ refuses (`unsent_changes`, exit 5) a checkout whose folder holds changes sync has not sent: run
446
+ `superbee sync --dir <folder>` first. The local MCP app (`superbee mcp`) serves it through the folder, by that label or
410
447
  with the session opened in it: a document written through a View lands in the folder and reaches
411
448
  the host at the next `superbee sync`. A write sync could not send (a View save, a convention, a
412
449
  retype, a document over the size limit, a change to `verified`) is refused before the file
@@ -47,13 +47,17 @@ instance together is appropriate.
47
47
  5. Relate the new record to its actual evidence, policies, decisions, or dependencies.
48
48
  6. Run `superbee status`, read the new record, and inspect its links. Repair only defects caused by
49
49
  this change.
50
- 7. Remove temporary authoring or staging directories, present the authoritative result, and give a
51
- brief value receipt.
50
+ 7. Remove temporary authoring or staging directories, summarize the value, and identify the
51
+ authoritative result by title and document reference. Follow the eager Skill's "Make the value
52
+ visible" guidance for explicit display requests.
52
53
 
53
54
  Use `--body-file` for multiline Markdown. Use `superbee new "<Kind>" --help` for the exact fields
54
55
  of an installed Kind. Prefer semantic no-ops, actor attribution, and version-aware updates when the
55
56
  CLI exposes them.
56
57
 
58
+ Put write-time guidance in a Kind's field or value descriptions, never its body: a write that
59
+ sets a described value returns that description as `guidance`.
60
+
57
61
  ## Evolve from use
58
62
 
59
63
  Refine fields or relationships only after actual instances expose a recurring need. Package a
@@ -34,6 +34,24 @@ only a View whose source or author you trust. A View that declares `bundle-propo
34
34
  trusted shell to prepare one v1 scalar-field action; only the human's shell-native Apply choice
35
35
  authorizes the write.
36
36
 
37
+ ## Opening a local View
38
+
39
+ Use `superbee view open <viewId>` for an exact registered View in the selected local bundle;
40
+ `--dir` and the resolved `--actor` select its managed UI authority. Use `show_view` in a supported
41
+ MCP Apps host. These entry points establish their own host context; do not fabricate a bare View
42
+ URL or copy a reusable session token into a link.
43
+
44
+ For a fresh embedded browser, `superbee view open <viewId> --no-open --json` prepares a private
45
+ `browser_launch.url`. Navigate the selected browser to that exact returned URL. The handoff is
46
+ one-use and expires after 60 seconds: never share or log it. Its ordinary `url` field is a
47
+ credential-free destination, useful only in a browser that already has the right local session.
48
+ After expiry or ambiguous redemption, request a fresh handoff instead of replaying the old one.
49
+
50
+ The handoff establishes the existing session for the entire selected local UI authority, not
51
+ only this View. It does not approve execution, change the actor or bypass the normal approval of
52
+ exact View bytes and access. `handoff_prepared` and `open_requested` do not prove rendering; verify
53
+ the result in the receiving browser. Run `superbee view open --help` for current options.
54
+
37
55
  ## The requests
38
56
 
39
57
  Every request carries `bridge: "v0"` (or `"v1"` for `read-versioned` and `action.propose`), an
@@ -2,7 +2,7 @@
2
2
  type: Reference
3
3
  title: Open Knowledge Format v0.1 (Draft)
4
4
  description: A version-scoped OKF v0.1 interop reference, not Superbee's cross-edition authority.
5
- resource: https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/main/okf/SPEC.md
5
+ resource: https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/ee67a5ca27044ebe7c38385f5b6cffc2305a9c1a/okf/SPEC.md
6
6
  tags: [okf, spec, reference]
7
7
  timestamp: 2026-08-23T17:47:52Z
8
8
  ---
@@ -17,6 +17,11 @@ file is a Concept whose ID is its path minus `.md`. The only required
17
17
  frontmatter field is `type`. This document mirrors the external spec as a
18
18
  first-class concept (§8) so citations resolve inside the graph.
19
19
 
20
+ OKF has since moved to its own repository,
21
+ `GoogleCloudPlatform/open-knowledge-format`, which publishes v0.2. The
22
+ `knowledge-catalog` copy is a frozen snapshot, so the v0.1 citation below is a
23
+ permalink to the commit that published v0.1.
24
+
20
25
  # Key sections
21
26
 
22
27
  * §3 bundle structure and reserved filenames (`index.md`, `log.md`).
@@ -26,4 +31,5 @@ first-class concept (§8) so citations resolve inside the graph.
26
31
 
27
32
  # Citations
28
33
 
29
- 1. [OKF SPEC.md](https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/main/okf/SPEC.md)
34
+ 1. [OKF v0.1 SPEC.md](https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/ee67a5ca27044ebe7c38385f5b6cffc2305a9c1a/okf/SPEC.md)
35
+ 2. [Open Knowledge Format repository](https://github.com/GoogleCloudPlatform/open-knowledge-format)
@@ -34,6 +34,24 @@ only a View whose source or author you trust. A View that declares `bundle-propo
34
34
  trusted shell to prepare one v1 scalar-field action; only the human's shell-native Apply choice
35
35
  authorizes the write.
36
36
 
37
+ ## Opening a local View
38
+
39
+ Use `superbee view open <viewId>` for an exact registered View in the selected local bundle;
40
+ `--dir` and the resolved `--actor` select its managed UI authority. Use `show_view` in a supported
41
+ MCP Apps host. These entry points establish their own host context; do not fabricate a bare View
42
+ URL or copy a reusable session token into a link.
43
+
44
+ For a fresh embedded browser, `superbee view open <viewId> --no-open --json` prepares a private
45
+ `browser_launch.url`. Navigate the selected browser to that exact returned URL. The handoff is
46
+ one-use and expires after 60 seconds: never share or log it. Its ordinary `url` field is a
47
+ credential-free destination, useful only in a browser that already has the right local session.
48
+ After expiry or ambiguous redemption, request a fresh handoff instead of replaying the old one.
49
+
50
+ The handoff establishes the existing session for the entire selected local UI authority, not
51
+ only this View. It does not approve execution, change the actor or bypass the normal approval of
52
+ exact View bytes and access. `handoff_prepared` and `open_requested` do not prove rendering; verify
53
+ the result in the receiving browser. Run `superbee view open --help` for current options.
54
+
37
55
  ## The requests
38
56
 
39
57
  Every request carries `bridge: "v0"` (or `"v1"` for `read-versioned` and `action.propose`), an