@rosthq/cli 0.5.6 → 0.5.8
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 +186 -59
- package/dist/index.js.map +2 -2
- package/dist/operations.d.ts.map +1 -1
- package/package.json +1 -1
- package/prompts/how-tos/human-confirmations.md +2 -0
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-
|
|
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.
|
|
@@ -41584,14 +41593,14 @@ The Compass is drafted, then activated by a human through supersession.
|
|
|
41584
41593
|
|
|
41585
41594
|
## When to stop for confirmation
|
|
41586
41595
|
|
|
41587
|
-
\`onboarding.
|
|
41596
|
+
\`onboarding.finish\`, \`compass.approve_version\`, \`compass.reject_draft\`, and \`compass.set\` are \`human_required\`. \`onboarding.advance_step\`, \`onboarding.create_invite\`, \`onboarding.attach_reference\`, \`compass.answer_gap\`, and drafting a Compass are \`none\` \u2014 none of them returns a pending confirmation. \`none\` is not the same as "agent-callable", though: \`onboarding.create_invite\` and \`compass.answer_gap\` record the human who ran them, so they run as a person, not from an agent session, while advancing a step, attaching a reference, and drafting a Compass are safe for an agent. Approving a version (a supersession) is a human act. The agent drafts and surfaces the approve link. See the confirmations guide.`
|
|
41588
41597
|
},
|
|
41589
41598
|
{
|
|
41590
41599
|
slug: "responsibility-graph-playbook",
|
|
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-
|
|
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.
|
|
@@ -41688,7 +41704,7 @@ It ends every occupancy, archives the seat's active Charter, revokes the seat's
|
|
|
41688
41704
|
|
|
41689
41705
|
## When to stop for confirmation
|
|
41690
41706
|
|
|
41691
|
-
\`seat.
|
|
41707
|
+
\`seat.reparent\`, \`seat.set_type\`, and \`seat.decommission\` are \`human_required\`; \`seat.create\` and \`seat.rename\` are \`none\`, so an agent can add and rename seats directly. The structural commands return a pending confirmation with an approve link over MCP instead of mutating; the human approves with \`confirmation.approve\`. Never approve your own structural change from an agent session \u2014 surface the pending confirmation to a human. When a seat-targeted command does execute, its audit row is scoped to that seat (queryable by \`seat_id\`); on the deferred MCP path the executed audit is recorded against the human's \`confirmation.approve\`. See the confirmations guide.
|
|
41692
41708
|
|
|
41693
41709
|
## Agent guidance
|
|
41694
41710
|
|
|
@@ -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.1",
|
|
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.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}} 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 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\`, \`
|
|
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-
|
|
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,18 +42003,18 @@ The same path is command-backed:
|
|
|
41971
42003
|
|
|
41972
42004
|
## Dry run and go-live
|
|
41973
42005
|
|
|
41974
|
-
The
|
|
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
|
|
|
41978
|
-
\`agent.create_custom\`, \`
|
|
42010
|
+
\`agent.create_custom\`, \`charter.sign_manifest\`, \`staffing.assign_user\`, and \`agent.go_live\` 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.run_dry_run\` is ungated by human approval but **requires a signed manifest first** \u2014 a dry run before \`charter.sign_manifest\` returns a clean \`COMMAND_PRECONDITION_FAILED\` pointing at \`charter.sign_manifest\`. The go-live after a passed dry run is \`human_required\`. An agent may draft, configure (with vault refs), and dry-run; only a human approves the Charter, manifest, credentials, and go-live. A seat token can never create or approve its own setup. See the confirmations guide.`
|
|
41979
42011
|
},
|
|
41980
42012
|
{
|
|
41981
42013
|
slug: "sync-rhythm-playbook",
|
|
41982
42014
|
order: 80,
|
|
41983
42015
|
title: "Sync rhythm playbook",
|
|
41984
42016
|
summary: "How Signal, Friction, Cascade, and Sync Briefs turn weekly meetings into decision time.",
|
|
41985
|
-
version: "2026-06-
|
|
42017
|
+
version: "2026-06-18.1",
|
|
41986
42018
|
public: true,
|
|
41987
42019
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
41988
42020
|
stages: ["operating_rhythm"],
|
|
@@ -42041,7 +42073,7 @@ Start with the exceptions, not a tour of every seat. Resolve the highest-value F
|
|
|
42041
42073
|
|
|
42042
42074
|
## When to stop for confirmation
|
|
42043
42075
|
|
|
42044
|
-
\`sync.run.start\`, \`sync.run.complete\`, and \`sync.item.assign\` are
|
|
42076
|
+
\`sync.brief.compile\`, \`sync.brief.get\`, \`sync.run.start\`, \`sync.run.complete\`, and \`sync.item.assign\` are all \`none\`, so a tenant-admin seat runs the weekly rhythm directly without a per-action human gate. An agent can compile the brief and propose assignments ahead of the meeting; the human still owns the meeting and the decisions made in it, but {{brand}} does not force a confirmation on these commands themselves.
|
|
42045
42077
|
|
|
42046
42078
|
## After Sync
|
|
42047
42079
|
|
|
@@ -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.4",
|
|
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",
|
|
@@ -42123,18 +42156,29 @@ A seat-scoped MCP token or the CLI runs the hand-shaped protocol. The server sti
|
|
|
42123
42156
|
|
|
42124
42157
|
A seat-scoped MCP token already carries the seat, so its tools (\`rost_get_tasks\`, \u2026) need no seat argument. A tenant or owner CLI **session** does not, so pass \`--seat <seat-id>\` on seat-operating wrappers (an owner can target any seat in the tenant; a member only a seat they occupy). See "Seat scope" below.
|
|
42125
42158
|
|
|
42126
|
-
\`task.accept\`, \`task.decline\`,
|
|
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.
|
|
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
|
+
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.
|
|
42127
42171
|
|
|
42128
42172
|
## What humans should review
|
|
42129
42173
|
|
|
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.`
|
|
42174
|
+
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. 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
42175
|
},
|
|
42132
42176
|
{
|
|
42133
42177
|
slug: "tool-access-and-vault",
|
|
42134
42178
|
order: 46,
|
|
42135
42179
|
title: "Tool access and vault",
|
|
42136
42180
|
summary: "How to give agents access to tools without exposing raw credentials or expanding authority by accident.",
|
|
42137
|
-
version: "2026-06-
|
|
42181
|
+
version: "2026-06-19.2",
|
|
42138
42182
|
public: true,
|
|
42139
42183
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42140
42184
|
stages: ["staffing"],
|
|
@@ -42174,6 +42218,14 @@ Tool access belongs to the seat, not to a person or a chat session. A tool shoul
|
|
|
42174
42218
|
|
|
42175
42219
|
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
42220
|
|
|
42221
|
+
## Generic REST connector
|
|
42222
|
+
|
|
42223
|
+
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.
|
|
42224
|
+
|
|
42225
|
+
## One write-only credential flow across every surface
|
|
42226
|
+
|
|
42227
|
+
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.
|
|
42228
|
+
|
|
42177
42229
|
## What to check before connecting a tool
|
|
42178
42230
|
|
|
42179
42231
|
- The seat has an active or ready-to-approve Charter.
|
|
@@ -42185,20 +42237,20 @@ Connecting a tool is a human-controlled step. The agent can recommend a tool, ex
|
|
|
42185
42237
|
## Connect tools and credentials from CLI or MCP
|
|
42186
42238
|
|
|
42187
42239
|
- Stage tools on a draft agent: \`agent.configure_tools\` / \`rost_configure_agent_tools\` \u2014 connect or decline proposed tools and stage credential-ingress requests. Pass vault references, never raw secret material.
|
|
42188
|
-
- Store a secret: \`credential.ingress\` / \`rost_store_credential\` (scope: seat) persists only a vault reference.
|
|
42240
|
+
- Store a secret: \`credential.ingress\` / \`rost_store_credential\` (scope: seat) persists only a vault reference. \`credential.ingress\` is \`credential_flow\` \u2014 it returns a pending confirmation and runs only with a real human-provided secret, captured as a vault reference. (Because it redacts that secret, the pending confirmation also shows a high-risk badge \u2014 see the confirmations guide for badge-versus-level.)
|
|
42189
42241
|
- Sign the manifest: \`charter.sign_manifest\` / \`rost_sign_charter_manifest\` requests human confirmation for the seat's permission manifest.
|
|
42190
|
-
- Mint local access: prefer \`{{cli}} mcp install\` for users; \`mcp_token.create\` is \`
|
|
42242
|
+
- Mint local access: prefer \`{{cli}} mcp install\` for users; \`mcp_token.create\` is \`human_required\` and returns the token once. List metadata with \`mcp_token.list\` (never token material); revoke with \`mcp_token.revoke\`.
|
|
42191
42243
|
|
|
42192
42244
|
## When to stop for confirmation
|
|
42193
42245
|
|
|
42194
|
-
\`credential.ingress\` and \`
|
|
42246
|
+
\`credential.ingress\` and \`agent.configure_tools\` are \`credential_flow\`; \`charter.sign_manifest\`, \`mcp_token.create\`, and \`mcp_token.revoke\` are \`human_required\`. Connecting a tool, storing a credential, or minting a token is a human-approved act. An agent drafts and explains; a human approves through the confirmation flow. Secrets never appear in prompts, logs, tool arguments, or an \`args_summary\`. See the confirmations guide.`
|
|
42195
42247
|
},
|
|
42196
42248
|
{
|
|
42197
42249
|
slug: "available-tools-guide",
|
|
42198
42250
|
order: 47,
|
|
42199
42251
|
title: "Available tools guide",
|
|
42200
42252
|
summary: "How to think about tool categories available to seats and what each category should be used for.",
|
|
42201
|
-
version: "2026-06-
|
|
42253
|
+
version: "2026-06-18.1",
|
|
42202
42254
|
public: true,
|
|
42203
42255
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42204
42256
|
stages: ["staffing"],
|
|
@@ -42234,14 +42286,20 @@ Start from the seat's responsibility, not the tool list. If a tool does not dire
|
|
|
42234
42286
|
|
|
42235
42287
|
## How agents should request tools
|
|
42236
42288
|
|
|
42237
|
-
Agents should explain the job, the required tool category, the minimum permission needed, and the escalation boundary. Humans approve or decline the request
|
|
42289
|
+
Agents should explain the job, the required tool category, the minimum permission needed, and the escalation boundary. Humans approve or decline the request.
|
|
42290
|
+
|
|
42291
|
+
## How a tool actually runs
|
|
42292
|
+
|
|
42293
|
+
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.
|
|
42294
|
+
|
|
42295
|
+
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
42296
|
},
|
|
42239
42297
|
{
|
|
42240
42298
|
slug: "mcp-and-cli-guide",
|
|
42241
42299
|
order: 48,
|
|
42242
42300
|
title: "CLI and MCP installation guide",
|
|
42243
42301
|
summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
|
|
42244
|
-
version: "2026-06-
|
|
42302
|
+
version: "2026-06-19.3",
|
|
42245
42303
|
public: true,
|
|
42246
42304
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42247
42305
|
stages: ["company_setup", "staffing"],
|
|
@@ -42275,7 +42333,10 @@ Agents should explain the job, the required tool category, the minimum permissio
|
|
|
42275
42333
|
"agent.configure_tools",
|
|
42276
42334
|
"agent.run_dry_run",
|
|
42277
42335
|
"agent.go_live",
|
|
42278
|
-
"agent.status"
|
|
42336
|
+
"agent.status",
|
|
42337
|
+
"agent.list_fleet",
|
|
42338
|
+
"agent.list_runs",
|
|
42339
|
+
"agent.list_tool_calls"
|
|
42279
42340
|
],
|
|
42280
42341
|
legal: {
|
|
42281
42342
|
publicRisk: "low",
|
|
@@ -42651,7 +42712,7 @@ These ergonomic wrappers (including the \`{{cli}} agent\` group) require **{{cli
|
|
|
42651
42712
|
| \`{{cli}} notification settings|test\` | \`notification.settings.get\`, \`notification.test\` | Read notification settings; send a test. | Tenant | \`{{cli}} notification settings --json\` |
|
|
42652
42713
|
| \`{{cli}} settings get|update\` | \`settings.get\`, \`settings.update\` | Read tenant settings; update budget caps. | Tenant | \`{{cli}} settings get --json\` |
|
|
42653
42714
|
| \`{{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 templates --json\` |
|
|
42715
|
+
| \`{{cli}} agent templates|create|setup|tools|dry-run|go-live|status|run-now|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.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, 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 templates --json\` |
|
|
42655
42716
|
| \`{{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
42717
|
| \`{{cli}} compass show\` | \`compass.show_markdown\` | Render the current Compass as a clean markdown card for review. | Tenant | \`{{cli}} compass show --markdown\` |
|
|
42657
42718
|
| \`{{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 +42809,10 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
42748
42809
|
| \`rost_get_current_compass\` | \`compass.get_current\` | Read the active and draft Compass versions and source documents. | Tenant | Call with \`{}\`. |
|
|
42749
42810
|
| \`rost_list_compass_gaps\` | \`compass.list_gaps\` | List unanswered and answered Compass context gaps. | Tenant | Call with \`{}\` before answering gaps. |
|
|
42750
42811
|
| \`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>"}\`. |
|
|
42812
|
+
| \`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. |
|
|
42813
|
+
| \`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>"}\`. |
|
|
42814
|
+
| \`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. |
|
|
42815
|
+
| \`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
42816
|
| \`rost_list_agent_templates\` | \`agent_template.list\` | List stock agent templates and metadata. | Tenant | Call with \`{}\`. |
|
|
42752
42817
|
| \`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
42818
|
| \`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. |
|
|
@@ -42755,6 +42820,8 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
42755
42820
|
| \`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. |
|
|
42756
42821
|
| \`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. |
|
|
42757
42822
|
| \`rost_decommission_agent\` | \`agent.decommission\` | Retire an agent occupancy safely (no-orphan guarded). | Tenant | Call with \`agent_id\`; expect human confirmation. |
|
|
42823
|
+
| \`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. |
|
|
42824
|
+
| \`rost_resume_agent\` | \`agent.resume\` | Resume a paused agent back to live (no-orphan guarded). | Tenant | Call with \`seat_id\`; expect human confirmation. |
|
|
42758
42825
|
| \`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. |
|
|
42759
42826
|
| \`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. |
|
|
42760
42827
|
| \`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. |
|
|
@@ -42781,6 +42848,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
42781
42848
|
| \`rost_get_signal\` | \`signal.get\` | Read a measurable with its full reading history. | Seat or tenant-admin | Call with \`{"measurable_id":"<id>"}\`. |
|
|
42782
42849
|
| \`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>"}\`. |
|
|
42783
42850
|
| \`rost_correct_signal_reading\` | \`signal.correct_reading\` | Overwrite a reading with a human-confirmed value. | Seat or tenant-admin | Manual correction; expect confirmation. |
|
|
42851
|
+
| \`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"}\`. |
|
|
42784
42852
|
| \`rost_list_cascade_goals\` | \`goal.list\` | List Cascade goals, optionally by cycle or seat. | Seat or tenant-admin | Call with \`{}\` or \`{"cycle_id":"<id>"}\`. |
|
|
42785
42853
|
| \`rost_create_cascade_goal\` | \`goal.create\` | Create a cycle goal under an objective. | Tenant | Call with cycle, seat, parent, title, definition of done. |
|
|
42786
42854
|
| \`rost_update_cascade_goal\` | \`goal.update\` | Update a goal's title or definition of done. | Tenant | Call with \`goal_id\` and the changed fields. |
|
|
@@ -42791,7 +42859,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
42791
42859
|
| \`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\`. |
|
|
42792
42860
|
| \`rost_resolve_friction_issue\` | \`friction.resolve\` | Resolve an issue with a root cause and remediation task. | Tenant | Human decision; expect confirmation. |
|
|
42793
42861
|
| \`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\`. |
|
|
42794
|
-
| \`rost_create_task\` | \`task.create\` | Create a task (a commitment between seats). | Seat or tenant-admin |
|
|
42862
|
+
| \`rost_create_task\` | \`task.create\` | Create a task (a commitment between seats). | Seat or tenant-admin | \`none\` \u2014 created directly; the owning seat accepts or declines. |
|
|
42795
42863
|
| \`rost_compile_sync_brief\` | \`sync.brief.compile\` | Compile the weekly Sync Brief (idempotent per period). | Tenant | Call with \`{}\`. |
|
|
42796
42864
|
| \`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>"}\`. |
|
|
42797
42865
|
| \`rost_start_sync_run\` | \`sync.run.start\` | Ensure a Sync Brief exists so the meeting can begin. | Tenant | Call with \`{}\`. |
|
|
@@ -42850,6 +42918,7 @@ These rows are quick, at-a-glance triage. For deeper auth, tenant, scope, confir
|
|
|
42850
42918
|
- 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.
|
|
42851
42919
|
- 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).
|
|
42852
42920
|
- 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.
|
|
42921
|
+
- 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.
|
|
42853
42922
|
- Need command guidance: run \`{{cli}} docs\`, \`{{cli}} reference search "onboarding"\`, or \`{{cli}} reference get agent-reference-map\`.
|
|
42854
42923
|
- Need MCP guidance: call \`rost_reference_get\` with \`{"slug":"agent-reference-map"}\`.
|
|
42855
42924
|
`
|
|
@@ -42859,7 +42928,7 @@ These rows are quick, at-a-glance triage. For deeper auth, tenant, scope, confir
|
|
|
42859
42928
|
order: 49,
|
|
42860
42929
|
title: "Agent reference map",
|
|
42861
42930
|
summary: "Where CLI sessions, MCP clients, and in-app agents should retrieve {{brand}} guidance before recommending setup changes.",
|
|
42862
|
-
version: "2026-06-
|
|
42931
|
+
version: "2026-06-18.1",
|
|
42863
42932
|
public: true,
|
|
42864
42933
|
audiences: ["cli", "mcp", "in_app_agent"],
|
|
42865
42934
|
stages: ["company_setup", "graph_design", "charter_design", "staffing", "operating_rhythm"],
|
|
@@ -42910,9 +42979,13 @@ Never guess a command's JSON shape. Before calling a command that changes state,
|
|
|
42910
42979
|
- List every callable command: {{cli}} command list (CLI) or rost_list_commands (MCP)
|
|
42911
42980
|
- Read one command's exact input/output schema, help pointer, and a worked example: {{cli}} command schema <id> (CLI) or rost_describe_command with {"command_id":"<id>"} (MCP)
|
|
42912
42981
|
- 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)
|
|
42913
|
-
- Show a Compass, Charter, or agent setup as a markdown card to review with your human: {{cli}} compass show --markdown, {{cli}} charter show <
|
|
42982
|
+
- 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
|
|
42914
42983
|
|
|
42915
|
-
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,
|
|
42984
|
+
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.
|
|
42985
|
+
|
|
42986
|
+
## Inference budget
|
|
42987
|
+
|
|
42988
|
+
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.
|
|
42916
42989
|
|
|
42917
42990
|
## Standard setup order
|
|
42918
42991
|
|
|
@@ -42978,7 +43051,7 @@ Retrieve the narrowest relevant guide before making a setup recommendation. Pref
|
|
|
42978
43051
|
order: 60,
|
|
42979
43052
|
title: "Cascade guide",
|
|
42980
43053
|
summary: "How to connect company goals to seat-level work without turning {{brand}} into a project-management tool.",
|
|
42981
|
-
version: "2026-06-
|
|
43054
|
+
version: "2026-06-18.1",
|
|
42982
43055
|
public: true,
|
|
42983
43056
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42984
43057
|
stages: ["operating_rhythm"],
|
|
@@ -43032,7 +43105,7 @@ Do not put every task into Cascade. Small errands, private notes, and work with
|
|
|
43032
43105
|
|
|
43033
43106
|
## When to stop for confirmation
|
|
43034
43107
|
|
|
43035
|
-
\`goal.
|
|
43108
|
+
\`goal.reparent\` and \`goal.drop\` are \`human_required\`; \`goal.create\`, \`goal.set_status\`, and \`goal.update\` are \`none\`, so a seat can add goals and update their status directly. Moving or dropping a goal changes how the company reads its own progress, so it returns a pending confirmation over MCP. An agent proposes the branch and surfaces the approve link; a human decides.
|
|
43036
43109
|
|
|
43037
43110
|
## Agent guidance
|
|
43038
43111
|
|
|
@@ -43043,7 +43116,7 @@ Agents can suggest commitments and report progress. They should not create a new
|
|
|
43043
43116
|
order: 61,
|
|
43044
43117
|
title: "Signal guide",
|
|
43045
43118
|
summary: "How to define and read measurables so the company runs on evidence instead of status theater.",
|
|
43046
|
-
version: "2026-06-
|
|
43119
|
+
version: "2026-06-18.2",
|
|
43047
43120
|
public: true,
|
|
43048
43121
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43049
43122
|
stages: ["operating_rhythm"],
|
|
@@ -43054,7 +43127,8 @@ Agents can suggest commitments and report progress. They should not create a new
|
|
|
43054
43127
|
"signal.list",
|
|
43055
43128
|
"signal.get",
|
|
43056
43129
|
"signal.confirm_reading",
|
|
43057
|
-
"signal.correct_reading"
|
|
43130
|
+
"signal.correct_reading",
|
|
43131
|
+
"measurable.create"
|
|
43058
43132
|
],
|
|
43059
43133
|
legal: {
|
|
43060
43134
|
publicRisk: "low",
|
|
@@ -43088,12 +43162,17 @@ Avoid vanity numbers, manual-only status fields, and metrics nobody can act on.
|
|
|
43088
43162
|
## Operate Signal from CLI or MCP
|
|
43089
43163
|
|
|
43090
43164
|
- 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.
|
|
43165
|
+
- 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.
|
|
43091
43166
|
- 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.
|
|
43092
43167
|
- 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.
|
|
43093
43168
|
|
|
43169
|
+
## Run Signal without an agent
|
|
43170
|
+
|
|
43171
|
+
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.
|
|
43172
|
+
|
|
43094
43173
|
## When to stop for confirmation
|
|
43095
43174
|
|
|
43096
|
-
\`signal.
|
|
43175
|
+
\`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.
|
|
43097
43176
|
|
|
43098
43177
|
## Agent guidance
|
|
43099
43178
|
|
|
@@ -43104,7 +43183,7 @@ Agents may record readings when the Charter allows it. Agent-reported readings s
|
|
|
43104
43183
|
order: 62,
|
|
43105
43184
|
title: "Friction guide",
|
|
43106
43185
|
summary: "How to capture issues with evidence, rank them, and resolve them without losing ownership.",
|
|
43107
|
-
version: "2026-06-
|
|
43186
|
+
version: "2026-06-18.1",
|
|
43108
43187
|
public: true,
|
|
43109
43188
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43110
43189
|
stages: ["operating_rhythm"],
|
|
@@ -43158,12 +43237,12 @@ Agents should file Friction when a measurable breaks, a tool fails, a repeated e
|
|
|
43158
43237
|
Friction, tasks, and escalations are the issue-to-action loop. A seat files, a task carries the work, and an escalation routes a decision a seat cannot make alone.
|
|
43159
43238
|
|
|
43160
43239
|
- File and triage: \`{{cli}} friction file ...\` / \`friction.file_issue\` (seat) / \`rost_file_issue\`; list with \`{{cli}} friction list --status open --json\` / \`friction.list\` / \`rost_list_friction_issues\`; move between open and diagnosing with \`friction.update_status\` / \`rost_update_friction_issue_status\`.
|
|
43161
|
-
- Carry the work as a task: \`task.create\` / \`rost_create_task\` (a commitment between seats; agent
|
|
43240
|
+
- Carry the work as a task: \`task.create\` / \`rost_create_task\` (a commitment between seats). \`task.create\` is \`none\` (no confirmation gate), so an agent can file one directly; an agent's task lands as a **draft** proposal (\`origin: agent_proposal\`) for a human to review and hand off \u2014 not a live offer in the owning seat's accept/decline queue. A seat runs its queue with \`{{cli}} task list|accept|decline|complete\` (\`task.list\`, \`task.accept\`, \`task.decline\`, \`task.complete\`). Link a task to an issue with \`friction.link_task\` / \`rost_link_task_to_friction_issue\`.
|
|
43162
43241
|
- Route a decision: \`escalation.raise\` (seat) / \`rost_escalate\` sends approval-scope or must-escalate work to the Steward queue. Reads are \`escalation.list\` / \`escalation.get\`. See the steward queue guide for resolution.
|
|
43163
43242
|
|
|
43164
43243
|
## When to stop for confirmation
|
|
43165
43244
|
|
|
43166
|
-
\`friction.resolve
|
|
43245
|
+
\`friction.resolve\` is \`human_required\`; resolving an issue is a human decision. \`friction.link_task\`, \`task.create\`, \`task.accept\`, \`task.decline\`, and \`task.complete\` are \`none\`, so a seat files issues, creates commitments, and runs its own task queue directly. \`friction.update_status\`, \`escalation.raise\`, \`friction.file_issue\`, and \`friction.list\` are also not gated. An agent files Friction, proposes the task, and escalates; a human resolves.
|
|
43167
43246
|
|
|
43168
43247
|
## Resolution rule
|
|
43169
43248
|
|
|
@@ -43174,7 +43253,7 @@ Resolving Friction should produce one of four outcomes: a decision, a task, a Ch
|
|
|
43174
43253
|
order: 70,
|
|
43175
43254
|
title: "Steward queue guide",
|
|
43176
43255
|
summary: "How Stewards review escalations, approve agent boundaries, and keep agents accountable.",
|
|
43177
|
-
version: "2026-06-
|
|
43256
|
+
version: "2026-06-18.2",
|
|
43178
43257
|
public: true,
|
|
43179
43258
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43180
43259
|
stages: ["staffing", "operating_rhythm"],
|
|
@@ -43209,12 +43288,14 @@ A Steward is the human accountable for an agent seat. The Steward queue is where
|
|
|
43209
43288
|
|
|
43210
43289
|
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.
|
|
43211
43290
|
|
|
43291
|
+
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.
|
|
43292
|
+
|
|
43212
43293
|
## Work the queue from CLI or MCP
|
|
43213
43294
|
|
|
43214
43295
|
The Steward reads the queue from any surface but decides as a human.
|
|
43215
43296
|
|
|
43216
43297
|
- Read: \`{{cli}} escalation list --json\` / \`escalation.list\` / \`rost_list_escalations\` (own steward chain for humans, own seat for agents). Read one with \`{{cli}} escalation get\` / \`escalation.get\` / \`rost_get_escalation\` \u2014 evidence, recommendation, and decision state.
|
|
43217
|
-
- Decide: \`{{cli}} escalation resolve\` / \`escalation.resolve\` and \`{{cli}} escalation reject\` / \`escalation.reject\`.
|
|
43298
|
+
- Decide: \`{{cli}} escalation resolve\` / \`escalation.resolve\` and \`{{cli}} escalation reject\` / \`escalation.reject\`. \`escalation.resolve\` and \`escalation.reject\` are \`none\` at the confirmation layer, but they are deliberately NOT exposed over MCP \u2014 \`decisions.decided_by\` must be a human, so there is no \`rost_resolve_escalation\` tool. They are kept human-only by that MCP exclusion plus the human-only \`decided_by\`, not by a confirmation gate. The CLI runs them as the authenticated human; an agent session must hand the decision to a person.
|
|
43218
43299
|
- Approve gated requests: when an escalation or Charter change produces a pending confirmation, the human approves with \`confirmation.approve\` (or rejects with \`confirmation.reject\`). Go-live runs through \`agent.go_live\`.
|
|
43219
43300
|
|
|
43220
43301
|
## When to stop for confirmation
|
|
@@ -43230,7 +43311,7 @@ Keep agent scope tight at first. Approve more autonomy only after evidence. Use
|
|
|
43230
43311
|
order: 71,
|
|
43231
43312
|
title: "Confirmations and human gates guide",
|
|
43232
43313
|
summary: "How {{brand}} routes authority-changing work through human confirmation, and why agents never approve their own requests.",
|
|
43233
|
-
version: "2026-06-
|
|
43314
|
+
version: "2026-06-18.1",
|
|
43234
43315
|
public: true,
|
|
43235
43316
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43236
43317
|
stages: ["graph_design", "charter_design", "staffing", "operating_rhythm"],
|
|
@@ -43254,10 +43335,12 @@ Keep agent scope tight at first. Approve more autonomy only after evidence. Use
|
|
|
43254
43335
|
|
|
43255
43336
|
## Confirmation levels
|
|
43256
43337
|
|
|
43257
|
-
- \`none\`:
|
|
43258
|
-
- \`human_required\`: a human must approve. Structural, staffing, resolution, and go-live commands (\`seat.
|
|
43259
|
-
- \`
|
|
43260
|
-
- \`
|
|
43338
|
+
- \`none\`: no confirmation gate \u2014 the command never returns a pending confirmation. Most are reads or reversible drafts an agent can run directly, including over MCP (graph reads, \`charter.draft\`, \`status.record\`, \`sync.brief.compile\`, \`sync.run.start\`, \`task.complete\`). A few \`none\` commands still require a human actor or an interactive channel \u2014 \`confirmation.approve\` is \`none\` (approving a gate cannot itself be gated) yet runs only as a human in the UI or CLI \u2014 so \`none\` means "no confirmation gate", not always "agent-callable".
|
|
43339
|
+
- \`human_required\`: a human must approve. Structural, staffing, resolution, and go-live commands (\`seat.reparent\`, \`charter.approve\`, \`goal.reparent\`, \`friction.resolve\`, \`agent.go_live\`, \`mcp_token.create\`).
|
|
43340
|
+
- \`credential_flow\`: routes through the vault-backed credential path so a secret is captured as a vault reference, never stored or logged in the clear (\`credential.ingress\`, \`tenant.anthropic_key.save\`; \`agent.configure_tools\` is \`credential_flow\` too \u2014 it stages credential-ingress requests through the same path without ever taking raw secret material).
|
|
43341
|
+
- \`dangerous\`: the highest-risk human gate. Only two commands carry it \u2014 \`settings.update\` and \`agent.decommission\`.
|
|
43342
|
+
|
|
43343
|
+
The \`dangerous\` confirmation **level** is rare and is not the same as the **risk badge** a pending confirmation can display. The badge shows "dangerous" whenever a command's confirmation level is \`dangerous\` **or** the command redacts secrets (its audit redaction is \`secret_strict\`), so a \`credential_flow\` command such as \`credential.ingress\` shows the dangerous badge while still gating through the credential path \u2014 not the \`dangerous\` level. Read the badge as "handle with care" and the confirmation level as "who must approve". \`confirmation.approve\` and \`confirmation.reject\` are themselves \`none\` \u2014 approving a gate cannot itself require approval.
|
|
43261
43344
|
|
|
43262
43345
|
## What a gated command returns over MCP
|
|
43263
43346
|
|
|
@@ -43283,7 +43366,7 @@ Stop before: approving a Charter, signing a manifest, connecting a tool or crede
|
|
|
43283
43366
|
order: 72,
|
|
43284
43367
|
title: "Settings guide",
|
|
43285
43368
|
summary: "How to use Settings as the control plane for company access, channels, providers, tokens, and operating defaults.",
|
|
43286
|
-
version: "2026-06-
|
|
43369
|
+
version: "2026-06-18.1",
|
|
43287
43370
|
public: true,
|
|
43288
43371
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43289
43372
|
stages: ["company_setup", "staffing"],
|
|
@@ -43319,6 +43402,14 @@ Start with members and invites, then provider and channel connections, then MCP
|
|
|
43319
43402
|
|
|
43320
43403
|
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.
|
|
43321
43404
|
|
|
43405
|
+
## Inference budget
|
|
43406
|
+
|
|
43407
|
+
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.
|
|
43408
|
+
|
|
43409
|
+
- 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.
|
|
43410
|
+
- 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.
|
|
43411
|
+
- A company that brings its own provider key (BYOK) is metered on that key and is not subject to the {{brand}}-managed hard cap.
|
|
43412
|
+
|
|
43322
43413
|
## Agent guidance
|
|
43323
43414
|
|
|
43324
43415
|
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.`
|
|
@@ -43396,7 +43487,7 @@ Every notification should include the seat, cause, evidence, and requested decis
|
|
|
43396
43487
|
order: 75,
|
|
43397
43488
|
title: "Local runner guide",
|
|
43398
43489
|
summary: "How local agent sessions and runner surfaces should operate through {{brand}} without bypassing Charters or audit.",
|
|
43399
|
-
version: "2026-06-
|
|
43490
|
+
version: "2026-06-19.2",
|
|
43400
43491
|
public: true,
|
|
43401
43492
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43402
43493
|
stages: ["staffing", "operating_rhythm"],
|
|
@@ -43426,12 +43517,22 @@ The local runner is for human-controlled local agent work. It should retrieve {{
|
|
|
43426
43517
|
|
|
43427
43518
|
- Pair a new runner: \`runner.pairing.start\` / \`rost_start_runner_pairing\` with \`name\` and \`platform\` returns a human pairing code.
|
|
43428
43519
|
- 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.
|
|
43429
|
-
- 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\`.
|
|
43520
|
+
- 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\`.
|
|
43430
43521
|
- Revoke: \`{{cli}} runner revoke\` / \`runner.revoke\` / \`rost_revoke_runner\` so a runner can no longer authenticate.
|
|
43431
43522
|
|
|
43523
|
+
## Owner-initiated headless pairing
|
|
43524
|
+
|
|
43525
|
+
Use this flow when a headless or desktop runner cannot use the interactive web confirmation flow.
|
|
43526
|
+
|
|
43527
|
+
1. The owner runs \`runner.pairing.start\` or \`rost_start_runner_pairing\` with the runner \`name\` and \`platform\`.
|
|
43528
|
+
2. The owner gives the returned \`user_code\` to the runner through a trusted out-of-band channel.
|
|
43529
|
+
3. The runner calls \`POST /api/runner/pairing/claim\` with \`{"user_code":"ABCD-2345"}\`.
|
|
43530
|
+
4. The response returns \`runner_id\`, \`runner_secret\`, \`name\`, and \`platform\`. Store the runner secret only on the runner machine.
|
|
43531
|
+
5. The runner sends heartbeats with \`Authorization: Bearer <runner_secret>\` and then claims work orders.
|
|
43532
|
+
|
|
43432
43533
|
## When to stop for confirmation
|
|
43433
43534
|
|
|
43434
|
-
\`runner.
|
|
43535
|
+
\`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.
|
|
43435
43536
|
|
|
43436
43537
|
## Guardrails
|
|
43437
43538
|
|
|
@@ -43552,7 +43653,7 @@ Templates may draft. Humans approve. A stock agent should not go live until a hu
|
|
|
43552
43653
|
order: 77,
|
|
43553
43654
|
title: "Troubleshooting guide",
|
|
43554
43655
|
summary: "How users and agents should diagnose common setup, tool, Signal, Friction, and MCP problems.",
|
|
43555
|
-
version: "2026-06-18.
|
|
43656
|
+
version: "2026-06-18.4",
|
|
43556
43657
|
public: true,
|
|
43557
43658
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43558
43659
|
stages: ["company_setup", "staffing", "operating_rhythm"],
|
|
@@ -43611,7 +43712,7 @@ These are the common blockers when adding an agent (see the add-agents guide and
|
|
|
43611
43712
|
|
|
43612
43713
|
## When to stop for confirmation
|
|
43613
43714
|
|
|
43614
|
-
Most reads are safe to run while diagnosing. Any fix that changes authority, credentials, go-live state, or a durable decision is \`human_required\` or \`dangerous\` and routes through \`confirmation.approve
|
|
43715
|
+
Most reads are safe to run while diagnosing. Any fix that changes authority, credentials, go-live state, or a durable decision is gated \u2014 \`human_required\`, \`credential_flow\`, or \`dangerous\` \u2014 and routes through a human confirmation (\`confirmation.approve\`). Diagnose freely; stop before approving.
|
|
43615
43716
|
|
|
43616
43717
|
## Agent guidance
|
|
43617
43718
|
|
|
@@ -43850,7 +43951,7 @@ A consultancy's purpose might be "Make expert tax guidance affordable for first-
|
|
|
43850
43951
|
order: 31,
|
|
43851
43952
|
title: "Charter authoring deep-dive",
|
|
43852
43953
|
summary: "The full Charter document contract field by field \u2014 decision authority, escalation, measurables, budget, permissions \u2014 with worked examples for human, agent, and hybrid seats.",
|
|
43853
|
-
version: "2026-06-
|
|
43954
|
+
version: "2026-06-18.1",
|
|
43854
43955
|
public: true,
|
|
43855
43956
|
audiences: ["cli", "mcp", "in_app_agent"],
|
|
43856
43957
|
stages: ["charter_design", "staffing"],
|
|
@@ -43894,7 +43995,7 @@ A Charter is a seat's executable operating contract. On the CLI and MCP path you
|
|
|
43894
43995
|
- **decision_authority** \u2014 the heart of the contract, split three ways:
|
|
43895
43996
|
- **autonomous** \u2014 what the seat may do without asking. Each item is \`{ action, condition, rationale, unanswered_boundary }\`. Only reversible, low-risk, in-scope actions belong here. An autonomous item must have \`unanswered_boundary: false\` \u2014 the schema rejects an autonomous item with an unanswered boundary (push it to escalate instead).
|
|
43896
43997
|
- **approval** \u2014 the can-do-with-a-yes set: durable, money-moving, external-send, staffing, or policy actions that require explicit human approval. Name the **threshold** in the \`condition\` (e.g. "before posting or sending," "over $5,000").
|
|
43897
|
-
- **escalate** (1+) \u2014 the must-ask set: ambiguous authority, irreversible actions, credentials, legal or financial exposure, customer-impacting exceptions. At least one escalate item
|
|
43998
|
+
- **escalate** (1+) \u2014 the must-ask set: ambiguous authority, irreversible actions, credentials, legal or financial exposure, customer-impacting exceptions. At least one escalate item should carry \`unanswered_boundary: true\` so unresolved boundaries default conservative. The submit schema does not strictly require it, but the direct submit path (\`charter.update_draft\` / \`charter.set\`) does not add one for you \u2014 it only records the boundaries you flag \u2014 so include one whenever a boundary is unresolved.
|
|
43898
43999
|
- **escalation_rules** (1+) \u2014 plain-language rules that trigger escalation, beyond the structured authority items. "Escalate any invoice over $5,000 or from a vendor not already in the ledger."
|
|
43899
44000
|
- **measurables** (1+) \u2014 each \`{ name, target, cadence, source }\`. A measurable must measure the accountability, not vanity. \`cadence\` is \`daily|weekly|monthly|quarterly\`; \`source\` is \`human|agent|integration\`. Agent-sourced readings are unconfirmed until a human confirms them.
|
|
43900
44001
|
- **permission_manifest** \u2014 each \`{ tool, scope, granted, rationale }\`. Map each accountability to the narrowest tool scope that performs it. Prefer draft/read scopes; a send or spend scope is a deliberate, justified grant. The manifest is what the tool-guard enforces and what a human signs.
|
|
@@ -44946,6 +45047,20 @@ function field(record2, key) {
|
|
|
44946
45047
|
}
|
|
44947
45048
|
return String(value);
|
|
44948
45049
|
}
|
|
45050
|
+
function formatDryRunTranscript(value) {
|
|
45051
|
+
const transcript = asRecord(value);
|
|
45052
|
+
const steps = asArray(transcript.steps);
|
|
45053
|
+
if (steps.length === 0) {
|
|
45054
|
+
return "";
|
|
45055
|
+
}
|
|
45056
|
+
const lines = steps.map((step) => {
|
|
45057
|
+
const record2 = asRecord(step);
|
|
45058
|
+
const kind = field(record2, "kind");
|
|
45059
|
+
const guard = record2.guard === null || record2.guard === void 0 ? "" : ` [${field(record2, "guard")}]`;
|
|
45060
|
+
return ` ${kind}: ${field(record2, "text")}${guard}`;
|
|
45061
|
+
});
|
|
45062
|
+
return ["rehearsal:", ...lines].join("\n");
|
|
45063
|
+
}
|
|
44949
45064
|
function markdownLine(output) {
|
|
44950
45065
|
const markdown = asRecord(output).markdown;
|
|
44951
45066
|
return typeof markdown === "string" ? markdown : JSON.stringify(output, null, 2);
|
|
@@ -45663,8 +45778,9 @@ var agentWrapper = (context, args) => dispatch(context, "agent", args, {
|
|
|
45663
45778
|
};
|
|
45664
45779
|
return execute(ctx, parsed, "agent.run_dry_run", body, (output) => {
|
|
45665
45780
|
const record2 = asRecord(output);
|
|
45666
|
-
|
|
45781
|
+
const header = `dry run for seat ${field(record2, "seat_id")} (charter ${field(record2, "charter_version_id")}): ${field(record2, "status")} (reused=${field(record2, "reused")})
|
|
45667
45782
|
${field(record2, "summary")}`;
|
|
45783
|
+
return [header, formatDryRunTranscript(record2.transcript)].filter((part) => part.length > 0).join("\n");
|
|
45668
45784
|
});
|
|
45669
45785
|
},
|
|
45670
45786
|
"go-live": (ctx, rest) => {
|
|
@@ -45686,6 +45802,16 @@ ${field(record2, "summary")}`;
|
|
|
45686
45802
|
return `agent seat ${field(record2, "seat_id")} status=${field(record2, "status")} live=${field(record2, "live")} lane=${field(record2, "lane")}`;
|
|
45687
45803
|
});
|
|
45688
45804
|
},
|
|
45805
|
+
"run-now": (ctx, rest) => {
|
|
45806
|
+
const parsed = parseFlags(rest);
|
|
45807
|
+
const body = withOptional({ seat_id: requireValue2(parsed, "seat-id") }, {
|
|
45808
|
+
task_id: optionalValue(parsed, "task-id")
|
|
45809
|
+
});
|
|
45810
|
+
return execute(ctx, parsed, "agent.run_now", body, (output) => {
|
|
45811
|
+
const workOrder = asRecord(asRecord(output).work_order);
|
|
45812
|
+
return `queued ${field(workOrder, "lane")} work order ${field(workOrder, "id")} for agent ${field(workOrder, "agent_id")} (${field(workOrder, "status")})`;
|
|
45813
|
+
});
|
|
45814
|
+
},
|
|
45689
45815
|
// DER-787 (H8): markdown readout for a seat's agent setup. `--markdown` (or
|
|
45690
45816
|
// default) prints the composed card; `--json` returns the { markdown } object.
|
|
45691
45817
|
show: (ctx, rest) => {
|
|
@@ -45712,7 +45838,7 @@ function agentConfigureTools(ctx, rest, decision) {
|
|
|
45712
45838
|
});
|
|
45713
45839
|
}
|
|
45714
45840
|
function agentUsage(bin) {
|
|
45715
|
-
return `Usage: ${bin} agent templates|create|setup|tools|dry-run|go-live|status|show [--json]
|
|
45841
|
+
return `Usage: ${bin} agent templates|create|setup|tools|dry-run|go-live|status|run-now|show [--json]
|
|
45716
45842
|
${bin} agent templates
|
|
45717
45843
|
${bin} agent create --seat-id <id> --template <slug> [--expected-version <v>]
|
|
45718
45844
|
${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>]
|
|
@@ -45722,6 +45848,7 @@ function agentUsage(bin) {
|
|
|
45722
45848
|
${bin} agent dry-run --seat-id <id> --charter-version-id <id>
|
|
45723
45849
|
${bin} agent go-live --seat-id <id> --charter-version-id <id>
|
|
45724
45850
|
${bin} agent status --seat-id <id>
|
|
45851
|
+
${bin} agent run-now --seat-id <id> [--task-id <id>]
|
|
45725
45852
|
${bin} agent show --seat-id <id> [--markdown]`;
|
|
45726
45853
|
}
|
|
45727
45854
|
function agentSetupUsage(bin) {
|
|
@@ -45863,7 +45990,7 @@ function operationUsageLines(bin) {
|
|
|
45863
45990
|
`${bin} notification settings|test`,
|
|
45864
45991
|
`${bin} settings get|update`,
|
|
45865
45992
|
`${bin} member invite|update|remove`,
|
|
45866
|
-
`${bin} agent templates|create|setup|tools|dry-run|go-live|status|show`,
|
|
45993
|
+
`${bin} agent templates|create|setup|tools|dry-run|go-live|status|run-now|show`,
|
|
45867
45994
|
`${bin} tools list`,
|
|
45868
45995
|
`${bin} compass show`,
|
|
45869
45996
|
`${bin} charter show`
|