@rosthq/cli 0.5.7 → 0.5.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +195 -37
- package/dist/index.js.map +3 -3
- package/dist/operations.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -27867,6 +27867,11 @@ var marketingUrl = process.env.NEXT_PUBLIC_MARKETING_URL ?? "";
|
|
|
27867
27867
|
var BRAND = {
|
|
27868
27868
|
name: "ROST",
|
|
27869
27869
|
legalName: "ROST, Inc.",
|
|
27870
|
+
// The legal entity that operates the product and publishes the privacy policy
|
|
27871
|
+
// / terms (the data controller). Distinct from the product brand name — the
|
|
27872
|
+
// operating company is not subject to brand/trademark renaming. Set via env
|
|
27873
|
+
// (e.g. "SKBD LLC"); falls back to the product legal name when unset.
|
|
27874
|
+
operatingEntity: process.env.NEXT_PUBLIC_LEGAL_ENTITY?.trim() || "ROST, Inc.",
|
|
27870
27875
|
tagline: "Mission control for humans and AI.",
|
|
27871
27876
|
categoryDescriptor: "The agentic operating system for hybrid companies.",
|
|
27872
27877
|
domain: domainFromUrl(marketingUrl),
|
|
@@ -41486,7 +41491,7 @@ var referenceDocuments = [
|
|
|
41486
41491
|
order: 10,
|
|
41487
41492
|
title: "{{brand}} implementation method",
|
|
41488
41493
|
summary: "The staged operating-system setup path used by humans, CLI sessions, MCP clients, and in-app agents.",
|
|
41489
|
-
version: "2026-06-18.
|
|
41494
|
+
version: "2026-06-18.2",
|
|
41490
41495
|
public: true,
|
|
41491
41496
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
41492
41497
|
stages: ["company_setup", "graph_design", "charter_design", "staffing", "operating_rhythm"],
|
|
@@ -41554,6 +41559,10 @@ Build the Responsibility Graph from functions and seats first. Do not start by a
|
|
|
41554
41559
|
|
|
41555
41560
|
The first graph should be small enough to understand. Start with the top operating seat, then major functions, then the first operational seats that carry measurable work. Add detail only when it clarifies ownership.
|
|
41556
41561
|
|
|
41562
|
+
### Solo founders and small flat teams
|
|
41563
|
+
|
|
41564
|
+
If it is just you, or a small flat team of four or fewer people, declare that at the start of org intake. Setup skips the org-chart upload and the "who reports to you" question, and instead asks which functions the company needs covered today. It proposes a standard small-company function tree \u2014 company leadership, revenue, sales, marketing, delivery and operations, finance and admin \u2014 that you occupy, then pivots straight to which functions to staff with agents. Because there is no one to invite, the team-invite step is skipped. You can still invite people later from settings.
|
|
41565
|
+
|
|
41557
41566
|
## Stage 3: Convert seats into Charters
|
|
41558
41567
|
|
|
41559
41568
|
A Charter is the executable job description for a seat. It should define purpose, responsibilities, autonomous scope, approval scope, must-escalate conditions, measurables, and tool permissions.
|
|
@@ -41591,7 +41600,7 @@ The Compass is drafted, then activated by a human through supersession.
|
|
|
41591
41600
|
order: 20,
|
|
41592
41601
|
title: "Responsibility Graph playbook",
|
|
41593
41602
|
summary: "How to build a functions-first graph with seats, owners, Stewards, vacancies, and clean authority.",
|
|
41594
|
-
version: "2026-06-18.
|
|
41603
|
+
version: "2026-06-18.2",
|
|
41595
41604
|
public: true,
|
|
41596
41605
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
41597
41606
|
stages: ["graph_design", "staffing"],
|
|
@@ -41638,6 +41647,13 @@ Each entry opens the same conservative setup flow \u2014 seat placement, Steward
|
|
|
41638
41647
|
|
|
41639
41648
|
The graph canvas fits the whole structure into the frame when it opens and refits whenever the frame changes \u2014 opening a side panel, resizing the window, or rotating a phone. Zoom moves between three altitudes: a constellation of seat dots when zoomed out, seat cards at the working zoom, and charter detail when zoomed in. Seat cards stay legible on small screens, and the canvas is the one always-dark surface in the otherwise light app. Search the toolbar to fly to any seat by name.
|
|
41640
41649
|
|
|
41650
|
+
The graph is also where you land after onboarding \u2014 it is the mission control for the company, not a separate dashboard. Switch lenses from the toolbar to recolour the same structure four ways:
|
|
41651
|
+
|
|
41652
|
+
- **Structure** \u2014 seat type and reporting lines.
|
|
41653
|
+
- **Cascade** \u2014 whether each seat's goal branch is on track.
|
|
41654
|
+
- **Signal** \u2014 the worst measurable state per seat.
|
|
41655
|
+
- **Scoreboard** \u2014 two live numbers on every seat: work done (agent runs) and cost over the last 30 days. A seat whose cost is a clear outlier above the rest of the fleet is flagged as cost drift (labelled, not colour-only). Human seats and seats with no runs read calmly as no agent cost rather than a bare zero. For a small fleet the Scoreboard also leads with a two-tile summary \u2014 total work and total cost \u2014 framed as the single question that matters: is it earning its keep.
|
|
41656
|
+
|
|
41641
41657
|
## First-pass structure
|
|
41642
41658
|
|
|
41643
41659
|
Start with the operating root, then major functions, then the few seats that own the most important recurring work. Do not over-model. A graph with eight clear seats is better than a graph with thirty vague boxes.
|
|
@@ -41769,11 +41785,11 @@ Drafting can be assisted by agents. Activation is a human decision. When authori
|
|
|
41769
41785
|
order: 40,
|
|
41770
41786
|
title: "Agent staffing playbook",
|
|
41771
41787
|
summary: "How to decide whether a seat should be human, agent, or hybrid, and how to go live safely.",
|
|
41772
|
-
version: "2026-06-
|
|
41788
|
+
version: "2026-06-19.2",
|
|
41773
41789
|
public: true,
|
|
41774
41790
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
41775
41791
|
stages: ["staffing"],
|
|
41776
|
-
relatedCommandIds: ["staffing.assign_user", "staffing.assign_agent_dry_run", "agent.go_live", "agent.status", "mcp_token.create", "agent_template.list", "agent.create_from_template", "agent_setup.start", "agent_setup.get", "agent_setup.update", "agent.update_schedule", "agent.decommission", "agent.create_custom", "agent.configure_tools", "agent.run_dry_run", "confirmation.approve"],
|
|
41792
|
+
relatedCommandIds: ["staffing.assign_user", "staffing.assign_agent_dry_run", "agent.go_live", "agent.status", "agent.run_now", "agent.get_run", "agent.list_runs", "agent.list_tool_calls", "mcp_token.create", "agent_template.list", "agent.create_from_template", "agent_setup.start", "agent_setup.get", "agent_setup.update", "agent.update_schedule", "agent.decommission", "agent.create_custom", "agent.configure_tools", "agent.run_dry_run", "confirmation.approve"],
|
|
41777
41793
|
legal: {
|
|
41778
41794
|
publicRisk: "low",
|
|
41779
41795
|
notes: [
|
|
@@ -41814,6 +41830,12 @@ A seat can be human, agent, or hybrid. The staffing decision should follow the w
|
|
|
41814
41830
|
5. Review Signal, Friction, and tool-call audit rows.
|
|
41815
41831
|
6. Human approves go-live.
|
|
41816
41832
|
|
|
41833
|
+
## In the onboarding funnel
|
|
41834
|
+
|
|
41835
|
+
Staffing your first agent is a step in onboarding, right before the finish step. Its content is the stock-template gallery: pick a template to staff an agent seat, and you continue on the agents surface to name the Steward, sign the manifest, and run the sandbox dry run \u2014 the same draft-first path described below, not a separate one. Staffing the first agent is the activation moment, so the funnel asks for it before exit.
|
|
41836
|
+
|
|
41837
|
+
Working solo, or staffing later? Skip the step with intent and finish onboarding without an agent. Nothing is forced: you can staff an agent any time from the agents surface, and the staffing decision still follows the work, the risk, and the measurable.
|
|
41838
|
+
|
|
41817
41839
|
## Create and stage an agent from CLI or MCP
|
|
41818
41840
|
|
|
41819
41841
|
Two creation paths, both draft-first. Read the stock-agents guide for templates and the how-agents-work guide for the operating loop.
|
|
@@ -41821,10 +41843,12 @@ Two creation paths, both draft-first. Read the stock-agents guide for templates
|
|
|
41821
41843
|
- From a template: list with \`agent_template.list\` / \`rost_list_agent_templates\`, then \`agent.create_from_template\` / \`rost_create_agent_from_template\` with \`seat_id\` and \`template_slug\`. Returns a draft agent and draft Charter only.
|
|
41822
41844
|
- Custom: \`agent_setup.start\` / \`rost_start_agent_setup\` (returns a \`setup_id\`), iterate with \`agent_setup.get\` and \`agent_setup.update\`, then \`agent.create_custom\` / \`rost_create_custom_agent\`. Stage tools with \`agent.configure_tools\` (vault refs only) and sandbox with \`agent.run_dry_run\`.
|
|
41823
41845
|
- Inspect runtime: \`agent.status\` / \`rost_get_agent_status\` with \`{"seat_id":"<seat-id>"}\` returns lane, live state, steward chain, dry-run result, and Runner availability.
|
|
41846
|
+
- Run on demand: \`{{cli}} agent run-now --seat-id <seat-id>\` / \`agent.run_now\` / \`rost_run_agent_now\` queues an immediate live run without changing the saved schedule. Cloud agents dispatch to the Inngest executor; runner agents queue work for the paired runner. The command is ungated but still requires a live staffed agent and the normal server-side tool guard.
|
|
41847
|
+
- Audit what an agent did (Trust Card): \`{{cli}} command agent.list_runs --json '{"seat_id":"<seat-id>"}'\` / \`rost_list_agent_runs\` returns the seat's run history with per-run tool-call and guard-held counts; \`{{cli}} agent get-run --seat-id <seat-id> --run-id <run-id>\` / \`agent.get_run\` / \`rost_get_agent_run_diagnostics\` reads one run's transcript reference, token/cost usage, outcome, and product-visible run errors; \`{{cli}} command agent.list_tool_calls --json '{"seat_id":"<seat-id>"}'\` / \`rost_list_agent_tool_calls\` returns the tool-call ledger with each call's guard result. Both list commands include a \`denied_tool_call_count\` rollup \u2014 the actions held because they exceeded the charter. Pass \`{"seat_id":"<seat-id>","held_only":true}\` to \`agent.list_tool_calls\` for only the held calls. The web seat page shows the same facts as a Trust Card.
|
|
41824
41848
|
|
|
41825
41849
|
## When to stop for confirmation
|
|
41826
41850
|
|
|
41827
|
-
\`agent.create_from_template\`, \`agent.create_custom\`, \`staffing.assign_user\`, \`agent.go_live\`, \`agent.update_schedule\`, and \`mcp_token.create\` are \`human_required\`; \`agent.configure_tools\` and \`credential.ingress\` are \`credential_flow\` (both gate through the vault-backed credential path with human approval; \`agent.configure_tools\` stages the request and only \`credential.ingress\` takes the raw secret, as a vault reference); \`agent.decommission\` is \`dangerous\`. An agent may draft, configure (with vault refs), and
|
|
41851
|
+
\`agent.create_from_template\`, \`agent.create_custom\`, \`staffing.assign_user\`, \`agent.go_live\`, \`agent.update_schedule\`, and \`mcp_token.create\` are \`human_required\`; \`agent.configure_tools\` and \`credential.ingress\` are \`credential_flow\` (both gate through the vault-backed credential path with human approval; \`agent.configure_tools\` stages the request and only \`credential.ingress\` takes the raw secret, as a vault reference); \`agent.decommission\` is \`dangerous\`. \`agent.run_now\` is not human-gated because it does not expand authority or change the schedule; it only queues an immediate run for an already-live agent. An agent may draft, configure (with vault refs), dry-run, and request an on-demand run; the human approves go-live, credentials, schedule changes, and decommission. \`run_dry_run\` is ungated by human approval, but it is **precondition-gated**: the seat's permission manifest must be signed first (\`charter.sign_manifest\`). Attempting a dry run before sign-off returns a clean \`COMMAND_PRECONDITION_FAILED\` naming \`charter.sign_manifest\`, not a generic failure. Go-live after a passed dry run is \`human_required\`. See the confirmations guide.
|
|
41828
41852
|
|
|
41829
41853
|
## Non-negotiables
|
|
41830
41854
|
|
|
@@ -41835,7 +41859,7 @@ No orphan agents. No raw secrets in prompts, logs, or tool arguments. No durable
|
|
|
41835
41859
|
order: 41,
|
|
41836
41860
|
title: "Add agents to your Responsibility Graph",
|
|
41837
41861
|
summary: "The visual journey for adding an agent seat: where to start, choosing a mode, placing the seat, naming a Steward, setup, the safety gates, and go-live.",
|
|
41838
|
-
version: "2026-06-
|
|
41862
|
+
version: "2026-06-18.1",
|
|
41839
41863
|
public: true,
|
|
41840
41864
|
audiences: ["human", "in_app_agent"],
|
|
41841
41865
|
stages: ["staffing"],
|
|
@@ -41908,14 +41932,14 @@ Reopening the builder for a seat whose agent is already live shows its live stat
|
|
|
41908
41932
|
- Parent or Steward seat archived during setup: go-live is blocked until you choose a live parent or reassign the Steward.
|
|
41909
41933
|
- Failed dry run or a declined tool: the draft is preserved; fix the Charter or tool decision and rerun. See the troubleshooting guide.
|
|
41910
41934
|
|
|
41911
|
-
In read-only or demo mode the **Add agent** affordance
|
|
41935
|
+
In read-only or demo mode the **Add agent** affordance never starts a write. The public demo instead replays the add-an-agent journey end to end \u2014 describe the role, watch the draft Charter assemble, see the four safety gates light, and watch a sandbox dry run reach the must-escalate boundary and stop \u2014 then routes go-live to sign-up, because going live is a human decision.`
|
|
41912
41936
|
},
|
|
41913
41937
|
{
|
|
41914
41938
|
slug: "custom-agents-guide",
|
|
41915
41939
|
order: 42,
|
|
41916
41940
|
title: "Design a custom agent",
|
|
41917
41941
|
summary: "How to build a custom agent from operational questions through the Charter Builder, tools, dry run, and go-live without writing prompts.",
|
|
41918
|
-
version: "2026-06-18.
|
|
41942
|
+
version: "2026-06-18.4",
|
|
41919
41943
|
public: true,
|
|
41920
41944
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
41921
41945
|
stages: ["staffing", "charter_design"],
|
|
@@ -41945,15 +41969,23 @@ Begin from the agents surface (**Design a custom agent**) or from the CLI/MCP. T
|
|
|
41945
41969
|
|
|
41946
41970
|
From your answers, the Charter Builder drafts responsibilities, decision authority, Signals, handoffs, and escalation rules. Review and edit every clause. Keep the autonomous scope tight at first; you can grant more authority later once dry runs and evidence justify it.
|
|
41947
41971
|
|
|
41948
|
-
## Choose a lane
|
|
41972
|
+
## Choose a lane and a trigger
|
|
41973
|
+
|
|
41974
|
+
Pick where the agent runs and what starts it. Both lead with a safe default, so a non-technical operator never has to write a raw schedule or reason about an internal lane name.
|
|
41949
41975
|
|
|
41950
41976
|
A custom agent runs on one of three lanes:
|
|
41951
41977
|
|
|
41952
|
-
- **Cloud agent** \u2014 the {{brand}}-managed runtime using the tenant model key.
|
|
41978
|
+
- **Cloud agent** (recommended) \u2014 the {{brand}}-managed runtime using the tenant model key. It needs no local machine, pairing, or token, so it is the default if you are unsure.
|
|
41953
41979
|
- **External MCP agent** \u2014 a Claude Code, Codex, or Cursor agent that connects to {{brand}} as the seat.
|
|
41954
41980
|
- **Local Runner** \u2014 scheduled local execution through a paired Runner.
|
|
41955
41981
|
|
|
41956
|
-
|
|
41982
|
+
Then choose one of three named triggers:
|
|
41983
|
+
|
|
41984
|
+
- **On demand** (default) \u2014 runs only when you or a teammate start it. No schedule.
|
|
41985
|
+
- **Scheduled** \u2014 runs on a recurring cadence you pick (every weekday morning, every morning, weekly, hourly). No cron to write.
|
|
41986
|
+
- **Event** \u2014 runs in response to work routed to it, like a sync or a mention, rather than on a clock.
|
|
41987
|
+
|
|
41988
|
+
Open **Advanced** for the explicit lane select and a raw cron expression when you need a custom cadence. The same schedule presets appear on the agent's seat page after go-live (Agent operations \u2192 Run schedule).
|
|
41957
41989
|
|
|
41958
41990
|
## Configure tools and credentials
|
|
41959
41991
|
|
|
@@ -41971,7 +42003,7 @@ The same path is command-backed:
|
|
|
41971
42003
|
|
|
41972
42004
|
## Dry run and go-live
|
|
41973
42005
|
|
|
41974
|
-
The dry run is a real sandbox rehearsal, not a stamp. It executes a mock-provider run derived from the Charter \u2014 the agent works against sandbox data only and is expected to escalate where the Charter's must-escalate clause requires it. The result is earned: a run that escalates the must-escalate boundary passes; a run that acts on that boundary instead of escalating fails. A failed dry run keeps the draft and shows the reason so you can edit and rerun. The rehearsal returns a transcript \u2014 the steps the agent took and the escalation it raised \u2014 shown step by step in the builder and printed by the CLI, so you can see the governance model working before anything goes live. When the dry run passes, a human promotes the agent live. The dry run rehearses the specific model tier you chose, so once it passes the model is locked \u2014 changing the model requires re-running the dry run on the new model before go-live.
|
|
42006
|
+
The dry run is a real sandbox rehearsal, not a stamp. It executes a mock-provider run derived from the Charter \u2014 the agent works against sandbox data only and is expected to escalate where the Charter's must-escalate clause requires it. The same rehearsal works on all three lanes: cloud, external MCP, and local Runner. External MCP dry runs require an active seat-scoped MCP token; Runner dry runs require a paired Runner. Missing substrate returns a typed precondition error, not a generic failure. The recorded run keeps the agent's actual lane, so the evidence you review matches the lane you selected. The result is earned: a run that escalates the must-escalate boundary passes; a run that acts on that boundary instead of escalating fails. A failed dry run keeps the draft and shows the reason so you can edit and rerun. The rehearsal returns a transcript \u2014 the steps the agent took and the escalation it raised \u2014 shown step by step in the builder and printed by the CLI, so you can see the governance model working before anything goes live. When the dry run passes, a human promotes the agent live. The dry run rehearses the specific model tier you chose, so once it passes the model is locked \u2014 changing the model requires re-running the dry run on the new model before go-live.
|
|
41975
42007
|
|
|
41976
42008
|
## When to stop for confirmation
|
|
41977
42009
|
|
|
@@ -42052,7 +42084,7 @@ Decisions should be recorded as human decisions. Handoffs should attach to seats
|
|
|
42052
42084
|
order: 45,
|
|
42053
42085
|
title: "How agents work",
|
|
42054
42086
|
summary: "How {{brand}} agents operate inside seats, use Charters, report work, and escalate beyond authority.",
|
|
42055
|
-
version: "2026-06-
|
|
42087
|
+
version: "2026-06-19.6",
|
|
42056
42088
|
public: true,
|
|
42057
42089
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42058
42090
|
stages: ["staffing", "operating_rhythm"],
|
|
@@ -42060,6 +42092,7 @@ Decisions should be recorded as human decisions. Handoffs should attach to seats
|
|
|
42060
42092
|
"staffing.assign_agent_dry_run",
|
|
42061
42093
|
"agent.go_live",
|
|
42062
42094
|
"agent.status",
|
|
42095
|
+
"agent.list_fleet",
|
|
42063
42096
|
"agent_setup.get",
|
|
42064
42097
|
"agent_setup.update",
|
|
42065
42098
|
"agent.decommission",
|
|
@@ -42125,16 +42158,29 @@ A seat-scoped MCP token already carries the seat, so its tools (\`rost_get_tasks
|
|
|
42125
42158
|
|
|
42126
42159
|
\`task.accept\`, \`task.decline\`, \`task.complete\`, \`status.record\`, \`work.log\`, and \`escalation.raise\` are all \`none\` \u2014 a seat operates its own queue and reports its own work directly. None of these carry a confirmation gate. An agent still never approves a human's confirmation on another seat's behalf; these are simply the acting seat's own reversible actions.
|
|
42127
42160
|
|
|
42161
|
+
## How a tool call is executed
|
|
42162
|
+
|
|
42163
|
+
The model is only ever offered the tools the seat's manifest grants \u2014 a denied tool is never even shown to it \u2014 and each tool carries its real input schema, so the model knows exactly what shape an action takes. Some model runtimes see SDK-safe aliases such as \`rost_report_status\`; the server maps those back to the canonical manifest name such as \`rost.report_status\` before guard checks, handler execution, and audit. Tool outcomes return to the model as structured tool-result blocks tied to the provider tool-use id, so retries and transcripts stay reconstructible. When the model proposes a tool call:
|
|
42164
|
+
|
|
42165
|
+
1. The manifest guard runs first and decides: allowed, denied, or must-escalate. A denied or must-escalate call never runs the action; an escalation is raised for a human.
|
|
42166
|
+
2. For an allowed call, the proposed input is validated against the tool's schema. Malformed input fails closed \u2014 the action does not run, and the model is told to correct it.
|
|
42167
|
+
3. The action runs bound to the seat's vaulted credential. The secret stays inside the call and never reaches the result, the audit row, the logs, or the model.
|
|
42168
|
+
4. Every call \u2014 allowed, denied, escalated, or invalid \u2014 writes a tool-call audit row you can review.
|
|
42169
|
+
|
|
42170
|
+
Provider requests carry only the model payload the runtime needs; run attribution, tenant attribution, usage, and cost are recorded in {{brand}} audit tables after the call, not sent as custom provider metadata.
|
|
42171
|
+
|
|
42172
|
+
Before an agent goes live, the sandbox dry run rehearses this against fake data and returns a per-tool preview: for each tool the agent would touch, whether it would run it, would be blocked, or would escalate \u2014 no external side effect. Review that preview before you approve go-live.
|
|
42173
|
+
|
|
42128
42174
|
## What humans should review
|
|
42129
42175
|
|
|
42130
|
-
Review the first dry runs, tool-call audit rows, escalations, and Signal impact. If the agent is repeatedly blocked, revise the Charter or split the seat. If the agent is taking too much judgment, narrow its autonomous scope.`
|
|
42176
|
+
Review the first dry runs, fleet overview, tool-call audit rows, escalations, and Signal impact. The fleet view at \`/agents\` shows every staffed agent seat at a glance; the agent-native equivalent is \`{{cli}} command agent.list_fleet --json '{}'\` / \`rost_list_agent_fleet\`, which returns lane, live state, last real turn, 24h/7d real turns, top measurable status, open escalations, and 7-day spend. Scheduled agents are checked in rounded five-minute buckets, so a minute-level cron inside the bucket queues one work order for that bucket rather than one order per minute. Sandbox dry runs do not count as real turns. If the agent is repeatedly blocked, revise the Charter or split the seat. If the agent is taking too much judgment, narrow its autonomous scope.`
|
|
42131
42177
|
},
|
|
42132
42178
|
{
|
|
42133
42179
|
slug: "tool-access-and-vault",
|
|
42134
42180
|
order: 46,
|
|
42135
42181
|
title: "Tool access and vault",
|
|
42136
42182
|
summary: "How to give agents access to tools without exposing raw credentials or expanding authority by accident.",
|
|
42137
|
-
version: "2026-06-
|
|
42183
|
+
version: "2026-06-19.2",
|
|
42138
42184
|
public: true,
|
|
42139
42185
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42140
42186
|
stages: ["staffing"],
|
|
@@ -42174,6 +42220,14 @@ Tool access belongs to the seat, not to a person or a chat session. A tool shoul
|
|
|
42174
42220
|
|
|
42175
42221
|
Connecting a tool is a human-controlled step. The agent can recommend a tool, explain why it is useful, and draft the manifest. A human approves the tool connection and any credentials.
|
|
42176
42222
|
|
|
42223
|
+
## Generic REST connector
|
|
42224
|
+
|
|
42225
|
+
For an API with no dedicated connector, the generic REST tool lets a seat call an HTTP endpoint with a credential you paste through the vault \u2014 no {{brand}}-owned app. It is escalate-by-default: the agent may only call a host a steward has signed onto the allowlist; any other host is refused and escalated, with no request made. The connector sets the Authorization header from the vaulted credential itself \u2014 the agent never sees the token, and the secret is redacted from the response before it reaches the agent, the audit row, or the logs. The token is only ever sent over HTTPS, only to the signed host, and a redirect is never followed \u2014 so an allowlisted endpoint cannot bounce the call (and the token) to another host. A sandbox dry run of a REST tool makes no real request.
|
|
42226
|
+
|
|
42227
|
+
## One write-only credential flow across every surface
|
|
42228
|
+
|
|
42229
|
+
There is exactly one way to give a connected tool its credential, and it is the same on every surface (agent setup, Charter Builder, CLI, MCP). Connecting a tool only authorizes the access \u2014 it never captures a secret. When a connected tool needs a credential, you stage a vault-backed *request* (provider, scope, and a credential name \u2014 all labels, never the secret). You then provide the actual secret separately through the vault-backed ingress flow from Settings. No {{brand}} surface ever has a field that accepts raw secret material, so a secret can never reach a prompt, log, event, or tool argument.
|
|
42230
|
+
|
|
42177
42231
|
## What to check before connecting a tool
|
|
42178
42232
|
|
|
42179
42233
|
- The seat has an active or ready-to-approve Charter.
|
|
@@ -42198,7 +42252,7 @@ Connecting a tool is a human-controlled step. The agent can recommend a tool, ex
|
|
|
42198
42252
|
order: 47,
|
|
42199
42253
|
title: "Available tools guide",
|
|
42200
42254
|
summary: "How to think about tool categories available to seats and what each category should be used for.",
|
|
42201
|
-
version: "2026-06-
|
|
42255
|
+
version: "2026-06-18.1",
|
|
42202
42256
|
public: true,
|
|
42203
42257
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42204
42258
|
stages: ["staffing"],
|
|
@@ -42234,14 +42288,20 @@ Start from the seat's responsibility, not the tool list. If a tool does not dire
|
|
|
42234
42288
|
|
|
42235
42289
|
## How agents should request tools
|
|
42236
42290
|
|
|
42237
|
-
Agents should explain the job, the required tool category, the minimum permission needed, and the escalation boundary. Humans approve or decline the request
|
|
42291
|
+
Agents should explain the job, the required tool category, the minimum permission needed, and the escalation boundary. Humans approve or decline the request.
|
|
42292
|
+
|
|
42293
|
+
## How a tool actually runs
|
|
42294
|
+
|
|
42295
|
+
Every tool call passes the server-side guard first: the guard checks the call against the seat's signed permission manifest and records a tool-call audit row for **every** call \u2014 allowed, denied, or escalated. Tool selection is never authorization. Only an allowed call reaches its handler. A connected credential is bound into the handler for the duration of the call only; the secret never appears in the result, the audit summary, logs, or the model's context.
|
|
42296
|
+
|
|
42297
|
+
External connectors (such as email, drive, or a generic API) are being rolled out provider by provider, conservatively (read and draft before send; write behind approval). Until a provider's connector is live, a tool you select is configuration only and has no external side effect \u2014 the guard and audit trail are already in force, so nothing runs silently.`
|
|
42238
42298
|
},
|
|
42239
42299
|
{
|
|
42240
42300
|
slug: "mcp-and-cli-guide",
|
|
42241
42301
|
order: 48,
|
|
42242
42302
|
title: "CLI and MCP installation guide",
|
|
42243
42303
|
summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
|
|
42244
|
-
version: "2026-06-
|
|
42304
|
+
version: "2026-06-19.4",
|
|
42245
42305
|
public: true,
|
|
42246
42306
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42247
42307
|
stages: ["company_setup", "staffing"],
|
|
@@ -42275,7 +42335,11 @@ Agents should explain the job, the required tool category, the minimum permissio
|
|
|
42275
42335
|
"agent.configure_tools",
|
|
42276
42336
|
"agent.run_dry_run",
|
|
42277
42337
|
"agent.go_live",
|
|
42278
|
-
"agent.status"
|
|
42338
|
+
"agent.status",
|
|
42339
|
+
"agent.list_fleet",
|
|
42340
|
+
"agent.get_run",
|
|
42341
|
+
"agent.list_runs",
|
|
42342
|
+
"agent.list_tool_calls"
|
|
42279
42343
|
],
|
|
42280
42344
|
legal: {
|
|
42281
42345
|
publicRisk: "low",
|
|
@@ -42648,10 +42712,10 @@ These ergonomic wrappers (including the \`{{cli}} agent\` group) require **{{cli
|
|
|
42648
42712
|
| \`{{cli}} escalation list|get|resolve|reject\` | \`escalation.list\`, \`escalation.get\`, \`escalation.resolve\`, \`escalation.reject\` | Work the steward escalation queue. | Steward | \`{{cli}} escalation list --json\` |
|
|
42649
42713
|
| \`{{cli}} sync brief|compile|complete\` | \`sync.brief.get\`, \`sync.brief.compile\`, \`sync.run.complete\` | Compile, read, and complete a weekly Sync. | Tenant | \`{{cli}} sync brief --json\` |
|
|
42650
42714
|
| \`{{cli}} runner list|status|work-orders|revoke\` | \`runner.list\`, \`runner.status\`, \`work_order.list\`, \`runner.revoke\` | Inspect runners and work orders; revoke a runner. | Tenant | \`{{cli}} runner list --json\` |
|
|
42651
|
-
| \`{{cli}} notification settings|test\` | \`notification.settings.get\`, \`notification.test\` | Read notification settings
|
|
42715
|
+
| \`{{cli}} notification settings|test|errors\` | \`notification.settings.get\`, \`notification.test\`, \`notification.list_errors\` | Read notification settings, send a test, and list failed deliveries with linked product error source, seat id, and run id when available. | Tenant | \`{{cli}} notification errors --limit 10 --json\` |
|
|
42652
42716
|
| \`{{cli}} settings get|update\` | \`settings.get\`, \`settings.update\` | Read tenant settings; update budget caps. | Tenant | \`{{cli}} settings get --json\` |
|
|
42653
42717
|
| \`{{cli}} member invite|update|remove\` | \`member.invite\`, \`member.update\`, \`member.remove\` | Manage tenant members. | Tenant | \`{{cli}} member invite --email ops@example.com --role member\` |
|
|
42654
|
-
| \`{{cli}} agent templates|create|setup|tools|dry-run|go-live|status|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.show_markdown\` | Run the full agent setup 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, and show a markdown readout. Create and go-live stop at human gates; the dry-run is ungated by human approval but requires a signed manifest first. | Tenant and seat | \`{{cli}} agent
|
|
42718
|
+
| \`{{cli}} agent templates|create|setup|tools|dry-run|go-live|status|run-now|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.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, read one run's transcript/error diagnostics, and show a markdown readout. Create and go-live stop at human gates; the dry-run is ungated by human approval but requires a signed manifest first. | Tenant and seat | \`{{cli}} agent get-run --seat-id <seat-id> --run-id <run-id> --json\` |
|
|
42655
42719
|
| \`{{cli}} tools list\` | \`tool.catalog\` | List the discoverable tool catalog the builder reads (id, scope tiers, credential requirement, access policy). Configuration only; the tools do not execute yet. | Tenant | \`{{cli}} tools list --json\` |
|
|
42656
42720
|
| \`{{cli}} compass show\` | \`compass.show_markdown\` | Render the current Compass as a clean markdown card for review. | Tenant | \`{{cli}} compass show --markdown\` |
|
|
42657
42721
|
| \`{{cli}} charter show\` | \`charter.show_markdown\` | Render a seat's Charter as a clean markdown card for review. | Tenant | \`{{cli}} charter show --seat-id <id> --markdown\` |
|
|
@@ -42748,6 +42812,11 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
42748
42812
|
| \`rost_get_current_compass\` | \`compass.get_current\` | Read the active and draft Compass versions and source documents. | Tenant | Call with \`{}\`. |
|
|
42749
42813
|
| \`rost_list_compass_gaps\` | \`compass.list_gaps\` | List unanswered and answered Compass context gaps. | Tenant | Call with \`{}\` before answering gaps. |
|
|
42750
42814
|
| \`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>"}\`. |
|
|
42815
|
+
| \`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 \`{}\`; sandbox dry runs are excluded from real turns. |
|
|
42816
|
+
| \`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>"}\`. |
|
|
42817
|
+
| \`rost_list_agent_runs\` | \`agent.list_runs\` | Read a seat's agent run history (status, lane, model, cost, per-run 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. |
|
|
42818
|
+
| \`rost_get_agent_run_diagnostics\` | \`agent.get_run\` | Read one run's diagnostic record: transcript reference, token/cost usage, outcome, and linked product-visible run errors. | Seat or tenant-admin | Call with \`{"seat_id":"<seat-id>","run_id":"<run-id>"}\`. |
|
|
42819
|
+
| \`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. |
|
|
42751
42820
|
| \`rost_list_agent_templates\` | \`agent_template.list\` | List stock agent templates and metadata. | Tenant | Call with \`{}\`. |
|
|
42752
42821
|
| \`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. |
|
|
42753
42822
|
| \`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. |
|
|
@@ -42771,7 +42840,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
42771
42840
|
| \`rost_get_notification_settings\` | \`notification.settings.get\` | Read tenant notification preferences. | Tenant | Call with \`{}\`. |
|
|
42772
42841
|
| \`rost_update_notification_settings\` | \`notification.settings.update\` | Update tenant notification preferences. | Tenant | Call with the fields to change. |
|
|
42773
42842
|
| \`rost_send_test_notification\` | \`notification.test\` | Emit an in-app test notification to the acting human. | Tenant | Call with \`{}\`. |
|
|
42774
|
-
| \`rost_list_notification_errors\` | \`notification.list_errors\` | List recent failed notification deliveries. | Tenant | Call with optional \`limit\`. |
|
|
42843
|
+
| \`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\`. |
|
|
42775
42844
|
| \`rost_invite_member\` | \`member.invite\` | Create a pending tenant invite for a human teammate. | Tenant | Call with \`email\` and \`role\`. |
|
|
42776
42845
|
| \`rost_update_member_role\` | \`member.update\` | Change a tenant member's role. | Tenant | Call with \`member_id\` and \`role\`; expect human confirmation. |
|
|
42777
42846
|
| \`rost_remove_member\` | \`member.remove\` | Remove a tenant member. | Tenant | Call with \`member_id\`; blocked if it would orphan an agent steward chain. |
|
|
@@ -42783,6 +42852,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
42783
42852
|
| \`rost_get_signal\` | \`signal.get\` | Read a measurable with its full reading history. | Seat or tenant-admin | Call with \`{"measurable_id":"<id>"}\`. |
|
|
42784
42853
|
| \`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>"}\`. |
|
|
42785
42854
|
| \`rost_correct_signal_reading\` | \`signal.correct_reading\` | Overwrite a reading with a human-confirmed value. | Seat or tenant-admin | Manual correction; expect confirmation. |
|
|
42855
|
+
| \`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"}\`. |
|
|
42786
42856
|
| \`rost_list_cascade_goals\` | \`goal.list\` | List Cascade goals, optionally by cycle or seat. | Seat or tenant-admin | Call with \`{}\` or \`{"cycle_id":"<id>"}\`. |
|
|
42787
42857
|
| \`rost_create_cascade_goal\` | \`goal.create\` | Create a cycle goal under an objective. | Tenant | Call with cycle, seat, parent, title, definition of done. |
|
|
42788
42858
|
| \`rost_update_cascade_goal\` | \`goal.update\` | Update a goal's title or definition of done. | Tenant | Call with \`goal_id\` and the changed fields. |
|
|
@@ -42852,6 +42922,7 @@ These rows are quick, at-a-glance triage. For deeper auth, tenant, scope, confir
|
|
|
42852
42922
|
- Revoked, **expired**, or invalid MCP token: run \`{{cli}} 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 \u2014 check \`expires_in_days\` in \`{{cli}} command mcp_token.list\`; mint with \`--expires-in <days>\` or \`--no-expiry\` to change it.
|
|
42853
42923
|
- Confirmation required: a human approves from the \`approveVia\` web link or runs the \`{{cli}} command confirmation.approve --json ...\` command shown in the CLI error output (an agent never approves its own request \u2014 see the confirmations-guide).
|
|
42854
42924
|
- 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.
|
|
42925
|
+
- Inference budget hard cap reached (a run stops with a budget precondition error): raise the tenant hard cap with \`{{cli}} 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.
|
|
42855
42926
|
- Need command guidance: run \`{{cli}} docs\`, \`{{cli}} reference search "onboarding"\`, or \`{{cli}} reference get agent-reference-map\`.
|
|
42856
42927
|
- Need MCP guidance: call \`rost_reference_get\` with \`{"slug":"agent-reference-map"}\`.
|
|
42857
42928
|
`
|
|
@@ -42914,7 +42985,11 @@ Never guess a command's JSON shape. Before calling a command that changes state,
|
|
|
42914
42985
|
- List the tool catalog the agent builder reads (id, scope tiers, credential requirement, access policy \u2014 configuration only; the tools do not execute yet): {{cli}} tools list (CLI) or rost_list_tool_catalog (MCP)
|
|
42915
42986
|
- Show a Compass, Charter, or agent setup as a markdown card to review with your human: {{cli}} compass show --markdown, {{cli}} charter show --seat-id <id> --markdown, {{cli}} agent show --seat-id <id> --markdown
|
|
42916
42987
|
|
|
42917
|
-
When a command fails, the error returns a machine-readable code, a message, and a help field naming the exact command to run next. Read the help field and run the command it points at \u2014 do not retry the same call blindly. A failed precondition (for example a manifest not yet signed,
|
|
42988
|
+
When a command fails, the error returns a machine-readable code, a message, and a help field naming the exact command to run next. Read the help field and run the command it points at \u2014 do not retry the same call blindly. A failed precondition (for example a manifest not yet signed, a dry run that has not passed, or the inference budget hard cap reached) returns COMMAND_PRECONDITION_FAILED with a help pointer, not an opaque internal error.
|
|
42989
|
+
|
|
42990
|
+
## Inference budget
|
|
42991
|
+
|
|
42992
|
+
Agents that run on {{brand}}-managed inference draw against a tenant inference budget. A new company starts with a hard cap of $0, so a real managed-inference run is blocked until a human raises the cap with settings.update ({{cli}} settings update --hard-cap-usd <amount>). Hitting the cap returns a typed COMMAND_PRECONDITION_FAILED whose details.reason is budget.hard_cap_exceeded, with a help pointer naming that exact next command \u2014 not a generic internal error. The sandbox dry run is free and is never blocked by the cap, so an agent can be chartered, dry-run, and taken live before any budget is set; only real runs are gated. See settings-guide.
|
|
42918
42993
|
|
|
42919
42994
|
## Standard setup order
|
|
42920
42995
|
|
|
@@ -43045,7 +43120,7 @@ Agents can suggest commitments and report progress. They should not create a new
|
|
|
43045
43120
|
order: 61,
|
|
43046
43121
|
title: "Signal guide",
|
|
43047
43122
|
summary: "How to define and read measurables so the company runs on evidence instead of status theater.",
|
|
43048
|
-
version: "2026-06-18.
|
|
43123
|
+
version: "2026-06-18.2",
|
|
43049
43124
|
public: true,
|
|
43050
43125
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43051
43126
|
stages: ["operating_rhythm"],
|
|
@@ -43056,7 +43131,8 @@ Agents can suggest commitments and report progress. They should not create a new
|
|
|
43056
43131
|
"signal.list",
|
|
43057
43132
|
"signal.get",
|
|
43058
43133
|
"signal.confirm_reading",
|
|
43059
|
-
"signal.correct_reading"
|
|
43134
|
+
"signal.correct_reading",
|
|
43135
|
+
"measurable.create"
|
|
43060
43136
|
],
|
|
43061
43137
|
legal: {
|
|
43062
43138
|
publicRisk: "low",
|
|
@@ -43090,12 +43166,17 @@ Avoid vanity numbers, manual-only status fields, and metrics nobody can act on.
|
|
|
43090
43166
|
## Operate Signal from CLI or MCP
|
|
43091
43167
|
|
|
43092
43168
|
- Read: \`{{cli}} signal list --json\` / \`signal.list\` / \`rost_list_signals\` returns measurables with their latest reading and on/off-track state. \`signal.get\` / \`rost_get_signal\` returns one measurable's full reading history.
|
|
43169
|
+
- Add a measurable: \`measurable.create\` (scope: seat) defines a measurable a seat owns \u2014 name, unit, direction, target, cadence. The seat owns it; readings attach to it afterward.
|
|
43093
43170
|
- Record a reading: \`{{cli}} status record --measurable-id <id> --value <n>\` (\`status.record\`, scope: seat) writes a status event with the reading. This is not gated.
|
|
43094
43171
|
- Confirm a reading: \`{{cli}} signal confirm\` / \`signal.confirm_reading\` / \`rost_confirm_signal_reading\` marks a reading human-verified. \`signal.correct_reading\` / \`rost_correct_signal_reading\` overwrites a reading with a human-confirmed value.
|
|
43095
43172
|
|
|
43173
|
+
## Run Signal without an agent
|
|
43174
|
+
|
|
43175
|
+
A human can run the whole loop from the Signal page. Each measurable has a "Log this period's number" control that records a human reading (the same \`signal.correct_reading\` path), and an "Add a measurable" form creates one against a seat (the \`measurable.create\` path). You do not need an agent to keep Signal current.
|
|
43176
|
+
|
|
43096
43177
|
## When to stop for confirmation
|
|
43097
43178
|
|
|
43098
|
-
\`signal.correct_reading\` is \`human_required\`; overwriting a recorded measurable is a human judgment. \`signal.confirm_reading\` is \`none\`, so a seat can confirm its own readings directly. An agent records readings with evidence; a human corrects when a value is wrong.
|
|
43179
|
+
\`signal.correct_reading\` is \`human_required\`; overwriting a recorded measurable is a human judgment. \`signal.confirm_reading\` is \`none\`, so a seat can confirm its own readings directly. \`measurable.create\` is \`none\` \u2014 defining a measurable is not gated. An agent records readings with evidence; a human corrects when a value is wrong.
|
|
43099
43180
|
|
|
43100
43181
|
## Agent guidance
|
|
43101
43182
|
|
|
@@ -43176,7 +43257,7 @@ Resolving Friction should produce one of four outcomes: a decision, a task, a Ch
|
|
|
43176
43257
|
order: 70,
|
|
43177
43258
|
title: "Steward queue guide",
|
|
43178
43259
|
summary: "How Stewards review escalations, approve agent boundaries, and keep agents accountable.",
|
|
43179
|
-
version: "2026-06-18.
|
|
43260
|
+
version: "2026-06-18.2",
|
|
43180
43261
|
public: true,
|
|
43181
43262
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43182
43263
|
stages: ["staffing", "operating_rhythm"],
|
|
@@ -43211,6 +43292,8 @@ A Steward is the human accountable for an agent seat. The Steward queue is where
|
|
|
43211
43292
|
|
|
43212
43293
|
Read the seat, Charter, evidence, and recommended action. Decide the narrow question first. If the same escalation repeats, revise the Charter rather than answering the same question forever.
|
|
43213
43294
|
|
|
43295
|
+
In the app, the evidence is shown as a legible card, not raw data: a proposed tool call lists the tool and its summarized arguments, and any attached context shows as labeled fields. Values that read like credentials are redacted, so you can decide without seeing secret material.
|
|
43296
|
+
|
|
43214
43297
|
## Work the queue from CLI or MCP
|
|
43215
43298
|
|
|
43216
43299
|
The Steward reads the queue from any surface but decides as a human.
|
|
@@ -43287,7 +43370,7 @@ Stop before: approving a Charter, signing a manifest, connecting a tool or crede
|
|
|
43287
43370
|
order: 72,
|
|
43288
43371
|
title: "Settings guide",
|
|
43289
43372
|
summary: "How to use Settings as the control plane for company access, channels, providers, tokens, and operating defaults.",
|
|
43290
|
-
version: "2026-06-
|
|
43373
|
+
version: "2026-06-18.1",
|
|
43291
43374
|
public: true,
|
|
43292
43375
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43293
43376
|
stages: ["company_setup", "staffing"],
|
|
@@ -43323,6 +43406,14 @@ Start with members and invites, then provider and channel connections, then MCP
|
|
|
43323
43406
|
|
|
43324
43407
|
The weekly Sync Brief compiles either company-wide or per cluster. Company-wide is one brief covering the whole company and is the default for a new company. Per cluster compiles one brief per cluster, scoped to each cluster's seats; pick it when clusters run their own weekly sync. Per cluster falls back to a single company-wide brief when the company has no clusters, so the rhythm never produces zero briefs. The owner sets this at onboarding and can change it later in Settings.
|
|
43325
43408
|
|
|
43409
|
+
## Inference budget
|
|
43410
|
+
|
|
43411
|
+
Agents that run on {{brand}}-managed inference draw against a tenant inference budget with a hard cap. A new company starts with a hard cap of $0, so a managed-inference run is blocked until the cap is raised. When a run hits the cap it stops with a typed budget error that names the fix; raise the cap before agents can run again.
|
|
43412
|
+
|
|
43413
|
+
- Set the hard cap with \`settings.update\` (CLI: \`{{cli}} settings update --hard-cap-usd <amount>\`). The optional soft cap warns before the hard cap and must be less than or equal to it.
|
|
43414
|
+
- The sandbox dry run is free and is never blocked by the cap, so a fresh company can charter, dry-run, and take an agent live before setting a budget. The cap applies only to real managed-inference runs.
|
|
43415
|
+
- A company that brings its own provider key (BYOK) is metered on that key and is not subject to the {{brand}}-managed hard cap.
|
|
43416
|
+
|
|
43326
43417
|
## Agent guidance
|
|
43327
43418
|
|
|
43328
43419
|
Agents may explain which setting is needed and why. They should not ask users to paste secrets into chat or tool arguments. When credentials are required, route the user to the vault-backed setup flow.`
|
|
@@ -43366,7 +43457,7 @@ When a user asks to add a person, clarify whether they mean app access, seat occ
|
|
|
43366
43457
|
order: 74,
|
|
43367
43458
|
title: "Notifications guide",
|
|
43368
43459
|
summary: "How {{brand}} should notify humans about decisions, escalations, stale work, and agent boundaries.",
|
|
43369
|
-
version: "2026-06-
|
|
43460
|
+
version: "2026-06-19.1",
|
|
43370
43461
|
public: true,
|
|
43371
43462
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43372
43463
|
stages: ["operating_rhythm"],
|
|
@@ -43391,6 +43482,10 @@ Notifications should move decisions to the right human without turning {{brand}}
|
|
|
43391
43482
|
- A Friction item needs a decision.
|
|
43392
43483
|
- A Sync decision creates a handoff.
|
|
43393
43484
|
|
|
43485
|
+
## Diagnose failed deliveries
|
|
43486
|
+
|
|
43487
|
+
\`{{cli}} notification errors --limit 10\` / \`notification.list_errors\` / \`rost_list_notification_errors\` returns recent failed deliveries. When a failed notification links to a product error, it includes \`error_log_id\`, \`source\`, and any linked \`seat_id\` / \`run_id\`; \`source=run\` means the notification is tied to an agent run and can be followed with \`agent.get_run\` for the transcript reference and run errors.
|
|
43488
|
+
|
|
43394
43489
|
## Keep notifications useful
|
|
43395
43490
|
|
|
43396
43491
|
Every notification should include the seat, cause, evidence, and requested decision. Avoid status-only messages when no action is needed.`
|
|
@@ -43400,7 +43495,7 @@ Every notification should include the seat, cause, evidence, and requested decis
|
|
|
43400
43495
|
order: 75,
|
|
43401
43496
|
title: "Local runner guide",
|
|
43402
43497
|
summary: "How local agent sessions and runner surfaces should operate through {{brand}} without bypassing Charters or audit.",
|
|
43403
|
-
version: "2026-06-
|
|
43498
|
+
version: "2026-06-19.2",
|
|
43404
43499
|
public: true,
|
|
43405
43500
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43406
43501
|
stages: ["staffing", "operating_rhythm"],
|
|
@@ -43430,12 +43525,22 @@ The local runner is for human-controlled local agent work. It should retrieve {{
|
|
|
43430
43525
|
|
|
43431
43526
|
- Pair a new runner: \`runner.pairing.start\` / \`rost_start_runner_pairing\` with \`name\` and \`platform\` returns a human pairing code.
|
|
43432
43527
|
- Inspect: \`{{cli}} runner list --json\` / \`runner.list\` / \`rost_list_runners\` shows online/offline/revoked state; \`{{cli}} runner status\` / \`runner.status\` / \`rost_runner_status\` reads one runner.
|
|
43433
|
-
- Work orders: \`{{cli}} runner work-orders\` / \`work_order.list\` / \`rost_list_work_orders\`; queue with \`work_order.enqueue\` / \`rost_enqueue_work_order\` for a live scheduled agent; cancel with \`work_order.cancel\` / \`rost_cancel_work_order\`.
|
|
43528
|
+
- Work orders: \`{{cli}} runner work-orders\` / \`work_order.list\` / \`rost_list_work_orders\`; queue with \`work_order.enqueue\` / \`rost_enqueue_work_order\` for a live scheduled agent, or use \`agent.run_now\` / \`rost_run_agent_now\` when an operator wants the product to queue and dispatch an immediate live run from a seat id; cancel with \`work_order.cancel\` / \`rost_cancel_work_order\`.
|
|
43434
43529
|
- Revoke: \`{{cli}} runner revoke\` / \`runner.revoke\` / \`rost_revoke_runner\` so a runner can no longer authenticate.
|
|
43435
43530
|
|
|
43531
|
+
## Owner-initiated headless pairing
|
|
43532
|
+
|
|
43533
|
+
Use this flow when a headless or desktop runner cannot use the interactive web confirmation flow.
|
|
43534
|
+
|
|
43535
|
+
1. The owner runs \`runner.pairing.start\` or \`rost_start_runner_pairing\` with the runner \`name\` and \`platform\`.
|
|
43536
|
+
2. The owner gives the returned \`user_code\` to the runner through a trusted out-of-band channel.
|
|
43537
|
+
3. The runner calls \`POST /api/runner/pairing/claim\` with \`{"user_code":"ABCD-2345"}\`.
|
|
43538
|
+
4. The response returns \`runner_id\`, \`runner_secret\`, \`name\`, and \`platform\`. Store the runner secret only on the runner machine.
|
|
43539
|
+
5. The runner sends heartbeats with \`Authorization: Bearer <runner_secret>\` and then claims work orders.
|
|
43540
|
+
|
|
43436
43541
|
## When to stop for confirmation
|
|
43437
43542
|
|
|
43438
|
-
\`runner.revoke\` and \`work_order.cancel\` are \`human_required\`; \`runner.pairing.start\` and \`
|
|
43543
|
+
\`runner.revoke\` and \`work_order.cancel\` are \`human_required\`; \`runner.pairing.start\`, \`work_order.enqueue\`, and \`agent.run_now\` are \`none\`, so an operator can pair a runner and queue work directly. List and status reads are not gated. Revoking a runner or cancelling work is the human-approved act. An agent inspects runner state and proposes the action.
|
|
43439
43544
|
|
|
43440
43545
|
## Guardrails
|
|
43441
43546
|
|
|
@@ -44907,6 +45012,17 @@ function optionalValue(parsed, key) {
|
|
|
44907
45012
|
const value = parsed.values.get(key);
|
|
44908
45013
|
return value === void 0 || value.length === 0 ? void 0 : value;
|
|
44909
45014
|
}
|
|
45015
|
+
function optionalNumber(parsed, key) {
|
|
45016
|
+
const raw = optionalValue(parsed, key);
|
|
45017
|
+
if (raw === void 0) {
|
|
45018
|
+
return void 0;
|
|
45019
|
+
}
|
|
45020
|
+
const parsedNumber = Number(raw);
|
|
45021
|
+
if (!Number.isSafeInteger(parsedNumber)) {
|
|
45022
|
+
throw new UsageError(`--${key} must be an integer.`);
|
|
45023
|
+
}
|
|
45024
|
+
return parsedNumber;
|
|
45025
|
+
}
|
|
44910
45026
|
function parseNumber(parsed, key, options) {
|
|
44911
45027
|
const raw = parsed.values.get(key);
|
|
44912
45028
|
if (raw === void 0 || raw.length === 0) {
|
|
@@ -45509,12 +45625,27 @@ var notificationWrapper = (context, args) => dispatch(context, "notification", a
|
|
|
45509
45625
|
const record2 = asRecord(output);
|
|
45510
45626
|
return `Test notification ${field(record2, "notification_id")} (delivered=${field(record2, "delivered")}).`;
|
|
45511
45627
|
});
|
|
45628
|
+
},
|
|
45629
|
+
errors: (ctx, rest) => {
|
|
45630
|
+
const parsed = parseFlags(rest);
|
|
45631
|
+
const body = withOptional({}, { limit: optionalNumber(parsed, "limit") });
|
|
45632
|
+
return execute(ctx, parsed, "notification.list_errors", body, (output) => {
|
|
45633
|
+
const errors = asArray(asRecord(output).errors);
|
|
45634
|
+
if (errors.length === 0) {
|
|
45635
|
+
return "No failed notification deliveries.";
|
|
45636
|
+
}
|
|
45637
|
+
return errors.map((entry) => {
|
|
45638
|
+
const record2 = asRecord(entry);
|
|
45639
|
+
return `${field(record2, "created_at")} ${field(record2, "channel")} source=${field(record2, "source")} seat=${field(record2, "seat_id")} run=${field(record2, "run_id")} ${field(record2, "error_message")}`;
|
|
45640
|
+
}).join("\n");
|
|
45641
|
+
});
|
|
45512
45642
|
}
|
|
45513
45643
|
}, notificationUsage(context.binName));
|
|
45514
45644
|
function notificationUsage(bin) {
|
|
45515
|
-
return `Usage: ${bin} notification settings|test [--json]
|
|
45645
|
+
return `Usage: ${bin} notification settings|test|errors [--json]
|
|
45516
45646
|
${bin} notification settings
|
|
45517
|
-
${bin} notification test
|
|
45647
|
+
${bin} notification test
|
|
45648
|
+
${bin} notification errors [--limit <n>]`;
|
|
45518
45649
|
}
|
|
45519
45650
|
var settingsWrapper = (context, args) => dispatch(context, "settings", args, {
|
|
45520
45651
|
get: (ctx, rest) => {
|
|
@@ -45705,6 +45836,31 @@ ${field(record2, "summary")}`;
|
|
|
45705
45836
|
return `agent seat ${field(record2, "seat_id")} status=${field(record2, "status")} live=${field(record2, "live")} lane=${field(record2, "lane")}`;
|
|
45706
45837
|
});
|
|
45707
45838
|
},
|
|
45839
|
+
"run-now": (ctx, rest) => {
|
|
45840
|
+
const parsed = parseFlags(rest);
|
|
45841
|
+
const body = withOptional({ seat_id: requireValue2(parsed, "seat-id") }, {
|
|
45842
|
+
task_id: optionalValue(parsed, "task-id")
|
|
45843
|
+
});
|
|
45844
|
+
return execute(ctx, parsed, "agent.run_now", body, (output) => {
|
|
45845
|
+
const workOrder = asRecord(asRecord(output).work_order);
|
|
45846
|
+
return `queued ${field(workOrder, "lane")} work order ${field(workOrder, "id")} for agent ${field(workOrder, "agent_id")} (${field(workOrder, "status")})`;
|
|
45847
|
+
});
|
|
45848
|
+
},
|
|
45849
|
+
"get-run": (ctx, rest) => {
|
|
45850
|
+
const parsed = parseFlags(rest);
|
|
45851
|
+
const body = {
|
|
45852
|
+
seat_id: requireValue2(parsed, "seat-id"),
|
|
45853
|
+
run_id: requireValue2(parsed, "run-id")
|
|
45854
|
+
};
|
|
45855
|
+
return execute(ctx, parsed, "agent.get_run", body, (output) => {
|
|
45856
|
+
const run2 = asRecord(asRecord(output).run);
|
|
45857
|
+
const errors = asArray(run2.error_logs);
|
|
45858
|
+
const errorLine = errors.length === 0 ? "errors=0" : `errors=${errors.length} first=${field(asRecord(errors[0]), "message")}`;
|
|
45859
|
+
return `run ${field(run2, "run_id")} status=${field(run2, "status")} lane=${field(run2, "lane")} cost=$${field(run2, "cost_usd")}
|
|
45860
|
+
transcript=${field(run2, "transcript_ref")}
|
|
45861
|
+
${errorLine}`;
|
|
45862
|
+
});
|
|
45863
|
+
},
|
|
45708
45864
|
// DER-787 (H8): markdown readout for a seat's agent setup. `--markdown` (or
|
|
45709
45865
|
// default) prints the composed card; `--json` returns the { markdown } object.
|
|
45710
45866
|
show: (ctx, rest) => {
|
|
@@ -45731,7 +45887,7 @@ function agentConfigureTools(ctx, rest, decision) {
|
|
|
45731
45887
|
});
|
|
45732
45888
|
}
|
|
45733
45889
|
function agentUsage(bin) {
|
|
45734
|
-
return `Usage: ${bin} agent templates|create|setup|tools|dry-run|go-live|status|show [--json]
|
|
45890
|
+
return `Usage: ${bin} agent templates|create|setup|tools|dry-run|go-live|status|run-now|get-run|show [--json]
|
|
45735
45891
|
${bin} agent templates
|
|
45736
45892
|
${bin} agent create --seat-id <id> --template <slug> [--expected-version <v>]
|
|
45737
45893
|
${bin} agent create --seat-id <id> --custom [--steward-seat-id <id>] [--lane cloud|mcp_session|runner] [--model triage|balanced|complex|hardest|<id>] [--effort low|medium|high|xhigh|max] [--owns <text>] [--success <text>] [--never-alone <text>]
|
|
@@ -45741,6 +45897,8 @@ function agentUsage(bin) {
|
|
|
45741
45897
|
${bin} agent dry-run --seat-id <id> --charter-version-id <id>
|
|
45742
45898
|
${bin} agent go-live --seat-id <id> --charter-version-id <id>
|
|
45743
45899
|
${bin} agent status --seat-id <id>
|
|
45900
|
+
${bin} agent run-now --seat-id <id> [--task-id <id>]
|
|
45901
|
+
${bin} agent get-run --seat-id <id> --run-id <id>
|
|
45744
45902
|
${bin} agent show --seat-id <id> [--markdown]`;
|
|
45745
45903
|
}
|
|
45746
45904
|
function agentSetupUsage(bin) {
|
|
@@ -45879,10 +46037,10 @@ function operationUsageLines(bin) {
|
|
|
45879
46037
|
`${bin} escalation list|get|resolve|reject`,
|
|
45880
46038
|
`${bin} sync brief|compile|complete`,
|
|
45881
46039
|
`${bin} runner list|status|work-orders|revoke`,
|
|
45882
|
-
`${bin} notification settings|test`,
|
|
46040
|
+
`${bin} notification settings|test|errors`,
|
|
45883
46041
|
`${bin} settings get|update`,
|
|
45884
46042
|
`${bin} member invite|update|remove`,
|
|
45885
|
-
`${bin} agent templates|create|setup|tools|dry-run|go-live|status|show`,
|
|
46043
|
+
`${bin} agent templates|create|setup|tools|dry-run|go-live|status|run-now|get-run|show`,
|
|
45886
46044
|
`${bin} tools list`,
|
|
45887
46045
|
`${bin} compass show`,
|
|
45888
46046
|
`${bin} charter show`
|