@rosthq/cli 0.5.16 → 0.5.17

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
@@ -41830,7 +41830,7 @@ Drafting can be assisted by agents. Activation is a human decision. When authori
41830
41830
  order: 40,
41831
41831
  title: "Agent staffing playbook",
41832
41832
  summary: "How to decide whether a seat should be human, agent, or hybrid, and how to go live safely.",
41833
- version: "2026-06-19.2",
41833
+ version: "2026-06-20.1",
41834
41834
  public: true,
41835
41835
  audiences: ["human", "cli", "mcp", "in_app_agent"],
41836
41836
  stages: ["staffing"],
@@ -41891,6 +41891,12 @@ Two creation paths, both draft-first. Read the stock-agents guide for templates
41891
41891
  - Run on demand: \`{{cli}} agent run-now --seat-id <seat-id>\` / \`agent.run_now\` / \`rost_run_agent_now\` queues an immediate live run without changing the saved schedule. Cloud agents dispatch to the Inngest executor; runner agents queue work for the paired runner. The command is ungated but still requires a live staffed agent and the normal server-side tool guard.
41892
41892
  - Audit what an agent did (Trust Card): \`{{cli}} command agent.list_runs --json '{"seat_id":"<seat-id>"}'\` / \`rost_list_agent_runs\` returns the seat's run history with per-run tool-call and guard-held counts; \`{{cli}} agent get-run --seat-id <seat-id> --run-id <run-id>\` / \`agent.get_run\` / \`rost_get_agent_run_diagnostics\` reads one run's transcript reference, token/cost usage, outcome, and product-visible run errors; \`{{cli}} command agent.list_tool_calls --json '{"seat_id":"<seat-id>"}'\` / \`rost_list_agent_tool_calls\` returns the tool-call ledger with each call's guard result. Both list commands include a \`denied_tool_call_count\` rollup \u2014 the actions held because they exceeded the charter. Pass \`{"seat_id":"<seat-id>","held_only":true}\` to \`agent.list_tool_calls\` for only the held calls. The web seat page shows the same facts as a Trust Card.
41893
41893
 
41894
+ ## Review readiness before go-live
41895
+
41896
+ The fleet page and seat page should make readiness inspectable, not implied. A staffed agent row shows whether the Steward chain, lane or runtime substrate, vaulted credentials, granted tools, model config, sandbox dry run, and go-live state are complete. Each missing item links to the exact setup surface that fixes it: seat staffing, the Charter Builder, agent operations, runner settings, vault settings, or tool configuration.
41897
+
41898
+ After an agent runs, review its completed work as well as its telemetry. Seat pages combine explicit deliverables, work-log evidence, and successful run summaries into a readable output trail with safe evidence links labelled as internal, Linear, GitHub, or external. Held confirmations and escalations remain visible until decided or expired: confirmations can be approved or rejected from the seat page, while escalations link to the Steward queue for the human decision.
41899
+
41894
41900
  ## When to stop for confirmation
41895
41901
 
41896
41902
  \`agent.create_from_template\`, \`agent.create_custom\`, \`staffing.assign_user\`, \`agent.go_live\`, \`agent.update_schedule\`, and \`mcp_token.create\` are \`human_required\`; \`agent.configure_tools\` and \`credential.ingress\` are \`credential_flow\` (both gate through the vault-backed credential path with human approval; \`agent.configure_tools\` stages the request and only \`credential.ingress\` takes the raw secret, as a vault reference); \`agent.decommission\` is \`dangerous\`. \`agent.run_now\` is not human-gated because it does not expand authority or change the schedule; it only queues an immediate run for an already-live agent. An agent may draft, configure (with vault refs), dry-run, and request an on-demand run; the human approves go-live, credentials, schedule changes, and decommission. \`run_dry_run\` is ungated by human approval, but it is **precondition-gated**: the seat's permission manifest must be signed first (\`charter.sign_manifest\`). Attempting a dry run before sign-off returns a clean \`COMMAND_PRECONDITION_FAILED\` naming \`charter.sign_manifest\`, not a generic failure. Go-live after a passed dry run is \`human_required\`. See the confirmations guide.
@@ -42133,7 +42139,7 @@ Decisions should be recorded as human decisions. Handoffs should attach to seats
42133
42139
  order: 45,
42134
42140
  title: "How agents work",
42135
42141
  summary: "How {{brand}} agents operate inside seats, use Charters, report work, and escalate beyond authority.",
42136
- version: "2026-06-20.3",
42142
+ version: "2026-06-20.4",
42137
42143
  public: true,
42138
42144
  audiences: ["human", "cli", "mcp", "in_app_agent"],
42139
42145
  stages: ["staffing", "operating_rhythm"],
@@ -42225,20 +42231,20 @@ Before an agent goes live, the sandbox dry run rehearses this against fake data
42225
42231
 
42226
42232
  ## What humans should review
42227
42233
 
42228
- The Agents page shows fleet health first: live state, recent runs, failed runs, open held actions, last activity, cost, and the next operator action. A seat's Trust Card drills into the same facts: run history, one-run detail, tool-call outcomes, product-visible errors, transcript references, and held confirmations or escalations. Open confirmations stay visible until they are decided or expire, even when they are older than the default activity window. Approving or rejecting a held confirmation from the seat page is scoped to that seat; rejection can include a short reason.
42234
+ The Agents page shows fleet health first: live state, recent runs, failed runs, open held actions, last activity, cost, and the next operator action. It also shows configuration completeness for each staffed agent seat: Steward chain, lane or runtime substrate, vaulted credentials, granted tools, model config, sandbox dry run, and go-live state, each with a remediation link when incomplete. A seat's Trust Card drills into the same facts: run history, one-run detail, tool-call outcomes, product-visible errors, transcript references, and held confirmations or escalations. Open confirmations stay visible until they are decided or expire, even when they are older than the default activity window. Approving or rejecting a held confirmation from the seat page is scoped to that seat; rejection can include a short reason.
42229
42235
 
42230
- Review the first dry runs, fleet overview, tool-call audit rows, escalations, and Signal impact. The fleet view at \`/agents\` shows every staffed agent seat at a glance; the agent-native equivalents are \`{{cli}} command agent.list_fleet --json '{}'\` / \`rost_list_agent_fleet\` for the compact overview, and \`{{cli}} agent fleet-digest --json\` / \`agent.fleet_digest\` / \`rost_get_dogfood_fleet_health_digest\` for the daily dogfood evidence bundle. The digest returns live/idle state, 24h/7d turns, 7d/30d spend, recent failed runs, unresolved product errors, failed notifications, and a next action per seat. Fleet real-turn counts use the same seat-run association as \`agent.list_runs\`, filtered to real runs. Scheduled agents are checked in rounded five-minute buckets, so a minute-level cron inside the bucket queues one work order for that bucket rather than one order per minute. Sandbox dry runs do not count as real turns. If the agent is repeatedly blocked, revise the Charter or split the seat. If the agent is taking too much judgment, narrow its autonomous scope.`
42236
+ Review the first dry runs, fleet overview, tool-call audit rows, escalations, deliverables, and Signal impact. A seat's completed-work area combines explicit deliverables, work-log evidence, and successful run summaries into one operator-facing trail with safe links labelled as internal, Linear, GitHub, or external. The fleet view at \`/agents\` shows every staffed agent seat at a glance; the agent-native equivalents are \`{{cli}} command agent.list_fleet --json '{}'\` / \`rost_list_agent_fleet\` for the compact overview, and \`{{cli}} agent fleet-digest --json\` / \`agent.fleet_digest\` / \`rost_get_dogfood_fleet_health_digest\` for the daily dogfood evidence bundle. The digest returns live/idle state, 24h/7d turns, 7d/30d spend, recent failed runs, unresolved product errors, failed notifications, and a next action per seat. Fleet real-turn counts use the same seat-run association as \`agent.list_runs\`, filtered to real runs. Scheduled agents are checked in rounded five-minute buckets, so a minute-level cron inside the bucket queues one work order for that bucket rather than one order per minute. Sandbox dry runs do not count as real turns. If the agent is repeatedly blocked, revise the Charter or split the seat. If the agent is taking too much judgment, narrow its autonomous scope.`
42231
42237
  },
42232
42238
  {
42233
42239
  slug: "tool-access-and-vault",
42234
42240
  order: 46,
42235
42241
  title: "Tool access and vault",
42236
42242
  summary: "How to give agents access to tools without exposing raw credentials or expanding authority by accident.",
42237
- version: "2026-06-20.4",
42243
+ version: "2026-06-20.5",
42238
42244
  public: true,
42239
42245
  audiences: ["human", "cli", "mcp", "in_app_agent"],
42240
42246
  stages: ["staffing"],
42241
- relatedCommandIds: ["charter.sign_manifest", "credential.ingress", "agent.configure_tools", "integration.list", "integration.status", "integration.test", "mcp_token.create", "mcp_token.revoke", "mcp_token.list", "confirmation.approve"],
42247
+ 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"],
42242
42248
  legal: {
42243
42249
  publicRisk: "low",
42244
42250
  notes: [
@@ -42288,6 +42294,8 @@ Google can be connected from Settings once the workspace OAuth app is configured
42288
42294
 
42289
42295
  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.
42290
42296
 
42297
+ \`integration.readiness\` / \`{{cli}} integration readiness --provider google --json\` / \`rost_check_integration_readiness\` returns the same setup checklist Settings shows: OAuth env and callback status, tenant connection state, granted scopes, latest test state, external verification/CASA caveats, handler availability, and the next Linear issue or action. The checklist is metadata-only. It never returns access tokens, refresh tokens, client secrets, vault refs, or raw provider responses.
42298
+
42291
42299
  ## One write-only credential flow across every surface
42292
42300
 
42293
42301
  There is exactly one way to give a connected tool its credential, and it is the same on every surface (agent setup, Charter Builder, CLI, MCP). Connecting a tool only authorizes the access \u2014 it never captures a secret. When a connected tool needs a credential, you stage a vault-backed *request* (provider, scope, and a credential name \u2014 all labels, never the secret). You then provide the actual secret separately through the vault-backed ingress flow from Settings. No {{brand}} surface ever has a field that accepts raw secret material, so a secret can never reach a prompt, log, event, or tool argument.
@@ -42370,7 +42378,7 @@ External connectors are being rolled out provider by provider, conservatively (r
42370
42378
  order: 48,
42371
42379
  title: "CLI and MCP installation guide",
42372
42380
  summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
42373
- version: "2026-06-20.10",
42381
+ version: "2026-06-20.11",
42374
42382
  public: true,
42375
42383
  audiences: ["human", "cli", "mcp", "in_app_agent"],
42376
42384
  stages: ["company_setup", "staffing"],
@@ -42409,7 +42417,11 @@ External connectors are being rolled out provider by provider, conservatively (r
42409
42417
  "agent.fleet_digest",
42410
42418
  "agent.get_run",
42411
42419
  "agent.list_runs",
42412
- "agent.list_tool_calls"
42420
+ "agent.list_tool_calls",
42421
+ "integration.list",
42422
+ "integration.readiness",
42423
+ "integration.status",
42424
+ "integration.test"
42413
42425
  ],
42414
42426
  legal: {
42415
42427
  publicRisk: "low",
@@ -42783,7 +42795,7 @@ These ergonomic wrappers (including the \`{{cli}} agent\` group) require **{{cli
42783
42795
  | \`{{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\` |
42784
42796
  | \`{{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\` |
42785
42797
  | \`{{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\` |
42786
- | \`{{cli}} integration list|status|test\` | \`integration.list\`, \`integration.status\`, \`integration.test\` | List connector metadata, read one connector's health, and run the provider-specific connection test without exposing credentials. | Tenant | \`{{cli}} integration test --provider google --json\` |
42798
+ | \`{{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\` |
42787
42799
  | \`{{cli}} settings get|update\` | \`settings.get\`, \`settings.update\` | Read tenant settings; update budget caps. | Tenant | \`{{cli}} settings get --json\` |
42788
42800
  | \`{{cli}} member invite|update|remove\` | \`member.invite\`, \`member.update\`, \`member.remove\` | Manage tenant members. | Tenant | \`{{cli}} member invite --email ops@example.com --role member\` |
42789
42801
  | \`{{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\` |
@@ -42917,6 +42929,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
42917
42929
  | \`rost_send_test_notification\` | \`notification.test\` | Emit an in-app test notification to the acting human. | Tenant | Call with \`{}\`. |
42918
42930
  | \`rost_list_notification_errors\` | \`notification.list_errors\` | List recent failed notification deliveries with linked \`error_log_id\`, source, seat id, and run id when available. | Tenant | Call with optional \`limit\`; \`source=run\` rows can be followed with \`agent.get_run\`. |
42919
42931
  | \`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. |
42932
+ | \`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. |
42920
42933
  | \`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>"}\`. |
42921
42934
  | \`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. |
42922
42935
  | \`rost_invite_member\` | \`member.invite\` | Create a pending tenant invite for a human teammate. | Tenant | Call with \`email\` and \`role\`. |
@@ -43144,7 +43157,7 @@ Retrieve the narrowest relevant guide before making a setup recommendation. Pref
43144
43157
  order: 60,
43145
43158
  title: "Cascade guide",
43146
43159
  summary: "How to connect company goals to seat-level work without turning {{brand}} into a project-management tool.",
43147
- version: "2026-06-20.1",
43160
+ version: "2026-06-20.2",
43148
43161
  public: true,
43149
43162
  audiences: ["human", "cli", "mcp", "in_app_agent"],
43150
43163
  stages: ["operating_rhythm"],
@@ -43197,6 +43210,10 @@ Cascade warnings are advisory, not blockers. They point to setup that should be
43197
43210
  - Agent goal missing human accountability parent: an agent-owned goal has no human or hybrid goal in its ancestry.
43198
43211
  - Orphaned goal branch: the owner seat or parent chain no longer reaches an active Compass objective.
43199
43212
 
43213
+ On \`/cascade\`, the screen renders the full goal depth, not just one or two levels. Off-track descendant branches stay open so the operator can see why a parent rolled up to risk.
43214
+
43215
+ On human and function seat pages, goal visibility includes both direct goals and descendant seat goals from the Responsibility Graph subtree, so a manager can review team progress without double-owning the agent's work.
43216
+
43200
43217
  ## What does not belong
43201
43218
 
43202
43219
  Do not put every task into Cascade. Small errands, private notes, and work with no strategic connection should stay out. Cascade should answer whether the company is moving toward its stated outcomes.
@@ -43288,7 +43305,7 @@ Agents may record readings when the Charter allows it. Agent-reported readings s
43288
43305
  order: 62,
43289
43306
  title: "Friction guide",
43290
43307
  summary: "How to capture issues with evidence, rank them, and resolve them without losing ownership.",
43291
- version: "2026-06-18.1",
43308
+ version: "2026-06-20.1",
43292
43309
  public: true,
43293
43310
  audiences: ["human", "cli", "mcp", "in_app_agent"],
43294
43311
  stages: ["operating_rhythm"],
@@ -43337,6 +43354,8 @@ Friction is where operational issues become visible. A good Friction item is spe
43337
43354
 
43338
43355
  Agents should file Friction when a measurable breaks, a tool fails, a repeated exception appears, or the Charter says a condition must be escalated. The agent should attach evidence and avoid deciding beyond its scope.
43339
43356
 
43357
+ In the app, operational evidence is summarized for humans instead of shown as the primary interface. Incident fields, proposed tool calls, schedules, payload labels, and source links render as readable fields with raw details tucked behind supporting context when useful. Secret-shaped values stay redacted.
43358
+
43340
43359
  ## Operate Friction, tasks, and escalations from CLI or MCP
43341
43360
 
43342
43361
  Friction, tasks, and escalations are the issue-to-action loop. A seat files, a task carries the work, and an escalation routes a decision a seat cannot make alone.
@@ -43358,7 +43377,7 @@ Resolving Friction should produce one of four outcomes: a decision, a task, a Ch
43358
43377
  order: 70,
43359
43378
  title: "Steward queue guide",
43360
43379
  summary: "How Stewards review escalations, approve agent boundaries, and keep agents accountable.",
43361
- version: "2026-06-18.2",
43380
+ version: "2026-06-20.1",
43362
43381
  public: true,
43363
43382
  audiences: ["human", "cli", "mcp", "in_app_agent"],
43364
43383
  stages: ["staffing", "operating_rhythm"],
@@ -43395,6 +43414,8 @@ Read the seat, Charter, evidence, and recommended action. Decide the narrow ques
43395
43414
 
43396
43415
  In the app, the evidence is shown as a legible card, not raw data: a proposed tool call lists the tool and its summarized arguments, and any attached context shows as labeled fields. Values that read like credentials are redacted, so you can decide without seeing secret material.
43397
43416
 
43417
+ When nothing is waiting, the Steward page still proves the governance loop. It shows which agent or hybrid seats the human stewards, how many escalations were raised or decided recently, and whether any are open. That empty state is an operating summary, not a dead end.
43418
+
43398
43419
  ## Work the queue from CLI or MCP
43399
43420
 
43400
43421
  The Steward reads the queue from any surface but decides as a human.
@@ -43471,11 +43492,11 @@ Stop before: approving a Charter, signing a manifest, connecting a tool or crede
43471
43492
  order: 72,
43472
43493
  title: "Settings guide",
43473
43494
  summary: "How to use Settings as the control plane for company access, channels, providers, tokens, and operating defaults.",
43474
- version: "2026-06-20.5",
43495
+ version: "2026-06-20.7",
43475
43496
  public: true,
43476
43497
  audiences: ["human", "cli", "mcp", "in_app_agent"],
43477
43498
  stages: ["company_setup", "staffing"],
43478
- relatedCommandIds: ["onboarding.create_invite", "mcp_token.create", "mcp_token.revoke", "mcp_token.list", "integration.list", "integration.status", "integration.test", "settings.get", "settings.update", "settings.sync_brief_scope.get", "settings.sync_brief_scope.update"],
43499
+ 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"],
43479
43500
  legal: { publicRisk: "low", notes: ["{{brand}}-native settings guidance."] },
43480
43501
  sources: [
43481
43502
  {
@@ -43505,11 +43526,11 @@ Start with members and invites, then provider and channel connections, then MCP
43505
43526
 
43506
43527
  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.
43507
43528
 
43508
- When a settings source is temporarily unavailable, the app keeps the route open and marks affected sections as unavailable instead of showing raw errors or stale-looking editable values. Budget and Sync Brief controls stay read-only until their server-backed data can be loaded.
43529
+ When a settings source is temporarily unavailable, the app keeps the route open and marks affected sections as unavailable instead of showing raw errors or stale-looking editable values. Budget and Sync Brief controls stay read-only until their server-backed data can be loaded. Notification timestamps and integration test timestamps follow the same safe-label rule, so a malformed or missing timestamp becomes \`Unknown\` or unavailable copy rather than a page crash.
43509
43530
 
43510
43531
  ## Integration health
43511
43532
 
43512
- \`integration.list\` lists connector metadata for CLI and MCP operators, \`integration.status\` reads one provider or integration id, and \`integration.test\` runs the installed provider-specific health check. These commands return account labels, scopes, capabilities, timestamps, and health only; they never return vault references, access tokens, refresh tokens, or raw provider responses. Google's test refreshes the vaulted OAuth credential and reads the Gmail profile as the minimal live check. Settings exposes the same Google test as an owner/operator button beside Connect/Reconnect, shows the last tested time, and turns failures into reconnect-oriented remediation copy rather than raw provider errors.
43533
+ \`integration.list\` lists connector metadata for CLI and MCP operators, \`integration.readiness\` returns the setup checklist, \`integration.status\` reads one provider or integration id, and \`integration.test\` runs the installed provider-specific health check. These commands return account labels, scopes, capabilities, timestamps, checklist status, DER-coded next actions, and health only; they never return vault references, access tokens, refresh tokens, client secrets, or raw provider responses. Google's test refreshes the vaulted OAuth credential and reads the Gmail profile as the minimal live check. Settings exposes the same Google readiness facts and test action beside Connect/Reconnect, showing whether OAuth env, callback registration, tenant connection, scopes, tests, Google verification/CASA, and Gmail/Sheets handler slices are ready or still waiting on DER-880, DER-881, DER-866, DER-867, or DER-869.
43513
43534
 
43514
43535
  Reconnects keep historical rows for audit, but provider status in Settings, CLI, and MCP prefers the current connected row first, then the latest error or disconnected row.
43515
43536
 
@@ -43772,7 +43793,7 @@ Templates may draft. Humans approve. A stock agent should not go live until a hu
43772
43793
  order: 77,
43773
43794
  title: "Troubleshooting guide",
43774
43795
  summary: "How users and agents should diagnose common setup, tool, Signal, Friction, and MCP problems.",
43775
- version: "2026-06-18.4",
43796
+ version: "2026-06-20.1",
43776
43797
  public: true,
43777
43798
  audiences: ["human", "cli", "mcp", "in_app_agent"],
43778
43799
  stages: ["company_setup", "staffing", "operating_rhythm"],
@@ -43805,10 +43826,12 @@ Before calling a command that changes state, discover its exact shape so you do
43805
43826
  - Onboarding seems stuck: call \`onboarding.status\` / \`rost_onboard_status\` and inspect missing graph, Charter, Compass, or staffing steps.
43806
43827
  - Graph looks wrong: read \`graph.get\` / \`rost://graph\` to confirm seat ids, parents, and occupancy before mutating.
43807
43828
  - Agent cannot act: check the Charter, permission manifest, Steward chain, and token scope with \`agent.status\` / \`rost_get_agent_status\` and \`seat.get\`.
43829
+ - Agent looks incomplete: open the fleet row on \`/agents\` and follow the configuration readiness links for the missing Steward chain, lane/substrate, credentials, tools, model config, sandbox dry run, or go-live state.
43808
43830
  - Signal looks wrong: read \`signal.list\` / \`rost_list_signals\` and check owner seat, cadence, target, and evidence.
43809
43831
  - Friction is noisy: read \`friction.list\` and check whether the underlying Charter or measurable is unclear.
43810
43832
  - Escalations are aging: read \`escalation.list\` / \`rost_list_escalations\`; a human resolves through the Steward queue.
43811
43833
  - MCP access fails: revoke and recreate the narrowest token after checking scope (\`mcp_token.revoke\` then \`{{cli}} mcp install --client <client> --scope seat --seat-id <seat-id>\`; standalone \`mcp install\` requires an explicit \`--scope\`).
43834
+ - Settings section unavailable: keep the route open, read which section is marked unavailable, and retry or fix that source directly. Do not treat a missing Settings panel as permission to write blind values; budget and Sync Brief settings stay read-only until their data loads.
43812
43835
 
43813
43836
  ## Surface-specific failures
43814
43837
 
@@ -45775,6 +45798,17 @@ var integrationWrapper = (context, args) => dispatch(context, "integration", arg
45775
45798
  return integrations.map((entry) => formatIntegrationLine(asRecord(entry))).join("\n");
45776
45799
  });
45777
45800
  },
45801
+ readiness: (ctx, rest) => {
45802
+ const parsed = parseFlags(rest);
45803
+ const body = withOptional({}, { provider: optionalValue(parsed, "provider") });
45804
+ return execute(ctx, parsed, "integration.readiness", body, (output) => {
45805
+ const connectors = asArray(asRecord(output).connectors);
45806
+ if (connectors.length === 0) {
45807
+ return "No connector readiness facts found.";
45808
+ }
45809
+ return connectors.map((entry) => formatIntegrationReadiness(asRecord(entry))).join("\n\n");
45810
+ });
45811
+ },
45778
45812
  status: (ctx, rest) => {
45779
45813
  const parsed = parseFlags(rest);
45780
45814
  const body = integrationLookupBody(parsed);
@@ -45808,9 +45842,24 @@ function integrationLookupBody(parsed) {
45808
45842
  function formatIntegrationLine(record2) {
45809
45843
  return `${field(record2, "provider")} status=${field(record2, "status")} account=${field(record2, "account_email")} last_test=${field(record2, "last_test_result")} id=${field(record2, "id")}`;
45810
45844
  }
45845
+ function formatIntegrationReadiness(record2) {
45846
+ const checks = asArray(record2.checks).map((entry) => {
45847
+ const check2 = asRecord(entry);
45848
+ const issue2 = field(check2, "linear_issue") === "\u2014" ? "" : ` ${field(check2, "linear_issue")}`;
45849
+ return ` - ${field(check2, "label")}: ${field(check2, "status")}${issue2} \u2014 ${field(check2, "detail")}`;
45850
+ });
45851
+ const actions = asArray(record2.next_actions).map((entry) => ` - ${String(entry)}`);
45852
+ return [
45853
+ `${field(record2, "provider")} readiness=${field(record2, "overall_status")} id=${field(record2, "integration_id")}`,
45854
+ field(record2, "summary"),
45855
+ checks.length > 0 ? ["checks:", ...checks].join("\n") : "",
45856
+ actions.length > 0 ? ["next:", ...actions].join("\n") : ""
45857
+ ].filter((line) => line.length > 0).join("\n");
45858
+ }
45811
45859
  function integrationUsage(bin) {
45812
- return `Usage: ${bin} integration list|status|test [--json]
45860
+ return `Usage: ${bin} integration list|readiness|status|test [--json]
45813
45861
  ${bin} integration list [--provider <name>]
45862
+ ${bin} integration readiness [--provider google]
45814
45863
  ${bin} integration status --provider <name>
45815
45864
  ${bin} integration test --provider <name>`;
45816
45865
  }