@rosthq/cli 0.7.103 → 0.7.105

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 CHANGED
@@ -41776,6 +41776,10 @@ var frictionIssueSummarySchema = external_exports.object({
41776
41776
  raised_by_seat_id: uuidSchema9,
41777
41777
  raised_by_seat_name: external_exports.string(),
41778
41778
  summary: external_exports.string(),
41779
+ // DER-1978 (S2): OPTIONAL short headline written at creation; null/absent when unset
41780
+ // (surfaces derive a clamped title from `summary`). Optional so existing callers and
41781
+ // legacy null-title rows validate unchanged.
41782
+ title: external_exports.string().nullable().optional(),
41779
41783
  severity: external_exports.enum(["low", "med", "high", "critical"]),
41780
41784
  impact_score: external_exports.number(),
41781
41785
  status: issueStatusSchema,
@@ -44181,10 +44185,15 @@ var workOrderListOutputSchema = external_exports.object({
44181
44185
  var workOrderEnqueueInputSchema = external_exports.object({
44182
44186
  agent_id: uuid8,
44183
44187
  scheduled_for: isoDateTime6.optional(),
44188
+ // DER-1973: cloud-lane only. A runner-lane agent rejects a task_id at enqueue —
44189
+ // a task-linked runner order is structurally unclaimable (the runner-claim SQL
44190
+ // requires task_id is null). Run task-linked runner work as an interactive agent turn.
44184
44191
  task_id: uuid8.optional()
44185
44192
  }).strict();
44186
44193
  var agentRunNowInputSchema = external_exports.object({
44187
44194
  seat_id: uuid8,
44195
+ // DER-1973: cloud-lane only. A runner-lane agent rejects a task_id at enqueue
44196
+ // (structurally unclaimable). Run task-linked runner work as an interactive agent turn.
44188
44197
  task_id: uuid8.optional()
44189
44198
  }).strict();
44190
44199
  var agentRunNowOutputSchema = external_exports.object({
@@ -46383,6 +46392,12 @@ var syncBriefGoalDeltaSchema = external_exports.object({
46383
46392
  title: external_exports.string().min(1),
46384
46393
  status: external_exports.enum(["on", "off", "done", "dropped"]),
46385
46394
  status_source: external_exports.string().min(1),
46395
+ // DER-1957 (S1): the goal's own progress reading (null when unmeasured), so the
46396
+ // sync-brief goal-delta row can render the shared goal-status chip with the same
46397
+ // pending-measurement rule Home and Cascade use — an unmeasured `on` goal reads
46398
+ // "Pending measurement", never a false "On track". Nullable + optional so briefs
46399
+ // persisted before this field parse unchanged.
46400
+ progress_pct: external_exports.number().int().min(0).max(100).nullable().optional(),
46386
46401
  changed_this_period: external_exports.boolean()
46387
46402
  }).strict();
46388
46403
  var syncBriefTaskReviewSchema = external_exports.object({
@@ -46624,6 +46639,12 @@ var escalationRaiseInputSchema = external_exports.object({
46624
46639
  charter_clause: external_exports.string().min(1),
46625
46640
  evidence: evidenceSchema,
46626
46641
  recommended_action: external_exports.string().min(1).optional(),
46642
+ // DER-1978 (S2): an OPTIONAL short human-readable title written at creation.
46643
+ // Agents' long narrative lands in `reason` (the body); this ≤90-char title is
46644
+ // what Home's "Needs you" band renders as the one-line summary. Optional so
46645
+ // every existing escalation event validates unchanged; when absent the read
46646
+ // surface derives a clamped title from `reason`.
46647
+ title: external_exports.string().trim().min(1).max(90).optional(),
46627
46648
  // DER-1848: reason-adjacent category. Optional so every existing escalation event
46628
46649
  // (and every ordinary held call) validates unchanged; present only when the agent
46629
46650
  // explicitly escalated with a category (today: a safety refusal).
@@ -46637,7 +46658,13 @@ var issueEventPayloadSchema = external_exports.object({
46637
46658
  blocking_goal_id: uuidSchema19.optional(),
46638
46659
  broken_measurable_id: uuidSchema19.optional(),
46639
46660
  evidence: evidenceSchema,
46640
- severity: external_exports.enum(["low", "med", "high", "critical"])
46661
+ severity: external_exports.enum(["low", "med", "high", "critical"]),
46662
+ // DER-1978 (S2): an OPTIONAL short human-readable title written at creation.
46663
+ // The agent's long narrative lands in `summary` (the body); this ≤90-char title
46664
+ // is what Home's "Needs you" band renders as the one-line summary. Optional so
46665
+ // every existing issue event validates unchanged; when absent the read surface
46666
+ // derives a clamped title from `summary`.
46667
+ title: external_exports.string().trim().min(1).max(90).optional()
46641
46668
  }).strict();
46642
46669
 
46643
46670
  // ../../packages/protocol/src/event-internal-payloads.ts
@@ -46900,6 +46927,10 @@ var stewardEscalationSchema = external_exports.object({
46900
46927
  steward_seat_id: uuidSchema22,
46901
46928
  steward_seat_name: external_exports.string(),
46902
46929
  reason: external_exports.string(),
46930
+ // DER-1978 (S2): OPTIONAL short headline written at creation; null/absent when unset
46931
+ // (surfaces derive a clamped title from `reason`). Optional so existing callers and
46932
+ // legacy null-title rows validate unchanged.
46933
+ title: external_exports.string().nullable().optional(),
46903
46934
  charter_clause: external_exports.string(),
46904
46935
  // DER-1848: the first-class escalation category, or null for an ordinary held call.
46905
46936
  // `safety_refusal` = the agent explicitly declined the task on safety grounds, so
@@ -48384,7 +48415,7 @@ Decisions should be recorded as human decisions. Handoffs should attach to seats
48384
48415
  order: 45,
48385
48416
  title: "How agents work",
48386
48417
  summary: "How {{brand}} agents operate inside seats, use Charters, report work, and escalate beyond authority.",
48387
- version: "2026-07-14.1",
48418
+ version: "2026-07-18.1",
48388
48419
  public: true,
48389
48420
  audiences: ["human", "cli", "mcp", "in_app_agent"],
48390
48421
  stages: ["staffing", "operating_rhythm"],
@@ -48455,7 +48486,7 @@ A seat-scoped MCP token or the CLI runs the hand-shaped protocol. The server sti
48455
48486
  2. Tasks: \`rost_get_tasks\` / \`{{cli}} task list --seat <seat-id>\`, then \`rost_accept_task\` / \`rost_decline_task\` (with a \`reason\`).
48456
48487
  3. Report: \`rost_report_status\` / \`{{cli}} status record --seat <seat-id>\` as work progresses; \`rost_log_work\` to record evidence.
48457
48488
  4. Finish: \`rost_complete_task\` / \`{{cli}} task complete --seat <seat-id>\` with evidence.
48458
- 5. Surface problems: \`rost_file_issue\` (Friction) and \`rost_escalate\` when the work exceeds autonomous scope.
48489
+ 5. Surface problems: \`rost_file_issue\` (Friction) and \`rost_escalate\` when the work exceeds autonomous scope. Both take an optional short \`title\` (\u226490 chars) for the "Needs you" headline \u2014 put the long narrative in the body (\`summary\` / \`reason\`).
48459
48490
 
48460
48491
  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.
48461
48492
 
@@ -48643,7 +48674,7 @@ External connectors are being rolled out provider by provider, conservatively (r
48643
48674
  order: 48,
48644
48675
  title: "CLI and MCP installation guide",
48645
48676
  summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
48646
- version: "2026-07-18.3",
48677
+ version: "2026-07-18.4",
48647
48678
  public: true,
48648
48679
  audiences: ["human", "cli", "mcp", "in_app_agent"],
48649
48680
  stages: ["company_setup", "staffing"],
@@ -49477,8 +49508,8 @@ Seat-scoped MCP tokens expose the operating protocol below. The server still che
49477
49508
  | \`rost_decline_task\` | \`task.decline\` | Decline a task with a reason. | Seat | Call with \`task_id\` and \`reason\`. |
49478
49509
  | \`rost_report_status\` | \`status.record\` | Write a status event. | Seat | Call with a concise status payload. |
49479
49510
  | \`rost_complete_task\` | \`task.complete\` | Complete a task and record evidence. | Seat | Call with \`task_id\` and evidence. |
49480
- | \`rost_escalate\` | \`escalation.raise\` | Escalate approval-scope or must-escalate work. | Seat | Call with severity, reason, and requested decision. |
49481
- | \`rost_file_issue\` | \`friction.file_issue\` | File a Friction issue. | Seat | Call with title, severity, and impact. Agent/scheduled producers may pass an optional \`source_key\` for deterministic idempotency \u2014 a repeat filing with the same key returns the existing open issue with \`already_filed:true\` and creates nothing new. |
49511
+ | \`rost_escalate\` | \`escalation.raise\` | Escalate approval-scope or must-escalate work. | Seat | Call with reason and requested decision; pass an optional short \`title\` (\u226490 chars) for the "Needs you" headline and keep the long narrative in \`reason\`. |
49512
+ | \`rost_file_issue\` | \`friction.file_issue\` | File a Friction issue. | Seat | Call with \`summary\`, severity, and evidence; pass an optional short \`title\` (\u226490 chars) for the headline and keep the long narrative in \`summary\`. Agent/scheduled producers may pass an optional \`source_key\` for deterministic idempotency \u2014 a repeat filing with the same key returns the existing open issue with \`already_filed:true\` and creates nothing new. |
49482
49513
  | \`rost_log_work\` | \`work.log\` | Record a lightweight free-text work breadcrumb for the seat. For structured, per-entity, queryable business activity (a client might ask "which ones?"), use \`rost_record_work\` instead. | Seat | Call with summary and evidence. |
49483
49514
  | \`rost_report_a_signal_reading\` | \`signal.report\` | Propose one draft reading for this seat's own agent-sourced measurable. The reading lands unconfirmed for human review. | Seat | Call with \`{"measurable_id":"<id>","value":42,"note":"read off the source","confidence":"high"}\`. |
49484
49515
  | \`rost_draft_first_readings_from_a_connected_source\` | \`signal.draft_first_readings\` | Pull this seat's measurable's connected source ONCE (read-only, SSRF-guarded) and land the value as a DRAFT reading for the current period, for a human to confirm. For a measurable that has a source but no confirmed reading yet. Never publishes and never fabricates a value \u2014 a non-numeric or blocked pull drafts nothing. | Seat | Call with \`{"measurable_id":"<id>"}\`. |
@@ -50171,7 +50202,7 @@ Agents may record readings when the Charter allows it. Agent-reported readings s
50171
50202
  order: 62,
50172
50203
  title: "Friction guide",
50173
50204
  summary: "How to capture issues with evidence, rank them, and resolve them without losing ownership.",
50174
- version: "2026-07-15.1",
50205
+ version: "2026-07-18.1",
50175
50206
  public: true,
50176
50207
  audiences: ["human", "cli", "mcp", "in_app_agent"],
50177
50208
  stages: ["operating_rhythm"],
@@ -50232,7 +50263,7 @@ The Friction page opens with one computed line \u2014 how many issues are open,
50232
50263
 
50233
50264
  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.
50234
50265
 
50235
- - 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\`.
50266
+ - File and triage: \`{{cli}} friction file ...\` / \`friction.file_issue\` (seat) / \`rost_file_issue\`. \`friction.file_issue\` takes an optional short \`title\` (\u226490 chars) for the "Needs you" headline \u2014 keep the long narrative in \`summary\`. 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\`.
50236
50267
  - 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 ordinary agent task lands as a **draft** proposal (\`origin: agent_proposal\`) for a target-side human to confirm or decline through \`task.confirm_proposal\` / \`task.decline_proposal\` in \`/approvals\` or the CLI \u2014 not MCP, and not a live offer in the owning seat's accept/decline queue. A bounded Trusted task-create grant may skip that draft card: it creates an **offered** handoff by default, and only creates **in_progress** when both proposing and target seats are live agent seats resolving to the same current accountable human Steward. A seat runs its live 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\`.
50237
50268
  - 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.
50238
50269
 
@@ -50255,7 +50286,7 @@ Resolving Friction should produce one of four outcomes: a decision, a task, a Ch
50255
50286
  order: 70,
50256
50287
  title: "Steward queue guide",
50257
50288
  summary: "How Stewards review escalations, approve agent boundaries, and keep agents accountable.",
50258
- version: "2026-07-16.2",
50289
+ version: "2026-07-18.1",
50259
50290
  public: true,
50260
50291
  audiences: ["human", "cli", "mcp", "in_app_agent"],
50261
50292
  stages: ["staffing", "operating_rhythm"],
@@ -50312,7 +50343,7 @@ Every notification sent to you \u2014 escalations, approval requests, sync brief
50312
50343
 
50313
50344
  The Steward reads the queue from any surface but decides as a human.
50314
50345
 
50315
- - 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.
50346
+ - 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. An item may carry a short \`title\` (\u226490 chars) the raising agent wrote as the "Needs you" headline; the full narrative stays in \`reason\`.
50316
50347
  - 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.
50317
50348
  - 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\`.
50318
50349
 
@@ -50723,7 +50754,7 @@ Every notification should include the seat, cause, evidence, and requested decis
50723
50754
  order: 75,
50724
50755
  title: "Local runner guide",
50725
50756
  summary: "How local agent sessions and runner surfaces should operate through {{brand}} without bypassing Charters or audit.",
50726
- version: "2026-07-16.1",
50757
+ version: "2026-07-18.1",
50727
50758
  public: true,
50728
50759
  audiences: ["human", "cli", "mcp", "in_app_agent"],
50729
50760
  stages: ["staffing", "operating_rhythm"],
@@ -50803,7 +50834,7 @@ A Forge turn should load its context in one order: build context first, then Ski
50803
50834
  - Inspect: \`{{cli}} runner list --json\` / \`runner.list\` / \`rost_list_runners\` shows heartbeat state plus execution readiness. A runner is execute-ready only when it has a live heartbeat, a detected local Claude or Codex runtime, and recent claim/result evidence or active queue processing. Settings and runner status/list surfaces also project the runner CLI version, sandbox posture, network posture, and reported capability set from heartbeat so operators can see whether the machine is current and still running with the expected guardrails. \`{{cli}} runner status\` / \`runner.status\` / \`rost_runner_status\` reads one runner with the same execution detail, due queue count, claimed/running counts, and recent result timestamps. Both surfaces also project a \`capacity\` view: the runner's active model-account alias, a badge state (\`available\`, \`near_cap\`, \`exhausted\`, or \`unknown\`), a rate-limited-until timestamp when the harness has classified one, and a fresh/stale refreshability flag mirroring heartbeat recency. The badge reads \`unknown\` \u2014 never a fabricated \`available\` \u2014 whenever no capacity observation has been recorded yet or the runner reported a state {{brand}} does not recognize; real 5-hour/weekly usage percentages and reset timestamps are not collected yet, so this view never claims a percentage it does not have. Settings > Connected machines and the Health dashboard's Connectivity tile (a fleet-wide near-cap/at-limit count) surface the same signal.
50804
50835
  - Diagnose (DER-949): \`{{cli}} runner diagnose --runner-id <id>\` / \`runner.diagnose\` / \`rost_diagnose_runner\` returns health, capabilities, and repair guidance without exposing secrets. Use when a runner is offline or stale to get actionable next steps.
50805
50836
  - Repair steps (DER-949): \`{{cli}} runner repair --runner-id <id> [--issue restart|re_pair|revoke_stale|missing_cli_runtime]\` / \`runner.repair\` / \`rost_repair_runner\` returns focused repair instructions. The optional \`issue\` flag narrows to a specific kind of repair (restart the app, re-pair, revoke a stale runner, or install a missing CLI runtime).
50806
- - 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\`. The operator Settings page mirrors queued, claimed, running, and recent completed runner evidence so online does not imply can execute.
50837
+ - 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\`. The operator Settings page mirrors queued, claimed, running, and recent completed runner evidence so online does not imply can execute. \`task_id\` on either enqueue command is cloud-lane only: a runner-lane agent rejects it, because a task-linked runner work order is structurally unclaimable \u2014 run task-linked runner work as an interactive agent turn (see Interactive AICOS runner turns above), not through the scheduled work-order lane.
50807
50838
  - Revoke: \`{{cli}} runner revoke\` / \`runner.revoke\` / \`rost_revoke_runner\` so a runner can no longer authenticate.
50808
50839
 
50809
50840
  ## Owner-initiated headless pairing
@@ -52716,7 +52747,7 @@ var COMMAND_MANIFEST = [
52716
52747
  { "id": "agent.resume", "namespace": "agent", "action": "resume", "title": "Resume agent", "description": "Resume a paused agent back to live. Blocks if the steward chain no longer resolves to a human.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Resume a paused agent back to live; the no-orphan guard blocks a resume whose steward chain no longer resolves to a human." },
52717
52748
  { "id": "agent.run_dry_run", "namespace": "agent", "action": "run_dry_run", "title": "Run agent dry run", "description": "Run the sandbox dry run for a draft agent. Durable and idempotent per Charter version; a passed result is reused, never re-run.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Run the sandbox dry run for a draft agent after the manifest is signed; the result is durable and idempotent per Charter version, and a passed run is reused.", "example": { "seat_id": "0190aaaa-aaaa-7aaa-8aaa-aaaaaaaaaaaa", "charter_version_id": "0190cccc-cccc-7ccc-8ccc-cccccccccccc" } },
52718
52749
  { "id": "agent.run_heartbeats", "namespace": "agent", "action": "run_heartbeats", "title": "Get run heartbeats", "description": "Reads the per-seat run-heartbeat roll-up (quiet-but-healthy vs stalled) for long-running agent programs.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_ids", "flag": "seat-ids", "type": "array", "required": false, "itemType": "string" }], "hasComplexInput": false, "help": "Read the per-seat run-heartbeat roll-up to tell a quiet-but-healthy long-running agent program apart from a stalled one." },
52719
- { "id": "agent.run_now", "namespace": "agent", "action": "run_now", "title": "Run agent now", "description": "Queue and dispatch an immediate work order for a live cloud or runner agent on a seat.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "task_id", "flag": "task-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Queue and dispatch an immediate live agent run without changing the agent's saved schedule." },
52750
+ { "id": "agent.run_now", "namespace": "agent", "action": "run_now", "title": "Run agent now", "description": "Queue and dispatch an immediate work order for a live cloud or runner agent on a seat. task_id is cloud-lane only; a runner-lane agent rejects it.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "task_id", "flag": "task-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Queue and dispatch an immediate live agent run without changing the agent's saved schedule. task_id is cloud-lane only; a runner-lane agent rejects it (run task-linked runner work as an interactive agent turn)." },
52720
52751
  { "id": "agent.show_markdown", "namespace": "agent", "action": "show_markdown", "title": "Show agent setup as markdown", "description": "Compose a seat's agent setup, steward, model, tools, and Charter into a clean, human-skimmable markdown card for review.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Render a seat's agent setup, model, steward, tools, and Charter as a clean markdown card to show your human a quick review." },
52721
52752
  { "id": "agent.status", "namespace": "agent", "action": "status", "title": "Get agent status", "description": "Return the agent occupancy, lane, schedule, live/offline state, steward chain, dry-run result, and Runner availability for a seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Check an agent's lane, live state, steward chain, dry-run result, and Runner availability before relying on it." },
52722
52753
  { "id": "agent.trust.create", "namespace": "agent", "action": "trust.create", "title": "Create agent Trusted grant", "description": "Create a bounded Trusted execution grant for a live agent after a human steward/admin signs the current activation receipt digest.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "expected_scope_digest", "flag": "expected-scope-digest", "type": "string", "required": true }, { "name": "budget_cents", "flag": "budget-cents", "type": "integer", "required": true }, { "name": "expires_at", "flag": "expires-at", "type": "string", "required": false }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Create a bounded Trusted execution grant only after reviewing the activation receipt digest, budget, and always-human boundary. Human steward/admin only." },
@@ -52776,13 +52807,13 @@ var COMMAND_MANIFEST = [
52776
52807
  { "id": "escalation.bulk_resolve", "namespace": "escalation", "action": "bulk_resolve", "title": "Bulk resolve escalations", "description": "Override (safely close) a batch of stale open escalations in one human-confirmed action, with a required reason. Each escalation is decided independently (partial success) and writes its own human decision; already-decided, not-routed, or missing ids are skipped. Agents cannot bulk-resolve.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "escalation_ids", "flag": "escalation-ids", "type": "array", "required": true, "itemType": "string" }, { "name": "reason", "flag": "reason", "type": "string", "required": true }], "hasComplexInput": false, "help": "Override (safely close) a batch of stale open escalations in one human-confirmed action; each records its own human decision and already-decided, not-routed, or missing ids are skipped. Agents cannot bulk-resolve." },
52777
52808
  { "id": "escalation.get", "namespace": "escalation", "action": "get", "title": "Get escalation", "description": "Read a single escalation the caller is allowed to see (own steward chain for humans, own seat for agents).", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Read one escalation's evidence and recommendation before a human resolves or rejects it." },
52778
52809
  { "id": "escalation.list", "namespace": "escalation", "action": "list", "title": "List escalations", "description": "List Steward queue escalations routed to the caller's steward chain (human) or raised by the caller's seat (agent).", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "include_decided", "flag": "include-decided", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "List Steward queue escalations (own chain for humans, own seat for agents) before resolving or routing them." },
52779
- { "id": "escalation.raise", "namespace": "escalation", "action": "raise", "title": "Raise escalation", "description": "Emit an escalation event and open a Steward queue item for the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "reason", "flag": "reason", "type": "string", "required": true }, { "name": "charter_clause", "flag": "charter-clause", "type": "string", "required": true }, { "name": "recommended_action", "flag": "recommended-action", "type": "string", "required": false }, { "name": "category", "flag": "category", "type": "enum", "required": false, "enumValues": ["safety_refusal"] }], "hasComplexInput": true, "help": "Raise an escalation to the seat's Steward when a decision exceeds the seat's authority; humans decide." },
52810
+ { "id": "escalation.raise", "namespace": "escalation", "action": "raise", "title": "Raise escalation", "description": "Emit an escalation event and open a Steward queue item for the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "reason", "flag": "reason", "type": "string", "required": true }, { "name": "charter_clause", "flag": "charter-clause", "type": "string", "required": true }, { "name": "recommended_action", "flag": "recommended-action", "type": "string", "required": false }, { "name": "title", "flag": "title", "type": "string", "required": false }, { "name": "category", "flag": "category", "type": "enum", "required": false, "enumValues": ["safety_refusal"] }], "hasComplexInput": true, "help": "Raise an escalation to the seat's Steward when a decision exceeds the seat's authority; humans decide." },
52780
52811
  { "id": "escalation.reject", "namespace": "escalation", "action": "reject", "title": "Reject escalation", "description": "Override an open escalation so the agent must not proceed. Writes a human decision; agents cannot reject.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "Reject (override) an escalation so the agent must not proceed; the decision records the human decider. Agents cannot reject." },
52781
52812
  { "id": "escalation.resolve", "namespace": "escalation", "action": "resolve", "title": "Resolve escalation", "description": "Approve an open escalation (or convert it to Friction). Writes a human decision; agents cannot resolve.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }, { "name": "action", "flag": "action", "type": "enum", "required": false, "enumValues": ["approve", "convert_to_issue"] }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "Resolve an escalation as a human Steward; the decision records decided_by as the approving human. Agents cannot resolve." },
52782
52813
  { "id": "escalation.stale_candidates", "namespace": "escalation", "action": "stale_candidates", "title": "Find stale escalations", "description": "List open escalations routed to the caller's steward chain that have aged and still reference a concrete DER issue or PR, with a per-row confidence tier and evidence. Read-only \u2014 it never decides anything.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "stale_after_days", "flag": "stale-after-days", "type": "integer", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List aged open escalations in the caller's steward chain that still reference a concrete DER issue or PR \u2014 candidates for a bulk override. Read-only." },
52783
52814
  { "id": "friction.assist", "namespace": "friction", "action": "assist", "title": "Assist Friction issue", "description": "Advisory IDS assist for an issue: the most-similar prior resolved issues with their root causes and decisions, a recurring-pattern flag, and recommended options. Read-only \u2014 it never resolves the issue.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Advisory IDS assist: the most-similar prior resolved issues with their root causes and decisions, plus a recurring-pattern flag. Read-only \u2014 it never resolves the issue." },
52784
52815
  { "id": "friction.bulk_resolve", "namespace": "friction", "action": "bulk_resolve", "title": "Bulk resolve friction", "description": "Resolve a batch of stale Friction issues in one human-confirmed action with a required root cause (already-fixed mode \u2014 no follow-up task). Each issue is resolved independently (partial success) and writes its own human decision; already-resolved or missing ids are skipped.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "issue_ids", "flag": "issue-ids", "type": "array", "required": true, "itemType": "string" }, { "name": "root_cause", "flag": "root-cause", "type": "string", "required": true }], "hasComplexInput": false, "help": "Resolve a batch of stale issues in one human-confirmed action with a required root cause (already-fixed mode); each records its own human decision and already-resolved or missing ids are skipped." },
52785
- { "id": "friction.file_issue", "namespace": "friction", "action": "file_issue", "title": "File Friction issue", "description": "Emit an issue event and open a Friction issue raised by the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "summary", "flag": "summary", "type": "string", "required": true }, { "name": "blocking_goal_id", "flag": "blocking-goal-id", "type": "string", "required": false }, { "name": "broken_measurable_id", "flag": "broken-measurable-id", "type": "string", "required": false }, { "name": "severity", "flag": "severity", "type": "enum", "required": true, "enumValues": ["low", "med", "high", "critical"] }, { "name": "source_key", "flag": "source-key", "type": "string", "required": false }], "hasComplexInput": true, "help": "File a Friction issue with evidence when a goal or measurable is blocked or broken." },
52816
+ { "id": "friction.file_issue", "namespace": "friction", "action": "file_issue", "title": "File Friction issue", "description": "Emit an issue event and open a Friction issue raised by the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "summary", "flag": "summary", "type": "string", "required": true }, { "name": "blocking_goal_id", "flag": "blocking-goal-id", "type": "string", "required": false }, { "name": "broken_measurable_id", "flag": "broken-measurable-id", "type": "string", "required": false }, { "name": "severity", "flag": "severity", "type": "enum", "required": true, "enumValues": ["low", "med", "high", "critical"] }, { "name": "title", "flag": "title", "type": "string", "required": false }, { "name": "source_key", "flag": "source-key", "type": "string", "required": false }], "hasComplexInput": true, "help": "File a Friction issue with evidence when a goal or measurable is blocked or broken." },
52786
52817
  { "id": "friction.get", "namespace": "friction", "action": "get", "title": "Get Friction issue", "description": "Get full detail for one Friction issue by id.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Get full detail for one Friction issue by id, including its root cause, action task, and resolution decision when present." },
52787
52818
  { "id": "friction.import", "namespace": "friction", "action": "import", "title": "Import Friction issues from a ninety Issues List", "description": "Bulk-import a ninety Issues List export into Friction. Owners are seat names resolved to seats; each issue is raised by the resolved seat and attributed to the importing human. Idempotent \u2014 re-importing the same export is a no-op, and an existing open issue with the same seat + summary is skipped.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "dry_run", "flag": "dry-run", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Import a ninety Issues List export into Friction; owners resolve to seats, idempotent by file + seat/summary." },
52788
52819
  { "id": "friction.link_task", "namespace": "friction", "action": "link_task", "title": "Link task to Friction issue", "description": "Attach an existing tenant task as the action task for a non-terminal issue. Both ids must belong to the tenant.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }, { "name": "task_id", "flag": "task-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Attach an existing task as the action task for a non-terminal issue." },
@@ -52966,7 +52997,7 @@ var COMMAND_MANIFEST = [
52966
52997
  { "id": "user.use_tenant", "namespace": "user", "action": "use_tenant", "title": "Select tenant", "description": "Validate and return an active tenant selection for the authenticated CLI user.", "requiredScope": "user", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "tenant", "flag": "tenant", "type": "string", "required": true }], "hasComplexInput": false, "help": "Set the active tenant explicitly before running onboarding, graph, Charter, or staffing commands." },
52967
52998
  { "id": "user.whoami", "namespace": "user", "action": "whoami", "title": "Who am I", "description": "Return the authenticated CLI user and accessible tenant roles.", "requiredScope": "user", "confirmation": "none", "exposeOverMcp": false, "fields": [], "hasComplexInput": false, "help": "Use session identity checks before making tenant-scoped recommendations or setup changes." },
52968
52999
  { "id": "work_order.cancel", "namespace": "work_order", "action": "cancel", "title": "Cancel work order", "description": "Cancel a queued, claimed, or running work order. Already-terminal orders return a stable error.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "work_order_id", "flag": "work-order-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Cancel a queued, claimed, or running work order; this is a human-gated action." },
52969
- { "id": "work_order.enqueue", "namespace": "work_order", "action": "enqueue", "title": "Enqueue work order", "description": "Queue a work order for a live scheduled agent. Idempotent per (agent, scheduled time).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "scheduled_for", "flag": "scheduled-for", "type": "string", "required": false }, { "name": "task_id", "flag": "task-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Queue a work order for a live scheduled agent; enqueue is idempotent per agent and scheduled time." },
53000
+ { "id": "work_order.enqueue", "namespace": "work_order", "action": "enqueue", "title": "Enqueue work order", "description": "Queue a work order for a live scheduled agent. Idempotent per (agent, scheduled time). task_id is cloud-lane only; a runner-lane agent rejects it.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "scheduled_for", "flag": "scheduled-for", "type": "string", "required": false }, { "name": "task_id", "flag": "task-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Queue a work order for a live scheduled agent; enqueue is idempotent per agent and scheduled time. task_id is cloud-lane only; a runner-lane agent rejects it (run task-linked runner work as an interactive agent turn)." },
52970
53001
  { "id": "work_order.list", "namespace": "work_order", "action": "list", "title": "List work orders", "description": "List runner/cloud work orders for the tenant, optionally filtered by status, agent, or runner.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["queued", "claimed", "running", "done", "failed", "expired"] }, { "name": "agent_id", "flag": "agent-id", "type": "string", "required": false }, { "name": "runner_id", "flag": "runner-id", "type": "string", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Inspect queued, claimed, running, and expired work orders to understand runner activity." },
52971
53002
  { "id": "work.list", "namespace": "work", "action": "list", "title": "List work records", "description": "List the acting seat's work-ledger records newest-first (keyset-paginated), filterable by verb, object kind/ref, outcome, or run. Superseded records are hidden unless include_superseded is set.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "verb", "flag": "verb", "type": "enum", "required": false, "enumValues": ["created", "updated", "removed", "sent", "received", "contacted", "replied", "offered", "accepted", "rejected", "assessed", "announced", "assigned", "invited", "flagged", "booked", "searched", "filed", "extracted", "escalated"] }, { "name": "outcome", "flag": "outcome", "type": "enum", "required": false, "enumValues": ["success", "warning", "error", "held"] }, { "name": "object_kind", "flag": "object-kind", "type": "string", "required": false }, { "name": "object_external_id", "flag": "object-external-id", "type": "string", "required": false }, { "name": "run_id", "flag": "run-id", "type": "string", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "include_superseded", "flag": "include-superseded", "type": "boolean", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }, { "name": "cursor", "flag": "cursor", "type": "string", "required": false }], "hasComplexInput": false, "help": "List the seat's work-ledger records newest-first with keyset pagination, filterable by verb, object, outcome, or run." },
52972
53003
  { "id": "work.log", "namespace": "work", "action": "log", "title": "Log work", "description": "Write a lightweight activity breadcrumb event for the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "note", "flag": "note", "type": "string", "required": true }], "hasComplexInput": false, "help": "Log a lightweight work breadcrumb so the seat's activity is visible without durable side effects." },