@rosthq/cli 0.5.28 → 0.5.30

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":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAoB,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAerE,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAK1C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,KAAK,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,mBAAmB,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,yBAAyB,CAAC;CACnD,CAAC;AAEF,wBAAsB,IAAI,CAAC,IAAI,WAAwB,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgPnG;AA+bD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAUxF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAoB,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAerE,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAK1C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,KAAK,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,mBAAmB,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,yBAAyB,CAAC;CACnD,CAAC;AAEF,wBAAsB,IAAI,CAAC,IAAI,WAAwB,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmPnG;AA6cD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAUxF"}
package/dist/index.js CHANGED
@@ -41758,7 +41758,7 @@ When operating through CLI or MCP, create fewer seats first and ask for confirma
41758
41758
  order: 30,
41759
41759
  title: "Charter design playbook",
41760
41760
  summary: "How to draft strong Charters that work for human, agent, and hybrid seats.",
41761
- version: "2026-06-20.1",
41761
+ version: "2026-06-29.1",
41762
41762
  public: true,
41763
41763
  audiences: ["human", "cli", "mcp", "in_app_agent"],
41764
41764
  stages: ["charter_design", "staffing"],
@@ -42257,7 +42257,7 @@ Use the lower-level commands after health names a finding: \`agent.get_run\` for
42257
42257
  order: 46,
42258
42258
  title: "Tool access and vault",
42259
42259
  summary: "How to give agents access to tools without exposing raw credentials or expanding authority by accident.",
42260
- version: "2026-06-27.6",
42260
+ version: "2026-06-30.1",
42261
42261
  public: true,
42262
42262
  audiences: ["human", "cli", "mcp", "in_app_agent"],
42263
42263
  stages: ["staffing"],
@@ -42307,15 +42307,15 @@ For an API with no dedicated connector, the generic REST tool lets a seat call a
42307
42307
 
42308
42308
  ## Gmail connector
42309
42309
 
42310
- The native Gmail handlers run inside the same broker boundary as the REST and Slack connectors: every call passes the server guard and writes an audit row, and the vaulted Google OAuth token is bound only inside a credential closure \u2014 the agent never sees it, and both the access and refresh tokens are redacted from anything a handler returns. \`gmail.read\` (read scoped inbox) and \`gmail.draft\` (compose a draft, never send) are autonomous-eligible. \`gmail.send\` is approval-gated: it never sends autonomously \u2014 it holds the action for steward approval. A sandbox dry run previews the intended read/draft/held-send with no Gmail request and without opening the vault. Live external Gmail send stays gated on Google verification and domain cutover (DER-880 / DER-881); the draft and send-with-approval paths are live now.
42310
+ The native Gmail handlers run inside the same broker boundary as the REST and Slack connectors: every call passes the server guard and writes an audit row, and the vaulted Google OAuth token is bound only inside a credential closure \u2014 the agent never sees it, and both the access and refresh tokens are redacted from anything a handler returns. \`gmail.read\` (read scoped inbox) and \`gmail.draft\` (compose a draft, never send) are autonomous-eligible when a tenant has a connected Google credential. \`gmail.send\` is approval-gated: it never sends autonomously \u2014 it holds the action for steward approval. A sandbox dry run previews the intended read/draft/held-send with no Gmail request and without opening the vault. For partner demos before Google verification is complete, use sandbox dry runs, setup previews, and approval-held examples as the demo-safe substitute. Live external Gmail send stays gated on Google verification and domain cutover (DER-880 / DER-881).
42311
42311
 
42312
42312
  ## Google connector status
42313
42313
 
42314
- Google can be connected from Settings once the workspace OAuth app is configured. The connection flow requests offline access for Gmail read/compose and Sheets, stores the returned credential in the vault, and records only account and scope metadata in the integration row. The test action refreshes the vaulted credential and performs a minimal Gmail profile read. Sheets agent tools remain configuration-only until their guarded handlers ship; connecting Google does not by itself let an agent edit a sheet.
42314
+ Google can be connected from Settings once the workspace OAuth app is configured. The connection flow requests offline access for Gmail read/compose and Sheets, stores the returned credential in the vault, and records only account and scope metadata in the integration row. The test action refreshes the vaulted credential and performs a minimal Gmail profile read. Gmail read/draft, bounded Sheets read, and approval-held Sheets write handlers run through the guarded broker when Google is connected; connecting Google still does not bypass the signed Charter manifest, tenant policy ceiling, credential vault, or tool-call audit. Sheet grants should use exact signed argument bindings for approved spreadsheet ids and ranges.
42315
42315
 
42316
42316
  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.
42317
42317
 
42318
- \`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.
42318
+ \`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, the demo-safe partner path, 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.
42319
42319
 
42320
42320
  ## One write-only credential flow across every surface
42321
42321
 
@@ -42346,7 +42346,7 @@ There is exactly one way to give a connected tool its credential, and it is the
42346
42346
  order: 47,
42347
42347
  title: "Available tools guide",
42348
42348
  summary: "How to think about tool categories available to seats and what each category should be used for.",
42349
- version: "2026-06-27.2",
42349
+ version: "2026-06-30.1",
42350
42350
  public: true,
42351
42351
  audiences: ["human", "cli", "mcp", "in_app_agent"],
42352
42352
  stages: ["staffing"],
@@ -42392,14 +42392,14 @@ Agents should explain the job, the required tool category, the minimum permissio
42392
42392
 
42393
42393
  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.
42394
42394
 
42395
- 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 the Gmail handlers (\`gmail.read\`/\`gmail.draft\` autonomous-eligible, \`gmail.send\` held for approval) when Google is connected. Other provider entries remain configuration-only until their connector ships, so nothing runs silently.`
42395
+ 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.`
42396
42396
  },
42397
42397
  {
42398
42398
  slug: "mcp-and-cli-guide",
42399
42399
  order: 48,
42400
42400
  title: "CLI and MCP installation guide",
42401
42401
  summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
42402
- version: "2026-06-28.3",
42402
+ version: "2026-06-30.1",
42403
42403
  public: true,
42404
42404
  audiences: ["human", "cli", "mcp", "in_app_agent"],
42405
42405
  stages: ["company_setup", "staffing"],
@@ -42522,9 +42522,9 @@ Commands below use angle-bracket placeholders. The CLI prints the real, fully-re
42522
42522
  A {{brand}} **account** (the human identity) is created with Google sign-in \u2014 in the browser at \`/signup\`, or headlessly via \`{{cli}} login --device\` (a human approves the code in any browser). A **company** (tenant) can then be created either way:
42523
42523
 
42524
42524
  - **Browser:** at \`/signup\`, name your company, then return to the CLI.
42525
- - **Headless (no browser step):** once logged in, run \`{{cli}} signup --company "<name>"\`. This provisions the company for your session and makes it your active tenant, so \`{{cli}} onboard status\` and every other tenant-scoped command work immediately. This is the recommended path for an autonomous agent setting up from scratch.
42525
+ - **Headless (no browser step):** once logged in, run \`{{cli}} signup --company "<name>"\`. If the account has no active company yet, this provisions the first company for your session and makes it active, so \`{{cli}} onboard status\` and every other tenant-scoped command work immediately. This is the recommended path for an autonomous agent setting up from scratch.
42526
42526
 
42527
- If you run a tenant-scoped command before any company exists, the CLI tells you both options. You only get one company per signup; running \`{{cli}} signup --company\` again returns your existing company rather than creating a duplicate.
42527
+ If you run a tenant-scoped command before any company exists, the CLI tells you both options. \`{{cli}} signup --company\` is not a second-company creation command: running it again returns the active company, names the company you requested, and says that no new company was created. The default output is human-readable; add \`--json\` only when an automation needs the raw command output. To inspect or switch among companies you can already access, use \`{{cli}} tenants\` and \`{{cli}} use <tenant-slug-or-id>\`. Additional company creation is not exposed as a public self-serve CLI path in this milestone.
42528
42528
 
42529
42529
  ## Install the CLI
42530
42530
 
@@ -42788,7 +42788,7 @@ These are the security posture rules for operating after install \u2014 a checkl
42788
42788
  | \`{{cli}} login\` | Open browser login and store the CLI session. | User session | \`{{cli}} login\` |
42789
42789
  | \`{{cli}} login --device\` | Device-code login for a headless agent: prints a short code + URL, a human approves in any browser, the CLI polls until authorized \u2014 no browser session needed on the agent's machine. | User session | \`{{cli}} login --device\` |
42790
42790
  | \`{{cli}} logout\` | Clear the local CLI session. | Local session | \`{{cli}} logout\` |
42791
- | \`{{cli}} signup [--company "<name>"]\` | With no flag, open/print the web signup page. With \`--company\`, create the company headlessly for the logged-in session (no browser step) \u2014 it becomes your active tenant. | Public (\`--company\` needs a login session) | \`{{cli}} signup --company "Acme"\` |
42791
+ | \`{{cli}} signup [--company "<name>"] [--json]\` | With no flag, open/print the web signup page. With \`--company\`, bootstrap the first company headlessly for the logged-in session. If one is already active, it returns that company and says no new company was created. Add \`--json\` for machine-readable output. | Public (\`--company\` needs a login session) | \`{{cli}} signup --company "Acme"\` |
42792
42792
  | \`{{cli}} whoami\` | Show the authenticated user, accessible tenant roles, and the active tenant (\`current_tenant_id\`). | User | \`{{cli}} whoami\` |
42793
42793
  | \`{{cli}} tenants\` | List tenants the user can access; the active one is marked \`current\`. | User | \`{{cli}} tenants\` |
42794
42794
  | \`{{cli}} use <tenant>\` | Select a tenant slug or id as the active tenant for the session. It persists, so a following \`{{cli}} whoami\` reports it as \`current_tenant_id\`. | User | \`{{cli}} use acme-ops\` |
@@ -43709,7 +43709,7 @@ Agents may record readings when the Charter allows it. Agent-reported readings s
43709
43709
  order: 62,
43710
43710
  title: "Friction guide",
43711
43711
  summary: "How to capture issues with evidence, rank them, and resolve them without losing ownership.",
43712
- version: "2026-06-20.1",
43712
+ version: "2026-06-29.1",
43713
43713
  public: true,
43714
43714
  audiences: ["human", "cli", "mcp", "in_app_agent"],
43715
43715
  stages: ["operating_rhythm"],
@@ -43911,7 +43911,7 @@ Stop before: approving a Charter, signing a manifest, connecting a tool or crede
43911
43911
  order: 72,
43912
43912
  title: "Settings guide",
43913
43913
  summary: "How to use Settings as the control plane for company access, channels, providers, tokens, and operating defaults.",
43914
- version: "2026-06-27.1",
43914
+ version: "2026-06-29.1",
43915
43915
  public: true,
43916
43916
  audiences: ["human", "cli", "mcp", "in_app_agent"],
43917
43917
  stages: ["company_setup", "staffing"],
@@ -43950,7 +43950,7 @@ When a settings source is temporarily unavailable, the app keeps the route open
43950
43950
 
43951
43951
  ## Integration health
43952
43952
 
43953
- \`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.
43953
+ \`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 handlers are ready or still waiting on DER-880, DER-881, DER-866, or DER-867.
43954
43954
 
43955
43955
  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.
43956
43956
 
@@ -44244,7 +44244,7 @@ Templates may draft. Humans approve. A stock agent should not go live until a hu
44244
44244
  order: 77,
44245
44245
  title: "Troubleshooting guide",
44246
44246
  summary: "How users and agents should diagnose common setup, tool, Signal, Friction, and MCP problems.",
44247
- version: "2026-06-20.1",
44247
+ version: "2026-06-29.1",
44248
44248
  public: true,
44249
44249
  audiences: ["human", "cli", "mcp", "in_app_agent"],
44250
44250
  stages: ["company_setup", "staffing", "operating_rhythm"],
@@ -44283,6 +44283,7 @@ Before calling a command that changes state, discover its exact shape so you do
44283
44283
  - Escalations are aging: read \`escalation.list\` / \`rost_list_escalations\`; a human resolves through the Steward queue.
44284
44284
  - 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\`).
44285
44285
  - 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.
44286
+ - Org-intake upload failed: read the safe parse status and reason, then ask the human for a better source file or continue by chat. Browser org intake accepts bounded CSV, text, PDF, DOCX, XLSX, PNG, and JPEG files; extraction failures are retryable and should not be worked around by pasting raw binary, stack traces, secrets, or full customer exports into a prompt.
44286
44287
 
44287
44288
  ## Surface-specific failures
44288
44289
 
@@ -44296,7 +44297,7 @@ Before calling a command that changes state, discover its exact shape so you do
44296
44297
 
44297
44298
  These are the common blockers when adding an agent (see the add-agents guide and the custom agents guide):
44298
44299
 
44299
- - Missing Steward: an agent occupancy or go-live is blocked because no Steward chain resolves to a human. Name a human Steward on the seat, then retry. The no-orphan-agent rule is enforced server-side; do not route around it.
44300
+ - Missing Steward: an agent occupancy or go-live is blocked because no Steward chain resolves to a human. Use the inline steward-chain fix when the builder offers a human-occupied candidate, or name a human Steward on the seat, then retry. The no-orphan-agent rule is enforced server-side; do not route around it.
44300
44301
  - Failed dry run: the draft is kept and the failure reason is shown. Read it with \`agent.status\` / \`rost_get_agent_status\`, fix the Charter, manifest, or tool decision, then \`agent.run_dry_run\` again. A passed dry run is required before go-live.
44301
44302
  - Declined tool: declining a proposed tool updates the permission manifest and the dry-run task. If the agent then cannot complete the task, either grant a narrower tool or adjust the Charter so the work still routes safely or escalates.
44302
44303
  - Expired confirmation: a pending human gate expired before approval. Re-issue the gated command (for example \`agent.create_from_template\`, \`charter.sign_manifest\`, or \`agent.go_live\`) and approve the new confirmation; an agent never approves its own request.
@@ -44316,7 +44317,7 @@ Name the failing surface, collect evidence, recommend the smallest correction, a
44316
44317
  order: 78,
44317
44318
  title: "AI model data handling guide",
44318
44319
  summary: "How {{brand}} cloud agents, local MCP sessions, runners, BYOK, and connected tools handle model-bound data.",
44319
- version: "2026-06-22.1",
44320
+ version: "2026-06-29.1",
44320
44321
  public: true,
44321
44322
  audiences: ["human", "cli", "mcp", "in_app_agent"],
44322
44323
  stages: ["company_setup", "staffing", "operating_rhythm"],
@@ -44341,27 +44342,27 @@ Name the failing surface, collect evidence, recommend the smallest correction, a
44341
44342
  {
44342
44343
  label: "OpenAI API data controls",
44343
44344
  url: "https://developers.openai.com/api/docs/guides/your-data",
44344
- note: "Official API data-use and retention controls verified 2026-06-22."
44345
+ note: "Official API data-use and retention controls verified 2026-06-29."
44345
44346
  },
44346
44347
  {
44347
44348
  label: "OpenAI enterprise privacy",
44348
44349
  url: "https://openai.com/enterprise-privacy/",
44349
- note: "Official enterprise privacy and API retention summary verified 2026-06-22."
44350
+ note: "Official enterprise privacy and API retention summary verified 2026-06-29."
44350
44351
  },
44351
44352
  {
44352
44353
  label: "OpenAI Codex with ChatGPT plan",
44353
44354
  url: "https://help.openai.com/en/articles/11369540-using-codex-with-your-chatgpt-plan",
44354
- note: "Official Codex plan data-control scope verified 2026-06-22."
44355
+ note: "Official Codex plan data-control scope verified 2026-06-29."
44355
44356
  },
44356
44357
  {
44357
44358
  label: "Anthropic API and data retention",
44358
44359
  url: "https://platform.claude.com/docs/en/manage-claude/api-and-data-retention",
44359
- note: "Official Claude API ZDR, HIPAA, and retention scope verified 2026-06-22."
44360
+ note: "Official Claude API ZDR, HIPAA, and retention scope verified 2026-06-29."
44360
44361
  },
44361
44362
  {
44362
44363
  label: "Claude Code data usage",
44363
44364
  url: "https://code.claude.com/docs/en/data-usage",
44364
- note: "Official local Claude Code data-flow, training, and retention summary verified 2026-06-22."
44365
+ note: "Official local Claude Code data-flow, training, and retention summary verified 2026-06-29."
44365
44366
  },
44366
44367
  {
44367
44368
  label: "Reference corpus and docs spec",
@@ -44464,9 +44465,9 @@ If sensitive data appears by accident, stop, do not repeat it, and route cleanup
44464
44465
 
44465
44466
  ## Provider policy checkpoints
44466
44467
 
44467
- For platform-managed \`cloud\` runs and BYOK Anthropic \`cloud\` runs, check the Anthropic account, workspace, model, and contract. As of 2026-06-22, official Anthropic Claude API documentation says retained API data is not used for model training without express permission, that some API features are ZDR-eligible while others are not, and that ZDR, HIPAA readiness, model-specific retention requirements, consumer products, Claude Code, and third-party integrations each have their own scope.
44468
+ For platform-managed \`cloud\` runs and BYOK Anthropic \`cloud\` runs, check the Anthropic account, workspace, model, and contract. As of 2026-06-29, official Anthropic Claude API documentation says retained API data is not used for model training without express permission, that some API features are ZDR-eligible while others are not, and that ZDR, HIPAA readiness, model-specific retention requirements, consumer products, Claude Code, and third-party integrations each have their own scope.
44468
44469
 
44469
- For local OpenAI API-key clients running through \`mcp_session\` or \`runner\`, check the customer's OpenAI organization, project, endpoint, and API data controls. As of 2026-06-22, official OpenAI API documentation says API data is not used to train or improve OpenAI models unless the customer explicitly opts in, and default abuse-monitoring logs may retain customer content for up to 30 days unless approved controls apply. OpenAI says zero data retention is available only for eligible customers, endpoints, and use cases.
44470
+ For local OpenAI API-key clients running through \`mcp_session\` or \`runner\`, check the customer's OpenAI organization, project, endpoint, and API data controls. As of 2026-06-29, official OpenAI API documentation says API data is not used to train or improve OpenAI models unless the customer explicitly opts in, and default abuse-monitoring logs may retain customer content for up to 30 days unless approved controls apply. OpenAI says zero data retention is available only for eligible customers, endpoints, and use cases.
44470
44471
 
44471
44472
  For Codex specifically, first identify whether the operator is using Codex through a ChatGPT Free/Plus/Pro, Business, Enterprise, Edu, API, or other workspace path. Official OpenAI Codex help says ChatGPT training data controls apply to whether content processed through Codex may be used to improve OpenAI models when Codex is used with a ChatGPT plan, and that Pro and Plus conversations may be used unless training is disabled. Do not give a Codex user the OpenAI API answer unless they are actually using an API-governed Codex path.
44472
44473
 
@@ -44490,7 +44491,7 @@ When asked about AI data handling:
44490
44491
  order: 79,
44491
44492
  title: "Security model guide",
44492
44493
  summary: "How {{brand}} protects tenant data, credentials, tool calls, and human decisions across web, MCP, CLI, and agents.",
44493
- version: "2026-06-21.5",
44494
+ version: "2026-06-29.1",
44494
44495
  public: true,
44495
44496
  audiences: ["human", "cli", "mcp", "in_app_agent"],
44496
44497
  stages: ["company_setup", "staffing", "operating_rhythm"],
@@ -44921,7 +44922,7 @@ This worked document **omits** \`unanswered_boundaries\` and \`seat_type_recomme
44921
44922
  order: 43,
44922
44923
  title: "Agent builder guide",
44923
44924
  summary: "The full agent setup sequence on the CLI/MCP path \u2014 seat, steward, job, boundaries, tools, credentials, model, schedule, dry-run, go-live \u2014 with the structured model config and access tiers.",
44924
- version: "2026-06-20.2",
44925
+ version: "2026-06-29.1",
44925
44926
  public: true,
44926
44927
  audiences: ["cli", "mcp", "in_app_agent"],
44927
44928
  stages: ["staffing"],
@@ -44969,13 +44970,15 @@ Building teams of controlled agent workers is the product's core differentiator.
44969
44970
  3. **Job** \u2014 what the seat owns. On \`agent.create_custom\` this is the operational answers (what it owns, what success looks like, what it must never do alone); for a strong contract, submit the full Charter directly via \`charter.update_draft\` (see the charter-authoring deep-dive).
44970
44971
  4. **Boundaries** \u2014 the Charter's \`decision_authority\` (can-do / must-ask / never / escalate), \`escalation_rules\`, and \`budget\`. Conservative by default: send/spend/irreversible actions are approval-gated or escalated.
44971
44972
  5. **Tools** \u2014 pick from the discoverable catalog (\`{{cli}} tools list\`); each tool has a default scope tier and access policy. Connect or decline via \`agent.configure_tools\`. Selecting a tool records permission; live handlers execute later only behind the signed manifest, server guard, required credential or binding, and connector-specific approval boundary.
44972
- 6. **Credentials** \u2014 a tool that needs access declares a credential-ingress request (provider, scope, secret name). The secret itself flows through the vault-backed ingress command as a vault ref \u2014 never paste a secret into a builder command.
44973
+ 6. **Credentials and provider readiness** \u2014 a tool that needs access declares a credential-ingress request (provider, scope, secret name). The secret itself flows through the vault-backed ingress command as a vault ref \u2014 never paste a secret into a builder command. For Google-backed tools, inspect the provider readiness shown in Settings or the builder: not connected, connected but untested, connected and tested, or failed. Use \`integration.test\` / \`rost_test_integration_connection\` or the builder Test connection action to refresh the same safe status facts; do not infer authorization from a connected credential.
44973
44974
  7. **Operating instructions** \u2014 the runtime composes the agent's context from its Charter; you do not write a system prompt.
44974
44975
  8. **Model** \u2014 select the structured model config (see below). Read \`{{cli}} model list\` / \`model.catalog\` first when you are unsure; it returns the recommended default, effort, token price estimates, cost band, and best-fit work for each tier. If \`agent.create_custom\` omits \`model_config\`, {{brand}} recommends a tier from the supplied responsibility answers.
44975
44976
  9. **Heartbeat** \u2014 set the schedule (\`schedule_cron\`) for a recurring agent; a live scheduled agent must keep a steward chain.
44976
44977
  10. **Dry-run** \u2014 \`agent.run_dry_run\` rehearses in sandbox after the manifest is signed; it is ungated by human approval but requires a signed manifest.
44977
44978
  11. **Go-live** \u2014 \`agent.go_live\` is \`human_required\`. Prepare everything and surface the go-live to a human; never go live on a human's behalf.
44978
44979
 
44980
+ If \`agent_setup.get\` returns \`next_action: "set_steward"\`, use the returned steward-remediation candidates or choose an existing human-occupied seat with \`agent_setup.update --json '{"seat_id":"<agent-seat-id>","steward_seat_id":"<human-seat-id>"}'\`. If no human-occupied candidate exists, create or staff a human seat first. Do not bypass the no-orphan-agent guard; go-live remains blocked until the chain resolves to a person.
44981
+
44979
44982
  ## Choosing the model (structured config)
44980
44983
 
44981
44984
  The agent's model is a structured object, not a bare string:
@@ -47552,7 +47555,8 @@ var deliverableWrapper = (context, args) => dispatch(context, "deliverable", arg
47552
47555
  title: requireValue2(parsed, "title")
47553
47556
  }, {
47554
47557
  summary: optionalValue(parsed, "summary"),
47555
- content: optionalValue(parsed, "content")
47558
+ content: optionalValue(parsed, "content"),
47559
+ delivered_at: optionalValue(parsed, "delivered-at")
47556
47560
  });
47557
47561
  return execute(ctx, parsed, "deliverable.create", body, formatDeliverableWrite);
47558
47562
  },
@@ -47575,7 +47579,7 @@ function deliverableUsage(bin) {
47575
47579
  return `Usage: ${bin} deliverable list|get|create|attach [--json]
47576
47580
  ${bin} deliverable list --seat-id <id>
47577
47581
  ${bin} deliverable get --seat-id <id> --deliverable-id <id>
47578
- ${bin} deliverable create --title <text> [--kind brief|work_evidence|artifact|report|other] [--summary <text>] [--content <text>]
47582
+ ${bin} deliverable create --title <text> [--kind brief|work_evidence|artifact|report|other] [--summary <text>] [--content <text>] [--delivered-at <iso>]
47579
47583
  ${bin} deliverable attach --title <text> [--run-id <id>] [--task-id <id>] [--work-order-id <id>] [--kind brief|work_evidence|artifact|report|other] [--summary <text>] [--content <text>]`;
47580
47584
  }
47581
47585
  function formatSystemHealth(output) {
@@ -47753,25 +47757,48 @@ function signupUrl(appUrl2) {
47753
47757
  return new URL("/signup", ensureTrailingSlash2(appUrl2)).toString();
47754
47758
  }
47755
47759
  function parseSignupCompany(args) {
47760
+ const json2 = args.includes("--json");
47756
47761
  const index = args.indexOf("--company");
47757
47762
  if (index === -1) {
47758
- return { companyName: null };
47763
+ return { companyName: null, json: json2 };
47759
47764
  }
47760
47765
  const value = args[index + 1];
47761
47766
  if (value === void 0 || value.startsWith("--") || value.trim() === "") {
47762
47767
  throw new Error(`--company requires a value, e.g. ${cliBrand.binName} signup --company "Acme"`);
47763
47768
  }
47764
- return { companyName: value };
47769
+ return { companyName: value, json: json2 };
47765
47770
  }
47766
- async function runSignupProvision(io, client, companyName, run2) {
47771
+ var signupProvisionOutputSchema = external_exports.object({
47772
+ tenant_id: external_exports.string().min(1),
47773
+ slug: external_exports.string().min(1),
47774
+ name: external_exports.string().min(1),
47775
+ created: external_exports.boolean()
47776
+ }).loose();
47777
+ async function runSignupProvision(io, client, companyName, run2, options = {}) {
47767
47778
  const exitCode = await run2(io, client, "signup.provision_tenant", { company_name: companyName });
47768
- if (exitCode === 0) {
47779
+ if (exitCode.exitCode === 0) {
47780
+ const parsed = signupProvisionOutputSchema.safeParse(exitCode.output);
47781
+ if (!parsed.success) {
47782
+ return exitCode.exitCode;
47783
+ }
47784
+ if (options.json === true) {
47785
+ io.stdout.write(`${JSON.stringify(parsed.data, null, 2)}
47786
+ `);
47787
+ return exitCode.exitCode;
47788
+ }
47789
+ if (!parsed.data.created) {
47790
+ io.stdout.write(
47791
+ `No new company was created. Your account already has active company '${parsed.data.name}' (${parsed.data.slug}); requested '${companyName}' was not provisioned. Run '${cliBrand.binName} tenants' to see companies or '${cliBrand.binName} use ${parsed.data.slug}' to keep working there.
47792
+ `
47793
+ );
47794
+ return exitCode.exitCode;
47795
+ }
47769
47796
  io.stdout.write(
47770
- `Company '${companyName}' is ready and active. Run '${cliBrand.binName} onboard status' to continue setup.
47797
+ `Company '${parsed.data.name}' is ready and active. Run '${cliBrand.binName} onboard status' to continue setup.
47771
47798
  `
47772
47799
  );
47773
47800
  }
47774
- return exitCode;
47801
+ return exitCode.exitCode;
47775
47802
  }
47776
47803
  async function runSignup(io, appUrl2, openBrowser2 = tryOpenBrowser) {
47777
47804
  const url2 = signupUrl(appUrl2);
@@ -48716,9 +48743,12 @@ async function main(argv = process.argv.slice(2), options = {}) {
48716
48743
  return 0;
48717
48744
  }
48718
48745
  let signupCompany = null;
48746
+ let signupJson = false;
48719
48747
  if (command === "signup") {
48720
48748
  try {
48721
- signupCompany = parseSignupCompany(args).companyName;
48749
+ const signupOptions = parseSignupCompany(args);
48750
+ signupCompany = signupOptions.companyName;
48751
+ signupJson = signupOptions.json;
48722
48752
  } catch (error51) {
48723
48753
  io.stderr.write(`${redactForLog(error51 instanceof Error ? error51.message : String(error51))}
48724
48754
  `);
@@ -48825,7 +48855,7 @@ Run ${cliBrand.binName} login --device again if the next command asks you to aut
48825
48855
  await maybePrintSignupBootstrap(io, client, config2.appUrl);
48826
48856
  }
48827
48857
  if (command === "signup") {
48828
- return runSignupProvision(io, client, signupCompany, (signupIo, signupClient, commandId, body) => printCommandOutput(signupIo, signupClient, commandId, body));
48858
+ return runSignupProvision(io, client, signupCompany, (signupIo, signupClient, commandId, body) => executeCommandWithResult(signupIo, signupClient, commandId, body), { json: signupJson });
48829
48859
  }
48830
48860
  if (command === "whoami") {
48831
48861
  return printCommandOutput(io, client, "user.whoami");
@@ -49158,6 +49188,14 @@ async function printCommandOutput(io, client, commandId, body = {}, format, opti
49158
49188
  return printCommandError2(io, error51);
49159
49189
  }
49160
49190
  }
49191
+ async function executeCommandWithResult(io, client, commandId, body = {}) {
49192
+ try {
49193
+ const result = await client.execute(commandId, body);
49194
+ return { exitCode: 0, output: result.output };
49195
+ } catch (error51) {
49196
+ return { exitCode: printCommandError2(io, error51) };
49197
+ }
49198
+ }
49161
49199
  function pendingConfirmationFromError2(error51) {
49162
49200
  if (!(error51 instanceof CommandClientError) || !error51.response || error51.response.ok || error51.response.error.code !== "COMMAND_CONFIRMATION_REQUIRED") {
49163
49201
  return null;