@rosthq/cli 0.5.19 → 0.5.21

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/dist/index.js CHANGED
@@ -41910,11 +41910,11 @@ No orphan agents. No raw secrets in prompts, logs, or tool arguments. No durable
41910
41910
  order: 41,
41911
41911
  title: "Add agents to your Responsibility Graph",
41912
41912
  summary: "The visual journey for adding an agent seat: where to start, choosing a mode, placing the seat, naming a Steward, setup, the safety gates, and go-live.",
41913
- version: "2026-06-21.1",
41913
+ version: "2026-06-21.3",
41914
41914
  public: true,
41915
41915
  audiences: ["human", "in_app_agent"],
41916
41916
  stages: ["staffing"],
41917
- relatedCommandIds: ["agent_template.list", "agent_setup.start", "agent.create_from_template", "agent.create_custom", "agent.run_dry_run", "agent.go_live", "staffing.assign_user", "confirmation.approve"],
41917
+ relatedCommandIds: ["agent_template.list", "agent_setup.start", "agent.create_from_template", "agent.create_custom", "skill.list", "skill.catalog", "skill.check_dependencies", "skill.assign_to_seat", "agent.run_dry_run", "agent.go_live", "staffing.assign_user", "confirmation.approve"],
41918
41918
  legal: { publicRisk: "low", notes: ["{{brand}}-native visual guidance for the agent-creation journey."] },
41919
41919
  sources: [
41920
41920
  {
@@ -41984,18 +41984,20 @@ Reopening the builder for a seat whose agent is already live shows its live stat
41984
41984
  - Parent or Steward seat archived during setup: go-live is blocked until you choose a live parent or reassign the Steward.
41985
41985
  - Failed dry run or a declined tool: the draft is preserved; fix the Charter or tool decision and rerun. See the troubleshooting guide.
41986
41986
 
41987
- In read-only or demo mode the **Add agent** affordance never starts a write. The public demo instead replays the add-an-agent journey end to end \u2014 describe the role, watch the draft Charter assemble, see the four safety gates light, and watch a sandbox dry run reach the must-escalate boundary and stop \u2014 then routes go-live to sign-up, because going live is a human decision.`
41987
+ In read-only or demo mode the **Add agent** affordance never starts a write. The public demo instead replays the add-an-agent journey end to end \u2014 describe the role, watch the draft Charter assemble, see the four safety gates light, and watch a sandbox dry run reach the must-escalate boundary and stop \u2014 then routes go-live to sign-up, because going live is a human decision.
41988
+
41989
+ For CLI and MCP setup, read agent-skill-setup-guide before adding or assigning Skills. List existing company Skills and the {{brand}} catalog first, read the full Skill file before proposing it, and run the dependency check before sign-off. A missing required Skill tool is fixed by updating the Charter permission manifest through tool configuration; it is never fixed by treating the Skill as authorization.`
41988
41990
  },
41989
41991
  {
41990
41992
  slug: "custom-agents-guide",
41991
41993
  order: 42,
41992
41994
  title: "Design a custom agent",
41993
41995
  summary: "How to build a custom agent from operational questions through the Charter Builder, tools, dry run, and go-live without writing prompts.",
41994
- version: "2026-06-18.4",
41996
+ version: "2026-06-21.1",
41995
41997
  public: true,
41996
41998
  audiences: ["human", "cli", "mcp", "in_app_agent"],
41997
41999
  stages: ["staffing", "charter_design"],
41998
- relatedCommandIds: ["agent_setup.start", "agent_setup.get", "agent_setup.update", "agent.create_custom", "agent.configure_tools", "agent.run_dry_run", "agent.go_live", "charter.draft", "charter.sign_manifest", "credential.ingress", "confirmation.approve"],
42000
+ relatedCommandIds: ["agent_setup.start", "agent_setup.get", "agent_setup.update", "agent.create_custom", "skill.list", "skill.catalog", "skill.get", "skill.file.get", "skill.check_dependencies", "skill.assign_to_seat", "agent.configure_tools", "agent.run_dry_run", "agent.go_live", "charter.draft", "charter.sign_manifest", "credential.ingress", "confirmation.approve"],
41999
42001
  legal: { publicRisk: "low", notes: ["{{brand}}-native custom-agent guidance."] },
42000
42002
  sources: [
42001
42003
  {
@@ -42050,8 +42052,11 @@ The same path is command-backed:
42050
42052
  1. \`agent_setup.start\` / \`rost_start_agent_setup\` with mode \`custom\` returns a \`setup_id\`.
42051
42053
  2. Iterate with \`agent_setup.get\` and \`agent_setup.update\` (parent, Steward, lane, schedule, and the operational answers).
42052
42054
  3. \`agent.create_custom\` / \`rost_create_custom_agent\` seeds a \`custom\` agent and a draft Charter from the operational answers only.
42053
- 4. \`agent.configure_tools\` / \`rost_configure_agent_tools\` records connect/decline decisions and credential-ingress requests (vault refs only).
42054
- 5. \`agent.run_dry_run\` / \`rost_run_agent_dry_run\` rehearses the task after the manifest is signed.
42055
+ 4. Read \`skill.list\` / \`rost_list_skills\` and, when appropriate, \`skill.catalog\` / \`rost_list_rost_skill_catalog\`; inspect \`skill.get\` plus \`skill.file.get\` for the full \`SKILL.md\` before asking a tenant-admin or human operator to assign a Skill.
42056
+ 5. Run \`skill.check_dependencies\` before assignment. Missing required tools are blockers for approval; optional tools are warnings. Resolve required blockers through \`agent.configure_tools\`, not by changing the Skill.
42057
+ 6. A tenant-admin command caller can propose the Skill with \`skill.assign_to_seat\` / \`rost_assign_skill_to_seat\` after dependency checks; a seat-scoped agent escalates the assignment request instead of calling that command.
42058
+ 7. \`agent.configure_tools\` / \`rost_configure_agent_tools\` records connect/decline decisions and credential-ingress requests (vault refs only).
42059
+ 8. \`agent.run_dry_run\` / \`rost_run_agent_dry_run\` rehearses the task after the manifest is signed.
42055
42060
 
42056
42061
  ## Dry run and go-live
42057
42062
 
@@ -42140,7 +42145,7 @@ Decisions should be recorded as human decisions. Handoffs should attach to seats
42140
42145
  order: 45,
42141
42146
  title: "How agents work",
42142
42147
  summary: "How {{brand}} agents operate inside seats, use Charters, report work, and escalate beyond authority.",
42143
- version: "2026-06-21.1",
42148
+ version: "2026-06-21.3",
42144
42149
  public: true,
42145
42150
  audiences: ["human", "cli", "mcp", "in_app_agent"],
42146
42151
  stages: ["staffing", "operating_rhythm"],
@@ -42326,7 +42331,7 @@ There is exactly one way to give a connected tool its credential, and it is the
42326
42331
  order: 47,
42327
42332
  title: "Available tools guide",
42328
42333
  summary: "How to think about tool categories available to seats and what each category should be used for.",
42329
- version: "2026-06-20.4",
42334
+ version: "2026-06-21.1",
42330
42335
  public: true,
42331
42336
  audiences: ["human", "cli", "mcp", "in_app_agent"],
42332
42337
  stages: ["staffing"],
@@ -42379,7 +42384,7 @@ External connectors are being rolled out provider by provider, conservatively (r
42379
42384
  order: 48,
42380
42385
  title: "CLI and MCP installation guide",
42381
42386
  summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
42382
- version: "2026-06-21.5",
42387
+ version: "2026-06-21.11",
42383
42388
  public: true,
42384
42389
  audiences: ["human", "cli", "mcp", "in_app_agent"],
42385
42390
  stages: ["company_setup", "staffing"],
@@ -42419,6 +42424,22 @@ External connectors are being rolled out provider by provider, conservatively (r
42419
42424
  "agent.get_run",
42420
42425
  "agent.list_runs",
42421
42426
  "agent.list_tool_calls",
42427
+ "skill.list",
42428
+ "skill.catalog",
42429
+ "skill.enable_catalog",
42430
+ "skill.install_local",
42431
+ "skill.sync_local",
42432
+ "skill.get",
42433
+ "skill.file.get",
42434
+ "skill.assigned.list",
42435
+ "skill.check_dependencies",
42436
+ "skill.create",
42437
+ "skill.update_draft",
42438
+ "skill.import_github",
42439
+ "skill.import_upload",
42440
+ "skill.publish",
42441
+ "skill.assign_to_seat",
42442
+ "skill.revoke_from_seat",
42422
42443
  "integration.list",
42423
42444
  "integration.readiness",
42424
42445
  "integration.status",
@@ -42545,7 +42566,7 @@ For CI, do not run an interactive device login on every job (a device code still
42545
42566
 
42546
42567
  ## First-run path
42547
42568
 
42548
- This is the install/auth quickstart \u2014 it gets you logged in, MCP registered, and onboarding started. It is a convenience view, not the full org-setup procedure: for the canonical end-to-end setup order beyond install, \`agent-reference-map\` is the source of truth (its 19-step Standard Setup Order). Read it with \`{{cli}} reference get agent-reference-map\` (step 6 below).
42569
+ This is the install/auth quickstart \u2014 it gets you logged in, MCP registered, and onboarding started. It is a convenience view, not the full org-setup procedure: for the canonical end-to-end setup order beyond install, \`agent-reference-map\` is the source of truth. Read it with \`{{cli}} reference get agent-reference-map\` (step 6 below).
42549
42570
 
42550
42571
  1. Log in: \`npx {{cliPackage}}@latest login\` (or \`{{cli}} login --device\` for a headless agent)
42551
42572
  2. Confirm identity: \`{{cli}} whoami\`
@@ -42702,12 +42723,12 @@ A leaked tenant-admin token can administer the whole tenant, not just one seat.
42702
42723
 
42703
42724
  ### Storing the Anthropic key and other credentials
42704
42725
 
42705
- Storing the tenant model key or any other secret goes through **credential ingress** as a vault reference \u2014 the secret is never pasted into a prompt, config, or log. Use \`rost_save_tenant_anthropic_key\` (\`tenant.anthropic_key.save\`) for the tenant Anthropic key, or \`rost_store_credential\` (\`credential.ingress\`) for other secrets; \`rost_configure_agent_tools\` stages credential requests but never accepts raw secrets. Credential storage is a gated \`credential_flow\` confirmation that a human approves. For the vault model and the security posture behind this, see the security-model-guide and the tool-access-and-vault guide; for the confirmation gate, see the confirmations-guide.
42726
+ Storing the tenant model key or any other secret goes through **credential ingress** as a vault reference \u2014 the secret is never pasted into a prompt, config, or log. Use \`rost_save_tenant_anthropic_key\` (\`tenant.anthropic_key.save\`) for the tenant Anthropic key, or \`rost_store_credential\` (\`credential.ingress\`) for other secrets; \`rost_configure_agent_tools\` stages credential requests but never accepts raw secrets. Credential storage is a gated \`credential_flow\` confirmation that a human approves. For the vault model and the security posture behind this, see the security-model-guide and the tool-access-and-vault guide; for model-bound data, BYOK provider handling, and local-client provider settings, see the ai-model-data-handling-guide; for the confirmation gate, see the confirmations-guide.
42706
42727
 
42707
42728
  ## When to use MCP or CLI
42708
42729
 
42709
42730
  - A technical operator wants to drive onboarding from a local agent session.
42710
- - A partner wants to use their own local model subscription.
42731
+ - A partner wants to use their own local model subscription. Read the ai-model-data-handling-guide first so the operator can verify the local provider account, retention, telemetry, and transcript settings instead of assuming {{brand}} controls them.
42711
42732
  - A Steward wants a local agent to inspect context, draft changes, or prepare work.
42712
42733
  - A developer wants repeatable setup commands.
42713
42734
 
@@ -42799,13 +42820,13 @@ The signed-in app exposes the same Skill command surface under **Skills** in the
42799
42820
  | \`{{cli}} runner list|status|work-orders|revoke\` | \`runner.list\`, \`runner.status\`, \`work_order.list\`, \`runner.revoke\` | Inspect runners and work orders; revoke a runner. | Tenant | \`{{cli}} runner list --json\` |
42800
42821
  | \`{{cli}} notification settings|test|errors\` | \`notification.settings.get\`, \`notification.test\`, \`notification.list_errors\` | Read notification settings, send a test, and list failed deliveries with linked product error source, seat id, and run id when available. | Tenant | \`{{cli}} notification errors --limit 10 --json\` |
42801
42822
  | \`{{cli}} integration list|readiness|status|test\` | \`integration.list\`, \`integration.readiness\`, \`integration.status\`, \`integration.test\` | List connector metadata, read the setup-readiness checklist, read one connector's health, and run the provider-specific connection test without exposing credentials. | Tenant | \`{{cli}} integration readiness --provider google --json\` |
42802
- | \`{{cli}} settings get|update\` | \`settings.get\`, \`settings.update\` | Read tenant settings; update budget caps. | Tenant | \`{{cli}} settings get --json\` |
42823
+ | \`{{cli}} settings get|update|product-learning\` | \`settings.get\`, \`settings.update\`, \`settings.product_learning.get\`, \`settings.product_learning.update\` | Read tenant settings, update budget caps, and read or update product-learning participation. Product-learning updates stop at human confirmation in non-interactive CLI/MCP sessions. | Tenant / Tenant-admin for updates | \`{{cli}} settings product-learning get --json\`; \`{{cli}} settings product-learning update --mode disabled --json\` |
42803
42824
  | \`{{cli}} member invite|update|remove\` | \`member.invite\`, \`member.update\`, \`member.remove\` | Manage tenant members. | Tenant | \`{{cli}} member invite --email ops@example.com --role member\` |
42804
- | \`{{cli}} agent templates|create|setup|tools|dry-run|go-live|status|run-now|fleet-digest|get-run|show\` | \`agent_template.list\`, \`agent.create_from_template\`, \`agent.create_custom\`, \`agent_setup.get\`, \`agent_setup.update\`, \`agent.configure_tools\`, \`agent.run_dry_run\`, \`agent.go_live\`, \`agent.status\`, \`agent.run_now\`, \`agent.fleet_digest\`, \`agent.get_run\`, \`agent.show_markdown\` | Run the full agent setup and operation flow: list templates, create a draft from a template or guided custom answers (with \`--model\` and \`--effort\`), read or answer setup state, connect or decline tools, dry-run, go live, run on demand, capture the fleet-health digest, read one run's transcript/error diagnostics, and show a markdown readout. Create and go-live stop at human gates; the dry-run is ungated by human approval but requires a signed manifest first. | Tenant and seat | \`{{cli}} agent fleet-digest --json\` |
42825
+ | \`{{cli}} agent templates|create|setup|tools|dry-run|go-live|status|run-now|fleet-digest|get-run|show\` | \`agent_template.list\`, \`agent.create_from_template\`, \`agent.create_custom\`, \`agent_setup.get\`, \`agent_setup.update\`, \`agent.configure_tools\`, \`agent.run_dry_run\`, \`agent.go_live\`, \`agent.status\`, \`agent.run_now\`, \`agent.fleet_digest\`, \`agent.get_run\`, \`agent.show_markdown\` | Run the full agent setup and operation flow: list templates, create a draft from a template or guided custom answers (with \`--model\` and \`--effort\`), read or answer setup state, connect or decline tools, dry-run, go live, run on demand, capture the fleet-health digest, read one run's transcript/error diagnostics, and show a markdown readout. Human CLI dry-runs print the rehearsal transcript and, when present, the per-tool preview labels (\`Would run\`, \`Blocked\`, \`Escalated\`) before go-live. Create and go-live stop at human gates; the dry-run is ungated by human approval but requires a signed manifest first. | Tenant and seat | \`{{cli}} agent fleet-digest --json\` |
42805
42826
  | \`{{cli}} tools list\` | \`tool.catalog\` | List the discoverable tool catalog the builder reads (id, scope tiers, credential requirement, access policy, and execution-boundary guidance). | Tenant | \`{{cli}} tools list --json\` |
42806
- | \`{{cli}} skills list|get|file|assigned|check-dependencies\` | \`skill.list\`, \`skill.get\`, \`skill.file.get\`, \`skill.assigned.list\`, \`skill.check_dependencies\` | Discover reusable Skills, read descriptors and stored package files, list approved Seat assignments, and compare required/optional tool dependencies with a Seat's signed Charter manifest. Skills are instructions, not authority. | Tenant and seat | \`{{cli}} skills list --json\`; \`{{cli}} skills file --slug invoice-review --path SKILL.md\` |
42807
- | \`{{cli}} skills catalog|enable|install|sync\` | \`skill.catalog\`, \`skill.enable_catalog\`, \`skill.install_local\`, \`skill.sync_local\` | Discover entitled ROST catalog Skills, enable a catalog Skill into the company library with human confirmation, and install or sync approved Skill files locally from ROST APIs. Private catalog source URLs and GitHub tokens never go to local agents. | Tenant and seat | \`{{cli}} skills sync --seat-id <id> --client codex\`; \`{{cli}} skills install rost/ap-review --seat-id <id> --client codex\` |
42808
- | \`{{cli}} skills create|update-draft|import|publish|assign|revoke\` | \`skill.create\`, \`skill.update_draft\`, \`skill.import_github\`, \`skill.import_upload\`, \`skill.publish\`, \`skill.assign_to_seat\`, \`skill.revoke_from_seat\` | Create or import bounded text Skill packages, publish reviewed immutable versions, propose or approve Seat assignments, and revoke future use without deleting historical activations. Publish, revoke, and approved assignment stop at human confirmation; blocked required tools cannot be approved. | Tenant and seat | \`{{cli}} skills import github --url https://github.com/acme/skills/tree/main/ap --json\`; \`{{cli}} skills assign --seat-id <id> --slug invoice-review --json\` |
42827
+ | \`{{cli}} skills list|get|file|assigned|check-dependencies\` | \`skill.list\`, \`skill.get\`, \`skill.file.get\`, \`skill.assigned.list\`, \`skill.check_dependencies\` | Discover reusable Skills, read descriptors and stored package files, list approved Seat assignments, and compare required/optional tool dependencies with a Seat's signed Charter manifest. Skills are instructions, not authority. | Tenant-admin; seat-scoped reads for assigned Skills | \`{{cli}} skills list --json\`; \`{{cli}} skills file --slug invoice-review --path SKILL.md\` |
42828
+ | \`{{cli}} skills catalog|enable|install|sync\` | \`skill.catalog\`, \`skill.enable_catalog\`, \`skill.install_local\`, \`skill.sync_local\` | Discover entitled {{brand}} catalog Skills, enable a catalog Skill into the company library with human confirmation, and install or sync approved Skill files locally from {{brand}} APIs. Private catalog source URLs and GitHub tokens never go to local agents. | Tenant-admin for catalog enablement; seat-scoped sync for assigned Skills | \`{{cli}} skills sync --seat-id <id> --client codex\`; \`{{cli}} skills install rost/ap-review --seat-id <id> --client codex\` |
42829
+ | \`{{cli}} skills create|update-draft|import|publish|assign|revoke\` | \`skill.create\`, \`skill.update_draft\`, \`skill.import_github\`, \`skill.import_upload\`, \`skill.publish\`, \`skill.assign_to_seat\`, \`skill.revoke_from_seat\` | Create or import bounded text Skill packages, publish reviewed immutable versions, propose Seat assignments, and revoke future use without deleting historical activations. Publish, revoke, and approved assignment stop at human confirmation; blocked required tools cannot be approved. | Tenant-admin writes; seat agents read assignments and escalate requests | \`{{cli}} skills import github --url https://github.com/acme/skills/tree/main/ap --json\`; \`{{cli}} skills assign --seat-id <id> --slug invoice-review --json\` |
42809
42830
  | \`{{cli}} model list\` | \`model.catalog\` | List guided model tiers with recommendations, token prices, cost bands, best-fit work, and model ids for \`--model\`. | Tenant | \`{{cli}} model list --json\` |
42810
42831
  | \`{{cli}} compass show\` | \`compass.show_markdown\` | Render the current Compass as a clean markdown card for review. | Tenant | \`{{cli}} compass show --markdown\` |
42811
42832
  | \`{{cli}} charter show\` | \`charter.show_markdown\` | Render a seat's Charter as a clean markdown card for review. | Tenant | \`{{cli}} charter show --seat-id <id> --markdown\` |
@@ -42825,7 +42846,9 @@ Skills wrapper help:
42825
42846
  {{cli}} skills publish (--slug <slug>|--skill-version-id <id>) [--allow-warnings] [--json]
42826
42847
  \`\`\`
42827
42848
 
42828
- \`{{cli}} skills install\` writes into the client Skills directory and records \`.rost-skill.json\` with \`skill_version_id\`, \`content_sha256\`, source, client, and \`installed_from: "rost_api"\`. Set \`ROST_SKILL_INSTALL_ROOT\` to override the local root in CI or a sandbox. Use \`install\` for one Skill and \`sync\` as the default local-agent command because it installs every approved Skill assigned to the Seat and skips unchanged local copies by hash. Entitlement failures mean the tenant cannot access that ROST catalog tier yet; stale local copies are fixed by rerunning \`sync\`; private catalog access is always served by ROST APIs, not by giving the agent a private GitHub credential.
42849
+ \`{{cli}} skills install\` writes into the client Skills directory and records \`.rost-skill.json\` with \`skill_version_id\`, \`content_sha256\`, source, client, and \`installed_from: "rost_api"\`. Set \`ROST_SKILL_INSTALL_ROOT\` to override the local root in CI or a sandbox. Use \`install\` for one Skill and \`sync\` as the default local-agent command because it installs every approved Skill assigned to the Seat and skips unchanged local copies by hash. Entitlement failures mean the tenant cannot access that {{brand}} catalog tier yet; stale local copies are fixed by rerunning \`sync\`; private catalog access is always served by {{brand}} APIs, not by giving the agent a private GitHub credential.
42850
+
42851
+ {{brand}}-maintained catalog entries are seeded from first-party Skill packages with stable content hashes, application descriptors, and declared required or optional tool dependencies. Catalog seed validation is fail-closed: a package with parser warnings is not published. Enabling a catalog Skill copies the current immutable version into the company library; later catalog refreshes update the global catalog row but do not silently rewrite already-enabled tenant Skill versions.
42829
42852
 
42830
42853
  ### MCP registration
42831
42854
 
@@ -42961,6 +42984,8 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
42961
42984
  | \`rost_update_tenant_settings\` | \`settings.update\` | Update tenant AI budget caps. | Tenant | Call with \`soft_cap_usd\` or \`hard_cap_usd\`; expect human confirmation. |
42962
42985
  | \`rost_get_sync_brief_scope\` | \`settings.sync_brief_scope.get\` | Read the tenant's Sync Brief scope (company_wide or per_cluster). | Tenant | Call with \`{}\`. |
42963
42986
  | \`rost_update_sync_brief_scope\` | \`settings.sync_brief_scope.update\` | Set the tenant's Sync Brief scope (company_wide or per_cluster). | Tenant-admin | Owner-only; call with \`{"sync_brief_scope":"company_wide"}\` or \`{"sync_brief_scope":"per_cluster"}\`. |
42987
+ | \`rost_get_product_learning_policy\` | \`settings.product_learning.get\` | Read whether product/page/recommendation analytics are allowed. | Tenant | Call with \`{}\`; audit/security logs are always enabled. |
42988
+ | \`rost_update_product_learning_policy\` | \`settings.product_learning.update\` | Set product-learning mode. | Tenant-admin | Human-gated; call with \`{"mode":"enabled"}\`, \`{"mode":"disabled"}\`, or \`{"mode":"enterprise_contract"}\`. |
42964
42989
  | \`rost_list_signals\` | \`signal.list\` | List measurables with their latest reading and on/off-track state. | Seat or tenant-admin | Call with \`{}\` to find measurable ids. |
42965
42990
  | \`rost_get_signal\` | \`signal.get\` | Read a measurable with its full reading history. | Seat or tenant-admin | Call with \`{"measurable_id":"<id>"}\`. |
42966
42991
  | \`rost_confirm_signal_reading\` | \`signal.confirm_reading\` | Confirm an unconfirmed reading as human-verified. | Seat or tenant-admin | Humans confirm; call with \`{"reading_id":"<id>"}\`. |
@@ -42989,9 +43014,9 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
42989
43014
  | \`rost_show_agent_setup_as_markdown\` | \`agent.show_markdown\` | Render a seat's agent setup, model, steward, tools, and Charter as a clean markdown card for review. | Tenant | Call with \`{"seat_id":"<seat-id>"}\`. |
42990
43015
  | \`rost_list_tool_catalog\` | \`tool.catalog\` | List the discoverable tool catalog the agent builder reads \u2014 id, prescriptive description, scope tiers, credential requirement, access policy, and execution-boundary guidance. | Tenant | Call with \`{}\` or \`{"provider":"google"}\`. |
42991
43016
  | \`rost_list_skills\` | \`skill.list\` | List tenant Skills with application descriptors, dependency metadata, source status, latest version, and assigned Seat count. Seat-scoped reads are available through \`rost://skills\`. | Tenant-admin | Call with \`{}\` or \`{"query":"invoice"}\`. |
42992
- | \`rost_list_rost_skill_catalog\` | \`skill.catalog\` | List entitled ROST catalog Skills. Private catalog source URLs and credentials stay server-side. | Tenant-admin | Call with \`{}\`; use \`{"include_unentitled":true}\` only to inspect tier availability. |
42993
- | \`rost_enable_rost_catalog_skill\` | \`skill.enable_catalog\` | Enable an entitled ROST catalog Skill into the company library with human confirmation. | Tenant-admin | Call with \`{"slug":"rost/ap-review"}\`; non-interactive callers receive a confirmation handoff. |
42994
- | \`rost_install_skill_locally\` | \`skill.install_local\` | Resolve company or entitled ROST catalog Skill files from ROST APIs for a local client install. It returns package files and metadata, not private GitHub URLs. | Tenant-admin | Call with \`{"slug":"invoice-review","client":"codex"}\`; \`rost/<slug>\` enablement may require confirmation. |
43017
+ | \`rost_list_rost_skill_catalog\` | \`skill.catalog\` | List entitled {{brand}} catalog Skills. Private catalog source URLs and credentials stay server-side. | Tenant-admin | Call with \`{}\`; use \`{"include_unentitled":true}\` only to inspect tier availability. |
43018
+ | \`rost_enable_rost_catalog_skill\` | \`skill.enable_catalog\` | Enable an entitled {{brand}} catalog Skill into the company library with human confirmation. | Tenant-admin | Call with \`{"slug":"rost/ap-review"}\`; non-interactive callers receive a confirmation handoff. |
43019
+ | \`rost_install_skill_locally\` | \`skill.install_local\` | Resolve company or entitled {{brand}} catalog Skill files from {{brand}} APIs for a local client install. It returns package files and metadata, not private GitHub URLs. | Tenant-admin | Call with \`{"slug":"invoice-review","client":"codex"}\`; \`rost/<slug>\` enablement may require confirmation. |
42995
43020
  | \`rost_sync_assigned_skills_locally\` | \`skill.sync_local\` | Resolve every approved Skill assigned to a Seat plus revoked local-copy markers for a local client sync. | Tenant-admin | Call with \`{"seat_id":"<seat-id>","client":"codex"}\`; local clients remove revoked copies. |
42996
43021
  | \`rost_get_skill\` | \`skill.get\` | Read one Skill descriptor and latest stored version metadata. Seat-scoped reads are available through \`rost://skills/{slug}\`. | Tenant-admin | Call with \`{"slug":"invoice-review"}\`. |
42997
43022
  | \`rost_get_skill_file\` | \`skill.file.get\` | Read stored Skill package file content by slug and package path; paths resolve only inside the stored package payload. Seat-scoped reads are available through \`rost://skills/{slug}/files/{path}\`. | Tenant-admin | Call with \`{"slug":"invoice-review","path":"SKILL.md"}\`. |
@@ -43062,11 +43087,285 @@ These rows are quick, at-a-glance triage. For deeper auth, tenant, scope, confir
43062
43087
  `
43063
43088
  },
43064
43089
  {
43065
- slug: "agent-reference-map",
43090
+ slug: "skill-builder-guide",
43066
43091
  order: 49,
43092
+ title: "Skill builder guide",
43093
+ summary: "Create, import, review, publish, and assign reusable Skills without confusing procedures with authority.",
43094
+ version: "2026-06-21.1",
43095
+ public: true,
43096
+ audiences: ["human", "cli", "mcp", "in_app_agent"],
43097
+ stages: ["staffing", "operating_rhythm"],
43098
+ relatedCommandIds: ["skill.list", "skill.catalog", "skill.get", "skill.file.get", "skill.create", "skill.update_draft", "skill.import_github", "skill.import_upload", "skill.publish", "skill.check_dependencies", "skill.assign_to_seat", "skill.revoke_from_seat", "agent.configure_tools", "confirmation.approve"],
43099
+ legal: { publicRisk: "low", notes: ["Public guidance for tenant-authored and imported Skills."] },
43100
+ sources: [
43101
+ {
43102
+ label: "Agent Skills implementation plan",
43103
+ internalPath: "docs/specs/agent-skills-implementation-plan.md",
43104
+ note: "Defines the Skills product boundary, governance model, and setup workflow."
43105
+ }
43106
+ ],
43107
+ body: `# Skill builder guide
43108
+
43109
+ Skills are reusable procedure packages. Use them for repeatable work patterns, domain-specific output contracts, local or client workflow setup, examples, templates, and company-standard operating routines.
43110
+
43111
+ Skills are not authority. A Skill cannot grant a tool, approve a payment, change a Charter, store a secret, or bypass a human confirmation. The Charter, signed permission manifest, and server-side tool guard remain the control plane.
43112
+
43113
+ ## When to add a Skill
43114
+
43115
+ Add a Skill when the procedure will be reused by more than one task or run:
43116
+
43117
+ - A standard operating procedure such as AP exception review, weekly sync health checks, or support triage.
43118
+ - A required output contract such as named sections, evidence fields, or review checklist order.
43119
+ - A local-agent setup pattern that must be installed into Codex, Claude Code, or another client.
43120
+ - A reusable template, example, or evaluation fixture that helps agents produce consistent work.
43121
+
43122
+ Do not add a Skill for authorization, secrets, one-off task context, temporary preferences, or rules that belong in the Charter. Put durable authority, must-escalate boundaries, and tool permissions in the Charter and permission manifest.
43123
+
43124
+ ## Package shape
43125
+
43126
+ Every package has a \`SKILL.md\` file and may include bounded support files under \`references/\`, \`templates/\`, \`examples/\`, \`evals/\`, or \`scripts/\`. The frontmatter should define:
43127
+
43128
+ - \`application\`: a short summary, when to use the Skill, and when not to use it.
43129
+ - \`required_tools\`: tool ids and minimum scope tiers that must exist before an approved assignment can be used safely.
43130
+ - \`optional_tools\`: useful tools that produce warnings when absent but do not block assignment.
43131
+
43132
+ Use tool ids from \`tool.catalog\` / \`rost_list_tool_catalog\`. Required and optional tool entries are dependency declarations only; they never grant access.
43133
+
43134
+ ## Create or import
43135
+
43136
+ Use the shared command path from the app, CLI, or tenant-admin MCP:
43137
+
43138
+ - Create: \`skill.create\` / \`rost_create_skill\` with a bounded text package.
43139
+ - Update a draft: \`skill.update_draft\` / \`rost_update_skill_draft\`.
43140
+ - Import public GitHub: \`skill.import_github\` / \`rost_import_github_skill\`; {{brand}} records source URL, resolved ref, path, and content hash.
43141
+ - Import uploaded text: \`skill.import_upload\` / \`rost_import_uploaded_skill\`; MCP accepts structured text packages, not direct binary uploads.
43142
+
43143
+ Imported Skills are untrusted until parsed, scanned, validated, and reviewed. Validation warnings should be fixed before publication.
43144
+
43145
+ ## Review and publish
43146
+
43147
+ Publishing creates an immutable Skill version. Later edits create a new version; they do not rewrite what a prior agent run used. \`skill.publish\` is human-gated. Agent actors may draft or import, but they do not approve publication.
43148
+
43149
+ Review before publishing:
43150
+
43151
+ - The procedure is reusable and bounded.
43152
+ - It contains no secrets, keys, private tokens, or raw credential material.
43153
+ - Required tools are truly required; optional tools are not blockers.
43154
+ - The output contract does not ask the agent to exceed the Charter.
43155
+ - Support files are necessary and small enough to load safely.
43156
+
43157
+ ## Assign to a Seat
43158
+
43159
+ Assignment pins a published immutable version to a Seat. Run \`skill.check_dependencies\` before \`skill.assign_to_seat\`.
43160
+
43161
+ Dependency results mean:
43162
+
43163
+ - \`ready\`: required tools meet the Skill's minimum scope tiers.
43164
+ - \`blocked\`: at least one required tool is missing, declined, or under-scoped. Approval is blocked.
43165
+ - \`warning\`: optional tools are missing or under-scoped. Assignment can proceed, but the operator should understand the degraded path.
43166
+
43167
+ Fix blockers by updating the Seat's Charter permission manifest through \`agent.configure_tools\` and human sign-off. Do not edit the Skill to pretend authorization exists.
43168
+
43169
+ ## {{brand}} catalog and local install
43170
+
43171
+ The {{brand}} catalog is first-party, entitlement-filtered, and private-source-safe. Use \`skill.catalog\` to list entitled catalog Skills, then \`skill.enable_catalog\` to copy an entitled catalog Skill into the company library with human confirmation. Standard tenants do not see private beta catalog entries unless explicitly entitled.
43172
+
43173
+ Use \`skill.install_local\` for one Skill and \`skill.sync_local\` for all approved Skills assigned to a Seat. Local clients receive package files and \`.rost-skill.json\` metadata from {{brand}} APIs; private catalog GitHub URLs, signed URLs, and credentials are not returned.`
43174
+ },
43175
+ {
43176
+ slug: "agent-skill-authoring-guide",
43177
+ order: 50,
43178
+ title: "Agent Skill authoring guide",
43179
+ summary: "How CLI and MCP agents should propose reusable Skills safely.",
43180
+ version: "2026-06-21.2",
43181
+ public: true,
43182
+ audiences: ["cli", "mcp", "in_app_agent"],
43183
+ stages: ["staffing", "operating_rhythm"],
43184
+ relatedCommandIds: ["skill.list", "skill.get", "skill.file.get", "skill.create", "skill.update_draft", "skill.import_github", "skill.import_upload", "skill.publish", "tool.catalog", "confirmation.approve"],
43185
+ legal: { publicRisk: "low", notes: ["Machine-facing authoring guidance for safe Skill creation."] },
43186
+ sources: [
43187
+ {
43188
+ label: "Agent Skills implementation plan",
43189
+ internalPath: "docs/specs/agent-skills-implementation-plan.md",
43190
+ note: "Defines agent-facing authoring constraints and safety boundaries."
43191
+ }
43192
+ ],
43193
+ body: `# Agent Skill authoring guide
43194
+
43195
+ Use this guide when you are a CLI or MCP agent asked to create, import, or revise a Skill.
43196
+
43197
+ ## First, check what already exists
43198
+
43199
+ Do not create a duplicate procedure. Before authoring:
43200
+
43201
+ 1. Read \`agent-reference-map\`.
43202
+ 2. Run \`skill.list\` / \`rost_list_skills\` and search by the job words.
43203
+ 3. If the procedure may be first-party, run \`skill.catalog\` / \`rost_list_rost_skill_catalog\`.
43204
+ 4. Read matching descriptors with \`skill.get\` and the full file with \`skill.file.get\`.
43205
+
43206
+ If an existing Skill is close, propose an update draft or assignment instead of a new Skill.
43207
+
43208
+ ## Decide whether a Skill is appropriate
43209
+
43210
+ Create a Skill for repeatable procedures, domain-specific output contracts, local/client setup patterns, reusable examples, and company operating standards.
43211
+
43212
+ Do not create a Skill for:
43213
+
43214
+ - Authorization or tool access.
43215
+ - Secrets, credentials, API keys, or vault refs.
43216
+ - One-off evidence that belongs on the task.
43217
+ - Temporary style preferences.
43218
+ - Charter rules, escalation boundaries, or human decision policy.
43219
+
43220
+ If the user asks for authority, update the Charter path. If the user gives one-off evidence, keep it in the task context.
43221
+
43222
+ ## Authoring checklist
43223
+
43224
+ The \`SKILL.md\` body should be short, procedural, and testable. Include:
43225
+
43226
+ - A clear title.
43227
+ - An \`application.summary\` that says when to use it.
43228
+ - \`application.not_for\` for risky or out-of-scope cases.
43229
+ - Required and optional tools only when the procedure genuinely needs them.
43230
+ - An output contract when consistency matters.
43231
+ - Missing-evidence behavior: state what is missing instead of guessing.
43232
+
43233
+ Use \`tool.catalog\` before naming a tool. Required tool scope tiers must be the minimum useful scope. Optional tools are for improved delivery, not hidden blockers.
43234
+
43235
+ ## Safe command path
43236
+
43237
+ - Draft: \`skill.create\` or \`skill.update_draft\`.
43238
+ - Public GitHub import: \`skill.import_github\` with the URL, ref, and package path.
43239
+ - Uploaded text import: \`skill.import_upload\`.
43240
+ - Publish: \`skill.publish\` returns a human confirmation. Stop and ask the human to approve or reject.
43241
+
43242
+ Never approve your own publication. Never paste secrets into \`SKILL.md\`, support files, command JSON, issue comments, or logs.
43243
+
43244
+ ## Quality bar
43245
+
43246
+ Before handing off, say what the Skill is for, why it is reusable, what tools it depends on, and what human gate remains. If validation warnings exist, fix them or call them out as blockers.`
43247
+ },
43248
+ {
43249
+ slug: "agent-skill-setup-guide",
43250
+ order: 51,
43251
+ title: "Agent Skill setup guide",
43252
+ summary: "CLI and MCP recipes for discovering, reading, dependency-checking, assigning, and locally syncing Skills.",
43253
+ version: "2026-06-21.1",
43254
+ public: true,
43255
+ audiences: ["cli", "mcp", "in_app_agent"],
43256
+ stages: ["staffing", "operating_rhythm"],
43257
+ relatedCommandIds: ["skill.list", "skill.catalog", "skill.enable_catalog", "skill.get", "skill.file.get", "skill.assigned.list", "skill.check_dependencies", "skill.install_local", "skill.sync_local", "skill.import_github", "skill.import_upload", "skill.assign_to_seat", "agent.configure_tools", "confirmation.approve"],
43258
+ legal: { publicRisk: "low", notes: ["Machine-facing setup recipes for Skills over CLI and MCP."] },
43259
+ sources: [
43260
+ {
43261
+ label: "Agent Skills implementation plan",
43262
+ internalPath: "docs/specs/agent-skills-implementation-plan.md",
43263
+ note: "Defines CLI/MCP setup sequence, dependency handling, and local sync behavior."
43264
+ }
43265
+ ],
43266
+ body: `# Agent Skill setup guide
43267
+
43268
+ Use this guide before creating, enabling, assigning, or locally installing Skills from CLI or MCP.
43269
+
43270
+ ## Setup sequence
43271
+
43272
+ 1. Read \`agent-reference-map\`.
43273
+ 2. List company Skills: \`skill.list\` / \`rost_list_skills\` or read \`rost://skills\`.
43274
+ 3. List {{brand}} catalog Skills when needed: \`skill.catalog\` / \`rost_list_rost_skill_catalog\`.
43275
+ 4. Read descriptors: \`skill.get\` / \`rost_get_skill\` or \`rost://skills/{slug}\`.
43276
+ 5. Read full files before assignment: \`skill.file.get\` / \`rost_get_skill_file\` or \`rost://skills/{slug}/files/SKILL.md\`.
43277
+ 6. Check dependencies for the target Seat: \`skill.check_dependencies\` / \`rost_check_skill_dependencies\`.
43278
+ 7. Tenant-admin command callers propose assignment with \`skill.assign_to_seat\` / \`rost_assign_skill_to_seat\`; seat-scoped agents read assigned Skills and escalate assignment requests to a human or tenant-admin.
43279
+ 8. After approval, list assignments with \`skill.assigned.list\` or \`rost://seat/{id}/skills\`.
43280
+ 9. For local clients, run \`skill.sync_local\` / \`rost_sync_assigned_skills_locally\`.
43281
+
43282
+ Tenant-admin command callers may propose assignments; seat-scoped agents escalate assignment requests. Humans approve publication, approved assignment, revocation, and Charter or manifest changes.
43283
+
43284
+ ## Attach an existing company Skill to a new Seat
43285
+
43286
+ Tenant-admin CLI:
43287
+
43288
+ \`\`\`bash
43289
+ {{cli}} skills list --json
43290
+ {{cli}} skills get --slug invoice-review --json
43291
+ {{cli}} skills file --slug invoice-review --path SKILL.md
43292
+ {{cli}} skills check-dependencies --seat-id <seat-id> --slug invoice-review --json
43293
+ {{cli}} skills assign --seat-id <seat-id> --slug invoice-review --rationale "Use for AP exception work." --json
43294
+ \`\`\`
43295
+
43296
+ Tenant-admin MCP:
43297
+
43298
+ 1. Call \`rost_list_skills\` with \`{}\`.
43299
+ 2. Call \`rost_get_skill\` and \`rost_get_skill_file\`.
43300
+ 3. Call \`rost_check_skill_dependencies\` with \`{"seat_id":"<seat-id>","slug":"invoice-review"}\`.
43301
+ 4. If ready, call \`rost_assign_skill_to_seat\` with \`status:"proposed"\`.
43302
+
43303
+ Seat-scoped MCP agents cannot call generated Skill assignment tools. They should read \`rost://seat/{id}/skills\`, read relevant assigned files through \`rost://skills/{slug}/files/{path}\`, and escalate when a new assignment or permission change is needed.
43304
+
43305
+ If required tools are blocked, call \`rost_configure_agent_tools\` only when the human wants to amend the permission manifest. Then wait for the normal Charter/tool approval path.
43306
+
43307
+ ## Enable a {{brand}} catalog Skill and assign it
43308
+
43309
+ CLI:
43310
+
43311
+ \`\`\`bash
43312
+ {{cli}} skills catalog --json
43313
+ {{cli}} skills enable rost/ap-exception-brief --json
43314
+ {{cli}} skills check-dependencies --seat-id <seat-id> --slug ap-exception-brief --json
43315
+ {{cli}} skills assign --seat-id <seat-id> --slug ap-exception-brief --rationale "Use the first-party AP exception procedure." --json
43316
+ \`\`\`
43317
+
43318
+ \`skill.enable_catalog\` creates a company-owned immutable copy and may return a human confirmation. Do not re-run blindly after approval; read the approval output or list Skills again.
43319
+
43320
+ Tenant-admin MCP:
43321
+
43322
+ 1. Call \`rost_list_rost_skill_catalog\` with \`{}\`.
43323
+ 2. Call \`rost_enable_rost_catalog_skill\` with \`{"slug":"rost/ap-exception-brief"}\`; if it returns a confirmation, stop for the human approval output.
43324
+ 3. Call \`rost_check_skill_dependencies\` with the enabled Skill slug and target Seat.
43325
+ 4. Call \`rost_assign_skill_to_seat\` with \`status:"proposed"\`; do not self-approve assignment.
43326
+
43327
+ ## Inspect, import, dependency-check, and propose a GitHub Skill
43328
+
43329
+ Tenant-admin MCP:
43330
+
43331
+ 1. Call \`rost_import_github_skill\` with \`{"url":"https://github.com/acme/skills/tree/main/ap","status":"pending_review"}\`.
43332
+ 2. Read the returned descriptor and validation findings.
43333
+ 3. Call \`rost_get_skill_file\` for \`SKILL.md\`.
43334
+ 4. If it should be assignable, ask a human to publish with \`rost_publish_skill\`.
43335
+ 5. After publication, call \`rost_check_skill_dependencies\`.
43336
+ 6. Propose assignment with \`rost_assign_skill_to_seat\`.
43337
+
43338
+ Uploaded packages use \`rost_import_uploaded_skill\` with structured text files. MCP does not accept direct binary upload in this release.
43339
+
43340
+ ## Interpret dependency and entitlement output
43341
+
43342
+ - \`required_tools\`: must be present at or above \`min_scope_tier\`; missing or under-scoped required tools block approved assignment.
43343
+ - \`optional_tools\`: useful but not required; missing optional tools warn only.
43344
+ - \`application\`: when to use the Skill and when not to.
43345
+ - \`entitlement_status: not_entitled\`: the tenant cannot enable that {{brand}} catalog tier. Do not ask for private source URLs.
43346
+ - Duplicate slug or existing company Skill: use the existing Skill or choose a distinct slug; catalog enablement does not overwrite tenant Skills.
43347
+ - Local install result \`installed\`, \`unchanged\`, or \`removed\`: the local client wrote, skipped by hash, or removed a revoked copy.
43348
+
43349
+ Good assignment: the Seat's Charter already owns AP exception review, the Skill's application matches that work, and \`skill.check_dependencies\` is \`ready\`.
43350
+
43351
+ Bad assignment: the Skill requires a payment-write tool the Charter does not grant, or the operator wants the Skill to authorize an approval boundary. Configure the Charter/tool path or choose a narrower Skill instead.
43352
+
43353
+ ## Local sync
43354
+
43355
+ Prefer sync for local agents:
43356
+
43357
+ \`\`\`bash
43358
+ {{cli}} skills sync --seat-id <seat-id> --client codex --json
43359
+ \`\`\`
43360
+
43361
+ Set \`ROST_SKILL_INSTALL_ROOT\` only for a sandbox or CI override. Local copies are derived from {{brand}} command output and include \`.rost-skill.json\` metadata. A local copy is not authority; the server still loads assigned immutable Skill versions and still guards every tool call.`
43362
+ },
43363
+ {
43364
+ slug: "agent-reference-map",
43365
+ order: 55,
43067
43366
  title: "Agent reference map",
43068
43367
  summary: "Where CLI sessions, MCP clients, and in-app agents should retrieve {{brand}} guidance before recommending setup changes.",
43069
- version: "2026-06-20.2",
43368
+ version: "2026-06-21.2",
43070
43369
  public: true,
43071
43370
  audiences: ["cli", "mcp", "in_app_agent"],
43072
43371
  stages: ["company_setup", "graph_design", "charter_design", "staffing", "operating_rhythm"],
@@ -43100,7 +43399,7 @@ Use this map when you are a CLI session, MCP client, or in-app agent and need to
43100
43399
  - Search tool: rost_reference_search
43101
43400
  - Get tool: rost_reference_get
43102
43401
  - Reference resource template: rost://reference/{slug}
43103
- - Operation resources (read-only, scope-enforced): rost://tenant/status, rost://graph, rost://seat/{id}/context, rost://compass/current, rost://sync/latest, rost://operations/reference-map
43402
+ - Operation resources (read-only, scope-enforced): rost://tenant/status, rost://graph, rost://seat/{id}/context, rost://compass/current, rost://sync/latest, rost://skills, rost://skills/{slug}, rost://skills/{slug}/files/{path}, rost://seat/{id}/skills, rost://operations/reference-map
43104
43403
 
43105
43404
  Start with rost_reference_search when the user asks a broad question. Use rost_reference_get when a workflow or command metadata already names a guide slug. Read the operation resources to load current tenant/seat facts before mutating; tenant-wide resources need a tenant-admin token and a seat token may read only its own rost://seat/{id}/context.
43106
43405
 
@@ -43141,12 +43440,16 @@ Agents that run on {{brand}}-managed inference draw against a tenant inference b
43141
43440
  11. tool-access-and-vault
43142
43441
  12. available-tools-guide
43143
43442
  13. mcp-and-cli-guide
43144
- 14. cascade-guide
43145
- 15. signal-guide
43146
- 16. friction-guide
43147
- 17. confirmations-guide
43148
- 18. steward-queue-guide
43149
- 19. sync-rhythm-playbook
43443
+ 14. skill-builder-guide
43444
+ 15. agent-skill-authoring-guide
43445
+ 16. agent-skill-setup-guide
43446
+ 17. ai-model-data-handling-guide
43447
+ 18. cascade-guide
43448
+ 19. signal-guide
43449
+ 20. friction-guide
43450
+ 21. confirmations-guide
43451
+ 22. steward-queue-guide
43452
+ 23. sync-rhythm-playbook
43150
43453
 
43151
43454
  ## Workflow to guide map
43152
43455
 
@@ -43160,6 +43463,9 @@ Read the listed guide before recommending or running each workflow. Every workfl
43160
43463
  - Add an agent through the app (graph or sidebar, visual journey): add-agents-guide.
43161
43464
  - Create an agent from a template: stock-agents-guide, then how-agents-work.
43162
43465
  - Create a custom agent (operational answers, Charter Builder, configure tools, dry run, go live): custom-agents-guide, then agent-staffing-playbook and tool-access-and-vault.
43466
+ - Create, import, review, or publish a reusable Skill: skill-builder-guide for human workflow, then agent-skill-authoring-guide for CLI/MCP authoring rules.
43467
+ - Assign, dependency-check, enable a catalog Skill, import a GitHub Skill, or sync local Skill files: agent-skill-setup-guide, then mcp-and-cli-guide.
43468
+ - Explain AI model data handling, BYOK, local agent provider settings, or what data may enter prompts/tool calls: ai-model-data-handling-guide, then security-model-guide.
43163
43469
  - Build a controlled agent worker directly on the CLI/MCP path (seat, steward, job, boundaries, tools, credentials, model, schedule, dry-run, go-live): agent-builder-guide \u2014 it shows the full setup sequence, the structured model config, the model catalog (model.catalog), the access tiers, how to discover tools (tool.catalog), which connector entries have live execution boundaries, and how to show your human a markdown readout (agent.show_markdown).
43164
43470
  - Connect an existing or local agent to a seat: stock-agents-guide (connect section), then mcp-and-cli-guide and runner-guide.
43165
43471
  - Run the operating loop as a seat (context, tasks, status, escalate): how-agents-work.
@@ -43176,10 +43482,10 @@ Read the listed guide before recommending or running each workflow. Every workfl
43176
43482
  - Company setup: rost-implementation-method, compass-authoring-guide, settings-guide, settings-members-and-invites-guide
43177
43483
  - Graph design: responsibility-graph-playbook
43178
43484
  - Charter design: charter-design-playbook, charter-authoring-deep-dive
43179
- - Staffing: agent-staffing-playbook, add-agents-guide, custom-agents-guide, agent-builder-guide, how-agents-work, tool-access-and-vault, available-tools-guide, mcp-and-cli-guide, stock-agents-guide
43485
+ - Staffing: agent-staffing-playbook, add-agents-guide, custom-agents-guide, agent-builder-guide, how-agents-work, tool-access-and-vault, available-tools-guide, skill-builder-guide, agent-skill-authoring-guide, agent-skill-setup-guide, mcp-and-cli-guide, stock-agents-guide
43180
43486
  - Operating rhythm: cascade-guide, signal-guide, friction-guide, confirmations-guide, steward-queue-guide, sync-rhythm-playbook, notifications-guide
43181
43487
  - Local agents and runners: mcp-and-cli-guide, runner-guide, agent-reference-map
43182
- - Security and troubleshooting: security-model-guide, troubleshooting-guide
43488
+ - Security and troubleshooting: ai-model-data-handling-guide, security-model-guide, troubleshooting-guide
43183
43489
 
43184
43490
  ## Agent behavior
43185
43491
 
@@ -43525,11 +43831,11 @@ Stop before: approving a Charter, signing a manifest, connecting a tool or crede
43525
43831
  order: 72,
43526
43832
  title: "Settings guide",
43527
43833
  summary: "How to use Settings as the control plane for company access, channels, providers, tokens, and operating defaults.",
43528
- version: "2026-06-20.7",
43834
+ version: "2026-06-21.2",
43529
43835
  public: true,
43530
43836
  audiences: ["human", "cli", "mcp", "in_app_agent"],
43531
43837
  stages: ["company_setup", "staffing"],
43532
- relatedCommandIds: ["onboarding.create_invite", "mcp_token.create", "mcp_token.revoke", "mcp_token.list", "integration.list", "integration.readiness", "integration.status", "integration.test", "settings.get", "settings.update", "settings.sync_brief_scope.get", "settings.sync_brief_scope.update"],
43838
+ relatedCommandIds: ["onboarding.create_invite", "mcp_token.create", "mcp_token.revoke", "mcp_token.list", "integration.list", "integration.readiness", "integration.status", "integration.test", "settings.get", "settings.update", "settings.sync_brief_scope.get", "settings.sync_brief_scope.update", "settings.product_learning.get", "settings.product_learning.update"],
43533
43839
  legal: { publicRisk: "low", notes: ["{{brand}}-native settings guidance."] },
43534
43840
  sources: [
43535
43841
  {
@@ -43556,6 +43862,7 @@ Start with members and invites, then provider and channel connections, then MCP
43556
43862
  - Connected machines (the paired Runners that run scheduled local work orders).
43557
43863
  - Stored credentials (vault references only) and tool access approvals.
43558
43864
  - Operating defaults, including Sync Brief scope.
43865
+ - Product-learning participation for bounded product analytics.
43559
43866
 
43560
43867
  Settings lifecycle timestamps are display metadata for tokens, connected machines, integrations, and stored credentials. They may be emitted by the database as either timestamp values or strings, but Settings renders them as safe labels rather than treating timestamp formatting failures as page-level failures.
43561
43868
 
@@ -43571,13 +43878,23 @@ Reconnects keep historical rows for audit, but provider status in Settings, CLI,
43571
43878
 
43572
43879
  The weekly Sync Brief compiles either company-wide or per cluster. Company-wide is one brief covering the whole company and is the default for a new company. Per cluster compiles one brief per cluster, scoped to each cluster's seats; pick it when clusters run their own weekly sync. Per cluster falls back to a single company-wide brief when the company has no clusters, so the rhythm never produces zero briefs. The owner sets this at onboarding and can change it later in Settings.
43573
43880
 
43881
+ ## Product learning
43882
+
43883
+ Product-learning participation controls whether {{brand}} may record product/page/recommendation analytics for this tenant. It does not disable security logs, audit logs, error logs, events, tool-call guard records, or other operational records required to run and secure the service.
43884
+
43885
+ - \`enabled\` allows bounded product analytics for feature quality, defaults, templates, recommendations, safety checks, and reliability.
43886
+ - \`disabled\` blocks generic product/page/recommendation analytics for the tenant.
43887
+ - \`enterprise_contract\` blocks generic product-learning writes until contract-specific handling exists.
43888
+
43889
+ Read the policy with \`settings.product_learning.get\` (CLI: \`{{cli}} settings product-learning get\`). Change it with \`settings.product_learning.update\` (CLI: \`{{cli}} settings product-learning update --mode disabled\`). Analytics ingestion code should call the shared product-learning policy helper instead of reading \`tenants.settings\` directly.
43890
+
43574
43891
  ## Inference budget
43575
43892
 
43576
43893
  Agents that run on {{brand}}-managed inference draw against a tenant inference budget with a hard cap. A new company starts with a hard cap of $0, so a managed-inference run is blocked until the cap is raised. When a run hits the cap it stops with a typed budget error that names the fix; raise the cap before agents can run again.
43577
43894
 
43578
43895
  - Set the hard cap with \`settings.update\` (CLI: \`{{cli}} settings update --hard-cap-usd <amount>\`). The optional soft cap warns before the hard cap and must be less than or equal to it.
43579
43896
  - The sandbox dry run is free and is never blocked by the cap, so a fresh company can charter, dry-run, and take an agent live before setting a budget. The cap applies only to real managed-inference runs.
43580
- - A company that brings its own provider key (BYOK) is metered on that key and is not subject to the {{brand}}-managed hard cap.
43897
+ - A company that brings its own provider key (BYOK) is metered on that key and is not subject to the {{brand}}-managed hard cap. BYOK changes the provider account used for eligible cloud calls, not the Charter, tool guard, human gate, or data-retention posture; see the ai-model-data-handling-guide before making provider-handling claims.
43581
43898
 
43582
43899
  ## Agent guidance
43583
43900
 
@@ -43894,15 +44211,200 @@ Most reads are safe to run while diagnosing. Any fix that changes authority, cre
43894
44211
  Name the failing surface, collect evidence, recommend the smallest correction, and escalate when the fix changes authority, credentials, or go-live state. Never paste secrets into chat or tool arguments while troubleshooting.`
43895
44212
  },
43896
44213
  {
43897
- slug: "security-model-guide",
44214
+ slug: "ai-model-data-handling-guide",
43898
44215
  order: 78,
44216
+ title: "AI model data handling guide",
44217
+ summary: "How {{brand}} cloud agents, local MCP sessions, runners, BYOK, and connected tools handle model-bound data.",
44218
+ version: "2026-06-21.4",
44219
+ public: true,
44220
+ audiences: ["human", "cli", "mcp", "in_app_agent"],
44221
+ stages: ["company_setup", "staffing", "operating_rhythm"],
44222
+ relatedCommandIds: [
44223
+ "tenant.anthropic_key.save",
44224
+ "credential.ingress",
44225
+ "agent.configure_tools",
44226
+ "mcp_token.create",
44227
+ "runner.pairing.start",
44228
+ "agent.run_now",
44229
+ "work_order.enqueue",
44230
+ "tool.catalog"
44231
+ ],
44232
+ legal: {
44233
+ publicRisk: "medium",
44234
+ notes: [
44235
+ "Provider policy summary must stay conservative and source-linked.",
44236
+ "Does not claim zero-data-retention, HIPAA readiness, or model-training exclusions beyond provider account and contract scope."
44237
+ ]
44238
+ },
44239
+ sources: [
44240
+ {
44241
+ label: "OpenAI API data controls",
44242
+ url: "https://developers.openai.com/api/docs/guides/your-data",
44243
+ note: "Official API data-use and retention controls verified 2026-06-21."
44244
+ },
44245
+ {
44246
+ label: "OpenAI enterprise privacy",
44247
+ url: "https://openai.com/enterprise-privacy/",
44248
+ note: "Official enterprise privacy and API retention summary verified 2026-06-21."
44249
+ },
44250
+ {
44251
+ label: "OpenAI Codex with ChatGPT plan",
44252
+ url: "https://help.openai.com/en/articles/11369540-using-codex-with-your-chatgpt-plan",
44253
+ note: "Official Codex plan data-control scope verified 2026-06-21."
44254
+ },
44255
+ {
44256
+ label: "Anthropic API and data retention",
44257
+ url: "https://platform.claude.com/docs/en/manage-claude/api-and-data-retention",
44258
+ note: "Official Claude API ZDR, HIPAA, and retention scope verified 2026-06-21."
44259
+ },
44260
+ {
44261
+ label: "Claude Code data usage",
44262
+ url: "https://code.claude.com/docs/en/data-usage",
44263
+ note: "Official local Claude Code data-flow, training, and retention summary verified 2026-06-21."
44264
+ },
44265
+ {
44266
+ label: "Reference corpus and docs spec",
44267
+ internalPath: "docs/specs/reference-corpus-and-docs.md",
44268
+ note: "Defines the public reference guide set and agent retrieval surfaces."
44269
+ }
44270
+ ],
44271
+ body: `# AI model data handling guide
44272
+
44273
+ Use this guide when a human, CLI session, MCP client, or in-app agent needs to understand what data can reach an AI model, what {{brand}} controls, and what remains governed by the customer's provider account, local client, or connected tools.
44274
+
44275
+ This is product guidance, not a legal warranty. Provider terms, enterprise contracts, data-processing addenda, retention controls, regional settings, and endpoint-specific behavior can change. Verify the provider account and contract before relying on a zero-data-retention, HIPAA, regional, or no-training posture.
44276
+
44277
+ For {{brand}}'s own product-improvement posture, read the public Privacy Policy and Terms of Service at \`/privacy\` and \`/terms\`. They state that {{brand}} may analyze aggregated or de-identified data about usage, setup patterns, agent outcomes, and operating metrics to improve product features, defaults, templates, recommendations, safety checks, and reliability; they also state that {{brand}} does not sell customer data, share one customer's workspace data with another customer, or use identifiable customer content to train generalized AI models. Google user data and information derived from Google APIs stay under the Privacy Policy's Google user data limits and are not included in cross-customer product-improvement analytics. Do not turn this into a provider-side claim about a customer's local client, BYOK provider account, or third-party tool.
44278
+
44279
+ ## The three agent lanes
44280
+
44281
+ {{brand}} names the execution lane on runs and work orders. Use these exact terms:
44282
+
44283
+ | Lane | Where model-bound data is assembled | Who controls provider handling |
44284
+ |---|---|---|
44285
+ | \`cloud\` | The {{brand}} cloud runtime builds bounded prompt context from the Seat Charter, signed permission manifest, task or work order, relevant operating facts, selected Skill files, and tool results. | The current managed cloud path uses Anthropic-backed model configuration, either through {{brand}}'s platform-managed provider account or the tenant's approved BYOK Anthropic credential when that tenant has saved one. |
44286
+ | \`mcp_session\` | A local agent client such as Claude Code, Codex, OpenCode, Cursor, or another MCP-capable client asks {{brand}} for scoped context, resources, and command results. | The customer's local client, model provider account, proxy, and provider settings. {{brand}} does not control that local provider's retention, training, telemetry, or local transcript storage. |
44287
+ | \`runner\` | A paired runner claims work from {{brand}}, receives bounded work-order context, and may invoke a local or customer-controlled model client to complete the work. | The runner host, local client, and provider account used by that runner. {{brand}} controls the work-order boundary and audit path, not every downstream local model setting. |
44288
+
44289
+ When answering "where did my data go?", name the lane first. Do not collapse \`cloud\`, \`mcp_session\`, and \`runner\` into one generic "agent" path.
44290
+
44291
+ ## Cloud agents
44292
+
44293
+ For \`cloud\` runs, {{brand}} prepares the minimum context needed for the Seat to act:
44294
+
44295
+ - Charter purpose, responsibilities, autonomous scope, approval scope, escalation rules, Signals, and signed permission manifest.
44296
+ - The task, work order, Sync/Friction/Signal context, or human instruction for that run.
44297
+ - Assigned Skill summaries and the bounded contents of selected approved Skill files.
44298
+ - Tool results that the server-side guard allowed and that are relevant to the next model turn.
44299
+ - Model catalog choices and run metadata needed to attribute cost and diagnostics.
44300
+
44301
+ Cloud prompts should not include raw credentials, long exports, unrelated customer records, or secret values. A tool result can become model context, so keep tool scopes narrow and connect only the tools the Seat's Charter actually needs. The server-side guard decides whether a tool call is allowed, escalated, or denied; model output and Skill text never grant authority.
44302
+
44303
+ ## BYOK Anthropic
44304
+
44305
+ Tenant BYOK changes which provider account is used for eligible \`cloud\` model calls. It does not loosen tool permissions, human gates, tenant isolation, or audit requirements.
44306
+
44307
+ Store a tenant Anthropic key only through \`tenant.anthropic_key.save\` / \`rost_save_tenant_anthropic_key\` or the generic credential ingress path. The key is handled as a vault-backed credential: {{brand}} stores a vault reference and safe metadata, not the raw key in prompts, config, logs, or command output. A human approves the credential flow.
44308
+
44309
+ After BYOK is saved, provider-side retention, training, regional, HIPAA, or zero-data-retention posture depends on that Anthropic organization, workspace, model, feature, and contract. Do not tell a customer "BYOK means zero retention" or "BYOK means no training" unless their provider arrangement actually says that.
44310
+
44311
+ ## Local MCP sessions
44312
+
44313
+ In a \`mcp_session\`, {{brand}} is the governed operating-system surface. The local agent client is still its own model client.
44314
+
44315
+ {{brand}} can enforce token scope, tenant isolation, command schemas, human confirmations, tool guards, and redacted command output. It cannot decide whether the local client stores transcripts, sends telemetry, opts into model improvement, uses a consumer account, uses a commercial account, routes through a proxy, or applies zero-data-retention settings. Those are local client and provider settings.
44316
+
44317
+ {{brand}} command and resource outputs are returned to the local client. Seat context, Charter text, task and Signal facts, reference guide bodies, command JSON, and filtered tool results may become part of that client's provider request unless the operator narrows scope, redacts the input, or uses a provider setting that prevents it. Treat every MCP read as data that can enter the local model transcript.
44318
+
44319
+ Before connecting a local agent to sensitive work, verify:
44320
+
44321
+ - Which model provider and account the local client is using.
44322
+ - Whether the account is consumer, team, enterprise, API, or routed through another platform.
44323
+ - Whether model-improvement sharing, telemetry, transcript retention, and local logs are enabled.
44324
+ - Whether the client stores session files locally, and where those files live.
44325
+ - Whether screenshots, files, terminal output, browser data, or tool results can be included in the client transcript.
44326
+
44327
+ For example, official Claude Code docs distinguish consumer and commercial handling, describe local plaintext session transcripts, and state that local clients send prompts and outputs to the configured provider. Official OpenAI API docs distinguish API data controls from consumer products, while official Codex help says ChatGPT training data controls apply to content processed through Codex when Codex is used with a ChatGPT plan. Treat each local agent's provider settings as part of the customer's environment review.
44328
+
44329
+ ## Runners
44330
+
44331
+ A \`runner\` is paired to {{brand}} and claims work orders. {{brand}} records the work-order state, lane, Seat, run diagnostics, and audited tool-call outcomes. The runner host controls the local execution environment.
44332
+
44333
+ Keep runner prompts bounded to the work order and Seat context. Do not paste runner bearer secrets, API keys, \`.env\` contents, SSH keys, OAuth tokens, database URLs, or private package credentials into prompts, tool args, screenshots, logs, or status updates. If a runner needs a credential, use the governed credential ingress and vault reference path or the customer's own secure local secret mechanism; do not turn the credential into model context.
44334
+
44335
+ If a runner invokes Claude Code, Codex, OpenCode, Cursor, or another local model client, provider data handling follows that local client and account, not the {{brand}} cloud provider path.
44336
+
44337
+ ## Connected tools and tool results
44338
+
44339
+ Connected tools are often the highest-risk data path because a valid tool result may be summarized into the next model turn.
44340
+
44341
+ Use these rules:
44342
+
44343
+ - Connect the narrowest tool scopes needed for the Seat's Charter.
44344
+ - Prefer filtered reads over full exports.
44345
+ - Keep credentials in vault refs and tool handlers; do not send raw secret values to the model.
44346
+ - Treat third-party tool data handling separately from model-provider data handling.
44347
+ - Escalate when a tool would expose regulated data, unusually broad customer records, confidential legal or HR material, or data outside the Seat's approved scope.
44348
+
44349
+ Tool selection is never authorization. Every live tool call still passes the server-side guard and writes an audit record.
44350
+
44351
+ ## What not to put in prompts or tool args
44352
+
44353
+ Do not intentionally put these into prompts, MCP tool arguments, runner work orders, Skill files, status updates, or screenshots unless the customer has a documented need and a matching provider/tool contract:
44354
+
44355
+ - API keys, OAuth tokens, passwords, session cookies, SSH keys, signing keys, or recovery codes.
44356
+ - Raw \`.env\` files, private database URLs, credential vault payloads, or unredacted logs containing secrets.
44357
+ - Full customer exports when a filtered subset would answer the question.
44358
+ - Payment card data, PHI, government identifiers, or other regulated records without the required contract and workflow.
44359
+ - Private source URLs with embedded tokens or signed URLs.
44360
+ - Data from another tenant, workspace, account, or seat.
44361
+
44362
+ If sensitive data appears by accident, stop, do not repeat it, and route cleanup through the customer's incident process.
44363
+
44364
+ ## Provider policy checkpoints
44365
+
44366
+ For platform-managed \`cloud\` runs and BYOK Anthropic \`cloud\` runs, check the Anthropic account, workspace, model, and contract. As of 2026-06-21, official Anthropic Claude API documentation says retained API data is not used for model training without express permission, that some API features are ZDR-eligible while others are not, and that ZDR, HIPAA readiness, model-specific retention requirements, consumer products, Claude Code, and third-party integrations each have their own scope.
44367
+
44368
+ For local OpenAI API-key clients running through \`mcp_session\` or \`runner\`, check the customer's OpenAI organization, project, endpoint, and API data controls. As of 2026-06-21, official OpenAI API documentation says API data is not used to train or improve OpenAI models unless the customer explicitly opts in, and default abuse-monitoring logs may retain customer content for up to 30 days unless approved controls apply. OpenAI says zero data retention is available only for eligible customers, endpoints, and use cases.
44369
+
44370
+ For Codex specifically, first identify whether the operator is using Codex through a ChatGPT Free/Plus/Pro, Business, Enterprise, Edu, API, or other workspace path. Official OpenAI Codex help says ChatGPT training data controls apply to whether content processed through Codex may be used to improve OpenAI models when Codex is used with a ChatGPT plan, and that Pro and Plus conversations may be used unless training is disabled. Do not give a Codex user the OpenAI API answer unless they are actually using an API-governed Codex path.
44371
+
44372
+ For local Claude Code clients running through \`mcp_session\` or \`runner\`, check whether the customer is using a consumer, team, enterprise, API, or third-party-platform path. Official Claude Code documentation separately describes consumer versus commercial handling, local transcript storage, telemetry, feedback, and provider-specific defaults.
44373
+
44374
+ Use those statements only as current provider-doc summaries. Do not convert them into a blanket {{brand}} claim. The correct customer-facing answer is: "Here is the lane, here is what {{brand}} sends, here is which provider account or local client handles it, and here is what to verify in that account before treating the workflow as no-training, zero-retention, HIPAA-ready, or region-bound."
44375
+
44376
+ ## Agent response checklist
44377
+
44378
+ When asked about AI data handling:
44379
+
44380
+ 1. Identify the lane: \`cloud\`, \`mcp_session\`, or \`runner\`.
44381
+ 2. Name the specific data classes that can enter the prompt or tool result.
44382
+ 3. Name whether the provider path is platform-managed, tenant BYOK Anthropic, local client/account, or runner-controlled.
44383
+ 4. Warn if the answer depends on provider settings, contract terms, ZDR approval, HIPAA readiness, model choice, endpoint, or third-party tool policy.
44384
+ 5. Recommend the smallest safe next step: narrow the tool scope, use a vault ref, redact the input, switch to the approved provider account, or escalate for human/legal review.`
44385
+ },
44386
+ {
44387
+ slug: "security-model-guide",
44388
+ order: 79,
43899
44389
  title: "Security model guide",
43900
44390
  summary: "How {{brand}} protects tenant data, credentials, tool calls, and human decisions across web, MCP, CLI, and agents.",
43901
- version: "2026-06-20.1",
44391
+ version: "2026-06-21.5",
43902
44392
  public: true,
43903
44393
  audiences: ["human", "cli", "mcp", "in_app_agent"],
43904
44394
  stages: ["company_setup", "staffing", "operating_rhythm"],
43905
- relatedCommandIds: ["mcp_token.create", "mcp_token.revoke", "charter.sign_manifest"],
44395
+ relatedCommandIds: [
44396
+ "mcp_token.create",
44397
+ "mcp_token.revoke",
44398
+ "charter.sign_manifest",
44399
+ "credential.ingress",
44400
+ "tenant.anthropic_key.save",
44401
+ "runner.pairing.start",
44402
+ "agent.configure_tools",
44403
+ "agent.list_tool_calls",
44404
+ "agent.get_run",
44405
+ "integration.status",
44406
+ "integration.readiness"
44407
+ ],
43906
44408
  legal: { publicRisk: "low", notes: ["Public security model summary without internal implementation details."] },
43907
44409
  sources: [
43908
44410
  {
@@ -43928,12 +44430,97 @@ Name the failing surface, collect evidence, recommend the smallest correction, a
43928
44430
  - Tool calls are checked server-side and audited.
43929
44431
  - Agents recommend and draft; humans approve durable decisions.
43930
44432
  - Accepted knowledge changes by supersession, not silent mutation.
44433
+ - Skills are reusable procedures, not authority. They are versioned immutably, can declare tool dependencies, and are loaded only after assignment; they never grant tools or override the Charter.
44434
+
44435
+ ## What {{brand}} stores
44436
+
44437
+ {{brand}} stores operating-system state for each tenant so humans and agents can run the company with an audit trail. The main stored categories are:
44438
+
44439
+ - Company setup, onboarding state, members, roles, invites, and tenant settings.
44440
+ - Compass answers and versions, Responsibility Graph seats, occupancies, Steward links, Charters, signed permission manifests, goals, Signals, Frictions, tasks, decisions, Sync briefs, and events.
44441
+ - Agent setup state, model/run metadata, work orders, run diagnostics, transcript references, token and cost usage, Skill assignments, and immutable Skill activation records.
44442
+ - Tool-call audit rows: tool id, canonical guard result, safe argument summaries, outcome, evidence labels, escalation state, and error linkage.
44443
+ - Integration records, OAuth connection metadata, channel/binding metadata, notification preferences, notification delivery errors, and connector readiness/test results.
44444
+ - MCP token metadata, Runner metadata, runner-pairing state, and revocation state. Raw token material and runner bearer secrets are shown only at issuance when the flow requires it and are not retrievable from normal reads.
44445
+ - Credential records that contain vault references and safe metadata only. Raw API keys, OAuth refresh tokens, tenant Anthropic keys, Slack tokens, Google tokens, and REST connector secrets stay outside Postgres in the configured vault path.
44446
+ - Uploaded or generated documents and bounded extracted context when a user intentionally adds them to onboarding, Compass, Charter, or reference workflows.
44447
+
44448
+ Do not store raw passwords, OAuth tokens, API keys, full \`.env\` files, session cookies, private signed URLs, or credential payloads in prompts, Skill files, command JSON, issue comments, logs, or reference docs. If a workflow needs a secret, route it through credential ingress and store a vault reference.
44449
+
44450
+ ## Access and isolation
44451
+
44452
+ Every tenant-scoped product record is scoped by \`tenant_id\`, and database policies are written so one tenant cannot read another tenant's data through normal application access. Server-side tenant context comes from trusted server-side authority, not from client-supplied tenant ids: browser and CLI user sessions use authenticated Supabase claims plus membership, MCP sessions use the authenticated MCP token record, and runner sessions use the authenticated runner credential record.
44453
+
44454
+ Human access is role-based through tenant membership:
44455
+
44456
+ - Owners can administer tenant settings, integrations, members, MCP tokens, agent setup, and credential flows.
44457
+ - Stewards and members usually act through their seat occupancies and assigned responsibilities; some tenant-scoped setup, read, and credential workflows are also available to active tenant members when the command authorization layer allows them.
44458
+
44459
+ Seat Steward accountability is separate from the tenant membership role named \`steward\`. A Seat Steward is the human accountability chain for an agent seat and receives escalations for that seat, but being named as a Seat Steward does not silently grant a model permission to act.
44460
+
44461
+ Agent authority is seat-scoped even when the machine credential is broader. A seat-scoped MCP token can act only as the seat it was minted for. A paired runner authenticates as a tenant machine credential, claims tenant work orders, and receives seat-scoped work context plus a temporary seat-scoped MCP token for the claimed order; the runner bearer credential itself is not a single-seat credential. Tenant-admin MCP tokens are broader: they can reach workflows in the tenant-admin command surface, bounded by command authorization and guards. Reserve them for setup and administration, and prefer the narrowest scope that can do the job.
44462
+
44463
+ Local clients such as Claude Code, Codex, OpenCode, and Cursor may receive command/resource output through MCP. {{brand}} enforces token scope, schemas, tenant isolation, and redaction on the output it returns; the local client and provider account control local transcript storage, telemetry, and model-provider handling. For that model-bound path, use the ai-model-data-handling-guide.
44464
+
44465
+ ## Credentials and integrations
44466
+
44467
+ Credentials are never authority by themselves. A connected Slack, Google, REST, Anthropic, or future integration credential can be used only when all required checks pass:
44468
+
44469
+ 1. The actor is authorized for the tenant and command.
44470
+ 2. The Seat Charter and signed permission manifest allow or escalate the tool.
44471
+ 3. The tool handler exists and validates its input schema.
44472
+ 4. The integration is connected for the tenant and has an active credential reference.
44473
+ 5. Any extra binding exists, such as a Slack channel binding, REST host/method/path policy, or provider-specific setup requirement.
44474
+ 6. Human confirmation is complete when the command or credential flow requires it.
44475
+
44476
+ Tool selection is never authorization. A selected tool in setup records the requested permission; live execution still goes through the server-side guard, and the system is designed to write a tool-call audit row for every execution attempt. Standard agent audit reads do not return argument summaries or secret material.
44477
+
44478
+ ## Audit trail
44479
+
44480
+ {{brand}} is designed to explain who or what changed operating state:
44481
+
44482
+ - The event log is append-only. Corrections are new events, not edits to old events.
44483
+ - Decisions are human-decided records. Agents can draft or recommend, but durable decisions require a human.
44484
+ - Charters, Compass versions, and accepted knowledge change by supersession instead of silent overwrite.
44485
+ - Agent runs, work orders, tool calls, Skill activations, notification failures, and integration tests leave diagnostic records that can be inspected without exposing raw secrets.
44486
+ - Product-visible server/integration/runtime failures are recorded in \`error_logs\` when tenant context is available; pre-auth or tenant-less failures fall back to structured server logging.
44487
+
44488
+ When reporting evidence to a human, summarize the relevant fields and include stable ids only when they help trace the record. Do not paste raw secrets, full provider responses, full prompt text, or broad exports into status updates.
44489
+
44490
+ ## Retention and support access boundaries
44491
+
44492
+ {{brand}} keeps the records needed to operate, secure, troubleshoot, audit, and improve the product. This guide does not promise a fixed deletion schedule, zero retention, regional residency, HIPAA readiness, or staff-access workflow beyond what is explicitly stated in the customer contract, product settings, or public legal pages.
44493
+
44494
+ Staff and support access should be treated as operationally sensitive. The current public posture is conservative: authorized personnel may access customer information when reasonably needed to operate, secure, or support the service; investigate abuse, reliability, or security issues; comply with law; or respond to a customer request. Google user data and information derived from Google APIs remain subject to the Privacy Policy's Google user data limits: humans may access that data only where the customer gives explicit permission for support, for security, to comply with law, or as required to operate the Google-connected features the customer uses. Do not claim that staff technically cannot access customer data in all circumstances unless that control is included in a separate written agreement and has been implemented for that account.
44495
+
44496
+ When support access is needed, use the least data needed to diagnose the issue, prefer tenant-visible product evidence when available, redact secrets, and do not export broad customer datasets for routine support. Avoid asking customers to paste secrets, OAuth tokens, full provider responses, or raw mailbox/spreadsheet content into chat, tickets, issues, or docs. If a customer asks for deletion, retention, legal hold, DPA, BAA, regional processing, customer-visible staff access logs, break-glass approval, or staff-access commitments, escalate instead of improvising an answer.
44497
+
44498
+ Retention language by category:
44499
+
44500
+ - Workspace operating records such as graph, Charter, goal, Signal, Friction, task, Sync, run, event, and tool-call records are retained while the workspace is active so the product can show history, audit trails, and diagnostics.
44501
+ - Connected-service credentials are revoked when an integration is disconnected or the account is closed. Normal reads return credential metadata and vault references, not raw secret material.
44502
+ - Security, audit, event, diagnostic, and abuse-prevention records may be retained after an account or workspace deletion request is completed when needed for integrity, legal compliance, dispute resolution, or service protection.
44503
+ - Product-improvement analytics use only aggregated or de-identified data under the public Privacy Policy and Terms. Aggregated or de-identified derived metrics may be retained after account closure because they no longer identify a workspace.
44504
+ - Google user data and information derived from Google APIs stay under the Privacy Policy's Google user data limits and are not included in cross-customer product-improvement analytics.
44505
+
44506
+ Deferred enterprise controls are not current promises: customer-visible staff access logs, formal break-glass approval, support-access approval workflows, customer-managed retention windows, full self-serve data export/deletion, regional data residency, DPA/BAA commitments, and HIPAA readiness require separate implementation or contract review before being promised.
43931
44507
 
43932
44508
  The public Privacy Policy and Terms of Service are available at \`/privacy\` and \`/terms\` before sign-in and from the authenticated app chrome.
43933
44509
 
44510
+ Those legal pages state that {{brand}} may analyze aggregated or de-identified data about usage, setup patterns, agent outcomes, and operating metrics to improve product features, defaults, templates, recommendations, safety checks, and reliability. They also state that {{brand}} does not sell customer data, does not share one customer's workspace data with another customer, and does not use identifiable customer content to train generalized AI models. Google user data and information derived from Google APIs stay under the Privacy Policy's Google user data limits and are not included in cross-customer product-improvement analytics. Keep those limits intact when explaining product improvement analytics, and escalate legal/security questions about contracts, deletion, regulated data, or customer-specific commitments.
44511
+
44512
+ For model-bound data questions \u2014 including what \`cloud\`, \`mcp_session\`, or \`runner\` sends to an AI provider, what BYOK changes, and what local clients can store or transmit \u2014 read the ai-model-data-handling-guide before making a provider, retention, HIPAA, ZDR, or no-training claim.
44513
+
44514
+ ## Where to read next
44515
+
44516
+ - Read the ai-model-data-handling-guide for model-provider, BYOK, local-client, MCP-session, and runner data paths.
44517
+ - Read the tool-access-and-vault guide for credential ingress, vault references, permission manifests, and tool execution boundaries.
44518
+ - Read the mcp-and-cli-guide for token scope, installation, rotation, and local-agent setup.
44519
+ - Read the runner-guide for runner pairing, local credential storage, bearer-token handling, and queue boundaries.
44520
+
43934
44521
  ## Agent guidance
43935
44522
 
43936
- Never infer permission from the user's wording or a locally available tool. Check the Charter, manifest, and server response. When in doubt, escalate with the evidence and the narrow question a human must decide.`
44523
+ Never infer permission from the user's wording, a local client configuration, a connected credential, a Skill, or a locally available tool. Check the tenant, role, seat occupancy, Charter, signed permission manifest, command schema, confirmation state, and server response. When in doubt, escalate with the evidence and the narrow question a human must decide.`
43937
44524
  },
43938
44525
  {
43939
44526
  slug: "migration-and-legal-notes",
@@ -45239,6 +45826,18 @@ function field(record2, key) {
45239
45826
  }
45240
45827
  return String(value);
45241
45828
  }
45829
+ function dryRunToolActionLabel(status) {
45830
+ switch (status) {
45831
+ case "intended":
45832
+ return "Would run";
45833
+ case "blocked":
45834
+ return "Blocked";
45835
+ case "escalated":
45836
+ return "Escalated";
45837
+ default:
45838
+ return status;
45839
+ }
45840
+ }
45242
45841
  function formatDryRunTranscript(value) {
45243
45842
  const transcript = asRecord(value);
45244
45843
  const steps = asArray(transcript.steps);
@@ -45251,7 +45850,11 @@ function formatDryRunTranscript(value) {
45251
45850
  const guard = record2.guard === null || record2.guard === void 0 ? "" : ` [${field(record2, "guard")}]`;
45252
45851
  return ` ${kind}: ${field(record2, "text")}${guard}`;
45253
45852
  });
45254
- return ["rehearsal:", ...lines].join("\n");
45853
+ const toolPreview = asArray(transcript.tool_preview).map((action) => {
45854
+ const record2 = asRecord(action);
45855
+ return ` ${dryRunToolActionLabel(field(record2, "status"))}: ${field(record2, "intended_action")} [${field(record2, "tool_name")}]`;
45856
+ });
45857
+ return ["rehearsal:", ...lines, ...toolPreview.length > 0 ? ["tool preview:", ...toolPreview] : []].join("\n");
45255
45858
  }
45256
45859
  function markdownLine(output) {
45257
45860
  const markdown = asRecord(output).markdown;
@@ -45898,12 +46501,33 @@ function integrationUsage(bin) {
45898
46501
  ${bin} integration test --provider <name>`;
45899
46502
  }
45900
46503
  var settingsWrapper = (context, args) => dispatch(context, "settings", args, {
46504
+ "product-learning": (ctx, rest) => dispatch(ctx, "settings product-learning", rest, {
46505
+ get: (innerCtx, innerRest) => {
46506
+ const parsed = parseFlags(innerRest);
46507
+ return execute(innerCtx, parsed, "settings.product_learning.get", {}, (output) => {
46508
+ const policy = asRecord(asRecord(output).product_learning);
46509
+ return `product_learning ${field(policy, "mode")} product_analytics_enabled=${field(policy, "product_analytics_enabled")} security_audit_logs_enabled=${field(policy, "security_audit_logs_enabled")}`;
46510
+ });
46511
+ },
46512
+ update: (innerCtx, innerRest) => {
46513
+ const parsed = parseFlags(innerRest);
46514
+ const mode = optionalValue(parsed, "mode");
46515
+ if (mode !== "enabled" && mode !== "disabled" && mode !== "enterprise_contract") {
46516
+ throw new UsageError("Provide --mode enabled|disabled|enterprise_contract.");
46517
+ }
46518
+ return execute(innerCtx, parsed, "settings.product_learning.update", { mode }, (output) => {
46519
+ const policy = asRecord(asRecord(output).product_learning);
46520
+ return `Updated product-learning policy to ${field(policy, "mode")} (product_analytics_enabled=${field(policy, "product_analytics_enabled")}).`;
46521
+ });
46522
+ }
46523
+ }, settingsUsage(ctx.binName)),
45901
46524
  get: (ctx, rest) => {
45902
46525
  const parsed = parseFlags(rest);
45903
46526
  return execute(ctx, parsed, "settings.get", {}, (output) => {
45904
46527
  const record2 = asRecord(output);
45905
46528
  const spend = asRecord(record2.spend);
45906
- return `tenant ${field(record2, "tenant_id")} plan=${field(record2, "plan")} status=${field(record2, "status")} spend=$${field(spend, "spend_usd")} has_anthropic_key=${field(record2, "has_anthropic_key")}`;
46529
+ const policy = asRecord(record2.product_learning);
46530
+ return `tenant ${field(record2, "tenant_id")} plan=${field(record2, "plan")} status=${field(record2, "status")} spend=$${field(spend, "spend_usd")} has_anthropic_key=${field(record2, "has_anthropic_key")} product_learning=${field(policy, "mode")}`;
45907
46531
  });
45908
46532
  },
45909
46533
  update: (ctx, rest) => {
@@ -45922,9 +46546,11 @@ var settingsWrapper = (context, args) => dispatch(context, "settings", args, {
45922
46546
  }
45923
46547
  }, settingsUsage(context.binName));
45924
46548
  function settingsUsage(bin) {
45925
- return `Usage: ${bin} settings get|update [--json]
46549
+ return `Usage: ${bin} settings get|update|product-learning [--json]
45926
46550
  ${bin} settings get
45927
- ${bin} settings update [--soft-cap-usd <n>] [--hard-cap-usd <n>]`;
46551
+ ${bin} settings update [--soft-cap-usd <n>] [--hard-cap-usd <n>]
46552
+ ${bin} settings product-learning get
46553
+ ${bin} settings product-learning update --mode enabled|disabled|enterprise_contract`;
45928
46554
  }
45929
46555
  var memberWrapper = (context, args) => dispatch(context, "member", args, {
45930
46556
  invite: (ctx, rest) => {
@@ -46574,7 +47200,7 @@ function operationUsageLines(bin) {
46574
47200
  `${bin} sync brief|compile|complete`,
46575
47201
  `${bin} runner list|status|work-orders|revoke`,
46576
47202
  `${bin} notification settings|test|errors`,
46577
- `${bin} settings get|update`,
47203
+ `${bin} settings get|update|product-learning`,
46578
47204
  `${bin} member invite|update|remove`,
46579
47205
  `${bin} agent templates|create|setup|tools|dry-run|go-live|status|run-now|fleet-digest|get-run|show`,
46580
47206
  `${bin} tools list`,