@rosthq/cli 0.6.5 → 0.6.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"command-manifest.d.ts","sourceRoot":"","sources":["../../src/generated/command-manifest.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,eAAO,MAAM,gBAAgB,EAAE,SAAS,oBAAoB,EA0L3D,CAAC"}
1
+ {"version":3,"file":"command-manifest.d.ts","sourceRoot":"","sources":["../../src/generated/command-manifest.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,eAAO,MAAM,gBAAgB,EAAE,SAAS,oBAAoB,EA4L3D,CAAC"}
package/dist/index.js CHANGED
@@ -37433,6 +37433,13 @@ var AGENT_HOW_TO_PROMPT_CONTRACTS = {
37433
37433
  name: "human-confirmations",
37434
37434
  version: "1.0.0",
37435
37435
  filename: "how-tos/human-confirmations.md"
37436
+ },
37437
+ // DER-1045: how an occupant agent collects its seat's agent-sourced measurables
37438
+ // as draft readings via signal.report (a human confirms via signal.confirm_reading).
37439
+ collectSeatSignals: {
37440
+ name: "collect-seat-signals",
37441
+ version: "1.0.0",
37442
+ filename: "how-tos/collect-seat-signals.md"
37436
37443
  }
37437
37444
  };
37438
37445
  function loadAgentHowToPrompt(contract) {
@@ -42261,11 +42268,11 @@ Use the lower-level commands after health names a finding: \`agent.get_run\` for
42261
42268
  order: 46,
42262
42269
  title: "Tool access and vault",
42263
42270
  summary: "How to give agents access to tools without exposing raw credentials or expanding authority by accident.",
42264
- version: "2026-06-30.2",
42271
+ version: "2026-07-02.3",
42265
42272
  public: true,
42266
42273
  audiences: ["human", "cli", "mcp", "in_app_agent"],
42267
42274
  stages: ["staffing"],
42268
- relatedCommandIds: ["charter.sign_manifest", "credential.ingress", "agent.configure_tools", "integration.list", "integration.readiness", "integration.status", "integration.test", "mcp_token.create", "mcp_token.revoke", "mcp_token.list", "confirmation.approve"],
42275
+ relatedCommandIds: ["charter.sign_manifest", "credential.ingress", "agent.configure_tools", "integration.connect_rest", "integration.list", "integration.readiness", "integration.status", "integration.test", "mcp_token.create", "mcp_token.revoke", "mcp_token.list", "confirmation.approve"],
42269
42276
  legal: {
42270
42277
  publicRisk: "low",
42271
42278
  notes: [
@@ -42303,7 +42310,7 @@ Connecting a tool is a human-controlled step. The agent can recommend a tool, ex
42303
42310
 
42304
42311
  ## Generic REST connector
42305
42312
 
42306
- For an API with no dedicated connector, the generic REST tool lets a seat call an HTTP endpoint with a credential you paste through the vault \u2014 no {{brand}}-owned app. It is escalate-by-default: the agent may only call a host, method, and explicit path prefix a steward has signed onto the allowlist; any other host, method, or path is refused and escalated, with no request made. A path prefix of \`/\` means the steward intentionally approved every path. The connector sets the Authorization header from the vaulted credential itself \u2014 the agent never sees the token, and the secret is redacted from the response before it reaches the agent, the audit row, or the logs. The token is only ever sent over HTTPS, only to the signed host and scoped path, and a redirect is never followed \u2014 so an allowlisted endpoint cannot bounce the call (and the token) to another host. A sandbox dry run of a REST tool makes no real request.
42313
+ For an API with no dedicated connector, the generic REST tool lets a seat read an HTTPS endpoint with a credential you paste through the vault \u2014 no {{brand}}-owned app. The agent-facing tool is GET-only. It is escalate-by-default: the agent may only call a host and explicit path prefix a steward has signed onto the allowlist; any other host or path is refused and escalated, with no request made. Mutating methods and request bodies fail before credential binding. A path prefix of \`/\` means the steward intentionally approved every path. The connector sets the Authorization header from the vaulted credential itself \u2014 the agent never sees the token, and the secret is redacted from the response before it reaches the agent, the audit row, or the logs. The token is only ever sent over HTTPS, only to the signed host and scoped path, and a redirect is never followed \u2014 so an allowlisted endpoint cannot bounce the call (and the token) to another host. A sandbox dry run of a REST tool makes no real request.
42307
42314
 
42308
42315
  ## Slack post connector
42309
42316
 
@@ -42319,6 +42326,8 @@ Google can be connected from Settings once the workspace OAuth app is configured
42319
42326
 
42320
42327
  CLI and MCP can inspect connector readiness without seeing secrets: \`integration.list\` / \`rost_list_integrations\` lists connected providers and health metadata, \`integration.status\` / \`rost_get_integration_status\` reads one provider by id or name, and \`integration.test\` / \`rost_test_integration_connection\` runs the installed provider-specific health check. For Google, the test refreshes the vaulted OAuth credential and reads the Gmail profile, then records only account, scope, and health metadata.
42321
42328
 
42329
+ \`integration.connect_rest\` / \`rost_connect_rest_integration\` creates or rotates the supported Baserow REST integration through the credential flow. It stores the token in the vault, persists only endpoint/account metadata plus a tenant-scoped integration row, marks the adapter as \`rest\`, and returns no vault ref or secret. Because the input includes a raw secret, generated CLI argv refuses the command; use Settings or the command API credential flow instead of shell arguments.
42330
+
42322
42331
  \`integration.readiness\` / \`{{cli}} integration readiness --provider google --json\` / \`rost_check_integration_readiness\` returns the operator setup checklist: app configuration status, tenant connection state, granted scopes, latest test state, the demo-safe partner path, external verification/CASA caveats, handler availability, and the next operator action. The checklist is metadata-only. It never returns access tokens, refresh tokens, client secrets, vault refs, or raw provider responses. Settings deliberately keeps the live Google card narrower: connected account, last successful test, granted capabilities, and connect/reconnect/test actions.
42323
42332
 
42324
42333
  ## One write-only credential flow across every surface
@@ -42350,7 +42359,7 @@ There is exactly one way to give a connected tool its credential, and it is the
42350
42359
  order: 47,
42351
42360
  title: "Available tools guide",
42352
42361
  summary: "How to think about tool categories available to seats and what each category should be used for.",
42353
- version: "2026-06-30.1",
42362
+ version: "2026-07-02.1",
42354
42363
  public: true,
42355
42364
  audiences: ["human", "cli", "mcp", "in_app_agent"],
42356
42365
  stages: ["staffing"],
@@ -42394,16 +42403,16 @@ Agents should explain the job, the required tool category, the minimum permissio
42394
42403
 
42395
42404
  ## How a tool actually runs
42396
42405
 
42397
- Every tool call passes the server-side guard first: the guard checks the call against the seat's signed permission manifest and records a tool-call audit row for **every** call \u2014 allowed, denied, or escalated. Tool selection is never authorization. Only an allowed call reaches its handler. A connected credential is bound into the handler for the duration of the call only; the secret never appears in the result, the audit summary, logs, or the model's context.
42406
+ Every tool call passes the server-side guard first: the guard checks the call against the seat's signed permission manifest and records a tool-call audit row for **every** call \u2014 allowed, denied, or escalated. Tool selection is never authorization. An explicitly declined manifest entry is enforced as denied, even when the tool exists and the client asks for it. Only an allowed call reaches its handler. A connected credential is bound into the handler for the duration of the call only; the secret never appears in the result, the audit summary, logs, or the model's context.
42398
42407
 
42399
- External connectors are being rolled out provider by provider, conservatively (read and draft before send; write behind approval). A selected tool is only a permission until a live handler exists and the seat has the required credential or binding. Today the built-in execution path supports internal status reporting, the generic REST connector when a signed host/method/path allowlist and credential exist, \`slack.post_message\` for a bound Slack channel, and Google handlers for \`gmail.read\`, \`gmail.draft\`, \`sheets.read\`, and approval-held \`sheets.write\` when Google is connected. \`gmail.send\` remains held for approval and live external send stays gated on Google verification. Before that verification is complete, partner demos should show sandbox dry runs, setup previews, and approval-held examples rather than claim production Google readiness. Other provider entries remain configuration-only until their connector ships, so nothing runs silently.`
42408
+ External connectors are being rolled out provider by provider, conservatively (read and draft before send; write behind approval). A selected tool is only a permission until a live handler exists and the seat has the required credential or binding. Today the built-in execution path supports internal status reporting, the generic REST GET connector when a signed host/path allowlist and credential exist, \`slack.post_message\` for a bound Slack channel, and Google handlers for \`gmail.read\`, \`gmail.draft\`, \`sheets.read\`, and approval-held \`sheets.write\` when Google is connected. \`gmail.send\` remains held for approval and live external send stays gated on Google verification. Before that verification is complete, partner demos should show sandbox dry runs, setup previews, and approval-held examples rather than claim production Google readiness. Other provider entries remain configuration-only until their connector ships, so nothing runs silently.`
42400
42409
  },
42401
42410
  {
42402
42411
  slug: "mcp-and-cli-guide",
42403
42412
  order: 48,
42404
42413
  title: "CLI and MCP installation guide",
42405
42414
  summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
42406
- version: "2026-07-01.4",
42415
+ version: "2026-07-02.3",
42407
42416
  public: true,
42408
42417
  audiences: ["human", "cli", "mcp", "in_app_agent"],
42409
42418
  stages: ["company_setup", "staffing"],
@@ -42861,7 +42870,7 @@ The signed-in app exposes the same Skill command surface under **Skills** in the
42861
42870
  | \`{{cli}} sync brief|compile|complete\` | \`sync.brief.get\`, \`sync.brief.compile\`, \`sync.run.complete\` | Compile, read, and complete a weekly Sync. | Tenant | \`{{cli}} sync brief --json\` |
42862
42871
  | \`{{cli}} runner list|status|diagnose|repair|work-orders|revoke|serve\` | \`runner.list\`, \`runner.status\`, \`runner.diagnose\`, \`runner.repair\`, \`work_order.list\`, \`runner.revoke\`, runner endpoint APIs | Inspect heartbeat and execute-readiness evidence, inspect work orders, diagnose offline runners, get repair guidance, revoke a runner, or run the headless local runner loop. | Tenant | \`{{cli}} runner diagnose --runner-id <id> --json\`; \`{{cli}} runner serve --once\` |
42863
42872
  | \`{{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\` |
42864
- | \`{{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\` |
42873
+ | \`{{cli}} integration list|readiness|status|test\` / credential flow for Baserow REST connect | \`integration.connect_rest\`, \`integration.list\`, \`integration.readiness\`, \`integration.status\`, \`integration.test\` | Create a vault-backed Baserow REST integration through the credential flow, list connector metadata, read setup-readiness, read one connector's health, and run provider-specific tests without exposing credentials. | Tenant-admin for connect; tenant for reads/tests | \`{{cli}} integration readiness --provider google --json\` |
42865
42874
  | \`{{cli}} system health\` | \`system.health\` | Read the scoped system-health snapshot across agent runs, unresolved errors, Signals, Cascade setup, work loop, integrations, runners, notifications, and Sync Brief readiness. | Tenant, member, or seat token | \`{{cli}} system health --json\`; \`{{cli}} system health --seat <id> --json\` |
42866
42875
  | \`{{cli}} command usage.report|usage.snapshot\` | \`usage.report\`, \`usage.snapshot\` | Read the AI-workforce ROI report (per-period agent turns, token/run cost, human-accepted value, exceptions, approvals) from immutable usage snapshots, and freeze a period's totals into a new snapshot (insert-only, idempotent). | Tenant | \`{{cli}} command usage.report --json\`; \`{{cli}} command usage.snapshot --json\` |
42867
42876
  | \`{{cli}} settings get|update|product-learning|agent-policy|rename\` | \`settings.get\`, \`settings.update\`, \`settings.product_learning.get\`, \`settings.product_learning.update\`, \`settings.agent_policy.get\`, \`settings.agent_policy.update\`, \`tenant.rename\` | Read tenant settings, update budget caps, read or update product-learning participation, read or set the company autonomy ceiling, and rename the company. Budget, product-learning, and policy updates stop at human confirmation in non-interactive CLI/MCP sessions; company rename is owner-only and human-gated. | Tenant / Tenant-admin for updates | \`{{cli}} settings product-learning get --json\`; \`{{cli}} settings agent-policy get --json\`; \`{{cli}} settings rename --company "Acme Operations"\` |
@@ -42944,7 +42953,7 @@ The equivalent CLI verbs are \`{{cli}} command schema <id>\` and \`{{cli}} comma
42944
42953
 
42945
42954
  These names are available to tenant-admin MCP tokens. They are aliases over the shared command layer and are audited as MCP tool calls. The list spans far more than onboarding \u2014 it groups, in order: onboarding, seats, Charter, confirmations, Compass, staffing, credentials/tokens, graph reads, agents, runners and work orders, notifications, members and settings, Signals, Cascade goals, Friction, tasks, Sync, and escalations.
42946
42955
 
42947
- Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`, \`goal.*\`, and \`friction.*\` families) surfaced because they are also tenant-admin-callable \u2014 which is why the CLI wrapper table marks them "Seat". Scope selection follows the Seat scope note above: a seat-scoped token already carries seat context, while a tenant or owner token must pass \`--seat <seat-id>\` (CLI) or supply seat context (MCP). See the security-model-guide for the seat-vs-tenant authority principle.
42956
+ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`, \`goal.*\`, and \`friction.*\` families) surfaced because they are also tenant-admin-callable \u2014 which is why the CLI wrapper table marks them "Seat". Scope selection follows the Seat scope note above: a seat-scoped token already carries seat context and sees only the seat-scoped MCP tools registered for that token; a tenant or owner CLI session must pass \`--seat <seat-id>\` to act in a seat context. See the security-model-guide for the seat-vs-tenant authority principle.
42948
42957
 
42949
42958
  | Tool | Command id | Purpose | Required scope | Safe example |
42950
42959
  |---|---|---|---|---|
@@ -43000,8 +43009,6 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
43000
43009
  | \`rost_list_agent_tool_calls\` | \`agent.list_tool_calls\` | Read a seat's tool-call ledger (tool name, guard result, manifest clause, outcome) with the held-action count as the hero metric. Never returns argument summaries or secret material. | Seat or tenant-admin | Call with \`{"seat_id":"<seat-id>"}\`; pass \`held_only: true\` for only guard-held calls. |
43001
43010
  | \`rost_list_agent_deliverables\` | \`deliverable.list\` | List durable agent deliverables for a seat, including explicit outputs and successful-run summaries. | Seat or tenant-admin | Call with \`{"seat_id":"<seat-id>"}\`. |
43002
43011
  | \`rost_get_agent_deliverable\` | \`deliverable.get\` | Read one durable agent deliverable by id for a seat. | Seat or tenant-admin | Call with \`{"seat_id":"<seat-id>","deliverable_id":"<id>"}\`. |
43003
- | \`rost_create_agent_deliverable\` | \`deliverable.create\` | Create a scrubbed durable work output for the acting seat. | Seat | Call with title, kind, summary/content, and optional safe links. |
43004
- | \`rost_attach_agent_deliverable\` | \`deliverable.attach\` | Attach a scrubbed deliverable to a source run, task, or work order after server-side seat validation. | Seat | Call with title, kind, and the source ids that belong to the acting seat. |
43005
43012
  | \`rost_accept_deliverable_value\` | \`deliverable.accept\` | Record a human-confirmed accepted value (USD) on a deliverable; owner-only and human-gated. Humans decide \u2014 agents cannot self-accept. Re-accepting records a correction as a new event. | Tenant-admin | Call with \`{"deliverable_id":"<id>","impact_value_usd":<number>}\`; expect human confirmation. |
43006
43013
  | \`rost_ai_workforce_roi_report\` | \`usage.report\` | Read the AI-workforce ROI report \u2014 per-period agent turns, token/run cost, human-accepted value, exceptions, and approvals \u2014 from immutable usage snapshots. | Tenant | Call with \`{}\` or \`{"limit":<n>}\`. |
43007
43014
  | \`rost_capture_usage_period_snapshot\` | \`usage.snapshot\` | Freeze the current (or a given) period's usage and accepted-value totals into an immutable snapshot; insert-only and idempotent. | Tenant | Call with \`{}\` or \`{"period":"YYYY-MM-DD"}\`. |
@@ -43035,6 +43042,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
43035
43042
  | \`rost_resolve_error_log\` | \`error_log.resolve\` | Acknowledge or resolve an error log with a required human reason and optional task, issue, or PR link. | Tenant | Call with \`error_log_id\`, \`reason\`, and \`disposition\` \`acknowledged\` or \`resolved\`. |
43036
43043
  | \`rost_supersede_error_log\` | \`error_log.supersede\` | Mark an older error log as superseded by a newer in-tenant error log. | Tenant | Call with \`error_log_id\`, \`new_error_log_id\`, and \`reason\`. |
43037
43044
  | \`rost_list_integrations\` | \`integration.list\` | List connected integration metadata and latest health state. | Tenant | Call with \`{}\` or \`{"provider":"google"}\`; no secrets or vault refs are returned. |
43045
+ | \`rost_connect_rest_integration\` | \`integration.connect_rest\` | Create or rotate the vault-backed Baserow REST integration for Signal pulls. | Tenant-admin | Use the credential flow with provider \`baserow\`, HTTPS endpoint, scope, secret name, and secret; no vault refs or secrets are returned. |
43038
43046
  | \`rost_check_integration_readiness\` | \`integration.readiness\` | Return the connector setup checklist: OAuth env/callback, tenant connection, scopes, latest test state, external verification/CASA, handler availability, and DER-coded next actions. | Tenant | Call with \`{"provider":"google"}\`; metadata only, no secrets or vault refs. |
43039
43047
  | \`rost_get_integration_status\` | \`integration.status\` | Read one integration's metadata by provider or integration id. | Tenant | Call with \`{"provider":"google"}\` or \`{"integration_id":"<id>"}\`. |
43040
43048
  | \`rost_test_integration_connection\` | \`integration.test\` | Run the provider-specific connection test and update integration health. | Tenant | Call with \`{"provider":"google"}\`; result is bounded metadata only. |
@@ -43131,6 +43139,9 @@ Seat-scoped MCP tokens expose the operating protocol below. The server still che
43131
43139
  | \`rost_escalate\` | \`escalation.raise\` | Escalate approval-scope or must-escalate work. | Seat | Call with severity, reason, and requested decision. |
43132
43140
  | \`rost_file_issue\` | \`friction.file_issue\` | File a Friction issue. | Seat | Call with title, severity, and impact. |
43133
43141
  | \`rost_log_work\` | \`work.log\` | Record work performed by the seat. | Seat | Call with summary and evidence. |
43142
+ | \`rost_report_a_signal_reading\` | \`signal.report\` | Propose one draft reading for this seat's own agent-sourced measurable. The reading lands unconfirmed for human review. | Seat | Call with \`{"measurable_id":"<id>","value":42,"note":"read off the source","confidence":"high"}\`. |
43143
+ | \`rost_create_agent_deliverable\` | \`deliverable.create\` | Create a scrubbed durable work output for the acting seat. | Seat | Call with title, kind, summary/content, and optional safe links. |
43144
+ | \`rost_attach_agent_deliverable\` | \`deliverable.attach\` | Attach a scrubbed deliverable to a source run, task, or work order after server-side seat validation. | Seat | Call with title, kind, and the source ids that belong to the acting seat. |
43134
43145
 
43135
43146
  ### MCP operation resources
43136
43147
 
@@ -43450,7 +43461,7 @@ Set \`ROST_SKILL_INSTALL_ROOT\` only for a sandbox or CI override. Local copies
43450
43461
  order: 55,
43451
43462
  title: "Agent reference map",
43452
43463
  summary: "Where CLI sessions, MCP clients, and in-app agents should retrieve {{brand}} guidance before recommending setup changes.",
43453
- version: "2026-06-21.2",
43464
+ version: "2026-07-02.2",
43454
43465
  public: true,
43455
43466
  audiences: ["cli", "mcp", "in_app_agent"],
43456
43467
  stages: ["company_setup", "graph_design", "charter_design", "staffing", "operating_rhythm"],
@@ -43535,6 +43546,7 @@ Agents that run on {{brand}}-managed inference draw against a tenant inference b
43535
43546
  21. confirmations-guide
43536
43547
  22. steward-queue-guide
43537
43548
  23. sync-rhythm-playbook
43549
+ 24. billing-and-pricing-guide
43538
43550
 
43539
43551
  ## Workflow to guide map
43540
43552
 
@@ -43560,6 +43572,7 @@ Read the listed guide before recommending or running each workflow. Every workfl
43560
43572
  - Operate local runners and work orders: runner-guide.
43561
43573
  - Approve or reject a pending confirmation (human only): confirmations-guide.
43562
43574
  - Manage members, settings, and notifications: settings-guide, settings-members-and-invites-guide, notifications-guide.
43575
+ - Explain company-wide billing, payment, invoices, or usage true-ups: billing-and-pricing-guide, then settings-guide.
43563
43576
  - Diagnose a failure on any surface: troubleshooting-guide, then security-model-guide.
43564
43577
 
43565
43578
  ## Stage map
@@ -43687,7 +43700,7 @@ Agents can suggest commitments and report progress. They should not create a new
43687
43700
  order: 61,
43688
43701
  title: "Signal guide",
43689
43702
  summary: "How to define and read measurables so the company runs on evidence instead of status theater.",
43690
- version: "2026-07-01.2",
43703
+ version: "2026-07-02.3",
43691
43704
  public: true,
43692
43705
  audiences: ["human", "cli", "mcp", "in_app_agent"],
43693
43706
  stages: ["operating_rhythm"],
@@ -43699,6 +43712,7 @@ Agents can suggest commitments and report progress. They should not create a new
43699
43712
  "signal.get",
43700
43713
  "signal.confirm_reading",
43701
43714
  "signal.correct_reading",
43715
+ "signal.report",
43702
43716
  "measurable.create",
43703
43717
  "signal.import",
43704
43718
  "measurable_template.list",
@@ -43755,7 +43769,7 @@ To move off a spreadsheet or another operating tool, upload a scorecard export f
43755
43769
 
43756
43770
  ## Adopt a measurable template
43757
43771
 
43758
- Not sure which measurables to track? \`measurable_template.list\` returns a starter catalog grouped by function (Sales, Finance, Operations, Marketing, HR), each with a unit, direction, cadence, and suggested target. \`measurable_template.adopt\` instantiates one against a seat \u2014 the same write path as \`measurable.create\`, so the created measurable is a plain human-owned Signal you log against afterward. Adoption is a human act; the suggested target is just a starting point you can override.
43772
+ Not sure which measurables to track? \`measurable_template.list\` returns a starter catalog grouped by function (Sales, Finance, Operations, Marketing, HR), each with a unit, direction, cadence, suggested target, and source-readiness metadata when a known source path exists. Finance templates are explicit: platform billing usage baselines can use safe platform metadata, while tenant customer MRR, QuickBooks AR aging, and QuickBooks gross margin stay blocked until tenant-owned billing/accounting reads ship. \`measurable_template.adopt\` instantiates one against a seat \u2014 the same write path as \`measurable.create\`, so the created measurable is a plain human-owned Signal you log against afterward. Adoption is a human act; the suggested target is just a starting point you can override.
43759
43773
 
43760
43774
  ## The leadership scorecard grid
43761
43775
 
@@ -43770,7 +43784,15 @@ Once a measurable's number lives in a connected system, you can teach {{brand}}
43770
43784
  - \`signal.bind\` persists the validated recipe as an inert \`draft\` binding. It requires the \`preview_token\` from a preview of the same recipe, so nothing is bound that was not first seen working.
43771
43785
  - \`signal.bind_confirm\` is human-only. It activates the binding (\`draft -> active\`); an agent that calls it produces a pending confirmation instead. Only after a human confirms does the scheduled pull begin writing confirmed readings.
43772
43786
 
43773
- Recipes are validated data, never code: a read-only GET, a closed set of non-secret headers, and a restricted scalar path to the value. Every fetch passes one SSRF guard (HTTPS only, a steward-confirmed host allowlist set at bind, and a runtime check that the host does not resolve to a private address). Deterministic pulls write \`integration\`-sourced readings on the measurable's cadence.
43787
+ Discovery always returns a \`recipe_presets\` array; it is empty when {{brand}} does not recognize a safe source type. Today those presets cover Baserow row fields and the generic REST JSON fallback. Google Sheets uses OAuth JSON credentials and is withheld from REST presets until the pull executor extracts and refreshes the Google access token instead of treating the stored credential blob as a bearer token. A preset includes a label, cadence, required metadata, a draft \`rest_for_signals\` recipe, and the host allowlist to preview with. The human still fills in the real Baserow table/row/field or exact REST URL and value path before running \`signal.preview\`; presets are starter recipes, not secret stores.
43788
+
43789
+ Recipes are validated data, never code: a read-only GET, a closed set of non-secret headers, and a restricted scalar path to the value. Every fetch passes one SSRF guard (HTTPS only, a steward-confirmed host allowlist set at bind, and a runtime check that the host does not resolve to a private address). The preset output never contains \`nango://\` handles, vault refs, tokens, or static credential headers. Deterministic pulls write \`integration\`-sourced readings on the measurable's cadence.
43790
+
43791
+ In the web app, the same workflow lives on \`/signal\` in the "Connect a self-filling source" panel. It shows each measurable's setup state \u2014 manual, agent draft, source draft, or auto-filled \u2014 plus the latest safe pull outcome when one exists. Choose a connected source, discover its non-secret metadata, preview a GET URL and value path, bind the working preview as a draft, then confirm the draft before scheduled pulls can write readings. The UI never displays credential material, vault refs, raw response bodies, or recipe secrets; if no connected source exists, connect one from Settings first.
43792
+
43793
+ ## Collect a Signal by judgment (the Signal agent)
43794
+
43795
+ Some measurables cannot be a deterministic pull \u2014 the number lives in a PDF, in messy records that need reconciling, or is a judgment estimate of progress. For those, mark the measurable \`agent\`-sourced and let a per-seat Signal agent read it. The agent proposes each reading with \`signal.report\` (scope: seat): one draft reading for one of its OWN seat's agent-sourced measurables, with a \`value\` and a short \`note\` citing the source. The reading lands unconfirmed, exactly like a deterministic draft \u2014 a human clears it with \`signal.confirm_reading\`. \`signal.report\` refuses any measurable not owned by the acting seat and any measurable whose source is not \`agent\`, and it never confirms its own reading. Deliver it as the \`stock/signal-collector\` template (a read-only agent whose only durable grant is \`signal.report\`) or run the \`collect-seat-signals\` how-to from an occupant agent. When the agent cannot read a number confidently \u2014 ambiguous or conflicting sources \u2014 it escalates instead of guessing.
43774
43796
 
43775
43797
  ## When to stop for confirmation
43776
43798
 
@@ -43785,7 +43807,7 @@ Agents may record readings when the Charter allows it. Agent-reported readings s
43785
43807
  order: 62,
43786
43808
  title: "Friction guide",
43787
43809
  summary: "How to capture issues with evidence, rank them, and resolve them without losing ownership.",
43788
- version: "2026-07-01.1",
43810
+ version: "2026-07-01.2",
43789
43811
  public: true,
43790
43812
  audiences: ["human", "cli", "mcp", "in_app_agent"],
43791
43813
  stages: ["operating_rhythm"],
@@ -43845,6 +43867,8 @@ Friction, tasks, and escalations are the issue-to-action loop. A seat files, a t
43845
43867
  - Carry the work as a task: \`task.create\` / \`rost_create_task\` (a commitment between seats). \`task.create\` is \`none\` (no confirmation gate), so an agent can file one directly; an agent's task lands as a **draft** proposal (\`origin: agent_proposal\`) for a human to review and hand off \u2014 not a live offer in the owning seat's accept/decline queue. A seat runs its queue with \`{{cli}} task list|accept|decline|complete\` (\`task.list\`, \`task.accept\`, \`task.decline\`, \`task.complete\`). Link a task to an issue with \`friction.link_task\` / \`rost_link_task_to_friction_issue\`.
43846
43868
  - Route a decision: \`escalation.raise\` (seat) / \`rost_escalate\` sends approval-scope or must-escalate work to the Steward queue. Reads are \`escalation.list\` / \`escalation.get\`. See the steward queue guide for resolution.
43847
43869
 
43870
+ In the app, the Tasks surface exposes the same queue operations for a seat's visible work. Offered handoffs show Accept and Decline actions; Decline opens a reason field and records the reason through \`task.decline\`. Edit opens a separate task form for title, owner, due date, and description changes on non-terminal tasks. These controls are standard focusable disclosures so keyboard and pointer users can operate the queue without dropping to CLI.
43871
+
43848
43872
  ## Friction assist
43849
43873
 
43850
43874
  \`friction.assist\` / \`rost_assist_friction_issue\` is a read-only advisory for an open issue \u2014 call it with the issue id. It returns the most-similar prior resolved issues with their root causes and recorded decisions, a recurring-pattern flag, and recommended options drawn from that history. It never resolves the issue or records a decision \u2014 a human still resolves via \`friction.resolve\`. The similar-issue recall is deterministic; the short narrative is best-effort and degrades to the deterministic summary when the model is slow or unavailable, so the assist stays responsive and never holds up other work.
@@ -43985,13 +44009,113 @@ An agent never approves or rejects its own request. \`decisions.decided_by\` is
43985
44009
  ## When to stop
43986
44010
 
43987
44011
  Stop before: approving a Charter, signing a manifest, connecting a tool or credential, minting a token, going live, resolving an escalation or Friction, reparenting or dropping a goal, changing a member role, or updating budget caps. These are human gates by design.`
44012
+ },
44013
+ {
44014
+ slug: "billing-and-pricing-guide",
44015
+ order: 71,
44016
+ title: "Billing and pricing guide",
44017
+ summary: "How {{brand}} packages company-wide access, Stripe billing, and governed-agent usage without per-human-seat pricing.",
44018
+ version: "2026-07-02.4",
44019
+ public: true,
44020
+ audiences: ["human", "cli", "mcp", "in_app_agent"],
44021
+ stages: ["company_setup", "staffing", "operating_rhythm"],
44022
+ relatedCommandIds: ["settings.get"],
44023
+ legal: {
44024
+ publicRisk: "medium",
44025
+ notes: [
44026
+ "Describes the product packaging model, not tax, accounting, legal, or contract advice.",
44027
+ "Avoids Stripe price ids, secrets, payment details, and unpublished negotiated contract terms."
44028
+ ]
44029
+ },
44030
+ sources: [
44031
+ {
44032
+ label: "ADR-0016",
44033
+ internalPath: "docs/adr/0016-commerce-pricing-and-packaging.md",
44034
+ note: "Canonical pricing and packaging decision for the first-client commerce workstream."
44035
+ },
44036
+ {
44037
+ label: "MVP implementation plan",
44038
+ internalPath: "docs/specs/MVP-implementation-plan.md",
44039
+ note: "FR-11 billing and commerce requirements."
44040
+ },
44041
+ {
44042
+ label: "Full repo analysis",
44043
+ internalPath: "docs/research/2026-07-01-rost-full-repo-analysis.md",
44044
+ note: "Identifies commerce as the top first-client blocker."
44045
+ }
44046
+ ],
44047
+ body: `# Billing and pricing guide
44048
+
44049
+ {{brand}} is priced for company-wide adoption. A Seat is a function, not a paid human license, so inviting the whole team should not create a per-person tax on running the operating system.
44050
+
44051
+ ## Package model
44052
+
44053
+ The launch billing model has two parts:
44054
+
44055
+ - **Company base subscription.** One company subscription covers the operating system: Compass, Responsibility Graph, Cascade, Signal, Friction, Sync, Settings, reference docs, and governed agent setup.
44056
+ - **Governed-agent usage.** The base subscription includes a configurable allowance for billable successful agent work. Usage above the included allowance is metered from service-owned closed-period billing finalization.
44057
+
44058
+ Human members are not the billing unit. A company can invite the people needed to run the operating rhythm without paying for each human login. Seat or member limits may still exist as entitlement controls for abuse prevention, package design, or enterprise contracts, but they are not the default subscription meter.
44059
+
44060
+ ## How usage is measured
44061
+
44062
+ Agent usage is measured from the same billing-grade records that power the AI-workforce ROI view:
44063
+
44064
+ - Agent runs record token/cost data as they execute.
44065
+ - \`usage.snapshot\` freezes usage into \`usage_period_snapshot\` for ROI/reporting.
44066
+ - Billing true-up uses a service-owned closed-period finalization path, not mutable running totals and not a tenant-created current-period snapshot.
44067
+ - A true-up must be idempotent and no-overcharge: the same closed period should not be reported twice.
44068
+
44069
+ The first meter is billable-successful-agent-run based because the current platform records per-run usage and cost. The v1 overage quantity starts from successful real runs, excludes setup/sandbox dry runs and other non-billable rehearsals, and keeps failed, timed-out, and cancelled runs visible in the ROI and exception views without charging them as overage. The usage layer should keep enough metadata to support future accepted-value or outcome-based units without changing the subscription model.
44070
+
44071
+ Billable true-up is service-owned and runs after a period is closed. The tenant-facing \`usage.snapshot\` command is an ROI/reporting tool; an early current-period snapshot must not become, replace, or block the final billable close. The billing close records a separate \`billing_usage_true_ups\` row keyed by tenant and period with the source kind, included allowance, billable overage, status, and Stripe meter event identifier. A closed usage snapshot is preferred only when it was captured after the period ended; otherwise the service close uses a live rollup for that closed period so an early ROI snapshot cannot undercount the invoice true-up.
44072
+
44073
+ ## Stripe boundary
44074
+
44075
+ Stripe owns payment collection, payment methods, invoices, and hosted customer self-service.
44076
+
44077
+ {{brand}} stores only safe commerce metadata: Stripe customer/subscription identifiers, plan state, entitlement state, usage true-up state, and safe audit/error metadata. Card numbers, bank details, payment-method secrets, Stripe API secrets, webhook signing secrets, and raw payment details must never be stored in {{brand}}, entered into an agent prompt, written to logs, or copied into tool arguments.
44078
+
44079
+ ## Design partners and test tenants
44080
+
44081
+ Test and design-partner companies may run without a Stripe customer or subscription. They are invite-flagged plans with explicit billing state and model safety caps. Do not use fake coupons or hidden payment workarounds to represent them.
44082
+
44083
+ When a company converts to paid, Stripe subscription state plus the tenant plan become the authority for the company subscription. Account entitlements remain user/account-scoped capability grants or limit overrides; they should not make the whole company's paid access depend on one owner's account grant. Limitable gates resolve through a paid-plan-aware entitlement helper: explicit service-owned \`account_entitlements\` rows override the tenant default for a specific user and tenant, while active paid tenant state selects the paid-plan default. Empty metadata means unlimited today; future tenant-wide caps must use a service-owned billing configuration surface, not client-editable tenant settings.
44084
+
44085
+ ## Billing versus inference budget
44086
+
44087
+ There are three separate allowances or caps:
44088
+
44089
+ - **Subscription usage allowance:** the included billable-successful-agent-run allowance in the paid company plan.
44090
+ - **Platform onboarding model allowance:** the app-provided setup tokens used during assisted onboarding.
44091
+ - **Inference hard cap:** a safety and spend-control setting for {{brand}}-managed model calls.
44092
+
44093
+ The inference hard cap is not the subscription invoice, and raising it is not the same as buying a plan. The onboarding model allowance is also separate from the subscription usage allowance.
44094
+
44095
+ A company may bring its own provider key. BYOK changes which provider account pays eligible model calls; it does not change the company base subscription, the Charter, the tool guard, human confirmations, or billing for governed-agent platform usage.
44096
+
44097
+ ## What users should see
44098
+
44099
+ The billing area in Settings answers:
44100
+
44101
+ - Which plan is active.
44102
+ - Whether the company is on free setup access, design-partner access, or a paid Stripe-backed subscription.
44103
+ - Where tenant owners can start Checkout or open Stripe's hosted portal for payment method and invoice management.
44104
+ - Recent Stripe invoice summaries when Stripe billing is configured for the company.
44105
+ - Human/member coverage plus agent-seat and live-agent coverage.
44106
+ - The latest subscription usage snapshot from the immutable usage-period table.
44107
+ - The latest true-up status, including whether overage was reported, skipped because the included allowance covered the period, or needs retry.
44108
+
44109
+ Settings labels subscription usage separately from the setup model allowance and the inference hard cap. Payment methods and invoice payment stay in Stripe. {{brand}} renders subscription ids/status and invoice summaries only; it does not store card, bank, payment-method, or invoice-payment details.
44110
+
44111
+ Do not claim that a live charge happened unless Stripe test/live evidence proves it. For internal or design-partner validation, use Stripe test mode only unless a human owner explicitly completes a real live-payment step.`
43988
44112
  },
43989
44113
  {
43990
44114
  slug: "settings-guide",
43991
44115
  order: 72,
43992
44116
  title: "Settings guide",
43993
44117
  summary: "How to use Settings as the control plane for company access, channels, providers, tokens, and operating defaults.",
43994
- version: "2026-07-01.1",
44118
+ version: "2026-07-02.2",
43995
44119
  public: true,
43996
44120
  audiences: ["human", "cli", "mcp", "in_app_agent"],
43997
44121
  stages: ["company_setup", "staffing"],
@@ -44021,6 +44145,7 @@ Settings is one page with anchored sections, not separate sub-pages. Documented
44021
44145
  - Company profile and workspace defaults. Rename the company from Settings or with \`tenant.rename\` (CLI: \`{{cli}} settings rename --company "<name>"\`); the command is owner-only, human-gated, and records a rename event with old and new names.
44022
44146
  - Members, invites, and tenant roles.
44023
44147
  - Agent access tokens for local agents.
44148
+ - Billing plan, hosted Stripe actions, invoices, subscription usage coverage, and latest true-up status.
44024
44149
  - Provider and integration configuration.
44025
44150
  - Slack channels (the channel bindings that route escalations, Sync Briefs, and reports to a seat or cluster).
44026
44151
  - Connected machines (the paired Runners that run scheduled local work orders).
@@ -44221,7 +44346,7 @@ The runner should not store raw credentials in local notes, prompts, or logs. It
44221
44346
  order: 76,
44222
44347
  title: "Stock agents guide",
44223
44348
  summary: "How to use stock agent templates as starting points while preserving seat-specific Charters and human approval.",
44224
- version: "2026-06-15.1",
44349
+ version: "2026-07-01.1",
44225
44350
  public: true,
44226
44351
  audiences: ["human", "cli", "mcp", "in_app_agent"],
44227
44352
  stages: ["staffing"],
@@ -44248,7 +44373,7 @@ Before dry run, review the template's responsibilities, tool assumptions, escala
44248
44373
 
44249
44374
  ## Template catalog
44250
44375
 
44251
- Seven stock templates ship today. Every one is draft-first, escalates the actions in its safety boundaries, and keeps spend, external sends, and credential scope human-owned until a Steward sets a threshold. Read the live list with \`agent_template.list\` / \`rost_list_agent_templates\` or the \`rost://agents/templates\` resource.
44376
+ Eight stock templates ship today. Every one is draft-first, escalates the actions in its safety boundaries, and keeps spend, external sends, and credential scope human-owned until a Steward sets a threshold. Read the live list with \`agent_template.list\` / \`rost_list_agent_templates\` or the \`rost://agents/templates\` resource.
44252
44377
 
44253
44378
  ### AP Clerk \u2014 \`stock/ap-clerk\`
44254
44379
 
@@ -44299,6 +44424,13 @@ Seven stock templates ship today. Every one is draft-first, escalates the action
44299
44424
  - Default tools: Release artifacts read; Issue tracker draft.
44300
44425
  - Safety boundary: release approval, production changes, customer-impacting risk, security/privacy, and conflicting evidence escalate.
44301
44426
 
44427
+ ### Signal collector \u2014 \`stock/signal-collector\`
44428
+
44429
+ - Function: Ops/Finance. Tier: \`2 \xB7 Fast-follow\`.
44430
+ - Responsibilities: Read this seat's agent-sourced measurables; Propose draft readings with cited sources; Escalate any number it cannot read confidently.
44431
+ - Default tools: Signal draft readings.
44432
+ - Safety boundary: reads only this seat's agent-sourced measurables and proposes each as a draft a human confirms; ambiguous or conflicting numbers escalate rather than guess, and it never confirms its own readings.
44433
+
44302
44434
  ## Create from a template (CLI or MCP)
44303
44435
 
44304
44436
  1. List templates: \`agent_template.list\` / \`rost_list_agent_templates\` with \`{}\` (scope: tenant).
@@ -44404,7 +44536,7 @@ Name the failing surface, collect evidence, recommend the smallest correction, a
44404
44536
  order: 78,
44405
44537
  title: "AI model data handling guide",
44406
44538
  summary: "How {{brand}} cloud agents, local MCP sessions, runners, BYOK, and connected tools handle model-bound data.",
44407
- version: "2026-07-01.1",
44539
+ version: "2026-07-01.3",
44408
44540
  public: true,
44409
44541
  audiences: ["human", "cli", "mcp", "in_app_agent"],
44410
44542
  stages: ["company_setup", "staffing", "operating_rhythm"],
@@ -44491,7 +44623,7 @@ Cloud prompts should not include raw credentials, long exports, unrelated custom
44491
44623
 
44492
44624
  ## BYOK Anthropic
44493
44625
 
44494
- 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.
44626
+ 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. The same tenant-key resolution also covers the read-only advisory analyzers (friction assist, compass-alignment drift, and the coach draft-guide): when a tenant has saved its own Anthropic key those advisory calls use it and are metered on that key, otherwise they fall back to the platform key and are recorded against the managed hard cap and platform allowance before returning advisory text. When neither key is available, they degrade to their deterministic summary rather than failing.
44495
44627
 
44496
44628
  {{brand}} also includes a capped, app-provided Claude allowance for agent-assisted setup so a new company can complete onboarding before saving its own key. That allowance is shown in the onboarding provider card and in Settings as an approximate number of included setup tokens \u2014 never a dollar amount \u2014 and is enforced server-side on every platform-key call: an agent turn or an org-intake step reserves the allowance before the provider request and settles actual usage after. When the included tokens are used, agent-assisted steps stop before calling the provider and prompt you to add your own Anthropic API key, while non-AI setup steps stay available. Saving a tenant Anthropic key (BYOK) switches those calls to your provider account and does not draw down the included allowance.
44497
44629
 
@@ -44580,7 +44712,7 @@ When asked about AI data handling:
44580
44712
  order: 79,
44581
44713
  title: "Security model guide",
44582
44714
  summary: "How {{brand}} protects tenant data, credentials, tool calls, and human decisions across web, MCP, CLI, and agents.",
44583
- version: "2026-06-29.1",
44715
+ version: "2026-07-01.1",
44584
44716
  public: true,
44585
44717
  audiences: ["human", "cli", "mcp", "in_app_agent"],
44586
44718
  stages: ["company_setup", "staffing", "operating_rhythm"],
@@ -44641,7 +44773,7 @@ Do not store raw passwords, OAuth tokens, API keys, full \`.env\` files, session
44641
44773
 
44642
44774
  ## Access and isolation
44643
44775
 
44644
- 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.
44776
+ 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. Raw server SQL over tenant-scoped tables is also checked in CI so those statements carry tenant context explicitly.
44645
44777
 
44646
44778
  Human access is role-based through tenant membership:
44647
44779
 
@@ -44675,7 +44807,7 @@ Tool selection is never authorization. A selected tool in setup records the requ
44675
44807
  - Decisions are human-decided records. Agents can draft or recommend, but durable decisions require a human.
44676
44808
  - Charters, Compass versions, and accepted knowledge change by supersession instead of silent overwrite.
44677
44809
  - Agent runs, work orders, tool calls, Skill activations, notification failures, and integration tests leave diagnostic records that can be inspected without exposing raw secrets.
44678
- - 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.
44810
+ - 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. MCP route failures return safe JSON instead of framework HTML errors, so local clients can key off the structured error and request id.
44679
44811
 
44680
44812
  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.
44681
44813
 
@@ -46024,6 +46156,7 @@ var COMMAND_MANIFEST = [
46024
46156
  { "id": "goal.unbind_measurable", "namespace": "goal", "action": "unbind_measurable", "title": "Unbind a Signal from a Cascade goal", "description": "Remove a measurable's drives_status binding from a goal. The goal keeps its last status; unbinding only stops future signal-driven updates.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Remove a Signal's drives_status binding from a goal; the goal keeps its last status and stops receiving signal-driven updates." },
46025
46157
  { "id": "goal.update", "namespace": "goal", "action": "update", "title": "Update Cascade goal", "description": "Update a goal's title or definition of done. Topology (parent/seat) and status have dedicated commands.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "title", "flag": "title", "type": "string", "required": false }, { "name": "definition_of_done", "flag": "definition-of-done", "type": "string", "required": false }], "hasComplexInput": false, "help": "Update a goal's title or definition of done; topology and status have dedicated commands." },
46026
46158
  { "id": "graph.get", "namespace": "graph", "action": "get", "title": "Get Responsibility Graph", "description": "Return the tenant's Responsibility Graph: seats, edges, root, occupants, and status rollups.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read the Responsibility Graph to discover seat ids, parentage, occupants, and status before mutating or routing work." },
46159
+ { "id": "integration.connect_rest", "namespace": "integration", "action": "connect_rest", "title": "Connect REST integration", "description": "Create or rotate the tenant Baserow REST integration using a vault-backed secret. Stores endpoint metadata only; never returns secrets or vault refs.", "requiredScope": "tenant_admin", "confirmation": "credential_flow", "exposeOverMcp": true, "fields": [{ "name": "provider", "flag": "provider", "type": "enum", "required": true, "enumValues": ["baserow"] }, { "name": "endpoint_url", "flag": "endpoint-url", "type": "string", "required": true }, { "name": "scope_description", "flag": "scope-description", "type": "string", "required": true }, { "name": "secret_name", "flag": "secret-name", "type": "string", "required": true }, { "name": "account_label", "flag": "account-label", "type": "string", "required": false }], "hasComplexInput": false, "secretBlocked": true, "help": "Create or rotate a vault-backed Baserow REST integration for Signal pulls. Use the credential flow; never pass secrets through CLI argv." },
46027
46160
  { "id": "integration.discover", "namespace": "integration", "action": "discover", "title": "Discover a connection for signals", "description": "Read-only introspection of a connected source for signal binding. Returns non-secret adapter metadata and a rest-for-signals recipe skeleton to author against signal.preview. Exposes no secrets.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "integration_id", "flag": "integration-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Read-only introspection of a connected source: returns non-secret metadata + a recipe skeleton to author a signal pull against. No network." },
46028
46161
  { "id": "integration.list", "namespace": "integration", "action": "list", "title": "List integrations", "description": "List tenant integration metadata and health status. Returns account/scopes/capabilities only; never secrets or vault refs.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "provider", "flag": "provider", "type": "string", "required": false }], "hasComplexInput": false, "help": "List connected integrations and their metadata-only health state before enabling a connector-backed tool." },
46029
46162
  { "id": "integration.readiness", "namespace": "integration", "action": "readiness", "title": "Check integration readiness", "description": "Return a safe connector setup checklist for operators and agents. Starts with Google and exposes no secrets.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "provider", "flag": "provider", "type": "enum", "required": false, "enumValues": ["google"] }], "hasComplexInput": false, "help": "Read the connector setup checklist before relying on Google-backed agent work; the checklist names missing config, connection, scopes, external verification, and handler blockers." },
@@ -46079,6 +46212,7 @@ var COMMAND_MANIFEST = [
46079
46212
  { "id": "signal.import", "namespace": "signal", "action": "import", "title": "Import Signals from CSV", "description": "Bulk-import measurable definitions and their historical readings from a parsed scorecard export (e.g. a ninety CSV). Owners are seat names resolved to seats; readings are human-confirmed. Idempotent \u2014 re-import upserts by (measurable, period, cadence). Re-importing a measurable at a different cadence is rejected, not overwritten.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "dry_run", "flag": "dry-run", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Bulk-import measurables + historical readings from a parsed scorecard export (owners resolve to seats); idempotent, human-confirmed, re-import upserts by period." },
46080
46213
  { "id": "signal.list", "namespace": "signal", "action": "list", "title": "List Signals", "description": "List measurable definitions with their latest reading and on/off-track state. Seat-scoped callers see only their own seat.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "List Signals to find measurable ids and current on/off-track state before recording or correcting readings." },
46081
46214
  { "id": "signal.preview", "namespace": "signal", "action": "preview", "title": "Preview a signal source", "description": "Execute a candidate rest-for-signals recipe LIVE and read-only against an allowlisted HTTPS source, returning the extracted scalar and a short-lived preview_token required by signal.bind. Guarded (SSRF + restricted JSONPath); writes a signal_pull_log row. Never mutates.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "integration_id", "flag": "integration-id", "type": "string", "required": true }, { "name": "cadence", "flag": "cadence", "type": "enum", "required": true, "enumValues": ["daily", "weekly", "monthly", "quarterly", "annual"] }, { "name": "host_allowlist", "flag": "host-allowlist", "type": "array", "required": true, "itemType": "string" }], "hasComplexInput": true, "help": "Run a candidate recipe live but read-only against an allowlisted HTTPS source; returns the extracted value + a short-lived preview_token. Never mutates; the credential is resolved from the connection at execution." },
46215
+ { "id": "signal.report", "namespace": "signal", "action": "report", "title": "Report a Signal reading", "description": "A per-seat Signal agent proposes one draft reading for one of its OWN seat's agent-sourced measurables (a judgment/transform pull \u2014 reading a number off a document, reconciling messy data, estimating progress). The reading lands unconfirmed; a human confirms it with signal.confirm_reading. Refuses any measurable not owned by the acting seat or whose source is not 'agent'.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "value", "flag": "value", "type": "number", "required": true }, { "name": "period_start", "flag": "period-start", "type": "string", "required": false }, { "name": "note", "flag": "note", "type": "string", "required": false }, { "name": "confidence", "flag": "confidence", "type": "enum", "required": false, "enumValues": ["low", "medium", "high"] }], "hasComplexInput": false, "help": "A per-seat Signal agent proposes one draft reading for its own seat's agent-sourced measurable (a judgment/transform pull). The reading lands unconfirmed; a human confirms it with signal.confirm_reading. Refuses non-agent-sourced or other-seat measurables.", "example": { "measurable_id": "01900001-0001-7001-8001-000000000001", "value": 42, "note": "Read off the Q3 close PDF, page 2 \u2014 42 reconciled invoices this week.", "confidence": "high" } },
46082
46216
  { "id": "signup.provision_tenant", "namespace": "signup", "action": "provision_tenant", "title": "Create company", "description": "Provision a new company (tenant) for the authenticated CLI user with no web step.", "requiredScope": "user", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "company_name", "flag": "company-name", "type": "string", "required": true }], "hasComplexInput": false, "help": "Create the company headlessly when the CLI session has no tenant yet; it becomes the user's active tenant so the rest of setup runs with no web step." },
46083
46217
  { "id": "skill.assign_to_seat", "namespace": "skill", "action": "assign_to_seat", "title": "Assign skill to seat", "description": "Propose or human-approve a published immutable skill version for a Seat after checking required and optional tool dependencies.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "slug", "flag": "slug", "type": "string", "required": false }, { "name": "skill_version_id", "flag": "skill-version-id", "type": "string", "required": false }, { "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["proposed", "approved"] }, { "name": "rationale", "flag": "rationale", "type": "string", "required": true }, { "name": "allow_blocked_proposal", "flag": "allow-blocked-proposal", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Propose or human-approve a published Skill for a Seat after dependency checks. Missing required tools block approval; optional tools are warnings only." },
46084
46218
  { "id": "skill.assigned.list", "namespace": "skill", "action": "assigned.list", "title": "List assigned skills", "description": "List approved skill assignments for a Seat, including immutable version, dependency status, rationale, and approval time. Seat-scoped callers can only read their own assignments.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "List approved Skills assigned to a Seat before loading instructions into a run. A seat-scoped token can only read its own assigned Skills." },