Docs

CLI and MCP installation guide

Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.

company setupstaffing

Use the public CLI when a technical operator, Claude Code, Codex, Cursor, or another local agent needs to help set up and operate ROST. Use MCP when the local agent should call ROST tools directly from its own client.

The MCP server is remote and token-backed. There is no local MCP daemon to install. The CLI logs you in, mints a scoped MCP token, and prints the registration block for the deployed /mcp route.

Prerequisite: a human approver in a browser

A headless agent cannot complete setup unattended. Two things always require a human, so plan to announce the handoff rather than stall silently:

  • Device-code approval at first login. rost login --device prints a code; a human must open the workspace URL in a browser, sign in with Google, match the code, and approve.
  • Durable gated commands. Setting or approving a Charter, staffing a seat, and taking an agent live each require a human approval boundary (an agent never approves its own request — see the confirmations-guide). In a headless/agent session, or over MCP, the command surfaces the confirmation_id and an approveVia URL for a human and stops. When a logged-in human runs rost command <id> from an interactive TTY, the official CLI completes that returned confirmation inline by calling confirmation.approve and printing the approved command output. (rost mcp install follows the same interactive rule for token minting, with --skip-permissions / ROST_CLI_SKIP_PERMISSIONS=1 as an explicit headless loosening — see Approving the token mint below.)

Treat these as blocking prerequisites: the agent prepares the request and waits for the human approver.

Placeholder legend

Commands below use angle-bracket placeholders. The CLI prints the real, fully-resolved values at runtime — read them from the terminal, do not hand-construct them:

  • <your-workspace-url> — your workspace origin. The CLI prints the full /auth/device and /mcp URLs in its output; copy them from the terminal rather than guessing the host.
  • <tenant-slug-or-id> — a tenant identifier from rost tenants.
  • <seat-id> — a seat id from rost command seat.create output or rost_get_responsibility_graph / rost command graph.get.
  • <token-id> — an MCP token id printed by mcp install, or discoverable later via rost command mcp_token.list / rost_list_mcp_tokens.
  • <confirmation-id> — shown in the CLI error or output for a gated command; see the confirmations-guide.

Before you start: create your account and company

A ROST account (the human identity) is created with Google sign-in — in the browser at /signup, or headlessly via rost login --device (a human approves the code in any browser). A company (tenant) can then be created either way:

  • Browser: at /signup, name your company, then return to the CLI.
  • Headless (no browser step): once logged in, run rost signup --company "<name>". This provisions the company for your session and makes it your active tenant, so rost onboard status and every other tenant-scoped command work immediately. This is the recommended path for an autonomous agent setting up from scratch.

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 rost signup --company again returns your existing company rather than creating a duplicate.

Install the CLI

Run the published package with npx:

npx @rosthq/cli@latest --help
npx @rosthq/cli@latest login

Or install it globally:

npm i -g @rosthq/cli
rost login

The package requires Node 22 or newer. The binary name is rost. Check your version before installing — npx will still launch the package on Node 20 or 18, but the CLI rejects an older runtime:

node --version

If it prints anything below v22, upgrade Node first.

Headless agent login (device-code flow)

A coding agent (Codex, Claude Code, or any headless shell) signs in without a browser of its own: the agent prints a short code, and a human approves it in any browser. This is the recommended path for autonomous agents. Plain rost login (the browser-callback flow) stays the default for an interactive human at a keyboard.

rost login --device

How it works:

1. The CLI prints a verification URL (your workspace's /auth/device page) and a short code, then polls and waits:

   To sign in, open this URL in any browser and approve the code:
     https://<your-workspace-url>/auth/device
     Code: ABCD-EFGH
   Waiting for approval…

The <your-workspace-url> shown here is a placeholder for this doc; the CLI prints your actual workspace origin. Read the URL and code from the terminal — do not hand-construct them. 2. A human opens the URL, signs in with Google, confirms the code shown in the browser matches the one in the agent's terminal, and clicks Approve. 3. The CLI detects the approval, exchanges a one-time handoff for a session, and stores it in the OS keychain. rost whoami then shows the account, and tenant-scoped commands (rost onboard status, etc.) operate in the approver's active tenant. If the approver has no company yet, create one headlessly with rost signup --company "<name>" — no browser step.

Notes:

  • The code expires after 10 minutes — rerun rost login --device if it lapses.
  • No password is entered, and no access token is stored on the server; only the agent's own machine holds the session (in its OS keychain).
  • Matching the code before approving is a security step: only approve a code your own agent printed.
  • Approve only in a browser you control and trust — never on a kiosk or someone else's device, and sign out afterward on any shared machine. Approval grants a live ROST session tied to your Google identity, not just a code match.

Headless Linux, CI, and machines with no keychain

By default the CLI stores the session in the macOS Keychain (on darwin). There is no built-in Windows or Linux keychain integration today — on any non-macOS host, or any machine without a keychain, the CLI errors with "No OS credential store is available" unless you opt into the file store.

For headless Linux, CI runners, or any no-keychain environment, set ROST_CLI_ALLOW_FILE_TOKEN_STORE=1 to opt into the development-only plain-file token store. It is not encrypted — it writes the file with owner-only permissions (directory 0700, file 0600) and prints a stderr warning. It stores only CLI session tokens (access + refresh token), never tenant secrets, API keys, or vault refs. Treat that file as a credential: do not bake it into a shared image and do not commit it.

The CLI checks this flag on every invocation, not just login. Export it for the whole shell or CI job (so rost whoami, rost onboard status, and the rest also find the file store), not only on the login line:

export ROST_CLI_ALLOW_FILE_TOKEN_STORE=1
rost login --device

For CI, do not run an interactive device login on every job (a device code still needs a human approver, which CI does not have). The CLI stores the Supabase refresh token from login / login --device and refreshes the access token before command execution when it is close to expiry, so normal local agent sessions survive the short access-token window without repeated browser approvals. The refresh token is still a user credential; if refresh fails or is revoked, run rost login --device again. For ongoing unattended automation, prefer a seat-scoped MCP token used directly by your MCP client, and treat that client config as a secret. Such a token now defaults to a 90-day expiry, so for automation that must outlive that window, mint it with an explicit --expires-in <days> (up to 365) or, accepting the long-lived-credential tradeoff, --no-expiry — e.g. mcp install --scope seat --seat-id <id> --expires-in 365. Rotate it before it lapses (--rotate <old-token-id>), and revoke and re-mint if a runner image is rebuilt or shared.

First-run path

This is the install/auth quickstart — it gets you logged in, MCP registered, and onboarding started. It is a convenience view, not the full org-setup procedure: for the canonical end-to-end setup order beyond install, agent-reference-map is the source of truth. Read it with rost reference get agent-reference-map (step 6 below).

1. Log in: npx @rosthq/cli@latest login (or rost login --device for a headless agent) 2. Confirm identity: rost whoami 3. Create your company if you have none yet: rost signup --company "<name>" (no browser step) 4. List tenants: rost tenants 5. Select a tenant when needed: rost use <tenant-slug-or-id> 6. Read the agent map: rost reference get agent-reference-map (the full canonical setup order lives here) 7. Register MCP for the client (pick a scope — --scope is required): rost mcp install --client claude-code --scope tenant-admin for setup, or --scope seat --seat-id <id> for a narrower seat token 8. Inspect onboarding: rost onboard status 9. Get the guided agent prompt: rost onboard run

Or use the one-shot helper: rost init logs in when needed, optionally selects a tenant, installs MCP, and prints the onboarding prompt. It does not run every numbered step above (it does not create your company or call onboard status) — it gets you logged in, registered, and handed the onboarding prompt. As the first-run helper it defaults to a tenant-admin token (no seats exist yet), so unlike a direct mcp install it does not need --scope; pass --scope seat --seat-id <id> if you already have a seat to scope it to:

rost init --tenant <tenant-slug-or-id> --client codex

MCP install commands

A direct mcp install now requires an explicit `--scope` — there is no silent default. Choose --scope seat --seat-id <id> (the narrowest scope, limited to one seat's Charter and permission manifest — prefer it for day-to-day operation) or --scope tenant-admin (can administer the whole company — reserve it for initial setup). Running mcp install without --scope errors and mints nothing, naming both options. (The first-run helper rost init is the exception: it defaults to --scope tenant-admin because no seats exist yet at setup; and --rotate inherits the old token's scope, so it does not need --scope either.)

mcp install accepts an optional --skip-permissions flag (equivalently ROST_CLI_SKIP_PERMISSIONS=1). It governs the token-mint approval in a non-interactive session — see Approving the token mint below. An interactive operator never needs it.

Claude Code (tenant-admin):

npx @rosthq/cli@latest mcp install --client claude-code --scope tenant-admin

Codex (tenant-admin):

npx @rosthq/cli@latest mcp install --client codex --scope tenant-admin

Cursor (tenant-admin):

npx @rosthq/cli@latest mcp install --client cursor --scope tenant-admin

The tenant-admin token administers the whole company. For day-to-day operation, prefer a seat-scoped token instead — it operates only as one seat and is limited by that seat's Charter and permission manifest. Reserve the tenant-admin token for initial setup.

Seat-scoped MCP for a specific seat:

npx @rosthq/cli@latest mcp install --client codex --scope seat --seat-id <seat-id>

The <seat-id> comes from rost command seat.create output or rost_get_responsibility_graph / rost command graph.get.

Approving the token mint

Minting a token (and the inline revoke that --rotate performs) is a human-gated authority change at the command layer. How rost mcp install handles that approval depends on whether it runs in an interactive session:

  • Interactive operator (a human at a real terminal). The CLI completes the approval inline: the operator who ran the command is the human in the loop, so it runs the gated mint, completes the confirmation for that same command, and prints the registration block — a single step, no separate URL to click.
  • Non-interactive / headless / agent session. The CLI does not approve its own request. By default it surfaces the confirmation and stops, minting nothing: it prints the confirmation_id, the exact rost command confirmation.approve --json '{"confirmation_id":"<id>"}' command, and the approveVia URL when the server provided one, then exits non-zero ("pending human approval"). A human then approves it (in a browser or with that approve command) — and that approval executes the mint and returns the token in the approve output (shown once), so register it with your client from there. Do not re-run mcp install after approving: that starts a second mint and orphans the first token. (For an unattended agent that should mint and register in one step, use --skip-permissions below.)
  • Opting into auto-approval in a headless session. Pass --skip-permissions on mcp install, or set ROST_CLI_SKIP_PERMISSIONS=1, to auto-approve the mint/revoke confirmation inline even without a TTY. This is a deliberate loosening (the running session stands in for the human approver) — use it only for trusted automation where you accept that the agent approves its own token mint.

The broader rule still holds for durable changes an agent proposes — charters, decisions, compass and charter amendments — where an agent never approves its own request and a human approves the surfaced approveVia confirmation. See the confirmations-guide for the four confirmation levels and that flow.

Handling the printed token (read this before you paste anything)

The registration block mcp install prints embeds a live bearer token — a real, scoped credential. mcp install prints this block; it does not write any client config itself. You apply it, and once applied the token lands in the client's config file in plaintext:

  • Claude Code: run the printed claude mcp add command — that command writes the token into Claude Code's MCP config.
  • Codex: paste the printed TOML stanza into your Codex config file.
  • Cursor: paste the printed JSON entry into Cursor's MCP config.

Because the token lands on disk in plaintext, treat it like a password:

  • Never commit the block or the client config to version control, and never paste it into a chat, issue, or log. A leaked block grants its full scope until revoked.
  • The session asymmetry matters: your CLI login session lives in the OS keychain and is cleared by rost logout. The MCP token is a separate credential written in plaintext into the client config — rost logout does not revoke it. Revoke MCP tokens separately (below).

Example shapes of what mcp install prints (token redacted as <MCP_TOKEN>; the real values, including the workspace URL, are printed by the CLI — do not hand-construct them):

# Claude Code
claude mcp add --transport http rost https://<your-workspace-url>/mcp --header "Authorization: Bearer <MCP_TOKEN>"
# Codex (config.toml)
[mcp_servers.rost]
url = "https://<your-workspace-url>/mcp"
transport = "http"
headers = { Authorization = "Bearer <MCP_TOKEN>" }
// Cursor (mcp.json)
{
  "mcpServers": {
    "rost": {
      "url": "https://<your-workspace-url>/mcp",
      "headers": { "Authorization": "Bearer <MCP_TOKEN>" }
    }
  }
}

Verify the MCP connection

After registering, confirm the client can actually reach the server with the new token before doing real work. Make one cheap read call scoped to your token type:

  • Any valid token: call rost_list_commands with {}.
  • Tenant-admin token: read the resource rost://tenant/status.
  • Seat-scoped token: call rost_get_context with {} (or read rost://seat/<seat-id>/context). A seat token cannot read rost://tenant/status — that is tenant-admin only, so do not use it to test a seat token.
  • Success returns a normal JSON payload (the command list, your tenant/onboarding status, or your seat context). An auth error (a 401 / "not authorized" shape) means the token did not register — re-run mcp install.

Token lifetime and rotation

Every MCP token now carries an expiry. Tokens minted by rost mcp install default to a 90-day TTL (for both tenant-admin and seat-scoped tokens); after that the token stops authenticating and you re-mint. Override the lifetime at mint time:

  • --expires-in <days> — set an explicit TTL, between 1 and 365 days. Example: rost mcp install --client codex --scope tenant-admin --expires-in 30.
  • --no-expiry — mint a token with no practical expiry (a ~100-year TTL). This is a deliberate loosening for long-lived automation; the CLI prints a warning. Prefer a finite --expires-in and rotate instead.

mcp install echoes the chosen expiry, and rost command mcp_token.list reports expires_in_days for every token so you can see what is about to lapse.

One-step rotation. Replace a live token in a single command — it mints the replacement, prints the new registration block, then revokes the old token:

rost mcp install --client <client> --rotate <old-token-id>

Rotation preserves the original token's scope and seat: rotating a seat-scoped token mints a new seat-scoped token for the same seat, and rotating a tenant-admin token mints a tenant-admin token — you do not pass --scope/--seat-id (and if you do, they must match the old token, or the command errors without minting). The CLI looks the old token up first, so an unknown --rotate id fails cleanly with nothing minted. If the mint succeeds but revoking the old token fails (or the id isn't found at revoke time), the CLI says so on stderr and prints the manual mcp_token.revoke command — the new token is already live, so revoke the old one by hand. Find the <old-token-id> with rost command mcp_token.list.

You can also rotate the long way (mint then revoke separately):

1. Re-run rost mcp install --client <client> --scope <tenant-admin|seat> (add --seat-id <seat-id> for a seat token) to mint and register a fresh token — a direct install requires --scope. 2. Revoke the old one (below). Rotate on a periodic cadence, and whenever the scope or seat changes.

Revoke a token

Revoke the server-side token with the command printed by mcp install:

rost command mcp_token.revoke --json '{"token_id":"<token-id>"}'

Revocation is not just end-of-session housekeeping — it is your incident-response action. Revoke immediately if a laptop is lost or stolen, the client config leaks, or the token is committed to version control. If you no longer have the original printout, find the <token-id> with rost command mcp_token.list (MCP rost_list_mcp_tokens) — it returns token metadata, never token material.

Uninstall and cleanup

Revoking the server-side token leaves a dead entry in the client config that will keep erroring. To fully tear a setup down:

1. Revoke the token (mcp_token.revoke, above). 2. Remove the ROST entry from the client config: claude mcp remove rost for Claude Code; delete the [mcp_servers.rost] stanza from the Codex TOML; delete the rost entry from Cursor's mcp.json. 3. rost logout to clear the CLI session from the keychain (this does not revoke MCP tokens — step 1 does that).

Blast radius of a tenant-admin token

A leaked tenant-admin token can administer the whole tenant, not just one seat. It can run tenant-wide setup and onboarding, staffing (rost_staff_seat), member add / remove / role-change (rost_remove_member), Charter approval (rost_approve_charter), settings changes, and further token minting (rost_create_mcp_token) across every seat in the tenant. A seat-scoped token can act only as its one seat, bounded by that seat's Charter and permission manifest. This is why a direct mcp install now requires you to choose `--scope` explicitly (no silent tenant-admin default), why you should mint the narrowest scope that does the job, and why you should reserve tenant-admin for initial setup. mcp install echoes the granted scope and its blast radius at mint time on every path. See the security-model-guide for tenant isolation, vault-backed credentials, and the seat-scoped-authority principle.

Storing the Anthropic key and other credentials

Storing the tenant model key or any other secret goes through credential ingress as a vault reference — the secret is never pasted into a prompt, config, or log. Use rost_save_tenant_anthropic_key (tenant.anthropic_key.save) for the tenant Anthropic key, or rost_store_credential (credential.ingress) for other secrets; rost_configure_agent_tools stages credential requests but never accepts raw secrets. Credential storage is a gated credential_flow confirmation that a human approves. For the vault model and the security posture behind this, see the security-model-guide and the tool-access-and-vault guide; for model-bound data, BYOK provider handling, and local-client provider settings, see the ai-model-data-handling-guide; for the confirmation gate, see the confirmations-guide.

When to use MCP or CLI

  • A technical operator wants to drive onboarding from a local agent session.
  • A partner wants to use their own local model subscription. Read the ai-model-data-handling-guide first so the operator can verify the local provider account, retention, telemetry, and transcript settings instead of assuming ROST controls them.
  • A Steward wants a local agent to inspect context, draft changes, or prepare work.
  • A developer wants repeatable setup commands.

Access scopes

Tenant-admin access can help set up the company. Seat-scoped access lets an agent act only as a specific seat. Prefer the narrowest scope that can do the job — a direct mcp install requires you to choose --scope tenant-admin or --scope seat --seat-id <id> and mints nothing until you do. rost init defaults to tenant-admin (first-run setup, no seats yet), and --rotate inherits the existing token's scope. See the security-model-guide for tenant isolation, vault-backed credentials, server-side authority checks, and the seat-scoped-authority principle.

For pairing and running a local runner, see the runner-guide.

Safe operating practices (security checklist)

These are the security posture rules for operating after install — a checklist applied across the whole setup, not a competing install procedure. For the full rationale, see the security-model-guide.

1. Log in with the CLI and select the tenant if needed. 2. Read agent-reference-map. 3. Register MCP for the narrowest needed scope (prefer a seat-scoped token for day-to-day operation). 4. Start with onboarding.status or context lookup. 5. Draft changes before durable activation. 6. Route approvals through human confirmation (an agent never approves its own request — see the confirmations-guide). 7. Revoke tokens when you finish operating or the seat changes — and immediately on a lost laptop, leaked config, or committed token. (Revoking is separate from rost logout, which clears only the CLI session, not MCP tokens.)

CLI command catalog

Authentication and tenant selection

CommandPurposeScopeSafe example
rost loginOpen browser login and store the CLI session.User sessionrost login
rost login --deviceDevice-code login for a headless agent: prints a short code + URL, a human approves in any browser, the CLI polls until authorized — no browser session needed on the agent's machine.User sessionrost login --device
rost logoutClear the local CLI session.Local sessionrost logout
rost 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) — it becomes your active tenant.Public (--company needs a login session)rost signup --company "Acme"
rost whoamiShow the authenticated user, accessible tenant roles, and the active tenant (current_tenant_id).Userrost whoami
rost tenantsList tenants the user can access; the active one is marked current.Userrost tenants
rost use <tenant>Select a tenant slug or id as the active tenant for the session. It persists, so a following rost whoami reports it as current_tenant_id.Userrost use acme-ops

Reference and docs

CommandPurposeScopeSafe example
rost docsPrint the agent-facing how-to summary.Public referencerost docs
rost help [group]Print top-level usage, or one operation group's usage; rost <group> --help works too.Public referencerost help agent
rost reference <list|search|get> [options]Help syntax for public reference commands. --audience <human|cli|mcp|in_app_agent> filters to one audience (omit for all).Public referencerost reference search "onboarding" --audience cli
rost reference listList public reference guides.Public referencerost reference list --audience cli
rost reference search <query>Search public guides.Public referencerost reference search "MCP install" --audience mcp
rost reference get <slug>Print one public guide.Public referencerost reference get agent-reference-map

--audience <human|cli|mcp|in_app_agent> (on reference list and reference search) filters guides to those tagged for that audience. When omitted, all audiences are returned.

Onboarding

CommandPurposeScopeSafe example
rost onboard statusReturn onboarding progress, graph summary, and next actions.Tenantrost onboard status
rost onboard runPrint the deterministic agent onboarding prompt.Public referencerost onboard run
rost init [--client claude-code|codex|cursor] (defaults --scope tenant-admin)Log in when needed, install MCP, and print the onboarding prompt. As the first-run helper it defaults to a tenant-admin token (no seats exist yet); pass --scope seat --seat-id <id> to scope it narrower.User plus tenantrost init --client codex
rost init --tenant <tenant> --client <client>Select a tenant before MCP install.User plus tenantrost init --tenant acme-ops --client cursor

Direct command execution

CommandPurposeScopeSafe example
rost command <id> [--seat <seat-id>] --json [json-body]Execute a server-side command by id. Add --seat <seat-id> to run a seat-scoped command (e.g. task.list) against a specific seat.Command-definedrost command task.list --seat <seat-id> --json '{}'
rost command schema <id> [--json]Discover a command's exact input/output schema, help pointer, and a worked example before calling it.Userrost command schema compass.draft
rost command list [--json]List every callable command id with its scope and confirmation gate.Userrost command list
rost command onboarding.attach_reference --json ...Attach a company reference document (reference-only).Tenantrost command onboarding.attach_reference --json '{"text":"# Ops handbook\n...","title":"Ops handbook","kind":"process","source":"handbook/ops.md"}'
rost command seat.create --json ...Create a Responsibility Graph seat.Tenantrost command seat.create --json '{"name":"Finance","seat_type":"human"}'
rost command charter.draft --json ...Create or fetch a draft Charter.Seat or tenant-adminrost command charter.draft --json '{"seat_id":"<seat-id>"}'
rost command confirmation.approve --json ...Approve a pending confirmation as a human.Tenantrost command confirmation.approve --json '{"confirmation_id":"<confirmation-id>"}'

Seat scope (`--seat <seat-id>`). Seat-operating commands run in a seat context. A seat-scoped MCP token already carries that context; a tenant or owner session does not, so pass --seat <seat-id> to target a specific seat — an owner can target any seat in the tenant, a member only a seat they occupy. The flag rides the x-rost-seat header out-of-band and is never part of the command body; the server resolves and authorizes the seat scope. It works on both the raw rost command <id> path and the ergonomic wrappers (e.g. rost task list --seat <seat-id>).

Regular operation wrappers

Ergonomic subcommands for everyday operation. Each wrapper is sugar over the same server-side command shown in the command-id column — it builds the JSON body from flags and routes through the same execution path as rost command <id> --json. Add --json to any wrapper for stable, machine-parseable output; without it the wrapper prints a concise line that still includes the ids needed for follow-up calls. rost command <id> --json remains the completeness floor for fields a wrapper does not expose.

These ergonomic wrappers (including the rost agent group) require rost 0.2.0 or newer — run npx @rosthq/cli@latest … to get them. Older versions can still reach every command through the rost command <id> --json floor, since command execution is server-side.

The signed-in app exposes the same Skill command surface under Skills in the left sidebar. Use /skills to filter the tenant library, /skills/new to build canonical SKILL.md frontmatter with tool.catalog dependencies, /skills/import for bounded GitHub or upload imports, and each Skill detail page to review validation, publish, check Seat dependencies, and assign a published version. During /agents/new, agent_setup.get can return next_action: "choose_skills"; selected Skills are proposed immutable-version assignments and required Skill tools block sign-off/go-live until tool configuration is ready.

CommandCommand idsPurposeScopeSafe example
rost task list|accept|decline|complete|createtask.list, task.accept, task.decline, task.complete, task.createOperate a seat's task queue.Seatrost task list --json
rost status recordstatus.recordRecord measurable readings and goal status as a status event.Seatrost status record --measurable-id <id> --value 42
rost signal list|get|confirm|correctsignal.list, signal.get, signal.confirm_reading, signal.correct_readingRead and confirm Signal measurables.Seatrost signal list --json
rost goal list|create|update|status|reparent|dropgoal.list, goal.create, goal.update, goal.set_status, goal.reparent, goal.dropManage Cascade goals. Scope varies by verb: status is seat-scoped, list/create need a tenant token, and update/reparent/drop require tenant-admin.Seat to tenant-adminrost goal list --json
rost friction list|file|resolve|linkfriction.list, friction.file_issue, friction.resolve, friction.link_taskFile and resolve Friction issues.Seatrost friction list --status open --json
rost escalation list|get|resolve|rejectescalation.list, escalation.get, escalation.resolve, escalation.rejectWork the steward escalation queue.Stewardrost escalation list --json
rost error list|resolve|supersedeerror_log.list, error_log.resolve, error_log.supersedeList active, acknowledged, resolved, or superseded product error logs and let a human acknowledge, resolve, or supersede stale errors with evidence links.Tenantrost error list --resolved active --json; rost error resolve --error-log-id <id> --reason "Fixed in PR #123"
rost sync brief|compile|completesync.brief.get, sync.brief.compile, sync.run.completeCompile, read, and complete a weekly Sync.Tenantrost sync brief --json
rost runner list|status|diagnose|repair|work-orders|revokerunner.list, runner.status, runner.diagnose, runner.repair, work_order.list, runner.revokeInspect runners and work orders, diagnose offline runners, get repair guidance, and revoke a runner.Tenantrost runner diagnose --runner-id <id> --json
rost notification settings|test|errorsnotification.settings.get, notification.test, notification.list_errorsRead notification settings, send a test, and list failed deliveries with linked product error source, seat id, and run id when available.Tenantrost notification errors --limit 10 --json
rost integration list|readiness|status|testintegration.list, integration.readiness, integration.status, integration.testList connector metadata, read the setup-readiness checklist, read one connector's health, and run the provider-specific connection test without exposing credentials.Tenantrost integration readiness --provider google --json
rost system healthsystem.healthRead 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 tokenrost system health --json; rost system health --seat <id> --json
rost settings get|update|product-learning|renamesettings.get, settings.update, settings.product_learning.get, settings.product_learning.update, tenant.renameRead tenant settings, update budget caps, read or update product-learning participation, and rename the company. Budget and product-learning updates stop at human confirmation in non-interactive CLI/MCP sessions; company rename is owner-only and human-gated.Tenant / Tenant-admin for updatesrost settings product-learning get --json; rost settings product-learning update --mode disabled --json; rost settings rename --company "Acme Operations"
rost member invite|update|removemember.invite, member.update, member.removeManage tenant members.Tenantrost member invite --email ops@example.com --role member
rost agent templates|create|setup|tools|dry-run|go-live|status|run-now|fleet-digest|get-run|showagent_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_markdownRun the full agent setup and operation flow: list templates, create a draft from a template or guided custom answers (with --model and --effort), read or answer setup state, connect or decline tools, dry-run, go live, run on demand, capture the fleet-health digest, read one run's transcript/error diagnostics, and show a markdown readout. Human CLI dry-runs print the rehearsal transcript and, when present, the per-tool preview labels (Would run, Blocked, Escalated) before go-live. Create and go-live stop at human gates; the dry-run is ungated by human approval but requires a signed manifest first.Tenant and seatrost agent fleet-digest --json
rost tools listtool.catalogList the discoverable tool catalog the builder reads (id, scope tiers, credential requirement, access policy, and execution-boundary guidance).Tenantrost tools list --json
rost skills list|get|file|assigned|check-dependenciesskill.list, skill.get, skill.file.get, skill.assigned.list, skill.check_dependenciesDiscover reusable Skills, read descriptors and stored package files, list approved Seat assignments, and compare required/optional tool dependencies with a Seat's signed Charter manifest. Skills are instructions, not authority.Tenant-admin; seat-scoped reads for assigned Skillsrost skills list --json; rost skills file --slug invoice-review --path SKILL.md
rost skills catalog|enable|install|syncskill.catalog, skill.enable_catalog, skill.install_local, skill.sync_localDiscover entitled ROST catalog Skills, enable a catalog Skill into the company library with human confirmation, and install or sync approved Skill files locally from ROST APIs. Private catalog source URLs and GitHub tokens never go to local agents.Tenant-admin for catalog enablement; seat-scoped sync for assigned Skillsrost skills sync --seat-id <id> --client codex; rost skills install rost/ap-review --seat-id <id> --client codex
rost skills create|update-draft|import|publish|assign|revokeskill.create, skill.update_draft, skill.import_github, skill.import_upload, skill.publish, skill.assign_to_seat, skill.revoke_from_seatCreate or import bounded text Skill packages, publish reviewed immutable versions, propose Seat assignments, and revoke future use without deleting historical activations. Publish, revoke, and approved assignment stop at human confirmation; blocked required tools cannot be approved.Tenant-admin writes; seat agents read assignments and escalate requestsrost skills import github --url https://github.com/acme/skills/tree/main/ap --json; rost skills assign --seat-id <id> --slug invoice-review --json
rost model listmodel.catalogList guided model tiers with recommendations, token prices, cost bands, best-fit work, and model ids for --model.Tenantrost model list --json
rost compass showcompass.show_markdownRender the current Compass as a clean markdown card for review.Tenantrost compass show --markdown
rost charter showcharter.show_markdownRender a seat's Charter as a clean markdown card for review.Tenantrost charter show --seat-id <id> --markdown
rost deliverable list|get|create|attachdeliverable.list, deliverable.get, deliverable.create, deliverable.attachList, get, create, or attach agent deliverables for a seat. Deliverables are durable work outputs visible across UI, CLI, and MCP.Tenant (list/get), Seat (create/attach)rost deliverable list --seat-id <id> --json; rost deliverable create --title "Brief" --kind brief

Skills wrapper help:

rost skills list [--json]
rost skills catalog [--json]
rost skills get --slug <slug> [--json]
rost skills file --slug <slug> --path SKILL.md
rost skills enable rost/<slug> [--json]
rost skills install <slug-or-rost/slug> [--seat-id <id>] [--client claude-code|codex|cursor] [--version <n>] [--local-only] [--json]
rost skills sync --seat-id <id> [--client claude-code|codex|cursor] [--json]
rost skills assign --seat-id <id> (--skill <slug>|--slug <slug>|--skill-version-id <id>) [--approve] [--allow-blocked-proposal] [--json]
rost skills revoke (--assignment-id <id>|--seat-id <id> --skill <slug>) [--json]
rost skills publish (--slug <slug>|--skill-version-id <id>) [--allow-warnings] [--json]

rost skills install writes into the client Skills directory and records .rost-skill.json with skill_version_id, content_sha256, source, client, and installed_from: "rost_api". Set ROST_SKILL_INSTALL_ROOT to override the local root in CI or a sandbox. Use install for one Skill and sync as the default local-agent command because it installs every approved Skill assigned to the Seat and skips unchanged local copies by hash. Entitlement failures mean the tenant cannot access that ROST catalog tier yet; stale local copies are fixed by rerunning sync; private catalog access is always served by ROST APIs, not by giving the agent a private GitHub credential.

ROST-maintained catalog entries are seeded from first-party Skill packages with stable content hashes, application descriptors, and declared required or optional tool dependencies. Catalog seed validation is fail-closed: a package with parser warnings is not published. Enabling a catalog Skill copies the current immutable version into the company library; later catalog refreshes update the global catalog row but do not silently rewrite already-enabled tenant Skill versions.

MCP registration

CommandPurposeScopeSafe example
rost mcp install --client claude-code|codex|cursor --scope tenant-admin|seat [--seat-id <id>] [--expires-in <days>|--no-expiry] [--skip-permissions]Direct install syntax. --scope is required (seat is narrower — prefer it for day-to-day; tenant-admin can administer the whole company). --expires-in <days> (1..365) or --no-expiry sets the token TTL (default 90 days). --skip-permissions auto-approves the token-mint confirmation in a non-interactive session (see below).Tenantrost mcp install --client codex --scope tenant-admin --expires-in 30
rost mcp install --client claude-code|codex|cursor --rotate <old-token-id> (inherits the old token's scope; no --scope)Rotate syntax. Mints a replacement, inherits the old token's scope/seat (so do not pass --scope), prints the new registration block, and revokes the old token.Tenantrost mcp install --client codex --rotate <old-token-id>
rost mcp install ... --skip-permissions (or ROST_CLI_SKIP_PERMISSIONS=1 — auto-approves the token-mint confirmation in a non-interactive session)Skip-permissions opt-in. In a headless/agent session, auto-approve the human_required token-mint (and rotate revoke) confirmation inline instead of surfacing it for a human (a deliberate loosening). An interactive operator never needs it.Tenantrost mcp install --client codex --scope seat --seat-id <seat-id> --skip-permissions
rost mcp install --client claude-code --scope tenant-adminMint a tenant-admin MCP token and print a Claude Code registration command.Tenantrost mcp install --client claude-code --scope tenant-admin
rost mcp install --client codex --scope tenant-adminMint a tenant-admin MCP token and print Codex TOML.Tenantrost mcp install --client codex --scope tenant-admin
rost mcp install --client cursor --scope tenant-adminMint a tenant-admin MCP token and print Cursor JSON.Tenantrost mcp install --client cursor --scope tenant-admin
rost mcp install --client <client> --scope seat --seat-id <seat-id>Mint a token limited to one seat (the narrowest scope — prefer for day-to-day).Seatrost mcp install --client codex --scope seat --seat-id <seat-id>
rost --helpPrint top-level CLI help.Public helprost --help

MCP tool and resource catalog

This catalog is the canonical machine surface — the rost_* tools your MCP client calls. Three different things are called "tools" in ROST; do not confuse them:

1. The MCP tools below — the rost_* surface your client actually calls to read and act. 2. `rost tools list` / `tool.catalog` (MCP rost_list_tool_catalog) — the agent-configuration catalog the builder reads when staffing an agent. It is selectable per agent, but selecting a tool is not itself a call; live handlers execute later only behind the signed manifest, guard, credentials, and bindings. 3. `rost model list` / `model.catalog` (MCP rost_list_model_catalog) — the guided model-tier catalog the builder reads for recommendations, effort, token prices, cost bands, and model id selection. 4. The "Available tools guide" (in the sidebar) — covers tool *categories* and governance, not a callable surface. See the available-tools-guide.

Sections below: Command discovery (2) · Public reference (3) · Tenant-admin tools (grouped by domain) · Seat-scoped operating tools (9) · MCP operation resources (13).

Command discovery tools

These read-only tools are available to any valid MCP token (like the reference tools). Use them to discover a command's exact contract before calling it, and when a command fails, read the error's help field and run the command it names.

ToolPurposeScopeSafe example
rost_describe_commandReturn a command's input/output JSON Schema, scope, confirmation gate, help pointer, guides, a validated example, and related commands.Any valid MCP tokenQuery {"command_id":"compass.draft"}
rost_list_commandsList every callable command id with its title, scope, confirmation, and stages.Any valid MCP tokenCall with {}

The equivalent CLI verbs are rost command schema <id> and rost command list. The discoverable tool catalog is rost tools list (MCP rost_list_tool_catalog, tenant-scoped).

Public reference tools and resources

Tool or resourcePurposeScopeSafe example
rost_reference_searchSearch public reference guides.Any valid MCP tokenQuery {"query":"agent-reference-map","audience":"mcp"}
rost_reference_getRetrieve a public guide by slug.Any valid MCP tokenQuery {"slug":"agent-reference-map"}
rost://reference/{slug}Read a public reference guide as a resource.Any valid MCP tokenResource rost://reference/mcp-and-cli-guide

Tenant-admin tools

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 — 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.

Several rows here are seat-operating commands (task.create, the signal.*, goal.*, and friction.* families) surfaced because they are also tenant-admin-callable — 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.

ToolCommand idPurposeRequired scopeSafe example
rost_onboard_statusonboarding.statusInspect onboarding progress.TenantCall with {}
rost_advance_onboarding_steponboarding.advance_stepPersist the current onboarding step after validation.TenantCall with the next step after checking status.
rost_finish_onboardingonboarding.finishMark onboarding complete once requirements pass.TenantCall after graph, Compass, and Charters are ready.
rost_attach_reference_documentonboarding.attach_referenceAttach a company reference document (text/markdown) with title/kind/source so Compass and Charters can cite it.TenantCall with text, a title, a kind, and a source.
rost_upload_org_contextonboarding.upload_contextBack-compat alias of onboarding.attach_reference.TenantPrefer rost_attach_reference_document; same widened schema.
rost_create_onboarding_inviteonboarding.create_inviteInvite a team member during onboarding.TenantCall with a business email and role.
rost_save_tenant_anthropic_keytenant.anthropic_key.saveStore a tenant model key through the vault.TenantUse only with a real human-provided secret.
rost_create_seatseat.createCreate a Responsibility Graph seat.TenantCall with {"name":"Finance","seat_type":"human"}.
rost_rename_seatseat.renameRename a seat.Seat or tenant-adminCall with seat_id and name.
rost_reparent_seatseat.reparentMove a seat under a new parent.Seat or tenant-adminCall with seat_id and parent_seat_id.
rost_set_seat_typeseat.set_typeSet a seat type.Seat or tenant-adminCall with seat_id and seat_type.
rost_decommission_seatseat.decommissionRetire a seat: end occupancies, archive the Charter, revoke tokens/credentials, cancel schedules, tombstone event. No-orphan guarded.Seat or tenant-adminCall with {"seat_id":"<seat-id>"}; expect confirmation.
rost_draft_chartercharter.draftCreate or fetch a draft Charter.Seat or tenant-adminCall with {"seat_id":"<seat-id>"}.
rost_draft_all_charterscharter.draft_allDraft Charters for every eligible seat.TenantCall after initial graph creation.
rost_update_charter_draftcharter.update_draftUpdate a draft Charter document.Seat or tenant-adminCall with charter_version_id and the full doc.
rost_set_chartercharter.setCreate or replace a seat's draft Charter from a full document in one call.Seat or tenant-adminCall with seat_id and doc; approve activates it (human gate).
rost_approve_chartercharter.approveApprove a draft Charter as a human owner.Seat or tenant-adminExpect confirmation when authority changes.
rost_skip_charter_draftcharter.skipMark a Charter draft as skipped.Seat or tenant-adminCall only when a human defers the seat.
rost_apply_charter_seat_type_recommendationcharter.apply_seat_type_recommendationApply a Charter's seat-type recommendation.Seat or tenant-adminCall after reviewing the draft.
rost_sign_charter_manifestcharter.sign_manifestRequest human confirmation for a permission manifest.Seat or tenant-adminUse after tool permissions are reviewed.
rost_approve_pending_confirmationconfirmation.approveApprove a pending confirmation.TenantCall with {"confirmation_id":"<confirmation-id>"}.
rost_reject_pending_confirmationconfirmation.rejectReject a pending confirmation.TenantCall with {"confirmation_id":"<confirmation-id>"}.
rost_draft_compasscompass.draftCreate a Compass draft.TenantCall with a concise Compass document.
rost_update_compass_draftcompass.update_draftReplace a Compass draft document.TenantCall with the compass_version_id from compass.draft as draft_id and the updated document.
rost_approve_compass_versioncompass.approve_versionActivate a Compass version by supersession.TenantCall after human review.
rost_reject_compass_draftcompass.reject_draftReject and remove a Compass draft.TenantCall when the draft should not proceed.
rost_answer_compass_gapcompass.answer_gapRecord a human answer for a Compass gap.TenantCall with gap_id and answer text.
rost_set_compasscompass.setCompatibility helper for setting Compass over MCP.TenantCall with the approved Compass shape.
rost_assign_user_to_seatstaffing.assign_userAssign a human user occupancy to a seat.Seat or tenant-adminCall with seat_id and user_id.
rost_assign_dry_run_agent_to_seatstaffing.assign_agent_dry_runAssign an agent occupancy in dry-run mode.Seat or tenant-adminCall only after Steward chain is clear.
rost_staff_seatstaffing.assignCompatibility helper for human, agent, or hybrid staffing.Seat or tenant-adminCall with seat_id and occupant.
rost_store_credentialcredential.ingressStore a secret through the vault and persist only a vault reference.Seat or tenant-adminUse vault-backed values only.
rost_go_liveagent.go_livePromote a dry-run agent seat to live.Seat or tenant-adminCall after human approval.
rost_create_mcp_tokenmcp_token.createMint a tenant-admin or seat-scoped MCP token.TenantPrefer rost mcp install for users.
rost_revoke_mcp_tokenmcp_token.revokeRevoke an MCP token immediately.TenantCall with token_id.
rost_get_responsibility_graphgraph.getRead the Responsibility Graph: seats, edges, root, occupants, status rollups.TenantCall with {} before mutating or routing work.
rost_get_seat_detailseat.getRead a seat's Charter ids, steward chain, occupancy, agent status, token metadata, and open-work counts.Seat or tenant-adminCall with {"seat_id":"<seat-id>"}.
rost_list_charterscharter.listList Charter versions, optionally by seat or status.TenantCall with {} or {"seat_id":"<seat-id>"}.
rost_get_chartercharter.getRead a Charter with supersession history and dry-run status.TenantCall with {"charter_version_id":"<id>"}.
rost_get_current_compasscompass.get_currentRead the active and draft Compass versions and source documents.TenantCall with {}.
rost_list_compass_gapscompass.list_gapsList unanswered and answered Compass context gaps.TenantCall with {} before answering gaps.
rost_get_agent_statusagent.statusRead agent lane, live state, steward chain, dry-run result, Runner availability.Seat or tenant-adminCall with {"seat_id":"<seat-id>"}.
rost_list_agent_fleetagent.list_fleetRead every staffed agent seat at once: lane, live state, last real turn, 24h/7d real turns, measurable status, escalations, and 7-day spend.TenantCall with {}; counts use the same seat-run association as agent.list_runs, with sandbox dry runs excluded from real turns.
rost_get_dogfood_fleet_health_digestagent.fleet_digestCapture the daily dogfood fleet-health digest: live/idle state, 24h/7d turns, spend, recent failed runs, unresolved errors, failed notifications, and next actions.TenantCall with {}; optional window_hours bounds recent failed-run evidence, while error_limit caps linked evidence per seat.
rost_system_healthsystem.healthRead 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 tokenCall with {}; optional seat_id narrows inside the caller's server-derived scope.
rost_run_agent_nowagent.run_nowQueue an immediate run for a live staffed agent without changing its saved schedule; cloud lane dispatches to the executor and runner lane queues for the paired runner.TenantCall with {"seat_id":"<seat-id>"}.
rost_list_agent_runsagent.list_runsRead a seat's agent run history (status, lane, model, cost, per-run Skill activation, tool-call, and guard-held counts) plus the seat's run/tool-call rollup including held-action count.Seat or tenant-adminCall with {"seat_id":"<seat-id>"}; pass limit for a deeper window.
rost_get_agent_run_diagnosticsagent.get_runRead one run's diagnostic record: transcript reference, token/cost usage, outcome, linked product-visible run errors, and loaded Skill activation file metadata. File hashes/sizes identify the immutable source package, while model prompt text may be bounded or truncated.Seat or tenant-adminCall with {"seat_id":"<seat-id>","run_id":"<run-id>"}.
rost_list_agent_tool_callsagent.list_tool_callsRead 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-adminCall with {"seat_id":"<seat-id>"}; pass held_only: true for only guard-held calls.
rost_list_agent_deliverablesdeliverable.listList durable agent deliverables for a seat, including explicit outputs and successful-run summaries.Seat or tenant-adminCall with {"seat_id":"<seat-id>"}.
rost_get_agent_deliverabledeliverable.getRead one durable agent deliverable by id for a seat.Seat or tenant-adminCall with {"seat_id":"<seat-id>","deliverable_id":"<id>"}.
rost_create_agent_deliverabledeliverable.createCreate a scrubbed durable work output for the acting seat.SeatCall with title, kind, summary/content, and optional safe links.
rost_attach_agent_deliverabledeliverable.attachAttach a scrubbed deliverable to a source run, task, or work order after server-side seat validation.SeatCall with title, kind, and the source ids that belong to the acting seat.
rost_list_agent_templatesagent_template.listList stock agent templates and metadata.TenantCall with {}.
rost_create_agent_from_templateagent.create_from_templateCreate a draft stock agent and draft Charter from a template (draft-only; occupancy needs a human steward).TenantCall with seat_id and template_slug; expect human confirmation.
rost_start_agent_setupagent_setup.startStart an agent setup draft for template, custom, or existing mode.TenantCall with mode and seat placement.
rost_get_agent_setupagent_setup.getRead agent setup state, blockers, and next action.Seat or tenant-adminCall with {"setup_id":"<id>"}.
rost_update_agent_setupagent_setup.updateUpdate parent, steward, lane, schedule, or answers on a setup draft.TenantCall with setup_id and the fields to change.
rost_update_agent_scheduleagent.update_scheduleUpdate a draft or live agent's scheduled execution.TenantCall with agent_id and schedule_cron; expect human confirmation.
rost_decommission_agentagent.decommissionRetire an agent occupancy safely (no-orphan guarded).TenantCall with agent_id; expect human confirmation.
rost_pause_agentagent.pausePause a live agent so it stops scheduled and on-demand runs; reversible.TenantCall with seat_id; expect human confirmation.
rost_resume_agentagent.resumeResume a paused agent back to live (no-orphan guarded).TenantCall with seat_id; expect human confirmation.
rost_create_custom_agentagent.create_customCreate a draft custom agent shell and draft Charter seed from operational answers.TenantCall with seat_id and operational answers; expect human confirmation.
rost_configure_agent_toolsagent.configure_toolsConnect or decline proposed tools and stage credential-ingress requests (vault refs only).Seat or tenant-adminNever send raw secrets; expect a credential confirmation.
rost_run_agent_dry_runagent.run_dry_runRun the sandbox dry run for a draft agent; durable and idempotent per Charter version.Seat or tenant-adminCall after the manifest is signed; ungated by human approval, but precondition-gated on a signed manifest.
rost_list_mcp_tokensmcp_token.listList MCP token metadata (never token material).TenantCall with {} or {"include_revoked":true}.
rost_list_runnersrunner.listList local runners and their online/offline/revoked state.TenantCall with {}.
rost_runner_statusrunner.statusRead a single runner's capability and state.TenantCall with runner_id.
rost_diagnose_runnerrunner.diagnoseReturn runner health, capabilities, and repair guidance without secrets.TenantCall with runner_id; actionable repair guidance exposes restart, re-pair, or missing CLI steps.
rost_runner_repair_guidancerunner.repairReturn focused repair steps for a runner: restart, re-pair, revoke stale, or install missing CLI runtime.TenantCall with runner_id and optional issue (restart, re_pair, revoke_stale, missing_cli_runtime).
rost_start_runner_pairingrunner.pairing.startOpen a runner pairing session and return the human pairing code.Tenant-adminCall with name and platform; owner/admin only.
rost_revoke_runnerrunner.revokeRevoke a runner so it can no longer authenticate.TenantCall with runner_id; expect human confirmation.
rost_list_work_orderswork_order.listList runner/cloud work orders for the tenant.TenantCall with optional status, agent_id, or runner_id.
rost_enqueue_work_orderwork_order.enqueueQueue a work order for a live scheduled agent.TenantCall with agent_id.
rost_cancel_work_orderwork_order.cancelCancel a queued, claimed, or running work order.TenantCall with work_order_id; expect human confirmation.
rost_get_notification_settingsnotification.settings.getRead tenant notification preferences.TenantCall with {}.
rost_update_notification_settingsnotification.settings.updateUpdate tenant notification preferences.TenantCall with the fields to change.
rost_send_test_notificationnotification.testEmit an in-app test notification to the acting human.TenantCall with {}.
rost_list_notification_errorsnotification.list_errorsList recent failed notification deliveries with linked error_log_id, source, seat id, and run id when available.TenantCall with optional limit; source=run rows can be followed with agent.get_run.
rost_list_error_logserror_log.listList product error logs by seat, source, severity, and active/resolved state.TenantCall with {"resolved":"active"} before acknowledging stale failures.
rost_resolve_error_logerror_log.resolveAcknowledge or resolve an error log with a required human reason and optional task, issue, or PR link.TenantCall with error_log_id, reason, and disposition acknowledged or resolved.
rost_supersede_error_logerror_log.supersedeMark an older error log as superseded by a newer in-tenant error log.TenantCall with error_log_id, new_error_log_id, and reason.
rost_list_integrationsintegration.listList connected integration metadata and latest health state.TenantCall with {} or {"provider":"google"}; no secrets or vault refs are returned.
rost_check_integration_readinessintegration.readinessReturn the connector setup checklist: OAuth env/callback, tenant connection, scopes, latest test state, external verification/CASA, handler availability, and DER-coded next actions.TenantCall with {"provider":"google"}; metadata only, no secrets or vault refs.
rost_get_integration_statusintegration.statusRead one integration's metadata by provider or integration id.TenantCall with {"provider":"google"} or {"integration_id":"<id>"}.
rost_test_integration_connectionintegration.testRun the provider-specific connection test and update integration health.TenantCall with {"provider":"google"}; result is bounded metadata only.
rost_invite_membermember.inviteCreate a pending tenant invite for a human teammate.TenantCall with email and role.
rost_update_member_rolemember.updateChange a tenant member's role.TenantCall with member_id and role; expect human confirmation.
rost_remove_membermember.removeRemove a tenant member.TenantCall with member_id; blocked if it would orphan an agent steward chain.
rost_get_tenant_settingssettings.getRead tenant operating settings and integration status.TenantCall with {}; metadata only.
rost_update_tenant_settingssettings.updateUpdate tenant AI budget caps.TenantCall with soft_cap_usd or hard_cap_usd; expect human confirmation.
rost_rename_companytenant.renameRename the current company.Tenant-adminCall with company_name; expect human confirmation.
rost_get_sync_brief_scopesettings.sync_brief_scope.getRead the tenant's Sync Brief scope (company_wide or per_cluster).TenantCall with {}.
rost_update_sync_brief_scopesettings.sync_brief_scope.updateSet the tenant's Sync Brief scope (company_wide or per_cluster).Tenant-adminOwner-only; call with {"sync_brief_scope":"company_wide"} or {"sync_brief_scope":"per_cluster"}.
rost_get_product_learning_policysettings.product_learning.getRead whether product/page/recommendation analytics are allowed.TenantCall with {}; audit/security logs are always enabled.
rost_update_product_learning_policysettings.product_learning.updateSet product-learning mode.Tenant-adminHuman-gated; call with {"mode":"enabled"}, {"mode":"disabled"}, or {"mode":"enterprise_contract"}.
rost_list_signalssignal.listList measurables with their latest reading and on/off-track state.Seat or tenant-adminCall with {} to find measurable ids.
rost_get_signalsignal.getRead a measurable with its full reading history.Seat or tenant-adminCall with {"measurable_id":"<id>"}.
rost_confirm_signal_readingsignal.confirm_readingConfirm an unconfirmed reading as human-verified.Seat or tenant-adminHumans confirm; call with {"reading_id":"<id>"}.
rost_correct_signal_readingsignal.correct_readingOverwrite a reading with a human-confirmed value.Seat or tenant-adminManual correction; expect confirmation.
rost_add_a_measurablemeasurable.createAdd a measurable a seat owns (name, unit, direction, target, cadence).Seat or tenant-adminCall with {"seat_id":"<id>","name":"...","unit":"...","direction":"up_good","target":0,"cadence":"weekly"}.
rost_list_cascade_goalsgoal.listList Cascade goals, optionally by cycle or seat.Seat or tenant-adminCall with {} or {"cycle_id":"<id>"}.
rost_create_cascade_goalgoal.createCreate a cycle goal under an objective.TenantCall with cycle, seat, parent, title, definition of done.
rost_update_cascade_goalgoal.updateUpdate a goal's title or definition of done.TenantCall with goal_id and the changed fields.
rost_set_cascade_goal_statusgoal.set_statusSet a goal's status (on/off/done).Seat or tenant-adminSeats may set only their own goals.
rost_reparent_cascade_goalgoal.reparentMove a goal under a new parent.TenantAuthority change; expect confirmation.
rost_drop_cascade_goalgoal.dropDrop (retire) a goal, retained for audit.TenantExpect confirmation.
rost_list_friction_issuesfriction.listList Friction issues ranked by impact and severity.Seat or tenant-adminCall with {} or {"status":"active"}.
rost_update_friction_issue_statusfriction.update_statusMove a non-terminal issue between open and diagnosing.Seat or tenant-adminCall with issue_id and status.
rost_resolve_friction_issuefriction.resolveResolve an issue with a root cause and remediation task.TenantHuman decision; expect confirmation.
rost_link_task_to_friction_issuefriction.link_taskAttach an existing task as an issue's action task.Seat or tenant-adminCall with issue_id and task_id.
rost_create_tasktask.createCreate a task (a commitment between seats).Seat or tenant-adminnone — created directly; the owning seat accepts or declines.
rost_compile_sync_briefsync.brief.compileCompile the weekly Sync Brief (idempotent per period).TenantCall with {}.
rost_get_sync_briefsync.brief.getRead the latest or a specific Sync Brief and agenda.Seat or tenant-adminCall with {} or {"sync_brief_id":"<id>"}.
rost_start_sync_runsync.run.startEnsure a Sync Brief exists so the meeting can begin.TenantCall with {}.
rost_complete_sync_runsync.run.completeRecord that the Sync meeting completed (idempotent).TenantCall with {"sync_brief_id":"<id>"}.
rost_assign_sync_follow_upsync.item.assignCreate a follow-up task from a Sync agenda item.TenantCall with brief, owner seat, title, description.
rost_list_escalationsescalation.listList Steward queue escalations (own steward chain for humans, own seat for agents).Seat or tenant-adminCall with {} or {"include_decided":true}.
rost_get_escalationescalation.getRead one escalation's evidence, recommendation, and decision state.Seat or tenant-adminCall with {"id":"<escalation-id>"}. Resolve/reject are human-only and not exposed over MCP.
rost_show_compass_as_markdowncompass.show_markdownRender the current Compass and its open gaps as a clean markdown card for review.TenantCall with {}.
rost_show_charter_as_markdowncharter.show_markdownRender a seat's active or latest Charter as a clean markdown card for review.TenantCall with {"seat_id":"<seat-id>"}.
rost_show_agent_setup_as_markdownagent.show_markdownRender a seat's agent setup, model, steward, tools, and Charter as a clean markdown card for review.TenantCall with {"seat_id":"<seat-id>"}.
rost_list_tool_catalogtool.catalogList the discoverable tool catalog the agent builder reads — id, prescriptive description, scope tiers, credential requirement, access policy, and execution-boundary guidance.TenantCall with {} or {"provider":"google"}.
rost_list_skillsskill.listList tenant Skills with application descriptors, dependency metadata, source status, latest version, and assigned Seat count. Seat-scoped reads are available through rost://skills.Tenant-adminCall with {} or {"query":"invoice"}.
rost_list_rost_skill_catalogskill.catalogList entitled ROST catalog Skills. Private catalog source URLs and credentials stay server-side.Tenant-adminCall with {}; use {"include_unentitled":true} only to inspect tier availability.
rost_enable_rost_catalog_skillskill.enable_catalogEnable an entitled ROST catalog Skill into the company library with human confirmation.Tenant-adminCall with {"slug":"rost/ap-review"}; non-interactive callers receive a confirmation handoff.
rost_install_skill_locallyskill.install_localResolve company or entitled ROST catalog Skill files from ROST APIs for a local client install. It returns package files and metadata, not private GitHub URLs.Tenant-adminCall with {"slug":"invoice-review","client":"codex"}; rost/<slug> enablement may require confirmation.
rost_sync_assigned_skills_locallyskill.sync_localResolve every approved Skill assigned to a Seat plus revoked local-copy markers for a local client sync.Tenant-adminCall with {"seat_id":"<seat-id>","client":"codex"}; local clients remove revoked copies.
rost_get_skillskill.getRead one Skill descriptor and latest stored version metadata. Seat-scoped reads are available through rost://skills/{slug}.Tenant-adminCall with {"slug":"invoice-review"}.
rost_get_skill_fileskill.file.getRead stored Skill package file content by slug and package path; paths resolve only inside the stored package payload. Seat-scoped reads are available through rost://skills/{slug}/files/{path}.Tenant-adminCall with {"slug":"invoice-review","path":"SKILL.md"}.
rost_list_assigned_skillsskill.assigned.listList approved Skill assignments for a Seat, including immutable version, dependency status, rationale, and approval time. Seat-scoped reads are available through rost://seat/{id}/skills.Tenant-adminCall with {"seat_id":"<seat-id>"}.
rost_check_skill_dependenciesskill.check_dependenciesCompare a Skill version's required and optional tools with a Seat's active or draft Charter permission manifest. Returns ready/blocked/warning and suggested agent.configure_tools input; it never grants permissions.Tenant-adminCall with {"seat_id":"<seat-id>","slug":"invoice-review"}.
rost_create_skillskill.createCreate a tenant Skill draft or pending-review Skill from a bounded text package.Tenant-adminCall with {"package":{"files":[{"path":"SKILL.md","content":"..."}]},"status":"draft"}.
rost_update_skill_draftskill.update_draftReplace or create the current unpublished draft version for an existing Skill.Tenant-adminCall with {"slug":"invoice-review","package":{"files":[{"path":"SKILL.md","content":"..."}]}}.
rost_import_github_skillskill.import_githubImport a public GitHub Skill package into pending review or draft after validation.Tenant-adminCall with {"url":"https://github.com/acme/skills/tree/main/ap","status":"pending_review"}.
rost_import_uploaded_skillskill.import_uploadImport a bounded structured text package. MCP does not accept direct binary uploads in this release.Tenant-adminCall with {"package":{"files":[{"path":"SKILL.md","content":"..."}]},"status":"draft"}.
rost_publish_skillskill.publishHuman-gated publication of an unpublished Skill version. Published versions are immutable and assignable.Tenant-adminCall with {"slug":"invoice-review"}; non-interactive callers receive a confirmation handoff.
rost_assign_skill_to_seatskill.assign_to_seatPropose or human-approve a published Skill version for a Seat after dependency checks. Missing required tools block approval; optional tools warn.Tenant-adminCall with {"seat_id":"<seat-id>","slug":"invoice-review","status":"proposed","rationale":"Use for AP exception work."}.
rost_revoke_skill_from_seatskill.revoke_from_seatHuman-gated revocation that stops future Skill use without deleting historical activations.Tenant-adminCall with {"assignment_id":"<assignment-id>"}; non-interactive callers receive a confirmation handoff.
rost_list_model_catalogmodel.catalogList guided model tiers — recommendations, token prices, cost bands, best-fit work, and model ids for --model.TenantCall with {}.

Seat-scoped operating tools

Seat-scoped MCP tokens expose the operating protocol below. The server still checks the seat's permission manifest, Charter, task ownership, and tenant boundary. These are the seat-token equivalents of the CLI rost task / rost signal / rost friction wrappers and the tenant-admin task tools above: rost_get_tasks, rost task list, and task.list are the same operation reached three different ways. The command-id column makes the mapping explicit.

ToolCommand idPurposeScopeSafe example
rost_get_context(read) seat-context bundleRetrieve the seat's Charter, Compass, goals, tasks, issues, and protocol instructions. Equivalent to reading rost://seat/{id}/context.SeatCall first with {}.
rost_get_taskstask.listList open tasks visible to the seat. Each task's due_on is an ISO date string (YYYY-MM-DD) or null.SeatCall with {}.
rost_accept_tasktask.acceptAccept a task owned by the seat.SeatCall with {"task_id":"<task-id>"}.
rost_decline_tasktask.declineDecline a task with a reason.SeatCall with task_id and reason.
rost_report_statusstatus.recordWrite a status event.SeatCall with a concise status payload.
rost_complete_tasktask.completeComplete a task and record evidence.SeatCall with task_id and evidence.
rost_escalateescalation.raiseEscalate approval-scope or must-escalate work.SeatCall with severity, reason, and requested decision.
rost_file_issuefriction.file_issueFile a Friction issue.SeatCall with title, severity, and impact.
rost_log_workwork.logRecord work performed by the seat.SeatCall with summary and evidence.

MCP operation resources

These read-only resources bundle the facts the UI shows so an agent can avoid guessing ids. Each enforces tenant, role, and seat scope server-side and never returns secrets, tokens, local file paths, or cross-tenant ids. Tenant-wide resources require a tenant-admin token; the seat-context resource is readable by the owning seat token (or a tenant-admin for any seat in the tenant); the operations map is public to any valid token.

ResourcePurposeScopeSafe example
rost://tenant/statusCurrent user, tenant, role/scope, and onboarding status.Tenant-adminRead before driving tenant setup.
rost://graphResponsibility Graph: seats, edges, root, occupants, status rollups.Tenant-adminRead before routing or reparenting work.
rost://seat/{id}/contextA seat's Compass, Charter, goals, measurables, open tasks, open issues, and protocol.Seat (own seat) or tenant-admin (any seat)Read rost://seat/<seat-id>/context for the acting seat.
rost://compass/currentActive and draft Compass versions plus source documents.Tenant-adminRead before drafting Compass changes.
rost://sync/latestThe most recent compiled Sync Brief and its agenda.Tenant-adminRead before running the weekly Sync.
rost://skillsTenant Skills library for tenant-admin tokens; assigned published Skills for seat tokens.Tenant-admin or seatRead before creating, assigning, or loading Skill instructions.
rost://skills/{slug}One Skill descriptor and latest stored version metadata.Tenant-admin or assigned seatRead rost://skills/<slug> before loading the full file.
rost://skills/{slug}/files/{path}Stored Skill package file content by package path; never server filesystem paths.Tenant-admin or assigned seatRead rost://skills/<slug>/files/SKILL.md.
rost://agents/templatesStock agent templates: responsibilities, default tools, safety boundaries, and dry-run rehearsal.Tenant-adminRead before creating an agent from a template.
rost://agent-setup/{id}A draft agent setup's mode, parent, steward, lane, schedule, tool decisions, dry-run, blockers, and next action.Tenant-adminRead rost://agent-setup/<setup-id> to resume a draft.
rost://seat/{id}/agent-statusA seat's agent occupancy, lane, schedule, live state, steward chain, and dry-run result.Seat (own seat) or tenant-admin (any seat)Read rost://seat/<seat-id>/agent-status for the acting seat.
rost://seat/{id}/skillsApproved Skill assignments for a Seat, including immutable version and dependency status.Seat (own seat) or tenant-admin (any seat)Read rost://seat/<seat-id>/skills before a run loads Skills.
rost://operations/reference-mapMachine-facing map of which guide to read before each workflow.Any valid MCP tokenRead first when planning a CLI/MCP workflow.

Troubleshooting

These rows are quick, at-a-glance triage. For deeper auth, tenant, scope, confirmation, and MCP-token errors — including structured error-code interpretation — see the troubleshooting-guide.

  • Not logged in: run rost login, then retry rost whoami.
  • Session not persisting (keychain issue — "not logged in" right after a successful login): clear and re-run rost login --device; the session is stored in the macOS Keychain by default. On a non-macOS or no-keychain host the CLI errors unless you opt into the plain-file token store — see Headless Linux, CI, and machines with no keychain.
  • Wrong tenant: run rost tenants, then rost use <tenant-slug-or-id>.
  • Missing Node: install Node 22 or newer, then rerun npx @rosthq/cli@latest --help.
  • Node present but too old (npx launches but the CLI rejects it): run node --version; if it is below v22, upgrade Node.
  • Stale npx cache: rerun with npx @rosthq/cli@latest --help or clear the npm cache.
  • MCP connection not working after registering: call rost_list_commands with {} (any token); with a tenant-admin token read rost://tenant/status, with a seat-scoped token call rost_get_context with {} (a seat token cannot read rost://tenant/status). A 401 / not-authorized shape means the token did not register — re-run mcp install.
  • Revoked, expired, or invalid MCP token: run rost mcp install --client <client> --scope <tenant-admin|seat> again to mint and register a fresh one (a direct install requires --scope; or rotate the old token in place with --rotate <old-token-id>, which inherits its scope). Tokens minted by mcp install default to a 90-day expiry — check expires_in_days in rost command mcp_token.list; mint with --expires-in <days> or --no-expiry to change it.
  • Confirmation required: a human approves from the approveVia web link or runs the rost command confirmation.approve --json ... command shown in the CLI error output (an agent never approves its own request — see the confirmations-guide).
  • Command denied by scope or manifest: switch to a tenant-admin token for setup, or ask a human Steward to update the seat Charter and permission manifest.
  • Inference budget hard cap reached (a run stops with a budget precondition error): raise the tenant hard cap with rost settings update --hard-cap-usd <amount> (command settings.update), then retry. A new company starts at a $0 hard cap, so managed-inference runs are blocked until it is set. The sandbox dry run is free and is never blocked by the cap, so you can charter, dry-run, and go live before setting a budget.
  • Need command guidance: run rost docs, rost reference search "onboarding", or rost reference get agent-reference-map.
  • Need MCP guidance: call rost_reference_get with {"slug":"agent-reference-map"}.