@rosthq/cli 0.7.81 → 0.7.83
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
|
@@ -39891,6 +39891,86 @@ var toolGrantsAgentUpdateOutputSchema = external_exports.object({
|
|
|
39891
39891
|
}).strict();
|
|
39892
39892
|
var scopeDigestSchema = external_exports.string().regex(/^sha256:[0-9a-f]{64}$/);
|
|
39893
39893
|
var classifierVersionSchema = external_exports.string().regex(/^[a-z][a-z0-9_.-]{0,79}$/);
|
|
39894
|
+
var toolGrantsTenantUpdateGrantInputSchema = external_exports.object({
|
|
39895
|
+
tool_grant_id: uuidSchema5,
|
|
39896
|
+
max_access_level: capabilityGrantAccessLevelSchema,
|
|
39897
|
+
default_agent_access_level: capabilityGrantAccessLevelSchema.optional()
|
|
39898
|
+
}).strict();
|
|
39899
|
+
var toolGrantsTenantUpdateInputSchema = external_exports.object({
|
|
39900
|
+
expected_policy_version: external_exports.number().int().nonnegative().optional(),
|
|
39901
|
+
expected_policy_digest: scopeDigestSchema.optional(),
|
|
39902
|
+
mode: external_exports.enum(["managed", "open"]),
|
|
39903
|
+
grants: external_exports.array(toolGrantsTenantUpdateGrantInputSchema).max(50).default([])
|
|
39904
|
+
}).strict().superRefine((value, ctx) => {
|
|
39905
|
+
if (value.expected_policy_version === void 0 && value.expected_policy_digest === void 0) {
|
|
39906
|
+
ctx.addIssue({
|
|
39907
|
+
code: external_exports.ZodIssueCode.custom,
|
|
39908
|
+
message: "Provide expected_policy_version or expected_policy_digest.",
|
|
39909
|
+
path: ["expected_policy_version"]
|
|
39910
|
+
});
|
|
39911
|
+
}
|
|
39912
|
+
const seen = /* @__PURE__ */ new Set();
|
|
39913
|
+
for (const [index, grant] of value.grants.entries()) {
|
|
39914
|
+
if (seen.has(grant.tool_grant_id)) {
|
|
39915
|
+
ctx.addIssue({
|
|
39916
|
+
code: external_exports.ZodIssueCode.custom,
|
|
39917
|
+
message: "Duplicate tool_grant_id values are not allowed.",
|
|
39918
|
+
path: ["grants", index, "tool_grant_id"]
|
|
39919
|
+
});
|
|
39920
|
+
continue;
|
|
39921
|
+
}
|
|
39922
|
+
seen.add(grant.tool_grant_id);
|
|
39923
|
+
if (grant.default_agent_access_level !== void 0) {
|
|
39924
|
+
const levels = capabilityGrantAccessLevelSchema.options;
|
|
39925
|
+
const maxRank = levels.indexOf(grant.max_access_level);
|
|
39926
|
+
const defaultRank = levels.indexOf(grant.default_agent_access_level);
|
|
39927
|
+
if (defaultRank > maxRank) {
|
|
39928
|
+
ctx.addIssue({
|
|
39929
|
+
code: external_exports.ZodIssueCode.custom,
|
|
39930
|
+
message: "default_agent_access_level cannot exceed max_access_level.",
|
|
39931
|
+
path: ["grants", index, "default_agent_access_level"]
|
|
39932
|
+
});
|
|
39933
|
+
}
|
|
39934
|
+
}
|
|
39935
|
+
}
|
|
39936
|
+
});
|
|
39937
|
+
var toolGrantsTenantUpdateGrantResultSchema = external_exports.object({
|
|
39938
|
+
tool_grant_id: uuidSchema5,
|
|
39939
|
+
capability_id: external_exports.string().min(1),
|
|
39940
|
+
max_access_level: capabilityGrantAccessLevelSchema,
|
|
39941
|
+
default_agent_access_level: capabilityGrantAccessLevelSchema
|
|
39942
|
+
}).strict();
|
|
39943
|
+
var toolGrantsTenantUpdateAgentImpactSchema = external_exports.object({
|
|
39944
|
+
agent_id: uuidSchema5,
|
|
39945
|
+
seat_id: uuidSchema5,
|
|
39946
|
+
capability_ids: external_exports.array(external_exports.string().min(1)).min(1)
|
|
39947
|
+
}).strict();
|
|
39948
|
+
var toolGrantsTenantUpdateOutputSchema = external_exports.object({
|
|
39949
|
+
policy: external_exports.object({
|
|
39950
|
+
mode: external_exports.enum(["managed", "open"]),
|
|
39951
|
+
version: external_exports.number().int().nonnegative(),
|
|
39952
|
+
digest: scopeDigestSchema
|
|
39953
|
+
}).strict(),
|
|
39954
|
+
changed_grants: external_exports.array(toolGrantsTenantUpdateGrantResultSchema),
|
|
39955
|
+
clamped_defaults: external_exports.array(toolGrantsTenantUpdateGrantResultSchema),
|
|
39956
|
+
affected_live_agents: external_exports.array(toolGrantsTenantUpdateAgentImpactSchema)
|
|
39957
|
+
}).strict();
|
|
39958
|
+
var executableHandlerCoverageItemSchema = external_exports.object({
|
|
39959
|
+
tool_name: external_exports.string().min(1),
|
|
39960
|
+
implemented: external_exports.boolean()
|
|
39961
|
+
}).strict();
|
|
39962
|
+
var executableHandlerCoverageInputSchema = external_exports.object({
|
|
39963
|
+
registry_tool_names: external_exports.array(external_exports.string().min(1)).default([]),
|
|
39964
|
+
catalog_tool_names: external_exports.array(external_exports.string().min(1)).default([]),
|
|
39965
|
+
required_tool_names: external_exports.array(external_exports.string().min(1)).default([])
|
|
39966
|
+
}).strict();
|
|
39967
|
+
var executableHandlerCoverageOutputSchema = external_exports.object({
|
|
39968
|
+
coverage_digest: scopeDigestSchema,
|
|
39969
|
+
covered_tool_names: external_exports.array(external_exports.string().min(1)),
|
|
39970
|
+
missing_registry_tool_names: external_exports.array(external_exports.string().min(1)),
|
|
39971
|
+
missing_catalog_tool_names: external_exports.array(external_exports.string().min(1)),
|
|
39972
|
+
items: external_exports.array(executableHandlerCoverageItemSchema)
|
|
39973
|
+
}).strict();
|
|
39894
39974
|
var agentActivationReceiptInputSchema = external_exports.object({
|
|
39895
39975
|
agent_id: uuidSchema5,
|
|
39896
39976
|
proposed_budget_cents: external_exports.number().int().nonnegative().max(1e7).optional()
|
|
@@ -42457,6 +42537,14 @@ var tenantAnthropicKeySaveInputSchema = external_exports.object({
|
|
|
42457
42537
|
var tenantAnthropicKeySaveOutputSchema = external_exports.object({
|
|
42458
42538
|
stored: external_exports.literal(true)
|
|
42459
42539
|
}).strict();
|
|
42540
|
+
var tenantAnthropicKeyDisableInputSchema = external_exports.object({}).strict();
|
|
42541
|
+
var tenantAnthropicKeyDisableOutputSchema = external_exports.object({
|
|
42542
|
+
tenant_id: uuidSchema11,
|
|
42543
|
+
credential_id: uuidSchema11.nullable(),
|
|
42544
|
+
disabled: external_exports.boolean(),
|
|
42545
|
+
already_disabled: external_exports.boolean(),
|
|
42546
|
+
managed_fallback_ready: external_exports.boolean()
|
|
42547
|
+
}).strict();
|
|
42460
42548
|
var seatCreateInputSchema = external_exports.object({
|
|
42461
42549
|
name: external_exports.string().trim().min(1).max(120),
|
|
42462
42550
|
parent_seat_id: uuidSchema11.nullable().optional(),
|
|
@@ -42781,6 +42869,7 @@ var markNotificationsReadRequestSchema = external_exports.object({
|
|
|
42781
42869
|
|
|
42782
42870
|
// ../../packages/protocol/src/product-analytics.ts
|
|
42783
42871
|
var uuidSchema12 = external_exports.string().uuid();
|
|
42872
|
+
var opaqueRequestIdSchema = external_exports.string().trim().min(1).max(240);
|
|
42784
42873
|
var safeNameSchema = external_exports.string().trim().min(1).max(120).regex(/^[a-z][a-z0-9._:-]*$/);
|
|
42785
42874
|
var safeSurfaceSchema = external_exports.string().trim().min(1).max(80).regex(/^[a-z][a-z0-9_-]*$/);
|
|
42786
42875
|
var routeSegmentSchema = /^(?:[a-z][a-z0-9-]{0,31}|:[a-z][a-z0-9_]{0,31}|\*)$/;
|
|
@@ -42866,15 +42955,21 @@ var commandInvocationInputSchema = external_exports.object({
|
|
|
42866
42955
|
tenant_id: uuidSchema12,
|
|
42867
42956
|
user_id: uuidSchema12.optional(),
|
|
42868
42957
|
seat_id: uuidSchema12.optional(),
|
|
42958
|
+
run_id: uuidSchema12.optional(),
|
|
42959
|
+
agent_turn_execution_id: uuidSchema12.optional(),
|
|
42960
|
+
session_id: uuidSchema12.optional(),
|
|
42869
42961
|
command_id: safeNameSchema,
|
|
42870
42962
|
source: analyticsSourceSchema,
|
|
42871
42963
|
actor_kind: external_exports.enum(["user", "agent", "system"]),
|
|
42964
|
+
execution_lane: external_exports.enum(["chat", "run", "mcp_session", "runner", "system"]).optional(),
|
|
42965
|
+
initiator_kind: external_exports.enum(["user", "agent", "system"]).optional(),
|
|
42966
|
+
initiator_user_id: uuidSchema12.nullable().optional(),
|
|
42872
42967
|
scope_kind: external_exports.enum(["tenant_admin", "tenant", "seat"]),
|
|
42873
42968
|
status: commandInvocationStatusSchema,
|
|
42874
42969
|
guard_result: external_exports.enum(["allowed", "denied_manifest", "denied_budget", "escalated", "denied_tenant_policy"]).optional(),
|
|
42875
42970
|
duration_ms: durationMsSchema,
|
|
42876
42971
|
confirmation_required: external_exports.boolean().optional(),
|
|
42877
|
-
request_id:
|
|
42972
|
+
request_id: opaqueRequestIdSchema.optional(),
|
|
42878
42973
|
properties: analyticsPropertiesSchema.optional(),
|
|
42879
42974
|
occurred_at: external_exports.string().datetime({ offset: true }).optional()
|
|
42880
42975
|
}).strict().superRefine((value, ctx) => {
|
|
@@ -43343,8 +43438,8 @@ var seatTrustSummarySchema = external_exports.object({
|
|
|
43343
43438
|
run_count: external_exports.number().int().nonnegative(),
|
|
43344
43439
|
failed_run_count: external_exports.number().int().nonnegative(),
|
|
43345
43440
|
tool_call_count: external_exports.number().int().nonnegative(),
|
|
43346
|
-
// The hero metric: actions held this period because they exceeded the charter.
|
|
43347
43441
|
denied_tool_call_count: external_exports.number().int().nonnegative(),
|
|
43442
|
+
held_tool_call_count: external_exports.number().int().nonnegative(),
|
|
43348
43443
|
last_activity_at: isoDateTime4.nullable()
|
|
43349
43444
|
}).strict();
|
|
43350
43445
|
var agentListRunsInputSchema = external_exports.object({
|
|
@@ -43372,6 +43467,7 @@ var seatRunSchema = external_exports.object({
|
|
|
43372
43467
|
cost_usd: external_exports.string(),
|
|
43373
43468
|
tool_call_count: external_exports.number().int().nonnegative(),
|
|
43374
43469
|
denied_tool_call_count: external_exports.number().int().nonnegative(),
|
|
43470
|
+
held_tool_call_count: external_exports.number().int().nonnegative(),
|
|
43375
43471
|
skill_activation_count: external_exports.number().int().nonnegative()
|
|
43376
43472
|
}).strict();
|
|
43377
43473
|
var seatRunErrorLogSchema = runErrorLogSchema.extend({
|
|
@@ -43677,6 +43773,34 @@ var runnerExecutionReadinessSchema = external_exports.object({
|
|
|
43677
43773
|
recent_completed_at: isoDateTime6.nullable(),
|
|
43678
43774
|
recent_failed_at: isoDateTime6.nullable()
|
|
43679
43775
|
}).strict();
|
|
43776
|
+
var runnerClaimabilityCheckSchema = external_exports.object({
|
|
43777
|
+
key: external_exports.string(),
|
|
43778
|
+
actual: external_exports.union([external_exports.string(), external_exports.number(), external_exports.boolean(), external_exports.null()]),
|
|
43779
|
+
required: external_exports.union([external_exports.string(), external_exports.number(), external_exports.boolean(), external_exports.null()]),
|
|
43780
|
+
passed: external_exports.boolean(),
|
|
43781
|
+
remediation: external_exports.string()
|
|
43782
|
+
}).strict();
|
|
43783
|
+
var runnerClaimabilityExplainSchema = external_exports.object({
|
|
43784
|
+
claimable: external_exports.boolean(),
|
|
43785
|
+
build_claimable: external_exports.boolean(),
|
|
43786
|
+
merge_claimable: external_exports.boolean(),
|
|
43787
|
+
checks: external_exports.array(runnerClaimabilityCheckSchema),
|
|
43788
|
+
hold_reasons: external_exports.array(external_exports.enum([
|
|
43789
|
+
"dependency",
|
|
43790
|
+
"serial",
|
|
43791
|
+
"evidence",
|
|
43792
|
+
"human",
|
|
43793
|
+
"runner_capability",
|
|
43794
|
+
"runner_version",
|
|
43795
|
+
"runner_sandbox",
|
|
43796
|
+
"capacity",
|
|
43797
|
+
"schedule",
|
|
43798
|
+
"paused",
|
|
43799
|
+
"policy",
|
|
43800
|
+
"unknown"
|
|
43801
|
+
])),
|
|
43802
|
+
remediation: external_exports.string()
|
|
43803
|
+
}).strict();
|
|
43680
43804
|
var runnerSandboxPostureSchema = external_exports.enum(["guard", "strict", "off", "none", "unknown"]);
|
|
43681
43805
|
var runnerPostureSchema = external_exports.object({
|
|
43682
43806
|
sandbox: runnerSandboxPostureSchema,
|
|
@@ -43777,6 +43901,7 @@ var runnerDiagnoseOutputSchema = external_exports.object({
|
|
|
43777
43901
|
last_heartbeat_at: isoDateTime6.nullable(),
|
|
43778
43902
|
paired_at: isoDateTime6.nullable(),
|
|
43779
43903
|
revocation_state: external_exports.enum(["active", "revoked", "unpaired"]),
|
|
43904
|
+
claimability: runnerClaimabilityExplainSchema,
|
|
43780
43905
|
repair_guidance: external_exports.array(external_exports.object({
|
|
43781
43906
|
action: external_exports.string(),
|
|
43782
43907
|
command: external_exports.string(),
|
|
@@ -44626,6 +44751,62 @@ var softwarePhaseSchedulerStateSchema = external_exports.object({
|
|
|
44626
44751
|
remediation_href: external_exports.string().nullable(),
|
|
44627
44752
|
work_order_id: uuid11.nullable()
|
|
44628
44753
|
});
|
|
44754
|
+
var softwareDispatchHoldReasonSchema = external_exports.enum([
|
|
44755
|
+
"dependency",
|
|
44756
|
+
"serial",
|
|
44757
|
+
"evidence",
|
|
44758
|
+
"human",
|
|
44759
|
+
"runner_capability",
|
|
44760
|
+
"runner_version",
|
|
44761
|
+
"runner_sandbox",
|
|
44762
|
+
"capacity",
|
|
44763
|
+
"schedule",
|
|
44764
|
+
"paused",
|
|
44765
|
+
"policy",
|
|
44766
|
+
"unknown"
|
|
44767
|
+
]);
|
|
44768
|
+
var softwareDispatchPreviewRunnerRequirementSchema = external_exports.object({
|
|
44769
|
+
profile: external_exports.enum(["forge_build", "forge_merge", "grooming"]),
|
|
44770
|
+
min_cli_version: external_exports.string().nullable(),
|
|
44771
|
+
min_merge_version: external_exports.string().nullable(),
|
|
44772
|
+
sandbox_postures: external_exports.array(external_exports.enum(["guard", "strict"]))
|
|
44773
|
+
}).strict();
|
|
44774
|
+
var softwareDispatchPreviewItemSchema = external_exports.object({
|
|
44775
|
+
kind: external_exports.enum(["changeset", "task"]),
|
|
44776
|
+
id: uuid11,
|
|
44777
|
+
ordinal: external_exports.number().int().positive(),
|
|
44778
|
+
title: external_exports.string(),
|
|
44779
|
+
changeset_ordinal: external_exports.number().int().positive().nullable(),
|
|
44780
|
+
task_key: external_exports.string().nullable(),
|
|
44781
|
+
depends_on: external_exports.array(external_exports.string()),
|
|
44782
|
+
parallelizable: external_exports.boolean(),
|
|
44783
|
+
est_turns: external_exports.number().int().nullable(),
|
|
44784
|
+
hold_reason: softwareDispatchHoldReasonSchema.nullable(),
|
|
44785
|
+
hold_detail: external_exports.string().nullable()
|
|
44786
|
+
}).strict();
|
|
44787
|
+
var softwareDispatchPreviewSchema = external_exports.object({
|
|
44788
|
+
status: external_exports.enum(["ready", "grooming", "held"]),
|
|
44789
|
+
digest: external_exports.string().min(1),
|
|
44790
|
+
expires_at: external_exports.string(),
|
|
44791
|
+
included_order: external_exports.array(softwareDispatchPreviewItemSchema),
|
|
44792
|
+
held_items: external_exports.array(softwareDispatchPreviewItemSchema),
|
|
44793
|
+
dependencies: external_exports.array(external_exports.object({
|
|
44794
|
+
from_task_key: external_exports.string(),
|
|
44795
|
+
to_task_key: external_exports.string()
|
|
44796
|
+
}).strict()).default([]),
|
|
44797
|
+
serial_lanes: external_exports.array(external_exports.string()).default([]),
|
|
44798
|
+
estimated_turns: external_exports.number().int().nullable(),
|
|
44799
|
+
runner_requirements: softwareDispatchPreviewRunnerRequirementSchema,
|
|
44800
|
+
authority_budget_envelope: external_exports.object({
|
|
44801
|
+
automation_mode: softwareAutomationModeSchema,
|
|
44802
|
+
inferred_risk: softwareRiskLevelSchema,
|
|
44803
|
+
max_iterations: external_exports.number().int().nullable(),
|
|
44804
|
+
max_wall_clock_seconds: external_exports.number().int().nullable(),
|
|
44805
|
+
cost_budget_usd: external_exports.string().nullable()
|
|
44806
|
+
}).strict(),
|
|
44807
|
+
grooming_required: external_exports.boolean(),
|
|
44808
|
+
grooming_reason: external_exports.string().nullable()
|
|
44809
|
+
}).strict();
|
|
44629
44810
|
var softwareBuildRequestSummarySchema = external_exports.object({
|
|
44630
44811
|
id: uuid11,
|
|
44631
44812
|
software_project_id: uuid11,
|
|
@@ -44821,7 +45002,8 @@ var softwareRequestShowOutputSchema = external_exports.object({
|
|
|
44821
45002
|
gates: external_exports.array(softwareGateSummarySchema),
|
|
44822
45003
|
plan_versions: external_exports.array(softwarePlanVersionSummarySchema),
|
|
44823
45004
|
changesets: external_exports.array(softwareChangesetSummarySchema),
|
|
44824
|
-
tasks: external_exports.array(softwareTaskSummarySchema)
|
|
45005
|
+
tasks: external_exports.array(softwareTaskSummarySchema),
|
|
45006
|
+
dispatch_preview: softwareDispatchPreviewSchema.nullable()
|
|
44825
45007
|
});
|
|
44826
45008
|
var softwareRequestLifecycleReason = external_exports.string().trim().min(1).max(2e3);
|
|
44827
45009
|
var softwareRequestPauseInputSchema = external_exports.object({
|
|
@@ -45786,6 +45968,7 @@ var syncBriefAgentActivitySchema = external_exports.object({
|
|
|
45786
45968
|
failed_run_count: external_exports.number().int().nonnegative(),
|
|
45787
45969
|
tool_call_count: external_exports.number().int().nonnegative(),
|
|
45788
45970
|
denied_tool_call_count: external_exports.number().int().nonnegative(),
|
|
45971
|
+
held_tool_call_count: external_exports.number().int().nonnegative().optional(),
|
|
45789
45972
|
cost_usd: external_exports.number().nonnegative(),
|
|
45790
45973
|
note: external_exports.string().min(1)
|
|
45791
45974
|
}).strict();
|
|
@@ -45985,6 +46168,9 @@ var taskListOutputSchema = external_exports.object({
|
|
|
45985
46168
|
var taskAcceptInputSchema = external_exports.object({
|
|
45986
46169
|
id: uuidSchema19
|
|
45987
46170
|
}).strict();
|
|
46171
|
+
var taskConfirmProposalInputSchema = external_exports.object({
|
|
46172
|
+
id: uuidSchema19
|
|
46173
|
+
}).strict();
|
|
45988
46174
|
var taskMutationOutputSchema = external_exports.object({
|
|
45989
46175
|
task: external_exports.object({
|
|
45990
46176
|
id: uuidSchema19,
|
|
@@ -47131,7 +47317,7 @@ Drafting can be assisted by agents. Activation is a human decision. When authori
|
|
|
47131
47317
|
order: 40,
|
|
47132
47318
|
title: "Agent staffing playbook",
|
|
47133
47319
|
summary: "How to decide whether a seat should be human, agent, or hybrid, and how to go live safely.",
|
|
47134
|
-
version: "2026-07-14.
|
|
47320
|
+
version: "2026-07-14.2",
|
|
47135
47321
|
public: true,
|
|
47136
47322
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
47137
47323
|
stages: ["staffing"],
|
|
@@ -47190,7 +47376,7 @@ Two creation paths, both draft-first. Read the stock-agents guide for templates
|
|
|
47190
47376
|
- 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\`.
|
|
47191
47377
|
- 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.
|
|
47192
47378
|
- 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.
|
|
47193
|
-
- 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 Skill activation counts plus tool-call and guard-held counts; \`{{cli}} agent get-run --seat-id <seat-id> --run-id <run-id>\` / \`agent.get_run\` / \`rost_get_agent_run_diagnostics\` reads one run's transcript reference, token/cost usage, outcome, product-visible run errors, and any Skill versions/files loaded for that run. Pass \`--transcript\` (\`{"transcript":true}\`) to also return the persisted, secret-scrubbed session transcript for that run when one exists \u2014 cloud-lane and runner turns persist a bounded transcript at turn end. Final run outcomes are no longer chopped to a short summary; the full report survives. Loaded Skill file hashes and sizes identify the immutable source package; the runtime may still bound or truncate prompt text before sending it to the model. \`{{cli}} command agent.list_tool_calls --json '{"seat_id":"<seat-id>"}'\` / \`rost_list_agent_tool_calls\` returns the tool-call ledger with each call's guard result. Both list commands include
|
|
47379
|
+
- 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 Skill activation counts plus tool-call, guard-denied, and guard-held counts; \`{{cli}} agent get-run --seat-id <seat-id> --run-id <run-id>\` / \`agent.get_run\` / \`rost_get_agent_run_diagnostics\` reads one run's transcript reference, token/cost usage, outcome, product-visible run errors, and any Skill versions/files loaded for that run. Pass \`--transcript\` (\`{"transcript":true}\`) to also return the persisted, secret-scrubbed session transcript for that run when one exists \u2014 cloud-lane and runner turns persist a bounded transcript at turn end. Final run outcomes are no longer chopped to a short summary; the full report survives. Loaded Skill file hashes and sizes identify the immutable source package; the runtime may still bound or truncate prompt text before sending it to the model. \`{{cli}} command agent.list_tool_calls --json '{"seat_id":"<seat-id>"}'\` / \`rost_list_agent_tool_calls\` returns the tool-call ledger with each call's guard result. Both list commands include \`denied_tool_call_count\` and \`held_tool_call_count\` rollups: hard guard denials stay separate from actions escalated for review. 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, and its Activity tab additionally renders the full persisted transcript and artifacts rail for a selected session inline (no \`--transcript\` flag needed there) alongside the business-activity ledger (\`work.record\`/\`work.list\`) \u2014 counter tiles and a run-grouped feed with each record's verb, object, outcome, evidence, and \`template_ref\` when one was used.
|
|
47194
47380
|
|
|
47195
47381
|
## Review readiness before go-live
|
|
47196
47382
|
|
|
@@ -47384,7 +47570,7 @@ The dry run is a real sandbox rehearsal, not a stamp. It executes a mock-provide
|
|
|
47384
47570
|
order: 80,
|
|
47385
47571
|
title: "Sync rhythm playbook",
|
|
47386
47572
|
summary: "How Signal, Friction, Cascade, and Sync Briefs turn weekly meetings into decision time.",
|
|
47387
|
-
version: "2026-07-
|
|
47573
|
+
version: "2026-07-15.1",
|
|
47388
47574
|
public: true,
|
|
47389
47575
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
47390
47576
|
stages: ["operating_rhythm"],
|
|
@@ -47718,7 +47904,7 @@ External connectors are being rolled out provider by provider, conservatively (r
|
|
|
47718
47904
|
order: 48,
|
|
47719
47905
|
title: "CLI and MCP installation guide",
|
|
47720
47906
|
summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
|
|
47721
|
-
version: "2026-07-15.
|
|
47907
|
+
version: "2026-07-15.3",
|
|
47722
47908
|
public: true,
|
|
47723
47909
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
47724
47910
|
stages: ["company_setup", "staffing"],
|
|
@@ -47791,7 +47977,9 @@ External connectors are being rolled out provider by provider, conservatively (r
|
|
|
47791
47977
|
"error_log.resolve",
|
|
47792
47978
|
"error_log.supersede",
|
|
47793
47979
|
"runner.diagnose",
|
|
47794
|
-
"runner.repair"
|
|
47980
|
+
"runner.repair",
|
|
47981
|
+
"tenant.anthropic_key.disable",
|
|
47982
|
+
"tool_grants.tenant.update"
|
|
47795
47983
|
],
|
|
47796
47984
|
legal: {
|
|
47797
47985
|
publicRisk: "low",
|
|
@@ -47832,7 +48020,7 @@ A headless agent cannot complete setup unattended. Two things always require a h
|
|
|
47832
48020
|
|
|
47833
48021
|
Treat these as blocking prerequisites: the agent prepares the request and waits for the human approver.
|
|
47834
48022
|
|
|
47835
|
-
- **Secrets never travel through the CLI.** Raw-secret sinks (\`credential.ingress\`, \`tenant.anthropic_key.save\`) are refused on every CLI path \u2014 an ergonomic verb, \`--input\`, and \`{{cli}} command <id> --json\` all stop with guidance instead of accepting the secret, because a value in argv lands in shell history and process arguments before any redaction. Provide the secret through the vault-backed flow (web Settings or the integration connect flow); the CLI only ever carries the non-secret credential *name*, scope, and provider.
|
|
48023
|
+
- **Secrets never travel through the CLI.** Raw-secret sinks (\`credential.ingress\`, \`tenant.anthropic_key.save\`) are refused on every CLI path \u2014 an ergonomic verb, \`--input\`, and \`{{cli}} command <id> --json\` all stop with guidance instead of accepting the secret, because a value in argv lands in shell history and process arguments before any redaction. Provide the secret through the vault-backed flow (web Settings or the integration connect flow); the CLI only ever carries the non-secret credential *name*, scope, and provider. Disabling tenant BYOK (\`tenant.anthropic_key.disable\`) never returns the old key; it revokes the active vault-backed credential only after managed Anthropic fallback is available.
|
|
47836
48024
|
|
|
47837
48025
|
## Placeholder legend
|
|
47838
48026
|
|
|
@@ -48083,7 +48271,7 @@ A leaked tenant-admin token can administer the whole tenant, not just one seat.
|
|
|
48083
48271
|
|
|
48084
48272
|
### Storing the Anthropic key and other credentials
|
|
48085
48273
|
|
|
48086
|
-
Storing the tenant model key or any other secret goes through **credential ingress** as a vault reference \u2014 the secret is never pasted into a prompt, config, or log. Use \`rost_save_tenant_anthropic_key\` (\`tenant.anthropic_key.save\`) for the tenant Anthropic key; other secrets go through the Settings vault-ingress flow (\`credential.ingress\`), a human-only interactive flow that is deliberately not an agent-callable MCP tool and refuses raw secrets over CLI argv. \`rost_configure_agent_tools\` stages credential *requests* (provider, scope, and label only) but never accepts raw secrets. Credential storage is a gated \`credential_flow\` confirmation that a human approves. For the vault model and the security posture behind this, see the security-model-guide and the tool-access-and-vault guide; for model-bound data, BYOK provider handling, and local-client provider settings, see the ai-model-data-handling-guide; for the confirmation gate, see the confirmations-guide.
|
|
48274
|
+
Storing the tenant model key or any other secret goes through **credential ingress** as a vault reference \u2014 the secret is never pasted into a prompt, config, or log. Use \`rost_save_tenant_anthropic_key\` (\`tenant.anthropic_key.save\`) for the tenant Anthropic key; other secrets go through the Settings vault-ingress flow (\`credential.ingress\`), a human-only interactive flow that is deliberately not an agent-callable MCP tool and refuses raw secrets over CLI argv. Disabling the tenant Anthropic key uses \`tenant.anthropic_key.disable\`: it is owner/admin-only, always human-gated, revokes the active credential row without reading or returning secret material, and first checks that managed Anthropic fallback is configured. \`rost_configure_agent_tools\` stages credential *requests* (provider, scope, and label only) but never accepts raw secrets. Credential storage is a gated \`credential_flow\` confirmation that a human approves. For the vault model and the security posture behind this, see the security-model-guide and the tool-access-and-vault guide; for model-bound data, BYOK provider handling, and local-client provider settings, see the ai-model-data-handling-guide; for the confirmation gate, see the confirmations-guide.
|
|
48087
48275
|
|
|
48088
48276
|
## When to use MCP or CLI
|
|
48089
48277
|
|
|
@@ -48174,7 +48362,7 @@ The signed-in app exposes the same Skill command surface at **Skills**, linked f
|
|
|
48174
48362
|
|
|
48175
48363
|
| Command | Command ids | Purpose | Scope | Safe example |
|
|
48176
48364
|
|---|---|---|---|---|
|
|
48177
|
-
| \`{{cli}} task list|accept|decline|complete|create\` | \`task.list\`, \`task.accept\`, \`task.decline\`, \`task.complete\`, \`task.create\` | Operate a seat's task queue. | Seat | \`{{cli}} task list --json\` |
|
|
48365
|
+
| \`{{cli}} task list|accept|decline|complete|create\` | \`task.list\`, \`task.accept\`, \`task.decline\`, \`task.complete\`, \`task.create\`, \`task.confirm_proposal\`, \`task.decline_proposal\` | Operate a seat's task queue and target-side proposal decisions. | Seat / tenant | \`{{cli}} task list --json\`; \`{{cli}} command task.confirm_proposal --json '{"id":"<task-id>"}'\` |
|
|
48178
48366
|
| \`{{cli}} status record\` | \`status.record\` | Record measurable readings and goal status as a status event. | Seat | \`{{cli}} status record --measurable-id <id> --value 42\` |
|
|
48179
48367
|
| \`{{cli}} signal list|get|confirm|correct\` | \`signal.list\`, \`signal.get\`, \`signal.confirm_reading\`, \`signal.correct_reading\` | Read and confirm Signal measurables. | Seat | \`{{cli}} signal list --json\` |
|
|
48180
48368
|
| \`{{cli}} goal list|create|update|status|reparent|drop\` | \`goal.list\`, \`goal.create\`, \`goal.update\`, \`goal.set_status\`, \`goal.reparent\`, \`goal.drop\` | Manage Cascade goals. Scope varies by verb: \`status\` is seat-scoped, \`list\`/\`create\` need a tenant token, and \`update\`/\`reparent\`/\`drop\` require tenant-admin. | Seat to tenant-admin | \`{{cli}} goal list --json\` |
|
|
@@ -48182,7 +48370,7 @@ The signed-in app exposes the same Skill command surface at **Skills**, linked f
|
|
|
48182
48370
|
| \`{{cli}} escalation list|get|resolve|reject\` | \`escalation.list\`, \`escalation.get\`, \`escalation.resolve\`, \`escalation.reject\` | Work the steward escalation queue. | Steward | \`{{cli}} escalation list --json\` |
|
|
48183
48371
|
| \`{{cli}} error list|resolve|supersede\` | \`error_log.list\`, \`error_log.resolve\`, \`error_log.supersede\` | List active, acknowledged, resolved, or superseded product error logs and let a human acknowledge, resolve, or supersede stale errors with evidence links. | Tenant | \`{{cli}} error list --resolved active --json\`; \`{{cli}} error resolve --error-log-id <id> --reason "Fixed in PR #123"\` |
|
|
48184
48372
|
| \`{{cli}} sync brief|compile|complete\` | \`sync.brief.get\`, \`sync.brief.compile\`, \`sync.run.complete\` | Compile, read, and complete a weekly Sync. | Tenant | \`{{cli}} sync brief --json\` |
|
|
48185
|
-
| \`{{cli}} runner list|status|diagnose|repair|work-orders|revoke|serve\` | \`runner.list\`, \`runner.status\`, \`runner.diagnose\`, \`runner.repair\`, \`work_order.list\`, \`runner.revoke\`, runner endpoint APIs | Inspect heartbeat and execute-readiness evidence, inspect work orders, diagnose offline runners, get repair guidance, revoke a runner, or run the headless local runner loop. | Tenant | \`{{cli}} runner diagnose --runner-id <id> --json\`; \`{{cli}} runner serve --once\` |
|
|
48373
|
+
| \`{{cli}} runner list|status|diagnose|repair|work-orders|revoke|serve\` | \`runner.list\`, \`runner.status\`, \`runner.diagnose\`, \`runner.repair\`, \`work_order.list\`, \`runner.revoke\`, runner endpoint APIs | Inspect heartbeat and execute-readiness evidence, inspect work orders, diagnose offline runners, explain claimability gates, get repair guidance, revoke a runner, or run the headless local runner loop. | Tenant | \`{{cli}} runner diagnose --runner-id <id> --json\`; \`{{cli}} runner serve --once\` |
|
|
48186
48374
|
| \`{{cli}} runner install-service|start|stop|restart|status|logs|uninstall --name <name> [--user-code <code>]\` | launchd/service manager (macOS today) + \`{{cli}} runner serve\` | Install and manage an always-on local runner service that keeps the runner online across reboots. The service runs the runner under the absolute Node binary with an explicit PATH (so it works under nvm/Homebrew) and bootstraps into whichever launchd domain the session supports. Pass \`--user-code\` to pair the service at install; otherwise install prints the exact command to pair it. No secret is stored in the service definition, its arguments, or logs. Non-macOS emits an explicit unsupported message. | Tenant (local machine) | \`{{cli}} runner install-service --name mac-mini --execute --user-code ABCD-EFGH\`; \`{{cli}} runner logs --name mac-mini\` |
|
|
48187
48375
|
| \`{{cli}} notification settings|test|errors\` | \`notification.settings.get\`, \`notification.test\`, \`notification.list_errors\` | Read notification settings, send a test, and list failed deliveries with linked product error source, seat id, and run id when available. | Tenant | \`{{cli}} notification errors --limit 10 --json\` |
|
|
48188
48376
|
| \`{{cli}} integration list|readiness|status|test\` / credential flow for Baserow REST connect | \`integration.connect_rest\`, \`integration.list\`, \`integration.readiness\`, \`integration.status\`, \`integration.test\` | Create a vault-backed Baserow REST integration through the credential flow, list connector metadata, read setup-readiness, read one connector's health, and run provider-specific tests without exposing credentials. | Tenant-admin for connect; tenant for reads/tests | \`{{cli}} integration readiness --provider google --json\` |
|
|
@@ -48203,7 +48391,7 @@ The signed-in app exposes the same Skill command surface at **Skills**, linked f
|
|
|
48203
48391
|
| \`{{cli}} deliverable list|get|create|attach\` | \`deliverable.list\`, \`deliverable.get\`, \`deliverable.create\`, \`deliverable.attach\` | List, get, create, or attach agent deliverables for a seat. Deliverables are durable work outputs visible across UI, CLI, and MCP. | Tenant (list/get), Seat (create/attach) | \`{{cli}} deliverable list --seat-id <id> --json\`; \`{{cli}} deliverable create --title "Brief" --kind brief\` |
|
|
48204
48392
|
| \`{{cli}} graph show\` | \`graph.get\` | Print a table view of the Responsibility Graph with explicit \`seat_id\` and \`parent_seat_id\` columns. | Tenant | \`{{cli}} graph show\` |
|
|
48205
48393
|
| \`{{cli}} seat list|get|create|rename|reparent|decommission\` | \`graph.get\`, \`seat.get\`, \`seat.create\`, \`seat.rename\`, \`seat.reparent\`, \`seat.decommission\`, \`seat.decommission_preview\` | Work with seats as first-class CLI primitives. \`seat decommission --dry-run\` previews affected occupancies, agents, Charters, tokens, credentials, work orders, and schedules before the human-gated teardown. | Tenant / Seat for targeted mutations | \`{{cli}} seat list\`; \`{{cli}} seat decommission --seat-id <id> --dry-run\` |
|
|
48206
|
-
| \`{{cli}} forge project-create|project-list|request-create|request-list|request-show|request-pause|request-cancel|request-resume\` | \`software_factory.project.create\`, \`software_factory.project.list\`, \`software_factory.request.create\`, \`software_factory.request.list\`, \`software_factory.request.show\`, \`software_factory.request.pause\`, \`software_factory.request.cancel\`, \`software_factory.request.resume\` | Create/list Forge projects, open/read governed Forge build requests, and control request lifecycle. Request create/list/show return \`scheduler_state\`: \`queued\` when a runner work order exists, \`parked\` when the Forge team is staffed but no paired online runner can claim it, and \`not_configured\` when the runner-lane Forge Seat is missing. Parked and not-configured states link to \`/settings/runners/setup\`; runner pairing or the repair sweep re-enqueues the same pending intake idempotently. Project creation plus pause/cancel/resume are tenant-admin, entitlement-gated, and human-gated; reads and request creation require the Forge add-on. | Tenant / Tenant-admin for create and lifecycle controls | \`{{cli}} forge project-create --name "Leiluna app" --base-branch main\`; \`{{cli}} forge request-create --project <slug-or-name> --title "Add invoice export"\` (accepts \`--software-project-id <id>\` instead of \`--project\` too); \`{{cli}} forge request-pause --build-request-id <id> --reason "Operator hold"\` |
|
|
48394
|
+
| \`{{cli}} forge project-create|project-list|request-create|request-list|request-show|request-pause|request-cancel|request-resume\` | \`software_factory.project.create\`, \`software_factory.project.list\`, \`software_factory.request.create\`, \`software_factory.request.list\`, \`software_factory.request.show\`, \`software_factory.request.pause\`, \`software_factory.request.cancel\`, \`software_factory.request.resume\` | Create/list Forge projects, open/read governed Forge build requests, and control request lifecycle. Request create/list/show return \`scheduler_state\`: \`queued\` when a runner work order exists, \`parked\` when the Forge team is staffed but no paired online runner can claim it, and \`not_configured\` when the runner-lane Forge Seat is missing. Request detail also surfaces the signed, expiring dispatch preview with included order, held items, dependencies, estimated turns, runner requirements, and authority budget envelope. Parked and not-configured states link to \`/settings/runners/setup\`; runner pairing or the repair sweep re-enqueues the same pending intake idempotently. Project creation plus pause/cancel/resume are tenant-admin, entitlement-gated, and human-gated; reads and request creation require the Forge add-on. | Tenant / Tenant-admin for create and lifecycle controls | \`{{cli}} forge project-create --name "Leiluna app" --base-branch main\`; \`{{cli}} forge request-create --project <slug-or-name> --title "Add invoice export"\` (accepts \`--software-project-id <id>\` instead of \`--project\` too); \`{{cli}} forge request-pause --build-request-id <id> --reason "Operator hold"\` |
|
|
48207
48395
|
|
|
48208
48396
|
Skills wrapper help:
|
|
48209
48397
|
|
|
@@ -48282,6 +48470,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
48282
48470
|
| \`rost_upload_org_context\` | \`onboarding.upload_context\` | Back-compat alias of \`onboarding.attach_reference\`. | Tenant | Prefer \`rost_attach_reference_document\`; same widened schema. |
|
|
48283
48471
|
| \`rost_create_onboarding_invite\` | \`onboarding.create_invite\` | Invite a team member during onboarding. | Tenant | Call with a business email and role. |
|
|
48284
48472
|
| \`rost_save_tenant_anthropic_key\` | \`tenant.anthropic_key.save\` | Store a tenant model key through the vault. | Tenant | Use only with a real human-provided secret. |
|
|
48473
|
+
| \`rost_disable_tenant_anthropic_key\` | \`tenant.anthropic_key.disable\` | Revoke the active tenant Anthropic BYOK credential after managed fallback is available. | Tenant-admin | Human-gated; call with \`{}\`. The old key value is never returned. |
|
|
48285
48474
|
| \`rost_create_seat\` | \`seat.create\` | Create a Responsibility Graph seat. | Tenant | Call with \`{"name":"Finance","seat_type":"human"}\`. |
|
|
48286
48475
|
| \`rost_rename_seat\` | \`seat.rename\` | Rename a seat. | Seat or tenant-admin | Call with \`seat_id\` and \`name\`. |
|
|
48287
48476
|
| \`rost_reparent_seat\` | \`seat.reparent\` | Move a seat under a new parent. | Seat or tenant-admin | Call with \`seat_id\` and \`parent_seat_id\`. |
|
|
@@ -48321,7 +48510,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
48321
48510
|
| \`rost_get_dogfood_fleet_health_digest\` | \`agent.fleet_digest\` | Capture the daily dogfood fleet-health digest: live/idle state, 24h/7d turns, spend, recent failed runs, unresolved errors, failed notifications, and next actions. | Tenant | Call with \`{}\`; optional \`window_hours\` bounds recent failed-run evidence, while \`error_limit\` caps linked evidence per seat. |
|
|
48322
48511
|
| \`rost_system_health\` | \`system.health\` | Read the scoped system-health snapshot across agent runs, unresolved errors, Signals, Cascade setup, work loop, integrations, runners, notifications, and Sync Brief readiness. | Tenant, member, or seat token | Call with \`{}\`; optional \`seat_id\` narrows inside the caller's server-derived scope. |
|
|
48323
48512
|
| \`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>"}\`. |
|
|
48324
|
-
| \`rost_list_agent_runs\` | \`agent.list_runs\` | Read a seat's agent run history (status, lane, model, cost, per-run Skill activation, tool-call, and guard-held counts) plus the seat's run/tool-call rollup including held-action count. | Seat or tenant-admin | Call with \`{"seat_id":"<seat-id>"}\`; pass \`limit\` for a deeper window. |
|
|
48513
|
+
| \`rost_list_agent_runs\` | \`agent.list_runs\` | Read a seat's agent run history (status, lane, model, cost, per-run Skill activation, tool-call, guard-denied, 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. |
|
|
48325
48514
|
| \`rost_get_agent_run_diagnostics\` | \`agent.get_run\` | Read one run's diagnostic record: transcript reference, token/cost usage, outcome, linked product-visible run errors, and loaded Skill activation file metadata. File hashes/sizes identify the immutable source package, while model prompt text may be bounded or truncated. | Seat or tenant-admin | Call with \`{"seat_id":"<seat-id>","run_id":"<run-id>"}\`. |
|
|
48326
48515
|
| \`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. |
|
|
48327
48516
|
| \`rost_list_agent_deliverables\` | \`deliverable.list\` | List durable agent deliverables for a seat, including explicit outputs and successful-run summaries. | Seat or tenant-admin | Call with \`{"seat_id":"<seat-id>"}\`. |
|
|
@@ -48345,7 +48534,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
48345
48534
|
| \`rost_list_mcp_tokens\` | \`mcp_token.list\` | List MCP token metadata (never token material). | Tenant | Call with \`{}\` or \`{"include_revoked":true}\`. |
|
|
48346
48535
|
| \`rost_list_runners\` | \`runner.list\` | List local runners with heartbeat health, execution readiness, queue counts, and recent result evidence. | Tenant | Call with \`{}\`. |
|
|
48347
48536
|
| \`rost_runner_status\` | \`runner.status\` | Read a single runner's capability, heartbeat health, and execute-readiness state. | Tenant | Call with \`runner_id\`. |
|
|
48348
|
-
| \`rost_diagnose_runner\` | \`runner.diagnose\` | Return runner health, capabilities, and repair guidance without secrets. | Tenant | Call with \`runner_id\`;
|
|
48537
|
+
| \`rost_diagnose_runner\` | \`runner.diagnose\` | Return runner health, claimability checks, capabilities, and repair guidance without secrets. | Tenant | Call with \`runner_id\`; claimability exposes safe predicates, required vs actual values, pass/fail state, and remediation for claimable work. |
|
|
48349
48538
|
| \`rost_runner_repair_guidance\` | \`runner.repair\` | Return focused repair steps for a runner: restart, re-pair, revoke stale, or install missing CLI runtime. | Tenant | Call with \`runner_id\` and optional \`issue\` (restart, re_pair, revoke_stale, missing_cli_runtime). |
|
|
48350
48539
|
| \`rost_start_runner_pairing\` | \`runner.pairing.start\` | Open a runner pairing session and return the human pairing code. | Tenant-admin | Call with \`name\` and \`platform\`; owner/admin only. |
|
|
48351
48540
|
| \`rost_revoke_runner\` | \`runner.revoke\` | Revoke a runner so it can no longer authenticate. | Tenant | Call with \`runner_id\`; expect human confirmation. |
|
|
@@ -48418,7 +48607,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
48418
48607
|
| \`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\`. |
|
|
48419
48608
|
| \`rost_resolve_friction_issue\` | \`friction.resolve\` | Resolve an issue with a root cause and remediation task. | Tenant | Human decision; expect confirmation. |
|
|
48420
48609
|
| \`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\`. |
|
|
48421
|
-
| \`rost_create_task\` | \`task.create\` | Create a task (a commitment between seats). | Seat or tenant-admin | \`none\` \u2014 created directly;
|
|
48610
|
+
| \`rost_create_task\` | \`task.create\` | Create a task (a commitment between seats). | Seat or tenant-admin | \`none\` \u2014 human-created tasks go live directly; ordinary agent-created tasks become draft proposals; bounded Trusted proposals become offered or, for same-Steward live agent seats, in progress. |
|
|
48422
48611
|
| \`rost_update_task\` | \`task.update\` | Reschedule, reassign, or edit a non-terminal task. | Owner (tenant-admin) | Pass \`task_id\` plus at least one of \`due_on\`/\`owner_seat_id\`/\`title\`/\`description\`; terminal tasks reject. |
|
|
48423
48612
|
| \`rost_compile_sync_brief\` | \`sync.brief.compile\` | Compile the weekly Sync Brief (idempotent per period). | Tenant | Call with \`{}\`. |
|
|
48424
48613
|
| \`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>"}\`. |
|
|
@@ -48434,6 +48623,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
48434
48623
|
| \`rost_show_agent_setup_as_markdown\` | \`agent.show_markdown\` | Render a seat's agent setup, model, steward, tools, and Charter as a clean markdown card for review. | Tenant | Call with \`{"seat_id":"<seat-id>"}\`. |
|
|
48435
48624
|
| \`rost_list_tool_catalog\` | \`tool.catalog\` | List the discoverable tool catalog the agent builder reads \u2014 id, prescriptive description, scope tiers, credential requirement, access policy, and execution-boundary guidance. | Tenant | Call with \`{}\` or \`{"provider":"google"}\`. |
|
|
48436
48625
|
| \`rost_list_tenant_capability_grants\` | \`tool_grants.tenant.list\` | List tenant capability ceilings/defaults with connection, availability, source, and compile status. | Tenant | Call with \`{}\`; no secrets or vault refs. |
|
|
48626
|
+
| \`rost_update_tenant_capability_policy\` | \`tool_grants.tenant.update\` | Change tenant-wide capability ceilings/defaults with optimistic policy version or digest protection. | Tenant-admin | Human-gated; call with \`expected_policy_version\` or \`expected_policy_digest\`, \`mode\`, and grant ceiling changes. Returns changed grants, clamped defaults, and affected live agents. |
|
|
48437
48627
|
| \`rost_list_agent_effective_capability_grants\` | \`tool_grants.agent.effective\` | Read one agent's effective capability grants after tenant ceilings, agent selections, and compile availability are applied. | Tenant | Call with \`{"agent_id":"<agent-id>"}\`. |
|
|
48438
48628
|
| \`rost_update_agent_capability_grants\` | \`tool_grants.agent.update\` | Compile a Charter supersession proposal for agent capability grant reductions or expansions. | Tenant | Human steward/admin only; call with \`{"agent_id":"<agent-id>","grants":[{"tool_grant_id":"<grant-id>","access_level":"read"}]}\`; active authority changes only after the signed Charter is superseded. |
|
|
48439
48629
|
| \`rost_build_agent_activation_receipt\` | \`agent.activation_receipt\` | Build the current activation receipt for an agent: capabilities, connection metadata, digest, budget, and always-human boundary. | Seat or tenant-admin | Call with \`{"agent_id":"<agent-id>"}\`; rebuild after Charter, connection, lane, schedule, or grant changes. |
|
|
@@ -48468,7 +48658,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
48468
48658
|
| \`rost_resume_a_forge_build_request\` | \`software_factory.request.resume\` | Resume a paused or human-blocked Forge build request from the last completed task checkpoint and requeue the current phase. Human-gated. | Tenant-admin | Call with \`{"build_request_id":"<request-id>","reason":"Budget raised"}\`; non-interactive callers receive a confirmation handoff. |
|
|
48469
48659
|
| \`rost_list_forge_projects\` | \`software_factory.project.list\` | List active Forge software projects so a tenant can choose a project for build requests, GitHub repository bindings, and config. | Tenant | Call with \`{}\`; use the returned \`id\` as \`software_project_id\`. |
|
|
48470
48660
|
| \`rost_list_forge_build_requests\` | \`software_factory.request.list\` | The Forge control-room board: build requests with status, current phase, risk, and current \`scheduler_state\` remediation. Read-only; requires the Forge add-on. | Tenant | Call with \`{}\` or \`{"limit":20}\`. |
|
|
48471
|
-
| \`rost_show_a_forge_build_request\` | \`software_factory.request.show\` | The Forge request detail: the request, current phase, phase-run history, gates, and current \`scheduler_state\` remediation. Read-only; requires the Forge add-on. | Tenant | Call with \`{"build_request_id":"<request-id>"}\`. |
|
|
48661
|
+
| \`rost_show_a_forge_build_request\` | \`software_factory.request.show\` | The Forge request detail: the request, current phase, signed dispatch preview, phase-run history, gates, and current \`scheduler_state\` remediation. Read-only; requires the Forge add-on. | Tenant | Call with \`{"build_request_id":"<request-id>"}\`. |
|
|
48472
48662
|
| \`rost_advance_a_forge_build_request_phase\` | \`software_factory.phase.advance\` | Advance a build request to its next phase; the server enforces the closed phase state machine and rejects an illegal transition. | Tenant | Call with \`{"build_request_id":"<request-id>","to_phase":"discovery_scoping"}\`. |
|
|
48473
48663
|
| \`rost_decide_a_forge_gate\` | \`software_factory.gate.decide\` | A human approves or rejects a Forge gate; an agent caller routes to \`/approvals\` and can never self-approve. Sensitive gates record a linked human decision. | Tenant | Call with \`{"gate_id":"<gate-id>","decision":"approve"}\`; non-interactive callers receive a confirmation handoff. |
|
|
48474
48664
|
| \`rost_answer_forge_plan_clarifications\` | \`software_factory.request.answer_clarification\` | Write structured human answers to a draft plan's clarifying questions and optionally mark it ready for plan review; answers append to the versioned planning artifact and never widen authority or automation mode. | Tenant | Call with \`{"build_request_id":"<request-id>","answers":[{"question":"Which database?","answer":"Postgres"}],"mark_ready_for_plan_review":true}\`. |
|
|
@@ -49222,7 +49412,7 @@ Agents may record readings when the Charter allows it. Agent-reported readings s
|
|
|
49222
49412
|
order: 62,
|
|
49223
49413
|
title: "Friction guide",
|
|
49224
49414
|
summary: "How to capture issues with evidence, rank them, and resolve them without losing ownership.",
|
|
49225
|
-
version: "2026-07-
|
|
49415
|
+
version: "2026-07-15.1",
|
|
49226
49416
|
public: true,
|
|
49227
49417
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
49228
49418
|
stages: ["operating_rhythm"],
|
|
@@ -49237,6 +49427,8 @@ Agents may record readings when the Charter allows it. Agent-reported readings s
|
|
|
49237
49427
|
"friction.resolve",
|
|
49238
49428
|
"friction.link_task",
|
|
49239
49429
|
"task.create",
|
|
49430
|
+
"task.confirm_proposal",
|
|
49431
|
+
"task.decline_proposal",
|
|
49240
49432
|
"task.list",
|
|
49241
49433
|
"task.accept",
|
|
49242
49434
|
"task.decline",
|
|
@@ -49282,7 +49474,7 @@ The Friction page opens with one computed line \u2014 how many issues are open,
|
|
|
49282
49474
|
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.
|
|
49283
49475
|
|
|
49284
49476
|
- 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\`.
|
|
49285
|
-
- 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
|
|
49477
|
+
- 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\`.
|
|
49286
49478
|
- 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.
|
|
49287
49479
|
|
|
49288
49480
|
In the app, the Tasks surface exposes the same queue operations for a seat's visible work. Offered handoffs show Accept and Decline actions; Decline opens a reason field and records the reason through \`task.decline\`. Edit opens a separate task form for title, owner, due date, and description changes on non-terminal tasks. These controls are standard focusable disclosures so keyboard and pointer users can operate the queue without dropping to CLI.
|
|
@@ -49293,7 +49485,7 @@ In the app, the Tasks surface exposes the same queue operations for a seat's vis
|
|
|
49293
49485
|
|
|
49294
49486
|
## When to stop for confirmation
|
|
49295
49487
|
|
|
49296
|
-
\`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
|
|
49488
|
+
\`friction.resolve\` is \`human_required\`; resolving an issue is a human decision. \`friction.link_task\`, \`task.create\`, \`task.accept\`, \`task.decline\`, \`task.confirm_proposal\`, \`task.decline_proposal\`, and \`task.complete\` are \`none\`, so they do not mint pending confirmations. The proposal decision commands still require a human actor with target-side authority and are app/CLI-only, not MCP-exposed; they are not agent-callable approval shortcuts. \`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 or decides the proposed commitment.
|
|
49297
49489
|
|
|
49298
49490
|
## Resolution rule
|
|
49299
49491
|
|
|
@@ -49374,11 +49566,11 @@ Keep agent scope tight at first. Approve more autonomy only after evidence. Use
|
|
|
49374
49566
|
order: 71,
|
|
49375
49567
|
title: "Confirmations and human gates guide",
|
|
49376
49568
|
summary: "How {{brand}} routes authority-changing work through human confirmation, and why agents never approve their own requests.",
|
|
49377
|
-
version: "2026-07-
|
|
49569
|
+
version: "2026-07-15.2",
|
|
49378
49570
|
public: true,
|
|
49379
49571
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
49380
49572
|
stages: ["graph_design", "charter_design", "staffing", "operating_rhythm"],
|
|
49381
|
-
relatedCommandIds: ["confirmation.approve", "confirmation.list", "confirmation.reject", "confirmation.remint", "charter.approve", "agent.go_live", "credential.ingress", "mcp_token.create", "staffing.assign_user", "goal.reparent", "friction.resolve"],
|
|
49573
|
+
relatedCommandIds: ["confirmation.approve", "confirmation.list", "confirmation.reject", "confirmation.remint", "charter.approve", "agent.go_live", "credential.ingress", "mcp_token.create", "staffing.assign_user", "goal.reparent", "friction.resolve", "task.confirm_proposal", "task.decline_proposal"],
|
|
49382
49574
|
legal: { publicRisk: "low", notes: ["{{brand}}-native human-gate guidance."] },
|
|
49383
49575
|
sources: [
|
|
49384
49576
|
{
|
|
@@ -49424,11 +49616,11 @@ A held tool call actuates the same way regardless of which command backs it \u20
|
|
|
49424
49616
|
|
|
49425
49617
|
## The approvals queue
|
|
49426
49618
|
|
|
49427
|
-
The \`/approvals\` page is one place a human clears every pending decision across the company. It unions still-pending confirmations
|
|
49619
|
+
The \`/approvals\` page is one place a human clears every pending decision across the company. It unions still-pending confirmations, open steward escalations, and agent-proposed draft tasks into a single queue, each item shown with its risk or proposal type, the source or proposing seat, and redacted arguments \u2014 secret material is never displayed. You see only items for seats you have authority over: an owner sees all of them; a member sees confirmations for the seats they occupy, escalations routed to their steward chain, and task proposals where they occupy or steward the target seat. Confirming a task proposal runs \`task.confirm_proposal\` and moves the draft to Offered; declining runs \`task.decline_proposal\` and records a human reason. Neither action accepts the task, schedules a run, or executes agent work. Approve and reject route through the same \`confirmation.approve\` / \`confirmation.reject\` and escalation decision commands the CLI and per-seat surfaces use, so the audit trail and the agents-recommend-humans-decide rule are identical wherever you act. The queue also unions pending Forge software-credential requests (owner-scoped, read-only, deep-linking to \`/forge\`) \u2014 it surfaces the ask and links to the vault-backed fulfillment flow, never collecting the secret itself. A confirmation that fails on approval shows the actual execution error inline as a \`failed\` card instead of a dead generic banner, and its Retry re-runs \`confirmation.approve\` against current state; re-minting the same request supersedes the older card instead of leaving a duplicate behind.
|
|
49428
49620
|
|
|
49429
49621
|
## The rule for agents
|
|
49430
49622
|
|
|
49431
|
-
An agent never approves or rejects its own request. \`decisions.decided_by\` is always a human. The steward decision commands (\`escalation.resolve\`, \`escalation.reject\`) are not
|
|
49623
|
+
An agent never approves or rejects its own request. \`decisions.decided_by\` is always a human. The steward decision commands (\`escalation.resolve\`, \`escalation.reject\`) and proposal decision commands (\`task.confirm_proposal\`, \`task.decline_proposal\`) are not exposed over MCP. When an agent hits a gate, it prepares the evidence and the recommended action, returns the approve link, and waits for a human. Draft task proposals follow the same rule: the agent can propose the commitment, but a target-side human confirms or declines it unless a bounded Trusted grant applies.
|
|
49432
49624
|
|
|
49433
49625
|
## When to stop
|
|
49434
49626
|
|
|
@@ -49548,7 +49740,7 @@ Do not claim that a live charge happened unless Stripe test/live evidence proves
|
|
|
49548
49740
|
order: 72,
|
|
49549
49741
|
title: "Settings guide",
|
|
49550
49742
|
summary: "How to use Settings as the control plane for company access, channels, providers, tokens, and operating defaults.",
|
|
49551
|
-
version: "2026-07-
|
|
49743
|
+
version: "2026-07-15.1",
|
|
49552
49744
|
public: true,
|
|
49553
49745
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
49554
49746
|
stages: ["company_setup", "staffing"],
|
|
@@ -49648,7 +49840,7 @@ The company autonomy ceiling is a single tenant-wide dial that caps how much ANY
|
|
|
49648
49840
|
The CLI confirmation mode is a separate tenant-wide dial. It does not change what an agent may do (that is the company autonomy ceiling above); it changes whether the {{cli}} CLI tool itself may stand in for a human at an already-gated confirmation.
|
|
49649
49841
|
|
|
49650
49842
|
- \`careful\` is the strict default for every company, including internal ones. The server refuses the CLI's silent auto-replay of a pending confirmation \u2014 a human must review it before it is approved.
|
|
49651
|
-
- \`trusted_operator\` is a deliberate tenant_admin opt-in (an ADR-0018 \xA76 standing authorization) that lets the CLI silently auto-approve
|
|
49843
|
+
- \`trusted_operator\` is a deliberate tenant_admin opt-in (an ADR-0018 \xA76 standing authorization) that lets the CLI silently auto-approve only confirmations whose command is explicitly classified Trusted-eligible. Always-human, not-applicable, missing, unknown, and \`dangerous\`-risk confirmations still require interactive human review in either mode.
|
|
49652
49844
|
- Read it with \`settings.confirmation_policy.get\` (CLI: \`{{cli}} settings confirmation-mode get\`). Set it with \`settings.confirmation_policy.update\` (CLI: \`{{cli}} settings confirmation-mode set --mode trusted_operator\`). Owner-only and human-gated.
|
|
49653
49845
|
- Stored at \`tenants.settings.confirmation_policy\`; enforced server-side in \`confirmation.approve\`, so a stale or modified local CLI cannot bypass it.
|
|
49654
49846
|
|
|
@@ -50058,12 +50250,13 @@ Name the failing surface, collect evidence, recommend the smallest correction, a
|
|
|
50058
50250
|
order: 78,
|
|
50059
50251
|
title: "AI model data handling guide",
|
|
50060
50252
|
summary: "How {{brand}} cloud agents, local MCP sessions, runners, BYOK, and connected tools handle model-bound data.",
|
|
50061
|
-
version: "2026-07-01.
|
|
50253
|
+
version: "2026-07-01.4",
|
|
50062
50254
|
public: true,
|
|
50063
50255
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
50064
50256
|
stages: ["company_setup", "staffing", "operating_rhythm"],
|
|
50065
50257
|
relatedCommandIds: [
|
|
50066
50258
|
"tenant.anthropic_key.save",
|
|
50259
|
+
"tenant.anthropic_key.disable",
|
|
50067
50260
|
"credential.ingress",
|
|
50068
50261
|
"agent.configure_tools",
|
|
50069
50262
|
"mcp_token.create",
|
|
@@ -50149,7 +50342,7 @@ Tenant BYOK changes which provider account is used for eligible \`cloud\` model
|
|
|
50149
50342
|
|
|
50150
50343
|
{{brand}} also includes a capped, app-provided Claude allowance for agent-assisted setup so a new company can complete onboarding before saving its own key. That allowance is shown in the onboarding provider card and in Settings as an approximate number of included setup tokens \u2014 never a dollar amount \u2014 and is enforced server-side on every platform-key call: an agent turn or an org-intake step reserves the allowance before the provider request and settles actual usage after. When the included tokens are used, agent-assisted steps stop before calling the provider and prompt you to add your own Anthropic API key, while non-AI setup steps stay available. Saving a tenant Anthropic key (BYOK) switches those calls to your provider account and does not draw down the included allowance.
|
|
50151
50344
|
|
|
50152
|
-
Store a tenant Anthropic key only through \`tenant.anthropic_key.save\` / \`rost_save_tenant_anthropic_key\` or the generic credential ingress path. The key is handled as a vault-backed credential: {{brand}} stores a vault reference and safe metadata, not the raw key in prompts, config, logs, or command output. A human approves the credential flow.
|
|
50345
|
+
Store a tenant Anthropic key only through \`tenant.anthropic_key.save\` / \`rost_save_tenant_anthropic_key\` or the generic credential ingress path. Disable it through \`tenant.anthropic_key.disable\` or Settings, which revokes the active credential only after managed Anthropic fallback is configured and never reads or returns the old secret. The key is handled as a vault-backed credential: {{brand}} stores a vault reference and safe metadata, not the raw key in prompts, config, logs, or command output. A human approves the credential flow and the disable flow.
|
|
50153
50346
|
|
|
50154
50347
|
After BYOK is saved, provider-side retention, training, regional, HIPAA, or zero-data-retention posture depends on that Anthropic organization, workspace, model, feature, and contract. Do not tell a customer "BYOK means zero retention" or "BYOK means no training" unless their provider arrangement actually says that.
|
|
50155
50348
|
|
|
@@ -50244,6 +50437,7 @@ When asked about AI data handling:
|
|
|
50244
50437
|
"charter.sign_manifest",
|
|
50245
50438
|
"credential.ingress",
|
|
50246
50439
|
"tenant.anthropic_key.save",
|
|
50440
|
+
"tenant.anthropic_key.disable",
|
|
50247
50441
|
"runner.pairing.start",
|
|
50248
50442
|
"agent.configure_tools",
|
|
50249
50443
|
"agent.list_tool_calls",
|
|
@@ -51755,7 +51949,7 @@ var COMMAND_MANIFEST = [
|
|
|
51755
51949
|
{ "id": "agent.go_live", "namespace": "agent", "action": "go_live", "title": "Go live", "description": "Promote a dry-run agent seat to live after the human approval gate.", "requiredScope": "seat", "confirmation": "human_required", "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": "Move an agent live only after dry-run evidence, signed permissions, and a human Steward chain are clear.", "example": { "seat_id": "0190aaaa-aaaa-7aaa-8aaa-aaaaaaaaaaaa", "charter_version_id": "0190cccc-cccc-7ccc-8ccc-cccccccccccc" } },
|
|
51756
51950
|
{ "id": "agent.import_definition", "namespace": "agent", "action": "import_definition", "title": "Import agent definition", "description": "Import a versioned ROST agent definition into a canonical draft Seat and setup state without credentials, placement identifiers, or go-live side effects.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "definition_json", "flag": "definition-json", "type": "string", "required": true }, { "name": "idempotency_key", "flag": "idempotency-key", "type": "string", "required": false }], "hasComplexInput": false, "help": "Import a strict, versioned ROST agent definition into a canonical draft Seat/setup. The file cannot carry credentials or tenant-local placement ids; tools remain proposal-only until reviewed through setup." },
|
|
51757
51951
|
{ "id": "agent.list_fleet", "namespace": "agent", "action": "list_fleet", "title": "List agent fleet", "description": "Return every agent-occupied seat with lane, live state, last real turn, recent turn counts, top measurable status, open escalations, and 7-day real-run spend.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read every agent-occupied seat at once: lane, live state, last real turn, 24h/7d turns, measurable status, escalations, and spend." },
|
|
51758
|
-
{ "id": "agent.list_runs", "namespace": "agent", "action": "list_runs", "title": "List agent runs", "description": "Return a seat's agent run history (status, lane, model, cost, per-run tool-call and guard-
|
|
51952
|
+
{ "id": "agent.list_runs", "namespace": "agent", "action": "list_runs", "title": "List agent runs", "description": "Return a seat's agent run history (status, lane, model, cost, per-run tool-call, guard-denied, and guard-held counts) plus the seat's run/tool-call rollup with held-action count.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Audit a seat's agent run history with per-run tool-call, guard-denied, and guard-held counts (the Trust Card)." },
|
|
51759
51953
|
{ "id": "agent.list_tool_calls", "namespace": "agent", "action": "list_tool_calls", "title": "List agent tool calls", "description": "Return a seat's tool-call ledger (tool name, guard result, manifest clause, outcome) with the held-action count as the hero metric. Pass held_only to return only guard-held calls. Never returns argument summaries or secret material.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }, { "name": "held_only", "flag": "held-only", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Audit a seat's tool-call ledger with each call's guard result; held actions are the hero metric." },
|
|
51760
51954
|
{ "id": "agent.pause", "namespace": "agent", "action": "pause", "title": "Pause agent", "description": "Pause a live agent so it stops scheduled and on-demand runs. Reversible with agent.resume.", "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": "Pause a live agent so it stops scheduled and on-demand runs; queued work orders are expired and a paused agent refuses to run until resumed. Reversible, unlike agent.decommission." },
|
|
51761
51955
|
{ "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." },
|
|
@@ -51864,7 +52058,7 @@ var COMMAND_MANIFEST = [
|
|
|
51864
52058
|
{ "id": "onboarding.finish", "namespace": "onboarding", "action": "finish", "title": "Finish onboarding", "description": "Mark onboarding complete after the existing onboarding requirements pass.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Finish onboarding when the graph, at least one Charter, and the first operating rhythm are clear." },
|
|
51865
52059
|
{ "id": "onboarding.status", "namespace": "onboarding", "action": "status", "title": "Onboard status", "description": "Return current onboarding progress, graph summary, and the next recommended actions.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Start by checking onboarding status, then use the implementation method guide to choose the next setup step." },
|
|
51866
52060
|
{ "id": "onboarding.upload_context", "namespace": "onboarding", "action": "upload_context", "title": "Upload org context", "description": "Compatibility alias for onboarding.attach_reference: attach a company reference document (text/markdown) that Compass and Charters can cite. Reference-only \u2014 it does not build a Compass.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "text", "flag": "text", "type": "string", "required": true }, { "name": "filename", "flag": "filename", "type": "string", "required": false }, { "name": "mime_type", "flag": "mime-type", "type": "enum", "required": false, "enumValues": ["text/plain", "text/markdown", "text/csv"] }, { "name": "title", "flag": "title", "type": "string", "required": false }, { "name": "kind", "flag": "kind", "type": "enum", "required": false, "enumValues": ["plan", "financial", "org_chart", "process"] }, { "name": "source", "flag": "source", "type": "string", "required": false }], "hasComplexInput": false, "help": "Compatibility alias for onboarding.attach_reference: attach a company reference document so Compass and Charters can cite it. It does not build a Compass.", "example": { "text": "# Company handbook\n\nWe build precision components for the aerospace supply chain.", "filename": "handbook.md", "mime_type": "text/markdown", "title": "Company handbook", "kind": "plan", "source": "handbook/overview.md" } },
|
|
51867
|
-
{ "id": "runner.diagnose", "namespace": "runner", "action": "diagnose", "title": "Diagnose runner", "description": "Returns a runner's health, capabilities, and repair guidance without exposing secrets.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "runner_id", "flag": "runner-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Inspect a runner's health,
|
|
52061
|
+
{ "id": "runner.diagnose", "namespace": "runner", "action": "diagnose", "title": "Diagnose runner", "description": "Returns a runner's health, capabilities, and repair guidance without exposing secrets.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "runner_id", "flag": "runner-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Inspect a runner's health, claimability checks, and repair guidance without exposing secrets." },
|
|
51868
52062
|
{ "id": "runner.list", "namespace": "runner", "action": "list", "title": "List runners", "description": "List local runners registered to the tenant with online/offline/revoked state.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "include_revoked", "flag": "include-revoked", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "List local runners and their online/offline/revoked state before queueing runner work." },
|
|
51869
52063
|
{ "id": "runner.pairing.start", "namespace": "runner", "action": "pairing.start", "title": "Start runner pairing", "description": "Open a runner pairing session and return the human pairing code and URL. The runner bearer secret is never returned here.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "name", "flag": "name", "type": "string", "required": true }, { "name": "platform", "flag": "platform", "type": "string", "required": true }], "hasComplexInput": false, "help": "Open a runner pairing session and share the user code; the runner bearer secret is never surfaced here." },
|
|
51870
52064
|
{ "id": "runner.repair", "namespace": "runner", "action": "repair", "title": "Runner repair guidance", "description": "Returns actionable repair steps for a runner: restart, re-pair, revoke stale, or install missing CLI runtime. No secrets exposed.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "runner_id", "flag": "runner-id", "type": "string", "required": true }, { "name": "issue", "flag": "issue", "type": "enum", "required": false, "enumValues": ["restart", "re_pair", "revoke_stale", "missing_cli_runtime"] }], "hasComplexInput": false, "help": "Get focused repair steps for a runner: restart, re-pair, revoke a stale runner, or install missing CLI runtime." },
|
|
@@ -51949,7 +52143,7 @@ var COMMAND_MANIFEST = [
|
|
|
51949
52143
|
{ "id": "software_factory.request.list", "namespace": "software_factory", "action": "request.list", "title": "List Forge build requests", "description": "The Forge control-room board: the tenant's build requests with status, current phase, and risk/automation mode. Read-only, entitlement-gated.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List Forge build requests (the control-room board) with status, current phase, and risk. Read-only; requires the Forge add-on." },
|
|
51950
52144
|
{ "id": "software_factory.request.pause", "namespace": "software_factory", "action": "request.pause", "title": "Pause a Forge build request", "description": "Pause an in-flight Forge build request. New runner claims stop immediately; any running task halts at the next task checkpoint before resume. Human-gated and entitlement-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Pause an in-flight Forge build request so no new runner work starts; running work stops at the next task checkpoint. Tenant-admin and human-gated." },
|
|
51951
52145
|
{ "id": "software_factory.request.resume", "namespace": "software_factory", "action": "request.resume", "title": "Resume a Forge build request", "description": "Resume a paused or human-blocked Forge build request from the last completed task checkpoint and requeue the current phase. Human-gated and entitlement-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": true, "help": "Resume a paused or blocked Forge build request from its last completed task checkpoint after human review. Tenant-admin and human-gated." },
|
|
51952
|
-
{ "id": "software_factory.request.show", "namespace": "software_factory", "action": "request.show", "title": "Show a Forge build request", "description": "The Forge request detail: the build request, its current phase, phase-run history, and gates. Read-only, entitlement-gated, tenant-scoped.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Show a Forge build request's detail: current phase, phase-run history, and gates. Read-only; requires the Forge add-on." },
|
|
52146
|
+
{ "id": "software_factory.request.show", "namespace": "software_factory", "action": "request.show", "title": "Show a Forge build request", "description": "The Forge request detail: the build request, its current phase, phase-run history, and gates. Read-only, entitlement-gated, tenant-scoped.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Show a Forge build request's detail: current phase, dispatch preview, phase-run history, and gates. Read-only; requires the Forge add-on." },
|
|
51953
52147
|
{ "id": "software_factory.secret_request.list", "namespace": "software_factory", "action": "secret_request.list", "title": "List Forge secret requests", "description": "List durable Forge missing-secret/config requests. Metadata only; no secret values or vault refs are returned.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": false }, { "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["pending", "fulfilled", "rejected", "canceled"] }], "hasComplexInput": false, "help": "List durable Forge missing-secret requests and their approval-task status. Metadata only; no secret values or vault refs." },
|
|
51954
52148
|
{ "id": "software_factory.secret.grant", "namespace": "software_factory", "action": "secret.grant", "title": "Grant a Forge secret", "description": "A human grants a seat scoped access to a project secret by VAULT REF (project \xD7 env \xD7 seat \xD7 action \xD7 key). Postgres stores only the pointer \u2014 never secret material (invariant #5). Owner-only, human-gated. Entitlement-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "environment", "flag": "environment", "type": "enum", "required": true, "enumValues": ["development", "preview", "production"] }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "action", "flag": "action", "type": "string", "required": true }, { "name": "key_name", "flag": "key-name", "type": "string", "required": true }, { "name": "vault_ref", "flag": "vault-ref", "type": "string", "required": true }], "hasComplexInput": false, "help": "A human grants a seat scoped access to a project secret by vault ref (Postgres stores only the pointer, never secret material). Owner-only and human-gated." },
|
|
51955
52149
|
{ "id": "software_factory.secret.request", "namespace": "software_factory", "action": "secret.request", "title": "Request a Forge secret grant", "description": "An agent or user REQUESTS access to a project secret by key (draft-and-confirm \u2014 no value, no grant). Records the ask as a durable event for a human to grant. Never accepts a secret value (invariant #5). Entitlement-gated.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "environment", "flag": "environment", "type": "enum", "required": true, "enumValues": ["development", "preview", "production"] }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "action", "flag": "action", "type": "string", "required": true }, { "name": "key_name", "flag": "key-name", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Request access to a project secret by key; persists the request and creates a human approval task. Never accepts a secret value." },
|
|
@@ -51971,12 +52165,15 @@ var COMMAND_MANIFEST = [
|
|
|
51971
52165
|
{ "id": "system.health", "namespace": "system", "action": "health", "title": "System health", "description": "Return a scoped health snapshot for agent runs, errors, Signals, Cascade setup, work loop, integrations, runners, notifications, and Sync Brief readiness.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Read a scoped system health snapshot across agent runs, errors, Signals, Cascade setup, work loop, integrations, runners, notifications, and Sync Brief readiness." },
|
|
51972
52166
|
{ "id": "task.accept", "namespace": "task", "action": "accept", "title": "Accept task", "description": "Accept an offered handoff task owned by the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Accept an offered task only when the seat can deliver it within its Charter." },
|
|
51973
52167
|
{ "id": "task.complete", "namespace": "task", "action": "complete", "title": "Complete task", "description": "Complete an accepted handoff task and emit a handoff event back to the requesting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }, { "name": "summary", "flag": "summary", "type": "string", "required": true }], "hasComplexInput": true, "help": "Complete an accepted task with a summary so the requesting seat receives the handoff." },
|
|
51974
|
-
{ "id": "task.
|
|
52168
|
+
{ "id": "task.confirm_proposal", "namespace": "task", "action": "confirm_proposal", "title": "Confirm proposed task", "description": "Confirm an agent-proposed draft task when the current human has target-side authority.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Confirm an agent-proposed draft task when the current human has authority for the target seat." },
|
|
52169
|
+
{ "id": "task.create", "namespace": "task", "action": "create", "title": "Create task", "description": "Create a task (a commitment between seats). Agent-created tasks land in draft for human confirmation; human-created tasks are offered (handoff) or in progress.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "owner_seat_id", "flag": "owner-seat-id", "type": "string", "required": true }, { "name": "from_seat_id", "flag": "from-seat-id", "type": "string", "required": false }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "description", "flag": "description", "type": "string", "required": true }, { "name": "goal_id", "flag": "goal-id", "type": "string", "required": false }, { "name": "acceptance_criteria", "flag": "acceptance-criteria", "type": "array", "required": false, "itemType": "string" }, { "name": "due_on", "flag": "due-on", "type": "string", "required": false }], "hasComplexInput": false, "help": "Create a task as a commitment between seats; ordinary agent proposals land in draft for target-side human confirmation, while bounded Trusted proposals may become offered or in progress.", "example": { "owner_seat_id": "0190dddd-dddd-7ddd-8ddd-dddddddddddd", "from_seat_id": "0190eeee-eeee-7eee-8eee-eeeeeeeeeeee", "title": "Reconcile the March vendor statements", "description": "Match every March vendor statement line to a recorded invoice and flag discrepancies.", "goal_id": "0190ffff-ffff-7fff-8fff-ffffffffffff", "acceptance_criteria": ["All March statements reconciled", "Discrepancies filed as Friction issues"], "due_on": "2026-04-15" } },
|
|
51975
52170
|
{ "id": "task.decline", "namespace": "task", "action": "decline", "title": "Decline task", "description": "Decline an offered handoff task owned by the acting seat with a reason.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": true }], "hasComplexInput": false, "help": "Decline an offered task with a clear reason when it is out of scope for the seat." },
|
|
52171
|
+
{ "id": "task.decline_proposal", "namespace": "task", "action": "decline_proposal", "title": "Decline proposed task", "description": "Decline an agent-proposed draft task with a target-side human reason.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": true }], "hasComplexInput": false, "help": "Decline an agent-proposed draft task with a target-side human reason." },
|
|
51976
52172
|
{ "id": "task.import", "namespace": "task", "action": "import", "title": "Import Tasks from a ninety To-Dos export", "description": "Bulk-import a ninety To-Dos export into Tasks. Owners are seat names resolved to seats; each to-do becomes a seat-owned task with provenance origin_kind:manual. Idempotent \u2014 re-importing the same export is a no-op, and an existing non-terminal task with the same seat + title 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 To-Dos export into Tasks (origin_kind:manual); owners resolve to seats, idempotent by file + seat/title." },
|
|
51977
52173
|
{ "id": "task.list", "namespace": "task", "action": "list", "title": "List seat tasks", "description": "List open handoff tasks owned by the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List the seat's open handoff tasks before accepting, declining, or completing work." },
|
|
51978
52174
|
{ "id": "task.update", "namespace": "task", "action": "update", "title": "Update task", "description": "Reschedule (due date), reassign (owner seat), or edit a non-terminal task's title, description, or acceptance criteria. Terminal tasks cannot be edited \u2014 a correction is a new task.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "task_id", "flag": "task-id", "type": "string", "required": true }, { "name": "owner_seat_id", "flag": "owner-seat-id", "type": "string", "required": false }, { "name": "due_on", "flag": "due-on", "type": "string", "required": false }, { "name": "title", "flag": "title", "type": "string", "required": false }, { "name": "description", "flag": "description", "type": "string", "required": false }, { "name": "acceptance_criteria", "flag": "acceptance-criteria", "type": "array", "required": false, "itemType": "string" }], "hasComplexInput": false, "help": "Reschedule, reassign, or edit a non-terminal task; terminal tasks are immutable (a correction is a new task)." },
|
|
51979
52175
|
{ "id": "team.health_score", "namespace": "team", "action": "health_score", "title": "Team health score", "description": "Return the single rolled-up 0\u2013100 team-health score (latest month) with its band (green/yellow/red) and label. Honest insufficient-data state when no metrics exist yet.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read the single rolled-up 0-100 team-health score (latest month) with its band and label." },
|
|
52176
|
+
{ "id": "tenant.anthropic_key.disable", "namespace": "tenant", "action": "anthropic_key.disable", "title": "Disable tenant Anthropic key", "description": "Revoke the active tenant Anthropic BYOK credential while preserving audit history, after validating managed inference fallback is available.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Disable tenant BYOK only after managed Anthropic fallback is available; this revokes metadata without reading or returning the old key." },
|
|
51980
52177
|
{ "id": "tenant.anthropic_key.save", "namespace": "tenant", "action": "anthropic_key.save", "title": "Save tenant Anthropic key", "description": "Store a tenant-scoped Anthropic key in the configured vault.", "requiredScope": "tenant", "confirmation": "credential_flow", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "secretBlocked": true, "help": "Save model-provider credentials only through vault-backed flows and keep raw keys out of prompts, logs, and command metadata." },
|
|
51981
52178
|
{ "id": "tenant.create", "namespace": "tenant", "action": "create", "title": "Create additional company", "description": "Create a new clean company for an already-provisioned account after checking tenant.create.additional entitlement.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "company_name", "flag": "company-name", "type": "string", "required": true }], "hasComplexInput": false, "help": "Create an additional clean company from an existing company session. Requires tenant.create.additional entitlement; first-company bootstrap stays signup.provision_tenant." },
|
|
51982
52179
|
{ "id": "tenant.model_gateway_policy.update", "namespace": "tenant", "action": "model_gateway_policy.update", "title": "Update model gateway policy", "description": "Unlock or relock managed models that do not offer a zero-retention (ZDR) tier (ADR-0019). Locked (the conservative default) restricts the AI Gateway to zero-retention-eligible managed models. Owner-only and human-gated: unlocking is a deliberate ADR-0018 \xA76 standing authorization that lets managed brains without a zero-retention tier run. This provider retains data up to 30 days for abuse monitoring.", "requiredScope": "tenant_admin", "confirmation": "dangerous", "exposeOverMcp": true, "fields": [{ "name": "allow_non_zdr_models", "flag": "allow-non-zdr-models", "type": "boolean", "required": true }], "hasComplexInput": false, "help": "Unlock or relock managed models that do not offer a zero-retention (ZDR) tier (ADR-0019). Locked (default) restricts the AI Gateway to zero-retention-eligible managed models. Owner-only and human-gated; unlocking establishes an ADR-0018 \xA76 standing authorization and surfaces the per-model retention disclosure." },
|
|
@@ -51984,6 +52181,7 @@ var COMMAND_MANIFEST = [
|
|
|
51984
52181
|
{ "id": "tool_grants.agent.effective", "namespace": "tool_grants", "action": "agent.effective", "title": "List agent effective capability grants", "description": "Read the effective capability grants for one agent, including the lower-of-ceiling-and-selection access level and compile status. Returns metadata only.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Read one agent's effective capability grants after tenant ceilings, agent selections, and compile availability are applied." },
|
|
51985
52182
|
{ "id": "tool_grants.agent.update", "namespace": "tool_grants", "action": "agent.update", "title": "Update agent capability grants", "description": "Compile a Charter supersession proposal for per-agent capability grant reductions or expansions. Human steward/admin only.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": true, "help": "Compile a Charter supersession proposal for an agent capability grant reduction or expansion. Human steward/admin only." },
|
|
51986
52183
|
{ "id": "tool_grants.tenant.list", "namespace": "tool_grants", "action": "tenant.list", "title": "List tenant capability grants", "description": "Read the tenant capability ceiling/default matrix with connection, availability, source, ceiling, and compile status. Returns metadata only.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List tenant capability ceilings/defaults with connection, availability, source, and compile status. Read-only." },
|
|
52184
|
+
{ "id": "tool_grants.tenant.update", "namespace": "tool_grants", "action": "tenant.update", "title": "Update tenant capability policy", "description": "Atomically update tenant capability mode, company maximums, and new-agent defaults with stale-write protection and affected-agent impact.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "expected_policy_version", "flag": "expected-policy-version", "type": "integer", "required": false }, { "name": "expected_policy_digest", "flag": "expected-policy-digest", "type": "string", "required": false }, { "name": "mode", "flag": "mode", "type": "enum", "required": true, "enumValues": ["managed", "open"] }], "hasComplexInput": true, "help": "Update tenant capability ceilings/defaults with stale-write protection; owner/admin only, human-gated, and event-audited." },
|
|
51987
52185
|
{ "id": "tool.catalog", "namespace": "tool", "action": "catalog", "title": "List tool catalog", "description": "List the discoverable tool catalog the agent builder reads \u2014 tool id, title, provider, prescriptive description, default scope tiers, credential requirement, access policy, and execution-boundary guidance.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "provider", "flag": "provider", "type": "string", "required": false }], "hasComplexInput": false, "help": "List the tool catalog the builder reads \u2014 id, prescriptive description, scope tiers, credential requirement, access policy, and execution-boundary guidance." },
|
|
51988
52186
|
{ "id": "usage.report", "namespace": "usage", "action": "report", "title": "AI-workforce ROI report", "description": "Return the tenant's immutable per-period usage snapshots \u2014 agents ran, outputs, token/run cost, human-accepted value, exceptions, and approvals \u2014 for the AI-workforce ROI report.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Read the AI-workforce ROI report \u2014 per-period agents/outputs/token+run cost, human-accepted value, exceptions, and approvals \u2014 from immutable usage snapshots." },
|
|
51989
52187
|
{ "id": "usage.snapshot", "namespace": "usage", "action": "snapshot", "title": "Capture usage period snapshot", "description": "Freeze the current (or a given) period's usage and accepted-value totals into an immutable snapshot for the ROI report. Insert-only and idempotent \u2014 re-running a captured period changes nothing.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": true, "help": "Freeze the current period's usage and accepted-value totals into an immutable snapshot for the ROI report; insert-only and idempotent, so re-running a captured period changes nothing." },
|