@rosthq/cli 0.5.6 → 0.5.7
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 +61 -42
- 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
|
@@ -41486,7 +41486,7 @@ var referenceDocuments = [
|
|
|
41486
41486
|
order: 10,
|
|
41487
41487
|
title: "{{brand}} implementation method",
|
|
41488
41488
|
summary: "The staged operating-system setup path used by humans, CLI sessions, MCP clients, and in-app agents.",
|
|
41489
|
-
version: "2026-06-
|
|
41489
|
+
version: "2026-06-18.1",
|
|
41490
41490
|
public: true,
|
|
41491
41491
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
41492
41492
|
stages: ["company_setup", "graph_design", "charter_design", "staffing", "operating_rhythm"],
|
|
@@ -41584,14 +41584,14 @@ The Compass is drafted, then activated by a human through supersession.
|
|
|
41584
41584
|
|
|
41585
41585
|
## When to stop for confirmation
|
|
41586
41586
|
|
|
41587
|
-
\`onboarding.
|
|
41587
|
+
\`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
41588
|
},
|
|
41589
41589
|
{
|
|
41590
41590
|
slug: "responsibility-graph-playbook",
|
|
41591
41591
|
order: 20,
|
|
41592
41592
|
title: "Responsibility Graph playbook",
|
|
41593
41593
|
summary: "How to build a functions-first graph with seats, owners, Stewards, vacancies, and clean authority.",
|
|
41594
|
-
version: "2026-06-
|
|
41594
|
+
version: "2026-06-18.1",
|
|
41595
41595
|
public: true,
|
|
41596
41596
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
41597
41597
|
stages: ["graph_design", "staffing"],
|
|
@@ -41688,7 +41688,7 @@ It ends every occupancy, archives the seat's active Charter, revokes the seat's
|
|
|
41688
41688
|
|
|
41689
41689
|
## When to stop for confirmation
|
|
41690
41690
|
|
|
41691
|
-
\`seat.
|
|
41691
|
+
\`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
41692
|
|
|
41693
41693
|
## Agent guidance
|
|
41694
41694
|
|
|
@@ -41769,7 +41769,7 @@ Drafting can be assisted by agents. Activation is a human decision. When authori
|
|
|
41769
41769
|
order: 40,
|
|
41770
41770
|
title: "Agent staffing playbook",
|
|
41771
41771
|
summary: "How to decide whether a seat should be human, agent, or hybrid, and how to go live safely.",
|
|
41772
|
-
version: "2026-06-
|
|
41772
|
+
version: "2026-06-18.1",
|
|
41773
41773
|
public: true,
|
|
41774
41774
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
41775
41775
|
stages: ["staffing"],
|
|
@@ -41824,7 +41824,7 @@ Two creation paths, both draft-first. Read the stock-agents guide for templates
|
|
|
41824
41824
|
|
|
41825
41825
|
## When to stop for confirmation
|
|
41826
41826
|
|
|
41827
|
-
\`agent.create_from_template\`, \`agent.create_custom\`, \`
|
|
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 dry-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
41828
|
|
|
41829
41829
|
## Non-negotiables
|
|
41830
41830
|
|
|
@@ -41915,7 +41915,7 @@ In read-only or demo mode the **Add agent** affordance is disabled or routes to
|
|
|
41915
41915
|
order: 42,
|
|
41916
41916
|
title: "Design a custom agent",
|
|
41917
41917
|
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-
|
|
41918
|
+
version: "2026-06-18.2",
|
|
41919
41919
|
public: true,
|
|
41920
41920
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
41921
41921
|
stages: ["staffing", "charter_design"],
|
|
@@ -41971,18 +41971,18 @@ The same path is command-backed:
|
|
|
41971
41971
|
|
|
41972
41972
|
## Dry run and go-live
|
|
41973
41973
|
|
|
41974
|
-
The
|
|
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.
|
|
41975
41975
|
|
|
41976
41976
|
## When to stop for confirmation
|
|
41977
41977
|
|
|
41978
|
-
\`agent.create_custom\`, \`
|
|
41978
|
+
\`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
41979
|
},
|
|
41980
41980
|
{
|
|
41981
41981
|
slug: "sync-rhythm-playbook",
|
|
41982
41982
|
order: 80,
|
|
41983
41983
|
title: "Sync rhythm playbook",
|
|
41984
41984
|
summary: "How Signal, Friction, Cascade, and Sync Briefs turn weekly meetings into decision time.",
|
|
41985
|
-
version: "2026-06-
|
|
41985
|
+
version: "2026-06-18.1",
|
|
41986
41986
|
public: true,
|
|
41987
41987
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
41988
41988
|
stages: ["operating_rhythm"],
|
|
@@ -42041,7 +42041,7 @@ Start with the exceptions, not a tour of every seat. Resolve the highest-value F
|
|
|
42041
42041
|
|
|
42042
42042
|
## When to stop for confirmation
|
|
42043
42043
|
|
|
42044
|
-
\`sync.run.start\`, \`sync.run.complete\`, and \`sync.item.assign\` are
|
|
42044
|
+
\`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
42045
|
|
|
42046
42046
|
## After Sync
|
|
42047
42047
|
|
|
@@ -42052,7 +42052,7 @@ Decisions should be recorded as human decisions. Handoffs should attach to seats
|
|
|
42052
42052
|
order: 45,
|
|
42053
42053
|
title: "How agents work",
|
|
42054
42054
|
summary: "How {{brand}} agents operate inside seats, use Charters, report work, and escalate beyond authority.",
|
|
42055
|
-
version: "2026-06-
|
|
42055
|
+
version: "2026-06-18.1",
|
|
42056
42056
|
public: true,
|
|
42057
42057
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42058
42058
|
stages: ["staffing", "operating_rhythm"],
|
|
@@ -42123,7 +42123,7 @@ A seat-scoped MCP token or the CLI runs the hand-shaped protocol. The server sti
|
|
|
42123
42123
|
|
|
42124
42124
|
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
42125
|
|
|
42126
|
-
\`task.accept\`, \`task.decline\`,
|
|
42126
|
+
\`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
42127
|
|
|
42128
42128
|
## What humans should review
|
|
42129
42129
|
|
|
@@ -42134,7 +42134,7 @@ Review the first dry runs, tool-call audit rows, escalations, and Signal impact.
|
|
|
42134
42134
|
order: 46,
|
|
42135
42135
|
title: "Tool access and vault",
|
|
42136
42136
|
summary: "How to give agents access to tools without exposing raw credentials or expanding authority by accident.",
|
|
42137
|
-
version: "2026-06-
|
|
42137
|
+
version: "2026-06-18.1",
|
|
42138
42138
|
public: true,
|
|
42139
42139
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42140
42140
|
stages: ["staffing"],
|
|
@@ -42185,13 +42185,13 @@ Connecting a tool is a human-controlled step. The agent can recommend a tool, ex
|
|
|
42185
42185
|
## Connect tools and credentials from CLI or MCP
|
|
42186
42186
|
|
|
42187
42187
|
- 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.
|
|
42188
|
+
- 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
42189
|
- 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 \`
|
|
42190
|
+
- 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
42191
|
|
|
42192
42192
|
## When to stop for confirmation
|
|
42193
42193
|
|
|
42194
|
-
\`credential.ingress\` and \`
|
|
42194
|
+
\`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
42195
|
},
|
|
42196
42196
|
{
|
|
42197
42197
|
slug: "available-tools-guide",
|
|
@@ -42241,7 +42241,7 @@ Agents should explain the job, the required tool category, the minimum permissio
|
|
|
42241
42241
|
order: 48,
|
|
42242
42242
|
title: "CLI and MCP installation guide",
|
|
42243
42243
|
summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
|
|
42244
|
-
version: "2026-06-18.
|
|
42244
|
+
version: "2026-06-18.10",
|
|
42245
42245
|
public: true,
|
|
42246
42246
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42247
42247
|
stages: ["company_setup", "staffing"],
|
|
@@ -42755,6 +42755,8 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
42755
42755
|
| \`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
42756
|
| \`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
42757
|
| \`rost_decommission_agent\` | \`agent.decommission\` | Retire an agent occupancy safely (no-orphan guarded). | Tenant | Call with \`agent_id\`; expect human confirmation. |
|
|
42758
|
+
| \`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. |
|
|
42759
|
+
| \`rost_resume_agent\` | \`agent.resume\` | Resume a paused agent back to live (no-orphan guarded). | Tenant | Call with \`seat_id\`; expect human confirmation. |
|
|
42758
42760
|
| \`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
42761
|
| \`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
42762
|
| \`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. |
|
|
@@ -42791,7 +42793,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
42791
42793
|
| \`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
42794
|
| \`rost_resolve_friction_issue\` | \`friction.resolve\` | Resolve an issue with a root cause and remediation task. | Tenant | Human decision; expect confirmation. |
|
|
42793
42795
|
| \`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 |
|
|
42796
|
+
| \`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
42797
|
| \`rost_compile_sync_brief\` | \`sync.brief.compile\` | Compile the weekly Sync Brief (idempotent per period). | Tenant | Call with \`{}\`. |
|
|
42796
42798
|
| \`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
42799
|
| \`rost_start_sync_run\` | \`sync.run.start\` | Ensure a Sync Brief exists so the meeting can begin. | Tenant | Call with \`{}\`. |
|
|
@@ -42859,7 +42861,7 @@ These rows are quick, at-a-glance triage. For deeper auth, tenant, scope, confir
|
|
|
42859
42861
|
order: 49,
|
|
42860
42862
|
title: "Agent reference map",
|
|
42861
42863
|
summary: "Where CLI sessions, MCP clients, and in-app agents should retrieve {{brand}} guidance before recommending setup changes.",
|
|
42862
|
-
version: "2026-06-
|
|
42864
|
+
version: "2026-06-18.1",
|
|
42863
42865
|
public: true,
|
|
42864
42866
|
audiences: ["cli", "mcp", "in_app_agent"],
|
|
42865
42867
|
stages: ["company_setup", "graph_design", "charter_design", "staffing", "operating_rhythm"],
|
|
@@ -42910,7 +42912,7 @@ Never guess a command's JSON shape. Before calling a command that changes state,
|
|
|
42910
42912
|
- List every callable command: {{cli}} command list (CLI) or rost_list_commands (MCP)
|
|
42911
42913
|
- 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
42914
|
- 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 <
|
|
42915
|
+
- 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
42916
|
|
|
42915
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, or a dry run that has not passed) returns COMMAND_PRECONDITION_FAILED with a help pointer, not an opaque internal error.
|
|
42916
42918
|
|
|
@@ -42978,7 +42980,7 @@ Retrieve the narrowest relevant guide before making a setup recommendation. Pref
|
|
|
42978
42980
|
order: 60,
|
|
42979
42981
|
title: "Cascade guide",
|
|
42980
42982
|
summary: "How to connect company goals to seat-level work without turning {{brand}} into a project-management tool.",
|
|
42981
|
-
version: "2026-06-
|
|
42983
|
+
version: "2026-06-18.1",
|
|
42982
42984
|
public: true,
|
|
42983
42985
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42984
42986
|
stages: ["operating_rhythm"],
|
|
@@ -43032,7 +43034,7 @@ Do not put every task into Cascade. Small errands, private notes, and work with
|
|
|
43032
43034
|
|
|
43033
43035
|
## When to stop for confirmation
|
|
43034
43036
|
|
|
43035
|
-
\`goal.
|
|
43037
|
+
\`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
43038
|
|
|
43037
43039
|
## Agent guidance
|
|
43038
43040
|
|
|
@@ -43043,7 +43045,7 @@ Agents can suggest commitments and report progress. They should not create a new
|
|
|
43043
43045
|
order: 61,
|
|
43044
43046
|
title: "Signal guide",
|
|
43045
43047
|
summary: "How to define and read measurables so the company runs on evidence instead of status theater.",
|
|
43046
|
-
version: "2026-06-
|
|
43048
|
+
version: "2026-06-18.1",
|
|
43047
43049
|
public: true,
|
|
43048
43050
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43049
43051
|
stages: ["operating_rhythm"],
|
|
@@ -43093,7 +43095,7 @@ Avoid vanity numbers, manual-only status fields, and metrics nobody can act on.
|
|
|
43093
43095
|
|
|
43094
43096
|
## When to stop for confirmation
|
|
43095
43097
|
|
|
43096
|
-
\`signal.
|
|
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.
|
|
43097
43099
|
|
|
43098
43100
|
## Agent guidance
|
|
43099
43101
|
|
|
@@ -43104,7 +43106,7 @@ Agents may record readings when the Charter allows it. Agent-reported readings s
|
|
|
43104
43106
|
order: 62,
|
|
43105
43107
|
title: "Friction guide",
|
|
43106
43108
|
summary: "How to capture issues with evidence, rank them, and resolve them without losing ownership.",
|
|
43107
|
-
version: "2026-06-
|
|
43109
|
+
version: "2026-06-18.1",
|
|
43108
43110
|
public: true,
|
|
43109
43111
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43110
43112
|
stages: ["operating_rhythm"],
|
|
@@ -43158,12 +43160,12 @@ Agents should file Friction when a measurable breaks, a tool fails, a repeated e
|
|
|
43158
43160
|
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
43161
|
|
|
43160
43162
|
- 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
|
|
43163
|
+
- 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
43164
|
- 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
43165
|
|
|
43164
43166
|
## When to stop for confirmation
|
|
43165
43167
|
|
|
43166
|
-
\`friction.resolve
|
|
43168
|
+
\`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
43169
|
|
|
43168
43170
|
## Resolution rule
|
|
43169
43171
|
|
|
@@ -43174,7 +43176,7 @@ Resolving Friction should produce one of four outcomes: a decision, a task, a Ch
|
|
|
43174
43176
|
order: 70,
|
|
43175
43177
|
title: "Steward queue guide",
|
|
43176
43178
|
summary: "How Stewards review escalations, approve agent boundaries, and keep agents accountable.",
|
|
43177
|
-
version: "2026-06-
|
|
43179
|
+
version: "2026-06-18.1",
|
|
43178
43180
|
public: true,
|
|
43179
43181
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43180
43182
|
stages: ["staffing", "operating_rhythm"],
|
|
@@ -43214,7 +43216,7 @@ Read the seat, Charter, evidence, and recommended action. Decide the narrow ques
|
|
|
43214
43216
|
The Steward reads the queue from any surface but decides as a human.
|
|
43215
43217
|
|
|
43216
43218
|
- 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\`.
|
|
43219
|
+
- 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
43220
|
- 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
43221
|
|
|
43220
43222
|
## When to stop for confirmation
|
|
@@ -43230,7 +43232,7 @@ Keep agent scope tight at first. Approve more autonomy only after evidence. Use
|
|
|
43230
43232
|
order: 71,
|
|
43231
43233
|
title: "Confirmations and human gates guide",
|
|
43232
43234
|
summary: "How {{brand}} routes authority-changing work through human confirmation, and why agents never approve their own requests.",
|
|
43233
|
-
version: "2026-06-
|
|
43235
|
+
version: "2026-06-18.1",
|
|
43234
43236
|
public: true,
|
|
43235
43237
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43236
43238
|
stages: ["graph_design", "charter_design", "staffing", "operating_rhythm"],
|
|
@@ -43254,10 +43256,12 @@ Keep agent scope tight at first. Approve more autonomy only after evidence. Use
|
|
|
43254
43256
|
|
|
43255
43257
|
## Confirmation levels
|
|
43256
43258
|
|
|
43257
|
-
- \`none\`:
|
|
43258
|
-
- \`human_required\`: a human must approve. Structural, staffing, resolution, and go-live commands (\`seat.
|
|
43259
|
-
- \`
|
|
43260
|
-
- \`
|
|
43259
|
+
- \`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".
|
|
43260
|
+
- \`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\`).
|
|
43261
|
+
- \`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).
|
|
43262
|
+
- \`dangerous\`: the highest-risk human gate. Only two commands carry it \u2014 \`settings.update\` and \`agent.decommission\`.
|
|
43263
|
+
|
|
43264
|
+
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
43265
|
|
|
43262
43266
|
## What a gated command returns over MCP
|
|
43263
43267
|
|
|
@@ -43396,7 +43400,7 @@ Every notification should include the seat, cause, evidence, and requested decis
|
|
|
43396
43400
|
order: 75,
|
|
43397
43401
|
title: "Local runner guide",
|
|
43398
43402
|
summary: "How local agent sessions and runner surfaces should operate through {{brand}} without bypassing Charters or audit.",
|
|
43399
|
-
version: "2026-06-
|
|
43403
|
+
version: "2026-06-18.1",
|
|
43400
43404
|
public: true,
|
|
43401
43405
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43402
43406
|
stages: ["staffing", "operating_rhythm"],
|
|
@@ -43431,7 +43435,7 @@ The local runner is for human-controlled local agent work. It should retrieve {{
|
|
|
43431
43435
|
|
|
43432
43436
|
## When to stop for confirmation
|
|
43433
43437
|
|
|
43434
|
-
\`runner.
|
|
43438
|
+
\`runner.revoke\` and \`work_order.cancel\` are \`human_required\`; \`runner.pairing.start\` and \`work_order.enqueue\` 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
43439
|
|
|
43436
43440
|
## Guardrails
|
|
43437
43441
|
|
|
@@ -43552,7 +43556,7 @@ Templates may draft. Humans approve. A stock agent should not go live until a hu
|
|
|
43552
43556
|
order: 77,
|
|
43553
43557
|
title: "Troubleshooting guide",
|
|
43554
43558
|
summary: "How users and agents should diagnose common setup, tool, Signal, Friction, and MCP problems.",
|
|
43555
|
-
version: "2026-06-18.
|
|
43559
|
+
version: "2026-06-18.4",
|
|
43556
43560
|
public: true,
|
|
43557
43561
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43558
43562
|
stages: ["company_setup", "staffing", "operating_rhythm"],
|
|
@@ -43611,7 +43615,7 @@ These are the common blockers when adding an agent (see the add-agents guide and
|
|
|
43611
43615
|
|
|
43612
43616
|
## When to stop for confirmation
|
|
43613
43617
|
|
|
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
|
|
43618
|
+
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
43619
|
|
|
43616
43620
|
## Agent guidance
|
|
43617
43621
|
|
|
@@ -43850,7 +43854,7 @@ A consultancy's purpose might be "Make expert tax guidance affordable for first-
|
|
|
43850
43854
|
order: 31,
|
|
43851
43855
|
title: "Charter authoring deep-dive",
|
|
43852
43856
|
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-
|
|
43857
|
+
version: "2026-06-18.1",
|
|
43854
43858
|
public: true,
|
|
43855
43859
|
audiences: ["cli", "mcp", "in_app_agent"],
|
|
43856
43860
|
stages: ["charter_design", "staffing"],
|
|
@@ -43894,7 +43898,7 @@ A Charter is a seat's executable operating contract. On the CLI and MCP path you
|
|
|
43894
43898
|
- **decision_authority** \u2014 the heart of the contract, split three ways:
|
|
43895
43899
|
- **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
43900
|
- **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
|
|
43901
|
+
- **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
43902
|
- **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
43903
|
- **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
43904
|
- **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 +44950,20 @@ function field(record2, key) {
|
|
|
44946
44950
|
}
|
|
44947
44951
|
return String(value);
|
|
44948
44952
|
}
|
|
44953
|
+
function formatDryRunTranscript(value) {
|
|
44954
|
+
const transcript = asRecord(value);
|
|
44955
|
+
const steps = asArray(transcript.steps);
|
|
44956
|
+
if (steps.length === 0) {
|
|
44957
|
+
return "";
|
|
44958
|
+
}
|
|
44959
|
+
const lines = steps.map((step) => {
|
|
44960
|
+
const record2 = asRecord(step);
|
|
44961
|
+
const kind = field(record2, "kind");
|
|
44962
|
+
const guard = record2.guard === null || record2.guard === void 0 ? "" : ` [${field(record2, "guard")}]`;
|
|
44963
|
+
return ` ${kind}: ${field(record2, "text")}${guard}`;
|
|
44964
|
+
});
|
|
44965
|
+
return ["rehearsal:", ...lines].join("\n");
|
|
44966
|
+
}
|
|
44949
44967
|
function markdownLine(output) {
|
|
44950
44968
|
const markdown = asRecord(output).markdown;
|
|
44951
44969
|
return typeof markdown === "string" ? markdown : JSON.stringify(output, null, 2);
|
|
@@ -45663,8 +45681,9 @@ var agentWrapper = (context, args) => dispatch(context, "agent", args, {
|
|
|
45663
45681
|
};
|
|
45664
45682
|
return execute(ctx, parsed, "agent.run_dry_run", body, (output) => {
|
|
45665
45683
|
const record2 = asRecord(output);
|
|
45666
|
-
|
|
45684
|
+
const header = `dry run for seat ${field(record2, "seat_id")} (charter ${field(record2, "charter_version_id")}): ${field(record2, "status")} (reused=${field(record2, "reused")})
|
|
45667
45685
|
${field(record2, "summary")}`;
|
|
45686
|
+
return [header, formatDryRunTranscript(record2.transcript)].filter((part) => part.length > 0).join("\n");
|
|
45668
45687
|
});
|
|
45669
45688
|
},
|
|
45670
45689
|
"go-live": (ctx, rest) => {
|