CLI and MCP installation guide
Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.
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 --deviceprints 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_idand anapproveViaURL for a human and stops. When a logged-in human runsrost command <id>from an interactive TTY, the official CLI completes that returned confirmation inline by callingconfirmation.approveand printing the approved command output. (rost mcp installfollows the same interactive rule for token minting, with--skip-permissions/ROST_CLI_SKIP_PERMISSIONS=1as 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/deviceand/mcpURLs in its output; copy them from the terminal rather than guessing the host.<tenant-slug-or-id>— a tenant identifier fromrost tenants.<seat-id>— a seat id fromrost command seat.createoutput orrost_get_responsibility_graph/rost command graph.get.<token-id>— an MCP token id printed bymcp install, or discoverable later viarost 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, sorost onboard statusand 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 loginOr install it globally:
npm i -g @rosthq/cli
rost loginThe 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 --versionIf 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 --deviceHow 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 --deviceif 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 --deviceFor 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 codexMCP 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-adminCodex (tenant-admin):
npx @rosthq/cli@latest mcp install --client codex --scope tenant-adminCursor (tenant-admin):
npx @rosthq/cli@latest mcp install --client cursor --scope tenant-adminThe 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 exactrost command confirmation.approve --json '{"confirmation_id":"<id>"}'command, and theapproveViaURL 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-runmcp installafter 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-permissionsbelow.) - Opting into auto-approval in a headless session. Pass
--skip-permissionsonmcp install, or setROST_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 addcommand — 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 logoutdoes 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_commandswith{}. - Tenant-admin token: read the resource
rost://tenant/status. - Seat-scoped token: call
rost_get_contextwith{}(or readrost://seat/<seat-id>/context). A seat token cannot readrost://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-inand 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
| Command | Purpose | Scope | Safe example |
|---|---|---|---|
rost login | Open browser login and store the CLI session. | User session | rost login |
rost 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 — no browser session needed on the agent's machine. | User session | rost login --device |
rost logout | Clear the local CLI session. | Local session | rost 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 whoami | Show the authenticated user, accessible tenant roles, and the active tenant (current_tenant_id). | User | rost whoami |
rost tenants | List tenants the user can access; the active one is marked current. | User | rost 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. | User | rost use acme-ops |
Reference and docs
| Command | Purpose | Scope | Safe example |
|---|---|---|---|
rost docs | Print the agent-facing how-to summary. | Public reference | rost docs |
rost help [group] | Print top-level usage, or one operation group's usage; rost <group> --help works too. | Public reference | rost 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 reference | rost reference search "onboarding" --audience cli |
rost reference list | List public reference guides. | Public reference | rost reference list --audience cli |
rost reference search <query> | Search public guides. | Public reference | rost reference search "MCP install" --audience mcp |
rost reference get <slug> | Print one public guide. | Public reference | rost 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
| Command | Purpose | Scope | Safe example |
|---|---|---|---|
rost onboard status | Return onboarding progress, graph summary, and next actions. | Tenant | rost onboard status |
rost onboard run | Print the deterministic agent onboarding prompt. | Public reference | rost 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 tenant | rost init --client codex |
rost init --tenant <tenant> --client <client> | Select a tenant before MCP install. | User plus tenant | rost init --tenant acme-ops --client cursor |
Direct command execution
| Command | Purpose | Scope | Safe 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-defined | rost 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. | User | rost command schema compass.draft |
rost command list [--json] | List every callable command id with its scope and confirmation gate. | User | rost command list |
rost command onboarding.attach_reference --json ... | Attach a company reference document (reference-only). | Tenant | rost 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. | Tenant | rost command seat.create --json '{"name":"Finance","seat_type":"human"}' |
rost command charter.draft --json ... | Create or fetch a draft Charter. | Seat or tenant-admin | rost command charter.draft --json '{"seat_id":"<seat-id>"}' |
rost command confirmation.approve --json ... | Approve a pending confirmation as a human. | Tenant | rost 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.
| Command | Command ids | Purpose | Scope | Safe example |
|---|---|---|---|---|
rost task list|accept|decline|complete|create | task.list, task.accept, task.decline, task.complete, task.create | Operate a seat's task queue. | Seat | rost task list --json |
rost status record | status.record | Record measurable readings and goal status as a status event. | Seat | rost status record --measurable-id <id> --value 42 |
rost signal list|get|confirm|correct | signal.list, signal.get, signal.confirm_reading, signal.correct_reading | Read and confirm Signal measurables. | Seat | rost signal list --json |
rost goal list|create|update|status|reparent|drop | goal.list, goal.create, goal.update, goal.set_status, goal.reparent, goal.drop | Manage 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-admin | rost goal list --json |
rost friction list|file|resolve|link | friction.list, friction.file_issue, friction.resolve, friction.link_task | File and resolve Friction issues. | Seat | rost friction list --status open --json |
rost escalation list|get|resolve|reject | escalation.list, escalation.get, escalation.resolve, escalation.reject | Work the steward escalation queue. | Steward | rost escalation list --json |
rost error list|resolve|supersede | error_log.list, error_log.resolve, error_log.supersede | List active, acknowledged, resolved, or superseded product error logs and let a human acknowledge, resolve, or supersede stale errors with evidence links. | Tenant | rost error list --resolved active --json; rost error resolve --error-log-id <id> --reason "Fixed in PR #123" |
rost sync brief|compile|complete | sync.brief.get, sync.brief.compile, sync.run.complete | Compile, read, and complete a weekly Sync. | Tenant | rost sync brief --json |
rost runner list|status|diagnose|repair|work-orders|revoke | runner.list, runner.status, runner.diagnose, runner.repair, work_order.list, runner.revoke | Inspect runners and work orders, diagnose offline runners, get repair guidance, and revoke a runner. | Tenant | rost runner diagnose --runner-id <id> --json |
rost notification settings|test|errors | notification.settings.get, notification.test, notification.list_errors | Read notification settings, send a test, and list failed deliveries with linked product error source, seat id, and run id when available. | Tenant | rost notification errors --limit 10 --json |
rost integration list|readiness|status|test | integration.list, integration.readiness, integration.status, integration.test | List connector metadata, read the setup-readiness checklist, read one connector's health, and run the provider-specific connection test without exposing credentials. | Tenant | rost integration readiness --provider google --json |
rost system health | system.health | Read the scoped system-health snapshot across agent runs, unresolved errors, Signals, Cascade setup, work loop, integrations, runners, notifications, and Sync Brief readiness. | Tenant, member, or seat token | rost system health --json; rost system health --seat <id> --json |
rost settings get|update|product-learning|rename | settings.get, settings.update, settings.product_learning.get, settings.product_learning.update, tenant.rename | Read 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 updates | rost settings product-learning get --json; rost settings product-learning update --mode disabled --json; rost settings rename --company "Acme Operations" |
rost member invite|update|remove | member.invite, member.update, member.remove | Manage tenant members. | Tenant | rost 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|show | agent_template.list, agent.create_from_template, agent.create_custom, agent_setup.get, agent_setup.update, agent.configure_tools, agent.run_dry_run, agent.go_live, agent.status, agent.run_now, agent.fleet_digest, agent.get_run, agent.show_markdown | Run the full agent setup and operation flow: list templates, create a draft from a template or guided custom answers (with --model and --effort), read or answer setup state, connect or decline tools, dry-run, go live, run on demand, capture the fleet-health digest, read one run's transcript/error diagnostics, and show a markdown readout. Human CLI dry-runs print the rehearsal transcript and, when present, the per-tool preview labels (Would run, Blocked, Escalated) before go-live. Create and go-live stop at human gates; the dry-run is ungated by human approval but requires a signed manifest first. | Tenant and seat | rost agent fleet-digest --json |
rost tools list | tool.catalog | List the discoverable tool catalog the builder reads (id, scope tiers, credential requirement, access policy, and execution-boundary guidance). | Tenant | rost tools list --json |
rost skills list|get|file|assigned|check-dependencies | skill.list, skill.get, skill.file.get, skill.assigned.list, skill.check_dependencies | Discover reusable Skills, read descriptors and stored package files, list approved Seat assignments, and compare required/optional tool dependencies with a Seat's signed Charter manifest. Skills are instructions, not authority. | Tenant-admin; seat-scoped reads for assigned Skills | rost skills list --json; rost skills file --slug invoice-review --path SKILL.md |
rost skills catalog|enable|install|sync | skill.catalog, skill.enable_catalog, skill.install_local, skill.sync_local | Discover entitled ROST catalog Skills, enable a catalog Skill into the company library with human confirmation, and install or sync approved Skill files locally from ROST APIs. Private catalog source URLs and GitHub tokens never go to local agents. | Tenant-admin for catalog enablement; seat-scoped sync for assigned Skills | rost 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|revoke | skill.create, skill.update_draft, skill.import_github, skill.import_upload, skill.publish, skill.assign_to_seat, skill.revoke_from_seat | Create or import bounded text Skill packages, publish reviewed immutable versions, propose Seat assignments, and revoke future use without deleting historical activations. Publish, revoke, and approved assignment stop at human confirmation; blocked required tools cannot be approved. | Tenant-admin writes; seat agents read assignments and escalate requests | rost 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 list | model.catalog | List guided model tiers with recommendations, token prices, cost bands, best-fit work, and model ids for --model. | Tenant | rost model list --json |
rost compass show | compass.show_markdown | Render the current Compass as a clean markdown card for review. | Tenant | rost compass show --markdown |
rost charter show | charter.show_markdown | Render a seat's Charter as a clean markdown card for review. | Tenant | rost charter show --seat-id <id> --markdown |
rost deliverable list|get|create|attach | deliverable.list, deliverable.get, deliverable.create, deliverable.attach | List, 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
| Command | Purpose | Scope | Safe 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). | Tenant | rost 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. | Tenant | rost 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. | Tenant | rost mcp install --client codex --scope seat --seat-id <seat-id> --skip-permissions |
rost mcp install --client claude-code --scope tenant-admin | Mint a tenant-admin MCP token and print a Claude Code registration command. | Tenant | rost mcp install --client claude-code --scope tenant-admin |
rost mcp install --client codex --scope tenant-admin | Mint a tenant-admin MCP token and print Codex TOML. | Tenant | rost mcp install --client codex --scope tenant-admin |
rost mcp install --client cursor --scope tenant-admin | Mint a tenant-admin MCP token and print Cursor JSON. | Tenant | rost 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). | Seat | rost mcp install --client codex --scope seat --seat-id <seat-id> |
rost --help | Print top-level CLI help. | Public help | rost --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.
| Tool | Purpose | Scope | Safe example |
|---|---|---|---|
rost_describe_command | Return a command's input/output JSON Schema, scope, confirmation gate, help pointer, guides, a validated example, and related commands. | Any valid MCP token | Query {"command_id":"compass.draft"} |
rost_list_commands | List every callable command id with its title, scope, confirmation, and stages. | Any valid MCP token | Call 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 resource | Purpose | Scope | Safe example |
|---|---|---|---|
rost_reference_search | Search public reference guides. | Any valid MCP token | Query {"query":"agent-reference-map","audience":"mcp"} |
rost_reference_get | Retrieve a public guide by slug. | Any valid MCP token | Query {"slug":"agent-reference-map"} |
rost://reference/{slug} | Read a public reference guide as a resource. | Any valid MCP token | Resource 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.
| Tool | Command id | Purpose | Required scope | Safe example |
|---|---|---|---|---|
rost_onboard_status | onboarding.status | Inspect onboarding progress. | Tenant | Call with {} |
rost_advance_onboarding_step | onboarding.advance_step | Persist the current onboarding step after validation. | Tenant | Call with the next step after checking status. |
rost_finish_onboarding | onboarding.finish | Mark onboarding complete once requirements pass. | Tenant | Call after graph, Compass, and Charters are ready. |
rost_attach_reference_document | onboarding.attach_reference | Attach a company reference document (text/markdown) with title/kind/source so Compass and Charters can cite it. | Tenant | Call with text, a title, a kind, and a source. |
rost_upload_org_context | onboarding.upload_context | Back-compat alias of onboarding.attach_reference. | Tenant | Prefer rost_attach_reference_document; same widened schema. |
rost_create_onboarding_invite | onboarding.create_invite | Invite a team member during onboarding. | Tenant | Call with a business email and role. |
rost_save_tenant_anthropic_key | tenant.anthropic_key.save | Store a tenant model key through the vault. | Tenant | Use only with a real human-provided secret. |
rost_create_seat | seat.create | Create a Responsibility Graph seat. | Tenant | Call with {"name":"Finance","seat_type":"human"}. |
rost_rename_seat | seat.rename | Rename a seat. | Seat or tenant-admin | Call with seat_id and name. |
rost_reparent_seat | seat.reparent | Move a seat under a new parent. | Seat or tenant-admin | Call with seat_id and parent_seat_id. |
rost_set_seat_type | seat.set_type | Set a seat type. | Seat or tenant-admin | Call with seat_id and seat_type. |
rost_decommission_seat | seat.decommission | Retire a seat: end occupancies, archive the Charter, revoke tokens/credentials, cancel schedules, tombstone event. No-orphan guarded. | Seat or tenant-admin | Call with {"seat_id":"<seat-id>"}; expect confirmation. |
rost_draft_charter | charter.draft | Create or fetch a draft Charter. | Seat or tenant-admin | Call with {"seat_id":"<seat-id>"}. |
rost_draft_all_charters | charter.draft_all | Draft Charters for every eligible seat. | Tenant | Call after initial graph creation. |
rost_update_charter_draft | charter.update_draft | Update a draft Charter document. | Seat or tenant-admin | Call with charter_version_id and the full doc. |
rost_set_charter | charter.set | Create or replace a seat's draft Charter from a full document in one call. | Seat or tenant-admin | Call with seat_id and doc; approve activates it (human gate). |
rost_approve_charter | charter.approve | Approve a draft Charter as a human owner. | Seat or tenant-admin | Expect confirmation when authority changes. |
rost_skip_charter_draft | charter.skip | Mark a Charter draft as skipped. | Seat or tenant-admin | Call only when a human defers the seat. |
rost_apply_charter_seat_type_recommendation | charter.apply_seat_type_recommendation | Apply a Charter's seat-type recommendation. | Seat or tenant-admin | Call after reviewing the draft. |
rost_sign_charter_manifest | charter.sign_manifest | Request human confirmation for a permission manifest. | Seat or tenant-admin | Use after tool permissions are reviewed. |
rost_approve_pending_confirmation | confirmation.approve | Approve a pending confirmation. | Tenant | Call with {"confirmation_id":"<confirmation-id>"}. |
rost_reject_pending_confirmation | confirmation.reject | Reject a pending confirmation. | Tenant | Call with {"confirmation_id":"<confirmation-id>"}. |
rost_draft_compass | compass.draft | Create a Compass draft. | Tenant | Call with a concise Compass document. |
rost_update_compass_draft | compass.update_draft | Replace a Compass draft document. | Tenant | Call with the compass_version_id from compass.draft as draft_id and the updated document. |
rost_approve_compass_version | compass.approve_version | Activate a Compass version by supersession. | Tenant | Call after human review. |
rost_reject_compass_draft | compass.reject_draft | Reject and remove a Compass draft. | Tenant | Call when the draft should not proceed. |
rost_answer_compass_gap | compass.answer_gap | Record a human answer for a Compass gap. | Tenant | Call with gap_id and answer text. |
rost_set_compass | compass.set | Compatibility helper for setting Compass over MCP. | Tenant | Call with the approved Compass shape. |
rost_assign_user_to_seat | staffing.assign_user | Assign a human user occupancy to a seat. | Seat or tenant-admin | Call with seat_id and user_id. |
rost_assign_dry_run_agent_to_seat | staffing.assign_agent_dry_run | Assign an agent occupancy in dry-run mode. | Seat or tenant-admin | Call only after Steward chain is clear. |
rost_staff_seat | staffing.assign | Compatibility helper for human, agent, or hybrid staffing. | Seat or tenant-admin | Call with seat_id and occupant. |
rost_store_credential | credential.ingress | Store a secret through the vault and persist only a vault reference. | Seat or tenant-admin | Use vault-backed values only. |
rost_go_live | agent.go_live | Promote a dry-run agent seat to live. | Seat or tenant-admin | Call after human approval. |
rost_create_mcp_token | mcp_token.create | Mint a tenant-admin or seat-scoped MCP token. | Tenant | Prefer rost mcp install for users. |
rost_revoke_mcp_token | mcp_token.revoke | Revoke an MCP token immediately. | Tenant | Call with token_id. |
rost_get_responsibility_graph | graph.get | Read the Responsibility Graph: seats, edges, root, occupants, status rollups. | Tenant | Call with {} before mutating or routing work. |
rost_get_seat_detail | seat.get | Read a seat's Charter ids, steward chain, occupancy, agent status, token metadata, and open-work counts. | Seat or tenant-admin | Call with {"seat_id":"<seat-id>"}. |
rost_list_charters | charter.list | List Charter versions, optionally by seat or status. | Tenant | Call with {} or {"seat_id":"<seat-id>"}. |
rost_get_charter | charter.get | Read a Charter with supersession history and dry-run status. | Tenant | Call with {"charter_version_id":"<id>"}. |
rost_get_current_compass | compass.get_current | Read the active and draft Compass versions and source documents. | Tenant | Call with {}. |
rost_list_compass_gaps | compass.list_gaps | List unanswered and answered Compass context gaps. | Tenant | Call with {} before answering gaps. |
rost_get_agent_status | agent.status | Read agent lane, live state, steward chain, dry-run result, Runner availability. | Seat or tenant-admin | Call with {"seat_id":"<seat-id>"}. |
rost_list_agent_fleet | agent.list_fleet | Read every staffed agent seat at once: lane, live state, last real turn, 24h/7d real turns, measurable status, escalations, and 7-day spend. | Tenant | Call 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_digest | agent.fleet_digest | Capture the daily dogfood fleet-health digest: live/idle state, 24h/7d turns, spend, recent failed runs, unresolved errors, failed notifications, and next actions. | Tenant | Call with {}; optional window_hours bounds recent failed-run evidence, while error_limit caps linked evidence per seat. |
rost_system_health | system.health | Read the scoped system-health snapshot across agent runs, unresolved errors, Signals, Cascade setup, work loop, integrations, runners, notifications, and Sync Brief readiness. | Tenant, member, or seat token | Call with {}; optional seat_id narrows inside the caller's server-derived scope. |
rost_run_agent_now | agent.run_now | Queue 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. | Tenant | Call with {"seat_id":"<seat-id>"}. |
rost_list_agent_runs | agent.list_runs | Read 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-admin | Call with {"seat_id":"<seat-id>"}; pass limit for a deeper window. |
rost_get_agent_run_diagnostics | agent.get_run | Read 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-admin | Call with {"seat_id":"<seat-id>","run_id":"<run-id>"}. |
rost_list_agent_tool_calls | agent.list_tool_calls | Read a seat's tool-call ledger (tool name, guard result, manifest clause, outcome) with the held-action count as the hero metric. Never returns argument summaries or secret material. | Seat or tenant-admin | Call with {"seat_id":"<seat-id>"}; pass held_only: true for only guard-held calls. |
rost_list_agent_deliverables | deliverable.list | List durable agent deliverables for a seat, including explicit outputs and successful-run summaries. | Seat or tenant-admin | Call with {"seat_id":"<seat-id>"}. |
rost_get_agent_deliverable | deliverable.get | Read one durable agent deliverable by id for a seat. | Seat or tenant-admin | Call with {"seat_id":"<seat-id>","deliverable_id":"<id>"}. |
rost_create_agent_deliverable | deliverable.create | Create a scrubbed durable work output for the acting seat. | Seat | Call with title, kind, summary/content, and optional safe links. |
rost_attach_agent_deliverable | deliverable.attach | Attach a scrubbed deliverable to a source run, task, or work order after server-side seat validation. | Seat | Call with title, kind, and the source ids that belong to the acting seat. |
rost_list_agent_templates | agent_template.list | List stock agent templates and metadata. | Tenant | Call with {}. |
rost_create_agent_from_template | agent.create_from_template | Create a draft stock agent and draft Charter from a template (draft-only; occupancy needs a human steward). | Tenant | Call with seat_id and template_slug; expect human confirmation. |
rost_start_agent_setup | agent_setup.start | Start an agent setup draft for template, custom, or existing mode. | Tenant | Call with mode and seat placement. |
rost_get_agent_setup | agent_setup.get | Read agent setup state, blockers, and next action. | Seat or tenant-admin | Call with {"setup_id":"<id>"}. |
rost_update_agent_setup | agent_setup.update | Update parent, steward, lane, schedule, or answers on a setup draft. | Tenant | Call with setup_id and the fields to change. |
rost_update_agent_schedule | agent.update_schedule | Update a draft or live agent's scheduled execution. | Tenant | Call with agent_id and schedule_cron; expect human confirmation. |
rost_decommission_agent | agent.decommission | Retire an agent occupancy safely (no-orphan guarded). | Tenant | Call with agent_id; expect human confirmation. |
rost_pause_agent | agent.pause | Pause a live agent so it stops scheduled and on-demand runs; reversible. | Tenant | Call with seat_id; expect human confirmation. |
rost_resume_agent | agent.resume | Resume a paused agent back to live (no-orphan guarded). | Tenant | Call with seat_id; expect human confirmation. |
rost_create_custom_agent | agent.create_custom | Create a draft custom agent shell and draft Charter seed from operational answers. | Tenant | Call with seat_id and operational answers; expect human confirmation. |
rost_configure_agent_tools | agent.configure_tools | Connect or decline proposed tools and stage credential-ingress requests (vault refs only). | Seat or tenant-admin | Never send raw secrets; expect a credential confirmation. |
rost_run_agent_dry_run | agent.run_dry_run | Run the sandbox dry run for a draft agent; durable and idempotent per Charter version. | Seat or tenant-admin | Call after the manifest is signed; ungated by human approval, but precondition-gated on a signed manifest. |
rost_list_mcp_tokens | mcp_token.list | List MCP token metadata (never token material). | Tenant | Call with {} or {"include_revoked":true}. |
rost_list_runners | runner.list | List local runners and their online/offline/revoked state. | Tenant | Call with {}. |
rost_runner_status | runner.status | Read a single runner's capability and state. | Tenant | Call with runner_id. |
rost_diagnose_runner | runner.diagnose | Return runner health, capabilities, and repair guidance without secrets. | Tenant | Call with runner_id; actionable repair guidance exposes restart, re-pair, or missing CLI steps. |
rost_runner_repair_guidance | runner.repair | Return focused repair steps for a runner: restart, re-pair, revoke stale, or install missing CLI runtime. | Tenant | Call with runner_id and optional issue (restart, re_pair, revoke_stale, missing_cli_runtime). |
rost_start_runner_pairing | runner.pairing.start | Open a runner pairing session and return the human pairing code. | Tenant-admin | Call with name and platform; owner/admin only. |
rost_revoke_runner | runner.revoke | Revoke a runner so it can no longer authenticate. | Tenant | Call with runner_id; expect human confirmation. |
rost_list_work_orders | work_order.list | List runner/cloud work orders for the tenant. | Tenant | Call with optional status, agent_id, or runner_id. |
rost_enqueue_work_order | work_order.enqueue | Queue a work order for a live scheduled agent. | Tenant | Call with agent_id. |
rost_cancel_work_order | work_order.cancel | Cancel a queued, claimed, or running work order. | Tenant | Call with work_order_id; expect human confirmation. |
rost_get_notification_settings | notification.settings.get | Read tenant notification preferences. | Tenant | Call with {}. |
rost_update_notification_settings | notification.settings.update | Update tenant notification preferences. | Tenant | Call with the fields to change. |
rost_send_test_notification | notification.test | Emit an in-app test notification to the acting human. | Tenant | Call with {}. |
rost_list_notification_errors | notification.list_errors | List recent failed notification deliveries with linked error_log_id, source, seat id, and run id when available. | Tenant | Call with optional limit; source=run rows can be followed with agent.get_run. |
rost_list_error_logs | error_log.list | List product error logs by seat, source, severity, and active/resolved state. | Tenant | Call with {"resolved":"active"} before acknowledging stale failures. |
rost_resolve_error_log | error_log.resolve | Acknowledge or resolve an error log with a required human reason and optional task, issue, or PR link. | Tenant | Call with error_log_id, reason, and disposition acknowledged or resolved. |
rost_supersede_error_log | error_log.supersede | Mark an older error log as superseded by a newer in-tenant error log. | Tenant | Call with error_log_id, new_error_log_id, and reason. |
rost_list_integrations | integration.list | List connected integration metadata and latest health state. | Tenant | Call with {} or {"provider":"google"}; no secrets or vault refs are returned. |
rost_check_integration_readiness | integration.readiness | Return the connector setup checklist: OAuth env/callback, tenant connection, scopes, latest test state, external verification/CASA, handler availability, and DER-coded next actions. | Tenant | Call with {"provider":"google"}; metadata only, no secrets or vault refs. |
rost_get_integration_status | integration.status | Read one integration's metadata by provider or integration id. | Tenant | Call with {"provider":"google"} or {"integration_id":"<id>"}. |
rost_test_integration_connection | integration.test | Run the provider-specific connection test and update integration health. | Tenant | Call with {"provider":"google"}; result is bounded metadata only. |
rost_invite_member | member.invite | Create a pending tenant invite for a human teammate. | Tenant | Call with email and role. |
rost_update_member_role | member.update | Change a tenant member's role. | Tenant | Call with member_id and role; expect human confirmation. |
rost_remove_member | member.remove | Remove a tenant member. | Tenant | Call with member_id; blocked if it would orphan an agent steward chain. |
rost_get_tenant_settings | settings.get | Read tenant operating settings and integration status. | Tenant | Call with {}; metadata only. |
rost_update_tenant_settings | settings.update | Update tenant AI budget caps. | Tenant | Call with soft_cap_usd or hard_cap_usd; expect human confirmation. |
rost_rename_company | tenant.rename | Rename the current company. | Tenant-admin | Call with company_name; expect human confirmation. |
rost_get_sync_brief_scope | settings.sync_brief_scope.get | Read the tenant's Sync Brief scope (company_wide or per_cluster). | Tenant | Call with {}. |
rost_update_sync_brief_scope | settings.sync_brief_scope.update | Set the tenant's Sync Brief scope (company_wide or per_cluster). | Tenant-admin | Owner-only; call with {"sync_brief_scope":"company_wide"} or {"sync_brief_scope":"per_cluster"}. |
rost_get_product_learning_policy | settings.product_learning.get | Read whether product/page/recommendation analytics are allowed. | Tenant | Call with {}; audit/security logs are always enabled. |
rost_update_product_learning_policy | settings.product_learning.update | Set product-learning mode. | Tenant-admin | Human-gated; call with {"mode":"enabled"}, {"mode":"disabled"}, or {"mode":"enterprise_contract"}. |
rost_list_signals | signal.list | List measurables with their latest reading and on/off-track state. | Seat or tenant-admin | Call with {} to find measurable ids. |
rost_get_signal | signal.get | Read a measurable with its full reading history. | Seat or tenant-admin | Call with {"measurable_id":"<id>"}. |
rost_confirm_signal_reading | signal.confirm_reading | Confirm an unconfirmed reading as human-verified. | Seat or tenant-admin | Humans confirm; call with {"reading_id":"<id>"}. |
rost_correct_signal_reading | signal.correct_reading | Overwrite a reading with a human-confirmed value. | Seat or tenant-admin | Manual correction; expect confirmation. |
rost_add_a_measurable | measurable.create | Add a measurable a seat owns (name, unit, direction, target, cadence). | Seat or tenant-admin | Call with {"seat_id":"<id>","name":"...","unit":"...","direction":"up_good","target":0,"cadence":"weekly"}. |
rost_list_cascade_goals | goal.list | List Cascade goals, optionally by cycle or seat. | Seat or tenant-admin | Call with {} or {"cycle_id":"<id>"}. |
rost_create_cascade_goal | goal.create | Create a cycle goal under an objective. | Tenant | Call with cycle, seat, parent, title, definition of done. |
rost_update_cascade_goal | goal.update | Update a goal's title or definition of done. | Tenant | Call with goal_id and the changed fields. |
rost_set_cascade_goal_status | goal.set_status | Set a goal's status (on/off/done). | Seat or tenant-admin | Seats may set only their own goals. |
rost_reparent_cascade_goal | goal.reparent | Move a goal under a new parent. | Tenant | Authority change; expect confirmation. |
rost_drop_cascade_goal | goal.drop | Drop (retire) a goal, retained for audit. | Tenant | Expect confirmation. |
rost_list_friction_issues | friction.list | List Friction issues ranked by impact and severity. | Seat or tenant-admin | Call with {} or {"status":"active"}. |
rost_update_friction_issue_status | friction.update_status | Move a non-terminal issue between open and diagnosing. | Seat or tenant-admin | Call with issue_id and status. |
rost_resolve_friction_issue | friction.resolve | Resolve an issue with a root cause and remediation task. | Tenant | Human decision; expect confirmation. |
rost_link_task_to_friction_issue | friction.link_task | Attach an existing task as an issue's action task. | Seat or tenant-admin | Call with issue_id and task_id. |
rost_create_task | task.create | Create a task (a commitment between seats). | Seat or tenant-admin | none — created directly; the owning seat accepts or declines. |
rost_compile_sync_brief | sync.brief.compile | Compile the weekly Sync Brief (idempotent per period). | Tenant | Call with {}. |
rost_get_sync_brief | sync.brief.get | Read the latest or a specific Sync Brief and agenda. | Seat or tenant-admin | Call with {} or {"sync_brief_id":"<id>"}. |
rost_start_sync_run | sync.run.start | Ensure a Sync Brief exists so the meeting can begin. | Tenant | Call with {}. |
rost_complete_sync_run | sync.run.complete | Record that the Sync meeting completed (idempotent). | Tenant | Call with {"sync_brief_id":"<id>"}. |
rost_assign_sync_follow_up | sync.item.assign | Create a follow-up task from a Sync agenda item. | Tenant | Call with brief, owner seat, title, description. |
rost_list_escalations | escalation.list | List Steward queue escalations (own steward chain for humans, own seat for agents). | Seat or tenant-admin | Call with {} or {"include_decided":true}. |
rost_get_escalation | escalation.get | Read one escalation's evidence, recommendation, and decision state. | Seat or tenant-admin | Call with {"id":"<escalation-id>"}. Resolve/reject are human-only and not exposed over MCP. |
rost_show_compass_as_markdown | compass.show_markdown | Render the current Compass and its open gaps as a clean markdown card for review. | Tenant | Call with {}. |
rost_show_charter_as_markdown | charter.show_markdown | Render a seat's active or latest Charter as a clean markdown card for review. | Tenant | Call with {"seat_id":"<seat-id>"}. |
rost_show_agent_setup_as_markdown | agent.show_markdown | Render a seat's agent setup, model, steward, tools, and Charter as a clean markdown card for review. | Tenant | Call with {"seat_id":"<seat-id>"}. |
rost_list_tool_catalog | tool.catalog | List the discoverable tool catalog the agent builder reads — id, prescriptive description, scope tiers, credential requirement, access policy, and execution-boundary guidance. | Tenant | Call with {} or {"provider":"google"}. |
rost_list_skills | skill.list | List tenant Skills with application descriptors, dependency metadata, source status, latest version, and assigned Seat count. Seat-scoped reads are available through rost://skills. | Tenant-admin | Call with {} or {"query":"invoice"}. |
rost_list_rost_skill_catalog | skill.catalog | List entitled ROST catalog Skills. Private catalog source URLs and credentials stay server-side. | Tenant-admin | Call with {}; use {"include_unentitled":true} only to inspect tier availability. |
rost_enable_rost_catalog_skill | skill.enable_catalog | Enable an entitled ROST catalog Skill into the company library with human confirmation. | Tenant-admin | Call with {"slug":"rost/ap-review"}; non-interactive callers receive a confirmation handoff. |
rost_install_skill_locally | skill.install_local | Resolve company or entitled ROST catalog Skill files from ROST APIs for a local client install. It returns package files and metadata, not private GitHub URLs. | Tenant-admin | Call with {"slug":"invoice-review","client":"codex"}; rost/<slug> enablement may require confirmation. |
rost_sync_assigned_skills_locally | skill.sync_local | Resolve every approved Skill assigned to a Seat plus revoked local-copy markers for a local client sync. | Tenant-admin | Call with {"seat_id":"<seat-id>","client":"codex"}; local clients remove revoked copies. |
rost_get_skill | skill.get | Read one Skill descriptor and latest stored version metadata. Seat-scoped reads are available through rost://skills/{slug}. | Tenant-admin | Call with {"slug":"invoice-review"}. |
rost_get_skill_file | skill.file.get | Read stored Skill package file content by slug and package path; paths resolve only inside the stored package payload. Seat-scoped reads are available through rost://skills/{slug}/files/{path}. | Tenant-admin | Call with {"slug":"invoice-review","path":"SKILL.md"}. |
rost_list_assigned_skills | skill.assigned.list | List 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-admin | Call with {"seat_id":"<seat-id>"}. |
rost_check_skill_dependencies | skill.check_dependencies | Compare 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-admin | Call with {"seat_id":"<seat-id>","slug":"invoice-review"}. |
rost_create_skill | skill.create | Create a tenant Skill draft or pending-review Skill from a bounded text package. | Tenant-admin | Call with {"package":{"files":[{"path":"SKILL.md","content":"..."}]},"status":"draft"}. |
rost_update_skill_draft | skill.update_draft | Replace or create the current unpublished draft version for an existing Skill. | Tenant-admin | Call with {"slug":"invoice-review","package":{"files":[{"path":"SKILL.md","content":"..."}]}}. |
rost_import_github_skill | skill.import_github | Import a public GitHub Skill package into pending review or draft after validation. | Tenant-admin | Call with {"url":"https://github.com/acme/skills/tree/main/ap","status":"pending_review"}. |
rost_import_uploaded_skill | skill.import_upload | Import a bounded structured text package. MCP does not accept direct binary uploads in this release. | Tenant-admin | Call with {"package":{"files":[{"path":"SKILL.md","content":"..."}]},"status":"draft"}. |
rost_publish_skill | skill.publish | Human-gated publication of an unpublished Skill version. Published versions are immutable and assignable. | Tenant-admin | Call with {"slug":"invoice-review"}; non-interactive callers receive a confirmation handoff. |
rost_assign_skill_to_seat | skill.assign_to_seat | Propose or human-approve a published Skill version for a Seat after dependency checks. Missing required tools block approval; optional tools warn. | Tenant-admin | Call with {"seat_id":"<seat-id>","slug":"invoice-review","status":"proposed","rationale":"Use for AP exception work."}. |
rost_revoke_skill_from_seat | skill.revoke_from_seat | Human-gated revocation that stops future Skill use without deleting historical activations. | Tenant-admin | Call with {"assignment_id":"<assignment-id>"}; non-interactive callers receive a confirmation handoff. |
rost_list_model_catalog | model.catalog | List guided model tiers — recommendations, token prices, cost bands, best-fit work, and model ids for --model. | Tenant | Call 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.
| Tool | Command id | Purpose | Scope | Safe example |
|---|---|---|---|---|
rost_get_context | (read) seat-context bundle | Retrieve the seat's Charter, Compass, goals, tasks, issues, and protocol instructions. Equivalent to reading rost://seat/{id}/context. | Seat | Call first with {}. |
rost_get_tasks | task.list | List open tasks visible to the seat. Each task's due_on is an ISO date string (YYYY-MM-DD) or null. | Seat | Call with {}. |
rost_accept_task | task.accept | Accept a task owned by the seat. | Seat | Call with {"task_id":"<task-id>"}. |
rost_decline_task | task.decline | Decline a task with a reason. | Seat | Call with task_id and reason. |
rost_report_status | status.record | Write a status event. | Seat | Call with a concise status payload. |
rost_complete_task | task.complete | Complete a task and record evidence. | Seat | Call with task_id and evidence. |
rost_escalate | escalation.raise | Escalate approval-scope or must-escalate work. | Seat | Call with severity, reason, and requested decision. |
rost_file_issue | friction.file_issue | File a Friction issue. | Seat | Call with title, severity, and impact. |
rost_log_work | work.log | Record work performed by the seat. | Seat | Call 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.
| Resource | Purpose | Scope | Safe example |
|---|---|---|---|
rost://tenant/status | Current user, tenant, role/scope, and onboarding status. | Tenant-admin | Read before driving tenant setup. |
rost://graph | Responsibility Graph: seats, edges, root, occupants, status rollups. | Tenant-admin | Read before routing or reparenting work. |
rost://seat/{id}/context | A 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/current | Active and draft Compass versions plus source documents. | Tenant-admin | Read before drafting Compass changes. |
rost://sync/latest | The most recent compiled Sync Brief and its agenda. | Tenant-admin | Read before running the weekly Sync. |
rost://skills | Tenant Skills library for tenant-admin tokens; assigned published Skills for seat tokens. | Tenant-admin or seat | Read before creating, assigning, or loading Skill instructions. |
rost://skills/{slug} | One Skill descriptor and latest stored version metadata. | Tenant-admin or assigned seat | Read 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 seat | Read rost://skills/<slug>/files/SKILL.md. |
rost://agents/templates | Stock agent templates: responsibilities, default tools, safety boundaries, and dry-run rehearsal. | Tenant-admin | Read 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-admin | Read rost://agent-setup/<setup-id> to resume a draft. |
rost://seat/{id}/agent-status | A 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}/skills | Approved 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-map | Machine-facing map of which guide to read before each workflow. | Any valid MCP token | Read 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 retryrost 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, thenrost 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 --helpor clear the npm cache. - MCP connection not working after registering: call
rost_list_commandswith{}(any token); with a tenant-admin token readrost://tenant/status, with a seat-scoped token callrost_get_contextwith{}(a seat token cannot readrost://tenant/status). A 401 / not-authorized shape means the token did not register — re-runmcp 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 bymcp installdefault to a 90-day expiry — checkexpires_in_daysinrost command mcp_token.list; mint with--expires-in <days>or--no-expiryto change it. - Confirmation required: a human approves from the
approveViaweb link or runs therost 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>(commandsettings.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", orrost reference get agent-reference-map. - Need MCP guidance: call
rost_reference_getwith{"slug":"agent-reference-map"}.