@rosthq/cli 0.7.122 → 0.7.124
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/README.md +80 -3
- package/dist/commands/onboarding.d.ts +24 -2
- package/dist/commands/onboarding.d.ts.map +1 -1
- package/dist/generated/command-manifest.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1172 -646
- package/dist/index.js.map +4 -4
- package/package.json +1 -1
- package/prompts/how-tos/human-confirmations.md +3 -1
package/dist/index.js
CHANGED
|
@@ -31772,15 +31772,16 @@ var charterBudgetSchema = external_exports.object({
|
|
|
31772
31772
|
approval_required_over_usd: external_exports.number().nonnegative().nullable(),
|
|
31773
31773
|
notes: external_exports.string().min(1)
|
|
31774
31774
|
}).strict();
|
|
31775
|
+
var charterDecisionAuthoritySchema = external_exports.object({
|
|
31776
|
+
autonomous: external_exports.array(charterAuthorityItemSchema),
|
|
31777
|
+
approval: external_exports.array(charterAuthorityItemSchema),
|
|
31778
|
+
escalate: external_exports.array(charterAuthorityItemSchema).min(1)
|
|
31779
|
+
}).strict();
|
|
31775
31780
|
var charterDocObjectSchema = external_exports.object({
|
|
31776
31781
|
payload_version: external_exports.literal(1),
|
|
31777
31782
|
purpose: external_exports.string().min(1),
|
|
31778
31783
|
accountabilities: external_exports.array(charterAccountabilitySchema).min(1),
|
|
31779
|
-
decision_authority:
|
|
31780
|
-
autonomous: external_exports.array(charterAuthorityItemSchema),
|
|
31781
|
-
approval: external_exports.array(charterAuthorityItemSchema),
|
|
31782
|
-
escalate: external_exports.array(charterAuthorityItemSchema).min(1)
|
|
31783
|
-
}).strict(),
|
|
31784
|
+
decision_authority: charterDecisionAuthoritySchema,
|
|
31784
31785
|
escalation_rules: external_exports.array(external_exports.string().min(1)).min(1),
|
|
31785
31786
|
measurables: external_exports.array(charterMeasurableSchema).min(1),
|
|
31786
31787
|
permission_manifest: external_exports.array(charterPermissionSchema),
|
|
@@ -36587,9 +36588,163 @@ var onboardingRehearseOutputSchema = external_exports.union([
|
|
|
36587
36588
|
terminalOutputSchema
|
|
36588
36589
|
]);
|
|
36589
36590
|
|
|
36591
|
+
// ../../packages/protocol/src/onboarding-activation.ts
|
|
36592
|
+
var uuidSchema18 = external_exports.string().uuid();
|
|
36593
|
+
var digestSchema4 = external_exports.string().regex(/^sha256:[0-9a-f]{64}$/);
|
|
36594
|
+
var boundedText3 = (max) => external_exports.string().trim().min(1).max(max);
|
|
36595
|
+
var rehearsalRunEntrySchema = external_exports.object({
|
|
36596
|
+
agent_id: uuidSchema18,
|
|
36597
|
+
rehearsal_run_id: uuidSchema18
|
|
36598
|
+
}).strict();
|
|
36599
|
+
var configurationDigestEntrySchema = external_exports.object({
|
|
36600
|
+
agent_id: uuidSchema18,
|
|
36601
|
+
configuration_digest: digestSchema4
|
|
36602
|
+
}).strict();
|
|
36603
|
+
function uniqueAgentEntries(values, ctx) {
|
|
36604
|
+
const seen = /* @__PURE__ */ new Set();
|
|
36605
|
+
values.forEach((value, index) => {
|
|
36606
|
+
if (seen.has(value.agent_id)) {
|
|
36607
|
+
ctx.addIssue({
|
|
36608
|
+
code: external_exports.ZodIssueCode.custom,
|
|
36609
|
+
path: [index, "agent_id"],
|
|
36610
|
+
message: "Activation evidence must not repeat an agent_id."
|
|
36611
|
+
});
|
|
36612
|
+
}
|
|
36613
|
+
seen.add(value.agent_id);
|
|
36614
|
+
});
|
|
36615
|
+
}
|
|
36616
|
+
var onboardingActivationRehearsalRunsSchema = external_exports.array(rehearsalRunEntrySchema).min(1).max(100).superRefine(uniqueAgentEntries);
|
|
36617
|
+
var onboardingActivationConfigurationDigestsSchema = external_exports.array(configurationDigestEntrySchema).min(1).max(100).superRefine(uniqueAgentEntries);
|
|
36618
|
+
var onboardingActivateInputSchema = external_exports.object({
|
|
36619
|
+
idempotency_key: boundedText3(120),
|
|
36620
|
+
setup_application_id: uuidSchema18,
|
|
36621
|
+
expected_input_digest: digestSchema4,
|
|
36622
|
+
expected_receipt_revision: external_exports.number().int().positive(),
|
|
36623
|
+
terminal_rehearsal_batch_receipt_id: uuidSchema18,
|
|
36624
|
+
rehearsal_runs: onboardingActivationRehearsalRunsSchema,
|
|
36625
|
+
configuration_digests: onboardingActivationConfigurationDigestsSchema
|
|
36626
|
+
}).strict();
|
|
36627
|
+
var effectivePermissionManifestRuleSchema = external_exports.object({
|
|
36628
|
+
name: boundedText3(200),
|
|
36629
|
+
mode: external_exports.enum(["allow", "deny", "escalate"]),
|
|
36630
|
+
clause: boundedText3(500),
|
|
36631
|
+
scopeTier: external_exports.enum(["read", "draft", "write_with_approval", "full"]).optional(),
|
|
36632
|
+
args: external_exports.object({
|
|
36633
|
+
equals: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
36634
|
+
}).strict().optional(),
|
|
36635
|
+
credentialGrant: external_exports.object({
|
|
36636
|
+
capabilityId: boundedText3(200),
|
|
36637
|
+
integrationId: uuidSchema18.nullable(),
|
|
36638
|
+
requestedAccessLevel: capabilityGrantAccessLevelSchema,
|
|
36639
|
+
actingSeatId: uuidSchema18.optional(),
|
|
36640
|
+
effectiveCharterVersionId: uuidSchema18.optional()
|
|
36641
|
+
}).strict().optional()
|
|
36642
|
+
}).strict();
|
|
36643
|
+
var onboardingActivationAgentProposalSchema = external_exports.object({
|
|
36644
|
+
agent_id: uuidSchema18,
|
|
36645
|
+
seat_id: uuidSchema18,
|
|
36646
|
+
charter_version_id: uuidSchema18,
|
|
36647
|
+
manifest: external_exports.object({
|
|
36648
|
+
digest: digestSchema4,
|
|
36649
|
+
evidence_receipt_id: uuidSchema18,
|
|
36650
|
+
evidence_revision: external_exports.number().int().positive()
|
|
36651
|
+
}).strict(),
|
|
36652
|
+
configuration_digest: digestSchema4,
|
|
36653
|
+
rehearsal_run_id: uuidSchema18,
|
|
36654
|
+
effective_lane: external_exports.enum(["cloud", "mcp_session", "runner"]),
|
|
36655
|
+
effective_model: external_exports.string().trim().min(1).max(200).nullable(),
|
|
36656
|
+
decision_authority: charterDecisionAuthoritySchema,
|
|
36657
|
+
effective_permission_manifest: external_exports.array(effectivePermissionManifestRuleSchema).max(200),
|
|
36658
|
+
schedule: external_exports.object({
|
|
36659
|
+
cron: external_exports.string().trim().min(1).max(200).nullable(),
|
|
36660
|
+
timezone: external_exports.string().trim().min(1).max(100).nullable()
|
|
36661
|
+
}).strict(),
|
|
36662
|
+
budget: external_exports.object({
|
|
36663
|
+
current_spend_usd: external_exports.string().trim().min(1).max(100),
|
|
36664
|
+
hard_cap_usd: external_exports.string().trim().min(1).max(100).nullable()
|
|
36665
|
+
}).strict(),
|
|
36666
|
+
sources: external_exports.object({
|
|
36667
|
+
checked: external_exports.number().int().nonnegative(),
|
|
36668
|
+
required: external_exports.number().int().positive()
|
|
36669
|
+
}).strict(),
|
|
36670
|
+
warnings: external_exports.array(external_exports.string().trim().min(1).max(500)).max(100)
|
|
36671
|
+
}).strict();
|
|
36672
|
+
var onboardingActivationApprovalProjectionSchema = external_exports.object({
|
|
36673
|
+
kind: external_exports.literal("onboarding_activation"),
|
|
36674
|
+
setup_application_id: uuidSchema18,
|
|
36675
|
+
implementation_run_id: uuidSchema18.nullable(),
|
|
36676
|
+
expected_input_digest: digestSchema4,
|
|
36677
|
+
expected_receipt_revision: external_exports.number().int().positive(),
|
|
36678
|
+
terminal_rehearsal_batch_receipt_id: uuidSchema18,
|
|
36679
|
+
activation_input_digest: digestSchema4,
|
|
36680
|
+
agents: external_exports.array(onboardingActivationAgentProposalSchema).min(1).max(100),
|
|
36681
|
+
checked_count: external_exports.number().int().positive(),
|
|
36682
|
+
total_count: external_exports.number().int().positive(),
|
|
36683
|
+
onboarding_completion_effect: external_exports.literal(true)
|
|
36684
|
+
}).strict();
|
|
36685
|
+
var onboardingActivationCommittedAgentSchema = external_exports.object({
|
|
36686
|
+
agent_id: uuidSchema18,
|
|
36687
|
+
seat_id: uuidSchema18,
|
|
36688
|
+
status: external_exports.literal("live"),
|
|
36689
|
+
schedule_armed: external_exports.boolean()
|
|
36690
|
+
}).strict();
|
|
36691
|
+
var onboardingActivationCommittedAgentsSchema = external_exports.array(
|
|
36692
|
+
onboardingActivationCommittedAgentSchema
|
|
36693
|
+
).min(1).max(100).superRefine((agents, ctx) => {
|
|
36694
|
+
const agentIds = /* @__PURE__ */ new Set();
|
|
36695
|
+
const seatIds = /* @__PURE__ */ new Set();
|
|
36696
|
+
agents.forEach((agent, index) => {
|
|
36697
|
+
if (agentIds.has(agent.agent_id)) {
|
|
36698
|
+
ctx.addIssue({
|
|
36699
|
+
code: external_exports.ZodIssueCode.custom,
|
|
36700
|
+
path: [index, "agent_id"],
|
|
36701
|
+
message: "Activation snapshot agents must have unique agent_id values."
|
|
36702
|
+
});
|
|
36703
|
+
}
|
|
36704
|
+
if (seatIds.has(agent.seat_id)) {
|
|
36705
|
+
ctx.addIssue({
|
|
36706
|
+
code: external_exports.ZodIssueCode.custom,
|
|
36707
|
+
path: [index, "seat_id"],
|
|
36708
|
+
message: "Activation snapshot agents must have unique seat_id values."
|
|
36709
|
+
});
|
|
36710
|
+
}
|
|
36711
|
+
agentIds.add(agent.agent_id);
|
|
36712
|
+
seatIds.add(agent.seat_id);
|
|
36713
|
+
});
|
|
36714
|
+
});
|
|
36715
|
+
var onboardingActivationCommitSnapshotSchema = external_exports.object({
|
|
36716
|
+
terminal_rehearsal_batch_receipt_id: uuidSchema18,
|
|
36717
|
+
agents: onboardingActivationCommittedAgentsSchema,
|
|
36718
|
+
onboarding_completed_at: external_exports.string().datetime({ offset: true })
|
|
36719
|
+
}).strict();
|
|
36720
|
+
var onboardingActivationPersistenceInputSchema = external_exports.object({
|
|
36721
|
+
activation_confirmation_id: uuidSchema18,
|
|
36722
|
+
activation_idempotency_key: boundedText3(120),
|
|
36723
|
+
activation_input_digest: digestSchema4,
|
|
36724
|
+
receipt_revision: external_exports.number().int().positive(),
|
|
36725
|
+
activation_snapshot: onboardingActivationCommitSnapshotSchema
|
|
36726
|
+
}).strict();
|
|
36727
|
+
var onboardingActivationReceiptSchema = external_exports.object({
|
|
36728
|
+
activation_receipt_id: uuidSchema18,
|
|
36729
|
+
activation_confirmation_id: uuidSchema18,
|
|
36730
|
+
setup_application_id: uuidSchema18,
|
|
36731
|
+
implementation_run_id: uuidSchema18.nullable(),
|
|
36732
|
+
activation_input_digest: digestSchema4,
|
|
36733
|
+
setup_receipt_revision: external_exports.number().int().positive(),
|
|
36734
|
+
terminal_rehearsal_batch_receipt_id: uuidSchema18,
|
|
36735
|
+
agents: external_exports.array(onboardingActivationCommittedAgentSchema).min(1).max(100),
|
|
36736
|
+
onboarding_completed_at: external_exports.string().datetime({ offset: true }),
|
|
36737
|
+
activated_at: external_exports.string().datetime({ offset: true })
|
|
36738
|
+
}).strict();
|
|
36739
|
+
var onboardingActivateOutputSchema = external_exports.object({
|
|
36740
|
+
application_id: uuidSchema18,
|
|
36741
|
+
status: external_exports.literal("activated"),
|
|
36742
|
+
receipt: onboardingActivationReceiptSchema
|
|
36743
|
+
}).strict();
|
|
36744
|
+
|
|
36590
36745
|
// ../../packages/protocol/src/mcp-onboarding.ts
|
|
36591
36746
|
var MCP_TOKEN_ABSOLUTE_MAX_EXPIRY_MS = (MCP_TOKEN_NO_EXPIRY_SENTINEL_DAYS + 1) * 24 * 60 * 60 * 1e3;
|
|
36592
|
-
var
|
|
36747
|
+
var uuidSchema19 = external_exports.string().uuid();
|
|
36593
36748
|
var isoDateTime6 = external_exports.string().datetime({ offset: true });
|
|
36594
36749
|
var onboardingStatusInputSchema = external_exports.object({}).strict();
|
|
36595
36750
|
var onboardingStatusOutputSchema = external_exports.object({
|
|
@@ -36633,7 +36788,7 @@ var onboardingAttachReferenceInputSchema = external_exports.object({
|
|
|
36633
36788
|
source: external_exports.string().trim().min(1).max(500).optional()
|
|
36634
36789
|
}).strict();
|
|
36635
36790
|
var onboardingAttachReferenceOutputSchema = external_exports.object({
|
|
36636
|
-
document_id:
|
|
36791
|
+
document_id: uuidSchema19,
|
|
36637
36792
|
storage_ref: external_exports.string().min(1),
|
|
36638
36793
|
kind: external_exports.enum(["org_chart", "role_doc", "plan", "financial", "other"]),
|
|
36639
36794
|
title: external_exports.string().min(1).nullable()
|
|
@@ -36658,7 +36813,7 @@ var onboardingCreateInviteInputSchema = external_exports.object({
|
|
|
36658
36813
|
flags: external_exports.record(external_exports.string(), external_exports.unknown()).default({})
|
|
36659
36814
|
}).strict();
|
|
36660
36815
|
var onboardingCreateInviteOutputSchema = external_exports.object({
|
|
36661
|
-
invite_id:
|
|
36816
|
+
invite_id: uuidSchema19,
|
|
36662
36817
|
email: external_exports.string().email(),
|
|
36663
36818
|
role: external_exports.enum(["owner", "admin", "steward", "member"]),
|
|
36664
36819
|
token: external_exports.string().min(1)
|
|
@@ -36671,19 +36826,19 @@ var tenantAnthropicKeySaveOutputSchema = external_exports.object({
|
|
|
36671
36826
|
}).strict();
|
|
36672
36827
|
var tenantAnthropicKeyDisableInputSchema = external_exports.object({}).strict();
|
|
36673
36828
|
var tenantAnthropicKeyDisableOutputSchema = external_exports.object({
|
|
36674
|
-
tenant_id:
|
|
36675
|
-
credential_id:
|
|
36829
|
+
tenant_id: uuidSchema19,
|
|
36830
|
+
credential_id: uuidSchema19.nullable(),
|
|
36676
36831
|
disabled: external_exports.boolean(),
|
|
36677
36832
|
already_disabled: external_exports.boolean(),
|
|
36678
36833
|
managed_fallback_ready: external_exports.boolean()
|
|
36679
36834
|
}).strict();
|
|
36680
36835
|
var seatCreateInputSchema = external_exports.object({
|
|
36681
36836
|
name: external_exports.string().trim().min(1).max(120),
|
|
36682
|
-
parent_seat_id:
|
|
36837
|
+
parent_seat_id: uuidSchema19.nullable().optional(),
|
|
36683
36838
|
seat_type: external_exports.enum(["human", "agent", "hybrid"]).default("human")
|
|
36684
36839
|
}).strict();
|
|
36685
36840
|
var seatCreateOutputSchema = withCommandEffect({
|
|
36686
|
-
seat_id:
|
|
36841
|
+
seat_id: uuidSchema19,
|
|
36687
36842
|
// Mirrors the literal `createSeat` writes at insert time. Not sourced from a
|
|
36688
36843
|
// read-back: `createSeat` returns only the new id, and widening its
|
|
36689
36844
|
// signature to return the row is out of scope for this issue (schema +
|
|
@@ -36694,29 +36849,29 @@ var seatCreateOutputSchema = withCommandEffect({
|
|
|
36694
36849
|
status: external_exports.enum(["draft", "active", "vacant", "decommissioned"])
|
|
36695
36850
|
});
|
|
36696
36851
|
var seatRenameInputSchema = external_exports.object({
|
|
36697
|
-
seat_id:
|
|
36852
|
+
seat_id: uuidSchema19,
|
|
36698
36853
|
name: external_exports.string().trim().min(1).max(120)
|
|
36699
36854
|
}).strict();
|
|
36700
36855
|
var seatReparentInputSchema = external_exports.object({
|
|
36701
|
-
seat_id:
|
|
36702
|
-
new_parent_seat_id:
|
|
36856
|
+
seat_id: uuidSchema19,
|
|
36857
|
+
new_parent_seat_id: uuidSchema19.nullable()
|
|
36703
36858
|
}).strict();
|
|
36704
36859
|
var seatSetTypeInputSchema = external_exports.object({
|
|
36705
|
-
seat_id:
|
|
36860
|
+
seat_id: uuidSchema19,
|
|
36706
36861
|
seat_type: external_exports.enum(["human", "agent", "hybrid"])
|
|
36707
36862
|
}).strict();
|
|
36708
36863
|
var seatDecommissionInputSchema = external_exports.object({
|
|
36709
|
-
seat_id:
|
|
36864
|
+
seat_id: uuidSchema19
|
|
36710
36865
|
}).strict();
|
|
36711
36866
|
var seatMutationOutputSchema = external_exports.object({
|
|
36712
|
-
seat_id:
|
|
36867
|
+
seat_id: uuidSchema19
|
|
36713
36868
|
}).strict();
|
|
36714
36869
|
var seatDecommissionPreviewOutputSchema = external_exports.object({
|
|
36715
|
-
seat_id:
|
|
36870
|
+
seat_id: uuidSchema19,
|
|
36716
36871
|
seat_name: external_exports.string(),
|
|
36717
36872
|
previous_status: external_exports.enum(["draft", "active", "vacant", "decommissioned"]),
|
|
36718
36873
|
active_occupancy_count: external_exports.number().int().nonnegative(),
|
|
36719
|
-
active_agent_ids: external_exports.array(
|
|
36874
|
+
active_agent_ids: external_exports.array(uuidSchema19),
|
|
36720
36875
|
active_charter_count: external_exports.number().int().nonnegative(),
|
|
36721
36876
|
active_mcp_token_count: external_exports.number().int().nonnegative(),
|
|
36722
36877
|
active_credential_count: external_exports.number().int().nonnegative(),
|
|
@@ -36726,16 +36881,16 @@ var seatDecommissionPreviewOutputSchema = external_exports.object({
|
|
|
36726
36881
|
effects: external_exports.array(external_exports.string())
|
|
36727
36882
|
}).strict();
|
|
36728
36883
|
var charterDraftInputSchema = external_exports.object({
|
|
36729
|
-
seat_id:
|
|
36884
|
+
seat_id: uuidSchema19
|
|
36730
36885
|
}).strict();
|
|
36731
36886
|
var charterDraftOutputSchema = external_exports.object({
|
|
36732
|
-
charter_version_id:
|
|
36733
|
-
seat_id:
|
|
36887
|
+
charter_version_id: uuidSchema19,
|
|
36888
|
+
seat_id: uuidSchema19,
|
|
36734
36889
|
edit_revision: external_exports.number().int().min(1).optional(),
|
|
36735
36890
|
doc: external_exports.unknown()
|
|
36736
36891
|
}).strict();
|
|
36737
36892
|
var charterUpdateDraftInputSchema = external_exports.object({
|
|
36738
|
-
charter_version_id:
|
|
36893
|
+
charter_version_id: uuidSchema19,
|
|
36739
36894
|
expected_edit_revision: external_exports.number().int().min(1).optional(),
|
|
36740
36895
|
// DER-785 (Part G): the full Charter document contract (was `z.unknown()`).
|
|
36741
36896
|
// The DB layer already validated this with `charterSchema.parse`; advertising
|
|
@@ -36744,18 +36899,18 @@ var charterUpdateDraftInputSchema = external_exports.object({
|
|
|
36744
36899
|
doc: charterDocSchema
|
|
36745
36900
|
}).strict();
|
|
36746
36901
|
var charterSetInputSchema = external_exports.object({
|
|
36747
|
-
seat_id:
|
|
36902
|
+
seat_id: uuidSchema19,
|
|
36748
36903
|
doc: charterDocSchema,
|
|
36749
36904
|
approve: external_exports.boolean().default(false)
|
|
36750
36905
|
}).strict();
|
|
36751
36906
|
var charterMutationOutputSchema = external_exports.object({
|
|
36752
|
-
charter_version_id:
|
|
36753
|
-
seat_id:
|
|
36907
|
+
charter_version_id: uuidSchema19,
|
|
36908
|
+
seat_id: uuidSchema19,
|
|
36754
36909
|
edit_revision: external_exports.number().int().min(1).optional()
|
|
36755
36910
|
}).strict();
|
|
36756
36911
|
var charterApproveInputSchema = external_exports.object({
|
|
36757
|
-
seat_id:
|
|
36758
|
-
charter_version_id:
|
|
36912
|
+
seat_id: uuidSchema19.optional(),
|
|
36913
|
+
charter_version_id: uuidSchema19.optional(),
|
|
36759
36914
|
// DER-785 (Part G): a partial of the Charter doc shape (was an untyped record).
|
|
36760
36915
|
// These fields are shallow-merged onto the existing draft, then the merged doc
|
|
36761
36916
|
// is re-validated against the full schema at persist time.
|
|
@@ -36771,12 +36926,12 @@ var charterSignalResolutionSchema = external_exports.discriminatedUnion("action"
|
|
|
36771
36926
|
external_exports.object({
|
|
36772
36927
|
declaration_name: charterSignalDeclarationNameSchema,
|
|
36773
36928
|
action: external_exports.literal("adopt_existing"),
|
|
36774
|
-
measurable_id:
|
|
36929
|
+
measurable_id: uuidSchema19
|
|
36775
36930
|
}).strict(),
|
|
36776
36931
|
external_exports.object({
|
|
36777
36932
|
declaration_name: charterSignalDeclarationNameSchema,
|
|
36778
36933
|
action: external_exports.literal("move_existing"),
|
|
36779
|
-
measurable_id:
|
|
36934
|
+
measurable_id: uuidSchema19
|
|
36780
36935
|
}).strict(),
|
|
36781
36936
|
external_exports.object({
|
|
36782
36937
|
declaration_name: charterSignalDeclarationNameSchema,
|
|
@@ -36784,7 +36939,7 @@ var charterSignalResolutionSchema = external_exports.discriminatedUnion("action"
|
|
|
36784
36939
|
}).strict()
|
|
36785
36940
|
]);
|
|
36786
36941
|
var charterReconcileSignalsInputSchema = external_exports.object({
|
|
36787
|
-
charter_version_id:
|
|
36942
|
+
charter_version_id: uuidSchema19,
|
|
36788
36943
|
// The stale-draft guard: `charter_versions.edit_revision` starts at 1, so 0 is
|
|
36789
36944
|
// never a real revision.
|
|
36790
36945
|
expected_edit_revision: external_exports.number().int().min(1),
|
|
@@ -36792,16 +36947,16 @@ var charterReconcileSignalsInputSchema = external_exports.object({
|
|
|
36792
36947
|
apply_seat_type: external_exports.boolean().default(false)
|
|
36793
36948
|
}).strict();
|
|
36794
36949
|
var charterSignalGoalBindingSchema = external_exports.object({
|
|
36795
|
-
goal_id:
|
|
36950
|
+
goal_id: uuidSchema19,
|
|
36796
36951
|
goal_title: external_exports.string(),
|
|
36797
36952
|
// Null for a company objective, which owns no Seat. A `drives_status` binding on a
|
|
36798
36953
|
// seatless goal can never match a destination Seat, so movement fails closed.
|
|
36799
|
-
goal_seat_id:
|
|
36954
|
+
goal_seat_id: uuidSchema19.nullable(),
|
|
36800
36955
|
role: external_exports.enum(["drives_status", "informs"])
|
|
36801
36956
|
}).strict();
|
|
36802
36957
|
var charterSignalCandidateSchema = external_exports.object({
|
|
36803
|
-
measurable_id:
|
|
36804
|
-
owner_seat_id:
|
|
36958
|
+
measurable_id: uuidSchema19,
|
|
36959
|
+
owner_seat_id: uuidSchema19,
|
|
36805
36960
|
owner_seat_name: external_exports.string(),
|
|
36806
36961
|
stored_source: external_exports.enum(["human", "agent", "integration"]),
|
|
36807
36962
|
reading_count: external_exports.number().int().min(0),
|
|
@@ -36821,7 +36976,7 @@ var charterSignalCandidateSchema = external_exports.object({
|
|
|
36821
36976
|
var charterSignalReconciliationItemSchema = external_exports.object({
|
|
36822
36977
|
declaration_name: external_exports.string(),
|
|
36823
36978
|
status: external_exports.enum(["linked", "candidate", "ambiguous", "missing"]),
|
|
36824
|
-
linked_measurable_id:
|
|
36979
|
+
linked_measurable_id: uuidSchema19.nullable(),
|
|
36825
36980
|
candidates: external_exports.array(charterSignalCandidateSchema),
|
|
36826
36981
|
// A DERIVED suggestion, never an applied one: `null` whenever a human must choose
|
|
36827
36982
|
// (ambiguous), whenever nothing matches (missing), or when the declaration is already
|
|
@@ -36832,11 +36987,11 @@ var charterSignalReconciliationItemSchema = external_exports.object({
|
|
|
36832
36987
|
warnings: external_exports.array(external_exports.string())
|
|
36833
36988
|
}).strict();
|
|
36834
36989
|
var charterPreviewSignalReconciliationInputSchema = external_exports.object({
|
|
36835
|
-
charter_version_id:
|
|
36990
|
+
charter_version_id: uuidSchema19
|
|
36836
36991
|
}).strict();
|
|
36837
36992
|
var charterPreviewSignalReconciliationOutputSchema = external_exports.object({
|
|
36838
|
-
charter_version_id:
|
|
36839
|
-
seat_id:
|
|
36993
|
+
charter_version_id: uuidSchema19,
|
|
36994
|
+
seat_id: uuidSchema19,
|
|
36840
36995
|
// Pass this back as `expected_edit_revision` when reconciling, so a draft edited after
|
|
36841
36996
|
// the preview cannot be reconciled against a stale reading of it.
|
|
36842
36997
|
edit_revision: external_exports.number().int().min(1),
|
|
@@ -36847,20 +37002,20 @@ var charterDraftSkipReasonSchema = external_exports.enum(["seat_not_active", "ch
|
|
|
36847
37002
|
var charterDraftAllOutputSchema = withCommandEffect({
|
|
36848
37003
|
drafted: external_exports.number().int().nonnegative(),
|
|
36849
37004
|
skipped: external_exports.number().int().nonnegative(),
|
|
36850
|
-
draft_ids: external_exports.array(
|
|
37005
|
+
draft_ids: external_exports.array(uuidSchema19),
|
|
36851
37006
|
skipped_seats: external_exports.array(external_exports.object({
|
|
36852
|
-
seat_id:
|
|
37007
|
+
seat_id: uuidSchema19,
|
|
36853
37008
|
reason: charterDraftSkipReasonSchema
|
|
36854
37009
|
}).strict())
|
|
36855
37010
|
});
|
|
36856
37011
|
var charterSkipInputSchema = external_exports.object({
|
|
36857
|
-
charter_version_id:
|
|
37012
|
+
charter_version_id: uuidSchema19
|
|
36858
37013
|
}).strict();
|
|
36859
37014
|
var charterApplySeatTypeRecommendationInputSchema = external_exports.object({
|
|
36860
|
-
charter_version_id:
|
|
37015
|
+
charter_version_id: uuidSchema19
|
|
36861
37016
|
}).strict();
|
|
36862
37017
|
var charterSignManifestInputSchema = external_exports.object({
|
|
36863
|
-
charter_version_id:
|
|
37018
|
+
charter_version_id: uuidSchema19
|
|
36864
37019
|
}).strict();
|
|
36865
37020
|
var pendingConfirmationSchema = external_exports.object({
|
|
36866
37021
|
confirmationId: external_exports.string().min(1),
|
|
@@ -36914,7 +37069,7 @@ var confirmationListInputSchema = external_exports.object({
|
|
|
36914
37069
|
limit: external_exports.number().int().min(1).max(200).optional()
|
|
36915
37070
|
}).strict();
|
|
36916
37071
|
var confirmationSummarySchema = external_exports.object({
|
|
36917
|
-
id:
|
|
37072
|
+
id: uuidSchema19,
|
|
36918
37073
|
command_id: external_exports.string(),
|
|
36919
37074
|
redacted_args: external_exports.unknown(),
|
|
36920
37075
|
// DER-2161 kickback round 1, finding (6): tracks `PendingConfirmationListRow`'s
|
|
@@ -36924,7 +37079,7 @@ var confirmationSummarySchema = external_exports.object({
|
|
|
36924
37079
|
actor_kind: external_exports.enum(["user", "agent", "system", "operator"]),
|
|
36925
37080
|
source: external_exports.string(),
|
|
36926
37081
|
scope_kind: external_exports.enum(["tenant_admin", "tenant", "seat"]),
|
|
36927
|
-
seat_id:
|
|
37082
|
+
seat_id: uuidSchema19.nullable(),
|
|
36928
37083
|
seat_name: external_exports.string().nullable(),
|
|
36929
37084
|
seat_type: external_exports.enum(["human", "agent", "hybrid"]).nullable(),
|
|
36930
37085
|
risk_level: external_exports.enum(["normal", "sensitive", "dangerous"]),
|
|
@@ -36936,37 +37091,37 @@ var confirmationListOutputSchema = external_exports.object({
|
|
|
36936
37091
|
confirmations: external_exports.array(confirmationSummarySchema)
|
|
36937
37092
|
}).strict();
|
|
36938
37093
|
var confirmationDismissInputSchema = external_exports.object({
|
|
36939
|
-
confirmation_id:
|
|
37094
|
+
confirmation_id: uuidSchema19
|
|
36940
37095
|
}).strict();
|
|
36941
37096
|
var confirmationDismissOutputSchema = external_exports.object({
|
|
36942
37097
|
dismissed: external_exports.object({
|
|
36943
|
-
id:
|
|
37098
|
+
id: uuidSchema19,
|
|
36944
37099
|
status: external_exports.literal("dismissed")
|
|
36945
37100
|
}).strict()
|
|
36946
37101
|
}).strict();
|
|
36947
37102
|
var confirmationDismissStaleInputSchema = external_exports.object({}).strict();
|
|
36948
37103
|
var confirmationDismissStaleOutputSchema = external_exports.object({
|
|
36949
37104
|
dismissed_count: external_exports.number().int().min(0),
|
|
36950
|
-
dismissed_ids: external_exports.array(
|
|
37105
|
+
dismissed_ids: external_exports.array(uuidSchema19)
|
|
36951
37106
|
}).strict();
|
|
36952
37107
|
var credentialIngressInputSchema = external_exports.object({
|
|
36953
|
-
seat_id:
|
|
37108
|
+
seat_id: uuidSchema19.optional(),
|
|
36954
37109
|
provider: external_exports.string().trim().min(1),
|
|
36955
37110
|
scope_description: external_exports.string().trim().min(1),
|
|
36956
37111
|
secret_name: external_exports.string().trim().min(1),
|
|
36957
37112
|
secret: external_exports.string().trim().min(1)
|
|
36958
37113
|
}).strict();
|
|
36959
37114
|
var credentialIngressOutputSchema = external_exports.object({
|
|
36960
|
-
credential_id:
|
|
37115
|
+
credential_id: uuidSchema19,
|
|
36961
37116
|
provider: external_exports.string().min(1),
|
|
36962
|
-
seat_id:
|
|
37117
|
+
seat_id: uuidSchema19.nullable()
|
|
36963
37118
|
}).strict();
|
|
36964
37119
|
var credentialListInputSchema = external_exports.object({}).strict();
|
|
36965
37120
|
var credentialSummarySchema = external_exports.object({
|
|
36966
|
-
credential_id:
|
|
37121
|
+
credential_id: uuidSchema19,
|
|
36967
37122
|
provider: external_exports.string(),
|
|
36968
37123
|
scope_description: external_exports.string(),
|
|
36969
|
-
seat_id:
|
|
37124
|
+
seat_id: uuidSchema19.nullable(),
|
|
36970
37125
|
status: external_exports.string(),
|
|
36971
37126
|
created_at: external_exports.string(),
|
|
36972
37127
|
rotated_at: external_exports.string(),
|
|
@@ -36976,16 +37131,16 @@ var credentialListOutputSchema = external_exports.object({
|
|
|
36976
37131
|
credentials: external_exports.array(credentialSummarySchema)
|
|
36977
37132
|
}).strict();
|
|
36978
37133
|
var agentGoLiveInputSchema = external_exports.object({
|
|
36979
|
-
seat_id:
|
|
36980
|
-
charter_version_id:
|
|
37134
|
+
seat_id: uuidSchema19,
|
|
37135
|
+
charter_version_id: uuidSchema19
|
|
36981
37136
|
}).strict();
|
|
36982
37137
|
var agentGoLiveOutputSchema = external_exports.object({
|
|
36983
|
-
seat_id:
|
|
36984
|
-
charter_version_id:
|
|
37138
|
+
seat_id: uuidSchema19,
|
|
37139
|
+
charter_version_id: uuidSchema19,
|
|
36985
37140
|
status: external_exports.literal("live")
|
|
36986
37141
|
}).strict();
|
|
36987
37142
|
var compassSetInputSchema = external_exports.object({
|
|
36988
|
-
draft_id:
|
|
37143
|
+
draft_id: uuidSchema19.optional(),
|
|
36989
37144
|
doc: compassDraftSchema.optional(),
|
|
36990
37145
|
approve: external_exports.boolean().default(false)
|
|
36991
37146
|
}).strict().refine((input) => Boolean(input.draft_id) !== Boolean(input.doc), {
|
|
@@ -36993,7 +37148,7 @@ var compassSetInputSchema = external_exports.object({
|
|
|
36993
37148
|
path: ["draft_id"]
|
|
36994
37149
|
});
|
|
36995
37150
|
var compassMutationOutputSchema = external_exports.object({
|
|
36996
|
-
compass_version_id:
|
|
37151
|
+
compass_version_id: uuidSchema19,
|
|
36997
37152
|
status: external_exports.enum(["draft", "active", "superseded"]),
|
|
36998
37153
|
version: external_exports.number().int().nonnegative()
|
|
36999
37154
|
}).strict();
|
|
@@ -37002,42 +37157,42 @@ var compassDraftInputSchema = external_exports.object({
|
|
|
37002
37157
|
doc: compassDraftSchema
|
|
37003
37158
|
}).strict();
|
|
37004
37159
|
var compassUpdateDraftInputSchema = external_exports.object({
|
|
37005
|
-
draft_id:
|
|
37160
|
+
draft_id: uuidSchema19,
|
|
37006
37161
|
doc: compassDraftSchema
|
|
37007
37162
|
}).strict();
|
|
37008
37163
|
var compassApproveVersionInputSchema = external_exports.object({
|
|
37009
|
-
draft_id:
|
|
37164
|
+
draft_id: uuidSchema19
|
|
37010
37165
|
}).strict();
|
|
37011
37166
|
var compassRejectDraftInputSchema = external_exports.object({
|
|
37012
|
-
draft_id:
|
|
37167
|
+
draft_id: uuidSchema19
|
|
37013
37168
|
}).strict();
|
|
37014
37169
|
var compassAnswerGapInputSchema = external_exports.object({
|
|
37015
37170
|
gap_id: external_exports.string().min(1),
|
|
37016
37171
|
answer: external_exports.string().trim().min(1)
|
|
37017
37172
|
}).strict();
|
|
37018
37173
|
var seatStaffInputSchema = external_exports.object({
|
|
37019
|
-
seat_id:
|
|
37174
|
+
seat_id: uuidSchema19,
|
|
37020
37175
|
occupant: external_exports.discriminatedUnion("type", [
|
|
37021
37176
|
external_exports.object({ type: external_exports.literal("vacant") }).strict(),
|
|
37022
|
-
external_exports.object({ type: external_exports.literal("user"), user_id:
|
|
37023
|
-
external_exports.object({ type: external_exports.literal("agent"), agent_id:
|
|
37177
|
+
external_exports.object({ type: external_exports.literal("user"), user_id: uuidSchema19 }).strict(),
|
|
37178
|
+
external_exports.object({ type: external_exports.literal("agent"), agent_id: uuidSchema19 }).strict()
|
|
37024
37179
|
])
|
|
37025
37180
|
}).strict();
|
|
37026
37181
|
var staffingMutationOutputSchema = external_exports.object({
|
|
37027
|
-
seat_id:
|
|
37182
|
+
seat_id: uuidSchema19,
|
|
37028
37183
|
staffed: external_exports.enum(["vacant", "user", "agent"])
|
|
37029
37184
|
}).strict();
|
|
37030
37185
|
var staffingAssignUserInputSchema = external_exports.object({
|
|
37031
|
-
seat_id:
|
|
37032
|
-
user_id:
|
|
37186
|
+
seat_id: uuidSchema19,
|
|
37187
|
+
user_id: uuidSchema19
|
|
37033
37188
|
}).strict();
|
|
37034
37189
|
var staffingAssignAgentDryRunInputSchema = external_exports.object({
|
|
37035
|
-
seat_id:
|
|
37036
|
-
agent_id:
|
|
37190
|
+
seat_id: uuidSchema19,
|
|
37191
|
+
agent_id: uuidSchema19
|
|
37037
37192
|
}).strict();
|
|
37038
37193
|
var mcpTokenCreateInputSchema = external_exports.object({
|
|
37039
37194
|
scope: external_exports.enum(["tenant_admin", "seat"]),
|
|
37040
|
-
seat_id:
|
|
37195
|
+
seat_id: uuidSchema19.optional(),
|
|
37041
37196
|
// DER-830: explicit absolute expiry (kept for back-compat / direct callers).
|
|
37042
37197
|
// When omitted OR null, the DB default (now() + 90 days) applies — `null` is an
|
|
37043
37198
|
// accepted "no explicit expiry" signal (existing UI/MCP callers pass it), so it
|
|
@@ -37081,17 +37236,17 @@ var mcpTokenCreateInputSchema = external_exports.object({
|
|
|
37081
37236
|
}
|
|
37082
37237
|
});
|
|
37083
37238
|
var mcpTokenCreateOutputSchema = external_exports.object({
|
|
37084
|
-
token_id:
|
|
37239
|
+
token_id: uuidSchema19,
|
|
37085
37240
|
token: external_exports.string().min(1),
|
|
37086
37241
|
scope: external_exports.enum(["tenant_admin", "seat"]),
|
|
37087
|
-
seat_id:
|
|
37242
|
+
seat_id: uuidSchema19.nullable()
|
|
37088
37243
|
}).strict();
|
|
37089
37244
|
var mcpTokenRevokeInputSchema = external_exports.object({
|
|
37090
|
-
token_id:
|
|
37091
|
-
seat_id:
|
|
37245
|
+
token_id: uuidSchema19,
|
|
37246
|
+
seat_id: uuidSchema19.optional()
|
|
37092
37247
|
}).strict();
|
|
37093
37248
|
var mcpTokenRevokeOutputSchema = external_exports.object({
|
|
37094
|
-
token_id:
|
|
37249
|
+
token_id: uuidSchema19,
|
|
37095
37250
|
revoked: external_exports.boolean()
|
|
37096
37251
|
}).strict();
|
|
37097
37252
|
|
|
@@ -37104,7 +37259,7 @@ var markNotificationsReadRequestSchema = external_exports.object({
|
|
|
37104
37259
|
});
|
|
37105
37260
|
|
|
37106
37261
|
// ../../packages/protocol/src/product-analytics.ts
|
|
37107
|
-
var
|
|
37262
|
+
var uuidSchema20 = external_exports.string().uuid();
|
|
37108
37263
|
var opaqueRequestIdSchema = external_exports.string().trim().min(1).max(240);
|
|
37109
37264
|
var safeNameSchema = external_exports.string().trim().min(1).max(120).regex(/^[a-z][a-z0-9._:-]*$/);
|
|
37110
37265
|
var safeSurfaceSchema = external_exports.string().trim().min(1).max(80).regex(/^[a-z][a-z0-9_-]*$/);
|
|
@@ -37198,8 +37353,8 @@ var recommendationOutcomeStatusSchema = external_exports.enum([
|
|
|
37198
37353
|
]);
|
|
37199
37354
|
var durationMsSchema = external_exports.number().int().nonnegative().max(24 * 60 * 60 * 1e3).optional();
|
|
37200
37355
|
var productEventInputSchema = external_exports.object({
|
|
37201
|
-
tenant_id:
|
|
37202
|
-
user_id:
|
|
37356
|
+
tenant_id: uuidSchema20,
|
|
37357
|
+
user_id: uuidSchema20.optional(),
|
|
37203
37358
|
source: analyticsSourceSchema,
|
|
37204
37359
|
event_name: safeNameSchema,
|
|
37205
37360
|
route_template: routeTemplateSchema.optional(),
|
|
@@ -37208,8 +37363,8 @@ var productEventInputSchema = external_exports.object({
|
|
|
37208
37363
|
occurred_at: external_exports.string().datetime({ offset: true }).optional()
|
|
37209
37364
|
}).strict();
|
|
37210
37365
|
var pageViewInputSchema = external_exports.object({
|
|
37211
|
-
tenant_id:
|
|
37212
|
-
user_id:
|
|
37366
|
+
tenant_id: uuidSchema20,
|
|
37367
|
+
user_id: uuidSchema20.optional(),
|
|
37213
37368
|
route_template: routeTemplateSchema,
|
|
37214
37369
|
referrer_route_template: routeTemplateSchema.optional(),
|
|
37215
37370
|
surface: safeSurfaceSchema.default("web"),
|
|
@@ -37218,12 +37373,12 @@ var pageViewInputSchema = external_exports.object({
|
|
|
37218
37373
|
occurred_at: external_exports.string().datetime({ offset: true }).optional()
|
|
37219
37374
|
}).strict();
|
|
37220
37375
|
var commandInvocationInputSchema = external_exports.object({
|
|
37221
|
-
tenant_id:
|
|
37222
|
-
user_id:
|
|
37223
|
-
seat_id:
|
|
37224
|
-
run_id:
|
|
37225
|
-
agent_turn_execution_id:
|
|
37226
|
-
session_id:
|
|
37376
|
+
tenant_id: uuidSchema20,
|
|
37377
|
+
user_id: uuidSchema20.optional(),
|
|
37378
|
+
seat_id: uuidSchema20.optional(),
|
|
37379
|
+
run_id: uuidSchema20.optional(),
|
|
37380
|
+
agent_turn_execution_id: uuidSchema20.optional(),
|
|
37381
|
+
session_id: uuidSchema20.optional(),
|
|
37227
37382
|
command_id: safeNameSchema,
|
|
37228
37383
|
source: analyticsSourceSchema,
|
|
37229
37384
|
// DER-2161 kickback round 1, finding (6): tracks `command_invocations.actor_kind`
|
|
@@ -37237,7 +37392,7 @@ var commandInvocationInputSchema = external_exports.object({
|
|
|
37237
37392
|
// `packages/commands/src/context.ts`'s operator context builder now sets
|
|
37238
37393
|
// `initiatorKind: "operator"` instead of coercing to "agent".
|
|
37239
37394
|
initiator_kind: external_exports.enum(["user", "agent", "system", "operator"]).optional(),
|
|
37240
|
-
initiator_user_id:
|
|
37395
|
+
initiator_user_id: uuidSchema20.nullable().optional(),
|
|
37241
37396
|
scope_kind: external_exports.enum(["tenant_admin", "tenant", "seat"]),
|
|
37242
37397
|
status: commandInvocationStatusSchema,
|
|
37243
37398
|
guard_result: external_exports.enum(["allowed", "denied_manifest", "denied_budget", "escalated", "denied_tenant_policy"]).optional(),
|
|
@@ -37256,8 +37411,8 @@ var commandInvocationInputSchema = external_exports.object({
|
|
|
37256
37411
|
}
|
|
37257
37412
|
});
|
|
37258
37413
|
var onboardingMilestoneInputSchema = external_exports.object({
|
|
37259
|
-
tenant_id:
|
|
37260
|
-
user_id:
|
|
37414
|
+
tenant_id: uuidSchema20,
|
|
37415
|
+
user_id: uuidSchema20.optional(),
|
|
37261
37416
|
milestone: safeNameSchema,
|
|
37262
37417
|
status: analyticsOutcomeStatusSchema,
|
|
37263
37418
|
step_index: external_exports.number().int().nonnegative().max(100).optional(),
|
|
@@ -37266,19 +37421,19 @@ var onboardingMilestoneInputSchema = external_exports.object({
|
|
|
37266
37421
|
occurred_at: external_exports.string().datetime({ offset: true }).optional()
|
|
37267
37422
|
}).strict();
|
|
37268
37423
|
var recommendationEventInputSchema = external_exports.object({
|
|
37269
|
-
tenant_id:
|
|
37270
|
-
user_id:
|
|
37424
|
+
tenant_id: uuidSchema20,
|
|
37425
|
+
user_id: uuidSchema20.optional(),
|
|
37271
37426
|
recommendation_type: safeNameSchema,
|
|
37272
37427
|
source_surface: safeSurfaceSchema,
|
|
37273
37428
|
status: recommendationOutcomeStatusSchema,
|
|
37274
37429
|
target_kind: safeSurfaceSchema.optional(),
|
|
37275
|
-
target_id:
|
|
37430
|
+
target_id: uuidSchema20.optional(),
|
|
37276
37431
|
properties: recommendationAnalyticsPropertiesSchema.optional(),
|
|
37277
37432
|
occurred_at: external_exports.string().datetime({ offset: true }).optional()
|
|
37278
37433
|
}).strict();
|
|
37279
37434
|
|
|
37280
37435
|
// ../../packages/protocol/src/reads.ts
|
|
37281
|
-
var
|
|
37436
|
+
var uuidSchema21 = external_exports.string().uuid();
|
|
37282
37437
|
var isoDateTime7 = external_exports.string().datetime({ offset: true });
|
|
37283
37438
|
var seatTypeSchema = external_exports.enum(["human", "agent", "hybrid"]);
|
|
37284
37439
|
var seatStatusSchema = external_exports.enum(["draft", "active", "vacant", "decommissioned"]);
|
|
@@ -37293,13 +37448,13 @@ var credentialStatusSchema = external_exports.enum(["active", "revoked"]);
|
|
|
37293
37448
|
var runStatusSchema = external_exports.enum(["running", "succeeded", "failed", "timeout", "cancelled"]);
|
|
37294
37449
|
var graphGetInputSchema = external_exports.object({}).strict();
|
|
37295
37450
|
var graphNodeSchema = external_exports.object({
|
|
37296
|
-
seat_id:
|
|
37451
|
+
seat_id: uuidSchema21,
|
|
37297
37452
|
name: external_exports.string(),
|
|
37298
37453
|
seat_type: seatTypeSchema,
|
|
37299
37454
|
status: seatStatusSchema,
|
|
37300
|
-
parent_seat_id:
|
|
37455
|
+
parent_seat_id: uuidSchema21.nullable(),
|
|
37301
37456
|
is_root: external_exports.boolean(),
|
|
37302
|
-
steward_seat_id:
|
|
37457
|
+
steward_seat_id: uuidSchema21.nullable(),
|
|
37303
37458
|
occupant: external_exports.object({
|
|
37304
37459
|
kind: external_exports.enum(["user", "agent"]),
|
|
37305
37460
|
label: external_exports.string(),
|
|
@@ -37312,11 +37467,11 @@ var graphNodeSchema = external_exports.object({
|
|
|
37312
37467
|
is_peer: external_exports.boolean()
|
|
37313
37468
|
}).strict();
|
|
37314
37469
|
var graphEdgeSchema = external_exports.object({
|
|
37315
|
-
parent_seat_id:
|
|
37316
|
-
child_seat_id:
|
|
37470
|
+
parent_seat_id: uuidSchema21,
|
|
37471
|
+
child_seat_id: uuidSchema21
|
|
37317
37472
|
}).strict();
|
|
37318
37473
|
var graphGetOutputSchema = external_exports.object({
|
|
37319
|
-
root_seat_id:
|
|
37474
|
+
root_seat_id: uuidSchema21.nullable(),
|
|
37320
37475
|
nodes: external_exports.array(graphNodeSchema),
|
|
37321
37476
|
edges: external_exports.array(graphEdgeSchema),
|
|
37322
37477
|
status_rollups: external_exports.object({
|
|
@@ -37328,32 +37483,32 @@ var graphGetOutputSchema = external_exports.object({
|
|
|
37328
37483
|
}).strict()
|
|
37329
37484
|
}).strict();
|
|
37330
37485
|
var seatGetInputSchema = external_exports.object({
|
|
37331
|
-
seat_id:
|
|
37486
|
+
seat_id: uuidSchema21
|
|
37332
37487
|
}).strict();
|
|
37333
37488
|
var seatGetOutputSchema = external_exports.object({
|
|
37334
|
-
seat_id:
|
|
37489
|
+
seat_id: uuidSchema21,
|
|
37335
37490
|
name: external_exports.string(),
|
|
37336
37491
|
seat_type: seatTypeSchema,
|
|
37337
37492
|
status: seatStatusSchema,
|
|
37338
37493
|
purpose: external_exports.string().nullable(),
|
|
37339
|
-
parent_seat_id:
|
|
37494
|
+
parent_seat_id: uuidSchema21.nullable(),
|
|
37340
37495
|
steward_chain: external_exports.array(external_exports.object({
|
|
37341
|
-
seat_id:
|
|
37496
|
+
seat_id: uuidSchema21,
|
|
37342
37497
|
name: external_exports.string()
|
|
37343
37498
|
}).strict()),
|
|
37344
37499
|
occupancies: external_exports.array(external_exports.object({
|
|
37345
|
-
occupancy_id:
|
|
37500
|
+
occupancy_id: uuidSchema21,
|
|
37346
37501
|
occupant_type: external_exports.enum(["user", "agent"]),
|
|
37347
37502
|
label: external_exports.string(),
|
|
37348
37503
|
started_at: isoDateTime7,
|
|
37349
37504
|
ended_at: isoDateTime7.nullable()
|
|
37350
37505
|
}).strict()),
|
|
37351
|
-
active_charter_version_id:
|
|
37352
|
-
draft_charter_version_id:
|
|
37506
|
+
active_charter_version_id: uuidSchema21.nullable(),
|
|
37507
|
+
draft_charter_version_id: uuidSchema21.nullable(),
|
|
37353
37508
|
agent_status: agentStatusEnum2.nullable(),
|
|
37354
37509
|
agent_lane: agentLaneSchema3.nullable(),
|
|
37355
37510
|
mcp_tokens: external_exports.array(external_exports.object({
|
|
37356
|
-
token_id:
|
|
37511
|
+
token_id: uuidSchema21,
|
|
37357
37512
|
scope: mcpScopeSchema,
|
|
37358
37513
|
created_at: isoDateTime7,
|
|
37359
37514
|
last_seen_at: isoDateTime7.nullable(),
|
|
@@ -37363,7 +37518,7 @@ var seatGetOutputSchema = external_exports.object({
|
|
|
37363
37518
|
revoked_at: isoDateTime7.nullable()
|
|
37364
37519
|
}).strict()),
|
|
37365
37520
|
credentials: external_exports.array(external_exports.object({
|
|
37366
|
-
credential_id:
|
|
37521
|
+
credential_id: uuidSchema21,
|
|
37367
37522
|
provider: external_exports.string(),
|
|
37368
37523
|
status: credentialStatusSchema
|
|
37369
37524
|
}).strict()),
|
|
@@ -37375,12 +37530,12 @@ var seatGetOutputSchema = external_exports.object({
|
|
|
37375
37530
|
}).strict()
|
|
37376
37531
|
}).strict();
|
|
37377
37532
|
var charterListInputSchema = external_exports.object({
|
|
37378
|
-
seat_id:
|
|
37533
|
+
seat_id: uuidSchema21.optional(),
|
|
37379
37534
|
status: charterStatusSchema.optional()
|
|
37380
37535
|
}).strict();
|
|
37381
37536
|
var charterSummarySchema = external_exports.object({
|
|
37382
|
-
charter_version_id:
|
|
37383
|
-
seat_id:
|
|
37537
|
+
charter_version_id: uuidSchema21,
|
|
37538
|
+
seat_id: uuidSchema21,
|
|
37384
37539
|
version: external_exports.number().int().nonnegative(),
|
|
37385
37540
|
status: charterStatusSchema,
|
|
37386
37541
|
created_at: isoDateTime7,
|
|
@@ -37390,11 +37545,11 @@ var charterListOutputSchema = external_exports.object({
|
|
|
37390
37545
|
charters: external_exports.array(charterSummarySchema)
|
|
37391
37546
|
}).strict();
|
|
37392
37547
|
var charterGetInputSchema = external_exports.object({
|
|
37393
|
-
charter_version_id:
|
|
37548
|
+
charter_version_id: uuidSchema21
|
|
37394
37549
|
}).strict();
|
|
37395
37550
|
var charterGetOutputSchema = external_exports.object({
|
|
37396
|
-
charter_version_id:
|
|
37397
|
-
seat_id:
|
|
37551
|
+
charter_version_id: uuidSchema21,
|
|
37552
|
+
seat_id: uuidSchema21,
|
|
37398
37553
|
version: external_exports.number().int().nonnegative(),
|
|
37399
37554
|
status: charterStatusSchema,
|
|
37400
37555
|
created_at: isoDateTime7,
|
|
@@ -37408,7 +37563,7 @@ var charterGetOutputSchema = external_exports.object({
|
|
|
37408
37563
|
}).strict();
|
|
37409
37564
|
var compassGetCurrentInputSchema = external_exports.object({}).strict();
|
|
37410
37565
|
var compassVersionRefSchema = external_exports.object({
|
|
37411
|
-
compass_version_id:
|
|
37566
|
+
compass_version_id: uuidSchema21,
|
|
37412
37567
|
version: external_exports.number().int().nonnegative(),
|
|
37413
37568
|
status: compassStatusSchema,
|
|
37414
37569
|
doc: external_exports.unknown()
|
|
@@ -37419,7 +37574,7 @@ var compassGetCurrentOutputSchema = external_exports.object({
|
|
|
37419
37574
|
// Sources expose document id and kind only. The underlying storage_ref can
|
|
37420
37575
|
// be a local file path, so it is never surfaced (redaction rule).
|
|
37421
37576
|
sources: external_exports.array(external_exports.object({
|
|
37422
|
-
document_id:
|
|
37577
|
+
document_id: uuidSchema21,
|
|
37423
37578
|
kind: external_exports.string()
|
|
37424
37579
|
}).strict())
|
|
37425
37580
|
}).strict();
|
|
@@ -37434,22 +37589,22 @@ var compassGapSchema = external_exports.object({
|
|
|
37434
37589
|
answer: external_exports.string().nullable()
|
|
37435
37590
|
}).strict();
|
|
37436
37591
|
var compassListGapsOutputSchema = external_exports.object({
|
|
37437
|
-
compass_version_id:
|
|
37592
|
+
compass_version_id: uuidSchema21.nullable(),
|
|
37438
37593
|
unanswered: external_exports.array(compassGapSchema),
|
|
37439
37594
|
answered: external_exports.array(compassGapSchema)
|
|
37440
37595
|
}).strict();
|
|
37441
37596
|
var agentStatusInputSchema = external_exports.object({
|
|
37442
|
-
seat_id:
|
|
37597
|
+
seat_id: uuidSchema21
|
|
37443
37598
|
}).strict();
|
|
37444
37599
|
var agentStatusOutputSchema = external_exports.object({
|
|
37445
|
-
seat_id:
|
|
37600
|
+
seat_id: uuidSchema21,
|
|
37446
37601
|
// DER-786 (C7): `has_agent` is true whenever a setup agent exists for the seat
|
|
37447
37602
|
// — including a draft setup that has no occupancy yet — so it agrees with
|
|
37448
37603
|
// agent_setup.get. `lifecycle` is the shared cross-surface term derived from
|
|
37449
37604
|
// `status` (none | draft_setup | dry_run | live | …).
|
|
37450
37605
|
has_agent: external_exports.boolean(),
|
|
37451
37606
|
lifecycle: agentLifecycleSchema,
|
|
37452
|
-
agent_id:
|
|
37607
|
+
agent_id: uuidSchema21.nullable(),
|
|
37453
37608
|
kind: agentKindSchema2.nullable(),
|
|
37454
37609
|
display_name: external_exports.string().nullable(),
|
|
37455
37610
|
lane: agentLaneSchema3.nullable(),
|
|
@@ -37457,9 +37612,9 @@ var agentStatusOutputSchema = external_exports.object({
|
|
|
37457
37612
|
schedule_cron: external_exports.string().nullable(),
|
|
37458
37613
|
schedule_timezone: external_exports.string().min(1).max(100).nullable(),
|
|
37459
37614
|
live: external_exports.boolean(),
|
|
37460
|
-
charter_version_id:
|
|
37615
|
+
charter_version_id: uuidSchema21.nullable(),
|
|
37461
37616
|
steward_chain: external_exports.array(external_exports.object({
|
|
37462
|
-
seat_id:
|
|
37617
|
+
seat_id: uuidSchema21,
|
|
37463
37618
|
name: external_exports.string()
|
|
37464
37619
|
}).strict()),
|
|
37465
37620
|
steward_chain_resolves_to_human: external_exports.boolean(),
|
|
@@ -37500,7 +37655,7 @@ var fleetWorkEvidenceSchema = external_exports.object({
|
|
|
37500
37655
|
label: external_exports.string(),
|
|
37501
37656
|
detail: external_exports.string(),
|
|
37502
37657
|
href: external_exports.string().nullable(),
|
|
37503
|
-
run_id:
|
|
37658
|
+
run_id: uuidSchema21.nullable(),
|
|
37504
37659
|
linkable_run: external_exports.boolean(),
|
|
37505
37660
|
can_run_now: external_exports.boolean()
|
|
37506
37661
|
}).strict();
|
|
@@ -37514,7 +37669,7 @@ var fleetWorkProgressSchema = external_exports.object({
|
|
|
37514
37669
|
last_durable_activity_at: isoDateTime7.nullable()
|
|
37515
37670
|
}).strict();
|
|
37516
37671
|
var fleetOverviewRowSchema = external_exports.object({
|
|
37517
|
-
seat_id:
|
|
37672
|
+
seat_id: uuidSchema21,
|
|
37518
37673
|
seat_name: external_exports.string(),
|
|
37519
37674
|
seat_path: external_exports.string(),
|
|
37520
37675
|
// DER-2068 (N-2): the seat's immediate parent seat name (null for the root
|
|
@@ -37551,7 +37706,7 @@ var agentListFleetOutputSchema = external_exports.object({
|
|
|
37551
37706
|
agents: external_exports.array(fleetOverviewRowSchema)
|
|
37552
37707
|
}).strict();
|
|
37553
37708
|
var runErrorLogSchema = external_exports.object({
|
|
37554
|
-
error_log_id:
|
|
37709
|
+
error_log_id: uuidSchema21,
|
|
37555
37710
|
source: external_exports.enum(["run", "llm", "tool", "mcp", "runner", "integration", "job", "web"]),
|
|
37556
37711
|
severity: external_exports.enum(["warning", "error", "critical"]),
|
|
37557
37712
|
code: external_exports.string().nullable(),
|
|
@@ -37564,9 +37719,9 @@ var agentFleetDigestInputSchema = external_exports.object({
|
|
|
37564
37719
|
error_limit: external_exports.number().int().min(1).max(100).default(50)
|
|
37565
37720
|
}).strict();
|
|
37566
37721
|
var fleetDigestRunSchema = external_exports.object({
|
|
37567
|
-
run_id:
|
|
37568
|
-
seat_id:
|
|
37569
|
-
agent_id:
|
|
37722
|
+
run_id: uuidSchema21,
|
|
37723
|
+
seat_id: uuidSchema21,
|
|
37724
|
+
agent_id: uuidSchema21,
|
|
37570
37725
|
status: runStatusSchema,
|
|
37571
37726
|
lane: agentLaneSchema3,
|
|
37572
37727
|
model: external_exports.string(),
|
|
@@ -37576,22 +37731,22 @@ var fleetDigestRunSchema = external_exports.object({
|
|
|
37576
37731
|
error_logs: external_exports.array(runErrorLogSchema)
|
|
37577
37732
|
}).strict();
|
|
37578
37733
|
var fleetDigestErrorSchema = runErrorLogSchema.extend({
|
|
37579
|
-
seat_id:
|
|
37580
|
-
agent_id:
|
|
37581
|
-
run_id:
|
|
37734
|
+
seat_id: uuidSchema21.nullable(),
|
|
37735
|
+
agent_id: uuidSchema21.nullable(),
|
|
37736
|
+
run_id: uuidSchema21.nullable(),
|
|
37582
37737
|
disposition: external_exports.enum(["active", "acknowledged", "resolved", "superseded"])
|
|
37583
37738
|
}).strict();
|
|
37584
37739
|
var fleetDigestNotificationErrorSchema = external_exports.object({
|
|
37585
|
-
notification_id:
|
|
37740
|
+
notification_id: uuidSchema21,
|
|
37586
37741
|
kind: external_exports.string(),
|
|
37587
37742
|
channel: external_exports.string(),
|
|
37588
37743
|
status: external_exports.string(),
|
|
37589
37744
|
provider: external_exports.string(),
|
|
37590
37745
|
error_message: external_exports.string().nullable(),
|
|
37591
|
-
error_log_id:
|
|
37746
|
+
error_log_id: uuidSchema21.nullable(),
|
|
37592
37747
|
source: external_exports.enum(["run", "llm", "tool", "mcp", "runner", "integration", "job", "web"]).nullable(),
|
|
37593
|
-
seat_id:
|
|
37594
|
-
run_id:
|
|
37748
|
+
seat_id: uuidSchema21.nullable(),
|
|
37749
|
+
run_id: uuidSchema21.nullable(),
|
|
37595
37750
|
created_at: isoDateTime7
|
|
37596
37751
|
}).strict();
|
|
37597
37752
|
var fleetDigestAgentSchema = fleetOverviewRowSchema.extend({
|
|
@@ -37640,21 +37795,21 @@ var seatTrustSummarySchema = external_exports.object({
|
|
|
37640
37795
|
last_activity_at: isoDateTime7.nullable()
|
|
37641
37796
|
}).strict();
|
|
37642
37797
|
var agentListRunsInputSchema = external_exports.object({
|
|
37643
|
-
seat_id:
|
|
37798
|
+
seat_id: uuidSchema21,
|
|
37644
37799
|
// Conservative, bounded page size; the timeline is a recent-history view.
|
|
37645
37800
|
limit: external_exports.number().int().min(1).max(200).default(50)
|
|
37646
37801
|
}).strict();
|
|
37647
37802
|
var agentGetRunInputSchema = external_exports.object({
|
|
37648
|
-
seat_id:
|
|
37649
|
-
run_id:
|
|
37803
|
+
seat_id: uuidSchema21,
|
|
37804
|
+
run_id: uuidSchema21,
|
|
37650
37805
|
// DER-1661: opt in to the persisted session transcript (`--transcript`). Off by
|
|
37651
37806
|
// default so the diagnostic read stays lean; the (potentially large) transcript body
|
|
37652
37807
|
// loads only when asked.
|
|
37653
37808
|
transcript: external_exports.boolean().default(false)
|
|
37654
37809
|
}).strict();
|
|
37655
37810
|
var seatRunSchema = external_exports.object({
|
|
37656
|
-
run_id:
|
|
37657
|
-
agent_id:
|
|
37811
|
+
run_id: uuidSchema21,
|
|
37812
|
+
agent_id: uuidSchema21,
|
|
37658
37813
|
agent_display_name: external_exports.string().nullable(),
|
|
37659
37814
|
status: runStatusSchema,
|
|
37660
37815
|
lane: agentLaneSchema3,
|
|
@@ -37671,8 +37826,8 @@ var seatRunErrorLogSchema = runErrorLogSchema.extend({
|
|
|
37671
37826
|
error_class: external_exports.string().nullable()
|
|
37672
37827
|
}).strict();
|
|
37673
37828
|
var seatRunDetailSchema = seatRunSchema.extend({
|
|
37674
|
-
task_id:
|
|
37675
|
-
work_order_id:
|
|
37829
|
+
task_id: uuidSchema21.nullable(),
|
|
37830
|
+
work_order_id: uuidSchema21.nullable(),
|
|
37676
37831
|
transcript_ref: external_exports.string(),
|
|
37677
37832
|
// DER-1913: null = usage UNKNOWN — a Codex / read-status / timeout / spawn-error
|
|
37678
37833
|
// runner turn reports no model-usage envelope, so the run records no token count.
|
|
@@ -37682,8 +37837,8 @@ var seatRunDetailSchema = seatRunSchema.extend({
|
|
|
37682
37837
|
outcome: external_exports.record(external_exports.string(), external_exports.unknown()),
|
|
37683
37838
|
error_logs: external_exports.array(seatRunErrorLogSchema),
|
|
37684
37839
|
skill_activations: external_exports.array(external_exports.object({
|
|
37685
|
-
skill_activation_id:
|
|
37686
|
-
skill_version_id:
|
|
37840
|
+
skill_activation_id: uuidSchema21,
|
|
37841
|
+
skill_version_id: uuidSchema21,
|
|
37687
37842
|
slug: external_exports.string().min(1),
|
|
37688
37843
|
name: external_exports.string().min(1),
|
|
37689
37844
|
version: external_exports.number().int().positive(),
|
|
@@ -37700,23 +37855,23 @@ var seatRunDetailSchema = seatRunSchema.extend({
|
|
|
37700
37855
|
transcript: sessionTranscriptReadResultSchema.nullable().optional()
|
|
37701
37856
|
}).strict();
|
|
37702
37857
|
var agentListRunsOutputSchema = external_exports.object({
|
|
37703
|
-
seat_id:
|
|
37858
|
+
seat_id: uuidSchema21,
|
|
37704
37859
|
summary: seatTrustSummarySchema,
|
|
37705
37860
|
runs: external_exports.array(seatRunSchema)
|
|
37706
37861
|
}).strict();
|
|
37707
37862
|
var agentGetRunOutputSchema = external_exports.object({
|
|
37708
|
-
seat_id:
|
|
37863
|
+
seat_id: uuidSchema21,
|
|
37709
37864
|
run: seatRunDetailSchema
|
|
37710
37865
|
}).strict();
|
|
37711
37866
|
var agentListToolCallsInputSchema = external_exports.object({
|
|
37712
|
-
seat_id:
|
|
37867
|
+
seat_id: uuidSchema21,
|
|
37713
37868
|
limit: external_exports.number().int().min(1).max(200).default(50),
|
|
37714
37869
|
// When true, return only HELD (non-allowed) tool calls — the governance view.
|
|
37715
37870
|
held_only: external_exports.boolean().default(false)
|
|
37716
37871
|
}).strict();
|
|
37717
37872
|
var seatToolCallSchema = external_exports.object({
|
|
37718
|
-
tool_call_id:
|
|
37719
|
-
run_id:
|
|
37873
|
+
tool_call_id: uuidSchema21,
|
|
37874
|
+
run_id: uuidSchema21.nullable(),
|
|
37720
37875
|
tool_name: external_exports.string(),
|
|
37721
37876
|
guard_result: guardResultSchema,
|
|
37722
37877
|
manifest_clause: external_exports.string().nullable(),
|
|
@@ -37725,13 +37880,13 @@ var seatToolCallSchema = external_exports.object({
|
|
|
37725
37880
|
finished_at: isoDateTime7.nullable()
|
|
37726
37881
|
}).strict();
|
|
37727
37882
|
var agentListToolCallsOutputSchema = external_exports.object({
|
|
37728
|
-
seat_id:
|
|
37883
|
+
seat_id: uuidSchema21,
|
|
37729
37884
|
summary: seatTrustSummarySchema,
|
|
37730
37885
|
tool_calls: external_exports.array(seatToolCallSchema)
|
|
37731
37886
|
}).strict();
|
|
37732
37887
|
var agentWatchRunInputSchema = external_exports.object({
|
|
37733
|
-
seat_id:
|
|
37734
|
-
run_id:
|
|
37888
|
+
seat_id: uuidSchema21,
|
|
37889
|
+
run_id: uuidSchema21
|
|
37735
37890
|
}).strict();
|
|
37736
37891
|
var runWatchCurrentStateSchema = external_exports.object({
|
|
37737
37892
|
state: workProgressStateSchema,
|
|
@@ -37752,7 +37907,7 @@ var runWatchHeartbeatSchema = external_exports.object({
|
|
|
37752
37907
|
reasons: external_exports.array(external_exports.string())
|
|
37753
37908
|
}).strict();
|
|
37754
37909
|
var agentWatchRunOutputSchema = external_exports.object({
|
|
37755
|
-
seat_id:
|
|
37910
|
+
seat_id: uuidSchema21,
|
|
37756
37911
|
run: seatRunSchema,
|
|
37757
37912
|
// the lean run row (status/lane/model/counts/timestamps)
|
|
37758
37913
|
is_live: external_exports.boolean(),
|
|
@@ -37776,16 +37931,16 @@ var deliverableLinkSchema = external_exports.object({
|
|
|
37776
37931
|
kind: external_exports.enum(["internal", "linear", "github", "external"])
|
|
37777
37932
|
}).strict();
|
|
37778
37933
|
var deliverableIdSchema = external_exports.union([
|
|
37779
|
-
|
|
37934
|
+
uuidSchema21,
|
|
37780
37935
|
external_exports.string().regex(/^run:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i)
|
|
37781
37936
|
]);
|
|
37782
37937
|
var deliverableRowSchema = external_exports.object({
|
|
37783
37938
|
id: deliverableIdSchema,
|
|
37784
|
-
seat_id:
|
|
37785
|
-
agent_id:
|
|
37786
|
-
run_id:
|
|
37787
|
-
task_id:
|
|
37788
|
-
work_order_id:
|
|
37939
|
+
seat_id: uuidSchema21,
|
|
37940
|
+
agent_id: uuidSchema21.nullable(),
|
|
37941
|
+
run_id: uuidSchema21.nullable(),
|
|
37942
|
+
task_id: uuidSchema21.nullable(),
|
|
37943
|
+
work_order_id: uuidSchema21.nullable(),
|
|
37789
37944
|
kind: deliverableKindSchema,
|
|
37790
37945
|
title: external_exports.string(),
|
|
37791
37946
|
summary: external_exports.string().nullable(),
|
|
@@ -37805,13 +37960,13 @@ var deliverableRowSchema = external_exports.object({
|
|
|
37805
37960
|
receipt_presence: receiptPresenceSchema
|
|
37806
37961
|
}).strict();
|
|
37807
37962
|
var deliverableListInputSchema = external_exports.object({
|
|
37808
|
-
seat_id:
|
|
37963
|
+
seat_id: uuidSchema21
|
|
37809
37964
|
}).strict();
|
|
37810
37965
|
var deliverableListOutputSchema = external_exports.object({
|
|
37811
37966
|
deliverables: external_exports.array(deliverableRowSchema)
|
|
37812
37967
|
}).strict();
|
|
37813
37968
|
var deliverableGetInputSchema = external_exports.object({
|
|
37814
|
-
seat_id:
|
|
37969
|
+
seat_id: uuidSchema21,
|
|
37815
37970
|
deliverable_id: deliverableIdSchema
|
|
37816
37971
|
}).strict();
|
|
37817
37972
|
var deliverableGetOutputSchema = external_exports.object({
|
|
@@ -37819,12 +37974,12 @@ var deliverableGetOutputSchema = external_exports.object({
|
|
|
37819
37974
|
}).strict();
|
|
37820
37975
|
var mcpTokenListInputSchema = external_exports.object({
|
|
37821
37976
|
include_revoked: external_exports.boolean().default(false),
|
|
37822
|
-
seat_id:
|
|
37977
|
+
seat_id: uuidSchema21.optional()
|
|
37823
37978
|
}).strict();
|
|
37824
37979
|
var mcpTokenMetadataSchema = external_exports.object({
|
|
37825
|
-
token_id:
|
|
37980
|
+
token_id: uuidSchema21,
|
|
37826
37981
|
scope: mcpScopeSchema,
|
|
37827
|
-
seat_id:
|
|
37982
|
+
seat_id: uuidSchema21.nullable(),
|
|
37828
37983
|
created_at: isoDateTime7,
|
|
37829
37984
|
last_seen_at: isoDateTime7.nullable(),
|
|
37830
37985
|
// DER-830: expires_at is now always present (the column is NOT NULL).
|
|
@@ -37838,29 +37993,29 @@ var mcpTokenListOutputSchema = external_exports.object({
|
|
|
37838
37993
|
tokens: external_exports.array(mcpTokenMetadataSchema)
|
|
37839
37994
|
}).strict();
|
|
37840
37995
|
var errorLogListInputSchema = external_exports.object({
|
|
37841
|
-
seat_id:
|
|
37996
|
+
seat_id: uuidSchema21.optional(),
|
|
37842
37997
|
source: external_exports.enum(["run", "llm", "tool", "mcp", "runner", "integration", "job", "web"]).optional(),
|
|
37843
37998
|
severity: external_exports.enum(["warning", "error", "critical"]).optional(),
|
|
37844
37999
|
resolved: external_exports.enum(["active", "acknowledged", "resolved", "all"]).default("active"),
|
|
37845
38000
|
limit: external_exports.number().int().min(1).max(200).default(50)
|
|
37846
38001
|
}).strict();
|
|
37847
38002
|
var errorLogListItemSchema = external_exports.object({
|
|
37848
|
-
error_log_id:
|
|
38003
|
+
error_log_id: uuidSchema21,
|
|
37849
38004
|
source: external_exports.enum(["run", "llm", "tool", "mcp", "runner", "integration", "job", "web"]),
|
|
37850
38005
|
severity: external_exports.enum(["warning", "error", "critical"]),
|
|
37851
38006
|
code: external_exports.string().nullable(),
|
|
37852
38007
|
message: external_exports.string(),
|
|
37853
|
-
seat_id:
|
|
37854
|
-
agent_id:
|
|
37855
|
-
run_id:
|
|
38008
|
+
seat_id: uuidSchema21.nullable(),
|
|
38009
|
+
agent_id: uuidSchema21.nullable(),
|
|
38010
|
+
run_id: uuidSchema21.nullable(),
|
|
37856
38011
|
disposition: external_exports.enum(["active", "acknowledged", "resolved", "superseded"]),
|
|
37857
38012
|
resolved_at: isoDateTime7.nullable(),
|
|
37858
|
-
resolved_by:
|
|
38013
|
+
resolved_by: uuidSchema21.nullable(),
|
|
37859
38014
|
resolution_reason: external_exports.string().nullable(),
|
|
37860
|
-
linked_task_id:
|
|
37861
|
-
linked_issue_id:
|
|
38015
|
+
linked_task_id: uuidSchema21.nullable(),
|
|
38016
|
+
linked_issue_id: uuidSchema21.nullable(),
|
|
37862
38017
|
linked_pr_ref: external_exports.string().nullable(),
|
|
37863
|
-
superseded_by_id:
|
|
38018
|
+
superseded_by_id: uuidSchema21.nullable(),
|
|
37864
38019
|
created_at: isoDateTime7
|
|
37865
38020
|
}).strict();
|
|
37866
38021
|
var errorLogListOutputSchema = external_exports.object({
|
|
@@ -37868,29 +38023,29 @@ var errorLogListOutputSchema = external_exports.object({
|
|
|
37868
38023
|
total: external_exports.number().int().nonnegative()
|
|
37869
38024
|
}).strict();
|
|
37870
38025
|
var errorLogResolveInputSchema = external_exports.object({
|
|
37871
|
-
error_log_id:
|
|
38026
|
+
error_log_id: uuidSchema21,
|
|
37872
38027
|
reason: external_exports.string().trim().min(1),
|
|
37873
38028
|
disposition: external_exports.enum(["acknowledged", "resolved"]).default("acknowledged"),
|
|
37874
|
-
linked_task_id:
|
|
37875
|
-
linked_issue_id:
|
|
38029
|
+
linked_task_id: uuidSchema21.optional(),
|
|
38030
|
+
linked_issue_id: uuidSchema21.optional(),
|
|
37876
38031
|
linked_pr_ref: external_exports.string().trim().min(1).optional()
|
|
37877
38032
|
}).strict();
|
|
37878
38033
|
var errorLogResolveOutputSchema = external_exports.object({
|
|
37879
|
-
error_log_id:
|
|
38034
|
+
error_log_id: uuidSchema21,
|
|
37880
38035
|
disposition: external_exports.enum(["acknowledged", "resolved"]),
|
|
37881
38036
|
resolved_at: isoDateTime7
|
|
37882
38037
|
}).strict();
|
|
37883
38038
|
var errorLogSupersedeInputSchema = external_exports.object({
|
|
37884
|
-
error_log_id:
|
|
37885
|
-
new_error_log_id:
|
|
38039
|
+
error_log_id: uuidSchema21,
|
|
38040
|
+
new_error_log_id: uuidSchema21,
|
|
37886
38041
|
reason: external_exports.string().trim().min(1),
|
|
37887
|
-
linked_task_id:
|
|
37888
|
-
linked_issue_id:
|
|
38042
|
+
linked_task_id: uuidSchema21.optional(),
|
|
38043
|
+
linked_issue_id: uuidSchema21.optional(),
|
|
37889
38044
|
linked_pr_ref: external_exports.string().trim().min(1).optional()
|
|
37890
38045
|
}).strict();
|
|
37891
38046
|
var errorLogSupersedeOutputSchema = external_exports.object({
|
|
37892
|
-
error_log_id:
|
|
37893
|
-
superseded_by_id:
|
|
38047
|
+
error_log_id: uuidSchema21,
|
|
38048
|
+
superseded_by_id: uuidSchema21,
|
|
37894
38049
|
disposition: external_exports.literal("superseded"),
|
|
37895
38050
|
resolved_at: isoDateTime7
|
|
37896
38051
|
}).strict();
|
|
@@ -37901,17 +38056,17 @@ var staleCandidatesInputSchema = external_exports.object({
|
|
|
37901
38056
|
limit: external_exports.number().int().min(1).max(200).default(50)
|
|
37902
38057
|
}).strict();
|
|
37903
38058
|
var errorLogStaleCandidateSchema = external_exports.object({
|
|
37904
|
-
error_log_id:
|
|
38059
|
+
error_log_id: uuidSchema21,
|
|
37905
38060
|
source: external_exports.enum(["run", "llm", "tool", "mcp", "runner", "integration", "job", "web"]),
|
|
37906
38061
|
severity: external_exports.enum(["warning", "error", "critical"]),
|
|
37907
38062
|
code: external_exports.string().nullable(),
|
|
37908
38063
|
message: external_exports.string(),
|
|
37909
|
-
seat_id:
|
|
38064
|
+
seat_id: uuidSchema21.nullable(),
|
|
37910
38065
|
occurrence_count: external_exports.number().int(),
|
|
37911
38066
|
last_seen_at: isoDateTime7,
|
|
37912
38067
|
created_at: isoDateTime7,
|
|
37913
38068
|
days_stale: external_exports.number().int(),
|
|
37914
|
-
linked_issue_id:
|
|
38069
|
+
linked_issue_id: uuidSchema21.nullable(),
|
|
37915
38070
|
linked_issue_resolved: external_exports.boolean(),
|
|
37916
38071
|
confidence: staleCandidateConfidenceSchema,
|
|
37917
38072
|
evidence: staleCandidateEvidenceSchema
|
|
@@ -37921,8 +38076,8 @@ var errorLogStaleCandidatesOutputSchema = external_exports.object({
|
|
|
37921
38076
|
total: external_exports.number().int().nonnegative()
|
|
37922
38077
|
}).strict();
|
|
37923
38078
|
var escalationStaleCandidateSchema = external_exports.object({
|
|
37924
|
-
escalation_id:
|
|
37925
|
-
seat_id:
|
|
38079
|
+
escalation_id: uuidSchema21,
|
|
38080
|
+
seat_id: uuidSchema21,
|
|
37926
38081
|
seat_name: external_exports.string(),
|
|
37927
38082
|
reason: external_exports.string(),
|
|
37928
38083
|
status: external_exports.literal("open"),
|
|
@@ -37938,14 +38093,14 @@ var escalationStaleCandidatesOutputSchema = external_exports.object({
|
|
|
37938
38093
|
total: external_exports.number().int().nonnegative()
|
|
37939
38094
|
}).strict();
|
|
37940
38095
|
var frictionStaleCandidateSchema = external_exports.object({
|
|
37941
|
-
issue_id:
|
|
38096
|
+
issue_id: uuidSchema21,
|
|
37942
38097
|
summary: external_exports.string(),
|
|
37943
38098
|
severity: external_exports.enum(["low", "med", "high", "critical"]),
|
|
37944
38099
|
status: external_exports.enum(["open", "diagnosing"]),
|
|
37945
38100
|
created_at: isoDateTime7,
|
|
37946
38101
|
updated_at: isoDateTime7,
|
|
37947
38102
|
days_stale: external_exports.number().int(),
|
|
37948
|
-
action_task_id:
|
|
38103
|
+
action_task_id: uuidSchema21.nullable(),
|
|
37949
38104
|
action_task_status: external_exports.string().nullable(),
|
|
37950
38105
|
action_task_done: external_exports.boolean(),
|
|
37951
38106
|
confidence: staleCandidateConfidenceSchema,
|
|
@@ -37956,20 +38111,20 @@ var frictionStaleCandidatesOutputSchema = external_exports.object({
|
|
|
37956
38111
|
total: external_exports.number().int().nonnegative()
|
|
37957
38112
|
}).strict();
|
|
37958
38113
|
var errorLogBulkResolveInputSchema = external_exports.object({
|
|
37959
|
-
error_log_ids: external_exports.array(
|
|
38114
|
+
error_log_ids: external_exports.array(uuidSchema21).min(1).max(200),
|
|
37960
38115
|
reason: external_exports.string().trim().min(1),
|
|
37961
38116
|
disposition: external_exports.enum(["acknowledged", "resolved"]).default("resolved")
|
|
37962
38117
|
}).strict();
|
|
37963
38118
|
var errorLogBulkResolveSkippedSchema = external_exports.object({
|
|
37964
|
-
error_log_id:
|
|
38119
|
+
error_log_id: uuidSchema21,
|
|
37965
38120
|
reason: external_exports.string()
|
|
37966
38121
|
}).strict();
|
|
37967
38122
|
var errorLogBulkResolveFailedSchema = external_exports.object({
|
|
37968
|
-
error_log_id:
|
|
38123
|
+
error_log_id: uuidSchema21,
|
|
37969
38124
|
reason: external_exports.string()
|
|
37970
38125
|
}).strict();
|
|
37971
38126
|
var errorLogBulkResolveOutputSchema = external_exports.object({
|
|
37972
|
-
resolved: external_exports.array(
|
|
38127
|
+
resolved: external_exports.array(uuidSchema21),
|
|
37973
38128
|
skipped: external_exports.array(errorLogBulkResolveSkippedSchema),
|
|
37974
38129
|
failed: external_exports.array(errorLogBulkResolveFailedSchema),
|
|
37975
38130
|
resolved_count: external_exports.number().int().nonnegative(),
|
|
@@ -37978,19 +38133,19 @@ var errorLogBulkResolveOutputSchema = external_exports.object({
|
|
|
37978
38133
|
total: external_exports.number().int().nonnegative()
|
|
37979
38134
|
}).strict();
|
|
37980
38135
|
var escalationBulkResolveInputSchema = external_exports.object({
|
|
37981
|
-
escalation_ids: external_exports.array(
|
|
38136
|
+
escalation_ids: external_exports.array(uuidSchema21).min(1).max(200),
|
|
37982
38137
|
reason: external_exports.string().trim().min(1)
|
|
37983
38138
|
}).strict();
|
|
37984
38139
|
var escalationBulkResolveSkippedSchema = external_exports.object({
|
|
37985
|
-
escalation_id:
|
|
38140
|
+
escalation_id: uuidSchema21,
|
|
37986
38141
|
reason: external_exports.string()
|
|
37987
38142
|
}).strict();
|
|
37988
38143
|
var escalationBulkResolveFailedSchema = external_exports.object({
|
|
37989
|
-
escalation_id:
|
|
38144
|
+
escalation_id: uuidSchema21,
|
|
37990
38145
|
reason: external_exports.string()
|
|
37991
38146
|
}).strict();
|
|
37992
38147
|
var escalationBulkResolveOutputSchema = external_exports.object({
|
|
37993
|
-
resolved: external_exports.array(
|
|
38148
|
+
resolved: external_exports.array(uuidSchema21),
|
|
37994
38149
|
skipped: external_exports.array(escalationBulkResolveSkippedSchema),
|
|
37995
38150
|
failed: external_exports.array(escalationBulkResolveFailedSchema),
|
|
37996
38151
|
resolved_count: external_exports.number().int().nonnegative(),
|
|
@@ -37999,19 +38154,19 @@ var escalationBulkResolveOutputSchema = external_exports.object({
|
|
|
37999
38154
|
total: external_exports.number().int().nonnegative()
|
|
38000
38155
|
}).strict();
|
|
38001
38156
|
var frictionBulkResolveInputSchema = external_exports.object({
|
|
38002
|
-
issue_ids: external_exports.array(
|
|
38157
|
+
issue_ids: external_exports.array(uuidSchema21).min(1).max(200),
|
|
38003
38158
|
root_cause: external_exports.string().trim().min(1)
|
|
38004
38159
|
}).strict();
|
|
38005
38160
|
var frictionBulkResolveSkippedSchema = external_exports.object({
|
|
38006
|
-
issue_id:
|
|
38161
|
+
issue_id: uuidSchema21,
|
|
38007
38162
|
reason: external_exports.string()
|
|
38008
38163
|
}).strict();
|
|
38009
38164
|
var frictionBulkResolveFailedSchema = external_exports.object({
|
|
38010
|
-
issue_id:
|
|
38165
|
+
issue_id: uuidSchema21,
|
|
38011
38166
|
reason: external_exports.string()
|
|
38012
38167
|
}).strict();
|
|
38013
38168
|
var frictionBulkResolveOutputSchema = external_exports.object({
|
|
38014
|
-
resolved: external_exports.array(
|
|
38169
|
+
resolved: external_exports.array(uuidSchema21),
|
|
38015
38170
|
skipped: external_exports.array(frictionBulkResolveSkippedSchema),
|
|
38016
38171
|
failed: external_exports.array(frictionBulkResolveFailedSchema),
|
|
38017
38172
|
resolved_count: external_exports.number().int().nonnegative(),
|
|
@@ -38021,10 +38176,10 @@ var frictionBulkResolveOutputSchema = external_exports.object({
|
|
|
38021
38176
|
}).strict();
|
|
38022
38177
|
var runHeartbeatStateSchema = external_exports.enum(["working", "quiet_healthy", "recovered", "stalled", "unavailable"]);
|
|
38023
38178
|
var agentRunHeartbeatsInputSchema = external_exports.object({
|
|
38024
|
-
seat_ids: external_exports.array(
|
|
38179
|
+
seat_ids: external_exports.array(uuidSchema21).min(1).max(200).optional()
|
|
38025
38180
|
}).strict();
|
|
38026
38181
|
var runHeartbeatSeatRollupSchema = external_exports.object({
|
|
38027
|
-
seat_id:
|
|
38182
|
+
seat_id: uuidSchema21,
|
|
38028
38183
|
state: runHeartbeatStateSchema,
|
|
38029
38184
|
stalled: external_exports.boolean(),
|
|
38030
38185
|
run_count: external_exports.number().int().nonnegative(),
|
|
@@ -38144,13 +38299,13 @@ var runSummaryOutputSchema = external_exports.object({
|
|
|
38144
38299
|
});
|
|
38145
38300
|
|
|
38146
38301
|
// ../../packages/protocol/src/system-health.ts
|
|
38147
|
-
var
|
|
38302
|
+
var uuidSchema22 = external_exports.string().uuid();
|
|
38148
38303
|
var isoDateTime9 = external_exports.string().datetime({ offset: true });
|
|
38149
38304
|
var systemHealthCallerKindSchema = external_exports.enum(["tenant_admin", "member", "seat_token"]);
|
|
38150
38305
|
var systemHealthCallerSchema = external_exports.object({
|
|
38151
38306
|
kind: systemHealthCallerKindSchema,
|
|
38152
|
-
seat_id:
|
|
38153
|
-
seat_ids: external_exports.array(
|
|
38307
|
+
seat_id: uuidSchema22.optional(),
|
|
38308
|
+
seat_ids: external_exports.array(uuidSchema22).min(1).optional()
|
|
38154
38309
|
}).strict();
|
|
38155
38310
|
var systemHealthVerdictSchema = external_exports.enum(["healthy", "degraded", "blocked"]);
|
|
38156
38311
|
var systemHealthSeveritySchema = external_exports.enum(["info", "warning", "critical"]);
|
|
@@ -38188,18 +38343,18 @@ var systemHealthFindingSchema = external_exports.object({
|
|
|
38188
38343
|
summary: external_exports.string().min(1),
|
|
38189
38344
|
detail: external_exports.string().min(1),
|
|
38190
38345
|
remediation: systemHealthActionSchema,
|
|
38191
|
-
seat_id:
|
|
38192
|
-
goal_id:
|
|
38193
|
-
run_id:
|
|
38194
|
-
issue_id:
|
|
38195
|
-
task_id:
|
|
38196
|
-
error_log_id:
|
|
38346
|
+
seat_id: uuidSchema22.nullable(),
|
|
38347
|
+
goal_id: uuidSchema22.nullable(),
|
|
38348
|
+
run_id: uuidSchema22.nullable(),
|
|
38349
|
+
issue_id: uuidSchema22.nullable(),
|
|
38350
|
+
task_id: uuidSchema22.nullable(),
|
|
38351
|
+
error_log_id: uuidSchema22.nullable()
|
|
38197
38352
|
}).strict();
|
|
38198
38353
|
var systemHealthScopeSchema = external_exports.object({
|
|
38199
38354
|
mode: systemHealthScopeModeSchema,
|
|
38200
|
-
root_seat_ids: external_exports.array(
|
|
38201
|
-
included_seat_ids: external_exports.array(
|
|
38202
|
-
requested_seat_id:
|
|
38355
|
+
root_seat_ids: external_exports.array(uuidSchema22),
|
|
38356
|
+
included_seat_ids: external_exports.array(uuidSchema22),
|
|
38357
|
+
requested_seat_id: uuidSchema22.nullable(),
|
|
38203
38358
|
total_seat_count: external_exports.number().int().nonnegative()
|
|
38204
38359
|
}).strict();
|
|
38205
38360
|
var systemHealthFleetSectionSchema = external_exports.object({
|
|
@@ -38256,7 +38411,7 @@ var systemHealthSectionsSchema = external_exports.object({
|
|
|
38256
38411
|
sync: systemHealthSyncSectionSchema
|
|
38257
38412
|
}).strict();
|
|
38258
38413
|
var systemHealthInputSchema = external_exports.object({
|
|
38259
|
-
seat_id:
|
|
38414
|
+
seat_id: uuidSchema22.optional()
|
|
38260
38415
|
}).strict();
|
|
38261
38416
|
var systemHealthCheckInputSchema = systemHealthInputSchema.extend({
|
|
38262
38417
|
caller: systemHealthCallerSchema
|
|
@@ -38283,10 +38438,10 @@ var baserowFilteredCountInputSchema = external_exports.object({
|
|
|
38283
38438
|
}).strict();
|
|
38284
38439
|
|
|
38285
38440
|
// ../../packages/protocol/src/signal-report.ts
|
|
38286
|
-
var
|
|
38441
|
+
var uuidSchema23 = external_exports.string().uuid();
|
|
38287
38442
|
var dateOnlySchema3 = external_exports.string().regex(/^\d{4}-\d{2}-\d{2}$/, "expected YYYY-MM-DD");
|
|
38288
38443
|
var signalReportInputSchema = external_exports.object({
|
|
38289
|
-
measurable_id:
|
|
38444
|
+
measurable_id: uuidSchema23,
|
|
38290
38445
|
value: external_exports.number().finite(),
|
|
38291
38446
|
// Optional; defaults to the measurable's current period (resolved in the
|
|
38292
38447
|
// command against the measurable's own cadence via the canonical bounds).
|
|
@@ -38297,8 +38452,8 @@ var signalReportInputSchema = external_exports.object({
|
|
|
38297
38452
|
confidence: external_exports.enum(["low", "medium", "high"]).optional()
|
|
38298
38453
|
}).strict();
|
|
38299
38454
|
var signalReportOutputSchema = external_exports.object({
|
|
38300
|
-
reading_id:
|
|
38301
|
-
measurable_id:
|
|
38455
|
+
reading_id: uuidSchema23,
|
|
38456
|
+
measurable_id: uuidSchema23,
|
|
38302
38457
|
// Always false: an agent-sourced reading is a draft until a human confirms it.
|
|
38303
38458
|
confirmed: external_exports.literal(false)
|
|
38304
38459
|
}).strict();
|
|
@@ -38329,12 +38484,12 @@ var signalReadingProposalSchema = external_exports.object({
|
|
|
38329
38484
|
});
|
|
38330
38485
|
|
|
38331
38486
|
// ../../packages/protocol/src/signal-draft-first-readings.ts
|
|
38332
|
-
var
|
|
38487
|
+
var uuidSchema24 = external_exports.string().uuid();
|
|
38333
38488
|
var signalDraftFirstReadingsInputSchema = external_exports.object({
|
|
38334
|
-
measurable_id:
|
|
38489
|
+
measurable_id: uuidSchema24
|
|
38335
38490
|
}).strict();
|
|
38336
38491
|
var signalDraftFirstReadingsOutputSchema = external_exports.object({
|
|
38337
|
-
measurable_id:
|
|
38492
|
+
measurable_id: uuidSchema24,
|
|
38338
38493
|
// The live pull outcome, surfaced verbatim so the UI can explain a no-datapoint
|
|
38339
38494
|
// result honestly ("source polled, nothing came back") rather than silently.
|
|
38340
38495
|
outcome: external_exports.enum(["ok", "blocked", "error"]),
|
|
@@ -38342,7 +38497,7 @@ var signalDraftFirstReadingsOutputSchema = external_exports.object({
|
|
|
38342
38497
|
// Never fabricates back-dated history the source cannot actually produce.
|
|
38343
38498
|
drafted: external_exports.number().int().min(0).max(1),
|
|
38344
38499
|
// Present only when drafted === 1.
|
|
38345
|
-
reading_id:
|
|
38500
|
+
reading_id: uuidSchema24.optional(),
|
|
38346
38501
|
value: external_exports.number().finite().optional(),
|
|
38347
38502
|
period_start: external_exports.string().regex(/^\d{4}-\d{2}-\d{2}$/, "expected YYYY-MM-DD").optional(),
|
|
38348
38503
|
// Present only when drafted === 0: a short, non-secret machine reason
|
|
@@ -40050,7 +40205,7 @@ var softwareFactoryBudgetExhaustedEventSchema = external_exports.object({
|
|
|
40050
40205
|
}).strict();
|
|
40051
40206
|
|
|
40052
40207
|
// ../../packages/protocol/src/sync-brief.ts
|
|
40053
|
-
var
|
|
40208
|
+
var uuidSchema25 = external_exports.string().uuid();
|
|
40054
40209
|
var dateSchema = external_exports.string().regex(/^\d{4}-\d{2}-\d{2}$/);
|
|
40055
40210
|
var syncBriefGapSchema = external_exports.object({
|
|
40056
40211
|
section: external_exports.enum(["exceptions", "goal_deltas", "task_review", "friction", "agent_activity"]),
|
|
@@ -40063,8 +40218,8 @@ var sectionSchema = (itemSchema) => external_exports.object({
|
|
|
40063
40218
|
flagged_gaps: external_exports.array(syncBriefGapSchema)
|
|
40064
40219
|
}).strict();
|
|
40065
40220
|
var syncBriefExceptionSchema = external_exports.object({
|
|
40066
|
-
measurable_id:
|
|
40067
|
-
seat_id:
|
|
40221
|
+
measurable_id: uuidSchema25,
|
|
40222
|
+
seat_id: uuidSchema25,
|
|
40068
40223
|
seat_name: external_exports.string().min(1),
|
|
40069
40224
|
name: external_exports.string().min(1),
|
|
40070
40225
|
state: external_exports.enum(["risk", "crit", "pending"]),
|
|
@@ -40075,8 +40230,8 @@ var syncBriefExceptionSchema = external_exports.object({
|
|
|
40075
40230
|
freshness: external_exports.enum(["fresh", "due", "stale", "awaiting_first_reading", "not_expected"]).optional()
|
|
40076
40231
|
}).strict();
|
|
40077
40232
|
var syncBriefGoalDeltaSchema = external_exports.object({
|
|
40078
|
-
goal_id:
|
|
40079
|
-
seat_id:
|
|
40233
|
+
goal_id: uuidSchema25,
|
|
40234
|
+
seat_id: uuidSchema25.nullable(),
|
|
40080
40235
|
seat_name: external_exports.string().nullable(),
|
|
40081
40236
|
title: external_exports.string().min(1),
|
|
40082
40237
|
status: external_exports.enum(["on", "off", "done", "dropped"]),
|
|
@@ -40103,22 +40258,22 @@ var syncBriefTaskReviewSchema = external_exports.object({
|
|
|
40103
40258
|
previous_done_rate: external_exports.number().min(0).max(1),
|
|
40104
40259
|
delta: external_exports.number().min(-1).max(1),
|
|
40105
40260
|
stalled: external_exports.array(external_exports.object({
|
|
40106
|
-
task_id:
|
|
40107
|
-
owner_seat_id:
|
|
40261
|
+
task_id: uuidSchema25,
|
|
40262
|
+
owner_seat_id: uuidSchema25,
|
|
40108
40263
|
owner_seat_name: external_exports.string().min(1),
|
|
40109
40264
|
title: external_exports.string().min(1),
|
|
40110
40265
|
due_on: dateSchema,
|
|
40111
40266
|
stalled_at: external_exports.string().nullable()
|
|
40112
40267
|
}).strict()),
|
|
40113
40268
|
overdue_by_owner: external_exports.array(external_exports.object({
|
|
40114
|
-
owner_seat_id:
|
|
40269
|
+
owner_seat_id: uuidSchema25,
|
|
40115
40270
|
owner_seat_name: external_exports.string().min(1),
|
|
40116
40271
|
overdue_count: external_exports.number().int().nonnegative()
|
|
40117
40272
|
}).strict())
|
|
40118
40273
|
}).strict();
|
|
40119
40274
|
var syncBriefIssueSchema = external_exports.object({
|
|
40120
|
-
issue_id:
|
|
40121
|
-
raised_by_seat_id:
|
|
40275
|
+
issue_id: uuidSchema25,
|
|
40276
|
+
raised_by_seat_id: uuidSchema25,
|
|
40122
40277
|
raised_by_seat_name: external_exports.string().min(1),
|
|
40123
40278
|
summary: external_exports.string().min(1),
|
|
40124
40279
|
severity: external_exports.enum(["low", "med", "high", "critical"]),
|
|
@@ -40135,9 +40290,9 @@ var syncBriefActionItemTrendSchema = external_exports.object({
|
|
|
40135
40290
|
has_prior: external_exports.boolean()
|
|
40136
40291
|
}).strict();
|
|
40137
40292
|
var syncBriefCascadeAtRiskSchema = external_exports.object({
|
|
40138
|
-
goal_id:
|
|
40293
|
+
goal_id: uuidSchema25,
|
|
40139
40294
|
title: external_exports.string().min(1),
|
|
40140
|
-
seat_id:
|
|
40295
|
+
seat_id: uuidSchema25.nullable(),
|
|
40141
40296
|
progress_pct: external_exports.number().int().min(0).max(100),
|
|
40142
40297
|
classification: external_exports.enum(["at_risk", "projected_miss"]),
|
|
40143
40298
|
behind_days: external_exports.number().nullable(),
|
|
@@ -40146,7 +40301,7 @@ var syncBriefCascadeAtRiskSchema = external_exports.object({
|
|
|
40146
40301
|
target_date: external_exports.string().date().nullable().optional()
|
|
40147
40302
|
}).strict();
|
|
40148
40303
|
var syncBriefRunHeartbeatStalledSeatSchema = external_exports.object({
|
|
40149
|
-
seat_id:
|
|
40304
|
+
seat_id: uuidSchema25,
|
|
40150
40305
|
current_phase: external_exports.string().nullable(),
|
|
40151
40306
|
stalled_run_count: external_exports.number().int().nonnegative()
|
|
40152
40307
|
}).strict();
|
|
@@ -40171,8 +40326,8 @@ var syncBriefRunHeartbeatRollupSchema = external_exports.object({
|
|
|
40171
40326
|
stalled_seats: external_exports.array(syncBriefRunHeartbeatStalledSeatSchema)
|
|
40172
40327
|
}).strict();
|
|
40173
40328
|
var syncBriefAgentActivitySchema = external_exports.object({
|
|
40174
|
-
agent_id:
|
|
40175
|
-
seat_id:
|
|
40329
|
+
agent_id: uuidSchema25,
|
|
40330
|
+
seat_id: uuidSchema25,
|
|
40176
40331
|
seat_name: external_exports.string().min(1),
|
|
40177
40332
|
run_count: external_exports.number().int().nonnegative(),
|
|
40178
40333
|
failed_run_count: external_exports.number().int().nonnegative(),
|
|
@@ -40185,11 +40340,11 @@ var syncBriefAgentActivitySchema = external_exports.object({
|
|
|
40185
40340
|
var syncBriefSchema = external_exports.object({
|
|
40186
40341
|
schema_version: external_exports.literal(1),
|
|
40187
40342
|
tenant: external_exports.object({
|
|
40188
|
-
id:
|
|
40343
|
+
id: uuidSchema25,
|
|
40189
40344
|
name: external_exports.string().min(1)
|
|
40190
40345
|
}).strict(),
|
|
40191
40346
|
cluster: external_exports.object({
|
|
40192
|
-
id:
|
|
40347
|
+
id: uuidSchema25,
|
|
40193
40348
|
name: external_exports.string().min(1)
|
|
40194
40349
|
}).strict().nullable(),
|
|
40195
40350
|
period: external_exports.object({
|
|
@@ -40306,11 +40461,11 @@ var usageSnapshotOutputSchema = external_exports.object({
|
|
|
40306
40461
|
}).strict();
|
|
40307
40462
|
|
|
40308
40463
|
// ../../packages/protocol/src/event-payloads.ts
|
|
40309
|
-
var
|
|
40464
|
+
var uuidSchema26 = external_exports.string().uuid();
|
|
40310
40465
|
var evidenceSchema = external_exports.array(external_exports.unknown());
|
|
40311
40466
|
var statusEventPayloadSchema = external_exports.object({
|
|
40312
40467
|
measurables: external_exports.array(external_exports.object({
|
|
40313
|
-
id:
|
|
40468
|
+
id: uuidSchema26,
|
|
40314
40469
|
value: external_exports.number().finite(),
|
|
40315
40470
|
// DER-1045: an optional, non-secret citation for an agent-proposed reading
|
|
40316
40471
|
// (signal.report) — where the number came from + the agent's confidence.
|
|
@@ -40345,7 +40500,7 @@ var statusEventPayloadSchema = external_exports.object({
|
|
|
40345
40500
|
}).strict().optional()
|
|
40346
40501
|
}).strict()).optional(),
|
|
40347
40502
|
goals: external_exports.array(external_exports.object({
|
|
40348
|
-
id:
|
|
40503
|
+
id: uuidSchema26,
|
|
40349
40504
|
state: external_exports.enum(["on", "off"]),
|
|
40350
40505
|
note: external_exports.string().min(1).optional(),
|
|
40351
40506
|
// DER-2214: structured status-event attribution so "deliberately human-pinned"
|
|
@@ -40377,8 +40532,8 @@ var escalationEventPayloadSchema = escalationRaiseInputSchema.extend({
|
|
|
40377
40532
|
}).strict();
|
|
40378
40533
|
var issueEventPayloadSchema = external_exports.object({
|
|
40379
40534
|
summary: external_exports.string().min(1),
|
|
40380
|
-
blocking_goal_id:
|
|
40381
|
-
broken_measurable_id:
|
|
40535
|
+
blocking_goal_id: uuidSchema26.optional(),
|
|
40536
|
+
broken_measurable_id: uuidSchema26.optional(),
|
|
40382
40537
|
evidence: evidenceSchema,
|
|
40383
40538
|
severity: external_exports.enum(["low", "med", "high", "critical"]),
|
|
40384
40539
|
// DER-1978 (S2): an OPTIONAL short human-readable title written at creation.
|
|
@@ -40390,7 +40545,7 @@ var issueEventPayloadSchema = external_exports.object({
|
|
|
40390
40545
|
}).strict();
|
|
40391
40546
|
|
|
40392
40547
|
// ../../packages/protocol/src/event-internal-payloads.ts
|
|
40393
|
-
var
|
|
40548
|
+
var uuidSchema27 = external_exports.string().uuid();
|
|
40394
40549
|
var internalEventObjectSchema = external_exports.record(external_exports.string(), external_exports.unknown()).refine((payload) => !Array.isArray(payload), "Internal event payload must be an object");
|
|
40395
40550
|
var actionEventPayloadSchema = external_exports.object({ action: external_exports.string().min(1) }).passthrough();
|
|
40396
40551
|
function authoritativePrefixUnion(branches, authoritative) {
|
|
@@ -40412,25 +40567,25 @@ function authoritativePrefixUnion(branches, authoritative) {
|
|
|
40412
40567
|
}
|
|
40413
40568
|
var inviteCreatedEventPayloadSchema = external_exports.object({
|
|
40414
40569
|
action: external_exports.literal("invite.created"),
|
|
40415
|
-
invite_id:
|
|
40570
|
+
invite_id: uuidSchema27,
|
|
40416
40571
|
email: external_exports.string().email(),
|
|
40417
40572
|
role: memberRoleSchema,
|
|
40418
40573
|
member_type: memberTypeSchema,
|
|
40419
40574
|
access_profile: memberAccessProfileSchema,
|
|
40420
40575
|
aicos_access_scope: aicosAccessScopeSchema,
|
|
40421
|
-
invited_by:
|
|
40576
|
+
invited_by: uuidSchema27
|
|
40422
40577
|
}).strict();
|
|
40423
40578
|
var inviteRevokedEventPayloadSchema = external_exports.object({
|
|
40424
40579
|
action: external_exports.literal("invite.revoked"),
|
|
40425
|
-
invite_id:
|
|
40426
|
-
revoked_by:
|
|
40580
|
+
invite_id: uuidSchema27,
|
|
40581
|
+
revoked_by: uuidSchema27
|
|
40427
40582
|
}).strict();
|
|
40428
40583
|
var inviteAcceptedEventPayloadSchema = external_exports.object({
|
|
40429
40584
|
action: external_exports.literal("invite.accepted"),
|
|
40430
|
-
invite_id:
|
|
40431
|
-
user_id:
|
|
40432
|
-
membership_id:
|
|
40433
|
-
linked_seat_ids: external_exports.array(
|
|
40585
|
+
invite_id: uuidSchema27,
|
|
40586
|
+
user_id: uuidSchema27,
|
|
40587
|
+
membership_id: uuidSchema27,
|
|
40588
|
+
linked_seat_ids: external_exports.array(uuidSchema27)
|
|
40434
40589
|
}).strict();
|
|
40435
40590
|
var inviteLifecycleEventPayloadSchema = external_exports.union([
|
|
40436
40591
|
inviteCreatedEventPayloadSchema,
|
|
@@ -40495,14 +40650,14 @@ var heldToolActionReplaySchema = external_exports.object({
|
|
|
40495
40650
|
}).strict();
|
|
40496
40651
|
|
|
40497
40652
|
// ../../packages/protocol/src/operating.ts
|
|
40498
|
-
var
|
|
40653
|
+
var uuidSchema28 = external_exports.string().uuid();
|
|
40499
40654
|
var taskListInputSchema = external_exports.object({}).strict();
|
|
40500
40655
|
var operatingTaskSchema = external_exports.object({
|
|
40501
|
-
id:
|
|
40656
|
+
id: uuidSchema28,
|
|
40502
40657
|
title: external_exports.string(),
|
|
40503
40658
|
description: external_exports.string().nullable(),
|
|
40504
|
-
from_seat_id:
|
|
40505
|
-
goal_id:
|
|
40659
|
+
from_seat_id: uuidSchema28.nullable(),
|
|
40660
|
+
goal_id: uuidSchema28.nullable(),
|
|
40506
40661
|
acceptance_criteria: external_exports.unknown(),
|
|
40507
40662
|
due_on: external_exports.string().nullable(),
|
|
40508
40663
|
status: external_exports.string()
|
|
@@ -40511,54 +40666,54 @@ var taskListOutputSchema = external_exports.object({
|
|
|
40511
40666
|
tasks: external_exports.array(operatingTaskSchema)
|
|
40512
40667
|
}).strict();
|
|
40513
40668
|
var taskAcceptInputSchema = external_exports.object({
|
|
40514
|
-
id:
|
|
40669
|
+
id: uuidSchema28
|
|
40515
40670
|
}).strict();
|
|
40516
40671
|
var taskConfirmProposalInputSchema = external_exports.object({
|
|
40517
|
-
id:
|
|
40672
|
+
id: uuidSchema28
|
|
40518
40673
|
}).strict();
|
|
40519
40674
|
var taskMutationOutputSchema = external_exports.object({
|
|
40520
40675
|
task: external_exports.object({
|
|
40521
|
-
id:
|
|
40676
|
+
id: uuidSchema28,
|
|
40522
40677
|
status: external_exports.string()
|
|
40523
40678
|
}).strict()
|
|
40524
40679
|
}).strict();
|
|
40525
40680
|
var taskDeclineInputSchema = external_exports.object({
|
|
40526
|
-
id:
|
|
40681
|
+
id: uuidSchema28,
|
|
40527
40682
|
reason: external_exports.string().min(1)
|
|
40528
40683
|
}).strict();
|
|
40529
40684
|
var taskDeclineOutputSchema = external_exports.object({
|
|
40530
40685
|
task: external_exports.object({
|
|
40531
|
-
id:
|
|
40686
|
+
id: uuidSchema28,
|
|
40532
40687
|
status: external_exports.string(),
|
|
40533
40688
|
decline_reason: external_exports.string()
|
|
40534
40689
|
}).strict()
|
|
40535
40690
|
}).strict();
|
|
40536
40691
|
var taskCompleteInputSchema = external_exports.object({
|
|
40537
|
-
id:
|
|
40692
|
+
id: uuidSchema28,
|
|
40538
40693
|
summary: external_exports.string().min(1),
|
|
40539
40694
|
artifacts: external_exports.unknown().optional()
|
|
40540
40695
|
}).strict();
|
|
40541
40696
|
var taskCompleteOutputSchema = external_exports.object({
|
|
40542
|
-
task_id:
|
|
40543
|
-
event_id:
|
|
40697
|
+
task_id: uuidSchema28,
|
|
40698
|
+
event_id: uuidSchema28,
|
|
40544
40699
|
type: external_exports.literal("handoff")
|
|
40545
40700
|
}).strict();
|
|
40546
40701
|
var statusRecordOutputSchema = external_exports.object({
|
|
40547
|
-
event_id:
|
|
40702
|
+
event_id: uuidSchema28,
|
|
40548
40703
|
type: external_exports.literal("status")
|
|
40549
40704
|
}).strict();
|
|
40550
40705
|
var frictionFileIssueInputSchema = issueEventPayloadSchema.extend({
|
|
40551
40706
|
source_key: external_exports.string().trim().min(1).max(200).optional()
|
|
40552
40707
|
}).strict();
|
|
40553
40708
|
var duplicateFrictionCandidateSchema = external_exports.object({
|
|
40554
|
-
issue_id:
|
|
40709
|
+
issue_id: uuidSchema28,
|
|
40555
40710
|
summary: external_exports.string().min(1),
|
|
40556
40711
|
// pg_trgm similarity in [0, 1]; higher is more similar.
|
|
40557
40712
|
similarity: external_exports.number().min(0).max(1)
|
|
40558
40713
|
}).strict();
|
|
40559
40714
|
var frictionFileIssueOutputSchema = external_exports.object({
|
|
40560
|
-
event_id:
|
|
40561
|
-
issue_id:
|
|
40715
|
+
event_id: uuidSchema28,
|
|
40716
|
+
issue_id: uuidSchema28,
|
|
40562
40717
|
type: external_exports.literal("issue"),
|
|
40563
40718
|
// DER-1522: likely-duplicate candidates detected before creation. Recommend,
|
|
40564
40719
|
// never block — filing always proceeds; empty when nothing crossed the
|
|
@@ -40572,12 +40727,12 @@ var workLogInputSchema = external_exports.object({
|
|
|
40572
40727
|
note: external_exports.string().min(1)
|
|
40573
40728
|
}).strict();
|
|
40574
40729
|
var workLogOutputSchema = external_exports.object({
|
|
40575
|
-
event_id:
|
|
40730
|
+
event_id: uuidSchema28,
|
|
40576
40731
|
type: external_exports.literal("task")
|
|
40577
40732
|
}).strict();
|
|
40578
40733
|
var escalationRaiseOutputSchema = external_exports.object({
|
|
40579
|
-
event_id:
|
|
40580
|
-
escalation_id:
|
|
40734
|
+
event_id: uuidSchema28,
|
|
40735
|
+
escalation_id: uuidSchema28,
|
|
40581
40736
|
type: external_exports.literal("escalation")
|
|
40582
40737
|
}).strict();
|
|
40583
40738
|
var deliverableKindSchema2 = external_exports.enum(["brief", "work_evidence", "artifact", "report", "other"]);
|
|
@@ -40636,7 +40791,7 @@ var deliverableRejectOutputSchema = external_exports.object({
|
|
|
40636
40791
|
}).strict();
|
|
40637
40792
|
|
|
40638
40793
|
// ../../packages/protocol/src/steward.ts
|
|
40639
|
-
var
|
|
40794
|
+
var uuidSchema29 = external_exports.string().uuid();
|
|
40640
40795
|
var escalationStatusSchema = external_exports.enum([
|
|
40641
40796
|
"open",
|
|
40642
40797
|
"approved",
|
|
@@ -40645,18 +40800,18 @@ var escalationStatusSchema = external_exports.enum([
|
|
|
40645
40800
|
]);
|
|
40646
40801
|
var stewardReplayActionSummarySchema = external_exports.object({
|
|
40647
40802
|
tool_name: external_exports.string(),
|
|
40648
|
-
run_id:
|
|
40803
|
+
run_id: uuidSchema29
|
|
40649
40804
|
}).strict();
|
|
40650
40805
|
var stewardProposedToolCallSchema = external_exports.object({
|
|
40651
40806
|
tool_name: external_exports.string(),
|
|
40652
40807
|
args_summary: external_exports.unknown()
|
|
40653
40808
|
}).strict();
|
|
40654
40809
|
var stewardEscalationSchema = external_exports.object({
|
|
40655
|
-
id:
|
|
40656
|
-
seat_id:
|
|
40810
|
+
id: uuidSchema29,
|
|
40811
|
+
seat_id: uuidSchema29,
|
|
40657
40812
|
seat_name: external_exports.string(),
|
|
40658
40813
|
seat_type: external_exports.enum(["human", "agent", "hybrid"]),
|
|
40659
|
-
steward_seat_id:
|
|
40814
|
+
steward_seat_id: uuidSchema29,
|
|
40660
40815
|
steward_seat_name: external_exports.string(),
|
|
40661
40816
|
reason: external_exports.string(),
|
|
40662
40817
|
// DER-1978 (S2): OPTIONAL short headline written at creation; null/absent when unset
|
|
@@ -40679,11 +40834,11 @@ var stewardEscalationSchema = external_exports.object({
|
|
|
40679
40834
|
proposed_tool_call: stewardProposedToolCallSchema.optional(),
|
|
40680
40835
|
recommended_action: external_exports.string().nullable(),
|
|
40681
40836
|
status: escalationStatusSchema,
|
|
40682
|
-
decided_by:
|
|
40837
|
+
decided_by: uuidSchema29.nullable(),
|
|
40683
40838
|
decided_by_name: external_exports.string().nullable(),
|
|
40684
40839
|
decided_at: external_exports.string().nullable(),
|
|
40685
40840
|
decision_note: external_exports.string().nullable(),
|
|
40686
|
-
issue_id:
|
|
40841
|
+
issue_id: uuidSchema29.nullable(),
|
|
40687
40842
|
created_at: external_exports.string(),
|
|
40688
40843
|
updated_at: external_exports.string()
|
|
40689
40844
|
}).strict();
|
|
@@ -40694,27 +40849,27 @@ var escalationListOutputSchema = external_exports.object({
|
|
|
40694
40849
|
escalations: external_exports.array(stewardEscalationSchema)
|
|
40695
40850
|
}).strict();
|
|
40696
40851
|
var escalationGetInputSchema = external_exports.object({
|
|
40697
|
-
id:
|
|
40852
|
+
id: uuidSchema29
|
|
40698
40853
|
}).strict();
|
|
40699
40854
|
var escalationGetOutputSchema = external_exports.object({
|
|
40700
40855
|
escalation: stewardEscalationSchema
|
|
40701
40856
|
}).strict();
|
|
40702
40857
|
var escalationResolveActionSchema = external_exports.enum(["approve", "convert_to_issue"]);
|
|
40703
40858
|
var escalationResolveInputSchema = external_exports.object({
|
|
40704
|
-
id:
|
|
40859
|
+
id: uuidSchema29,
|
|
40705
40860
|
action: escalationResolveActionSchema.optional(),
|
|
40706
40861
|
rationale: external_exports.string().trim().min(1).optional()
|
|
40707
40862
|
}).strict();
|
|
40708
40863
|
var escalationRejectInputSchema = external_exports.object({
|
|
40709
|
-
id:
|
|
40864
|
+
id: uuidSchema29,
|
|
40710
40865
|
rationale: external_exports.string().trim().min(1).optional()
|
|
40711
40866
|
}).strict();
|
|
40712
40867
|
var escalationDecisionOutputSchema = external_exports.object({
|
|
40713
|
-
escalation_id:
|
|
40868
|
+
escalation_id: uuidSchema29,
|
|
40714
40869
|
status: escalationStatusSchema,
|
|
40715
|
-
decision_id:
|
|
40716
|
-
decided_by:
|
|
40717
|
-
issue_id:
|
|
40870
|
+
decision_id: uuidSchema29,
|
|
40871
|
+
decided_by: uuidSchema29,
|
|
40872
|
+
issue_id: uuidSchema29.nullable(),
|
|
40718
40873
|
// DER-1478: true when the resolved escalation carries a durable replay_action
|
|
40719
40874
|
// (an approval-gated connector write) that the approvals path should actuate
|
|
40720
40875
|
// after this decision is recorded. Omitted (not false) for non-connector
|
|
@@ -40895,7 +41050,7 @@ var workDetailsSchemas = {
|
|
|
40895
41050
|
};
|
|
40896
41051
|
|
|
40897
41052
|
// ../../packages/protocol/src/agent-grant-intervention.ts
|
|
40898
|
-
var
|
|
41053
|
+
var uuidSchema30 = external_exports.string().uuid();
|
|
40899
41054
|
var agentGrantBlockerKindSchema = external_exports.enum([
|
|
40900
41055
|
"rost_capability",
|
|
40901
41056
|
"os_permission",
|
|
@@ -40912,16 +41067,16 @@ var agentGrantInterventionStatusSchema = external_exports.enum([
|
|
|
40912
41067
|
]);
|
|
40913
41068
|
var agentGrantKindSchema = external_exports.enum(["allow_once", "permanent"]);
|
|
40914
41069
|
var agentGrantInterventionSchema = external_exports.object({
|
|
40915
|
-
id:
|
|
40916
|
-
seat_id:
|
|
41070
|
+
id: uuidSchema30,
|
|
41071
|
+
seat_id: uuidSchema30,
|
|
40917
41072
|
seat_name: external_exports.string().nullable(),
|
|
40918
|
-
agent_id:
|
|
41073
|
+
agent_id: uuidSchema30.nullable(),
|
|
40919
41074
|
// The source blocked attempt (audit link); null once the run is retention-purged.
|
|
40920
|
-
run_id:
|
|
41075
|
+
run_id: uuidSchema30.nullable(),
|
|
40921
41076
|
// The runner the blocker lives on, for os_permission repairs ("Open on Runner").
|
|
40922
|
-
runner_id:
|
|
41077
|
+
runner_id: uuidSchema30.nullable(),
|
|
40923
41078
|
// The linked continuation attempt, populated when a continuation is enqueued.
|
|
40924
|
-
continuation_run_id:
|
|
41079
|
+
continuation_run_id: uuidSchema30.nullable(),
|
|
40925
41080
|
blocker_kind: agentGrantBlockerKindSchema,
|
|
40926
41081
|
status: agentGrantInterventionStatusSchema,
|
|
40927
41082
|
// The specific capability/scope requested (e.g. "gmail.send"), when applicable.
|
|
@@ -40936,7 +41091,7 @@ var agentGrantInterventionSchema = external_exports.object({
|
|
|
40936
41091
|
// True once the blocked attempt released its lease/compute (AC #2 clean termination).
|
|
40937
41092
|
compute_released: external_exports.boolean(),
|
|
40938
41093
|
grant_kind: agentGrantKindSchema.nullable(),
|
|
40939
|
-
decided_by:
|
|
41094
|
+
decided_by: uuidSchema30.nullable(),
|
|
40940
41095
|
decided_by_name: external_exports.string().nullable(),
|
|
40941
41096
|
decided_at: external_exports.string().nullable(),
|
|
40942
41097
|
expires_at: external_exports.string().nullable(),
|
|
@@ -40945,7 +41100,7 @@ var agentGrantInterventionSchema = external_exports.object({
|
|
|
40945
41100
|
}).strict();
|
|
40946
41101
|
var agentGrantInterventionListInputSchema = external_exports.object({
|
|
40947
41102
|
// Optional seat filter (a seat-scoped caller is additionally clamped to its own seat).
|
|
40948
|
-
seat_id:
|
|
41103
|
+
seat_id: uuidSchema30.optional(),
|
|
40949
41104
|
// When true, include decided/terminal records (declined/resumed/expired) too;
|
|
40950
41105
|
// by default only the actionable open blocked/granted records are returned.
|
|
40951
41106
|
include_decided: external_exports.boolean().optional()
|
|
@@ -40954,14 +41109,14 @@ var agentGrantInterventionListOutputSchema = external_exports.object({
|
|
|
40954
41109
|
interventions: external_exports.array(agentGrantInterventionSchema)
|
|
40955
41110
|
}).strict();
|
|
40956
41111
|
var agentGrantInterventionGetInputSchema = external_exports.object({
|
|
40957
|
-
id:
|
|
41112
|
+
id: uuidSchema30
|
|
40958
41113
|
}).strict();
|
|
40959
41114
|
var agentGrantInterventionGetOutputSchema = external_exports.object({
|
|
40960
41115
|
intervention: agentGrantInterventionSchema
|
|
40961
41116
|
}).strict();
|
|
40962
41117
|
var agentGrantInterventionDecideActionSchema = external_exports.enum(["grant", "decline"]);
|
|
40963
41118
|
var agentGrantInterventionDecideInputSchema = external_exports.object({
|
|
40964
|
-
intervention_id:
|
|
41119
|
+
intervention_id: uuidSchema30,
|
|
40965
41120
|
action: agentGrantInterventionDecideActionSchema,
|
|
40966
41121
|
// Defaults to allow_once. `permanent` never auto-widens — it returns
|
|
40967
41122
|
// requires_charter_resign so the surface routes the human to a Charter re-sign.
|
|
@@ -40973,12 +41128,12 @@ var agentGrantInterventionDecideInputSchema = external_exports.object({
|
|
|
40973
41128
|
rationale: external_exports.string().trim().min(1).max(2e3).optional()
|
|
40974
41129
|
}).strict();
|
|
40975
41130
|
var agentGrantInterventionDecideOutputSchema = external_exports.object({
|
|
40976
|
-
intervention_id:
|
|
41131
|
+
intervention_id: uuidSchema30,
|
|
40977
41132
|
status: agentGrantInterventionStatusSchema,
|
|
40978
|
-
continuation_run_id:
|
|
41133
|
+
continuation_run_id: uuidSchema30.nullable(),
|
|
40979
41134
|
// The human decision row written for a grant/decline (invariant #7). Null only
|
|
40980
41135
|
// when a permanent grant deferred to a Charter re-sign (no one-time decision made).
|
|
40981
|
-
decision_id:
|
|
41136
|
+
decision_id: uuidSchema30.nullable(),
|
|
40982
41137
|
// True when the human chose the permanent option — the surface must route to a
|
|
40983
41138
|
// Charter re-sign; no authority was widened by this call (invariant #10).
|
|
40984
41139
|
requires_charter_resign: external_exports.boolean(),
|
|
@@ -40992,12 +41147,12 @@ var agentGrantInterventionDecideOutputSchema = external_exports.object({
|
|
|
40992
41147
|
enqueue_failed: external_exports.boolean()
|
|
40993
41148
|
}).strict();
|
|
40994
41149
|
var agentGrantInterventionResumeInputSchema = external_exports.object({
|
|
40995
|
-
intervention_id:
|
|
41150
|
+
intervention_id: uuidSchema30
|
|
40996
41151
|
}).strict();
|
|
40997
41152
|
var agentGrantInterventionResumeOutputSchema = external_exports.object({
|
|
40998
|
-
intervention_id:
|
|
41153
|
+
intervention_id: uuidSchema30,
|
|
40999
41154
|
status: agentGrantInterventionStatusSchema,
|
|
41000
|
-
continuation_run_id:
|
|
41155
|
+
continuation_run_id: uuidSchema30.nullable(),
|
|
41001
41156
|
enqueue_failed: external_exports.boolean()
|
|
41002
41157
|
}).strict();
|
|
41003
41158
|
|
|
@@ -41015,7 +41170,7 @@ var eventTypes = [
|
|
|
41015
41170
|
"task"
|
|
41016
41171
|
];
|
|
41017
41172
|
var publicMessageTypes = ["status", "handoff", "escalation", "issue"];
|
|
41018
|
-
var
|
|
41173
|
+
var uuidSchema31 = external_exports.string().uuid();
|
|
41019
41174
|
var evidenceSchema2 = external_exports.array(external_exports.unknown());
|
|
41020
41175
|
var internalEventPayloadSchema = external_exports.record(external_exports.string(), external_exports.unknown()).refine((payload) => !Array.isArray(payload), "Internal event payload must be an object");
|
|
41021
41176
|
var handoffEventPayloadSchema = external_exports.object({
|
|
@@ -41025,24 +41180,24 @@ var handoffEventPayloadSchema = external_exports.object({
|
|
|
41025
41180
|
acceptance_criteria: external_exports.array(external_exports.string().min(1)),
|
|
41026
41181
|
due: external_exports.string().datetime({ offset: true })
|
|
41027
41182
|
}).strict(),
|
|
41028
|
-
to_seat_id:
|
|
41183
|
+
to_seat_id: uuidSchema31
|
|
41029
41184
|
}).strict();
|
|
41030
41185
|
var intakeEventPayloadSchema = external_exports.discriminatedUnion("action", [
|
|
41031
41186
|
external_exports.object({
|
|
41032
41187
|
action: external_exports.literal("uploaded"),
|
|
41033
|
-
document_id:
|
|
41188
|
+
document_id: uuidSchema31,
|
|
41034
41189
|
storage_ref: external_exports.string().min(1)
|
|
41035
41190
|
}).strict(),
|
|
41036
41191
|
external_exports.object({
|
|
41037
41192
|
action: external_exports.literal("parsed"),
|
|
41038
|
-
document_id:
|
|
41193
|
+
document_id: uuidSchema31,
|
|
41039
41194
|
mode: external_exports.enum(["source_tree", "function_first"]),
|
|
41040
41195
|
seat_count: external_exports.number().int().nonnegative(),
|
|
41041
41196
|
edge_count: external_exports.number().int().nonnegative()
|
|
41042
41197
|
}).strict(),
|
|
41043
41198
|
external_exports.object({
|
|
41044
41199
|
action: external_exports.literal("failed"),
|
|
41045
|
-
document_id:
|
|
41200
|
+
document_id: uuidSchema31,
|
|
41046
41201
|
reason: external_exports.string().min(1)
|
|
41047
41202
|
}).strict(),
|
|
41048
41203
|
external_exports.object({
|
|
@@ -41148,9 +41303,9 @@ var publicMessageTypeSchema = external_exports.enum(publicMessageTypes);
|
|
|
41148
41303
|
var eventEnvelopeBaseSchema = external_exports.object({
|
|
41149
41304
|
protocol: external_exports.literal(EVENT_PROTOCOL),
|
|
41150
41305
|
type: eventTypeSchema,
|
|
41151
|
-
seat_id:
|
|
41306
|
+
seat_id: uuidSchema31.nullable(),
|
|
41152
41307
|
occurred_at: external_exports.string().datetime({ offset: true }),
|
|
41153
|
-
goal_ancestry: external_exports.array(
|
|
41308
|
+
goal_ancestry: external_exports.array(uuidSchema31),
|
|
41154
41309
|
// DER-2381: optional so historical rows and every caller that hasn't been
|
|
41155
41310
|
// updated yet keep parsing — but every per-type writer envelope below
|
|
41156
41311
|
// extends THIS base and re-`.strict()`s, so adding it here propagates the
|
|
@@ -51896,7 +52051,7 @@ var referenceDocuments = [
|
|
|
51896
52051
|
order: 10,
|
|
51897
52052
|
title: "{{brand}} implementation method",
|
|
51898
52053
|
summary: "The staged operating-system setup path used by humans, CLI sessions, MCP clients, and in-app agents.",
|
|
51899
|
-
version: "2026-07-
|
|
52054
|
+
version: "2026-07-30.1",
|
|
51900
52055
|
public: true,
|
|
51901
52056
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
51902
52057
|
stages: ["company_setup", "graph_design", "charter_design", "staffing", "operating_rhythm"],
|
|
@@ -51909,6 +52064,7 @@ var referenceDocuments = [
|
|
|
51909
52064
|
"onboarding.create_invite",
|
|
51910
52065
|
"onboarding.setup",
|
|
51911
52066
|
"onboarding.rehearse",
|
|
52067
|
+
"onboarding.activate",
|
|
51912
52068
|
"onboarding.source_ingest",
|
|
51913
52069
|
"seat.create",
|
|
51914
52070
|
"seat.set_type",
|
|
@@ -52024,7 +52180,9 @@ The Compass is drafted, then activated by a human through supersession.
|
|
|
52024
52180
|
|
|
52025
52181
|
\`onboarding.setup\`, \`onboarding.finish\`, \`compass.approve_version\`, \`compass.reject_draft\`, and \`compass.set\` are \`human_required\`. \`onboarding.source_ingest\` is a bootstrap-safe \`none\` prerequisite that retains bounded source bytes encrypted under the exact tenant/run, computes its digest and canonical parser manifest server-side, and remains permanently outside Trusted and Full Operator. \`onboarding.setup\` is the one-approval composite apply: it freezes the complete plan and live proof at staging, then rechecks them and applies Compass, cycle, Responsibility Graph, Charters, staffing, goals, Signals/readings, Frictions, tasks, and Sync scope in one transaction. A failure rolls back the entire application and leaves the confirmation pending.
|
|
52026
52182
|
|
|
52027
|
-
|
|
52183
|
+
The whole composite flow has first-class CLI verbs: \`{{cli}} onboard source-ingest --file <path> ...\` for each allowed local source, \`{{cli}} onboard setup --input-file <plan.json>\` to stage the one owner approval (it prints the confirmation id and exact approval URL), \`{{cli}} onboard setup-status --input-file <plan.json>\` to discover the applied receipt by idempotent re-submission of the identical plan, then \`{{cli}} onboard rehearse\` and \`{{cli}} onboard activate\`. Each authenticates with the implementation-bootstrap credential first and falls back to the user session; the generic \`{{cli}} command <id> --json\` path and the generated MCP tools expose the same schemas.
|
|
52184
|
+
|
|
52185
|
+
After setup succeeds, call \`onboarding.rehearse\` with the exact setup application, expected setup digest/revision, and a caller idempotency key. This is the implementation principal's one bounded \`execute\` exception: it is ungated because it can run only the setup receipt's exact agents in the sandbox, with no schedule arming, go-live transition, credential access, source mutation, or external communication. It rechecks the current Charter manifest, pinned published Skill versions and content hashes, schedule, execution lane, and canonical configuration digest under the same tenant/run boundary. A complete batch returns an immutable terminal batch receipt plus one immutable per-agent receipt with nonzero checked counts, runtime run ids, bounded tool previews/manifest holds/errors, and \`passed\` or \`failed\` status. Same-key/same-configuration retry returns that terminal evidence; a changed configuration conflicts instead of silently reusing it. The rehearsal never returns an approval URL and never stages activation. The later, separate \`onboarding.activate\` command consumes that exact terminal batch and the unique run/configuration evidence for the setup receipt's complete agent set. It stages one owner approval whose durable card shows every agent, Seat, Charter/configuration digest, rehearsal run, effective lane/model, permissions, schedule, warnings, and the onboarding-completion effect. Approval rechecks the full projection, records one composite human decision, makes every agent live, arms eligible schedules, and completes onboarding atomically. Any stale or failed member rolls the transaction back; same-key retry returns the committed receipt without duplicating effects.
|
|
52028
52186
|
|
|
52029
52187
|
\`onboarding.advance_step\`, \`onboarding.create_invite\`, \`onboarding.attach_reference\`, \`compass.answer_gap\`, and drafting a Compass are \`none\` \u2014 none of them returns a pending confirmation. \`none\` is not the same as "agent-callable", though: \`onboarding.create_invite\` and \`compass.answer_gap\` record the human who ran them, so they run as a person, not from an agent session, while advancing a step, attaching a reference, drafting a Compass, and exact-run source ingestion are safe for the bootstrap agent. Approving a version (a supersession) is a human act. The agent drafts and surfaces the approve link. See the confirmations guide.
|
|
52030
52188
|
|
|
@@ -53164,7 +53322,7 @@ External connectors are being rolled out provider by provider, conservatively (r
|
|
|
53164
53322
|
order: 48,
|
|
53165
53323
|
title: "CLI and MCP installation guide",
|
|
53166
53324
|
summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
|
|
53167
|
-
version: "2026-07-
|
|
53325
|
+
version: "2026-07-30.1",
|
|
53168
53326
|
public: true,
|
|
53169
53327
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
53170
53328
|
stages: ["company_setup", "staffing"],
|
|
@@ -53688,11 +53846,28 @@ These are the security posture rules for operating after install \u2014 a checkl
|
|
|
53688
53846
|
|
|
53689
53847
|
### Onboarding
|
|
53690
53848
|
|
|
53849
|
+
\`\`\`text
|
|
53850
|
+
{{cli}} onboard status
|
|
53851
|
+
{{cli}} onboard resume
|
|
53852
|
+
{{cli}} onboard run
|
|
53853
|
+
{{cli}} onboard source-ingest --file <path> --source-key <key> --kind <kind> --title <title> [--json]
|
|
53854
|
+
{{cli}} onboard setup --input '<json-plan>' | --input-file <path> [--json]
|
|
53855
|
+
{{cli}} onboard setup-status --input '<json-plan>' | --input-file <path> [--json]
|
|
53856
|
+
{{cli}} onboard rehearse|activate --setup-application-id <uuid> ... [--json]
|
|
53857
|
+
\`\`\`
|
|
53858
|
+
|
|
53859
|
+
Every tenant-scoped \`onboard\` verb (\`status\`, \`resume\`, \`source-ingest\`, \`setup\`, \`setup-status\`, \`rehearse\`, \`activate\` \u2014 \`onboard run\` is an offline public print) authenticates with an existing implementation-bootstrap credential first and falls back to the user session, so the agent-led composite flow works without a personal login. \`onboard source-ingest\` reads one local business file client-side, base64-encodes it, and calls \`onboarding.source_ingest\`; the server computes the digest and family manifest and returns the opaque \`source_ref\` to reference from the setup plan's \`sources[]\` (paths and client digests are rejected). The server's 1 MiB command-body cap is authoritative, and base64 expands content by 4/3, so the largest file reachable through this command today is about 780 KB \u2014 the CLI pre-checks and names the exact fitting size; split a larger export. \`onboard setup\` submits the complete declarative plan to \`onboarding.setup\`: staging succeeds with exit code 0 and prints the pending confirmation id plus the exact approval URL (with \`--json\`, the full pending-confirmation object). \`onboard setup-status\` re-submits the identical plan to discover state through the command's idempotent contract: after approval it returns the immutable applied receipt (application id, receipt revision, input digest) without staging anything; while approval is still pending it returns the current approval card \u2014 an identical still-valid card is reused with the same confirmation id and URL, and only a changed server-derived projection supersedes the stale card and mints a fresh one. After application, a same-key re-submission with a different plan digest is a typed conflict.
|
|
53860
|
+
|
|
53691
53861
|
| Command | Purpose | Scope | Safe example |
|
|
53692
53862
|
|---|---|---|---|
|
|
53693
53863
|
| \`{{cli}} onboard status\` | Return onboarding progress, graph summary, and next actions. | Tenant | \`{{cli}} onboard status\` |
|
|
53694
53864
|
| \`{{cli}} onboard resume\` | Resume the guided onboarding flow where it left off. | Tenant | \`{{cli}} onboard resume\` |
|
|
53695
53865
|
| \`{{cli}} onboard run\` | Print the deterministic agent onboarding prompt. | Public reference | \`{{cli}} onboard run\` |
|
|
53866
|
+
| \`{{cli}} onboard source-ingest\` | Retain one bounded local business source (encrypted, tenant/run-bound) via \`onboarding.source_ingest\` and print the opaque \`source_ref\` for the setup plan. | Tenant (implementation bootstrap or owner) | \`{{cli}} onboard source-ingest --file org-chart.csv --source-key org-chart --kind org_chart --title "Org chart" --json\` |
|
|
53867
|
+
| \`{{cli}} onboard setup\` | Stage the one-approval composite onboarding setup via \`onboarding.setup\`; prints the pending confirmation id and exact approval URL, or the applied receipt on an identical re-submission. | Tenant (implementation bootstrap or owner) | \`{{cli}} onboard setup --input-file setup-plan.json --json\` |
|
|
53868
|
+
| \`{{cli}} onboard setup-status\` | Discover the setup application state by idempotent re-submission of the identical plan: applied receipt after approval; while pending, the current approval card (an identical card is reused, same id and URL). | Tenant (implementation bootstrap or owner) | \`{{cli}} onboard setup-status --input-file setup-plan.json --json\` |
|
|
53869
|
+
| \`{{cli}} onboard rehearse\` | Run the applied setup receipt's agents through the resumable sandbox-only rehearsal batch via \`onboarding.rehearse\`; returns immutable terminal evidence, never an activation approval URL. | Tenant (implementation bootstrap or owner) | \`{{cli}} onboard rehearse --setup-application-id <uuid> --expected-input-digest <sha256:digest> --expected-receipt-revision 1 --idempotency-key rehearse-1 --json\` |
|
|
53870
|
+
| \`{{cli}} onboard activate\` | Stage the one post-rehearsal owner approval via \`onboarding.activate\` with the exact unique-agent-ID rehearsal and configuration evidence arrays; it alone stages the activation URL. | Tenant (implementation bootstrap or owner) | \`{{cli}} onboard activate --setup-application-id <uuid> --expected-input-digest <sha256:digest> --expected-receipt-revision 1 --terminal-rehearsal-batch-receipt-id <uuid> --rehearsal-runs '[...]' --configuration-digests '[...]' --idempotency-key activate-1 --json\` |
|
|
53696
53871
|
| \`{{cli}} init [--client claude-code|codex|cursor] (defaults --scope tenant-admin)\` | Log in when needed, install MCP, and print the onboarding prompt. As the first-run helper it defaults to a tenant-admin token (no seats exist yet); pass \`--scope seat --seat-id <id>\` to scope it narrower. | User plus tenant | \`{{cli}} init --client codex\` |
|
|
53697
53872
|
| \`{{cli}} init --tenant <tenant> --client <client>\` | Select a tenant before MCP install. | User plus tenant | \`{{cli}} init --tenant acme-ops --client cursor\` |
|
|
53698
53873
|
|
|
@@ -53734,7 +53909,7 @@ These ergonomic wrappers (including the \`{{cli}} agent\` group) require **{{cli
|
|
|
53734
53909
|
|
|
53735
53910
|
**Generated verbs (0.6.0+).** Every registry command now has a first-class \`{{cli}} <namespace> <action>\` verb, projected directly from the command's input schema \u2014 so namespaces that previously had no ergonomic wrapper (for example \`{{cli}} measurable create\`, \`{{cli}} work_order enqueue\`, \`{{cli}} mcp_token create\`) are usable without dropping to the raw \`command <id>\` path. Flags follow the schema field names (\`--seat-id\`, \`--name\`, \u2026); read a command's exact input offline with \`{{cli}} <namespace> <action> --schema\` before calling it, and pass a nested payload with \`--input '<json>'\` when a field is a complex object. \`--json\` still selects machine output, \`--seat <id>\` still sets seat scope, and \`{{cli}} command <id> --json '<body>'\` remains the universal fallback.
|
|
53736
53911
|
|
|
53737
|
-
For a complete Seat, inspect \`{{cli}} seat create-complete --schema\`, then pass the strict nested request with \`{{cli}} seat create-complete --input '<json>' --json\`. The generic \`{{cli}} command seat.create_complete --json '<json>'\` path and the generated MCP tool \`rost_create_complete_seat\` expose the same registry schema and server-side command.
|
|
53912
|
+
For a complete Seat, inspect \`{{cli}} seat create-complete --schema\`, then pass the strict nested request with \`{{cli}} seat create-complete --input '<json>' --json\`. The generic \`{{cli}} command seat.create_complete --json '<json>'\` path and the generated MCP tool \`rost_create_complete_seat\` expose the same registry schema and server-side command. \`seat create-complete\` authenticates with an existing implementation-bootstrap credential first (it is one of the vetted bootstrap staging primitives) and falls back to the user session. Staging surfaces as the CLI's confirmation-required envelope: a \`COMMAND_CONFIRMATION_REQUIRED\` JSON object on stderr, exit code 3, whose \`details\` carry the pending confirmation id and the exact approval URL (\`details.approveVia.webUrl\`) \u2014 read the URL from there; the command has done its job at that point. The human owner reviews one card covering the Seat, canonical Charter and permission manifest, disclosed staffing, effective agent lane/readiness, exact pinned Skill versions and dependency state, and schedule. Approval applies the proposal in one transaction and returns its application and receipt ids. Any failure rolls back the whole proposal. An optional agent remains in \`dry_run\`; this command never approves go-live. Direct calls use existing parent and Steward Seat ids\u2014logical references are reserved for the later composite onboarding flow. Retained source ingestion is not available on this direct command yet, so \`sources\` and every \`source_uses\` collection must be empty and planned staffing must omit \`source_ref\`; the command rejects source-backed provenance instead of accepting an unverified upload id or caller-supplied digest.
|
|
53738
53913
|
|
|
53739
53914
|
The signed-in app exposes the same Skill command surface at **Skills**, linked from the Agents page (the nav collapse moved it out of the primary sidebar). Use \`/skills\` to filter the tenant library, \`/skills/new\` to build canonical \`SKILL.md\` frontmatter with \`tool.catalog\` dependencies, \`/skills/import\` for bounded GitHub or upload imports, and each Skill detail page to review validation, publish, check Seat dependencies, and assign a published version. During \`/agents/new\`, \`agent_setup.get\` can return \`next_action: "choose_skills"\`; selected Skills are proposed immutable-version assignments and required Skill tools block sign-off/go-live until tool configuration is ready.
|
|
53740
53915
|
|
|
@@ -53856,6 +54031,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
53856
54031
|
| \`rost_ingest_onboarding_source\` | \`onboarding.source_ingest\` | Retain one bounded encrypted onboarding source for the current implementation run or direct owner setup. | Tenant | Call with one source and its declared kind; use the returned logical source key in setup. |
|
|
53857
54032
|
| \`rost_apply_onboarding_setup\` | \`onboarding.setup\` | Stage one atomic company setup proposal for owner review without making agents live. | Tenant | Submit the complete normalized plan; expect one human confirmation. |
|
|
53858
54033
|
| \`rost_rehearse_onboarding_agents\` | \`onboarding.rehearse\` | Run the setup receipt's exact agents in a run-bound sandbox and return the complete immutable terminal batch plus per-agent evidence. It cannot activate agents, arm schedules, use credentials, mutate sources, send externally, or stage a confirmation. | Tenant | Inspect the live command contract, then pass the exact setup application, expected digest/revision, and idempotency key. A retry returns the same terminal evidence only when configuration is unchanged. |
|
|
54034
|
+
| \`rost_activate_onboarding_agents\` | \`onboarding.activate\` | Stage one complete owner approval for the setup receipt's exact all-passed agent set; approval activates the group and completes onboarding atomically. | Tenant | Pass the terminal batch receipt id plus every per-agent rehearsal run and configuration digest returned by \`onboarding.rehearse\`; expect one approval URL. |
|
|
53859
54035
|
| \`rost_onboard_resume\` | \`onboarding.resume\` | Return the machine-readable onboarding resume state (path choice, pending setup, next step). | Tenant | Call with \`{}\`. |
|
|
53860
54036
|
| \`rost_attach_reference_document\` | \`onboarding.attach_reference\` | Attach a company reference document (text/markdown) with title/kind/source so Compass and Charters can cite it. | Tenant | Call with \`text\`, a \`title\`, a \`kind\`, and a \`source\`. |
|
|
53861
54037
|
| \`rost_upload_org_context\` | \`onboarding.upload_context\` | Back-compat alias of \`onboarding.attach_reference\`. | Tenant | Prefer \`rost_attach_reference_document\`; same widened schema. |
|
|
@@ -57088,6 +57264,19 @@ function renderImplementationAccessNote() {
|
|
|
57088
57264
|
`${cliBrand.binName} onboard resume`,
|
|
57089
57265
|
"```",
|
|
57090
57266
|
"",
|
|
57267
|
+
"The agent-led composite setup flow has first-class verbs that authenticate with this credential first and fall back to the user session:",
|
|
57268
|
+
"",
|
|
57269
|
+
"```bash",
|
|
57270
|
+
`${cliBrand.binName} onboard source-ingest --file <path> --source-key <key> --kind <kind> --title <title> --json`,
|
|
57271
|
+
`${cliBrand.binName} onboard setup --input-file <plan.json> --json`,
|
|
57272
|
+
`${cliBrand.binName} onboard setup-status --input-file <plan.json> --json`,
|
|
57273
|
+
`${cliBrand.binName} onboard rehearse --setup-application-id <uuid> --expected-input-digest <sha256:digest> --expected-receipt-revision <n> --idempotency-key <key> --json`,
|
|
57274
|
+
`${cliBrand.binName} onboard activate --setup-application-id <uuid> ... --json`,
|
|
57275
|
+
`${cliBrand.binName} seat create-complete --input '<json>' --json`,
|
|
57276
|
+
"```",
|
|
57277
|
+
"",
|
|
57278
|
+
"`onboard setup` staging succeeds with exit code 0 and prints the pending confirmation id plus the exact approval URL; `onboard setup-status` re-submits the identical plan and returns the immutable applied receipt once the owner has approved.",
|
|
57279
|
+
"",
|
|
57091
57280
|
"Register the same bearer with an MCP client through `implementation access install-mcp`:",
|
|
57092
57281
|
"",
|
|
57093
57282
|
"```bash",
|
|
@@ -57831,8 +58020,324 @@ function parseSemver(value) {
|
|
|
57831
58020
|
};
|
|
57832
58021
|
}
|
|
57833
58022
|
|
|
58023
|
+
// src/commands/onboarding.ts
|
|
58024
|
+
import { readFile as readFile5 } from "node:fs/promises";
|
|
58025
|
+
|
|
58026
|
+
// src/generated/command-manifest.ts
|
|
58027
|
+
var COMMAND_MANIFEST = [
|
|
58028
|
+
{ "id": "agent_grant_intervention.decide", "namespace": "agent_grant_intervention", "action": "decide", "title": "Decide a blocked agent grant", "description": "Grant (one-time, exact-action) or decline a blocked agent intervention. A grant writes a human decision and enqueues the linked continuation; a permanent grant returns requires_charter_resign rather than widening authority. Human steward/admin only.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "intervention_id", "flag": "intervention-id", "type": "string", "required": true }, { "name": "action", "flag": "action", "type": "enum", "required": true, "enumValues": ["grant", "decline"] }, { "name": "grant_kind", "flag": "grant-kind", "type": "enum", "required": false, "enumValues": ["allow_once", "permanent"] }, { "name": "action_digest", "flag": "action-digest", "type": "string", "required": false }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "Grant (one-time, exact-action) or decline a blocked agent intervention; a grant writes the human decision and enqueues the linked continuation, a permanent grant returns requires_charter_resign instead of widening authority. Human steward/admin only." },
|
|
58029
|
+
{ "id": "agent_grant_intervention.list", "namespace": "agent_grant_intervention", "action": "list", "title": "List blocked-awaiting-grant interventions", "description": "List durable blocked-awaiting-grant agent interventions with their missing grant, blocker kind, checkpoint, and decision state. Returns secret-scrubbed metadata only. A seat-scoped caller is clamped to its own seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "include_decided", "flag": "include-decided", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "List durable blocked-awaiting-grant agent interventions with the exact missing grant, blocker kind, checkpoint, and decision state. Secret-scrubbed metadata only; a seat-scoped caller is clamped to its own seat." },
|
|
58030
|
+
{ "id": "agent_grant_intervention.resume", "namespace": "agent_grant_intervention", "action": "resume", "title": "Resume a granted agent intervention", "description": "Retry ONLY the continuation enqueue for an already-granted blocked intervention whose enqueue did not complete. Never re-grants authority (the one-time grant is already committed). Human steward/admin only.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "intervention_id", "flag": "intervention-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Retry only the continuation enqueue for an already-granted intervention whose enqueue did not complete; never re-grants authority. Human steward/admin only." },
|
|
58031
|
+
{ "id": "agent_setup.capability_suggestions", "namespace": "agent_setup", "action": "capability_suggestions", "title": "Suggest setup capability grants", "description": "Return deterministic minimum capability suggestions from a stock template and current tenant grant availability. No model call and no authority mutation.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "setup_id", "flag": "setup-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Suggest deterministic minimum capability grants from the setup/template and current tenant grant availability. No model call and no mutation." },
|
|
58032
|
+
{ "id": "agent_setup.get", "namespace": "agent_setup", "action": "get", "title": "Get agent setup", "description": "Read the resumable agent-setup state: mode, parent, steward, template, lane, schedule, tool decisions, dry run, and next action.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "setup_id", "flag": "setup-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Read the resumable setup state: mode, parent, steward, lane, schedule, tool decisions, dry-run blockers, and the next action." },
|
|
58033
|
+
{ "id": "agent_setup.relane", "namespace": "agent_setup", "action": "relane", "title": "Re-lane a live agent", "description": "Governed re-lane of a live agent: pause, move to the new lane, force a fresh dry-run rehearsal on that lane, then go live. Owner-only and human-gated; records a rationale.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "lane", "flag": "lane", "type": "enum", "required": true, "enumValues": ["cloud", "mcp_session", "runner"] }, { "name": "reason", "flag": "reason", "type": "string", "required": true }], "hasComplexInput": false, "help": "Re-lane a live agent (cloud / runner / mcp_session): it pauses, moves to the new lane, forces a fresh dry-run rehearsal on that lane, then goes live \u2014 owner-only, human-gated, with a required rationale. A runner target needs a paired runner; a failed rehearsal leaves the agent paused on the new lane." },
|
|
58034
|
+
{ "id": "agent_setup.start", "namespace": "agent_setup", "action": "start", "title": "Start agent setup", "description": "Start (or resume) a draft agent setup for a seat in template, custom, or existing mode.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "mode", "flag": "mode", "type": "enum", "required": true, "enumValues": ["template", "custom", "existing"] }, { "name": "template_slug", "flag": "template-slug", "type": "string", "required": false }], "hasComplexInput": false, "help": "Start a draft agent setup from a template, custom, or existing mode; the setup resumes from the draft agent and Charter, not a fresh start." },
|
|
58035
|
+
{ "id": "agent_setup.update", "namespace": "agent_setup", "action": "update", "title": "Update agent setup", "description": "Update the draft agent's parent, steward, lane, schedule, operational answers, and tool decisions.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "parent_seat_id", "flag": "parent-seat-id", "type": "string", "required": false }, { "name": "steward_seat_id", "flag": "steward-seat-id", "type": "string", "required": false }, { "name": "lane", "flag": "lane", "type": "enum", "required": false, "enumValues": ["cloud", "mcp_session", "runner"] }, { "name": "schedule_cron", "flag": "schedule-cron", "type": "string", "required": false }, { "name": "turn_timeout_seconds", "flag": "turn-timeout-seconds", "type": "integer", "required": false }, { "name": "answers", "flag": "answers", "type": "array", "required": false, "itemType": "string" }, { "name": "skill_discovery_enabled", "flag": "skill-discovery-enabled", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Update parent, steward, lane, schedule, answers, or tool decisions on the draft; steward and parent changes keep the no-orphan chain explicit." },
|
|
58036
|
+
{ "id": "agent_template.list", "namespace": "agent_template", "action": "list", "title": "List agent templates", "description": "List stock agent templates and their responsibilities, default tools, and dry-run rehearsal.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List stock agent templates and their default tools and safety boundaries before starting a template setup." },
|
|
58037
|
+
{ "id": "agent.activation_receipt", "namespace": "agent", "action": "activation_receipt", "title": "Build agent activation receipt", "description": "Read the compiled authority receipt for one agent: effective capabilities, connection metadata, stale-scope digest, budget, and always-human boundary.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "proposed_budget_cents", "flag": "proposed-budget-cents", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Build the current compiled activation receipt before signing or creating a Trusted grant. Rebuild it after any Charter, capability, connection, schedule, or lane change." },
|
|
58038
|
+
{ "id": "agent.activation_sign", "namespace": "agent", "action": "activation_sign", "title": "Sign agent activation receipt", "description": "Human steward/admin activation sign-off for the current compiled receipt digest. Refuses stale receipts and records a human decision plus append-only event.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "expected_scope_digest", "flag": "expected-scope-digest", "type": "string", "required": true }, { "name": "budget_cents", "flag": "budget-cents", "type": "integer", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Human steward/admin sign-off for the exact activation receipt digest. Agents can surface the pending confirmation but cannot sign their own authority." },
|
|
58039
|
+
{ "id": "agent.configure_tools", "namespace": "agent", "action": "configure_tools", "title": "Configure agent tools", "description": "Save tool proposals, declines, and credential-ingress requests for a draft agent. Never stores or echoes secret material; vault refs only.", "requiredScope": "seat", "confirmation": "credential_flow", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": true, "help": "Connect or decline proposed tools and stage credential-ingress requests; never place raw secrets here \u2014 secrets flow through vault-backed credential.ingress as vault refs only.", "example": { "seat_id": "0190aaaa-aaaa-7aaa-8aaa-aaaaaaaaaaaa", "tool_decisions": [{ "tool": "ap.invoices.read", "decision": "connect" }, { "tool": "email.draft", "decision": "connect" }] } },
|
|
58040
|
+
{ "id": "agent.create_custom", "namespace": "agent", "action": "create_custom", "title": "Create custom agent", "description": "Create a draft custom agent shell and a draft Charter seed from operational answers (what it owns, success, never-do-alone, steward).", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "steward_seat_id", "flag": "steward-seat-id", "type": "string", "required": false }, { "name": "lane", "flag": "lane", "type": "enum", "required": false, "enumValues": ["cloud", "mcp_session", "runner"] }, { "name": "what_it_owns", "flag": "what-it-owns", "type": "string", "required": false }, { "name": "what_success_looks_like", "flag": "what-success-looks-like", "type": "string", "required": false }, { "name": "what_it_must_never_do_alone", "flag": "what-it-must-never-do-alone", "type": "string", "required": false }], "hasComplexInput": true, "help": "Create a draft custom agent from operational answers (what it owns, success, never-do-alone, steward); the Charter Builder owns the contract and go-live stays human-gated.", "example": { "seat_id": "0190aaaa-aaaa-7aaa-8aaa-aaaaaaaaaaaa", "steward_seat_id": "0190bbbb-bbbb-7bbb-8bbb-bbbbbbbbbbbb", "lane": "cloud", "what_it_owns": "Drafting AP invoice entries from inbound vendor emails for human review.", "what_success_looks_like": "Every inbound invoice is drafted within one business day with the correct GL coding.", "what_it_must_never_do_alone": "Never send payment or approve an invoice without a human sign-off." } },
|
|
58041
|
+
{ "id": "agent.create_from_template", "namespace": "agent", "action": "create_from_template", "title": "Create agent from template", "description": "Create a draft stock agent and draft Charter from a stock template. Creates the agent occupancy only when a human steward chain resolves; the agent stays draft until a signed manifest, a passed dry run, and human go-live.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "template_slug", "flag": "template-slug", "type": "string", "required": true }, { "name": "expected_template_version", "flag": "expected-template-version", "type": "string", "required": false }], "hasComplexInput": false, "help": "Create a draft stock agent and draft Charter from a template; the agent occupancy is created only when a human steward chain resolves, and the agent stays draft until a signed manifest, a passed dry run, and human go-live." },
|
|
58042
|
+
{ "id": "agent.decommission", "namespace": "agent", "action": "decommission", "title": "Decommission agent", "description": "Retire an agent occupancy safely. Blocks if it would leave another live agent without a human steward chain.", "requiredScope": "tenant", "confirmation": "dangerous", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Retire an agent occupancy safely; the no-orphan guard blocks any decommission that would leave another live agent without a human steward chain." },
|
|
58043
|
+
{ "id": "agent.fleet_digest", "namespace": "agent", "action": "fleet_digest", "title": "Get dogfood fleet health digest", "description": "Return a daily tenant fleet health digest with live/idle state, run counts, spend, failed runs, unresolved product errors, notification errors, and next actions.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "window_hours", "flag": "window-hours", "type": "integer", "required": false }, { "name": "error_limit", "flag": "error-limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Capture a daily dogfood fleet health digest with fleet state, run counts, spend, failed runs, unresolved errors, failed notifications, and next actions." },
|
|
58044
|
+
{ "id": "agent.get_run", "namespace": "agent", "action": "get_run", "title": "Get agent run diagnostics", "description": "Return one seat run's diagnostic record: run status, transcript reference, token/cost usage, outcome, and linked product-visible run errors.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "run_id", "flag": "run-id", "type": "string", "required": true }, { "name": "transcript", "flag": "transcript", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Read one run's diagnostic record, transcript reference, token/cost usage, outcome, and linked product-visible errors." },
|
|
58045
|
+
{ "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" } },
|
|
58046
|
+
{ "id": "agent.import_definition", "namespace": "agent", "action": "import_definition", "title": "Import agent definition", "description": "Import a versioned ROST agent definition into a 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." },
|
|
58047
|
+
{ "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, 7-day real-run spend, and the health/work-progress axes the web fleet page renders (health status, work evidence, work progress, host-resource pressure).", "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." },
|
|
58048
|
+
{ "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)." },
|
|
58049
|
+
{ "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. 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." },
|
|
58050
|
+
{ "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." },
|
|
58051
|
+
{ "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." },
|
|
58052
|
+
{ "id": "agent.run_dry_run", "namespace": "agent", "action": "run_dry_run", "title": "Run agent dry run", "description": "Run the sandbox dry run for a draft agent. Durable and idempotent per Charter version; a passed result is reused, never re-run.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Run the sandbox dry run for a draft agent after the manifest is signed; the result is durable and idempotent per Charter version, and a passed run is reused.", "example": { "seat_id": "0190aaaa-aaaa-7aaa-8aaa-aaaaaaaaaaaa", "charter_version_id": "0190cccc-cccc-7ccc-8ccc-cccccccccccc" } },
|
|
58053
|
+
{ "id": "agent.run_heartbeats", "namespace": "agent", "action": "run_heartbeats", "title": "Get run heartbeats", "description": "Reads the per-seat run-heartbeat roll-up for long-running agent programs. Every roll-up is cross-checked against durable tool-call/event evidence, so a renewing lease alone never reports healthy: `state` is working, quiet_healthy, recovered, stalled, or unavailable. `unavailable` means that evidence check could not be performed \u2014 treat it as unknown, not healthy and not stalled, and branch on `state` rather than the `stalled` boolean.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_ids", "flag": "seat-ids", "type": "array", "required": false, "itemType": "string" }], "hasComplexInput": false, "help": "Read the per-seat run-heartbeat roll-up to tell a quiet-but-healthy long-running agent program apart from a stalled one, or from one whose durable-evidence check could not be performed (state unavailable)." },
|
|
58054
|
+
{ "id": "agent.run_now", "namespace": "agent", "action": "run_now", "title": "Run agent now", "description": "Queue and dispatch a manual production run for a live cloud or runner agent on a seat. task_id is cloud-lane only; a runner-lane agent rejects it.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "task_id", "flag": "task-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Queue and dispatch a manual production run without changing the agent's saved schedule. A human with authority runs it directly; a same-Seat agent may auto-execute only under a bounded Trusted standing authorization, while a cross-Seat agent request requires a human. task_id is cloud-lane only; a runner-lane agent rejects it." },
|
|
58055
|
+
{ "id": "agent.show_markdown", "namespace": "agent", "action": "show_markdown", "title": "Show agent setup as markdown", "description": "Compose a seat's agent setup, steward, model, tools, and Charter into a clean, human-skimmable markdown card for review.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Render a seat's agent setup, model, steward, tools, and Charter as a clean markdown card to show your human a quick review." },
|
|
58056
|
+
{ "id": "agent.status", "namespace": "agent", "action": "status", "title": "Get agent status", "description": "Return the agent occupancy, lane, schedule, live/offline state, steward chain, dry-run result, and Runner availability for a seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Check an agent's lane, live state, steward chain, dry-run result, and Runner availability before relying on it." },
|
|
58057
|
+
{ "id": "agent.trust.create", "namespace": "agent", "action": "trust.create", "title": "Create agent Trusted grant", "description": "Create a bounded Trusted execution grant for a live agent after a human steward/admin signs the current activation receipt digest. When Company Guardrails are enforced, max_autonomous_risk must be at least high; observe mode remains non-blocking.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "expected_scope_digest", "flag": "expected-scope-digest", "type": "string", "required": true }, { "name": "budget_cents", "flag": "budget-cents", "type": "integer", "required": true }, { "name": "expires_at", "flag": "expires-at", "type": "string", "required": false }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Create a bounded Trusted execution grant only after reviewing the activation receipt digest, budget, and always-human boundary. Human steward/admin only. When Company Guardrails are enforced, the autonomy ceiling must be at least high; observe mode remains non-blocking." },
|
|
58058
|
+
{ "id": "agent.trust.expire", "namespace": "agent", "action": "trust.expire", "title": "Expire agent Trusted grants", "description": "Human steward/admin maintenance command that marks overdue active Trusted grants expired and appends an event for each expired grant.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Mark overdue active Trusted grants expired and append audit events. Human steward/admin only." },
|
|
58059
|
+
{ "id": "agent.trust.inspect", "namespace": "agent", "action": "trust.inspect", "title": "Inspect agent Trusted grants", "description": "Read active or historical Trusted execution grants for one agent. Returns metadata only, never secrets.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "include_inactive", "flag": "include-inactive", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Inspect active or historical Trusted grants for one agent. Metadata only; no secrets or vault refs." },
|
|
58060
|
+
{ "id": "agent.trust.revoke", "namespace": "agent", "action": "trust.revoke", "title": "Revoke agent Trusted grant", "description": "Human steward/admin revocation for an active Trusted execution grant. Preserves the historical grant row and appends an event.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "grant_id", "flag": "grant-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Revoke an active Trusted grant while preserving history. Human steward/admin only." },
|
|
58061
|
+
{ "id": "agent.trust.supersede", "namespace": "agent", "action": "trust.supersede", "title": "Supersede agent Trusted grant", "description": "Human steward/admin replacement for an active Trusted grant. Refuses stale receipt digests and requires expected_grant_id to bind the exact reviewed active row before linking the replacement. Denied unless the tenant's company autonomy ceiling permits Trusted grants; refuses when no active grant exists and never creates one.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "expected_scope_digest", "flag": "expected-scope-digest", "type": "string", "required": true }, { "name": "budget_cents", "flag": "budget-cents", "type": "integer", "required": true }, { "name": "expires_at", "flag": "expires-at", "type": "string", "required": false }, { "name": "reason", "flag": "reason", "type": "string", "required": false }, { "name": "expected_grant_id", "flag": "expected-grant-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Replace the active Trusted grant with a fresh digest and budget. Rebuild the receipt first; stale digests are refused. Same company-autonomy-ceiling precondition as agent.trust.create; refused when no active grant exists to replace. The required expected_grant_id must match the currently active grant or the call is refused." },
|
|
58062
|
+
{ "id": "agent.update_schedule", "namespace": "agent", "action": "update_schedule", "title": "Update agent schedule", "description": "Set or clear the scheduled execution cron for a draft or live agent on a seat.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "schedule_cron", "flag": "schedule-cron", "type": "string", "required": true }, { "name": "schedule_timezone", "flag": "schedule-timezone", "type": "string", "required": false }], "hasComplexInput": false, "help": "Set or clear an agent's scheduled execution; a live scheduled agent must keep a steward chain resolving to a human." },
|
|
58063
|
+
{ "id": "agent.watch_run", "namespace": "agent", "action": "watch_run", "title": "Watch agent run", "description": "Return a read-only live snapshot of one seat run: run status and lane, the derived current work-state, the run-heartbeat (quiet-but-healthy vs stalled) with current phase, the persisted session transcript, and the run's tool-call step feed (tool name, guard result, outcome). 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": "run_id", "flag": "run-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Watch one run live (read-only): run status, derived work-state, quiet-vs-stalled heartbeat, transcript, and the tool-call step feed." },
|
|
58064
|
+
{ "id": "aicos.brain_settings.get", "namespace": "aicos", "action": "brain_settings.get", "title": "Get AICOS brain settings", "description": "Read the AICOS run lane and brain selection. Returns labels and enum settings only; no secrets or vault refs.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read the AICOS lane and brain selection labels without returning provider keys, vault refs, or runner secrets." },
|
|
58065
|
+
{ "id": "aicos.brain_settings.update", "namespace": "aicos", "action": "brain_settings.update", "title": "Update AICOS brain settings", "description": "Update the AICOS lane and cloud/runner brain preferences. Owner-only and audited.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "lane", "flag": "lane", "type": "enum", "required": false, "enumValues": ["cloud", "runner", "mcp"] }, { "name": "cloud_brain", "flag": "cloud-brain", "type": "enum", "required": false, "enumValues": ["managed", "byok"] }, { "name": "runner_brain", "flag": "runner-brain", "type": "enum", "required": false, "enumValues": ["claude-cli", "codex-cli"] }, { "name": "cloud_model_slug", "flag": "cloud-model-slug", "type": "string", "required": false }], "hasComplexInput": false, "help": "Owner-only update for AICOS cloud managed/BYOK and runner Claude/Codex preferences; BYOK requires an active tenant Anthropic key." },
|
|
58066
|
+
{ "id": "cascade.import", "namespace": "cascade", "action": "import", "title": "Import Rocks from a ninety Rocks export", "description": "Bulk-import a ninety Rocks export into the Cascade as cycle goals under a company objective in the active cycle. Owners are seat names resolved to seats. Requires an active cycle and a target company objective (auto-selected when exactly one exists, else pass parent_objective_id). Idempotent \u2014 re-importing the same export is a no-op, and an existing cycle goal with the same objective + seat + title is skipped.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "dry_run", "flag": "dry-run", "type": "boolean", "required": false }, { "name": "parent_objective_id", "flag": "parent-objective-id", "type": "string", "required": false }], "hasComplexInput": true, "help": "Import a ninety Rocks export into the Cascade as cycle goals under a company objective in the active cycle; owners resolve to seats." },
|
|
58067
|
+
{ "id": "cascade.import_okrs", "namespace": "cascade", "action": "import_okrs", "title": "Import objectives and key results from a generic OKR CSV", "description": "Bulk-import a generic OKR export (objectives + key results) into the Cascade. Company objectives become company_objective goals; seat objectives become seat goals under the resolved company objective; metric key results become measurables bound informs to their objective; milestone key results become milestone goals under a seat objective. Owners are seat names resolved to seats; requires an active cycle. Idempotent \u2014 re-importing the same file is a no-op; existing goals/measurables/bindings are matched, never duplicated.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "dry_run", "flag": "dry-run", "type": "boolean", "required": false }, { "name": "parent_objective_id", "flag": "parent-objective-id", "type": "string", "required": false }], "hasComplexInput": true, "help": "Import a generic OKR CSV (objectives + key results) into the Cascade; objectives become goals, metric KRs become measurables bound informs, milestone KRs become milestone goals; owners resolve to seats." },
|
|
58068
|
+
{ "id": "charter.apply_seat_type_recommendation", "namespace": "charter", "action": "apply_seat_type_recommendation", "title": "Apply Charter seat-type recommendation", "description": "Apply the seat-type recommendation from a draft Charter.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Apply seat-type recommendations only after the Charter clarifies work shape, risk, and Steward accountability." },
|
|
58069
|
+
{ "id": "charter.approve", "namespace": "charter", "action": "approve", "title": "Approve charter", "description": "Approve a draft Charter as a human owner.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": false }, { "name": "expected_edit_revision", "flag": "expected-edit-revision", "type": "integer", "required": false }, { "name": "apply_seat_type", "flag": "apply-seat-type", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Charter approval is a human decision that activates the seat's operating contract." },
|
|
58070
|
+
{ "id": "charter.draft", "namespace": "charter", "action": "draft", "title": "Draft charter", "description": "Create or fetch a draft Charter for a seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Draft Charters that define purpose, responsibilities, decision authority, measurables, tools, budget, and escalation; the charter authoring deep-dive shows what good looks like per field." },
|
|
58071
|
+
{ "id": "charter.draft_all", "namespace": "charter", "action": "draft_all", "title": "Draft all charters", "description": "Draft Charters for every eligible seat in a tenant.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Draft Charters in onboarding order after the Responsibility Graph has enough seat clarity.", "example": {} },
|
|
58072
|
+
{ "id": "charter.get", "namespace": "charter", "action": "get", "title": "Get Charter", "description": "Return a Charter version with its supersession history and latest dry-run status.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Read a Charter with its supersession history and dry-run status before approving or signing a manifest." },
|
|
58073
|
+
{ "id": "charter.list", "namespace": "charter", "action": "list", "title": "List Charters", "description": "List Charter versions in the tenant, optionally filtered by seat or status.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["draft", "active", "superseded"] }], "hasComplexInput": false, "help": "List Charter versions to find the right draft or active version id before reading or amending it." },
|
|
58074
|
+
{ "id": "charter.preview_signal_reconciliation", "namespace": "charter", "action": "preview_signal_reconciliation", "title": "Preview Charter Signal reconciliation", "description": "Owner-only dry run: for each Signal a draft Charter declares, show whether it is already linked, which existing Signals match its name, who owns them, how much reading history and how many goal links they carry, the action that fits, and what it would cost. Reads only \u2014 nothing is changed. Approval needs an explicit choice only for a declaration that COLLIDES with an existing Signal and is not already linked: a declaration nothing matches is created automatically, and one already linked to a Signal takes no choice.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Preview first. Approval requires an explicit choice when an exact-name active Signal exists: adopt it if it is already owned by the Charter Seat, move it if another Seat owns it, or deliberately create a second Signal. Adoption and movement preserve the Signal ID, readings, and compatible goal bindings." },
|
|
58075
|
+
{ "id": "charter.reconcile_signals", "namespace": "charter", "action": "reconcile_signals", "title": "Reconcile Charter Signals", "description": "Owner-only: approve a draft Charter with an explicit decision for each declared Signal that collides with one the company already tracks and is not already linked to one \u2014 adopt the existing Signal when this Seat owns it, move it to this Seat, or deliberately create a second one. Adoption and movement keep the Signal's id, its readings, and its compatible goal links. Preview first, and pass that preview's edit_revision.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }, { "name": "expected_edit_revision", "flag": "expected-edit-revision", "type": "integer", "required": true }, { "name": "apply_seat_type", "flag": "apply-seat-type", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Owner-only Charter approval carrying one explicit decision per COLLIDING, UNLINKED Signal declaration \u2014 a declaration nothing matches is created automatically, and an already-linked one takes no choice. Take the preview first and pass its edit_revision; adoption and movement keep the Signal's id, readings, and compatible goal bindings, and a cross-Seat status driver blocks a move." },
|
|
58076
|
+
{ "id": "charter.set", "namespace": "charter", "action": "set", "title": "Set charter", "description": "Create or replace a seat's draft Charter from a full document in one call; approve activates it as a human owner.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "approve", "flag": "approve", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Create or replace a seat's draft Charter from a full document in one call; read the charter authoring deep-dive first. Approving activates the seat's contract and is a human decision.", "example": { "seat_id": "0190aaaa-aaaa-7aaa-8aaa-aaaaaaaaaaaa", "doc": { "payload_version": 1, "purpose": "AP intake clerk: draft accounts-payable invoice entries from inbound vendor emails for human review.", "accountabilities": [{ "title": "Draft every inbound invoice", "description": "Convert each inbound vendor invoice into a draft AP entry with the correct vendor, amount, and GL coding within one business day." }, { "title": "Flag discrepancies", "description": "Surface duplicate, mismatched, or out-of-policy invoices as Friction issues instead of drafting them silently." }], "decision_authority": { "autonomous": [{ "action": "Draft AP entries and propose GL coding from inbound invoices", "condition": "Allowed when the vendor is known and the amount is within the standard purchase range.", "rationale": "Drafting is reversible and reviewed by a human before posting.", "unanswered_boundary": false }], "approval": [{ "action": "Post an invoice or send any vendor-facing message", "condition": "Require explicit human approval before posting or sending.", "rationale": "Posting and sending are durable, money-moving actions.", "unanswered_boundary": false }], "escalate": [{ "action": "Unknown vendor, payment over the approval threshold, or a suspected duplicate", "condition": "Always escalate to the Steward before acting.", "rationale": "Conservative default for ambiguous, irreversible, or financial exposure.", "unanswered_boundary": true }] }, "escalation_rules": ["Escalate any invoice over $5,000 or from a vendor not already in the ledger.", "Escalate when an invoice appears to duplicate one already drafted or posted."], "measurables": [{ "name": "Invoices drafted within one business day", "target": "100%", "cadence": "weekly", "source": "agent" }, { "name": "Discrepancies caught before posting", "target": "\u2265 95%", "cadence": "monthly", "source": "human" }], "permission_manifest": [{ "tool": "ap.invoices.read", "scope": "Read inbound invoices and the vendor ledger.", "granted": true, "rationale": "Needed to draft entries from source invoices." }, { "tool": "email.draft", "scope": "Draft vendor replies for human review; never send.", "granted": true, "rationale": "Lets the seat prepare clarifications without taking a send action." }], "budget": { "monthly_usd": null, "approval_required_over_usd": 0, "notes": "No autonomous spend; any spend requires Steward approval until a budget is set." }, "unanswered_boundaries": ["Approval threshold for auto-posting", "Vendor onboarding authority"], "seat_type_recommendation": { "recommendation": "agent", "rationale": "The work is high-volume, rule-bound, and fully reviewable, which suits a draft-and-confirm agent under a human Steward.", "confidence": 0.8 } }, "approve": false } },
|
|
58077
|
+
{ "id": "charter.show_markdown", "namespace": "charter", "action": "show_markdown", "title": "Show Charter as markdown", "description": "Compose a seat's active or latest Charter into a clean, human-skimmable markdown card for review.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Render a seat's active or latest Charter as a clean markdown card to show your human a quick review." },
|
|
58078
|
+
{ "id": "charter.sign_manifest", "namespace": "charter", "action": "sign_manifest", "title": "Sign charter manifest", "description": "Request human confirmation for a Charter permission manifest.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Sign tool manifests only when the Charter explains why the tool is needed and how it is bounded." },
|
|
58079
|
+
{ "id": "charter.skip", "namespace": "charter", "action": "skip", "title": "Skip charter draft", "description": "Mark a draft Charter as skipped.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Skip a Charter only when the seat is intentionally out of scope for the current onboarding pass." },
|
|
58080
|
+
{ "id": "charter.update_draft", "namespace": "charter", "action": "update_draft", "title": "Update charter draft", "description": "Update a draft Charter document.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }, { "name": "expected_edit_revision", "flag": "expected-edit-revision", "type": "integer", "required": false }], "hasComplexInput": true, "help": "Submit the full Charter document directly (purpose, decision_authority, escalation_rules, measurables, budget, permission_manifest); read the charter authoring deep-dive for what good looks like per field. Durable authority changes still need human approval.", "example": { "charter_version_id": "0190cccc-cccc-7ccc-8ccc-cccccccccccc", "doc": { "payload_version": 1, "purpose": "AP intake clerk: draft accounts-payable invoice entries from inbound vendor emails for human review.", "accountabilities": [{ "title": "Draft every inbound invoice", "description": "Convert each inbound vendor invoice into a draft AP entry with the correct vendor, amount, and GL coding within one business day." }, { "title": "Flag discrepancies", "description": "Surface duplicate, mismatched, or out-of-policy invoices as Friction issues instead of drafting them silently." }], "decision_authority": { "autonomous": [{ "action": "Draft AP entries and propose GL coding from inbound invoices", "condition": "Allowed when the vendor is known and the amount is within the standard purchase range.", "rationale": "Drafting is reversible and reviewed by a human before posting.", "unanswered_boundary": false }], "approval": [{ "action": "Post an invoice or send any vendor-facing message", "condition": "Require explicit human approval before posting or sending.", "rationale": "Posting and sending are durable, money-moving actions.", "unanswered_boundary": false }], "escalate": [{ "action": "Unknown vendor, payment over the approval threshold, or a suspected duplicate", "condition": "Always escalate to the Steward before acting.", "rationale": "Conservative default for ambiguous, irreversible, or financial exposure.", "unanswered_boundary": true }] }, "escalation_rules": ["Escalate any invoice over $5,000 or from a vendor not already in the ledger.", "Escalate when an invoice appears to duplicate one already drafted or posted."], "measurables": [{ "name": "Invoices drafted within one business day", "target": "100%", "cadence": "weekly", "source": "agent" }, { "name": "Discrepancies caught before posting", "target": "\u2265 95%", "cadence": "monthly", "source": "human" }], "permission_manifest": [{ "tool": "ap.invoices.read", "scope": "Read inbound invoices and the vendor ledger.", "granted": true, "rationale": "Needed to draft entries from source invoices." }, { "tool": "email.draft", "scope": "Draft vendor replies for human review; never send.", "granted": true, "rationale": "Lets the seat prepare clarifications without taking a send action." }], "budget": { "monthly_usd": null, "approval_required_over_usd": 0, "notes": "No autonomous spend; any spend requires Steward approval until a budget is set." }, "unanswered_boundaries": ["Approval threshold for auto-posting", "Vendor onboarding authority"], "seat_type_recommendation": { "recommendation": "agent", "rationale": "The work is high-volume, rule-bound, and fully reviewable, which suits a draft-and-confirm agent under a human Steward.", "confidence": 0.8 } } } },
|
|
58081
|
+
{ "id": "coach.draft_guide", "namespace": "coach", "action": "draft_guide", "title": "Draft accountability discussion guide", "description": "Draft a private discussion guide for the accountable human about a seat's commitment pattern. Read-only and human-only \u2014 it is never delivered, sent, or written to the coached person's record.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Draft a private accountability discussion guide for the accountable human from a seat's commitment pattern. Never delivered or written to the coached person's record." },
|
|
58082
|
+
{ "id": "command.describe", "namespace": "command", "action": "describe", "title": "Describe command", "description": "Return a command's exact input/output JSON Schema, scope, confirmation gate, help pointer, guides, a validated example, and related commands. Run this before calling a mutating command.", "requiredScope": "user", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Run command.describe before calling a mutating command to read its exact input/output schema and a worked example; on a failure, read the error's help field and run the command it names." },
|
|
58083
|
+
{ "id": "command.list", "namespace": "command", "action": "list", "title": "List commands", "description": "List every callable command id with its title, required scope, confirmation gate, and onboarding stages. Use 'command.describe' for a single command's full contract.", "requiredScope": "user", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List the callable command surface, then use command.describe for the exact contract of the one you need." },
|
|
58084
|
+
{ "id": "compass.alignment", "namespace": "compass", "action": "alignment", "title": "Check Compass alignment", "description": "Advisory drift check: scores whether cycle goals still ladder up to the active vision and flags orphan/contradictory goals. Read-only \u2014 it never edits the Compass or any goal.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Advisory drift check: scores whether cycle goals still ladder to the active vision and flags orphan/contradictory goals. Read-only." },
|
|
58085
|
+
{ "id": "compass.answer_gap", "namespace": "compass", "action": "answer_gap", "title": "Answer Compass gap", "description": "Record a human answer for a Compass gap and create a replacement draft.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "gap_id", "flag": "gap-id", "type": "string", "required": true }, { "name": "answer", "flag": "answer", "type": "string", "required": true }], "hasComplexInput": false, "help": "Answer Compass gaps with explicit human input before turning direction into graph, Charter, or Cascade decisions." },
|
|
58086
|
+
{ "id": "compass.approve_version", "namespace": "compass", "action": "approve_version", "title": "Approve Compass version", "description": "Activate a Compass version by supersession.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "draft_id", "flag": "draft-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Compass approval is a human decision and should anchor later Cascade commitments." },
|
|
58087
|
+
{ "id": "compass.draft", "namespace": "compass", "action": "draft", "title": "Draft Compass", "description": "Create a Compass draft version.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": true, "help": "Submit a full Compass document; read the Compass authoring guide for the field-by-field contract and worked examples before drafting. Drafting is safe for an agent; approving a version is a human act.", "example": { "doc": { "schema_version": 1, "purpose": { "value": "Help small manufacturers ship quality products on time.", "citations": [], "confidence": 0.9, "placeholder": false }, "principles": [{ "value": "Bias to action; decide with the information we have.", "citations": [], "confidence": 0.9, "placeholder": false }, { "value": "Customers feel the quality of every order.", "citations": [], "confidence": 0.9, "placeholder": false }], "horizon_goals": { "three_year": { "title": { "value": "Reach $10M ARR with a 25-person team", "citations": [], "confidence": 0.9, "placeholder": false }, "definition_of_done": { "value": "ARR is at or above $10M and team headcount is 25 with no key-role gaps.", "citations": [], "confidence": 0.9, "placeholder": false }, "horizon": "three_year" }, "one_year": { "title": { "value": "Hit $3M ARR and 99% on-time delivery", "citations": [], "confidence": 0.9, "placeholder": false }, "definition_of_done": { "value": "Trailing-12-month ARR \u2265 $3M and on-time delivery rate \u2265 99% for two consecutive quarters.", "citations": [], "confidence": 0.9, "placeholder": false }, "horizon": "one_year" } }, "cycle_objectives": [{ "title": { "value": "Cut order-to-ship cycle time by 20%", "citations": [], "confidence": 0.9, "placeholder": false }, "definition_of_done": { "value": "Median order-to-ship time is 20% lower than the prior cycle baseline.", "citations": [], "confidence": 0.9, "placeholder": false }, "horizon": "cycle" }], "gaps": [], "follow_up_tasks": [], "source_ids": [] } } },
|
|
58088
|
+
{ "id": "compass.get_current", "namespace": "compass", "action": "get_current", "title": "Get current Compass", "description": "Return the active and draft Compass versions plus the source documents that informed them.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read the active and draft Compass before drafting goals or recommending direction changes." },
|
|
58089
|
+
{ "id": "compass.import", "namespace": "compass", "action": "import", "title": "Import a ninety V/TO into a Compass draft", "description": "AI-draft a Compass from a ninety V/TO (values -> principles, 10/3/1-year -> horizons, Rocks -> cycle objectives). Produces a DRAFT a human confirms by supersession; never writes an accepted Compass.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "dry_run", "flag": "dry-run", "type": "boolean", "required": false }, { "name": "source_name", "flag": "source-name", "type": "string", "required": false }, { "name": "text", "flag": "text", "type": "string", "required": true }], "hasComplexInput": false, "help": "AI-draft a Compass from a ninety V/TO (values -> principles, 10/3/1-year -> horizons, Rocks -> cycle objectives). Lands a draft a human confirms; idempotent by document content." },
|
|
58090
|
+
{ "id": "compass.list_gaps", "namespace": "compass", "action": "list_gaps", "title": "List Compass gaps", "description": "Return unanswered and answered Compass context gaps for the latest draft or active version.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List unanswered Compass gaps so a human can answer them before direction anchors graph or Cascade work." },
|
|
58091
|
+
{ "id": "compass.reject_draft", "namespace": "compass", "action": "reject_draft", "title": "Reject Compass draft", "description": "Reject and remove a draft Compass version.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "draft_id", "flag": "draft-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Reject Compass drafts when the direction, language, or company intent is not ready to anchor implementation." },
|
|
58092
|
+
{ "id": "compass.set", "namespace": "compass", "action": "set", "title": "Set Compass", "description": "Compatibility command for the DER-626 MCP Compass tool.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "draft_id", "flag": "draft-id", "type": "string", "required": false }, { "name": "approve", "flag": "approve", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Set Compass drafts in the product's own vocabulary and approve only with explicit human confirmation." },
|
|
58093
|
+
{ "id": "compass.show_markdown", "namespace": "compass", "action": "show_markdown", "title": "Show Compass as markdown", "description": "Compose the current Compass and its open gaps into a clean, human-skimmable markdown card for review.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Render the current Compass and its open gaps as a clean markdown card to show your human a quick review." },
|
|
58094
|
+
{ "id": "compass.update_draft", "namespace": "compass", "action": "update_draft", "title": "Update Compass draft", "description": "Replace a draft Compass document.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "draft_id", "flag": "draft-id", "type": "string", "required": true }], "hasComplexInput": true, "help": "Pass the compass_version_id returned by compass.draft as draft_id; update_draft replaces only an unpublished draft in this tenant." },
|
|
58095
|
+
{ "id": "confirmation.activation_set.list", "namespace": "confirmation", "action": "activation_set.list", "title": "List activation approval sets", "description": "List agent-authored activation confirmation sets that the caller can review.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Review the routine activation confirmations from one implementation run before approving them in dependency order. Sensitive, dangerous, and previously-failed confirmations are not in this set \u2014 they stay in the general confirmation list (confirmation.list) and are approved individually. Each redacted_args is a partial projection of the proposal: content may be omitted, and no surface today renders it in full." },
|
|
58096
|
+
{ "id": "confirmation.approve", "namespace": "confirmation", "action": "approve", "title": "Approve pending confirmation", "description": "Approve an in-flight confirmation and execute the original command as the approving human.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "confirmation_id", "flag": "confirmation-id", "type": "string", "required": true }, { "name": "reviewed", "flag": "reviewed", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Approve pending confirmations only when the requested durable change is clear to the human owner." },
|
|
58097
|
+
{ "id": "confirmation.dismiss", "namespace": "confirmation", "action": "dismiss", "title": "Dismiss an expired confirmation", "description": "Clear a single expired, unactioned confirmation from the queue without re-executing the original command.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "confirmation_id", "flag": "confirmation-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Clear a single expired, unactioned confirmation from the queue. Dismiss is human-only queue hygiene \u2014 it never re-executes the original command." },
|
|
58098
|
+
{ "id": "confirmation.dismiss_stale", "namespace": "confirmation", "action": "dismiss_stale", "title": "Dismiss all expired confirmations", "description": "Clear every expired, unactioned confirmation in your authority scope from the queue without re-executing any command.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Clear every expired, unactioned confirmation in your authority scope at once. Each dismissal is audited; none re-executes the original command." },
|
|
58099
|
+
{ "id": "confirmation.list", "namespace": "confirmation", "action": "list", "title": "List pending confirmations", "description": "List in-flight confirmations awaiting a human decision, including seat-scoped cards the caller occupies and target-scoped cards the caller may decide as steward/admin.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List pending confirmations awaiting a human decision before approving or rejecting them. Each redacted_args is a partial projection of the proposal: content may be omitted, and no surface today renders it in full." },
|
|
58100
|
+
{ "id": "confirmation.reject", "namespace": "confirmation", "action": "reject", "title": "Reject pending confirmation", "description": "Reject an in-flight confirmation without executing the original command.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "confirmation_id", "flag": "confirmation-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Reject pending confirmations when authority, evidence, or human intent is unclear." },
|
|
58101
|
+
{ "id": "confirmation.remint", "namespace": "confirmation", "action": "remint", "title": "Re-mint an expired confirmation", "description": "Stage a fresh confirmation for the same command as an expired one, re-running the normal minting authorization checks.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "confirmation_id", "flag": "confirmation-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Re-mint an expired confirmation into a fresh one before approving, instead of re-running the original command from scratch." },
|
|
58102
|
+
{ "id": "credential.ingress", "namespace": "credential", "action": "ingress", "title": "Store credential", "description": "Store a secret through the vault and persist only the credential vault reference.", "requiredScope": "seat", "confirmation": "credential_flow", "exposeOverMcp": false, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "provider", "flag": "provider", "type": "string", "required": true }, { "name": "scope_description", "flag": "scope-description", "type": "string", "required": true }, { "name": "secret_name", "flag": "secret-name", "type": "string", "required": true }], "hasComplexInput": false, "secretBlocked": true, "help": "Ingress credentials only through vault-backed flows; never place raw secrets in prompts, logs, or docs." },
|
|
58103
|
+
{ "id": "credential.list", "namespace": "credential", "action": "list", "title": "List stored credentials", "description": "List the tenant's stored credentials as metadata only. NEVER returns the vault ref or any secret. Use the returned credential_id with secret_grant.grant to grant a seat brokered access without ever handling a raw ref.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List stored-credential metadata (id, provider, label, status, dates) to find the credential_id for secret_grant.grant. Never returns the vault ref or any secret." },
|
|
58104
|
+
{ "id": "deliverable.accept", "namespace": "deliverable", "action": "accept", "title": "Accept deliverable value", "description": "Record a human-confirmed accepted value (USD) on a deliverable. Humans decide; agents cannot self-accept. Re-accepting records a correction as a new event; prior events are never mutated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "deliverable_id", "flag": "deliverable-id", "type": "string", "required": true }, { "name": "impact_value_usd", "flag": "impact-value-usd", "type": "number", "required": true }], "hasComplexInput": false, "help": "Record a human-confirmed accepted value (USD) on a deliverable; owner-only and human-gated. Humans decide \u2014 agents cannot self-accept. Re-accepting records a correction as a new event." },
|
|
58105
|
+
{ "id": "deliverable.attach", "namespace": "deliverable", "action": "attach", "title": "Attach agent deliverable", "description": "Attach a deliverable to a source run, task, or work order for the acting seat. Source refs are validated server-side.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "run_id", "flag": "run-id", "type": "string", "required": false }, { "name": "task_id", "flag": "task-id", "type": "string", "required": false }, { "name": "work_order_id", "flag": "work-order-id", "type": "string", "required": false }, { "name": "kind", "flag": "kind", "type": "enum", "required": false, "enumValues": ["brief", "work_evidence", "artifact", "report", "other"] }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "summary", "flag": "summary", "type": "string", "required": false }, { "name": "content", "flag": "content", "type": "string", "required": false }], "hasComplexInput": true, "help": "Attach a scrubbed deliverable to a source run, task, or work order that belongs to the acting seat." },
|
|
58106
|
+
{ "id": "deliverable.create", "namespace": "deliverable", "action": "create", "title": "Create agent deliverable", "description": "Owned by the acting seat; scrubbed for secrets before storage.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "kind", "flag": "kind", "type": "enum", "required": false, "enumValues": ["brief", "work_evidence", "artifact", "report", "other"] }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "summary", "flag": "summary", "type": "string", "required": false }, { "name": "content", "flag": "content", "type": "string", "required": false }, { "name": "delivered_at", "flag": "delivered-at", "type": "string", "required": false }], "hasComplexInput": true, "help": "Create a scrubbed durable work output for the acting seat without making a durable company decision." },
|
|
58107
|
+
{ "id": "deliverable.get", "namespace": "deliverable", "action": "get", "title": "Get agent deliverable", "description": "Return one agent deliverable by id for a seat.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": true, "help": "Read one durable agent deliverable by id after checking seat-scoped access." },
|
|
58108
|
+
{ "id": "deliverable.list", "namespace": "deliverable", "action": "list", "title": "List agent deliverables", "description": "Return agent deliverables for a seat, including derived entries from succeeded runs with outcome summaries.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "List durable agent deliverables for a seat, including explicit outputs and successful-run summaries." },
|
|
58109
|
+
{ "id": "deliverable.reject", "namespace": "deliverable", "action": "reject", "title": "Reject deliverable value", "description": "Record a human-confirmed rejection on a deliverable. Humans decide; agents cannot self-reject. Re-rejecting records a correction as a new event; prior events are never mutated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "deliverable_id", "flag": "deliverable-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Record a human-confirmed rejection on a deliverable; owner-only and human-gated. Humans decide \u2014 agents cannot self-reject. Re-rejecting records a correction as a new event." },
|
|
58110
|
+
{ "id": "error_log.bulk_resolve", "namespace": "error_log", "action": "bulk_resolve", "title": "Bulk resolve error logs", "description": "Acknowledge or resolve a batch of stale error logs in one human-confirmed action, with a required reason. Each error log is resolved independently (partial success) and writes its own resolution event; already-resolved or missing ids are skipped.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "error_log_ids", "flag": "error-log-ids", "type": "array", "required": true, "itemType": "string" }, { "name": "reason", "flag": "reason", "type": "string", "required": true }, { "name": "disposition", "flag": "disposition", "type": "enum", "required": false, "enumValues": ["acknowledged", "resolved"] }], "hasComplexInput": false, "help": "Acknowledge or resolve a batch of stale error logs in one human-confirmed action with a required reason; each is resolved independently (partial success) and already-resolved or missing ids are skipped." },
|
|
58111
|
+
{ "id": "error_log.list", "namespace": "error_log", "action": "list", "title": "List error logs", "description": "List tenant error logs with optional filtering by seat, source, severity, and resolved state.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "source", "flag": "source", "type": "enum", "required": false, "enumValues": ["run", "llm", "tool", "mcp", "runner", "integration", "job", "web"] }, { "name": "severity", "flag": "severity", "type": "enum", "required": false, "enumValues": ["warning", "error", "critical"] }, { "name": "resolved", "flag": "resolved", "type": "enum", "required": false, "enumValues": ["active", "acknowledged", "resolved", "all"] }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List product-visible error logs by source, severity, seat, and active/resolved disposition before closing stale failures." },
|
|
58112
|
+
{ "id": "error_log.resolve", "namespace": "error_log", "action": "resolve", "title": "Resolve error log", "description": "Acknowledge or resolve an error log with a required reason and optional linked task, Friction issue, or PR reference.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "error_log_id", "flag": "error-log-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": true }, { "name": "disposition", "flag": "disposition", "type": "enum", "required": false, "enumValues": ["acknowledged", "resolved"] }, { "name": "linked_task_id", "flag": "linked-task-id", "type": "string", "required": false }, { "name": "linked_issue_id", "flag": "linked-issue-id", "type": "string", "required": false }, { "name": "linked_pr_ref", "flag": "linked-pr-ref", "type": "string", "required": false }], "hasComplexInput": false, "help": "Acknowledge or resolve a stale error log with a required human reason and optional task, issue, or PR evidence." },
|
|
58113
|
+
{ "id": "error_log.stale_candidates", "namespace": "error_log", "action": "stale_candidates", "title": "Find stale error logs", "description": "List unresolved error logs that have gone flat (no new occurrences) and are candidates for bulk resolution, with a per-row confidence tier and human-readable evidence. Read-only \u2014 it never resolves anything.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "stale_after_days", "flag": "stale-after-days", "type": "integer", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List unresolved error logs that have gone flat, with a confidence tier and evidence, to triage a bulk close-the-loop pass. Read-only." },
|
|
58114
|
+
{ "id": "error_log.supersede", "namespace": "error_log", "action": "supersede", "title": "Supersede error log", "description": "Links the old error to the new one and records the reason.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "error_log_id", "flag": "error-log-id", "type": "string", "required": true }, { "name": "new_error_log_id", "flag": "new-error-log-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": true }, { "name": "linked_task_id", "flag": "linked-task-id", "type": "string", "required": false }, { "name": "linked_issue_id", "flag": "linked-issue-id", "type": "string", "required": false }, { "name": "linked_pr_ref", "flag": "linked-pr-ref", "type": "string", "required": false }], "hasComplexInput": false, "help": "Mark an older error log as superseded by a newer same-tenant error log while preserving history." },
|
|
58115
|
+
{ "id": "escalation.bulk_resolve", "namespace": "escalation", "action": "bulk_resolve", "title": "Bulk resolve escalations", "description": "Override (safely close) a batch of stale open escalations in one human-confirmed action, with a required reason. Each escalation is decided independently (partial success) and writes its own human decision; already-decided, not-routed, or missing ids are skipped. Agents cannot bulk-resolve.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "escalation_ids", "flag": "escalation-ids", "type": "array", "required": true, "itemType": "string" }, { "name": "reason", "flag": "reason", "type": "string", "required": true }], "hasComplexInput": false, "help": "Override (safely close) a batch of stale open escalations in one human-confirmed action; each records its own human decision and already-decided, not-routed, or missing ids are skipped. Agents cannot bulk-resolve." },
|
|
58116
|
+
{ "id": "escalation.get", "namespace": "escalation", "action": "get", "title": "Get escalation", "description": "Read a single escalation the caller is allowed to see (own steward chain for humans, own seat for agents).", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Read one escalation's evidence and recommendation before a human resolves or rejects it." },
|
|
58117
|
+
{ "id": "escalation.list", "namespace": "escalation", "action": "list", "title": "List escalations", "description": "List Steward queue escalations routed to the caller's steward chain (human) or raised by the caller's seat (agent).", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "include_decided", "flag": "include-decided", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "List Steward queue escalations (own chain for humans, own seat for agents) before resolving or routing them." },
|
|
58118
|
+
{ "id": "escalation.raise", "namespace": "escalation", "action": "raise", "title": "Raise escalation", "description": "Emit an escalation event and open a Steward queue item for the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "reason", "flag": "reason", "type": "string", "required": true }, { "name": "charter_clause", "flag": "charter-clause", "type": "string", "required": true }, { "name": "recommended_action", "flag": "recommended-action", "type": "string", "required": false }, { "name": "title", "flag": "title", "type": "string", "required": false }, { "name": "category", "flag": "category", "type": "enum", "required": false, "enumValues": ["safety_refusal"] }], "hasComplexInput": true, "help": "Raise an escalation to the seat's Steward when a decision exceeds the seat's authority; humans decide." },
|
|
58119
|
+
{ "id": "escalation.reject", "namespace": "escalation", "action": "reject", "title": "Reject escalation", "description": "Override an open escalation so the agent must not proceed. Writes a human decision; agents cannot reject.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "Reject (override) an escalation so the agent must not proceed; the decision records the human decider. Agents cannot reject." },
|
|
58120
|
+
{ "id": "escalation.resolve", "namespace": "escalation", "action": "resolve", "title": "Resolve escalation", "description": "Approve an open escalation (or convert it to Friction). Writes a human decision; agents cannot resolve.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }, { "name": "action", "flag": "action", "type": "enum", "required": false, "enumValues": ["approve", "convert_to_issue"] }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "Resolve an escalation as a human Steward; the decision records decided_by as the approving human. Agents cannot resolve." },
|
|
58121
|
+
{ "id": "escalation.stale_candidates", "namespace": "escalation", "action": "stale_candidates", "title": "Find stale escalations", "description": "List open escalations routed to the caller's steward chain that have aged and still reference a concrete DER issue or PR, with a per-row confidence tier and evidence. Read-only \u2014 it never decides anything.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "stale_after_days", "flag": "stale-after-days", "type": "integer", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List aged open escalations in the caller's steward chain that still reference a concrete DER issue or PR \u2014 candidates for a bulk override. Read-only." },
|
|
58122
|
+
{ "id": "friction.assist", "namespace": "friction", "action": "assist", "title": "Assist Friction issue", "description": "Advisory IDS assist for an issue: the most-similar prior resolved issues with their root causes and decisions, a recurring-pattern flag, and recommended options. Read-only \u2014 it never resolves the issue.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Advisory IDS assist: the most-similar prior resolved issues with their root causes and decisions, plus a recurring-pattern flag. Read-only \u2014 it never resolves the issue." },
|
|
58123
|
+
{ "id": "friction.bulk_resolve", "namespace": "friction", "action": "bulk_resolve", "title": "Bulk resolve friction", "description": "Resolve a batch of stale Friction issues in one human-confirmed action with a required root cause (already-fixed mode \u2014 no follow-up task). Each issue is resolved independently (partial success) and writes its own human decision; already-resolved or missing ids are skipped.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "issue_ids", "flag": "issue-ids", "type": "array", "required": true, "itemType": "string" }, { "name": "root_cause", "flag": "root-cause", "type": "string", "required": true }], "hasComplexInput": false, "help": "Resolve a batch of stale issues in one human-confirmed action with a required root cause (already-fixed mode); each records its own human decision and already-resolved or missing ids are skipped." },
|
|
58124
|
+
{ "id": "friction.file_issue", "namespace": "friction", "action": "file_issue", "title": "File Friction issue", "description": "Emit an issue event and open a Friction issue raised by the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "summary", "flag": "summary", "type": "string", "required": true }, { "name": "blocking_goal_id", "flag": "blocking-goal-id", "type": "string", "required": false }, { "name": "broken_measurable_id", "flag": "broken-measurable-id", "type": "string", "required": false }, { "name": "severity", "flag": "severity", "type": "enum", "required": true, "enumValues": ["low", "med", "high", "critical"] }, { "name": "title", "flag": "title", "type": "string", "required": false }, { "name": "source_key", "flag": "source-key", "type": "string", "required": false }], "hasComplexInput": true, "help": "File a Friction issue with evidence when a goal or measurable is blocked or broken." },
|
|
58125
|
+
{ "id": "friction.get", "namespace": "friction", "action": "get", "title": "Get Friction issue", "description": "Get full detail for one Friction issue by id.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Get full detail for one Friction issue by id, including its root cause, action task, and resolution decision when present." },
|
|
58126
|
+
{ "id": "friction.import", "namespace": "friction", "action": "import", "title": "Import Friction issues from a ninety Issues List", "description": "Bulk-import a ninety Issues List export into Friction. Owners are seat names resolved to seats; each issue is raised by the resolved seat and attributed to the importing human. Idempotent \u2014 re-importing the same export is a no-op, and an existing open issue with the same seat + summary is skipped.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "dry_run", "flag": "dry-run", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Import a ninety Issues List export into Friction; owners resolve to seats, idempotent by file + seat/summary." },
|
|
58127
|
+
{ "id": "friction.link_task", "namespace": "friction", "action": "link_task", "title": "Link task to Friction issue", "description": "Attach an existing tenant task as the action task for a non-terminal issue. Both ids must belong to the tenant.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }, { "name": "task_id", "flag": "task-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Attach an existing task as the action task for a non-terminal issue." },
|
|
58128
|
+
{ "id": "friction.list", "namespace": "friction", "action": "list", "title": "List Friction issues", "description": "Ranked by status, impact, and severity. Defaults to active (open + diagnosing).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["open", "diagnosing", "resolved", "dropped", "active", "all"] }], "hasComplexInput": false, "help": "List Friction issues ranked by impact and severity to find the issue id before updating or resolving it." },
|
|
58129
|
+
{ "id": "friction.resolve", "namespace": "friction", "action": "resolve", "title": "Resolve Friction issue", "description": 'Resolve an issue with a root cause. In the default "ids" resolution_mode this also creates a remediation follow-up task; "already_fixed" records only the root cause (no follow-up task). Always records a human decision (decided_by) in the same transaction.', "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }, { "name": "resolution_mode", "flag": "resolution-mode", "type": "enum", "required": false, "enumValues": ["ids", "already_fixed"] }, { "name": "root_cause", "flag": "root-cause", "type": "string", "required": true }, { "name": "owner_seat_id", "flag": "owner-seat-id", "type": "string", "required": false }, { "name": "task_title", "flag": "task-title", "type": "string", "required": false }, { "name": "task_description", "flag": "task-description", "type": "string", "required": false }, { "name": "done_by", "flag": "done-by", "type": "string", "required": false }, { "name": "resolving_seat_id", "flag": "resolving-seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Resolve an issue with a root cause and remediation task; resolution is a human decision." },
|
|
58130
|
+
{ "id": "friction.stale_candidates", "namespace": "friction", "action": "stale_candidates", "title": "Find stale friction", "description": "List open or diagnosing Friction issues whose linked remediation task has already shipped, making them high-confidence candidates for bulk resolution, with per-row evidence. Read-only \u2014 it never resolves anything.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "stale_after_days", "flag": "stale-after-days", "type": "integer", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List open or diagnosing issues whose remediation task already shipped \u2014 high-confidence candidates for a bulk close-the-loop pass. Read-only." },
|
|
58131
|
+
{ "id": "friction.update_status", "namespace": "friction", "action": "update_status", "title": "Update Friction issue status", "description": "Move a non-terminal issue between open and diagnosing. Terminal issues (resolved/dropped) cannot be reopened here.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }, { "name": "status", "flag": "status", "type": "enum", "required": true, "enumValues": ["open", "diagnosing"] }], "hasComplexInput": false, "help": "Move a non-terminal issue between open and diagnosing while it is being worked." },
|
|
58132
|
+
{ "id": "gate.decide", "namespace": "gate", "action": "decide", "title": "Decide a conversational gate", "description": "A human approves or rejects a conversational gate bound to an artifact digest (a prototype URL, deliverable, or artifact). The agent drafts the decision and the human confirms it; the resolver is always a human. On approval the artifact must be unchanged since the gate was drafted \u2014 a stale digest re-blocks. Requires confirmation.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "subject_kind", "flag": "subject-kind", "type": "enum", "required": true, "enumValues": ["prototype", "deliverable", "artifact"] }, { "name": "subject_id", "flag": "subject-id", "type": "string", "required": true }, { "name": "artifact_digest", "flag": "artifact-digest", "type": "string", "required": true }, { "name": "decision", "flag": "decision", "type": "enum", "required": true, "enumValues": ["approve", "reject"] }, { "name": "ask", "flag": "ask", "type": "string", "required": true }, { "name": "consequence", "flag": "consequence", "type": "string", "required": true }, { "name": "unblocked_targets", "flag": "unblocked-targets", "type": "array", "required": false, "itemType": "string" }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": true, "help": "A human approves or rejects a conversational gate bound to an artifact digest; the agent drafts, the human confirms (invariant #7)." },
|
|
58133
|
+
{ "id": "goal.bind_measurable", "namespace": "goal", "action": "bind_measurable", "title": "Bind a Signal to a Cascade goal", "description": "Role defaults to 'informs' \u2014 a conservative informative indicator allowed at any goal level (many per goal) that never changes goal status. Role 'drives_status' makes it the goal's status driver: allowed only on a childless seat goal or milestone, at most one per goal, requires a second_anchor (a prior closed period + expected value confirming the Signal matched the books). This signal will set the goal's status from confirmed readings. You can turn this off later. Explicit auto_status_enabled: false opts out at bind time; goal.set_auto_status changes it after the fact. Binding a driver over an existing informs binding of the same Signal promotes it. Binding is human-gated.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "role", "flag": "role", "type": "enum", "required": false, "enumValues": ["drives_status", "informs"] }, { "name": "auto_status_enabled", "flag": "auto-status-enabled", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Bind a Signal to a goal. Defaults to role informs (a conservative indicator at any level that never changes status); pass role drives_status with a second_anchor (a prior closed period + expected value confirming the Signal matched the books) to make it a childless leaf goal's status driver \u2014 this promotes an existing informs binding. A new drives_status binding defaults auto_status_enabled to true (pass auto_status_enabled:false to opt out at bind time)." },
|
|
58134
|
+
{ "id": "goal.create", "namespace": "goal", "action": "create", "title": "Create Cascade goal", "description": "Create a Cascade goal. Defaults to a seat goal: pass seat_id and parent_goal_id, and the parent chain must terminate at a company objective in the same cycle (enforced server-side). Pass kind 'company_objective' to author a company objective \u2014 the Cascade root \u2014 with no seat and no parent; it anchors on the tenant's active Compass, which must already carry a one_year horizon goal, and requires an owner membership (a seat-scoped caller may create seat goals beneath one).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "cycle_id", "flag": "cycle-id", "type": "string", "required": true }, { "name": "kind", "flag": "kind", "type": "enum", "required": false, "enumValues": ["company_objective", "seat_goal"] }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "parent_goal_id", "flag": "parent-goal-id", "type": "string", "required": false }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "definition_of_done", "flag": "definition-of-done", "type": "string", "required": true }, { "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["on", "off"] }, { "name": "target_date", "flag": "target-date", "type": "string", "required": false }], "hasComplexInput": false, "help": "Create a seat goal under an existing objective (the default), or pass kind 'company_objective' to author the Cascade root itself against the active Compass (owner authority)." },
|
|
58135
|
+
{ "id": "goal.drop", "namespace": "goal", "action": "drop", "title": "Drop Cascade goal", "description": "Drop (retire) a goal by setting status to dropped. Dropping retires the commitment, so it is human-gated. The row is retained for audit (never deleted).", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Drop a goal to retire a commitment; the goal is retained for audit and dropping is human-gated." },
|
|
58136
|
+
{ "id": "goal.get", "namespace": "goal", "action": "get", "title": "Get Cascade goal", "description": "Get one goal's core detail and status by id. Seat-scoped callers may only read their own seat's goals.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Get one goal's core detail and status by id; seat tokens may only read their own goals." },
|
|
58137
|
+
{ "id": "goal.list", "namespace": "goal", "action": "list", "title": "List Cascade goals", "description": "List goals in the tenant, optionally filtered by cycle or seat. Seat-scoped callers see only their own seat's goals.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "cycle_id", "flag": "cycle-id", "type": "string", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "List Cascade goals to find goal ids, parentage, and seat ownership before mutating the tree." },
|
|
58138
|
+
{ "id": "goal.list_at_risk", "namespace": "goal", "action": "list_at_risk", "title": "List at-risk Cascade goals", "description": "List goals projected to miss their cycle pace (at-risk or projected-miss), with how many days behind pace. Read-only; status-only goals (no progress) are excluded.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List goals projected off pace (at-risk or projected-miss), with how many days behind pace. Read-only; status-only goals are excluded." },
|
|
58139
|
+
{ "id": "goal.list_measurables", "namespace": "goal", "action": "list_measurables", "title": "List a Cascade goal's Signals", "description": "List the status-driver Signal bound to a Cascade goal (role drives_status), with its current signal indicator and latest confirmed reading. Read-only. Informative (informs) bindings appear in the goal-detail panel's Direct indicators, not here.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "List the Signals bound to a goal (role drives_status) with each one's current indicator and latest confirmed reading." },
|
|
58140
|
+
{ "id": "goal.reassign_owner", "namespace": "goal", "action": "reassign_owner", "title": "Reassign Cascade goal owner seat", "description": "Reassign a seat goal's owner seat to a different seat in the same tenant. The goal's cycle and parent (ancestry chain) are unchanged \u2014 only the owning seat changes. Reassigning accountable ownership is human-gated. Emits a status event naming the previous and new seat.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Reassign a seat goal's owner seat to a different seat in the same tenant; cycle and parent ancestry are unchanged. Reassigning accountable ownership is human-gated." },
|
|
58141
|
+
{ "id": "goal.reparent", "namespace": "goal", "action": "reparent", "title": "Reparent Cascade goal", "description": "Move a goal under a different parent. Reparenting changes accountable structure, so it is human-gated. One-root and no-cycle are enforced server-side.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "parent_goal_id", "flag": "parent-goal-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Reparent a goal only when it clarifies accountable structure; reparenting changes authority and is human-gated." },
|
|
58142
|
+
{ "id": "goal.set_auto_status", "namespace": "goal", "action": "set_auto_status", "title": "Toggle Signal-driven auto-status", "description": "Opt a goal's drives_status binding into (or out of) auto-status. Default OFF. Enabling lets confirmed readings drive the goal's status; a human status pin still wins. Human-gated opt-in.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "enabled", "flag": "enabled", "type": "boolean", "required": true }], "hasComplexInput": false, "help": "Opt a goal's Signal binding into (or out of) auto-status. Default OFF. Enabling lets confirmed readings drive the status; a human status pin still wins." },
|
|
58143
|
+
{ "id": "goal.set_progress", "namespace": "goal", "action": "set_progress", "title": "Set Cascade goal progress", "description": "Set a goal's quantified progress (0\u2013100). Seat-scoped callers may set progress only for their own goals. An agent's progress is a proposal a human approves before it lands.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "progress_pct", "flag": "progress-pct", "type": "integer", "required": true }], "hasComplexInput": false, "help": "Report a goal's quantified progress (0-100). An agent's progress is a proposal a human approves before the goal moves." },
|
|
58144
|
+
{ "id": "goal.set_status", "namespace": "goal", "action": "set_status", "title": "Set Cascade goal status", "description": "Set a goal's status (on/off/done). Seat-scoped callers may set status only for their own goals.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "status", "flag": "status", "type": "enum", "required": true, "enumValues": ["on", "off", "done"] }], "hasComplexInput": false, "help": "Set a goal's status; seat tokens may only set status for their own goals." },
|
|
58145
|
+
{ "id": "goal.unbind_measurable", "namespace": "goal", "action": "unbind_measurable", "title": "Unbind a Signal from a Cascade goal", "description": "Role defaults to 'drives_status'; pass role 'informs' to remove an informative indicator. Removing a driver keeps the goal's last status; unbinding only stops future signal-driven updates.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "role", "flag": "role", "type": "enum", "required": false, "enumValues": ["drives_status", "informs"] }], "hasComplexInput": false, "help": "Remove a Signal's drives_status binding from a goal; the goal keeps its last status and stops receiving signal-driven updates." },
|
|
58146
|
+
{ "id": "goal.update", "namespace": "goal", "action": "update", "title": "Update Cascade goal", "description": "Update a goal's title, definition of done, or target date. Topology (parent/seat) and status have dedicated commands.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "title", "flag": "title", "type": "string", "required": false }, { "name": "definition_of_done", "flag": "definition-of-done", "type": "string", "required": false }, { "name": "target_date", "flag": "target-date", "type": "string", "required": false }], "hasComplexInput": false, "help": "Update a goal's title or definition of done; topology and status have dedicated commands." },
|
|
58147
|
+
{ "id": "graph.get", "namespace": "graph", "action": "get", "title": "Get Responsibility Graph", "description": "Return the tenant's Responsibility Graph: seats, edges, root, occupants, and status rollups.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read the Responsibility Graph to discover seat ids, parentage, occupants, and status before mutating or routing work." },
|
|
58148
|
+
{ "id": "implementation_access.abandon", "namespace": "implementation_access", "action": "abandon", "title": "Abandon implementation access", "description": "Close the implementation bootstrap run as abandoned and revoke its bearer token.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [], "hasComplexInput": false, "help": "Close the implementation bootstrap run as abandoned and revoke its bearer token." },
|
|
58149
|
+
{ "id": "implementation_access.complete", "namespace": "implementation_access", "action": "complete", "title": "Complete implementation access", "description": "Close the implementation bootstrap run as completed and revoke its bearer token.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [], "hasComplexInput": false, "help": "Close the implementation bootstrap run as completed and revoke its bearer token." },
|
|
58150
|
+
{ "id": "implementation_access.status", "namespace": "implementation_access", "action": "status", "title": "Implementation access status", "description": "Read the current state of the implementation bootstrap run and its bearer token.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [], "hasComplexInput": false, "help": "Read the current state of the implementation bootstrap run and its bearer token." },
|
|
58151
|
+
{ "id": "integration.connect_rest", "namespace": "integration", "action": "connect_rest", "title": "Connect REST integration", "description": "Create or rotate the tenant Baserow REST integration using a vault-backed secret. Stores endpoint metadata only; never returns secrets or vault refs.", "requiredScope": "tenant_admin", "confirmation": "credential_flow", "exposeOverMcp": false, "fields": [{ "name": "provider", "flag": "provider", "type": "enum", "required": true, "enumValues": ["baserow"] }, { "name": "endpoint_url", "flag": "endpoint-url", "type": "string", "required": true }, { "name": "scope_description", "flag": "scope-description", "type": "string", "required": true }, { "name": "secret_name", "flag": "secret-name", "type": "string", "required": true }, { "name": "account_label", "flag": "account-label", "type": "string", "required": false }], "hasComplexInput": false, "secretBlocked": true, "help": "Create or rotate a vault-backed Baserow REST integration for Signal pulls. Use the credential flow; never pass secrets through CLI argv." },
|
|
58152
|
+
{ "id": "integration.discover", "namespace": "integration", "action": "discover", "title": "Discover a connection for signals", "description": "Read-only introspection of a connected source for signal binding. Returns non-secret adapter metadata and a rest-for-signals recipe skeleton to author against signal.preview.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "integration_id", "flag": "integration-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Read-only introspection of a connected source: returns non-secret metadata + a recipe skeleton to author a signal pull against. No network." },
|
|
58153
|
+
{ "id": "integration.list", "namespace": "integration", "action": "list", "title": "List integrations", "description": "List tenant integration metadata and health status. Returns account/scopes/capabilities only; never secrets or vault refs.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "provider", "flag": "provider", "type": "string", "required": false }], "hasComplexInput": false, "help": "List connected integrations and their metadata-only health state before enabling a connector-backed tool." },
|
|
58154
|
+
{ "id": "integration.readiness", "namespace": "integration", "action": "readiness", "title": "Check integration readiness", "description": "Return a safe connector setup checklist for operators and agents. Starts with Google and exposes no secrets.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "provider", "flag": "provider", "type": "enum", "required": false, "enumValues": ["google"] }], "hasComplexInput": false, "help": "Read the connector setup checklist before relying on Google-backed agent work; the checklist names missing config, connection, scopes, external verification, and handler blockers." },
|
|
58155
|
+
{ "id": "integration.status", "namespace": "integration", "action": "status", "title": "Get integration status", "description": "Read one integration's metadata and latest health status. Returns no secret material.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "provider", "flag": "provider", "type": "string", "required": false }, { "name": "integration_id", "flag": "integration-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Read one integration's metadata-only status by provider or integration id." },
|
|
58156
|
+
{ "id": "integration.test", "namespace": "integration", "action": "test", "title": "Test integration connection", "description": "Run the installed provider-specific connection test and update integration health. The command returns bounded metadata only.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "provider", "flag": "provider", "type": "string", "required": false }, { "name": "integration_id", "flag": "integration-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Run the provider-specific connection test and update integration health without exposing credentials." },
|
|
58157
|
+
{ "id": "mcp_token.create", "namespace": "mcp_token", "action": "create", "title": "Create MCP token", "description": "Mint a tenant-admin or seat-scoped MCP token.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "scope", "flag": "scope", "type": "enum", "required": true, "enumValues": ["tenant_admin", "seat"] }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "expires_at", "flag": "expires-at", "type": "string", "required": false }, { "name": "expires_in_days", "flag": "expires-in-days", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Create MCP tokens with the narrowest scope needed, and tell agents where to retrieve reference docs." },
|
|
58158
|
+
{ "id": "mcp_token.list", "namespace": "mcp_token", "action": "list", "title": "List MCP tokens", "description": "List MCP token metadata (id, scope, seat, created/last-used/revoked). Never returns token material.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "include_revoked", "flag": "include-revoked", "type": "boolean", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "List MCP token metadata (never token material) to audit which seats hold active sessions." },
|
|
58159
|
+
{ "id": "mcp_token.revoke", "namespace": "mcp_token", "action": "revoke", "title": "Revoke MCP token", "description": "Revoke an MCP token immediately.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "token_id", "flag": "token-id", "type": "string", "required": true }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Revoke MCP access when a local session ends or seat authority changes." },
|
|
58160
|
+
{ "id": "measurable_template.adopt", "namespace": "measurable_template", "action": "adopt", "title": "Adopt a measurable template", "description": "Create a seat measurable from a catalog template (unit/direction/cadence from the template; target optionally overridden). The seat owns it; readings attach afterward.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "template_id", "flag": "template-id", "type": "string", "required": true }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "target", "flag": "target", "type": "number", "required": false }], "hasComplexInput": false, "help": "Create a seat measurable from a catalog template (unit/direction/cadence from the template; target optionally overridden). Adoption is a human act \u2014 source is human." },
|
|
58161
|
+
{ "id": "measurable_template.list", "namespace": "measurable_template", "action": "list", "title": "List measurable templates", "description": "List the measurable template catalog (Sales/Finance/Ops/Marketing/HR) with unit, direction, cadence, and a suggested target. Adopt one with measurable_template.adopt.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "function", "flag": "function", "type": "enum", "required": false, "enumValues": ["sales", "finance", "operations", "marketing", "hr"] }], "hasComplexInput": false, "help": "List the measurable template catalog by function (Sales/Finance/Ops/Marketing/HR); adopt one with measurable_template.adopt to create a seat measurable." },
|
|
58162
|
+
{ "id": "measurable.create", "namespace": "measurable", "action": "create", "title": "Add a measurable", "description": "Create a measurable (a Signal a seat owns) with its target, unit, direction, and cadence. Readings attach to the measurable afterward. Source is 'human' \u2014 a human-defined measurable a human logs.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "name", "flag": "name", "type": "string", "required": true }, { "name": "unit", "flag": "unit", "type": "string", "required": true }, { "name": "direction", "flag": "direction", "type": "enum", "required": true, "enumValues": ["up_good", "down_good"] }, { "name": "target", "flag": "target", "type": "number", "required": true }, { "name": "cadence", "flag": "cadence", "type": "enum", "required": true, "enumValues": ["daily", "weekly", "monthly", "quarterly", "annual"] }], "hasComplexInput": false, "help": "Add a measurable a seat owns (name, unit, direction, target, cadence) before recording readings against it." },
|
|
58163
|
+
{ "id": "member.invite", "namespace": "member", "action": "invite", "title": "Invite member", "description": "Create a pending tenant invite for a human teammate. The acceptance link is delivered out of band, not in the command result.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "email", "flag": "email", "type": "string", "required": true }, { "name": "role", "flag": "role", "type": "enum", "required": true, "enumValues": ["owner", "admin", "steward", "member"] }, { "name": "member_type", "flag": "member-type", "type": "enum", "required": false, "enumValues": ["internal", "external_implementer"] }, { "name": "access_profile", "flag": "access-profile", "type": "enum", "required": false, "enumValues": ["full_setup", "setup_limited", "seat_scoped", "custom"] }, { "name": "aicos_access_scope", "flag": "aicos-access-scope", "type": "enum", "required": false, "enumValues": ["none", "own_scope", "setup", "company_read", "company_operate"] }, { "name": "byo_key", "flag": "byo-key", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Invite humans to the company by seat-aware role; the invite token is never returned over CLI or MCP." },
|
|
58164
|
+
{ "id": "member.remove", "namespace": "member", "action": "remove", "title": "Remove member", "description": "Blocked when it would orphan an agent steward chain.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "member_id", "flag": "member-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Remove a member; the no-orphan-agent guard blocks removing the only steward in an agent chain." },
|
|
58165
|
+
{ "id": "member.update", "namespace": "member", "action": "update", "title": "Update member role", "description": "Change a tenant member's role.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "member_id", "flag": "member-id", "type": "string", "required": true }, { "name": "role", "flag": "role", "type": "enum", "required": true, "enumValues": ["owner", "admin", "steward", "member"] }], "hasComplexInput": false, "help": "Change a member's role; role changes are human-gated." },
|
|
58166
|
+
{ "id": "model.catalog", "namespace": "model", "action": "catalog", "title": "List model catalog", "description": "List the guided model tiers the agent builder reads \u2014 cost, effort, and when to choose or avoid each tier.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List guided model tiers with recommendations, token prices, cost bands, best-fit work, and model ids before choosing --model for an agent." },
|
|
58167
|
+
{ "id": "notification.list_errors", "namespace": "notification", "action": "list_errors", "title": "List notification errors", "description": "List recent failed notification deliveries for the tenant.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List recent failed notification deliveries when diagnosing missed escalations or briefs." },
|
|
58168
|
+
{ "id": "notification.settings.get", "namespace": "notification", "action": "settings.get", "title": "Get notification settings", "description": "Read tenant notification preferences (escalations, Sync brief, default channel).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read notification preferences before changing escalation or Sync brief delivery." },
|
|
58169
|
+
{ "id": "notification.settings.update", "namespace": "notification", "action": "settings.update", "title": "Update notification settings", "description": "Update tenant notification preferences.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "escalations_enabled", "flag": "escalations-enabled", "type": "boolean", "required": false }, { "name": "sync_brief_enabled", "flag": "sync-brief-enabled", "type": "boolean", "required": false }, { "name": "default_channel", "flag": "default-channel", "type": "enum", "required": false, "enumValues": ["slack", "email", "in_app"] }], "hasComplexInput": false, "help": "Update notification preferences for escalations, Sync briefs, and the default channel." },
|
|
58170
|
+
{ "id": "notification.test", "namespace": "notification", "action": "test", "title": "Send test notification", "description": "Emit an in-app test notification to the acting human to verify delivery is wired.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Send an in-app test notification to confirm the delivery path is wired." },
|
|
58171
|
+
{ "id": "onboarding.activate", "namespace": "onboarding", "action": "activate", "title": "Activate onboarding agents", "description": "Stage one owner approval to activate every agent in an applied onboarding receipt and complete onboarding atomically.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "idempotency_key", "flag": "idempotency-key", "type": "string", "required": true }, { "name": "setup_application_id", "flag": "setup-application-id", "type": "string", "required": true }, { "name": "expected_input_digest", "flag": "expected-input-digest", "type": "string", "required": true }, { "name": "expected_receipt_revision", "flag": "expected-receipt-revision", "type": "integer", "required": true }, { "name": "terminal_rehearsal_batch_receipt_id", "flag": "terminal-rehearsal-batch-receipt-id", "type": "string", "required": true }], "hasComplexInput": true, "help": "After a terminal all-passed onboarding rehearsal, submit its exact batch receipt, per-agent run IDs, and configuration digests. One owner approval activates the entire group and completes onboarding atomically." },
|
|
58172
|
+
{ "id": "onboarding.advance_step", "namespace": "onboarding", "action": "advance_step", "title": "Advance onboarding step", "description": "Persist the current onboarding step after server-side validation.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "step", "flag": "step", "type": "string", "required": true }, { "name": "completed", "flag": "completed", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Advance onboarding only after the current setup step is represented in the tenant state." },
|
|
58173
|
+
{ "id": "onboarding.attach_reference", "namespace": "onboarding", "action": "attach_reference", "title": "Attach reference document", "description": "Attach a company reference document (text/markdown) so Compass and Charters can cite it. Reference-only \u2014 it does not build a Compass; convert each meaningful doc to markdown and attach it with a title, kind, and source.", "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": "Convert each meaningful company doc to markdown and attach it as a reference (title, kind, source) so Compass and Charters can cite it; this attaches a reference, it does not build a Compass \u2014 author Compass directly.", "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" } },
|
|
58174
|
+
{ "id": "onboarding.create_invite", "namespace": "onboarding", "action": "create_invite", "title": "Create onboarding invite", "description": "Create a pending invite for an onboarding team member.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "email", "flag": "email", "type": "string", "required": true }, { "name": "role", "flag": "role", "type": "enum", "required": false, "enumValues": ["owner", "admin", "steward", "member"] }], "hasComplexInput": true, "help": "Invites should give humans access to the company without assigning work directly to people instead of seats." },
|
|
58175
|
+
{ "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." },
|
|
58176
|
+
{ "id": "onboarding.rehearse", "namespace": "onboarding", "action": "rehearse", "title": "Rehearse onboarding agents", "description": "Run the exact setup receipt's agents through a resumable sandbox-only rehearsal batch. Returns immutable evidence and never stages activation.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "idempotency_key", "flag": "idempotency-key", "type": "string", "required": true }, { "name": "setup_application_id", "flag": "setup-application-id", "type": "string", "required": true }, { "name": "expected_input_digest", "flag": "expected-input-digest", "type": "string", "required": true }, { "name": "expected_receipt_revision", "flag": "expected-receipt-revision", "type": "integer", "required": true }], "hasComplexInput": false, "help": "Run the exact setup receipt's agents through the sandbox-only rehearsal batch. It returns immutable terminal evidence and never stages activation, arms schedules, accesses credentials, or sends externally." },
|
|
58177
|
+
{ "id": "onboarding.resume", "namespace": "onboarding", "action": "resume", "title": "Onboard resume", "description": "Return the onboarding resume state: path choice, pending setup, and the next step.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Resume an in-progress onboarding session from the implementation bootstrap principal; reports path choice, pending setup, and the next step." },
|
|
58178
|
+
{ "id": "onboarding.select_path", "namespace": "onboarding", "action": "select_path", "title": "Select onboarding path", "description": "Record whether this company continues guided onboarding or hands setup to an agent (agent-led). Human-only (web UI or CLI), not an MCP tool. Never marks onboarding complete or grants any authority.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "path", "flag": "path", "type": "enum", "required": true, "enumValues": ["guided", "agent_led"] }], "hasComplexInput": false, "help": "Records whether the owner continues guided onboarding or hands setup to an agent (agent-led). Owner-only; it never marks onboarding complete or grants authority." },
|
|
58179
|
+
{ "id": "onboarding.setup", "namespace": "onboarding", "action": "setup", "title": "Apply onboarding setup", "description": "Stage one owner approval for a complete declarative onboarding setup. Approval applies the plan atomically without invites, credentials, external messages, or go-live.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [], "hasComplexInput": true, "help": "Submit the complete declarative setup plan once. It stages one owner confirmation and applies the approved plan atomically without invites, credentials, external messages, or go-live." },
|
|
58180
|
+
{ "id": "onboarding.source_ingest", "namespace": "onboarding", "action": "source_ingest", "title": "Ingest onboarding source", "description": "Retain one bounded setup source under the exact tenant and implementation run.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "source_key", "flag": "source-key", "type": "string", "required": true }, { "name": "kind", "flag": "kind", "type": "enum", "required": true, "enumValues": ["org_chart", "signal_export", "goal_export", "friction_export", "meeting_export", "other"] }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "content_base64", "flag": "content-base64", "type": "string", "required": true }], "hasComplexInput": false, "help": "Ingest one bounded CSV source into encrypted tenant/run-bound retained storage. The server computes its digest and canonical family manifest; paths, URLs, and client digests are not accepted." },
|
|
58181
|
+
{ "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." },
|
|
58182
|
+
{ "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" } },
|
|
58183
|
+
{ "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." },
|
|
58184
|
+
{ "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." },
|
|
58185
|
+
{ "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." },
|
|
58186
|
+
{ "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." },
|
|
58187
|
+
{ "id": "runner.revoke", "namespace": "runner", "action": "revoke", "title": "Revoke runner", "description": "Revoke a runner so it can no longer authenticate or claim work.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "runner_id", "flag": "runner-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Revoke a runner when a machine should no longer authenticate or claim work; this is a human-gated action." },
|
|
58188
|
+
{ "id": "runner.status", "namespace": "runner", "action": "status", "title": "Runner status", "description": "Read a single runner's capability and online/offline/revoked state.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "runner_id", "flag": "runner-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Check a runner's capability and heartbeat state when diagnosing offline work." },
|
|
58189
|
+
{ "id": "scorecard.grid", "namespace": "scorecard", "action": "grid", "title": "Read the scorecard grid", "description": "Return the leadership scorecard trailing grid: rows are measurables of a cadence (default weekly), columns are the trailing N periods with a colour-coded cell per period, plus the computed Org-Checkup system-health measurables. Seat-scoped callers see only their own seat.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "cadence", "flag": "cadence", "type": "enum", "required": false, "enumValues": ["daily", "weekly", "monthly", "quarterly", "annual"] }, { "name": "trailing", "flag": "trailing", "type": "integer", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "as_of", "flag": "as-of", "type": "string", "required": false }], "hasComplexInput": false, "help": "Read the leadership scorecard trailing grid (rows = measurables of a cadence, columns = trailing periods, colour-coded cells) plus the computed Org-Checkup system-health measurables. Keep exception-first as the default view." },
|
|
58190
|
+
{ "id": "seat.create", "namespace": "seat", "action": "create", "title": "Create seat", "description": "Create a Responsibility Graph seat.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "name", "flag": "name", "type": "string", "required": true }, { "name": "parent_seat_id", "flag": "parent-seat-id", "type": "string", "required": false }, { "name": "seat_type", "flag": "seat-type", "type": "enum", "required": false, "enumValues": ["human", "agent", "hybrid"] }], "hasComplexInput": false, "help": "Create seats from functions before assigning people or agents." },
|
|
58191
|
+
{ "id": "seat.create_complete", "namespace": "seat", "action": "create_complete", "title": "Create complete seat", "description": "Create a Seat with its Charter, disclosed staffing, and optional dry-run agent shell after owner confirmation.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "idempotency_key", "flag": "idempotency-key", "type": "string", "required": true }], "hasComplexInput": true, "help": "Submit one complete Seat proposal with its Charter, disclosed staffing, and optional dry-run agent configuration. Read the exact schema first; the command stages one owner confirmation, never goes live, and applies every approved effect atomically." },
|
|
58192
|
+
{ "id": "seat.decommission", "namespace": "seat", "action": "decommission", "title": "Decommission seat", "description": "Retire a seat: end occupancies, archive the active charter, revoke seat tokens/credentials, cancel schedules, and emit a tombstone event. Blocks if it would leave another live agent without a human steward chain.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Retiring a seat ends occupancies, archives the active Charter, revokes seat tokens and credentials, and emits a tombstone event. No-orphan guarded. To retire only the agent and keep the seat, use agent.decommission." },
|
|
58193
|
+
{ "id": "seat.decommission_preview", "namespace": "seat", "action": "decommission_preview", "title": "Preview seat decommission", "description": "Show exactly what retiring a seat would end, revoke, archive, or expire without mutating state. The no-orphan steward guard is still checked when the real decommission executes.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Preview the occupancies, agents, Charter versions, tokens, credentials, work orders, and schedules that seat.decommission would affect without mutating state." },
|
|
58194
|
+
{ "id": "seat.get", "namespace": "seat", "action": "get", "title": "Get seat detail", "description": "Return seat profile, steward chain, occupancy, Charter ids, agent status, token metadata, and open-work counts.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Inspect a seat's Charter ids, steward chain, occupancy, agent status, token metadata, and open-work counts before acting on it." },
|
|
58195
|
+
{ "id": "seat.rename", "namespace": "seat", "action": "rename", "title": "Rename seat", "description": "Rename a Responsibility Graph seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "name", "flag": "name", "type": "string", "required": true }], "hasComplexInput": false, "help": "Seat names should describe the function and accountability clearly." },
|
|
58196
|
+
{ "id": "seat.reparent", "namespace": "seat", "action": "reparent", "title": "Reparent seat", "description": "Move a Responsibility Graph seat under a new parent.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "new_parent_seat_id", "flag": "new-parent-seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Reparent seats only when it clarifies accountable structure and preserves a clean graph." },
|
|
58197
|
+
{ "id": "seat.set_type", "namespace": "seat", "action": "set_type", "title": "Set seat type", "description": "Set a Responsibility Graph seat type.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "seat_type", "flag": "seat-type", "type": "enum", "required": true, "enumValues": ["human", "agent", "hybrid"] }], "hasComplexInput": false, "help": "Seat type should follow the work, risk, measurable, and stewardship model." },
|
|
58198
|
+
{ "id": "secret_grant.grant", "namespace": "secret_grant", "action": "grant", "title": "Grant a brokered secret", "description": "A human grants a seat scoped access to a brokered secret by CREDENTIAL ID (from credential.list / credential.ingress \u2014 resolved to its vault ref server-side) or by VAULT REF directly (exactly one). Postgres stores only the pointer \u2014 never secret material. Owner-only, human-gated. The secret.broker/baserow.* tools resolve this grant server-side; the secret never enters agent context.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "grant_key", "flag": "grant-key", "type": "string", "required": true }, { "name": "vault_ref", "flag": "vault-ref", "type": "string", "required": false }, { "name": "credential_id", "flag": "credential-id", "type": "string", "required": false }, { "name": "provider", "flag": "provider", "type": "string", "required": true }, { "name": "allowed_host", "flag": "allowed-host", "type": "string", "required": true }, { "name": "allowed_path_prefix", "flag": "allowed-path-prefix", "type": "string", "required": false }, { "name": "allowed_methods", "flag": "allowed-methods", "type": "array", "required": true, "itemType": "string" }, { "name": "scope_tier", "flag": "scope-tier", "type": "enum", "required": true, "enumValues": ["read", "write"] }, { "name": "injection_mode", "flag": "injection-mode", "type": "enum", "required": false, "enumValues": ["header_bearer", "header", "query"] }, { "name": "injection_name", "flag": "injection-name", "type": "string", "required": false }, { "name": "injection_prefix", "flag": "injection-prefix", "type": "string", "required": false }, { "name": "expires_at", "flag": "expires-at", "type": "string", "required": false }], "hasComplexInput": false, "help": "A human grants a seat a scoped brokered secret by vault ref (host + path prefix + methods + injection). Postgres stores only the pointer, never secret material. Owner-only and human-gated; the secret.broker/baserow.* tools resolve it server-side." },
|
|
58199
|
+
{ "id": "secret_grant.list", "namespace": "secret_grant", "action": "list", "title": "List brokered secret grants", "description": "List brokered secret grants for the tenant (or one seat). Returns the egress allowlist metadata only (host, path prefix, methods, scope, status) \u2014 never the vault ref or any secret. An agent sees only its own seat's grants.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "include_revoked", "flag": "include-revoked", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "List brokered secret grants for the tenant (or one seat). Returns the egress allowlist metadata only \u2014 host, path prefix, methods, scope, status \u2014 never the vault ref or any secret." },
|
|
58200
|
+
{ "id": "secret_grant.request", "namespace": "secret_grant", "action": "request", "title": "Request a brokered secret grant", "description": "An agent or user REQUESTS a scoped brokered-secret grant by naming the egress it needs (grant key, host, path prefix, methods, scope). No secret and no vault ref are ever accepted \u2014 this only records a durable ask for a human to grant.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "grant_key", "flag": "grant-key", "type": "string", "required": true }, { "name": "provider", "flag": "provider", "type": "string", "required": true }, { "name": "allowed_host", "flag": "allowed-host", "type": "string", "required": true }, { "name": "allowed_path_prefix", "flag": "allowed-path-prefix", "type": "string", "required": false }, { "name": "allowed_methods", "flag": "allowed-methods", "type": "array", "required": true, "itemType": "string" }, { "name": "scope_tier", "flag": "scope-tier", "type": "enum", "required": true, "enumValues": ["read", "write"] }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "An agent or user requests a brokered-secret egress grant by naming the host, path prefix, methods, and scope it needs. Draft-and-confirm: no secret or vault ref is accepted; a human grants it." },
|
|
58201
|
+
{ "id": "secret_grant.revoke", "namespace": "secret_grant", "action": "revoke", "title": "Revoke a brokered secret grant", "description": "Revoke a brokered secret grant \u2014 a compromised or over-scoped seat's egress access can be cut immediately; the next broker call resolves no grant and fails closed. Owner-only, human-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "grant_id", "flag": "grant-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Revoke a brokered secret grant (teardown \u2014 cut a compromised or over-scoped seat's egress immediately; the next broker call fails closed). Owner-only and human-gated." },
|
|
58202
|
+
{ "id": "settings.agent_policy.get", "namespace": "settings", "action": "agent_policy.get", "title": "Get company autonomy ceiling", "description": "Read this company's Company Guardrails ceiling (ADR-0007): the profile, enforcement mode, and the most an agent may do autonomously (max_autonomous_risk). Returns metadata only.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read this company's autonomy ceiling (Company Guardrails, ADR-0007): profile, enforcement mode, and the most an agent may do autonomously." },
|
|
58203
|
+
{ "id": "settings.agent_policy.update", "namespace": "settings", "action": "agent_policy.update", "title": "Set company autonomy ceiling", "description": "Set the Company Guardrails ceiling (ADR-0007): a named profile (locked_down, balanced, high_autonomy) or custom + max_autonomous_risk. Tenant-admin and human-gated. An explicitly set ceiling is ENFORCED by default; pass enforcement=observe to stage a change without blocking.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "profile", "flag": "profile", "type": "enum", "required": true, "enumValues": ["locked_down", "balanced", "high_autonomy", "custom"] }, { "name": "max_autonomous_risk", "flag": "max-autonomous-risk", "type": "enum", "required": false, "enumValues": ["low", "medium", "high", "critical"] }, { "name": "enforcement", "flag": "enforcement", "type": "enum", "required": false, "enumValues": ["observe", "enforce"] }], "hasComplexInput": false, "help": "Set the company autonomy ceiling: a profile (locked_down, balanced, high_autonomy) or custom + max_autonomous_risk. Owner-only, human-gated, and enforced by default." },
|
|
58204
|
+
{ "id": "settings.confirmation_policy.get", "namespace": "settings", "action": "confirmation_policy.get", "title": "Get CLI confirmation mode", "description": "Read this company's CLI confirmation mode (DER-1490): careful (the strict default \u2014 the CLI cannot silently auto-approve a confirmation) or trusted_operator (an owner opt-in permitting silent auto-approval of non-dangerous confirmations). Returns metadata only.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read this company's CLI confirmation mode: careful (the strict default \u2014 the CLI cannot silently auto-approve a confirmation) or trusted_operator (an owner opt-in permitting silent auto-approval of non-dangerous confirmations)." },
|
|
58205
|
+
{ "id": "settings.confirmation_policy.update", "namespace": "settings", "action": "confirmation_policy.update", "title": "Set CLI confirmation mode", "description": "Set this company's CLI confirmation mode (DER-1490): careful (strict \u2014 no silent CLI auto-approval) or trusted_operator (owner opt-in permitting silent auto-approval of non-dangerous confirmations; dangerous confirmations always require an interactive review). Owner-only and human-gated: choosing trusted_operator establishes an ADR-0018 \xA76 standing authorization.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "cli_mode", "flag": "cli-mode", "type": "enum", "required": true, "enumValues": ["trusted_operator", "careful"] }], "hasComplexInput": false, "help": "Set the CLI confirmation mode to careful or trusted_operator. Owner-only and human-gated; trusted_operator establishes a standing authorization and dangerous confirmations still require an interactive review." },
|
|
58206
|
+
{ "id": "settings.get", "namespace": "settings", "action": "get", "title": "Get tenant settings", "description": "Read tenant operating settings: plan, status, spend/budgets, integration status, and notification preferences. Returns metadata only.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read tenant operating settings: plan, spend, budgets, integration status, and notification preferences. No secrets." },
|
|
58207
|
+
{ "id": "settings.member_visibility.get", "namespace": "settings", "action": "member_visibility.get", "title": "Get member visibility mode", "description": "Read the tenant's member visibility mode: all (every member sees all Signals/Frictions) or seat_subtree (a member sees only their occupied seats plus downstream seats).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read whether members see all Signals/Frictions tenant-wide (all) or only their occupied seats plus downstream seats (seat_subtree)." },
|
|
58208
|
+
{ "id": "settings.member_visibility.update", "namespace": "settings", "action": "member_visibility.update", "title": "Update member visibility mode", "description": "Set the tenant's member visibility mode (all or seat_subtree). Governs how non-owner members see Signals (Scorecard) and Frictions (Issues); write actions stay role-gated.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "member_visibility_mode", "flag": "member-visibility-mode", "type": "enum", "required": true, "enumValues": ["all", "seat_subtree"] }], "hasComplexInput": false, "help": "Set member visibility to all or seat_subtree; owner-only. Governs how non-owner members see the Scorecard and Issues; write actions stay role-gated." },
|
|
58209
|
+
{ "id": "settings.product_learning.get", "namespace": "settings", "action": "product_learning.get", "title": "Get product-learning policy", "description": "Read whether product/page/recommendation analytics may be recorded for this tenant. Security and audit logs remain enabled in every mode.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read whether product/page/recommendation analytics are allowed for the tenant; security and audit logs always stay enabled." },
|
|
58210
|
+
{ "id": "settings.product_learning.update", "namespace": "settings", "action": "product_learning.update", "title": "Update product-learning policy", "description": "Set tenant product-learning participation. Disabled and enterprise-contract modes block generic product analytics writes, but not security/audit logs.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "mode", "flag": "mode", "type": "enum", "required": true, "enumValues": ["enabled", "disabled", "enterprise_contract"] }], "hasComplexInput": false, "help": "Set tenant product-learning mode to enabled, disabled, or enterprise_contract; the change is human-gated." },
|
|
58211
|
+
{ "id": "settings.sync_brief_scope.get", "namespace": "settings", "action": "sync_brief_scope.get", "title": "Get Sync Brief scope", "description": "Read the tenant's Sync Brief scope: company_wide (one weekly brief) or per_cluster (one brief per cluster).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read whether weekly Sync Briefs compile company-wide (one brief) or per cluster (one brief per cluster)." },
|
|
58212
|
+
{ "id": "settings.sync_brief_scope.update", "namespace": "settings", "action": "sync_brief_scope.update", "title": "Update Sync Brief scope", "description": "Set the tenant's Sync Brief scope (company_wide or per_cluster). Per_cluster falls back to company-wide when the tenant has no clusters.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "sync_brief_scope", "flag": "sync-brief-scope", "type": "enum", "required": true, "enumValues": ["company_wide", "per_cluster"] }], "hasComplexInput": false, "help": "Set Sync Brief scope to company_wide or per_cluster; per_cluster falls back to company-wide when no clusters exist." },
|
|
58213
|
+
{ "id": "settings.tool_policy.get", "namespace": "settings", "action": "tool_policy.get", "title": "Get tenant tool policy", "description": "Read the tenant tool-policy settings that govern capability-grant defaults and the AICOS auto-trust posture. Returns metadata only.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read tenant capability-grant defaults and the AICOS auto-trust posture. No secrets." },
|
|
58214
|
+
{ "id": "settings.tool_policy.update", "namespace": "settings", "action": "tool_policy.update", "title": "Update tenant tool policy", "description": "Set the tenant tool-policy defaults for capability grants and the AICOS auto-trust posture. Owner/admin only and human-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "mode", "flag": "mode", "type": "enum", "required": true, "enumValues": ["managed", "open"] }], "hasComplexInput": true, "help": "Update tenant capability-grant defaults and the AICOS auto-trust posture. Owner/admin only, human-gated, and event-audited." },
|
|
58215
|
+
{ "id": "settings.update", "namespace": "settings", "action": "update", "title": "Update tenant settings", "description": "Update tenant AI budget caps (soft/hard, USD). Budget changes are dangerous and gated.", "requiredScope": "tenant", "confirmation": "dangerous", "exposeOverMcp": true, "fields": [{ "name": "soft_cap_usd", "flag": "soft-cap-usd", "type": "string", "required": false }, { "name": "hard_cap_usd", "flag": "hard-cap-usd", "type": "string", "required": false }], "hasComplexInput": false, "help": "Update tenant AI budget caps; budget changes are dangerous and require human confirmation." },
|
|
58216
|
+
{ "id": "signal.bind", "namespace": "signal", "action": "bind", "title": "Bind a signal source (draft)", "description": "Persist a validated recipe + connection + cadence as an INERT draft binding for a measurable. Requires a valid preview_token from signal.preview of the same recipe. Never activates \u2014 a human signal.bind_confirm does that.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "integration_id", "flag": "integration-id", "type": "string", "required": true }, { "name": "cadence", "flag": "cadence", "type": "enum", "required": true, "enumValues": ["daily", "weekly", "monthly", "quarterly", "annual"] }, { "name": "host_allowlist", "flag": "host-allowlist", "type": "array", "required": true, "itemType": "string" }, { "name": "preview_token", "flag": "preview-token", "type": "string", "required": true }, { "name": "role", "flag": "role", "type": "enum", "required": false, "enumValues": ["informs", "drives_status"] }], "hasComplexInput": true, "help": "Persist a validated recipe as an inert draft binding; requires the preview_token from a preview of the same recipe." },
|
|
58217
|
+
{ "id": "signal.bind_confirm", "namespace": "signal", "action": "bind_confirm", "title": "Confirm and activate a signal binding", "description": "Human-only activation of a draft signal binding (draft \u2192 active). Agents can never self-activate \u2014 an agent caller produces a pending confirmation. A drives_status binding requires a second-anchor confirmation. Once active, the scheduled pull auto-fills the measurable.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "binding_id", "flag": "binding-id", "type": "string", "required": true }], "hasComplexInput": true, "help": "Human-only: activate a draft signal binding (draft -> active) so scheduled pulls begin; an agent that calls it produces a pending confirmation." },
|
|
58218
|
+
{ "id": "signal.confirm_reading", "namespace": "signal", "action": "confirm_reading", "title": "Confirm Signal reading", "description": "Confirm an unconfirmed reading. Humans confirm; agents cannot. Idempotent on an already-confirmed reading.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "reading_id", "flag": "reading-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Confirm an unconfirmed reading as human-verified; confirmation is a human act, not an agent one." },
|
|
58219
|
+
{ "id": "signal.correct_reading", "namespace": "signal", "action": "correct_reading", "title": "Correct Signal reading", "description": "Overwrite a reading for a period with a human-confirmed value. A manual correction is a human decision and is gated behind confirmation.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "period_start", "flag": "period-start", "type": "string", "required": true }, { "name": "value", "flag": "value", "type": "number", "required": true }], "hasComplexInput": false, "help": "Correct a reading only as a human; manual corrections that change confirmed data require confirmation." },
|
|
58220
|
+
{ "id": "signal.draft_first_readings", "namespace": "signal", "action": "draft_first_readings", "title": "Draft first readings from a connected source", "description": "Pull a measurable's connected source ONCE (read-only, SSRF-guarded) and land the value as a DRAFT reading for the current period, for a human to confirm. For a measurable that has a source but no confirmed reading yet. Never publishes a reading and never fabricates a value \u2014 a non-numeric or blocked pull drafts nothing.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Pull a measurable's connected source once (read-only, SSRF-guarded) and land the value as a DRAFT reading for the current period, for a human to confirm with signal.confirm_reading. For a measurable that has a source but no confirmed reading yet. Never publishes and never fabricates a value \u2014 a non-numeric or blocked pull drafts nothing.", "example": { "measurable_id": "01900001-0001-7001-8001-000000000001" } },
|
|
58221
|
+
{ "id": "signal.get", "namespace": "signal", "action": "get", "title": "Get Signal", "description": "Return a measurable definition with its full reading history (confirmed and unconfirmed).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Read a measurable's full reading history before confirming or correcting a value." },
|
|
58222
|
+
{ "id": "signal.import", "namespace": "signal", "action": "import", "title": "Import Signals from CSV", "description": "Bulk-import measurable definitions and their historical readings from a parsed scorecard export (e.g. a ninety CSV). Owners are seat names resolved to seats; readings are human-confirmed. Idempotent \u2014 re-import upserts by (measurable, period, cadence). Re-importing a measurable at a different cadence is rejected, not overwritten.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "dry_run", "flag": "dry-run", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Bulk-import measurables + historical readings from a parsed scorecard export (owners resolve to seats); idempotent, human-confirmed, re-import upserts by period." },
|
|
58223
|
+
{ "id": "signal.list", "namespace": "signal", "action": "list", "title": "List Signals", "description": "List measurable definitions with their latest reading and on/off-track state. Seat-scoped callers see only their own seat.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "List Signals to find measurable ids and current on/off-track state before recording or correcting readings." },
|
|
58224
|
+
{ "id": "signal.preview", "namespace": "signal", "action": "preview", "title": "Preview a signal source", "description": "Execute a candidate rest-for-signals recipe LIVE and read-only against an allowlisted HTTPS source, returning the extracted scalar and a short-lived preview_token required by signal.bind. Guarded (SSRF + restricted JSONPath); writes a signal_pull_log row. Never mutates.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "integration_id", "flag": "integration-id", "type": "string", "required": true }, { "name": "cadence", "flag": "cadence", "type": "enum", "required": true, "enumValues": ["daily", "weekly", "monthly", "quarterly", "annual"] }, { "name": "host_allowlist", "flag": "host-allowlist", "type": "array", "required": true, "itemType": "string" }], "hasComplexInput": true, "help": "Run a candidate recipe live but read-only against an allowlisted HTTPS source; returns the extracted value + a short-lived preview_token. Never mutates; the credential is resolved from the connection at execution." },
|
|
58225
|
+
{ "id": "signal.report", "namespace": "signal", "action": "report", "title": "Report a Signal reading", "description": "A per-seat Signal agent proposes one draft reading for one of its OWN seat's agent-sourced measurables (a judgment/transform pull \u2014 reading a number off a document, reconciling messy data, estimating progress). The reading lands unconfirmed; a human confirms it with signal.confirm_reading. Refuses any measurable not owned by the acting seat or whose source is not 'agent'.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "value", "flag": "value", "type": "number", "required": true }, { "name": "period_start", "flag": "period-start", "type": "string", "required": false }, { "name": "note", "flag": "note", "type": "string", "required": false }, { "name": "confidence", "flag": "confidence", "type": "enum", "required": false, "enumValues": ["low", "medium", "high"] }], "hasComplexInput": false, "help": "A per-seat Signal agent proposes one draft reading for its own seat's agent-sourced measurable (a judgment/transform pull). The reading lands unconfirmed; a human confirms it with signal.confirm_reading. Refuses non-agent-sourced or other-seat measurables.", "example": { "measurable_id": "01900001-0001-7001-8001-000000000001", "value": 42, "note": "Read off the Q3 close PDF, page 2 \u2014 42 reconciled invoices this week.", "confidence": "high" } },
|
|
58226
|
+
{ "id": "signup.provision_tenant", "namespace": "signup", "action": "provision_tenant", "title": "Create company", "description": "Provision a new company (tenant) for the authenticated CLI user with no web step.", "requiredScope": "user", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "company_name", "flag": "company-name", "type": "string", "required": true }], "hasComplexInput": false, "help": "Create the company headlessly when the CLI session has no tenant yet; it becomes the user's active tenant so the rest of setup runs with no web step." },
|
|
58227
|
+
{ "id": "skill.assign_to_seat", "namespace": "skill", "action": "assign_to_seat", "title": "Assign skill to seat", "description": "Propose or human-approve a published immutable skill version for a Seat after checking required and optional tool dependencies.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "slug", "flag": "slug", "type": "string", "required": false }, { "name": "skill_version_id", "flag": "skill-version-id", "type": "string", "required": false }, { "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["proposed", "approved"] }, { "name": "rationale", "flag": "rationale", "type": "string", "required": true }, { "name": "allow_blocked_proposal", "flag": "allow-blocked-proposal", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Propose or human-approve a published Skill for a Seat after dependency checks. Missing required tools block approval; optional tools are warnings only." },
|
|
58228
|
+
{ "id": "skill.assigned.list", "namespace": "skill", "action": "assigned.list", "title": "List assigned skills", "description": "List approved skill assignments for a Seat, including immutable version, dependency status, rationale, and approval time. Seat-scoped callers can only read their own assignments.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "List approved Skills assigned to a Seat before loading instructions into a run. A seat-scoped token can only read its own assigned Skills." },
|
|
58229
|
+
{ "id": "skill.catalog", "namespace": "skill", "action": "catalog", "title": "List ROST skill catalog", "description": "List ROST-maintained catalog skills the active tenant is entitled to see. Private source URLs are never returned.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "query", "flag": "query", "type": "string", "required": false }, { "name": "include_unentitled", "flag": "include-unentitled", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "List entitled ROST catalog Skills. Private catalog source locations stay server-side; agents install from ROST APIs, not private GitHub." },
|
|
58230
|
+
{ "id": "skill.check_dependencies", "namespace": "skill", "action": "check_dependencies", "title": "Check skill dependencies", "description": "Compare a skill version's required and optional tools against a Seat's active or draft Charter permission manifest. Returns ready, blocked, or warning plus suggested agent.configure_tools input; it does not grant permissions.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "skill_version_id", "flag": "skill-version-id", "type": "string", "required": false }, { "name": "slug", "flag": "slug", "type": "string", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Compare a Skill's required and optional tools with a Seat's signed Charter manifest. Missing tools must be connected through agent.configure_tools; the Skill never grants authority." },
|
|
58231
|
+
{ "id": "skill.create", "namespace": "skill", "action": "create", "title": "Create skill", "description": "Create a tenant skill draft or pending-review skill from a bounded SKILL.md package. Skills store reusable know-how only; they do not grant tools.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["draft", "pending_review"] }], "hasComplexInput": true, "help": "Create a draft Skill from a bounded SKILL.md package only when the procedure is reusable operating know-how, not authorization or one-off task context." },
|
|
58232
|
+
{ "id": "skill.enable_catalog", "namespace": "skill", "action": "enable_catalog", "title": "Enable ROST catalog skill", "description": "Human-gated enablement of an entitled ROST catalog skill into the tenant-owned Skills library, preserving catalog provenance and content hash.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "slug", "flag": "slug", "type": "string", "required": true }], "hasComplexInput": false, "help": "Enable an entitled ROST catalog Skill into the company library with human confirmation, preserving catalog provenance and immutable content hash." },
|
|
58233
|
+
{ "id": "skill.file.get", "namespace": "skill", "action": "file.get", "title": "Get skill file", "description": "Read stored skill package file content by slug and package path. The path is resolved only inside the stored package payload; it never reads the server filesystem.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "slug", "flag": "slug", "type": "string", "required": true }, { "name": "path", "flag": "path", "type": "string", "required": true }], "hasComplexInput": false, "help": "Read a stored Skill package file by package path only; use SKILL.md for full instructions and supporting files only when the descriptor says they are needed." },
|
|
58234
|
+
{ "id": "skill.get", "namespace": "skill", "action": "get", "title": "Get skill", "description": "Read one skill descriptor and latest stored version metadata. Seat-scoped callers can read only approved assigned published skills.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "slug", "flag": "slug", "type": "string", "required": true }], "hasComplexInput": false, "help": "Read a Skill descriptor and latest version metadata before deciding whether to reuse it, inspect its files, or create a new Skill." },
|
|
58235
|
+
{ "id": "skill.import_github", "namespace": "skill", "action": "import_github", "title": "Import GitHub skill", "description": "Import a public GitHub skill package into pending review or draft after bounded package validation.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "url", "flag": "url", "type": "string", "required": true }, { "name": "ref", "flag": "ref", "type": "string", "required": false }, { "name": "path", "flag": "path", "type": "string", "required": false }, { "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["draft", "pending_review"] }], "hasComplexInput": false, "help": "Import a public GitHub Skill package into draft or pending review after validation; imported Skills are untrusted until reviewed and published." },
|
|
58236
|
+
{ "id": "skill.import_upload", "namespace": "skill", "action": "import_upload", "title": "Import uploaded skill", "description": "Import a bounded text skill package into the tenant library as a draft or pending-review skill.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["draft", "pending_review"] }], "hasComplexInput": true, "help": "Import a bounded text Skill package; never include secrets, private one-off task context, or authority rules that belong in the Charter." },
|
|
58237
|
+
{ "id": "skill.install_local", "namespace": "skill", "action": "install_local", "title": "Install skill locally", "description": "Resolve an approved company skill or entitled ROST catalog skill for local CLI installation. The server returns package files; it never exposes private GitHub URLs or tokens.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "slug", "flag": "slug", "type": "string", "required": true }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "client", "flag": "client", "type": "enum", "required": true, "enumValues": ["claude-code", "codex", "cursor"] }, { "name": "version", "flag": "version", "type": "integer", "required": false }, { "name": "local_only", "flag": "local-only", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Resolve company or entitled ROST catalog Skill files for local CLI installation. The returned package comes from ROST APIs and never includes private GitHub tokens or URLs." },
|
|
58238
|
+
{ "id": "skill.list", "namespace": "skill", "action": "list", "title": "List skills", "description": "List tenant skills with application descriptors, dependency metadata, source status, latest version, and assigned Seat count. Seat-scoped callers see only approved assigned published skills.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["draft", "pending_review", "published", "archived"] }, { "name": "visibility", "flag": "visibility", "type": "enum", "required": false, "enumValues": ["private", "seat", "tenant"] }, { "name": "query", "flag": "query", "type": "string", "required": false }, { "name": "include_archived", "flag": "include-archived", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "List reusable Skills before creating or assigning new agent operating knowledge. Seat-scoped callers only see assigned, approved, published Skills." },
|
|
58239
|
+
{ "id": "skill.publish", "namespace": "skill", "action": "publish", "title": "Publish skill", "description": "Human-gated publication of a reviewed skill version. Published versions become immutable and can be assigned to Seats.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "slug", "flag": "slug", "type": "string", "required": false }, { "name": "skill_version_id", "flag": "skill-version-id", "type": "string", "required": false }, { "name": "allow_warnings", "flag": "allow-warnings", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Publish a reviewed Skill version only with human confirmation. Publishing makes the version immutable and assignable, but it still grants no tools." },
|
|
58240
|
+
{ "id": "skill.revoke_from_seat", "namespace": "skill", "action": "revoke_from_seat", "title": "Revoke skill from seat", "description": "Human-gated revocation of a Seat skill assignment. Revocation stops future skill use without deleting historical run activations.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "assignment_id", "flag": "assignment-id", "type": "string", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "slug", "flag": "slug", "type": "string", "required": false }, { "name": "skill_version_id", "flag": "skill-version-id", "type": "string", "required": false }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "Revoke future use of an assigned Skill with human confirmation while preserving historical run activation records." },
|
|
58241
|
+
{ "id": "skill.sync_local", "namespace": "skill", "action": "sync_local", "title": "Sync assigned skills locally", "description": "Resolve all approved published skills assigned to a Seat for local CLI installation. Revoked assignments are reported so the client can mark stale local copies.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "client", "flag": "client", "type": "enum", "required": true, "enumValues": ["claude-code", "codex", "cursor"] }], "hasComplexInput": false, "help": "Resolve all approved Skills assigned to a local agent Seat so the CLI can install or update unchanged-by-hash local copies." },
|
|
58242
|
+
{ "id": "skill.update_draft", "namespace": "skill", "action": "update_draft", "title": "Update skill draft", "description": "Replace or create the current unpublished draft version for an existing skill from a bounded SKILL.md package.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "slug", "flag": "slug", "type": "string", "required": true }, { "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["draft", "pending_review"] }], "hasComplexInput": true, "help": "Update the current unpublished Skill draft; published versions stay immutable, so durable corrections should become reviewed new versions." },
|
|
58243
|
+
{ "id": "software_factory.authority_profile.create", "namespace": "software_factory", "action": "authority_profile.create", "title": "Create a Forge authority profile", "description": "Define a Forge authority profile (a named seat capability preset). Owner-only; defaults to the read_only preset (conservative by default). Entitlement-gated.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": false }, { "name": "name", "flag": "name", "type": "string", "required": true }, { "name": "preset", "flag": "preset", "type": "enum", "required": false, "enumValues": ["read_only", "contributor", "maintainer", "deployer", "power_admin"] }, { "name": "is_default", "flag": "is-default", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Define a Forge authority profile (a named seat capability preset). Owner-only; defaults to read_only." },
|
|
58244
|
+
{ "id": "software_factory.authority_profile.list", "namespace": "software_factory", "action": "authority_profile.list", "title": "List Forge authority profiles", "description": "The tenant's Forge authority profiles (the seat capability presets, read-only by default). Entitlement-gated.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "List Forge authority profiles (seat capability presets, read-only by default). Read-only; requires the Forge add-on." },
|
|
58245
|
+
{ "id": "software_factory.authority.grant", "namespace": "software_factory", "action": "authority.grant", "title": "Grant Forge seat authority", "description": "Grant a seat a Forge authority profile on a project (seat \u2192 project \u2192 profile). Owner-only, human-gated (an agent caller routes to /approvals). Entitlement-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "authority_profile_id", "flag": "authority-profile-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Grant a seat a Forge authority profile on a project. Owner-only and human-gated; emits a durable authority-change event." },
|
|
58246
|
+
{ "id": "software_factory.authority.revoke", "namespace": "software_factory", "action": "authority.revoke", "title": "Revoke Forge seat authority", "description": "Revoke a Forge authority grant (teardown \u2014 ADR-0018 \xA76). Owner-only, human-gated. Entitlement-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "grant_id", "flag": "grant-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Revoke a Forge authority grant (teardown). Owner-only and human-gated." },
|
|
58247
|
+
{ "id": "software_factory.capacity.list", "namespace": "software_factory", "action": "capacity.list", "title": "List Forge runner capacity", "description": "The tenant's Forge runner capacity observations (OS, CPU, memory, active sessions, usage-limit telemetry). Advisory scheduling input only, never an authority input. Entitlement-gated.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "runner_id", "flag": "runner-id", "type": "string", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List Forge runner capacity observations (advisory scheduling input only, never an authority input). Read-only; requires the Forge add-on." },
|
|
58248
|
+
{ "id": "software_factory.config.list", "namespace": "software_factory", "action": "config.list", "title": "List Forge config", "description": "Active Forge config metadata for project environments. Plain config values may be returned; secret refs are represented only as has_secret_ref.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": false }, { "name": "environment", "flag": "environment", "type": "enum", "required": false, "enumValues": ["development", "preview", "production"] }], "hasComplexInput": false, "help": "List active Forge config entries. Plain config may be shown; secret refs are represented only as metadata." },
|
|
58249
|
+
{ "id": "software_factory.config.set", "namespace": "software_factory", "action": "config.set", "title": "Set Forge config", "description": "Create or rotate a Forge project config entry. Secret config stores only a vault ref pointer; raw values are never accepted for secret_ref entries.", "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": "key_name", "flag": "key-name", "type": "string", "required": true }, { "name": "value_kind", "flag": "value-kind", "type": "enum", "required": true, "enumValues": ["plain", "secret_ref"] }, { "name": "plain_value", "flag": "plain-value", "type": "string", "required": false }, { "name": "vault_ref", "flag": "vault-ref", "type": "string", "required": false }], "hasComplexInput": false, "help": "Set or rotate a Forge project config key. Secret entries store only vault refs and are human-gated." },
|
|
58250
|
+
{ "id": "software_factory.conformance.record_findings", "namespace": "software_factory", "action": "conformance.record_findings", "title": "Record Forge conformance findings", "description": "The plan-conformance reviewer records one or more findings against a build request; open findings route the request back to implementation. Recording is evidence, not a decision \u2014 accepting a gap is a separate human gate. Requires the Forge add-on.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "phase_run_id", "flag": "phase-run-id", "type": "string", "required": false }], "hasComplexInput": true, "help": "Record structured Forge plan-conformance findings as reviewer evidence. Open findings route the request back to implementation; accepting a gap remains a separate human gate." },
|
|
58251
|
+
{ "id": "software_factory.conformance.resolve_finding", "namespace": "software_factory", "action": "conformance.resolve_finding", "title": "Resolve Forge conformance finding", "description": "A Forge review seat marks one or more prior open conformance findings resolved after re-reviewing the changeset and verifying they are fixed. This is reviewer verification, not gap-acceptance (accepting a gap stays a separate human gate). A resolved finding stops routing the request back to implementation, letting the recycle loop converge. Requires the Forge add-on.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "finding_ids", "flag": "finding-ids", "type": "array", "required": true, "itemType": "string" }, { "name": "phase_run_id", "flag": "phase-run-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Resolve a prior open Forge conformance finding after re-reviewing the changeset and verifying it is fixed (reviewer verification, not human gap-acceptance). A resolved finding stops routing the request back to implementation, letting the recycle loop converge." },
|
|
58252
|
+
{ "id": "software_factory.developer_team.install", "namespace": "software_factory", "action": "developer_team.install", "title": "Install Forge Developer Team", "description": "Install AND activate the governed Forge Developer Team: 8 seats (1 human lead + 7 agents), first-party skills, authority presets, and a conservative token budget. Approving this ACTIVATES the 7 agents as live occupancies at a pr_only, observe-first posture: they open pull requests but never merge or deploy without a human (the Release Manager auto-merges only after a human raises the automation-mode ceiling). Entitlement-gated and human-confirmed.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "steward_seat_id", "flag": "steward-seat-id", "type": "string", "required": true }, { "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": false }, { "name": "assign_skills", "flag": "assign-skills", "type": "boolean", "required": false }, { "name": "acknowledge_autonomy_ceiling", "flag": "acknowledge-autonomy-ceiling", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Install the governed Forge Developer Team template with seats, draft Charters, skills, project authority grants, and audit records. Tenant-admin and human-gated; creates no live agent occupancy." },
|
|
58253
|
+
{ "id": "software_factory.developer_team.uninstall", "namespace": "software_factory", "action": "developer_team.uninstall", "title": "Uninstall Forge Developer Team", "description": "Tear down the governed Forge Developer Team (ADR-0018 \xA76): end the auto-staffed agent occupancies in a no-orphan-safe order, decommission the agents, and revoke the team's project authority and secret grants. The human Forge Lead seat is left intact; re-installing re-staffs the team. The entitlement-lapse variant runs the same teardown path without re-checking the Forge paywall. Owner-only and human-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "reason", "flag": "reason", "type": "string", "required": false }, { "name": "trigger", "flag": "trigger", "type": "enum", "required": false, "enumValues": ["manual", "entitlement_lapse"] }], "hasComplexInput": false, "help": "Tear down the Forge Developer Team (teardown \u2014 ADR-0018 \xA76): end the agent occupancies in a no-orphan-safe order, decommission the agents, and revoke the team's authority and secret grants. The human Forge Lead seat stays. Owner-only and human-gated; the entitlement-lapse variant runs the same teardown path." },
|
|
58254
|
+
{ "id": "software_factory.dispatch.serialize", "namespace": "software_factory", "action": "dispatch.serialize", "title": "Serialize a Forge dispatch collision", "description": "A human appends a tightening depends_on edge to serialize two colliding Forge tasks within one build request (advisory-driven; never auto-blocks). Records a human decision.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "before_task_key", "flag": "before-task-key", "type": "string", "required": true }, { "name": "after_task_key", "flag": "after-task-key", "type": "string", "required": true }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "A human appends a tightening depends_on edge to serialize two colliding Forge tasks within one build request (advisory-driven; never auto-blocks). Records a human decision." },
|
|
58255
|
+
{ "id": "software_factory.gate.decide", "namespace": "software_factory", "action": "gate.decide", "title": "Decide a Forge gate", "description": "A human approves or rejects a Forge gate. The resolver is recorded (never an agent \u2014 invariant #7); sensitive gates (security sign-off, merge/deploy, authority change, production deploy) also write a linked human decision.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "gate_id", "flag": "gate-id", "type": "string", "required": true }, { "name": "decision", "flag": "decision", "type": "enum", "required": true, "enumValues": ["approve", "reject"] }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "A human approves or rejects a Forge gate; an agent caller routes to /approvals and can never self-approve. Sensitive gates record a human decision." },
|
|
58256
|
+
{ "id": "software_factory.github.installation_token.create", "namespace": "software_factory", "action": "github.installation_token.create", "title": "Create a Forge GitHub installation token", "description": "Mint a short-lived GitHub App installation token for one bound repository after server-side policy evaluation. The token is returned once and never persisted.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "repository_id", "flag": "repository-id", "type": "integer", "required": true }, { "name": "requested_actions", "flag": "requested-actions", "type": "array", "required": true, "itemType": "string" }, { "name": "requested_automation_mode", "flag": "requested-automation-mode", "type": "enum", "required": false, "enumValues": ["plan_only", "pr_only", "merge_after_checks", "deploy_preview", "deploy_production"] }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Mint a short-lived GitHub App installation token for one bound repository after policy evaluation; token material is returned once and never stored." },
|
|
58257
|
+
{ "id": "software_factory.github.installation.bind", "namespace": "software_factory", "action": "github.installation.bind", "title": "Bind Forge GitHub repositories to projects", "description": "Bind already-connected GitHub repositories to Forge projects. Owner-only and human-gated; operates on repositories already verified and connected in this tenant, so no GitHub re-authorization is required. Available any time, add or re-map bindings.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "app_slug", "flag": "app-slug", "type": "string", "required": false }, { "name": "installation_id", "flag": "installation-id", "type": "integer", "required": true }], "hasComplexInput": true, "help": "Bind already-connected GitHub repositories to Forge projects from the Forge GitHub settings flow. Owner-only and human-gated; no GitHub re-authorization required." },
|
|
58258
|
+
{ "id": "software_factory.github.installation.connect", "namespace": "software_factory", "action": "github.installation.connect", "title": "Connect a Forge GitHub installation", "description": "Record a proven GitHub App installation and its verified repositories as connected (unbound) so they can be bound to Forge projects later. Owner-only and human-gated; starts from the authenticated Forge GitHub settings flow. Idempotent \u2014 re-connecting reconciles metadata and never unbinds an already-bound repository.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "app_slug", "flag": "app-slug", "type": "string", "required": false }, { "name": "installation_id", "flag": "installation-id", "type": "integer", "required": true }, { "name": "account_login", "flag": "account-login", "type": "string", "required": true }, { "name": "account_id", "flag": "account-id", "type": "integer", "required": true }, { "name": "account_type", "flag": "account-type", "type": "string", "required": true }], "hasComplexInput": true, "help": "Record a verified GitHub App installation and its repositories as connected (unbound) so they can be bound to Forge projects later. Owner-only and human-gated." },
|
|
58259
|
+
{ "id": "software_factory.github.installation.list", "namespace": "software_factory", "action": "github.installation.list", "title": "List Forge GitHub installations", "description": "Connected GitHub App installations and their repositories with bind state (connected or active) and the Forge project each bound repository maps to. Requires the Forge add-on.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "app_slug", "flag": "app-slug", "type": "string", "required": false }], "hasComplexInput": false, "help": "List connected GitHub App installations and each repository's bind state (connected or active) with the Forge project it maps to. Read-only." },
|
|
58260
|
+
{ "id": "software_factory.github.policy.upsert", "namespace": "software_factory", "action": "github.policy.upsert", "title": "Set a Forge GitHub automation policy", "description": "Set the server-side policy for GitHub actions and automation-mode ceilings. Owner-only and human-gated; production deploy remains human-gated. Raising the ceiling to a merge-capable mode (merge_after_checks or higher) first verifies the bound repository has required status checks configured \u2014 it refuses otherwise.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "authority_profile_id", "flag": "authority-profile-id", "type": "string", "required": false }, { "name": "automation_mode_ceiling", "flag": "automation-mode-ceiling", "type": "enum", "required": false, "enumValues": ["plan_only", "pr_only", "merge_after_checks", "deploy_preview", "deploy_production"] }, { "name": "allowed_actions", "flag": "allowed-actions", "type": "array", "required": true, "itemType": "string" }, { "name": "requires_human_for", "flag": "requires-human-for", "type": "array", "required": true, "itemType": "string" }, { "name": "max_risk", "flag": "max-risk", "type": "enum", "required": false, "enumValues": ["low", "medium", "high", "critical"] }], "hasComplexInput": false, "help": "Set Forge's server-side GitHub automation policy for actions, mode ceilings, and human-gated operations." },
|
|
58261
|
+
{ "id": "software_factory.github.repository.unbind", "namespace": "software_factory", "action": "github.repository.unbind", "title": "Unbind a Forge GitHub repository", "description": "Remove a GitHub repository's Forge project binding. By default the repository stays connected (unbound) and can be re-bound later; pass disconnect to remove it entirely. Owner-only and human-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "app_slug", "flag": "app-slug", "type": "string", "required": false }, { "name": "installation_id", "flag": "installation-id", "type": "integer", "required": true }, { "name": "repository_id", "flag": "repository-id", "type": "integer", "required": true }, { "name": "disconnect", "flag": "disconnect", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Remove a GitHub repository's Forge project binding; the repository stays connected for re-binding unless disconnect is set. Owner-only and human-gated." },
|
|
58262
|
+
{ "id": "software_factory.phase.advance", "namespace": "software_factory", "action": "phase.advance", "title": "Advance a Forge build request phase", "description": "Advance a build request to the next phase, enforcing the closed phase state machine server-side (an illegal transition is rejected). Entitlement-gated.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "to_phase", "flag": "to-phase", "type": "enum", "required": true, "enumValues": ["intake", "discovery_scoping", "plan_review", "implementation", "plan_conformance_review", "security_review", "qa_verification", "release_preview", "merge_or_deploy_gate", "closeout"] }, { "name": "owning_seat_id", "flag": "owning-seat-id", "type": "string", "required": false }, { "name": "note", "flag": "note", "type": "string", "required": false }], "hasComplexInput": false, "help": "Advance a build request to its next phase; the server enforces the closed phase state machine and rejects an illegal transition." },
|
|
58263
|
+
{ "id": "software_factory.plan.approve", "namespace": "software_factory", "action": "plan.approve", "title": "Approve a Forge plan", "description": "A human approves the current plan at the plan_review gate; records a human decision and advances the request to implementation. Owner-only and human-gated (invariant #7).", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "A human approves the current plan at the plan_review gate; records a human decision and advances the request to implementation. Owner-only and human-gated." },
|
|
58264
|
+
{ "id": "software_factory.plan.reject", "namespace": "software_factory", "action": "plan.reject", "title": "Reject a Forge plan", "description": "A human rejects the current plan at the plan_review gate; records a human decision (with a required rationale) and routes the request back to discovery/scoping for re-planning. Owner-only and human-gated (invariant #7).", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "rationale", "flag": "rationale", "type": "string", "required": true }], "hasComplexInput": false, "help": "A human rejects the current plan (with a required rationale) and routes the request back to discovery/scoping for re-planning. Owner-only and human-gated." },
|
|
58265
|
+
{ "id": "software_factory.project.create", "namespace": "software_factory", "action": "project.create", "title": "Create a Forge project", "description": "Create an active Forge software project before binding repositories or opening build requests. Tenant-admin, human-gated, and entitlement-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "name", "flag": "name", "type": "string", "required": true }, { "name": "slug", "flag": "slug", "type": "string", "required": false }, { "name": "base_branch", "flag": "base-branch", "type": "string", "required": false }, { "name": "repo_ref", "flag": "repo-ref", "type": "string", "required": false }], "hasComplexInput": false, "help": "Create an active Forge software project before binding repositories or opening build requests. Tenant-admin and human-gated; requires the Forge add-on." },
|
|
58266
|
+
{ "id": "software_factory.project.list", "namespace": "software_factory", "action": "project.list", "title": "List Forge projects", "description": "Active Forge software projects so a tenant can choose a project for build requests, GitHub repository bindings, and config. Entitlement-gated.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List active Forge software projects so a tenant can choose a project for build requests, GitHub repository bindings, and config. Read-only; requires the Forge add-on." },
|
|
58267
|
+
{ "id": "software_factory.request.answer_clarification", "namespace": "software_factory", "action": "request.answer_clarification", "title": "Answer Forge plan clarifications", "description": "Write structured human answers to a draft plan's clarifying questions and optionally mark it ready for plan review. This never widens authority or automation mode.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "mark_ready_for_plan_review", "flag": "mark-ready-for-plan-review", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Write structured human answers to a draft plan's clarifying questions and optionally mark it ready for plan review. Never widens authority or automation mode." },
|
|
58268
|
+
{ "id": "software_factory.request.cancel", "namespace": "software_factory", "action": "request.cancel", "title": "Cancel a Forge build request", "description": "Cancel a Forge build request and expire active runner work orders. This is terminal; use pause for reversible holds. 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": "Cancel a Forge build request, expire unstarted runner work, and terminalize active runner work. Terminal, tenant-admin, and human-gated." },
|
|
58269
|
+
{ "id": "software_factory.request.create", "namespace": "software_factory", "action": "request.create", "title": "Create a Forge build request", "description": "Open a governed Forge build request against a connected software project. Entitlement-gated (Forge add-on); the title is untrusted display text, never an instruction.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": false }, { "name": "project", "flag": "project", "type": "string", "required": false }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "source_channel", "flag": "source-channel", "type": "enum", "required": false, "enumValues": ["ui", "cli", "github_issue", "linear", "api"] }, { "name": "source_ref", "flag": "source-ref", "type": "string", "required": false }, { "name": "automation_mode", "flag": "automation-mode", "type": "enum", "required": false, "enumValues": ["plan_only", "pr_only", "merge_after_checks", "deploy_preview", "deploy_production"] }], "hasComplexInput": true, "help": "Open a governed Forge build request against a connected software project; the title is untrusted display text. Requires the Forge add-on." },
|
|
58270
|
+
{ "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." },
|
|
58271
|
+
{ "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." },
|
|
58272
|
+
{ "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." },
|
|
58273
|
+
{ "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." },
|
|
58274
|
+
{ "id": "software_factory.secret_request.list", "namespace": "software_factory", "action": "secret_request.list", "title": "List Forge secret requests", "description": "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." },
|
|
58275
|
+
{ "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." },
|
|
58276
|
+
{ "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." },
|
|
58277
|
+
{ "id": "software_factory.secret.revoke", "namespace": "software_factory", "action": "secret.revoke", "title": "Revoke a Forge secret grant", "description": "Revoke a Forge secret grant (teardown \u2014 a compromised seat's access can be cut immediately, ADR-0018 \xA76). Owner-only, human-gated. Entitlement-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "grant_id", "flag": "grant-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Revoke a Forge secret grant (teardown \u2014 cut a compromised seat's access immediately). Owner-only and human-gated." },
|
|
58278
|
+
{ "id": "software_factory.secret.use", "namespace": "software_factory", "action": "secret.use", "title": "Verify Forge secret broker access", "description": "Verify a scoped secret broker grant without returning or opening the raw value. Runtime vault access happens only in the runner-side broker helper; this command writes a redacted authorization log and creates a request task for missing grants.", "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": "operation", "flag": "operation", "type": "enum", "required": false, "enumValues": ["use", "vercel_env_sync", "test_execution"] }], "hasComplexInput": false, "help": "Verify scoped broker access without returning or opening the raw value; missing grants create or reuse a request task and all attempts write redacted access logs." },
|
|
58279
|
+
{ "id": "software_factory.vercel.connection.connect", "namespace": "software_factory", "action": "vercel.connection.connect", "title": "Connect a Forge Vercel account", "description": "Record a Vercel OAuth account/team connection. The access token is stored only as a vault ref; this command persists bounded account metadata. Owner-only and human-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "account_id", "flag": "account-id", "type": "string", "required": true }, { "name": "account_name", "flag": "account-name", "type": "string", "required": false }, { "name": "team_id", "flag": "team-id", "type": "string", "required": false }, { "name": "team_slug", "flag": "team-slug", "type": "string", "required": false }, { "name": "user_id", "flag": "user-id", "type": "string", "required": false }, { "name": "configuration_id", "flag": "configuration-id", "type": "string", "required": false }, { "name": "access_token_vault_ref", "flag": "access-token-vault-ref", "type": "string", "required": true }, { "name": "scopes", "flag": "scopes", "type": "array", "required": false, "itemType": "string" }], "hasComplexInput": false, "help": "Record a Vercel OAuth account/team connection from the Forge Vercel settings flow. Stores only a vault-ref pointer to the token. Owner-only and human-gated." },
|
|
58280
|
+
{ "id": "software_factory.vercel.deploy_preview", "namespace": "software_factory", "action": "vercel.deploy_preview", "title": "Create a Forge Vercel preview deployment", "description": "Create a Vercel preview deployment for a linked existing project after Forge authority, Vercel connection, and required secret/config grants are verified.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "commit_sha", "flag": "commit-sha", "type": "string", "required": true }, { "name": "git_ref", "flag": "git-ref", "type": "string", "required": true }, { "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": false }, { "name": "phase_run_id", "flag": "phase-run-id", "type": "string", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "required_secret_keys", "flag": "required-secret-keys", "type": "array", "required": false, "itemType": "string" }], "hasComplexInput": false, "help": "Create a Vercel preview deployment for a linked project after Forge authority, Vercel connection, and required secret/config grants are verified." },
|
|
58281
|
+
{ "id": "software_factory.vercel.project.link", "namespace": "software_factory", "action": "vercel.project.link", "title": "Link a Forge project to Vercel", "description": "Link a Forge project to an existing Vercel project. Greenfield Vercel project creation is intentionally out of scope and remains behind a future authority flag.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "vercel_connection_id", "flag": "vercel-connection-id", "type": "string", "required": true }, { "name": "vercel_project_id", "flag": "vercel-project-id", "type": "string", "required": true }, { "name": "vercel_project_name", "flag": "vercel-project-name", "type": "string", "required": true }, { "name": "framework", "flag": "framework", "type": "string", "required": false }, { "name": "root_directory", "flag": "root-directory", "type": "string", "required": false }, { "name": "production_branch", "flag": "production-branch", "type": "string", "required": false }], "hasComplexInput": true, "help": "Link an existing Vercel project to a Forge software project. Owner-only and human-gated; greenfield project creation remains a future explicit authority." },
|
|
58282
|
+
{ "id": "software_factory.vercel.project.list", "namespace": "software_factory", "action": "vercel.project.list", "title": "List Forge Vercel links", "description": "Vercel account/team connections and existing Vercel project links for this tenant. Token vault refs are never returned.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List Vercel account/team connections and linked Vercel projects. Read-only; no OAuth tokens or vault refs are returned." },
|
|
58283
|
+
{ "id": "staffing.assign", "namespace": "staffing", "action": "assign", "title": "Staff seat", "description": "Compatibility command for the DER-626 MCP staffing tool.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": true, "help": "Staff a seat only after the function, Charter, and human accountability are clear." },
|
|
58284
|
+
{ "id": "staffing.assign_agent_dry_run", "namespace": "staffing", "action": "assign_agent_dry_run", "title": "Assign dry-run agent to seat", "description": "Assign an agent occupancy while the agent remains in dry-run.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Start agent staffing with dry runs and a named human Steward." },
|
|
58285
|
+
{ "id": "staffing.assign_user", "namespace": "staffing", "action": "assign_user", "title": "Assign user to seat", "description": "Assign a human user occupancy to a seat.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "user_id", "flag": "user-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Assign humans to seats after the seat accountability is clear." },
|
|
58286
|
+
{ "id": "status.record", "namespace": "status", "action": "record", "title": "Record status", "description": "Record a status event and readings/goal status for the acting seat's Signals and goals.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": true, "help": "Record Signal readings and goal status only for measurables and goals the seat owns; agent readings stay unconfirmed." },
|
|
58287
|
+
{ "id": "sync.brief.compile", "namespace": "sync", "action": "brief.compile", "title": "Compile Sync Brief", "description": "Compile (or recompile) the weekly Sync Brief for the current period. Idempotent per (tenant, period, cluster): a second compile updates the existing brief.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "cluster_id", "flag": "cluster-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Compile the weekly Sync Brief; compiling is idempotent per period." },
|
|
58288
|
+
{ "id": "sync.brief.get", "namespace": "sync", "action": "brief.get", "title": "Get Sync Brief", "description": "Return a Sync Brief (a specific id, or the latest for the tenant) including its compiled agenda document.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "sync_brief_id", "flag": "sync-brief-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Read the latest or a specific Sync Brief and its agenda before running the meeting." },
|
|
58289
|
+
{ "id": "sync.item.assign", "namespace": "sync", "action": "item.assign", "title": "Assign Sync follow-up", "description": "Create a follow-up task (a seat commitment) from a Sync agenda item. The brief and owner seat must belong to the tenant.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "sync_brief_id", "flag": "sync-brief-id", "type": "string", "required": true }, { "name": "owner_seat_id", "flag": "owner-seat-id", "type": "string", "required": true }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "description", "flag": "description", "type": "string", "required": true }, { "name": "due_on", "flag": "due-on", "type": "string", "required": false }], "hasComplexInput": false, "help": "Create a follow-up task from a Sync agenda item so a seat owns the commitment." },
|
|
58290
|
+
{ "id": "sync.run.complete", "namespace": "sync", "action": "run.complete", "title": "Complete Sync run", "description": "Record that the weekly Sync meeting completed against a brief, capturing the decisions and tasks created since it compiled. Idempotent: a second completion does not write a duplicate event.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "sync_brief_id", "flag": "sync-brief-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Record that the Sync meeting completed; completion is idempotent per brief." },
|
|
58291
|
+
{ "id": "sync.run.start", "namespace": "sync", "action": "run.start", "title": "Start Sync run", "description": "Ensure a Sync Brief exists for the current period so the meeting can begin. Compiles the brief if needed (idempotent).", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "cluster_id", "flag": "cluster-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Ensure a Sync Brief exists for the current period so the weekly meeting can begin." },
|
|
58292
|
+
{ "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." },
|
|
58293
|
+
{ "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." },
|
|
58294
|
+
{ "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." },
|
|
58295
|
+
{ "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." },
|
|
58296
|
+
{ "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 }, { "name": "source_key", "flag": "source-key", "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" } },
|
|
58297
|
+
{ "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." },
|
|
58298
|
+
{ "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." },
|
|
58299
|
+
{ "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." },
|
|
58300
|
+
{ "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." },
|
|
58301
|
+
{ "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)." },
|
|
58302
|
+
{ "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." },
|
|
58303
|
+
{ "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." },
|
|
58304
|
+
{ "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." },
|
|
58305
|
+
{ "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." },
|
|
58306
|
+
{ "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." },
|
|
58307
|
+
{ "id": "tenant.rename", "namespace": "tenant", "action": "rename", "title": "Rename company", "description": "Rename the current tenant/company. The rename is human-gated and writes an audit event.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "company_name", "flag": "company-name", "type": "string", "required": true }], "hasComplexInput": false, "help": "Rename the current company; owner-only, human-gated, and audited as an event." },
|
|
58308
|
+
{ "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." },
|
|
58309
|
+
{ "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." },
|
|
58310
|
+
{ "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." },
|
|
58311
|
+
{ "id": "tool.catalog", "namespace": "tool", "action": "catalog", "title": "List tool catalog", "description": "List the discoverable tool catalog the agent builder reads \u2014 scope tier, credential requirement, access policy, and execution-boundary guidance per tool.", "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." },
|
|
58312
|
+
{ "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." },
|
|
58313
|
+
{ "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." },
|
|
58314
|
+
{ "id": "user.tenants", "namespace": "user", "action": "tenants", "title": "List tenants", "description": "List tenants accessible to the authenticated CLI user.", "requiredScope": "user", "confirmation": "none", "exposeOverMcp": false, "fields": [], "hasComplexInput": false, "help": "List available companies before choosing the tenant where setup work should happen." },
|
|
58315
|
+
{ "id": "user.use_tenant", "namespace": "user", "action": "use_tenant", "title": "Select tenant", "description": "Validate and return an active tenant selection for the authenticated CLI user.", "requiredScope": "user", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "tenant", "flag": "tenant", "type": "string", "required": true }], "hasComplexInput": false, "help": "Set the active tenant explicitly before running onboarding, graph, Charter, or staffing commands." },
|
|
58316
|
+
{ "id": "user.whoami", "namespace": "user", "action": "whoami", "title": "Who am I", "description": "Return the authenticated CLI user and accessible tenant roles.", "requiredScope": "user", "confirmation": "none", "exposeOverMcp": false, "fields": [], "hasComplexInput": false, "help": "Use session identity checks before making tenant-scoped recommendations or setup changes." },
|
|
58317
|
+
{ "id": "work_order.cancel", "namespace": "work_order", "action": "cancel", "title": "Cancel work order", "description": "Cancel a queued, claimed, or running work order. Already-terminal orders return a stable error.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "work_order_id", "flag": "work-order-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Cancel a queued, claimed, or running work order; this is a human-gated action." },
|
|
58318
|
+
{ "id": "work_order.enqueue", "namespace": "work_order", "action": "enqueue", "title": "Enqueue work order", "description": "Queue a work order for a live scheduled agent. Idempotent per (agent, scheduled time). task_id is cloud-lane only; a runner-lane agent rejects it.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "scheduled_for", "flag": "scheduled-for", "type": "string", "required": false }, { "name": "task_id", "flag": "task-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Queue a work order for a live scheduled agent; enqueue is idempotent per agent and scheduled time. task_id is cloud-lane only; a runner-lane agent rejects it (run task-linked runner work as an interactive agent turn)." },
|
|
58319
|
+
{ "id": "work_order.list", "namespace": "work_order", "action": "list", "title": "List work orders", "description": "List runner/cloud work orders for the tenant, optionally filtered by status, agent, or runner.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["queued", "claimed", "running", "done", "failed", "expired"] }, { "name": "agent_id", "flag": "agent-id", "type": "string", "required": false }, { "name": "runner_id", "flag": "runner-id", "type": "string", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Inspect queued, claimed, running, and expired work orders to understand runner activity." },
|
|
58320
|
+
{ "id": "work.list", "namespace": "work", "action": "list", "title": "List work records", "description": "List the acting seat's work-ledger records newest-first (keyset-paginated), filterable by verb, object kind/ref, outcome, or run. Superseded records are hidden unless include_superseded is set.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "verb", "flag": "verb", "type": "enum", "required": false, "enumValues": ["created", "updated", "removed", "sent", "received", "contacted", "replied", "offered", "accepted", "rejected", "assessed", "announced", "assigned", "invited", "flagged", "booked", "searched", "filed", "extracted", "escalated"] }, { "name": "outcome", "flag": "outcome", "type": "enum", "required": false, "enumValues": ["success", "warning", "error", "held"] }, { "name": "object_kind", "flag": "object-kind", "type": "string", "required": false }, { "name": "object_external_id", "flag": "object-external-id", "type": "string", "required": false }, { "name": "run_id", "flag": "run-id", "type": "string", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "include_superseded", "flag": "include-superseded", "type": "boolean", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }, { "name": "cursor", "flag": "cursor", "type": "string", "required": false }], "hasComplexInput": false, "help": "List the seat's work-ledger records newest-first with keyset pagination, filterable by verb, object, outcome, or run." },
|
|
58321
|
+
{ "id": "work.log", "namespace": "work", "action": "log", "title": "Log work", "description": "Write a lightweight activity breadcrumb event for the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "note", "flag": "note", "type": "string", "required": true }], "hasComplexInput": false, "help": "Log a lightweight work breadcrumb so the seat's activity is visible without durable side effects." },
|
|
58322
|
+
{ "id": "work.record", "namespace": "work", "action": "record", "title": "Record work", "description": "Append one or more structured business-activity records to the agent work ledger for the acting seat. Batch-accepting, append-only, secret-redacted, and idempotent on dedup_key. Corrections are superseding records.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": true, "help": "Append structured business-activity records (verb + entity refs + outcome + evidence) to the seat's work ledger, in a batch, right after each action succeeds." }
|
|
58323
|
+
];
|
|
58324
|
+
|
|
57834
58325
|
// src/commands/onboarding.ts
|
|
57835
58326
|
var REHEARSE_USAGE = `${cliBrand.binName} onboard rehearse --setup-application-id <uuid> --expected-input-digest <sha256:digest> --expected-receipt-revision <integer> --idempotency-key <key> [--json]`;
|
|
58327
|
+
var ACTIVATE_USAGE = `${cliBrand.binName} onboard activate --setup-application-id <uuid> --expected-input-digest <sha256:digest> --expected-receipt-revision <integer> --terminal-rehearsal-batch-receipt-id <uuid> --rehearsal-runs '<json-array>' --configuration-digests '<json-array>' --idempotency-key <key> [--json]`;
|
|
58328
|
+
var SOURCE_INGEST_USAGE = `${cliBrand.binName} onboard source-ingest --file <path> --source-key <key> --kind <kind> --title <title> [--json]`;
|
|
58329
|
+
var SERVER_COMMAND_BODY_CAP_BYTES = 1048576;
|
|
58330
|
+
var COMMAND_BODY_SAFETY_MARGIN_BYTES = 4096;
|
|
58331
|
+
var SETUP_USAGE = `${cliBrand.binName} onboard setup --input '<json-plan>' | --input-file <path> [--json]`;
|
|
58332
|
+
var SETUP_STATUS_USAGE = `${cliBrand.binName} onboard setup-status --input '<json-plan>' | --input-file <path> [--json]`;
|
|
58333
|
+
function sourceIngestKinds() {
|
|
58334
|
+
const entry = COMMAND_MANIFEST.find((candidate) => candidate.id === "onboarding.source_ingest");
|
|
58335
|
+
const kinds = entry?.fields.find((field4) => field4.name === "kind")?.enumValues;
|
|
58336
|
+
if (!kinds || kinds.length === 0) {
|
|
58337
|
+
throw new Error("The command manifest is missing onboarding.source_ingest kind values.");
|
|
58338
|
+
}
|
|
58339
|
+
return kinds;
|
|
58340
|
+
}
|
|
57836
58341
|
var OnboardingUsageError = class extends Error {
|
|
57837
58342
|
constructor(message) {
|
|
57838
58343
|
super(message);
|
|
@@ -57843,6 +58348,7 @@ async function runOnboarding(args, io, deps) {
|
|
|
57843
58348
|
let invocation;
|
|
57844
58349
|
try {
|
|
57845
58350
|
invocation = parseOnboardingInvocation(args);
|
|
58351
|
+
await resolveOnboardingInvocationFiles(invocation, deps.readFile ?? readFile5);
|
|
57846
58352
|
} catch (error51) {
|
|
57847
58353
|
if (!(error51 instanceof OnboardingUsageError)) {
|
|
57848
58354
|
throw error51;
|
|
@@ -57853,6 +58359,9 @@ ${onboardingUsage()}
|
|
|
57853
58359
|
return 1;
|
|
57854
58360
|
}
|
|
57855
58361
|
const client = await deps.makeClient();
|
|
58362
|
+
return executeOnboardingInvocation(invocation, io, client);
|
|
58363
|
+
}
|
|
58364
|
+
async function executeOnboardingInvocation(invocation, io, client, options = {}) {
|
|
57856
58365
|
try {
|
|
57857
58366
|
const result = await client.execute(invocation.commandId, invocation.body);
|
|
57858
58367
|
const rendered = invocation.json ? JSON.stringify(result.output, null, 2) : formatOnboardingOutput(invocation.action, result.output);
|
|
@@ -57860,9 +58369,97 @@ ${onboardingUsage()}
|
|
|
57860
58369
|
`);
|
|
57861
58370
|
return 0;
|
|
57862
58371
|
} catch (error51) {
|
|
58372
|
+
const staged = stagedSetupConfirmationFromError(invocation, error51);
|
|
58373
|
+
if (staged !== null) {
|
|
58374
|
+
io.stdout.write(`${invocation.json ? JSON.stringify(staged, null, 2) : formatStagedSetupConfirmation(invocation.action, staged)}
|
|
58375
|
+
`);
|
|
58376
|
+
return 0;
|
|
58377
|
+
}
|
|
58378
|
+
if (options.onError && options.onError(error51) === "handled") {
|
|
58379
|
+
return "fall-through";
|
|
58380
|
+
}
|
|
57863
58381
|
return printCommandError(io, error51);
|
|
57864
58382
|
}
|
|
57865
58383
|
}
|
|
58384
|
+
async function resolveOnboardingInvocationFiles(invocation, readFileImpl = readFile5) {
|
|
58385
|
+
if (invocation.sourceFile !== void 0) {
|
|
58386
|
+
let bytes;
|
|
58387
|
+
try {
|
|
58388
|
+
bytes = await readFileImpl(invocation.sourceFile);
|
|
58389
|
+
} catch (error51) {
|
|
58390
|
+
throw new OnboardingUsageError(
|
|
58391
|
+
`Could not read --file ${invocation.sourceFile}: ${error51 instanceof Error ? error51.message : String(error51)}`
|
|
58392
|
+
);
|
|
58393
|
+
}
|
|
58394
|
+
if (bytes.length === 0) {
|
|
58395
|
+
throw new OnboardingUsageError(`--file ${invocation.sourceFile} is empty.`);
|
|
58396
|
+
}
|
|
58397
|
+
const contentBase64 = bytes.toString("base64");
|
|
58398
|
+
invocation.body.content_base64 = contentBase64;
|
|
58399
|
+
const bodyBytes = Buffer.byteLength(JSON.stringify(invocation.body), "utf8");
|
|
58400
|
+
const preflightCap = SERVER_COMMAND_BODY_CAP_BYTES - COMMAND_BODY_SAFETY_MARGIN_BYTES;
|
|
58401
|
+
if (bodyBytes > preflightCap) {
|
|
58402
|
+
const overheadBytes = bodyBytes - contentBase64.length;
|
|
58403
|
+
const effectiveMaxFileBytes = Math.floor((preflightCap - overheadBytes) / 4) * 3;
|
|
58404
|
+
throw new OnboardingUsageError(
|
|
58405
|
+
`--file ${invocation.sourceFile} is ${bytes.length} bytes; base64-encoded it makes a ${bodyBytes}-byte command body, over the server's authoritative ${SERVER_COMMAND_BODY_CAP_BYTES}-byte command-transport cap (this check stops ${COMMAND_BODY_SAFETY_MARGIN_BYTES} bytes early on purpose). The largest file this invocation can send is about ${effectiveMaxFileBytes} bytes. The onboarding.source_ingest protocol documents sources up to 5,000,000 bytes; reaching that range needs the server-side transport follow-up. Split the export or trim rows/columns to fit.`
|
|
58406
|
+
);
|
|
58407
|
+
}
|
|
58408
|
+
delete invocation.sourceFile;
|
|
58409
|
+
}
|
|
58410
|
+
if (invocation.inputFile !== void 0) {
|
|
58411
|
+
let text;
|
|
58412
|
+
try {
|
|
58413
|
+
text = (await readFileImpl(invocation.inputFile)).toString("utf8");
|
|
58414
|
+
} catch (error51) {
|
|
58415
|
+
throw new OnboardingUsageError(
|
|
58416
|
+
`Could not read --input-file ${invocation.inputFile}: ${error51 instanceof Error ? error51.message : String(error51)}`
|
|
58417
|
+
);
|
|
58418
|
+
}
|
|
58419
|
+
invocation.body = parseSetupPlanJson(text, "--input-file");
|
|
58420
|
+
delete invocation.inputFile;
|
|
58421
|
+
}
|
|
58422
|
+
}
|
|
58423
|
+
function stagedSetupConfirmationFromError(invocation, error51) {
|
|
58424
|
+
if (invocation.action !== "setup" && invocation.action !== "setup-status") {
|
|
58425
|
+
return null;
|
|
58426
|
+
}
|
|
58427
|
+
if (!(error51 instanceof CommandClientError) || !error51.response || error51.response.ok || error51.response.error.code !== "COMMAND_CONFIRMATION_REQUIRED") {
|
|
58428
|
+
return null;
|
|
58429
|
+
}
|
|
58430
|
+
const details = error51.response.error.details;
|
|
58431
|
+
if (typeof details !== "object" || details === null) {
|
|
58432
|
+
return null;
|
|
58433
|
+
}
|
|
58434
|
+
const record2 = details;
|
|
58435
|
+
return record2.commandId === invocation.commandId ? record2 : null;
|
|
58436
|
+
}
|
|
58437
|
+
function formatStagedSetupConfirmation(action, details) {
|
|
58438
|
+
const approveVia = asRecord(details.approveVia);
|
|
58439
|
+
const lines = [
|
|
58440
|
+
action === "setup-status" ? "Onboarding setup approval is pending. The URL below is the current card: an identical still-valid card is reused as-is; if live state moved, the stale card was superseded and this fresh one minted." : "Onboarding setup approval is ready.",
|
|
58441
|
+
`Confirmation: ${field(details, "confirmationId")}`
|
|
58442
|
+
];
|
|
58443
|
+
if (typeof approveVia.webUrl === "string") {
|
|
58444
|
+
lines.push(`Approve once: ${approveVia.webUrl}`);
|
|
58445
|
+
}
|
|
58446
|
+
lines.push(
|
|
58447
|
+
"After the owner approves, re-run this command with the identical plan to read the immutable setup receipt."
|
|
58448
|
+
);
|
|
58449
|
+
return lines.join("\n");
|
|
58450
|
+
}
|
|
58451
|
+
function parseSetupPlanJson(text, flag) {
|
|
58452
|
+
let parsed;
|
|
58453
|
+
try {
|
|
58454
|
+
parsed = JSON.parse(text);
|
|
58455
|
+
} catch {
|
|
58456
|
+
throw new OnboardingUsageError(`${flag} must be valid JSON.`);
|
|
58457
|
+
}
|
|
58458
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
58459
|
+
throw new OnboardingUsageError(`${flag} must be a JSON object (the complete onboarding setup plan).`);
|
|
58460
|
+
}
|
|
58461
|
+
return parsed;
|
|
58462
|
+
}
|
|
57866
58463
|
function parseOnboardingInvocation(args) {
|
|
57867
58464
|
const action = args[0];
|
|
57868
58465
|
if (action === "status" || action === "resume") {
|
|
@@ -57873,14 +58470,25 @@ function parseOnboardingInvocation(args) {
|
|
|
57873
58470
|
action
|
|
57874
58471
|
};
|
|
57875
58472
|
}
|
|
57876
|
-
if (action
|
|
58473
|
+
if (action === "source-ingest") {
|
|
58474
|
+
return parseSourceIngestInvocation(args.slice(1));
|
|
58475
|
+
}
|
|
58476
|
+
if (action === "setup" || action === "setup-status") {
|
|
58477
|
+
return parseSetupInvocation(action, args.slice(1));
|
|
58478
|
+
}
|
|
58479
|
+
if (action !== "rehearse" && action !== "activate") {
|
|
57877
58480
|
throw new OnboardingUsageError(`Unknown onboard action: ${action ?? "(missing)"}`);
|
|
57878
58481
|
}
|
|
57879
58482
|
const allowed = /* @__PURE__ */ new Set([
|
|
57880
58483
|
"setup-application-id",
|
|
57881
58484
|
"expected-input-digest",
|
|
57882
58485
|
"expected-receipt-revision",
|
|
57883
|
-
"idempotency-key"
|
|
58486
|
+
"idempotency-key",
|
|
58487
|
+
...action === "activate" ? [
|
|
58488
|
+
"terminal-rehearsal-batch-receipt-id",
|
|
58489
|
+
"rehearsal-runs",
|
|
58490
|
+
"configuration-digests"
|
|
58491
|
+
] : []
|
|
57884
58492
|
]);
|
|
57885
58493
|
const values = /* @__PURE__ */ new Map();
|
|
57886
58494
|
let json2 = false;
|
|
@@ -57925,34 +58533,209 @@ function parseOnboardingInvocation(args) {
|
|
|
57925
58533
|
if (!Number.isSafeInteger(expectedReceiptRevision) || expectedReceiptRevision <= 0) {
|
|
57926
58534
|
throw new OnboardingUsageError("--expected-receipt-revision must be a positive integer.");
|
|
57927
58535
|
}
|
|
58536
|
+
const sharedBody = {
|
|
58537
|
+
setup_application_id: setupApplicationId,
|
|
58538
|
+
expected_input_digest: expectedInputDigest,
|
|
58539
|
+
expected_receipt_revision: expectedReceiptRevision,
|
|
58540
|
+
idempotency_key: idempotencyKey
|
|
58541
|
+
};
|
|
58542
|
+
if (action === "activate") {
|
|
58543
|
+
return {
|
|
58544
|
+
commandId: "onboarding.activate",
|
|
58545
|
+
body: {
|
|
58546
|
+
...sharedBody,
|
|
58547
|
+
terminal_rehearsal_batch_receipt_id: requiredValue2(
|
|
58548
|
+
"terminal-rehearsal-batch-receipt-id"
|
|
58549
|
+
),
|
|
58550
|
+
rehearsal_runs: parseJsonArrayFlag(
|
|
58551
|
+
"rehearsal-runs",
|
|
58552
|
+
requiredValue2("rehearsal-runs")
|
|
58553
|
+
),
|
|
58554
|
+
configuration_digests: parseJsonArrayFlag(
|
|
58555
|
+
"configuration-digests",
|
|
58556
|
+
requiredValue2("configuration-digests")
|
|
58557
|
+
)
|
|
58558
|
+
},
|
|
58559
|
+
json: json2,
|
|
58560
|
+
action
|
|
58561
|
+
};
|
|
58562
|
+
}
|
|
57928
58563
|
return {
|
|
57929
58564
|
commandId: "onboarding.rehearse",
|
|
58565
|
+
body: sharedBody,
|
|
58566
|
+
json: json2,
|
|
58567
|
+
action
|
|
58568
|
+
};
|
|
58569
|
+
}
|
|
58570
|
+
function collectFlagValues(args, allowed) {
|
|
58571
|
+
const values = /* @__PURE__ */ new Map();
|
|
58572
|
+
let json2 = false;
|
|
58573
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
58574
|
+
const argument = args[index];
|
|
58575
|
+
if (argument === "--json") {
|
|
58576
|
+
if (json2) {
|
|
58577
|
+
throw new OnboardingUsageError("Duplicate --json flag.");
|
|
58578
|
+
}
|
|
58579
|
+
json2 = true;
|
|
58580
|
+
continue;
|
|
58581
|
+
}
|
|
58582
|
+
if (argument === void 0 || !argument.startsWith("--")) {
|
|
58583
|
+
throw new OnboardingUsageError(`Unexpected argument: ${argument ?? "(missing)"}`);
|
|
58584
|
+
}
|
|
58585
|
+
const key = argument.slice(2);
|
|
58586
|
+
if (!allowed.has(key)) {
|
|
58587
|
+
throw new OnboardingUsageError(`Unknown flag: --${key}`);
|
|
58588
|
+
}
|
|
58589
|
+
if (values.has(key)) {
|
|
58590
|
+
throw new OnboardingUsageError(`Duplicate --${key} flag.`);
|
|
58591
|
+
}
|
|
58592
|
+
const value = args[index + 1];
|
|
58593
|
+
if (value === void 0 || value.startsWith("--")) {
|
|
58594
|
+
throw new OnboardingUsageError(`Missing required --${key} value.`);
|
|
58595
|
+
}
|
|
58596
|
+
values.set(key, value);
|
|
58597
|
+
index += 1;
|
|
58598
|
+
}
|
|
58599
|
+
return { values, json: json2 };
|
|
58600
|
+
}
|
|
58601
|
+
function parseSourceIngestInvocation(args) {
|
|
58602
|
+
const { values, json: json2 } = collectFlagValues(
|
|
58603
|
+
args,
|
|
58604
|
+
/* @__PURE__ */ new Set(["file", "source-key", "kind", "title"])
|
|
58605
|
+
);
|
|
58606
|
+
const required2 = (key) => {
|
|
58607
|
+
const value = values.get(key);
|
|
58608
|
+
if (value === void 0 || value.length === 0) {
|
|
58609
|
+
throw new OnboardingUsageError(`Missing required --${key} value.`);
|
|
58610
|
+
}
|
|
58611
|
+
return value;
|
|
58612
|
+
};
|
|
58613
|
+
const kind = required2("kind");
|
|
58614
|
+
const kinds = sourceIngestKinds();
|
|
58615
|
+
if (!kinds.includes(kind)) {
|
|
58616
|
+
throw new OnboardingUsageError(`--kind must be one of: ${kinds.join(", ")}`);
|
|
58617
|
+
}
|
|
58618
|
+
return {
|
|
58619
|
+
commandId: "onboarding.source_ingest",
|
|
57930
58620
|
body: {
|
|
57931
|
-
|
|
57932
|
-
|
|
57933
|
-
|
|
57934
|
-
idempotency_key: idempotencyKey
|
|
58621
|
+
source_key: required2("source-key"),
|
|
58622
|
+
kind,
|
|
58623
|
+
title: required2("title")
|
|
57935
58624
|
},
|
|
57936
58625
|
json: json2,
|
|
57937
|
-
action
|
|
58626
|
+
action: "source-ingest",
|
|
58627
|
+
sourceFile: required2("file")
|
|
58628
|
+
};
|
|
58629
|
+
}
|
|
58630
|
+
function parseSetupInvocation(action, args) {
|
|
58631
|
+
const { values, json: json2 } = collectFlagValues(args, /* @__PURE__ */ new Set(["input", "input-file"]));
|
|
58632
|
+
const input = values.get("input");
|
|
58633
|
+
const inputFile = values.get("input-file");
|
|
58634
|
+
if (input === void 0 === (inputFile === void 0)) {
|
|
58635
|
+
throw new OnboardingUsageError(
|
|
58636
|
+
`onboard ${action} requires exactly one of --input '<json-plan>' or --input-file <path>.`
|
|
58637
|
+
);
|
|
58638
|
+
}
|
|
58639
|
+
return {
|
|
58640
|
+
commandId: "onboarding.setup",
|
|
58641
|
+
body: input === void 0 ? {} : parseSetupPlanJson(input, "--input"),
|
|
58642
|
+
json: json2,
|
|
58643
|
+
action,
|
|
58644
|
+
...inputFile === void 0 ? {} : { inputFile }
|
|
57938
58645
|
};
|
|
57939
58646
|
}
|
|
57940
58647
|
function onboardingUsage() {
|
|
57941
58648
|
return [
|
|
57942
58649
|
`Usage: ${cliBrand.binName} onboard status|resume [--json]`,
|
|
57943
|
-
` ${
|
|
58650
|
+
` ${SOURCE_INGEST_USAGE}`,
|
|
58651
|
+
` ${SETUP_USAGE}`,
|
|
58652
|
+
` ${SETUP_STATUS_USAGE}`,
|
|
58653
|
+
` ${REHEARSE_USAGE}`,
|
|
58654
|
+
` ${ACTIVATE_USAGE}`
|
|
57944
58655
|
].join("\n");
|
|
57945
58656
|
}
|
|
57946
58657
|
function formatOnboardingOutput(action, output) {
|
|
57947
58658
|
if (action === "rehearse") {
|
|
57948
58659
|
return formatRehearsalOutput(output);
|
|
57949
58660
|
}
|
|
58661
|
+
if (action === "activate") {
|
|
58662
|
+
return formatActivationOutput(output);
|
|
58663
|
+
}
|
|
58664
|
+
if (action === "source-ingest") {
|
|
58665
|
+
return formatSourceIngestOutput(output);
|
|
58666
|
+
}
|
|
58667
|
+
if (action === "setup" || action === "setup-status") {
|
|
58668
|
+
return formatAppliedSetupOutput(output);
|
|
58669
|
+
}
|
|
57950
58670
|
const record2 = typeof output === "object" && output !== null ? output : {};
|
|
57951
58671
|
if (typeof record2.summary === "string") {
|
|
57952
58672
|
return record2.summary;
|
|
57953
58673
|
}
|
|
57954
58674
|
return JSON.stringify(output, null, 2);
|
|
57955
58675
|
}
|
|
58676
|
+
function parseJsonArrayFlag(flag, value) {
|
|
58677
|
+
try {
|
|
58678
|
+
const parsed = JSON.parse(value);
|
|
58679
|
+
if (!Array.isArray(parsed)) {
|
|
58680
|
+
throw new Error("not an array");
|
|
58681
|
+
}
|
|
58682
|
+
return parsed;
|
|
58683
|
+
} catch {
|
|
58684
|
+
throw new OnboardingUsageError(`--${flag} must be a valid JSON array.`);
|
|
58685
|
+
}
|
|
58686
|
+
}
|
|
58687
|
+
function formatActivationOutput(output) {
|
|
58688
|
+
const record2 = asRecord(output);
|
|
58689
|
+
const approveVia = asRecord(record2.approveVia);
|
|
58690
|
+
if (typeof approveVia.webUrl === "string") {
|
|
58691
|
+
return [
|
|
58692
|
+
"Onboarding activation approval is ready.",
|
|
58693
|
+
`Approve once: ${approveVia.webUrl}`
|
|
58694
|
+
].join("\n");
|
|
58695
|
+
}
|
|
58696
|
+
const receipt = asRecord(record2.receipt);
|
|
58697
|
+
const agents = Array.isArray(receipt.agents) ? receipt.agents : [];
|
|
58698
|
+
if (record2.status === "activated") {
|
|
58699
|
+
return [
|
|
58700
|
+
"Onboarding activation completed.",
|
|
58701
|
+
`Activation receipt: ${field(receipt, "activation_receipt_id")}`,
|
|
58702
|
+
`Agents live: ${agents.length} of ${agents.length}`,
|
|
58703
|
+
`Onboarding completed: ${field(receipt, "onboarding_completed_at")}`
|
|
58704
|
+
].join("\n");
|
|
58705
|
+
}
|
|
58706
|
+
return JSON.stringify(output, null, 2);
|
|
58707
|
+
}
|
|
58708
|
+
function formatSourceIngestOutput(output) {
|
|
58709
|
+
const record2 = asRecord(output);
|
|
58710
|
+
const descriptor = asRecord(record2.descriptor);
|
|
58711
|
+
const families = Array.isArray(descriptor.family_manifest) ? descriptor.family_manifest : [];
|
|
58712
|
+
return [
|
|
58713
|
+
"Source retained for this run.",
|
|
58714
|
+
`Upload: ${field(record2, "source_upload_id")}`,
|
|
58715
|
+
`SHA-256: ${field(descriptor, "sha256")}`,
|
|
58716
|
+
`Bytes: ${field(descriptor, "byte_count")}`,
|
|
58717
|
+
...families.map((entry) => {
|
|
58718
|
+
const item = asRecord(entry);
|
|
58719
|
+
return `- ${field(item, "family")}: ${field(item, "input_count")} rows`;
|
|
58720
|
+
}),
|
|
58721
|
+
"Reference it from the setup plan's sources[] via the returned source_ref (run with --json to capture it verbatim)."
|
|
58722
|
+
].join("\n");
|
|
58723
|
+
}
|
|
58724
|
+
function formatAppliedSetupOutput(output) {
|
|
58725
|
+
const record2 = asRecord(output);
|
|
58726
|
+
if (typeof record2.application_id !== "string") {
|
|
58727
|
+
return JSON.stringify(output, null, 2);
|
|
58728
|
+
}
|
|
58729
|
+
const receipt = asRecord(record2.receipt);
|
|
58730
|
+
const digests = asRecord(receipt.digests);
|
|
58731
|
+
return [
|
|
58732
|
+
"Onboarding setup is applied.",
|
|
58733
|
+
`Setup application: ${field(record2, "application_id")}`,
|
|
58734
|
+
`Receipt revision: ${field(receipt, "receipt_revision")}`,
|
|
58735
|
+
`Input digest: ${field(digests, "input")}`,
|
|
58736
|
+
`Next: ${cliBrand.binName} onboard rehearse --setup-application-id ${field(record2, "application_id")} --expected-input-digest ${field(digests, "input")} --expected-receipt-revision ${field(receipt, "receipt_revision")} --idempotency-key <stable-key> --json`
|
|
58737
|
+
].join("\n");
|
|
58738
|
+
}
|
|
57956
58739
|
function formatRehearsalOutput(output) {
|
|
57957
58740
|
const record2 = asRecord(output);
|
|
57958
58741
|
if (record2.status === "in_progress") {
|
|
@@ -58271,304 +59054,6 @@ function defaultImplementationAccessDeps(appUrl2) {
|
|
|
58271
59054
|
};
|
|
58272
59055
|
}
|
|
58273
59056
|
|
|
58274
|
-
// src/generated/command-manifest.ts
|
|
58275
|
-
var COMMAND_MANIFEST = [
|
|
58276
|
-
{ "id": "agent_grant_intervention.decide", "namespace": "agent_grant_intervention", "action": "decide", "title": "Decide a blocked agent grant", "description": "Grant (one-time, exact-action) or decline a blocked agent intervention. A grant writes a human decision and enqueues the linked continuation; a permanent grant returns requires_charter_resign rather than widening authority. Human steward/admin only.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "intervention_id", "flag": "intervention-id", "type": "string", "required": true }, { "name": "action", "flag": "action", "type": "enum", "required": true, "enumValues": ["grant", "decline"] }, { "name": "grant_kind", "flag": "grant-kind", "type": "enum", "required": false, "enumValues": ["allow_once", "permanent"] }, { "name": "action_digest", "flag": "action-digest", "type": "string", "required": false }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "Grant (one-time, exact-action) or decline a blocked agent intervention; a grant writes the human decision and enqueues the linked continuation, a permanent grant returns requires_charter_resign instead of widening authority. Human steward/admin only." },
|
|
58277
|
-
{ "id": "agent_grant_intervention.list", "namespace": "agent_grant_intervention", "action": "list", "title": "List blocked-awaiting-grant interventions", "description": "List durable blocked-awaiting-grant agent interventions with their missing grant, blocker kind, checkpoint, and decision state. Returns secret-scrubbed metadata only. A seat-scoped caller is clamped to its own seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "include_decided", "flag": "include-decided", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "List durable blocked-awaiting-grant agent interventions with the exact missing grant, blocker kind, checkpoint, and decision state. Secret-scrubbed metadata only; a seat-scoped caller is clamped to its own seat." },
|
|
58278
|
-
{ "id": "agent_grant_intervention.resume", "namespace": "agent_grant_intervention", "action": "resume", "title": "Resume a granted agent intervention", "description": "Retry ONLY the continuation enqueue for an already-granted blocked intervention whose enqueue did not complete. Never re-grants authority (the one-time grant is already committed). Human steward/admin only.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "intervention_id", "flag": "intervention-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Retry only the continuation enqueue for an already-granted intervention whose enqueue did not complete; never re-grants authority. Human steward/admin only." },
|
|
58279
|
-
{ "id": "agent_setup.capability_suggestions", "namespace": "agent_setup", "action": "capability_suggestions", "title": "Suggest setup capability grants", "description": "Return deterministic minimum capability suggestions from a stock template and current tenant grant availability. No model call and no authority mutation.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "setup_id", "flag": "setup-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Suggest deterministic minimum capability grants from the setup/template and current tenant grant availability. No model call and no mutation." },
|
|
58280
|
-
{ "id": "agent_setup.get", "namespace": "agent_setup", "action": "get", "title": "Get agent setup", "description": "Read the resumable agent-setup state: mode, parent, steward, template, lane, schedule, tool decisions, dry run, and next action.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "setup_id", "flag": "setup-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Read the resumable setup state: mode, parent, steward, lane, schedule, tool decisions, dry-run blockers, and the next action." },
|
|
58281
|
-
{ "id": "agent_setup.relane", "namespace": "agent_setup", "action": "relane", "title": "Re-lane a live agent", "description": "Governed re-lane of a live agent: pause, move to the new lane, force a fresh dry-run rehearsal on that lane, then go live. Owner-only and human-gated; records a rationale.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "lane", "flag": "lane", "type": "enum", "required": true, "enumValues": ["cloud", "mcp_session", "runner"] }, { "name": "reason", "flag": "reason", "type": "string", "required": true }], "hasComplexInput": false, "help": "Re-lane a live agent (cloud / runner / mcp_session): it pauses, moves to the new lane, forces a fresh dry-run rehearsal on that lane, then goes live \u2014 owner-only, human-gated, with a required rationale. A runner target needs a paired runner; a failed rehearsal leaves the agent paused on the new lane." },
|
|
58282
|
-
{ "id": "agent_setup.start", "namespace": "agent_setup", "action": "start", "title": "Start agent setup", "description": "Start (or resume) a draft agent setup for a seat in template, custom, or existing mode.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "mode", "flag": "mode", "type": "enum", "required": true, "enumValues": ["template", "custom", "existing"] }, { "name": "template_slug", "flag": "template-slug", "type": "string", "required": false }], "hasComplexInput": false, "help": "Start a draft agent setup from a template, custom, or existing mode; the setup resumes from the draft agent and Charter, not a fresh start." },
|
|
58283
|
-
{ "id": "agent_setup.update", "namespace": "agent_setup", "action": "update", "title": "Update agent setup", "description": "Update the draft agent's parent, steward, lane, schedule, operational answers, and tool decisions.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "parent_seat_id", "flag": "parent-seat-id", "type": "string", "required": false }, { "name": "steward_seat_id", "flag": "steward-seat-id", "type": "string", "required": false }, { "name": "lane", "flag": "lane", "type": "enum", "required": false, "enumValues": ["cloud", "mcp_session", "runner"] }, { "name": "schedule_cron", "flag": "schedule-cron", "type": "string", "required": false }, { "name": "turn_timeout_seconds", "flag": "turn-timeout-seconds", "type": "integer", "required": false }, { "name": "answers", "flag": "answers", "type": "array", "required": false, "itemType": "string" }, { "name": "skill_discovery_enabled", "flag": "skill-discovery-enabled", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Update parent, steward, lane, schedule, answers, or tool decisions on the draft; steward and parent changes keep the no-orphan chain explicit." },
|
|
58284
|
-
{ "id": "agent_template.list", "namespace": "agent_template", "action": "list", "title": "List agent templates", "description": "List stock agent templates and their responsibilities, default tools, and dry-run rehearsal.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List stock agent templates and their default tools and safety boundaries before starting a template setup." },
|
|
58285
|
-
{ "id": "agent.activation_receipt", "namespace": "agent", "action": "activation_receipt", "title": "Build agent activation receipt", "description": "Read the compiled authority receipt for one agent: effective capabilities, connection metadata, stale-scope digest, budget, and always-human boundary.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "proposed_budget_cents", "flag": "proposed-budget-cents", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Build the current compiled activation receipt before signing or creating a Trusted grant. Rebuild it after any Charter, capability, connection, schedule, or lane change." },
|
|
58286
|
-
{ "id": "agent.activation_sign", "namespace": "agent", "action": "activation_sign", "title": "Sign agent activation receipt", "description": "Human steward/admin activation sign-off for the current compiled receipt digest. Refuses stale receipts and records a human decision plus append-only event.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "expected_scope_digest", "flag": "expected-scope-digest", "type": "string", "required": true }, { "name": "budget_cents", "flag": "budget-cents", "type": "integer", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Human steward/admin sign-off for the exact activation receipt digest. Agents can surface the pending confirmation but cannot sign their own authority." },
|
|
58287
|
-
{ "id": "agent.configure_tools", "namespace": "agent", "action": "configure_tools", "title": "Configure agent tools", "description": "Save tool proposals, declines, and credential-ingress requests for a draft agent. Never stores or echoes secret material; vault refs only.", "requiredScope": "seat", "confirmation": "credential_flow", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": true, "help": "Connect or decline proposed tools and stage credential-ingress requests; never place raw secrets here \u2014 secrets flow through vault-backed credential.ingress as vault refs only.", "example": { "seat_id": "0190aaaa-aaaa-7aaa-8aaa-aaaaaaaaaaaa", "tool_decisions": [{ "tool": "ap.invoices.read", "decision": "connect" }, { "tool": "email.draft", "decision": "connect" }] } },
|
|
58288
|
-
{ "id": "agent.create_custom", "namespace": "agent", "action": "create_custom", "title": "Create custom agent", "description": "Create a draft custom agent shell and a draft Charter seed from operational answers (what it owns, success, never-do-alone, steward).", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "steward_seat_id", "flag": "steward-seat-id", "type": "string", "required": false }, { "name": "lane", "flag": "lane", "type": "enum", "required": false, "enumValues": ["cloud", "mcp_session", "runner"] }, { "name": "what_it_owns", "flag": "what-it-owns", "type": "string", "required": false }, { "name": "what_success_looks_like", "flag": "what-success-looks-like", "type": "string", "required": false }, { "name": "what_it_must_never_do_alone", "flag": "what-it-must-never-do-alone", "type": "string", "required": false }], "hasComplexInput": true, "help": "Create a draft custom agent from operational answers (what it owns, success, never-do-alone, steward); the Charter Builder owns the contract and go-live stays human-gated.", "example": { "seat_id": "0190aaaa-aaaa-7aaa-8aaa-aaaaaaaaaaaa", "steward_seat_id": "0190bbbb-bbbb-7bbb-8bbb-bbbbbbbbbbbb", "lane": "cloud", "what_it_owns": "Drafting AP invoice entries from inbound vendor emails for human review.", "what_success_looks_like": "Every inbound invoice is drafted within one business day with the correct GL coding.", "what_it_must_never_do_alone": "Never send payment or approve an invoice without a human sign-off." } },
|
|
58289
|
-
{ "id": "agent.create_from_template", "namespace": "agent", "action": "create_from_template", "title": "Create agent from template", "description": "Create a draft stock agent and draft Charter from a stock template. Creates the agent occupancy only when a human steward chain resolves; the agent stays draft until a signed manifest, a passed dry run, and human go-live.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "template_slug", "flag": "template-slug", "type": "string", "required": true }, { "name": "expected_template_version", "flag": "expected-template-version", "type": "string", "required": false }], "hasComplexInput": false, "help": "Create a draft stock agent and draft Charter from a template; the agent occupancy is created only when a human steward chain resolves, and the agent stays draft until a signed manifest, a passed dry run, and human go-live." },
|
|
58290
|
-
{ "id": "agent.decommission", "namespace": "agent", "action": "decommission", "title": "Decommission agent", "description": "Retire an agent occupancy safely. Blocks if it would leave another live agent without a human steward chain.", "requiredScope": "tenant", "confirmation": "dangerous", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Retire an agent occupancy safely; the no-orphan guard blocks any decommission that would leave another live agent without a human steward chain." },
|
|
58291
|
-
{ "id": "agent.fleet_digest", "namespace": "agent", "action": "fleet_digest", "title": "Get dogfood fleet health digest", "description": "Return a daily tenant fleet health digest with live/idle state, run counts, spend, failed runs, unresolved product errors, notification errors, and next actions.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "window_hours", "flag": "window-hours", "type": "integer", "required": false }, { "name": "error_limit", "flag": "error-limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Capture a daily dogfood fleet health digest with fleet state, run counts, spend, failed runs, unresolved errors, failed notifications, and next actions." },
|
|
58292
|
-
{ "id": "agent.get_run", "namespace": "agent", "action": "get_run", "title": "Get agent run diagnostics", "description": "Return one seat run's diagnostic record: run status, transcript reference, token/cost usage, outcome, and linked product-visible run errors.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "run_id", "flag": "run-id", "type": "string", "required": true }, { "name": "transcript", "flag": "transcript", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Read one run's diagnostic record, transcript reference, token/cost usage, outcome, and linked product-visible errors." },
|
|
58293
|
-
{ "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" } },
|
|
58294
|
-
{ "id": "agent.import_definition", "namespace": "agent", "action": "import_definition", "title": "Import agent definition", "description": "Import a versioned ROST agent definition into a 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." },
|
|
58295
|
-
{ "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, 7-day real-run spend, and the health/work-progress axes the web fleet page renders (health status, work evidence, work progress, host-resource pressure).", "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." },
|
|
58296
|
-
{ "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)." },
|
|
58297
|
-
{ "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. 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." },
|
|
58298
|
-
{ "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." },
|
|
58299
|
-
{ "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." },
|
|
58300
|
-
{ "id": "agent.run_dry_run", "namespace": "agent", "action": "run_dry_run", "title": "Run agent dry run", "description": "Run the sandbox dry run for a draft agent. Durable and idempotent per Charter version; a passed result is reused, never re-run.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Run the sandbox dry run for a draft agent after the manifest is signed; the result is durable and idempotent per Charter version, and a passed run is reused.", "example": { "seat_id": "0190aaaa-aaaa-7aaa-8aaa-aaaaaaaaaaaa", "charter_version_id": "0190cccc-cccc-7ccc-8ccc-cccccccccccc" } },
|
|
58301
|
-
{ "id": "agent.run_heartbeats", "namespace": "agent", "action": "run_heartbeats", "title": "Get run heartbeats", "description": "Reads the per-seat run-heartbeat roll-up for long-running agent programs. Every roll-up is cross-checked against durable tool-call/event evidence, so a renewing lease alone never reports healthy: `state` is working, quiet_healthy, recovered, stalled, or unavailable. `unavailable` means that evidence check could not be performed \u2014 treat it as unknown, not healthy and not stalled, and branch on `state` rather than the `stalled` boolean.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_ids", "flag": "seat-ids", "type": "array", "required": false, "itemType": "string" }], "hasComplexInput": false, "help": "Read the per-seat run-heartbeat roll-up to tell a quiet-but-healthy long-running agent program apart from a stalled one, or from one whose durable-evidence check could not be performed (state unavailable)." },
|
|
58302
|
-
{ "id": "agent.run_now", "namespace": "agent", "action": "run_now", "title": "Run agent now", "description": "Queue and dispatch a manual production run for a live cloud or runner agent on a seat. task_id is cloud-lane only; a runner-lane agent rejects it.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "task_id", "flag": "task-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Queue and dispatch a manual production run without changing the agent's saved schedule. A human with authority runs it directly; a same-Seat agent may auto-execute only under a bounded Trusted standing authorization, while a cross-Seat agent request requires a human. task_id is cloud-lane only; a runner-lane agent rejects it." },
|
|
58303
|
-
{ "id": "agent.show_markdown", "namespace": "agent", "action": "show_markdown", "title": "Show agent setup as markdown", "description": "Compose a seat's agent setup, steward, model, tools, and Charter into a clean, human-skimmable markdown card for review.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Render a seat's agent setup, model, steward, tools, and Charter as a clean markdown card to show your human a quick review." },
|
|
58304
|
-
{ "id": "agent.status", "namespace": "agent", "action": "status", "title": "Get agent status", "description": "Return the agent occupancy, lane, schedule, live/offline state, steward chain, dry-run result, and Runner availability for a seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Check an agent's lane, live state, steward chain, dry-run result, and Runner availability before relying on it." },
|
|
58305
|
-
{ "id": "agent.trust.create", "namespace": "agent", "action": "trust.create", "title": "Create agent Trusted grant", "description": "Create a bounded Trusted execution grant for a live agent after a human steward/admin signs the current activation receipt digest. When Company Guardrails are enforced, max_autonomous_risk must be at least high; observe mode remains non-blocking.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "expected_scope_digest", "flag": "expected-scope-digest", "type": "string", "required": true }, { "name": "budget_cents", "flag": "budget-cents", "type": "integer", "required": true }, { "name": "expires_at", "flag": "expires-at", "type": "string", "required": false }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Create a bounded Trusted execution grant only after reviewing the activation receipt digest, budget, and always-human boundary. Human steward/admin only. When Company Guardrails are enforced, the autonomy ceiling must be at least high; observe mode remains non-blocking." },
|
|
58306
|
-
{ "id": "agent.trust.expire", "namespace": "agent", "action": "trust.expire", "title": "Expire agent Trusted grants", "description": "Human steward/admin maintenance command that marks overdue active Trusted grants expired and appends an event for each expired grant.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Mark overdue active Trusted grants expired and append audit events. Human steward/admin only." },
|
|
58307
|
-
{ "id": "agent.trust.inspect", "namespace": "agent", "action": "trust.inspect", "title": "Inspect agent Trusted grants", "description": "Read active or historical Trusted execution grants for one agent. Returns metadata only, never secrets.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "include_inactive", "flag": "include-inactive", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Inspect active or historical Trusted grants for one agent. Metadata only; no secrets or vault refs." },
|
|
58308
|
-
{ "id": "agent.trust.revoke", "namespace": "agent", "action": "trust.revoke", "title": "Revoke agent Trusted grant", "description": "Human steward/admin revocation for an active Trusted execution grant. Preserves the historical grant row and appends an event.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "grant_id", "flag": "grant-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Revoke an active Trusted grant while preserving history. Human steward/admin only." },
|
|
58309
|
-
{ "id": "agent.trust.supersede", "namespace": "agent", "action": "trust.supersede", "title": "Supersede agent Trusted grant", "description": "Human steward/admin replacement for an active Trusted grant. Refuses stale receipt digests and requires expected_grant_id to bind the exact reviewed active row before linking the replacement. Denied unless the tenant's company autonomy ceiling permits Trusted grants; refuses when no active grant exists and never creates one.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "expected_scope_digest", "flag": "expected-scope-digest", "type": "string", "required": true }, { "name": "budget_cents", "flag": "budget-cents", "type": "integer", "required": true }, { "name": "expires_at", "flag": "expires-at", "type": "string", "required": false }, { "name": "reason", "flag": "reason", "type": "string", "required": false }, { "name": "expected_grant_id", "flag": "expected-grant-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Replace the active Trusted grant with a fresh digest and budget. Rebuild the receipt first; stale digests are refused. Same company-autonomy-ceiling precondition as agent.trust.create; refused when no active grant exists to replace. The required expected_grant_id must match the currently active grant or the call is refused." },
|
|
58310
|
-
{ "id": "agent.update_schedule", "namespace": "agent", "action": "update_schedule", "title": "Update agent schedule", "description": "Set or clear the scheduled execution cron for a draft or live agent on a seat.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "schedule_cron", "flag": "schedule-cron", "type": "string", "required": true }, { "name": "schedule_timezone", "flag": "schedule-timezone", "type": "string", "required": false }], "hasComplexInput": false, "help": "Set or clear an agent's scheduled execution; a live scheduled agent must keep a steward chain resolving to a human." },
|
|
58311
|
-
{ "id": "agent.watch_run", "namespace": "agent", "action": "watch_run", "title": "Watch agent run", "description": "Return a read-only live snapshot of one seat run: run status and lane, the derived current work-state, the run-heartbeat (quiet-but-healthy vs stalled) with current phase, the persisted session transcript, and the run's tool-call step feed (tool name, guard result, outcome). 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": "run_id", "flag": "run-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Watch one run live (read-only): run status, derived work-state, quiet-vs-stalled heartbeat, transcript, and the tool-call step feed." },
|
|
58312
|
-
{ "id": "aicos.brain_settings.get", "namespace": "aicos", "action": "brain_settings.get", "title": "Get AICOS brain settings", "description": "Read the AICOS run lane and brain selection. Returns labels and enum settings only; no secrets or vault refs.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read the AICOS lane and brain selection labels without returning provider keys, vault refs, or runner secrets." },
|
|
58313
|
-
{ "id": "aicos.brain_settings.update", "namespace": "aicos", "action": "brain_settings.update", "title": "Update AICOS brain settings", "description": "Update the AICOS lane and cloud/runner brain preferences. Owner-only and audited.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "lane", "flag": "lane", "type": "enum", "required": false, "enumValues": ["cloud", "runner", "mcp"] }, { "name": "cloud_brain", "flag": "cloud-brain", "type": "enum", "required": false, "enumValues": ["managed", "byok"] }, { "name": "runner_brain", "flag": "runner-brain", "type": "enum", "required": false, "enumValues": ["claude-cli", "codex-cli"] }, { "name": "cloud_model_slug", "flag": "cloud-model-slug", "type": "string", "required": false }], "hasComplexInput": false, "help": "Owner-only update for AICOS cloud managed/BYOK and runner Claude/Codex preferences; BYOK requires an active tenant Anthropic key." },
|
|
58314
|
-
{ "id": "cascade.import", "namespace": "cascade", "action": "import", "title": "Import Rocks from a ninety Rocks export", "description": "Bulk-import a ninety Rocks export into the Cascade as cycle goals under a company objective in the active cycle. Owners are seat names resolved to seats. Requires an active cycle and a target company objective (auto-selected when exactly one exists, else pass parent_objective_id). Idempotent \u2014 re-importing the same export is a no-op, and an existing cycle goal with the same objective + seat + title is skipped.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "dry_run", "flag": "dry-run", "type": "boolean", "required": false }, { "name": "parent_objective_id", "flag": "parent-objective-id", "type": "string", "required": false }], "hasComplexInput": true, "help": "Import a ninety Rocks export into the Cascade as cycle goals under a company objective in the active cycle; owners resolve to seats." },
|
|
58315
|
-
{ "id": "cascade.import_okrs", "namespace": "cascade", "action": "import_okrs", "title": "Import objectives and key results from a generic OKR CSV", "description": "Bulk-import a generic OKR export (objectives + key results) into the Cascade. Company objectives become company_objective goals; seat objectives become seat goals under the resolved company objective; metric key results become measurables bound informs to their objective; milestone key results become milestone goals under a seat objective. Owners are seat names resolved to seats; requires an active cycle. Idempotent \u2014 re-importing the same file is a no-op; existing goals/measurables/bindings are matched, never duplicated.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "dry_run", "flag": "dry-run", "type": "boolean", "required": false }, { "name": "parent_objective_id", "flag": "parent-objective-id", "type": "string", "required": false }], "hasComplexInput": true, "help": "Import a generic OKR CSV (objectives + key results) into the Cascade; objectives become goals, metric KRs become measurables bound informs, milestone KRs become milestone goals; owners resolve to seats." },
|
|
58316
|
-
{ "id": "charter.apply_seat_type_recommendation", "namespace": "charter", "action": "apply_seat_type_recommendation", "title": "Apply Charter seat-type recommendation", "description": "Apply the seat-type recommendation from a draft Charter.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Apply seat-type recommendations only after the Charter clarifies work shape, risk, and Steward accountability." },
|
|
58317
|
-
{ "id": "charter.approve", "namespace": "charter", "action": "approve", "title": "Approve charter", "description": "Approve a draft Charter as a human owner.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": false }, { "name": "expected_edit_revision", "flag": "expected-edit-revision", "type": "integer", "required": false }, { "name": "apply_seat_type", "flag": "apply-seat-type", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Charter approval is a human decision that activates the seat's operating contract." },
|
|
58318
|
-
{ "id": "charter.draft", "namespace": "charter", "action": "draft", "title": "Draft charter", "description": "Create or fetch a draft Charter for a seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Draft Charters that define purpose, responsibilities, decision authority, measurables, tools, budget, and escalation; the charter authoring deep-dive shows what good looks like per field." },
|
|
58319
|
-
{ "id": "charter.draft_all", "namespace": "charter", "action": "draft_all", "title": "Draft all charters", "description": "Draft Charters for every eligible seat in a tenant.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Draft Charters in onboarding order after the Responsibility Graph has enough seat clarity.", "example": {} },
|
|
58320
|
-
{ "id": "charter.get", "namespace": "charter", "action": "get", "title": "Get Charter", "description": "Return a Charter version with its supersession history and latest dry-run status.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Read a Charter with its supersession history and dry-run status before approving or signing a manifest." },
|
|
58321
|
-
{ "id": "charter.list", "namespace": "charter", "action": "list", "title": "List Charters", "description": "List Charter versions in the tenant, optionally filtered by seat or status.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["draft", "active", "superseded"] }], "hasComplexInput": false, "help": "List Charter versions to find the right draft or active version id before reading or amending it." },
|
|
58322
|
-
{ "id": "charter.preview_signal_reconciliation", "namespace": "charter", "action": "preview_signal_reconciliation", "title": "Preview Charter Signal reconciliation", "description": "Owner-only dry run: for each Signal a draft Charter declares, show whether it is already linked, which existing Signals match its name, who owns them, how much reading history and how many goal links they carry, the action that fits, and what it would cost. Reads only \u2014 nothing is changed. Approval needs an explicit choice only for a declaration that COLLIDES with an existing Signal and is not already linked: a declaration nothing matches is created automatically, and one already linked to a Signal takes no choice.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Preview first. Approval requires an explicit choice when an exact-name active Signal exists: adopt it if it is already owned by the Charter Seat, move it if another Seat owns it, or deliberately create a second Signal. Adoption and movement preserve the Signal ID, readings, and compatible goal bindings." },
|
|
58323
|
-
{ "id": "charter.reconcile_signals", "namespace": "charter", "action": "reconcile_signals", "title": "Reconcile Charter Signals", "description": "Owner-only: approve a draft Charter with an explicit decision for each declared Signal that collides with one the company already tracks and is not already linked to one \u2014 adopt the existing Signal when this Seat owns it, move it to this Seat, or deliberately create a second one. Adoption and movement keep the Signal's id, its readings, and its compatible goal links. Preview first, and pass that preview's edit_revision.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }, { "name": "expected_edit_revision", "flag": "expected-edit-revision", "type": "integer", "required": true }, { "name": "apply_seat_type", "flag": "apply-seat-type", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Owner-only Charter approval carrying one explicit decision per COLLIDING, UNLINKED Signal declaration \u2014 a declaration nothing matches is created automatically, and an already-linked one takes no choice. Take the preview first and pass its edit_revision; adoption and movement keep the Signal's id, readings, and compatible goal bindings, and a cross-Seat status driver blocks a move." },
|
|
58324
|
-
{ "id": "charter.set", "namespace": "charter", "action": "set", "title": "Set charter", "description": "Create or replace a seat's draft Charter from a full document in one call; approve activates it as a human owner.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "approve", "flag": "approve", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Create or replace a seat's draft Charter from a full document in one call; read the charter authoring deep-dive first. Approving activates the seat's contract and is a human decision.", "example": { "seat_id": "0190aaaa-aaaa-7aaa-8aaa-aaaaaaaaaaaa", "doc": { "payload_version": 1, "purpose": "AP intake clerk: draft accounts-payable invoice entries from inbound vendor emails for human review.", "accountabilities": [{ "title": "Draft every inbound invoice", "description": "Convert each inbound vendor invoice into a draft AP entry with the correct vendor, amount, and GL coding within one business day." }, { "title": "Flag discrepancies", "description": "Surface duplicate, mismatched, or out-of-policy invoices as Friction issues instead of drafting them silently." }], "decision_authority": { "autonomous": [{ "action": "Draft AP entries and propose GL coding from inbound invoices", "condition": "Allowed when the vendor is known and the amount is within the standard purchase range.", "rationale": "Drafting is reversible and reviewed by a human before posting.", "unanswered_boundary": false }], "approval": [{ "action": "Post an invoice or send any vendor-facing message", "condition": "Require explicit human approval before posting or sending.", "rationale": "Posting and sending are durable, money-moving actions.", "unanswered_boundary": false }], "escalate": [{ "action": "Unknown vendor, payment over the approval threshold, or a suspected duplicate", "condition": "Always escalate to the Steward before acting.", "rationale": "Conservative default for ambiguous, irreversible, or financial exposure.", "unanswered_boundary": true }] }, "escalation_rules": ["Escalate any invoice over $5,000 or from a vendor not already in the ledger.", "Escalate when an invoice appears to duplicate one already drafted or posted."], "measurables": [{ "name": "Invoices drafted within one business day", "target": "100%", "cadence": "weekly", "source": "agent" }, { "name": "Discrepancies caught before posting", "target": "\u2265 95%", "cadence": "monthly", "source": "human" }], "permission_manifest": [{ "tool": "ap.invoices.read", "scope": "Read inbound invoices and the vendor ledger.", "granted": true, "rationale": "Needed to draft entries from source invoices." }, { "tool": "email.draft", "scope": "Draft vendor replies for human review; never send.", "granted": true, "rationale": "Lets the seat prepare clarifications without taking a send action." }], "budget": { "monthly_usd": null, "approval_required_over_usd": 0, "notes": "No autonomous spend; any spend requires Steward approval until a budget is set." }, "unanswered_boundaries": ["Approval threshold for auto-posting", "Vendor onboarding authority"], "seat_type_recommendation": { "recommendation": "agent", "rationale": "The work is high-volume, rule-bound, and fully reviewable, which suits a draft-and-confirm agent under a human Steward.", "confidence": 0.8 } }, "approve": false } },
|
|
58325
|
-
{ "id": "charter.show_markdown", "namespace": "charter", "action": "show_markdown", "title": "Show Charter as markdown", "description": "Compose a seat's active or latest Charter into a clean, human-skimmable markdown card for review.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Render a seat's active or latest Charter as a clean markdown card to show your human a quick review." },
|
|
58326
|
-
{ "id": "charter.sign_manifest", "namespace": "charter", "action": "sign_manifest", "title": "Sign charter manifest", "description": "Request human confirmation for a Charter permission manifest.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Sign tool manifests only when the Charter explains why the tool is needed and how it is bounded." },
|
|
58327
|
-
{ "id": "charter.skip", "namespace": "charter", "action": "skip", "title": "Skip charter draft", "description": "Mark a draft Charter as skipped.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Skip a Charter only when the seat is intentionally out of scope for the current onboarding pass." },
|
|
58328
|
-
{ "id": "charter.update_draft", "namespace": "charter", "action": "update_draft", "title": "Update charter draft", "description": "Update a draft Charter document.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }, { "name": "expected_edit_revision", "flag": "expected-edit-revision", "type": "integer", "required": false }], "hasComplexInput": true, "help": "Submit the full Charter document directly (purpose, decision_authority, escalation_rules, measurables, budget, permission_manifest); read the charter authoring deep-dive for what good looks like per field. Durable authority changes still need human approval.", "example": { "charter_version_id": "0190cccc-cccc-7ccc-8ccc-cccccccccccc", "doc": { "payload_version": 1, "purpose": "AP intake clerk: draft accounts-payable invoice entries from inbound vendor emails for human review.", "accountabilities": [{ "title": "Draft every inbound invoice", "description": "Convert each inbound vendor invoice into a draft AP entry with the correct vendor, amount, and GL coding within one business day." }, { "title": "Flag discrepancies", "description": "Surface duplicate, mismatched, or out-of-policy invoices as Friction issues instead of drafting them silently." }], "decision_authority": { "autonomous": [{ "action": "Draft AP entries and propose GL coding from inbound invoices", "condition": "Allowed when the vendor is known and the amount is within the standard purchase range.", "rationale": "Drafting is reversible and reviewed by a human before posting.", "unanswered_boundary": false }], "approval": [{ "action": "Post an invoice or send any vendor-facing message", "condition": "Require explicit human approval before posting or sending.", "rationale": "Posting and sending are durable, money-moving actions.", "unanswered_boundary": false }], "escalate": [{ "action": "Unknown vendor, payment over the approval threshold, or a suspected duplicate", "condition": "Always escalate to the Steward before acting.", "rationale": "Conservative default for ambiguous, irreversible, or financial exposure.", "unanswered_boundary": true }] }, "escalation_rules": ["Escalate any invoice over $5,000 or from a vendor not already in the ledger.", "Escalate when an invoice appears to duplicate one already drafted or posted."], "measurables": [{ "name": "Invoices drafted within one business day", "target": "100%", "cadence": "weekly", "source": "agent" }, { "name": "Discrepancies caught before posting", "target": "\u2265 95%", "cadence": "monthly", "source": "human" }], "permission_manifest": [{ "tool": "ap.invoices.read", "scope": "Read inbound invoices and the vendor ledger.", "granted": true, "rationale": "Needed to draft entries from source invoices." }, { "tool": "email.draft", "scope": "Draft vendor replies for human review; never send.", "granted": true, "rationale": "Lets the seat prepare clarifications without taking a send action." }], "budget": { "monthly_usd": null, "approval_required_over_usd": 0, "notes": "No autonomous spend; any spend requires Steward approval until a budget is set." }, "unanswered_boundaries": ["Approval threshold for auto-posting", "Vendor onboarding authority"], "seat_type_recommendation": { "recommendation": "agent", "rationale": "The work is high-volume, rule-bound, and fully reviewable, which suits a draft-and-confirm agent under a human Steward.", "confidence": 0.8 } } } },
|
|
58329
|
-
{ "id": "coach.draft_guide", "namespace": "coach", "action": "draft_guide", "title": "Draft accountability discussion guide", "description": "Draft a private discussion guide for the accountable human about a seat's commitment pattern. Read-only and human-only \u2014 it is never delivered, sent, or written to the coached person's record.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Draft a private accountability discussion guide for the accountable human from a seat's commitment pattern. Never delivered or written to the coached person's record." },
|
|
58330
|
-
{ "id": "command.describe", "namespace": "command", "action": "describe", "title": "Describe command", "description": "Return a command's exact input/output JSON Schema, scope, confirmation gate, help pointer, guides, a validated example, and related commands. Run this before calling a mutating command.", "requiredScope": "user", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Run command.describe before calling a mutating command to read its exact input/output schema and a worked example; on a failure, read the error's help field and run the command it names." },
|
|
58331
|
-
{ "id": "command.list", "namespace": "command", "action": "list", "title": "List commands", "description": "List every callable command id with its title, required scope, confirmation gate, and onboarding stages. Use 'command.describe' for a single command's full contract.", "requiredScope": "user", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List the callable command surface, then use command.describe for the exact contract of the one you need." },
|
|
58332
|
-
{ "id": "compass.alignment", "namespace": "compass", "action": "alignment", "title": "Check Compass alignment", "description": "Advisory drift check: scores whether cycle goals still ladder up to the active vision and flags orphan/contradictory goals. Read-only \u2014 it never edits the Compass or any goal.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Advisory drift check: scores whether cycle goals still ladder to the active vision and flags orphan/contradictory goals. Read-only." },
|
|
58333
|
-
{ "id": "compass.answer_gap", "namespace": "compass", "action": "answer_gap", "title": "Answer Compass gap", "description": "Record a human answer for a Compass gap and create a replacement draft.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "gap_id", "flag": "gap-id", "type": "string", "required": true }, { "name": "answer", "flag": "answer", "type": "string", "required": true }], "hasComplexInput": false, "help": "Answer Compass gaps with explicit human input before turning direction into graph, Charter, or Cascade decisions." },
|
|
58334
|
-
{ "id": "compass.approve_version", "namespace": "compass", "action": "approve_version", "title": "Approve Compass version", "description": "Activate a Compass version by supersession.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "draft_id", "flag": "draft-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Compass approval is a human decision and should anchor later Cascade commitments." },
|
|
58335
|
-
{ "id": "compass.draft", "namespace": "compass", "action": "draft", "title": "Draft Compass", "description": "Create a Compass draft version.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": true, "help": "Submit a full Compass document; read the Compass authoring guide for the field-by-field contract and worked examples before drafting. Drafting is safe for an agent; approving a version is a human act.", "example": { "doc": { "schema_version": 1, "purpose": { "value": "Help small manufacturers ship quality products on time.", "citations": [], "confidence": 0.9, "placeholder": false }, "principles": [{ "value": "Bias to action; decide with the information we have.", "citations": [], "confidence": 0.9, "placeholder": false }, { "value": "Customers feel the quality of every order.", "citations": [], "confidence": 0.9, "placeholder": false }], "horizon_goals": { "three_year": { "title": { "value": "Reach $10M ARR with a 25-person team", "citations": [], "confidence": 0.9, "placeholder": false }, "definition_of_done": { "value": "ARR is at or above $10M and team headcount is 25 with no key-role gaps.", "citations": [], "confidence": 0.9, "placeholder": false }, "horizon": "three_year" }, "one_year": { "title": { "value": "Hit $3M ARR and 99% on-time delivery", "citations": [], "confidence": 0.9, "placeholder": false }, "definition_of_done": { "value": "Trailing-12-month ARR \u2265 $3M and on-time delivery rate \u2265 99% for two consecutive quarters.", "citations": [], "confidence": 0.9, "placeholder": false }, "horizon": "one_year" } }, "cycle_objectives": [{ "title": { "value": "Cut order-to-ship cycle time by 20%", "citations": [], "confidence": 0.9, "placeholder": false }, "definition_of_done": { "value": "Median order-to-ship time is 20% lower than the prior cycle baseline.", "citations": [], "confidence": 0.9, "placeholder": false }, "horizon": "cycle" }], "gaps": [], "follow_up_tasks": [], "source_ids": [] } } },
|
|
58336
|
-
{ "id": "compass.get_current", "namespace": "compass", "action": "get_current", "title": "Get current Compass", "description": "Return the active and draft Compass versions plus the source documents that informed them.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read the active and draft Compass before drafting goals or recommending direction changes." },
|
|
58337
|
-
{ "id": "compass.import", "namespace": "compass", "action": "import", "title": "Import a ninety V/TO into a Compass draft", "description": "AI-draft a Compass from a ninety V/TO (values -> principles, 10/3/1-year -> horizons, Rocks -> cycle objectives). Produces a DRAFT a human confirms by supersession; never writes an accepted Compass.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "dry_run", "flag": "dry-run", "type": "boolean", "required": false }, { "name": "source_name", "flag": "source-name", "type": "string", "required": false }, { "name": "text", "flag": "text", "type": "string", "required": true }], "hasComplexInput": false, "help": "AI-draft a Compass from a ninety V/TO (values -> principles, 10/3/1-year -> horizons, Rocks -> cycle objectives). Lands a draft a human confirms; idempotent by document content." },
|
|
58338
|
-
{ "id": "compass.list_gaps", "namespace": "compass", "action": "list_gaps", "title": "List Compass gaps", "description": "Return unanswered and answered Compass context gaps for the latest draft or active version.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List unanswered Compass gaps so a human can answer them before direction anchors graph or Cascade work." },
|
|
58339
|
-
{ "id": "compass.reject_draft", "namespace": "compass", "action": "reject_draft", "title": "Reject Compass draft", "description": "Reject and remove a draft Compass version.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "draft_id", "flag": "draft-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Reject Compass drafts when the direction, language, or company intent is not ready to anchor implementation." },
|
|
58340
|
-
{ "id": "compass.set", "namespace": "compass", "action": "set", "title": "Set Compass", "description": "Compatibility command for the DER-626 MCP Compass tool.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "draft_id", "flag": "draft-id", "type": "string", "required": false }, { "name": "approve", "flag": "approve", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Set Compass drafts in the product's own vocabulary and approve only with explicit human confirmation." },
|
|
58341
|
-
{ "id": "compass.show_markdown", "namespace": "compass", "action": "show_markdown", "title": "Show Compass as markdown", "description": "Compose the current Compass and its open gaps into a clean, human-skimmable markdown card for review.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Render the current Compass and its open gaps as a clean markdown card to show your human a quick review." },
|
|
58342
|
-
{ "id": "compass.update_draft", "namespace": "compass", "action": "update_draft", "title": "Update Compass draft", "description": "Replace a draft Compass document.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "draft_id", "flag": "draft-id", "type": "string", "required": true }], "hasComplexInput": true, "help": "Pass the compass_version_id returned by compass.draft as draft_id; update_draft replaces only an unpublished draft in this tenant." },
|
|
58343
|
-
{ "id": "confirmation.activation_set.list", "namespace": "confirmation", "action": "activation_set.list", "title": "List activation approval sets", "description": "List agent-authored activation confirmation sets that the caller can review.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Review the routine activation confirmations from one implementation run before approving them in dependency order. Sensitive, dangerous, and previously-failed confirmations are not in this set \u2014 they stay in the general confirmation list (confirmation.list) and are approved individually. Each redacted_args is a partial projection of the proposal: content may be omitted, and no surface today renders it in full." },
|
|
58344
|
-
{ "id": "confirmation.approve", "namespace": "confirmation", "action": "approve", "title": "Approve pending confirmation", "description": "Approve an in-flight confirmation and execute the original command as the approving human.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "confirmation_id", "flag": "confirmation-id", "type": "string", "required": true }, { "name": "reviewed", "flag": "reviewed", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Approve pending confirmations only when the requested durable change is clear to the human owner." },
|
|
58345
|
-
{ "id": "confirmation.dismiss", "namespace": "confirmation", "action": "dismiss", "title": "Dismiss an expired confirmation", "description": "Clear a single expired, unactioned confirmation from the queue without re-executing the original command.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "confirmation_id", "flag": "confirmation-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Clear a single expired, unactioned confirmation from the queue. Dismiss is human-only queue hygiene \u2014 it never re-executes the original command." },
|
|
58346
|
-
{ "id": "confirmation.dismiss_stale", "namespace": "confirmation", "action": "dismiss_stale", "title": "Dismiss all expired confirmations", "description": "Clear every expired, unactioned confirmation in your authority scope from the queue without re-executing any command.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Clear every expired, unactioned confirmation in your authority scope at once. Each dismissal is audited; none re-executes the original command." },
|
|
58347
|
-
{ "id": "confirmation.list", "namespace": "confirmation", "action": "list", "title": "List pending confirmations", "description": "List in-flight confirmations awaiting a human decision, including seat-scoped cards the caller occupies and target-scoped cards the caller may decide as steward/admin.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List pending confirmations awaiting a human decision before approving or rejecting them. Each redacted_args is a partial projection of the proposal: content may be omitted, and no surface today renders it in full." },
|
|
58348
|
-
{ "id": "confirmation.reject", "namespace": "confirmation", "action": "reject", "title": "Reject pending confirmation", "description": "Reject an in-flight confirmation without executing the original command.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "confirmation_id", "flag": "confirmation-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Reject pending confirmations when authority, evidence, or human intent is unclear." },
|
|
58349
|
-
{ "id": "confirmation.remint", "namespace": "confirmation", "action": "remint", "title": "Re-mint an expired confirmation", "description": "Stage a fresh confirmation for the same command as an expired one, re-running the normal minting authorization checks.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "confirmation_id", "flag": "confirmation-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Re-mint an expired confirmation into a fresh one before approving, instead of re-running the original command from scratch." },
|
|
58350
|
-
{ "id": "credential.ingress", "namespace": "credential", "action": "ingress", "title": "Store credential", "description": "Store a secret through the vault and persist only the credential vault reference.", "requiredScope": "seat", "confirmation": "credential_flow", "exposeOverMcp": false, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "provider", "flag": "provider", "type": "string", "required": true }, { "name": "scope_description", "flag": "scope-description", "type": "string", "required": true }, { "name": "secret_name", "flag": "secret-name", "type": "string", "required": true }], "hasComplexInput": false, "secretBlocked": true, "help": "Ingress credentials only through vault-backed flows; never place raw secrets in prompts, logs, or docs." },
|
|
58351
|
-
{ "id": "credential.list", "namespace": "credential", "action": "list", "title": "List stored credentials", "description": "List the tenant's stored credentials as metadata only. NEVER returns the vault ref or any secret. Use the returned credential_id with secret_grant.grant to grant a seat brokered access without ever handling a raw ref.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List stored-credential metadata (id, provider, label, status, dates) to find the credential_id for secret_grant.grant. Never returns the vault ref or any secret." },
|
|
58352
|
-
{ "id": "deliverable.accept", "namespace": "deliverable", "action": "accept", "title": "Accept deliverable value", "description": "Record a human-confirmed accepted value (USD) on a deliverable. Humans decide; agents cannot self-accept. Re-accepting records a correction as a new event; prior events are never mutated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "deliverable_id", "flag": "deliverable-id", "type": "string", "required": true }, { "name": "impact_value_usd", "flag": "impact-value-usd", "type": "number", "required": true }], "hasComplexInput": false, "help": "Record a human-confirmed accepted value (USD) on a deliverable; owner-only and human-gated. Humans decide \u2014 agents cannot self-accept. Re-accepting records a correction as a new event." },
|
|
58353
|
-
{ "id": "deliverable.attach", "namespace": "deliverable", "action": "attach", "title": "Attach agent deliverable", "description": "Attach a deliverable to a source run, task, or work order for the acting seat. Source refs are validated server-side.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "run_id", "flag": "run-id", "type": "string", "required": false }, { "name": "task_id", "flag": "task-id", "type": "string", "required": false }, { "name": "work_order_id", "flag": "work-order-id", "type": "string", "required": false }, { "name": "kind", "flag": "kind", "type": "enum", "required": false, "enumValues": ["brief", "work_evidence", "artifact", "report", "other"] }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "summary", "flag": "summary", "type": "string", "required": false }, { "name": "content", "flag": "content", "type": "string", "required": false }], "hasComplexInput": true, "help": "Attach a scrubbed deliverable to a source run, task, or work order that belongs to the acting seat." },
|
|
58354
|
-
{ "id": "deliverable.create", "namespace": "deliverable", "action": "create", "title": "Create agent deliverable", "description": "Owned by the acting seat; scrubbed for secrets before storage.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "kind", "flag": "kind", "type": "enum", "required": false, "enumValues": ["brief", "work_evidence", "artifact", "report", "other"] }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "summary", "flag": "summary", "type": "string", "required": false }, { "name": "content", "flag": "content", "type": "string", "required": false }, { "name": "delivered_at", "flag": "delivered-at", "type": "string", "required": false }], "hasComplexInput": true, "help": "Create a scrubbed durable work output for the acting seat without making a durable company decision." },
|
|
58355
|
-
{ "id": "deliverable.get", "namespace": "deliverable", "action": "get", "title": "Get agent deliverable", "description": "Return one agent deliverable by id for a seat.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": true, "help": "Read one durable agent deliverable by id after checking seat-scoped access." },
|
|
58356
|
-
{ "id": "deliverable.list", "namespace": "deliverable", "action": "list", "title": "List agent deliverables", "description": "Return agent deliverables for a seat, including derived entries from succeeded runs with outcome summaries.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "List durable agent deliverables for a seat, including explicit outputs and successful-run summaries." },
|
|
58357
|
-
{ "id": "deliverable.reject", "namespace": "deliverable", "action": "reject", "title": "Reject deliverable value", "description": "Record a human-confirmed rejection on a deliverable. Humans decide; agents cannot self-reject. Re-rejecting records a correction as a new event; prior events are never mutated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "deliverable_id", "flag": "deliverable-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Record a human-confirmed rejection on a deliverable; owner-only and human-gated. Humans decide \u2014 agents cannot self-reject. Re-rejecting records a correction as a new event." },
|
|
58358
|
-
{ "id": "error_log.bulk_resolve", "namespace": "error_log", "action": "bulk_resolve", "title": "Bulk resolve error logs", "description": "Acknowledge or resolve a batch of stale error logs in one human-confirmed action, with a required reason. Each error log is resolved independently (partial success) and writes its own resolution event; already-resolved or missing ids are skipped.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "error_log_ids", "flag": "error-log-ids", "type": "array", "required": true, "itemType": "string" }, { "name": "reason", "flag": "reason", "type": "string", "required": true }, { "name": "disposition", "flag": "disposition", "type": "enum", "required": false, "enumValues": ["acknowledged", "resolved"] }], "hasComplexInput": false, "help": "Acknowledge or resolve a batch of stale error logs in one human-confirmed action with a required reason; each is resolved independently (partial success) and already-resolved or missing ids are skipped." },
|
|
58359
|
-
{ "id": "error_log.list", "namespace": "error_log", "action": "list", "title": "List error logs", "description": "List tenant error logs with optional filtering by seat, source, severity, and resolved state.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "source", "flag": "source", "type": "enum", "required": false, "enumValues": ["run", "llm", "tool", "mcp", "runner", "integration", "job", "web"] }, { "name": "severity", "flag": "severity", "type": "enum", "required": false, "enumValues": ["warning", "error", "critical"] }, { "name": "resolved", "flag": "resolved", "type": "enum", "required": false, "enumValues": ["active", "acknowledged", "resolved", "all"] }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List product-visible error logs by source, severity, seat, and active/resolved disposition before closing stale failures." },
|
|
58360
|
-
{ "id": "error_log.resolve", "namespace": "error_log", "action": "resolve", "title": "Resolve error log", "description": "Acknowledge or resolve an error log with a required reason and optional linked task, Friction issue, or PR reference.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "error_log_id", "flag": "error-log-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": true }, { "name": "disposition", "flag": "disposition", "type": "enum", "required": false, "enumValues": ["acknowledged", "resolved"] }, { "name": "linked_task_id", "flag": "linked-task-id", "type": "string", "required": false }, { "name": "linked_issue_id", "flag": "linked-issue-id", "type": "string", "required": false }, { "name": "linked_pr_ref", "flag": "linked-pr-ref", "type": "string", "required": false }], "hasComplexInput": false, "help": "Acknowledge or resolve a stale error log with a required human reason and optional task, issue, or PR evidence." },
|
|
58361
|
-
{ "id": "error_log.stale_candidates", "namespace": "error_log", "action": "stale_candidates", "title": "Find stale error logs", "description": "List unresolved error logs that have gone flat (no new occurrences) and are candidates for bulk resolution, with a per-row confidence tier and human-readable evidence. Read-only \u2014 it never resolves anything.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "stale_after_days", "flag": "stale-after-days", "type": "integer", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List unresolved error logs that have gone flat, with a confidence tier and evidence, to triage a bulk close-the-loop pass. Read-only." },
|
|
58362
|
-
{ "id": "error_log.supersede", "namespace": "error_log", "action": "supersede", "title": "Supersede error log", "description": "Links the old error to the new one and records the reason.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "error_log_id", "flag": "error-log-id", "type": "string", "required": true }, { "name": "new_error_log_id", "flag": "new-error-log-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": true }, { "name": "linked_task_id", "flag": "linked-task-id", "type": "string", "required": false }, { "name": "linked_issue_id", "flag": "linked-issue-id", "type": "string", "required": false }, { "name": "linked_pr_ref", "flag": "linked-pr-ref", "type": "string", "required": false }], "hasComplexInput": false, "help": "Mark an older error log as superseded by a newer same-tenant error log while preserving history." },
|
|
58363
|
-
{ "id": "escalation.bulk_resolve", "namespace": "escalation", "action": "bulk_resolve", "title": "Bulk resolve escalations", "description": "Override (safely close) a batch of stale open escalations in one human-confirmed action, with a required reason. Each escalation is decided independently (partial success) and writes its own human decision; already-decided, not-routed, or missing ids are skipped. Agents cannot bulk-resolve.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "escalation_ids", "flag": "escalation-ids", "type": "array", "required": true, "itemType": "string" }, { "name": "reason", "flag": "reason", "type": "string", "required": true }], "hasComplexInput": false, "help": "Override (safely close) a batch of stale open escalations in one human-confirmed action; each records its own human decision and already-decided, not-routed, or missing ids are skipped. Agents cannot bulk-resolve." },
|
|
58364
|
-
{ "id": "escalation.get", "namespace": "escalation", "action": "get", "title": "Get escalation", "description": "Read a single escalation the caller is allowed to see (own steward chain for humans, own seat for agents).", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Read one escalation's evidence and recommendation before a human resolves or rejects it." },
|
|
58365
|
-
{ "id": "escalation.list", "namespace": "escalation", "action": "list", "title": "List escalations", "description": "List Steward queue escalations routed to the caller's steward chain (human) or raised by the caller's seat (agent).", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "include_decided", "flag": "include-decided", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "List Steward queue escalations (own chain for humans, own seat for agents) before resolving or routing them." },
|
|
58366
|
-
{ "id": "escalation.raise", "namespace": "escalation", "action": "raise", "title": "Raise escalation", "description": "Emit an escalation event and open a Steward queue item for the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "reason", "flag": "reason", "type": "string", "required": true }, { "name": "charter_clause", "flag": "charter-clause", "type": "string", "required": true }, { "name": "recommended_action", "flag": "recommended-action", "type": "string", "required": false }, { "name": "title", "flag": "title", "type": "string", "required": false }, { "name": "category", "flag": "category", "type": "enum", "required": false, "enumValues": ["safety_refusal"] }], "hasComplexInput": true, "help": "Raise an escalation to the seat's Steward when a decision exceeds the seat's authority; humans decide." },
|
|
58367
|
-
{ "id": "escalation.reject", "namespace": "escalation", "action": "reject", "title": "Reject escalation", "description": "Override an open escalation so the agent must not proceed. Writes a human decision; agents cannot reject.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "Reject (override) an escalation so the agent must not proceed; the decision records the human decider. Agents cannot reject." },
|
|
58368
|
-
{ "id": "escalation.resolve", "namespace": "escalation", "action": "resolve", "title": "Resolve escalation", "description": "Approve an open escalation (or convert it to Friction). Writes a human decision; agents cannot resolve.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }, { "name": "action", "flag": "action", "type": "enum", "required": false, "enumValues": ["approve", "convert_to_issue"] }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "Resolve an escalation as a human Steward; the decision records decided_by as the approving human. Agents cannot resolve." },
|
|
58369
|
-
{ "id": "escalation.stale_candidates", "namespace": "escalation", "action": "stale_candidates", "title": "Find stale escalations", "description": "List open escalations routed to the caller's steward chain that have aged and still reference a concrete DER issue or PR, with a per-row confidence tier and evidence. Read-only \u2014 it never decides anything.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "stale_after_days", "flag": "stale-after-days", "type": "integer", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List aged open escalations in the caller's steward chain that still reference a concrete DER issue or PR \u2014 candidates for a bulk override. Read-only." },
|
|
58370
|
-
{ "id": "friction.assist", "namespace": "friction", "action": "assist", "title": "Assist Friction issue", "description": "Advisory IDS assist for an issue: the most-similar prior resolved issues with their root causes and decisions, a recurring-pattern flag, and recommended options. Read-only \u2014 it never resolves the issue.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Advisory IDS assist: the most-similar prior resolved issues with their root causes and decisions, plus a recurring-pattern flag. Read-only \u2014 it never resolves the issue." },
|
|
58371
|
-
{ "id": "friction.bulk_resolve", "namespace": "friction", "action": "bulk_resolve", "title": "Bulk resolve friction", "description": "Resolve a batch of stale Friction issues in one human-confirmed action with a required root cause (already-fixed mode \u2014 no follow-up task). Each issue is resolved independently (partial success) and writes its own human decision; already-resolved or missing ids are skipped.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "issue_ids", "flag": "issue-ids", "type": "array", "required": true, "itemType": "string" }, { "name": "root_cause", "flag": "root-cause", "type": "string", "required": true }], "hasComplexInput": false, "help": "Resolve a batch of stale issues in one human-confirmed action with a required root cause (already-fixed mode); each records its own human decision and already-resolved or missing ids are skipped." },
|
|
58372
|
-
{ "id": "friction.file_issue", "namespace": "friction", "action": "file_issue", "title": "File Friction issue", "description": "Emit an issue event and open a Friction issue raised by the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "summary", "flag": "summary", "type": "string", "required": true }, { "name": "blocking_goal_id", "flag": "blocking-goal-id", "type": "string", "required": false }, { "name": "broken_measurable_id", "flag": "broken-measurable-id", "type": "string", "required": false }, { "name": "severity", "flag": "severity", "type": "enum", "required": true, "enumValues": ["low", "med", "high", "critical"] }, { "name": "title", "flag": "title", "type": "string", "required": false }, { "name": "source_key", "flag": "source-key", "type": "string", "required": false }], "hasComplexInput": true, "help": "File a Friction issue with evidence when a goal or measurable is blocked or broken." },
|
|
58373
|
-
{ "id": "friction.get", "namespace": "friction", "action": "get", "title": "Get Friction issue", "description": "Get full detail for one Friction issue by id.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Get full detail for one Friction issue by id, including its root cause, action task, and resolution decision when present." },
|
|
58374
|
-
{ "id": "friction.import", "namespace": "friction", "action": "import", "title": "Import Friction issues from a ninety Issues List", "description": "Bulk-import a ninety Issues List export into Friction. Owners are seat names resolved to seats; each issue is raised by the resolved seat and attributed to the importing human. Idempotent \u2014 re-importing the same export is a no-op, and an existing open issue with the same seat + summary is skipped.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "dry_run", "flag": "dry-run", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Import a ninety Issues List export into Friction; owners resolve to seats, idempotent by file + seat/summary." },
|
|
58375
|
-
{ "id": "friction.link_task", "namespace": "friction", "action": "link_task", "title": "Link task to Friction issue", "description": "Attach an existing tenant task as the action task for a non-terminal issue. Both ids must belong to the tenant.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }, { "name": "task_id", "flag": "task-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Attach an existing task as the action task for a non-terminal issue." },
|
|
58376
|
-
{ "id": "friction.list", "namespace": "friction", "action": "list", "title": "List Friction issues", "description": "Ranked by status, impact, and severity. Defaults to active (open + diagnosing).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["open", "diagnosing", "resolved", "dropped", "active", "all"] }], "hasComplexInput": false, "help": "List Friction issues ranked by impact and severity to find the issue id before updating or resolving it." },
|
|
58377
|
-
{ "id": "friction.resolve", "namespace": "friction", "action": "resolve", "title": "Resolve Friction issue", "description": 'Resolve an issue with a root cause. In the default "ids" resolution_mode this also creates a remediation follow-up task; "already_fixed" records only the root cause (no follow-up task). Always records a human decision (decided_by) in the same transaction.', "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }, { "name": "resolution_mode", "flag": "resolution-mode", "type": "enum", "required": false, "enumValues": ["ids", "already_fixed"] }, { "name": "root_cause", "flag": "root-cause", "type": "string", "required": true }, { "name": "owner_seat_id", "flag": "owner-seat-id", "type": "string", "required": false }, { "name": "task_title", "flag": "task-title", "type": "string", "required": false }, { "name": "task_description", "flag": "task-description", "type": "string", "required": false }, { "name": "done_by", "flag": "done-by", "type": "string", "required": false }, { "name": "resolving_seat_id", "flag": "resolving-seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Resolve an issue with a root cause and remediation task; resolution is a human decision." },
|
|
58378
|
-
{ "id": "friction.stale_candidates", "namespace": "friction", "action": "stale_candidates", "title": "Find stale friction", "description": "List open or diagnosing Friction issues whose linked remediation task has already shipped, making them high-confidence candidates for bulk resolution, with per-row evidence. Read-only \u2014 it never resolves anything.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "stale_after_days", "flag": "stale-after-days", "type": "integer", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List open or diagnosing issues whose remediation task already shipped \u2014 high-confidence candidates for a bulk close-the-loop pass. Read-only." },
|
|
58379
|
-
{ "id": "friction.update_status", "namespace": "friction", "action": "update_status", "title": "Update Friction issue status", "description": "Move a non-terminal issue between open and diagnosing. Terminal issues (resolved/dropped) cannot be reopened here.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }, { "name": "status", "flag": "status", "type": "enum", "required": true, "enumValues": ["open", "diagnosing"] }], "hasComplexInput": false, "help": "Move a non-terminal issue between open and diagnosing while it is being worked." },
|
|
58380
|
-
{ "id": "gate.decide", "namespace": "gate", "action": "decide", "title": "Decide a conversational gate", "description": "A human approves or rejects a conversational gate bound to an artifact digest (a prototype URL, deliverable, or artifact). The agent drafts the decision and the human confirms it; the resolver is always a human. On approval the artifact must be unchanged since the gate was drafted \u2014 a stale digest re-blocks. Requires confirmation.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "subject_kind", "flag": "subject-kind", "type": "enum", "required": true, "enumValues": ["prototype", "deliverable", "artifact"] }, { "name": "subject_id", "flag": "subject-id", "type": "string", "required": true }, { "name": "artifact_digest", "flag": "artifact-digest", "type": "string", "required": true }, { "name": "decision", "flag": "decision", "type": "enum", "required": true, "enumValues": ["approve", "reject"] }, { "name": "ask", "flag": "ask", "type": "string", "required": true }, { "name": "consequence", "flag": "consequence", "type": "string", "required": true }, { "name": "unblocked_targets", "flag": "unblocked-targets", "type": "array", "required": false, "itemType": "string" }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": true, "help": "A human approves or rejects a conversational gate bound to an artifact digest; the agent drafts, the human confirms (invariant #7)." },
|
|
58381
|
-
{ "id": "goal.bind_measurable", "namespace": "goal", "action": "bind_measurable", "title": "Bind a Signal to a Cascade goal", "description": "Role defaults to 'informs' \u2014 a conservative informative indicator allowed at any goal level (many per goal) that never changes goal status. Role 'drives_status' makes it the goal's status driver: allowed only on a childless seat goal or milestone, at most one per goal, requires a second_anchor (a prior closed period + expected value confirming the Signal matched the books). This signal will set the goal's status from confirmed readings. You can turn this off later. Explicit auto_status_enabled: false opts out at bind time; goal.set_auto_status changes it after the fact. Binding a driver over an existing informs binding of the same Signal promotes it. Binding is human-gated.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "role", "flag": "role", "type": "enum", "required": false, "enumValues": ["drives_status", "informs"] }, { "name": "auto_status_enabled", "flag": "auto-status-enabled", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Bind a Signal to a goal. Defaults to role informs (a conservative indicator at any level that never changes status); pass role drives_status with a second_anchor (a prior closed period + expected value confirming the Signal matched the books) to make it a childless leaf goal's status driver \u2014 this promotes an existing informs binding. A new drives_status binding defaults auto_status_enabled to true (pass auto_status_enabled:false to opt out at bind time)." },
|
|
58382
|
-
{ "id": "goal.create", "namespace": "goal", "action": "create", "title": "Create Cascade goal", "description": "Create a Cascade goal. Defaults to a seat goal: pass seat_id and parent_goal_id, and the parent chain must terminate at a company objective in the same cycle (enforced server-side). Pass kind 'company_objective' to author a company objective \u2014 the Cascade root \u2014 with no seat and no parent; it anchors on the tenant's active Compass, which must already carry a one_year horizon goal, and requires an owner membership (a seat-scoped caller may create seat goals beneath one).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "cycle_id", "flag": "cycle-id", "type": "string", "required": true }, { "name": "kind", "flag": "kind", "type": "enum", "required": false, "enumValues": ["company_objective", "seat_goal"] }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "parent_goal_id", "flag": "parent-goal-id", "type": "string", "required": false }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "definition_of_done", "flag": "definition-of-done", "type": "string", "required": true }, { "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["on", "off"] }, { "name": "target_date", "flag": "target-date", "type": "string", "required": false }], "hasComplexInput": false, "help": "Create a seat goal under an existing objective (the default), or pass kind 'company_objective' to author the Cascade root itself against the active Compass (owner authority)." },
|
|
58383
|
-
{ "id": "goal.drop", "namespace": "goal", "action": "drop", "title": "Drop Cascade goal", "description": "Drop (retire) a goal by setting status to dropped. Dropping retires the commitment, so it is human-gated. The row is retained for audit (never deleted).", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Drop a goal to retire a commitment; the goal is retained for audit and dropping is human-gated." },
|
|
58384
|
-
{ "id": "goal.get", "namespace": "goal", "action": "get", "title": "Get Cascade goal", "description": "Get one goal's core detail and status by id. Seat-scoped callers may only read their own seat's goals.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Get one goal's core detail and status by id; seat tokens may only read their own goals." },
|
|
58385
|
-
{ "id": "goal.list", "namespace": "goal", "action": "list", "title": "List Cascade goals", "description": "List goals in the tenant, optionally filtered by cycle or seat. Seat-scoped callers see only their own seat's goals.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "cycle_id", "flag": "cycle-id", "type": "string", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "List Cascade goals to find goal ids, parentage, and seat ownership before mutating the tree." },
|
|
58386
|
-
{ "id": "goal.list_at_risk", "namespace": "goal", "action": "list_at_risk", "title": "List at-risk Cascade goals", "description": "List goals projected to miss their cycle pace (at-risk or projected-miss), with how many days behind pace. Read-only; status-only goals (no progress) are excluded.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List goals projected off pace (at-risk or projected-miss), with how many days behind pace. Read-only; status-only goals are excluded." },
|
|
58387
|
-
{ "id": "goal.list_measurables", "namespace": "goal", "action": "list_measurables", "title": "List a Cascade goal's Signals", "description": "List the status-driver Signal bound to a Cascade goal (role drives_status), with its current signal indicator and latest confirmed reading. Read-only. Informative (informs) bindings appear in the goal-detail panel's Direct indicators, not here.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "List the Signals bound to a goal (role drives_status) with each one's current indicator and latest confirmed reading." },
|
|
58388
|
-
{ "id": "goal.reassign_owner", "namespace": "goal", "action": "reassign_owner", "title": "Reassign Cascade goal owner seat", "description": "Reassign a seat goal's owner seat to a different seat in the same tenant. The goal's cycle and parent (ancestry chain) are unchanged \u2014 only the owning seat changes. Reassigning accountable ownership is human-gated. Emits a status event naming the previous and new seat.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Reassign a seat goal's owner seat to a different seat in the same tenant; cycle and parent ancestry are unchanged. Reassigning accountable ownership is human-gated." },
|
|
58389
|
-
{ "id": "goal.reparent", "namespace": "goal", "action": "reparent", "title": "Reparent Cascade goal", "description": "Move a goal under a different parent. Reparenting changes accountable structure, so it is human-gated. One-root and no-cycle are enforced server-side.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "parent_goal_id", "flag": "parent-goal-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Reparent a goal only when it clarifies accountable structure; reparenting changes authority and is human-gated." },
|
|
58390
|
-
{ "id": "goal.set_auto_status", "namespace": "goal", "action": "set_auto_status", "title": "Toggle Signal-driven auto-status", "description": "Opt a goal's drives_status binding into (or out of) auto-status. Default OFF. Enabling lets confirmed readings drive the goal's status; a human status pin still wins. Human-gated opt-in.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "enabled", "flag": "enabled", "type": "boolean", "required": true }], "hasComplexInput": false, "help": "Opt a goal's Signal binding into (or out of) auto-status. Default OFF. Enabling lets confirmed readings drive the status; a human status pin still wins." },
|
|
58391
|
-
{ "id": "goal.set_progress", "namespace": "goal", "action": "set_progress", "title": "Set Cascade goal progress", "description": "Set a goal's quantified progress (0\u2013100). Seat-scoped callers may set progress only for their own goals. An agent's progress is a proposal a human approves before it lands.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "progress_pct", "flag": "progress-pct", "type": "integer", "required": true }], "hasComplexInput": false, "help": "Report a goal's quantified progress (0-100). An agent's progress is a proposal a human approves before the goal moves." },
|
|
58392
|
-
{ "id": "goal.set_status", "namespace": "goal", "action": "set_status", "title": "Set Cascade goal status", "description": "Set a goal's status (on/off/done). Seat-scoped callers may set status only for their own goals.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "status", "flag": "status", "type": "enum", "required": true, "enumValues": ["on", "off", "done"] }], "hasComplexInput": false, "help": "Set a goal's status; seat tokens may only set status for their own goals." },
|
|
58393
|
-
{ "id": "goal.unbind_measurable", "namespace": "goal", "action": "unbind_measurable", "title": "Unbind a Signal from a Cascade goal", "description": "Role defaults to 'drives_status'; pass role 'informs' to remove an informative indicator. Removing a driver keeps the goal's last status; unbinding only stops future signal-driven updates.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "role", "flag": "role", "type": "enum", "required": false, "enumValues": ["drives_status", "informs"] }], "hasComplexInput": false, "help": "Remove a Signal's drives_status binding from a goal; the goal keeps its last status and stops receiving signal-driven updates." },
|
|
58394
|
-
{ "id": "goal.update", "namespace": "goal", "action": "update", "title": "Update Cascade goal", "description": "Update a goal's title, definition of done, or target date. Topology (parent/seat) and status have dedicated commands.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "title", "flag": "title", "type": "string", "required": false }, { "name": "definition_of_done", "flag": "definition-of-done", "type": "string", "required": false }, { "name": "target_date", "flag": "target-date", "type": "string", "required": false }], "hasComplexInput": false, "help": "Update a goal's title or definition of done; topology and status have dedicated commands." },
|
|
58395
|
-
{ "id": "graph.get", "namespace": "graph", "action": "get", "title": "Get Responsibility Graph", "description": "Return the tenant's Responsibility Graph: seats, edges, root, occupants, and status rollups.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read the Responsibility Graph to discover seat ids, parentage, occupants, and status before mutating or routing work." },
|
|
58396
|
-
{ "id": "implementation_access.abandon", "namespace": "implementation_access", "action": "abandon", "title": "Abandon implementation access", "description": "Close the implementation bootstrap run as abandoned and revoke its bearer token.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [], "hasComplexInput": false, "help": "Close the implementation bootstrap run as abandoned and revoke its bearer token." },
|
|
58397
|
-
{ "id": "implementation_access.complete", "namespace": "implementation_access", "action": "complete", "title": "Complete implementation access", "description": "Close the implementation bootstrap run as completed and revoke its bearer token.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [], "hasComplexInput": false, "help": "Close the implementation bootstrap run as completed and revoke its bearer token." },
|
|
58398
|
-
{ "id": "implementation_access.status", "namespace": "implementation_access", "action": "status", "title": "Implementation access status", "description": "Read the current state of the implementation bootstrap run and its bearer token.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [], "hasComplexInput": false, "help": "Read the current state of the implementation bootstrap run and its bearer token." },
|
|
58399
|
-
{ "id": "integration.connect_rest", "namespace": "integration", "action": "connect_rest", "title": "Connect REST integration", "description": "Create or rotate the tenant Baserow REST integration using a vault-backed secret. Stores endpoint metadata only; never returns secrets or vault refs.", "requiredScope": "tenant_admin", "confirmation": "credential_flow", "exposeOverMcp": false, "fields": [{ "name": "provider", "flag": "provider", "type": "enum", "required": true, "enumValues": ["baserow"] }, { "name": "endpoint_url", "flag": "endpoint-url", "type": "string", "required": true }, { "name": "scope_description", "flag": "scope-description", "type": "string", "required": true }, { "name": "secret_name", "flag": "secret-name", "type": "string", "required": true }, { "name": "account_label", "flag": "account-label", "type": "string", "required": false }], "hasComplexInput": false, "secretBlocked": true, "help": "Create or rotate a vault-backed Baserow REST integration for Signal pulls. Use the credential flow; never pass secrets through CLI argv." },
|
|
58400
|
-
{ "id": "integration.discover", "namespace": "integration", "action": "discover", "title": "Discover a connection for signals", "description": "Read-only introspection of a connected source for signal binding. Returns non-secret adapter metadata and a rest-for-signals recipe skeleton to author against signal.preview.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "integration_id", "flag": "integration-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Read-only introspection of a connected source: returns non-secret metadata + a recipe skeleton to author a signal pull against. No network." },
|
|
58401
|
-
{ "id": "integration.list", "namespace": "integration", "action": "list", "title": "List integrations", "description": "List tenant integration metadata and health status. Returns account/scopes/capabilities only; never secrets or vault refs.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "provider", "flag": "provider", "type": "string", "required": false }], "hasComplexInput": false, "help": "List connected integrations and their metadata-only health state before enabling a connector-backed tool." },
|
|
58402
|
-
{ "id": "integration.readiness", "namespace": "integration", "action": "readiness", "title": "Check integration readiness", "description": "Return a safe connector setup checklist for operators and agents. Starts with Google and exposes no secrets.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "provider", "flag": "provider", "type": "enum", "required": false, "enumValues": ["google"] }], "hasComplexInput": false, "help": "Read the connector setup checklist before relying on Google-backed agent work; the checklist names missing config, connection, scopes, external verification, and handler blockers." },
|
|
58403
|
-
{ "id": "integration.status", "namespace": "integration", "action": "status", "title": "Get integration status", "description": "Read one integration's metadata and latest health status. Returns no secret material.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "provider", "flag": "provider", "type": "string", "required": false }, { "name": "integration_id", "flag": "integration-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Read one integration's metadata-only status by provider or integration id." },
|
|
58404
|
-
{ "id": "integration.test", "namespace": "integration", "action": "test", "title": "Test integration connection", "description": "Run the installed provider-specific connection test and update integration health. The command returns bounded metadata only.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "provider", "flag": "provider", "type": "string", "required": false }, { "name": "integration_id", "flag": "integration-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Run the provider-specific connection test and update integration health without exposing credentials." },
|
|
58405
|
-
{ "id": "mcp_token.create", "namespace": "mcp_token", "action": "create", "title": "Create MCP token", "description": "Mint a tenant-admin or seat-scoped MCP token.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "scope", "flag": "scope", "type": "enum", "required": true, "enumValues": ["tenant_admin", "seat"] }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "expires_at", "flag": "expires-at", "type": "string", "required": false }, { "name": "expires_in_days", "flag": "expires-in-days", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Create MCP tokens with the narrowest scope needed, and tell agents where to retrieve reference docs." },
|
|
58406
|
-
{ "id": "mcp_token.list", "namespace": "mcp_token", "action": "list", "title": "List MCP tokens", "description": "List MCP token metadata (id, scope, seat, created/last-used/revoked). Never returns token material.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "include_revoked", "flag": "include-revoked", "type": "boolean", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "List MCP token metadata (never token material) to audit which seats hold active sessions." },
|
|
58407
|
-
{ "id": "mcp_token.revoke", "namespace": "mcp_token", "action": "revoke", "title": "Revoke MCP token", "description": "Revoke an MCP token immediately.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "token_id", "flag": "token-id", "type": "string", "required": true }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Revoke MCP access when a local session ends or seat authority changes." },
|
|
58408
|
-
{ "id": "measurable_template.adopt", "namespace": "measurable_template", "action": "adopt", "title": "Adopt a measurable template", "description": "Create a seat measurable from a catalog template (unit/direction/cadence from the template; target optionally overridden). The seat owns it; readings attach afterward.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "template_id", "flag": "template-id", "type": "string", "required": true }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "target", "flag": "target", "type": "number", "required": false }], "hasComplexInput": false, "help": "Create a seat measurable from a catalog template (unit/direction/cadence from the template; target optionally overridden). Adoption is a human act \u2014 source is human." },
|
|
58409
|
-
{ "id": "measurable_template.list", "namespace": "measurable_template", "action": "list", "title": "List measurable templates", "description": "List the measurable template catalog (Sales/Finance/Ops/Marketing/HR) with unit, direction, cadence, and a suggested target. Adopt one with measurable_template.adopt.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "function", "flag": "function", "type": "enum", "required": false, "enumValues": ["sales", "finance", "operations", "marketing", "hr"] }], "hasComplexInput": false, "help": "List the measurable template catalog by function (Sales/Finance/Ops/Marketing/HR); adopt one with measurable_template.adopt to create a seat measurable." },
|
|
58410
|
-
{ "id": "measurable.create", "namespace": "measurable", "action": "create", "title": "Add a measurable", "description": "Create a measurable (a Signal a seat owns) with its target, unit, direction, and cadence. Readings attach to the measurable afterward. Source is 'human' \u2014 a human-defined measurable a human logs.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "name", "flag": "name", "type": "string", "required": true }, { "name": "unit", "flag": "unit", "type": "string", "required": true }, { "name": "direction", "flag": "direction", "type": "enum", "required": true, "enumValues": ["up_good", "down_good"] }, { "name": "target", "flag": "target", "type": "number", "required": true }, { "name": "cadence", "flag": "cadence", "type": "enum", "required": true, "enumValues": ["daily", "weekly", "monthly", "quarterly", "annual"] }], "hasComplexInput": false, "help": "Add a measurable a seat owns (name, unit, direction, target, cadence) before recording readings against it." },
|
|
58411
|
-
{ "id": "member.invite", "namespace": "member", "action": "invite", "title": "Invite member", "description": "Create a pending tenant invite for a human teammate. The acceptance link is delivered out of band, not in the command result.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "email", "flag": "email", "type": "string", "required": true }, { "name": "role", "flag": "role", "type": "enum", "required": true, "enumValues": ["owner", "admin", "steward", "member"] }, { "name": "member_type", "flag": "member-type", "type": "enum", "required": false, "enumValues": ["internal", "external_implementer"] }, { "name": "access_profile", "flag": "access-profile", "type": "enum", "required": false, "enumValues": ["full_setup", "setup_limited", "seat_scoped", "custom"] }, { "name": "aicos_access_scope", "flag": "aicos-access-scope", "type": "enum", "required": false, "enumValues": ["none", "own_scope", "setup", "company_read", "company_operate"] }, { "name": "byo_key", "flag": "byo-key", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Invite humans to the company by seat-aware role; the invite token is never returned over CLI or MCP." },
|
|
58412
|
-
{ "id": "member.remove", "namespace": "member", "action": "remove", "title": "Remove member", "description": "Blocked when it would orphan an agent steward chain.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "member_id", "flag": "member-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Remove a member; the no-orphan-agent guard blocks removing the only steward in an agent chain." },
|
|
58413
|
-
{ "id": "member.update", "namespace": "member", "action": "update", "title": "Update member role", "description": "Change a tenant member's role.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "member_id", "flag": "member-id", "type": "string", "required": true }, { "name": "role", "flag": "role", "type": "enum", "required": true, "enumValues": ["owner", "admin", "steward", "member"] }], "hasComplexInput": false, "help": "Change a member's role; role changes are human-gated." },
|
|
58414
|
-
{ "id": "model.catalog", "namespace": "model", "action": "catalog", "title": "List model catalog", "description": "List the guided model tiers the agent builder reads \u2014 cost, effort, and when to choose or avoid each tier.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List guided model tiers with recommendations, token prices, cost bands, best-fit work, and model ids before choosing --model for an agent." },
|
|
58415
|
-
{ "id": "notification.list_errors", "namespace": "notification", "action": "list_errors", "title": "List notification errors", "description": "List recent failed notification deliveries for the tenant.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List recent failed notification deliveries when diagnosing missed escalations or briefs." },
|
|
58416
|
-
{ "id": "notification.settings.get", "namespace": "notification", "action": "settings.get", "title": "Get notification settings", "description": "Read tenant notification preferences (escalations, Sync brief, default channel).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read notification preferences before changing escalation or Sync brief delivery." },
|
|
58417
|
-
{ "id": "notification.settings.update", "namespace": "notification", "action": "settings.update", "title": "Update notification settings", "description": "Update tenant notification preferences.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "escalations_enabled", "flag": "escalations-enabled", "type": "boolean", "required": false }, { "name": "sync_brief_enabled", "flag": "sync-brief-enabled", "type": "boolean", "required": false }, { "name": "default_channel", "flag": "default-channel", "type": "enum", "required": false, "enumValues": ["slack", "email", "in_app"] }], "hasComplexInput": false, "help": "Update notification preferences for escalations, Sync briefs, and the default channel." },
|
|
58418
|
-
{ "id": "notification.test", "namespace": "notification", "action": "test", "title": "Send test notification", "description": "Emit an in-app test notification to the acting human to verify delivery is wired.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Send an in-app test notification to confirm the delivery path is wired." },
|
|
58419
|
-
{ "id": "onboarding.advance_step", "namespace": "onboarding", "action": "advance_step", "title": "Advance onboarding step", "description": "Persist the current onboarding step after server-side validation.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "step", "flag": "step", "type": "string", "required": true }, { "name": "completed", "flag": "completed", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Advance onboarding only after the current setup step is represented in the tenant state." },
|
|
58420
|
-
{ "id": "onboarding.attach_reference", "namespace": "onboarding", "action": "attach_reference", "title": "Attach reference document", "description": "Attach a company reference document (text/markdown) so Compass and Charters can cite it. Reference-only \u2014 it does not build a Compass; convert each meaningful doc to markdown and attach it with a title, kind, and source.", "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": "Convert each meaningful company doc to markdown and attach it as a reference (title, kind, source) so Compass and Charters can cite it; this attaches a reference, it does not build a Compass \u2014 author Compass directly.", "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" } },
|
|
58421
|
-
{ "id": "onboarding.create_invite", "namespace": "onboarding", "action": "create_invite", "title": "Create onboarding invite", "description": "Create a pending invite for an onboarding team member.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "email", "flag": "email", "type": "string", "required": true }, { "name": "role", "flag": "role", "type": "enum", "required": false, "enumValues": ["owner", "admin", "steward", "member"] }], "hasComplexInput": true, "help": "Invites should give humans access to the company without assigning work directly to people instead of seats." },
|
|
58422
|
-
{ "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." },
|
|
58423
|
-
{ "id": "onboarding.rehearse", "namespace": "onboarding", "action": "rehearse", "title": "Rehearse onboarding agents", "description": "Run the exact setup receipt's agents through a resumable sandbox-only rehearsal batch. Returns immutable evidence and never stages activation.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "idempotency_key", "flag": "idempotency-key", "type": "string", "required": true }, { "name": "setup_application_id", "flag": "setup-application-id", "type": "string", "required": true }, { "name": "expected_input_digest", "flag": "expected-input-digest", "type": "string", "required": true }, { "name": "expected_receipt_revision", "flag": "expected-receipt-revision", "type": "integer", "required": true }], "hasComplexInput": false, "help": "Run the exact setup receipt's agents through the sandbox-only rehearsal batch. It returns immutable terminal evidence and never stages activation, arms schedules, accesses credentials, or sends externally." },
|
|
58424
|
-
{ "id": "onboarding.resume", "namespace": "onboarding", "action": "resume", "title": "Onboard resume", "description": "Return the onboarding resume state: path choice, pending setup, and the next step.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Resume an in-progress onboarding session from the implementation bootstrap principal; reports path choice, pending setup, and the next step." },
|
|
58425
|
-
{ "id": "onboarding.select_path", "namespace": "onboarding", "action": "select_path", "title": "Select onboarding path", "description": "Record whether this company continues guided onboarding or hands setup to an agent (agent-led). Human-only (web UI or CLI), not an MCP tool. Never marks onboarding complete or grants any authority.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "path", "flag": "path", "type": "enum", "required": true, "enumValues": ["guided", "agent_led"] }], "hasComplexInput": false, "help": "Records whether the owner continues guided onboarding or hands setup to an agent (agent-led). Owner-only; it never marks onboarding complete or grants authority." },
|
|
58426
|
-
{ "id": "onboarding.setup", "namespace": "onboarding", "action": "setup", "title": "Apply onboarding setup", "description": "Stage one owner approval for a complete declarative onboarding setup. Approval applies the plan atomically without invites, credentials, external messages, or go-live.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [], "hasComplexInput": true, "help": "Submit the complete declarative setup plan once. It stages one owner confirmation and applies the approved plan atomically without invites, credentials, external messages, or go-live." },
|
|
58427
|
-
{ "id": "onboarding.source_ingest", "namespace": "onboarding", "action": "source_ingest", "title": "Ingest onboarding source", "description": "Retain one bounded setup source under the exact tenant and implementation run.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "source_key", "flag": "source-key", "type": "string", "required": true }, { "name": "kind", "flag": "kind", "type": "enum", "required": true, "enumValues": ["org_chart", "signal_export", "goal_export", "friction_export", "meeting_export", "other"] }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "content_base64", "flag": "content-base64", "type": "string", "required": true }], "hasComplexInput": false, "help": "Ingest one bounded CSV source into encrypted tenant/run-bound retained storage. The server computes its digest and canonical family manifest; paths, URLs, and client digests are not accepted." },
|
|
58428
|
-
{ "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." },
|
|
58429
|
-
{ "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" } },
|
|
58430
|
-
{ "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." },
|
|
58431
|
-
{ "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." },
|
|
58432
|
-
{ "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." },
|
|
58433
|
-
{ "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." },
|
|
58434
|
-
{ "id": "runner.revoke", "namespace": "runner", "action": "revoke", "title": "Revoke runner", "description": "Revoke a runner so it can no longer authenticate or claim work.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "runner_id", "flag": "runner-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Revoke a runner when a machine should no longer authenticate or claim work; this is a human-gated action." },
|
|
58435
|
-
{ "id": "runner.status", "namespace": "runner", "action": "status", "title": "Runner status", "description": "Read a single runner's capability and online/offline/revoked state.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "runner_id", "flag": "runner-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Check a runner's capability and heartbeat state when diagnosing offline work." },
|
|
58436
|
-
{ "id": "scorecard.grid", "namespace": "scorecard", "action": "grid", "title": "Read the scorecard grid", "description": "Return the leadership scorecard trailing grid: rows are measurables of a cadence (default weekly), columns are the trailing N periods with a colour-coded cell per period, plus the computed Org-Checkup system-health measurables. Seat-scoped callers see only their own seat.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "cadence", "flag": "cadence", "type": "enum", "required": false, "enumValues": ["daily", "weekly", "monthly", "quarterly", "annual"] }, { "name": "trailing", "flag": "trailing", "type": "integer", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "as_of", "flag": "as-of", "type": "string", "required": false }], "hasComplexInput": false, "help": "Read the leadership scorecard trailing grid (rows = measurables of a cadence, columns = trailing periods, colour-coded cells) plus the computed Org-Checkup system-health measurables. Keep exception-first as the default view." },
|
|
58437
|
-
{ "id": "seat.create", "namespace": "seat", "action": "create", "title": "Create seat", "description": "Create a Responsibility Graph seat.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "name", "flag": "name", "type": "string", "required": true }, { "name": "parent_seat_id", "flag": "parent-seat-id", "type": "string", "required": false }, { "name": "seat_type", "flag": "seat-type", "type": "enum", "required": false, "enumValues": ["human", "agent", "hybrid"] }], "hasComplexInput": false, "help": "Create seats from functions before assigning people or agents." },
|
|
58438
|
-
{ "id": "seat.create_complete", "namespace": "seat", "action": "create_complete", "title": "Create complete seat", "description": "Create a Seat with its Charter, disclosed staffing, and optional dry-run agent shell after owner confirmation.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "idempotency_key", "flag": "idempotency-key", "type": "string", "required": true }], "hasComplexInput": true, "help": "Submit one complete Seat proposal with its Charter, disclosed staffing, and optional dry-run agent configuration. Read the exact schema first; the command stages one owner confirmation, never goes live, and applies every approved effect atomically." },
|
|
58439
|
-
{ "id": "seat.decommission", "namespace": "seat", "action": "decommission", "title": "Decommission seat", "description": "Retire a seat: end occupancies, archive the active charter, revoke seat tokens/credentials, cancel schedules, and emit a tombstone event. Blocks if it would leave another live agent without a human steward chain.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Retiring a seat ends occupancies, archives the active Charter, revokes seat tokens and credentials, and emits a tombstone event. No-orphan guarded. To retire only the agent and keep the seat, use agent.decommission." },
|
|
58440
|
-
{ "id": "seat.decommission_preview", "namespace": "seat", "action": "decommission_preview", "title": "Preview seat decommission", "description": "Show exactly what retiring a seat would end, revoke, archive, or expire without mutating state. The no-orphan steward guard is still checked when the real decommission executes.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Preview the occupancies, agents, Charter versions, tokens, credentials, work orders, and schedules that seat.decommission would affect without mutating state." },
|
|
58441
|
-
{ "id": "seat.get", "namespace": "seat", "action": "get", "title": "Get seat detail", "description": "Return seat profile, steward chain, occupancy, Charter ids, agent status, token metadata, and open-work counts.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Inspect a seat's Charter ids, steward chain, occupancy, agent status, token metadata, and open-work counts before acting on it." },
|
|
58442
|
-
{ "id": "seat.rename", "namespace": "seat", "action": "rename", "title": "Rename seat", "description": "Rename a Responsibility Graph seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "name", "flag": "name", "type": "string", "required": true }], "hasComplexInput": false, "help": "Seat names should describe the function and accountability clearly." },
|
|
58443
|
-
{ "id": "seat.reparent", "namespace": "seat", "action": "reparent", "title": "Reparent seat", "description": "Move a Responsibility Graph seat under a new parent.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "new_parent_seat_id", "flag": "new-parent-seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Reparent seats only when it clarifies accountable structure and preserves a clean graph." },
|
|
58444
|
-
{ "id": "seat.set_type", "namespace": "seat", "action": "set_type", "title": "Set seat type", "description": "Set a Responsibility Graph seat type.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "seat_type", "flag": "seat-type", "type": "enum", "required": true, "enumValues": ["human", "agent", "hybrid"] }], "hasComplexInput": false, "help": "Seat type should follow the work, risk, measurable, and stewardship model." },
|
|
58445
|
-
{ "id": "secret_grant.grant", "namespace": "secret_grant", "action": "grant", "title": "Grant a brokered secret", "description": "A human grants a seat scoped access to a brokered secret by CREDENTIAL ID (from credential.list / credential.ingress \u2014 resolved to its vault ref server-side) or by VAULT REF directly (exactly one). Postgres stores only the pointer \u2014 never secret material. Owner-only, human-gated. The secret.broker/baserow.* tools resolve this grant server-side; the secret never enters agent context.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "grant_key", "flag": "grant-key", "type": "string", "required": true }, { "name": "vault_ref", "flag": "vault-ref", "type": "string", "required": false }, { "name": "credential_id", "flag": "credential-id", "type": "string", "required": false }, { "name": "provider", "flag": "provider", "type": "string", "required": true }, { "name": "allowed_host", "flag": "allowed-host", "type": "string", "required": true }, { "name": "allowed_path_prefix", "flag": "allowed-path-prefix", "type": "string", "required": false }, { "name": "allowed_methods", "flag": "allowed-methods", "type": "array", "required": true, "itemType": "string" }, { "name": "scope_tier", "flag": "scope-tier", "type": "enum", "required": true, "enumValues": ["read", "write"] }, { "name": "injection_mode", "flag": "injection-mode", "type": "enum", "required": false, "enumValues": ["header_bearer", "header", "query"] }, { "name": "injection_name", "flag": "injection-name", "type": "string", "required": false }, { "name": "injection_prefix", "flag": "injection-prefix", "type": "string", "required": false }, { "name": "expires_at", "flag": "expires-at", "type": "string", "required": false }], "hasComplexInput": false, "help": "A human grants a seat a scoped brokered secret by vault ref (host + path prefix + methods + injection). Postgres stores only the pointer, never secret material. Owner-only and human-gated; the secret.broker/baserow.* tools resolve it server-side." },
|
|
58446
|
-
{ "id": "secret_grant.list", "namespace": "secret_grant", "action": "list", "title": "List brokered secret grants", "description": "List brokered secret grants for the tenant (or one seat). Returns the egress allowlist metadata only (host, path prefix, methods, scope, status) \u2014 never the vault ref or any secret. An agent sees only its own seat's grants.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "include_revoked", "flag": "include-revoked", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "List brokered secret grants for the tenant (or one seat). Returns the egress allowlist metadata only \u2014 host, path prefix, methods, scope, status \u2014 never the vault ref or any secret." },
|
|
58447
|
-
{ "id": "secret_grant.request", "namespace": "secret_grant", "action": "request", "title": "Request a brokered secret grant", "description": "An agent or user REQUESTS a scoped brokered-secret grant by naming the egress it needs (grant key, host, path prefix, methods, scope). No secret and no vault ref are ever accepted \u2014 this only records a durable ask for a human to grant.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "grant_key", "flag": "grant-key", "type": "string", "required": true }, { "name": "provider", "flag": "provider", "type": "string", "required": true }, { "name": "allowed_host", "flag": "allowed-host", "type": "string", "required": true }, { "name": "allowed_path_prefix", "flag": "allowed-path-prefix", "type": "string", "required": false }, { "name": "allowed_methods", "flag": "allowed-methods", "type": "array", "required": true, "itemType": "string" }, { "name": "scope_tier", "flag": "scope-tier", "type": "enum", "required": true, "enumValues": ["read", "write"] }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "An agent or user requests a brokered-secret egress grant by naming the host, path prefix, methods, and scope it needs. Draft-and-confirm: no secret or vault ref is accepted; a human grants it." },
|
|
58448
|
-
{ "id": "secret_grant.revoke", "namespace": "secret_grant", "action": "revoke", "title": "Revoke a brokered secret grant", "description": "Revoke a brokered secret grant \u2014 a compromised or over-scoped seat's egress access can be cut immediately; the next broker call resolves no grant and fails closed. Owner-only, human-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "grant_id", "flag": "grant-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Revoke a brokered secret grant (teardown \u2014 cut a compromised or over-scoped seat's egress immediately; the next broker call fails closed). Owner-only and human-gated." },
|
|
58449
|
-
{ "id": "settings.agent_policy.get", "namespace": "settings", "action": "agent_policy.get", "title": "Get company autonomy ceiling", "description": "Read this company's Company Guardrails ceiling (ADR-0007): the profile, enforcement mode, and the most an agent may do autonomously (max_autonomous_risk). Returns metadata only.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read this company's autonomy ceiling (Company Guardrails, ADR-0007): profile, enforcement mode, and the most an agent may do autonomously." },
|
|
58450
|
-
{ "id": "settings.agent_policy.update", "namespace": "settings", "action": "agent_policy.update", "title": "Set company autonomy ceiling", "description": "Set the Company Guardrails ceiling (ADR-0007): a named profile (locked_down, balanced, high_autonomy) or custom + max_autonomous_risk. Tenant-admin and human-gated. An explicitly set ceiling is ENFORCED by default; pass enforcement=observe to stage a change without blocking.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "profile", "flag": "profile", "type": "enum", "required": true, "enumValues": ["locked_down", "balanced", "high_autonomy", "custom"] }, { "name": "max_autonomous_risk", "flag": "max-autonomous-risk", "type": "enum", "required": false, "enumValues": ["low", "medium", "high", "critical"] }, { "name": "enforcement", "flag": "enforcement", "type": "enum", "required": false, "enumValues": ["observe", "enforce"] }], "hasComplexInput": false, "help": "Set the company autonomy ceiling: a profile (locked_down, balanced, high_autonomy) or custom + max_autonomous_risk. Owner-only, human-gated, and enforced by default." },
|
|
58451
|
-
{ "id": "settings.confirmation_policy.get", "namespace": "settings", "action": "confirmation_policy.get", "title": "Get CLI confirmation mode", "description": "Read this company's CLI confirmation mode (DER-1490): careful (the strict default \u2014 the CLI cannot silently auto-approve a confirmation) or trusted_operator (an owner opt-in permitting silent auto-approval of non-dangerous confirmations). Returns metadata only.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read this company's CLI confirmation mode: careful (the strict default \u2014 the CLI cannot silently auto-approve a confirmation) or trusted_operator (an owner opt-in permitting silent auto-approval of non-dangerous confirmations)." },
|
|
58452
|
-
{ "id": "settings.confirmation_policy.update", "namespace": "settings", "action": "confirmation_policy.update", "title": "Set CLI confirmation mode", "description": "Set this company's CLI confirmation mode (DER-1490): careful (strict \u2014 no silent CLI auto-approval) or trusted_operator (owner opt-in permitting silent auto-approval of non-dangerous confirmations; dangerous confirmations always require an interactive review). Owner-only and human-gated: choosing trusted_operator establishes an ADR-0018 \xA76 standing authorization.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "cli_mode", "flag": "cli-mode", "type": "enum", "required": true, "enumValues": ["trusted_operator", "careful"] }], "hasComplexInput": false, "help": "Set the CLI confirmation mode to careful or trusted_operator. Owner-only and human-gated; trusted_operator establishes a standing authorization and dangerous confirmations still require an interactive review." },
|
|
58453
|
-
{ "id": "settings.get", "namespace": "settings", "action": "get", "title": "Get tenant settings", "description": "Read tenant operating settings: plan, status, spend/budgets, integration status, and notification preferences. Returns metadata only.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read tenant operating settings: plan, spend, budgets, integration status, and notification preferences. No secrets." },
|
|
58454
|
-
{ "id": "settings.member_visibility.get", "namespace": "settings", "action": "member_visibility.get", "title": "Get member visibility mode", "description": "Read the tenant's member visibility mode: all (every member sees all Signals/Frictions) or seat_subtree (a member sees only their occupied seats plus downstream seats).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read whether members see all Signals/Frictions tenant-wide (all) or only their occupied seats plus downstream seats (seat_subtree)." },
|
|
58455
|
-
{ "id": "settings.member_visibility.update", "namespace": "settings", "action": "member_visibility.update", "title": "Update member visibility mode", "description": "Set the tenant's member visibility mode (all or seat_subtree). Governs how non-owner members see Signals (Scorecard) and Frictions (Issues); write actions stay role-gated.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "member_visibility_mode", "flag": "member-visibility-mode", "type": "enum", "required": true, "enumValues": ["all", "seat_subtree"] }], "hasComplexInput": false, "help": "Set member visibility to all or seat_subtree; owner-only. Governs how non-owner members see the Scorecard and Issues; write actions stay role-gated." },
|
|
58456
|
-
{ "id": "settings.product_learning.get", "namespace": "settings", "action": "product_learning.get", "title": "Get product-learning policy", "description": "Read whether product/page/recommendation analytics may be recorded for this tenant. Security and audit logs remain enabled in every mode.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read whether product/page/recommendation analytics are allowed for the tenant; security and audit logs always stay enabled." },
|
|
58457
|
-
{ "id": "settings.product_learning.update", "namespace": "settings", "action": "product_learning.update", "title": "Update product-learning policy", "description": "Set tenant product-learning participation. Disabled and enterprise-contract modes block generic product analytics writes, but not security/audit logs.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "mode", "flag": "mode", "type": "enum", "required": true, "enumValues": ["enabled", "disabled", "enterprise_contract"] }], "hasComplexInput": false, "help": "Set tenant product-learning mode to enabled, disabled, or enterprise_contract; the change is human-gated." },
|
|
58458
|
-
{ "id": "settings.sync_brief_scope.get", "namespace": "settings", "action": "sync_brief_scope.get", "title": "Get Sync Brief scope", "description": "Read the tenant's Sync Brief scope: company_wide (one weekly brief) or per_cluster (one brief per cluster).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read whether weekly Sync Briefs compile company-wide (one brief) or per cluster (one brief per cluster)." },
|
|
58459
|
-
{ "id": "settings.sync_brief_scope.update", "namespace": "settings", "action": "sync_brief_scope.update", "title": "Update Sync Brief scope", "description": "Set the tenant's Sync Brief scope (company_wide or per_cluster). Per_cluster falls back to company-wide when the tenant has no clusters.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "sync_brief_scope", "flag": "sync-brief-scope", "type": "enum", "required": true, "enumValues": ["company_wide", "per_cluster"] }], "hasComplexInput": false, "help": "Set Sync Brief scope to company_wide or per_cluster; per_cluster falls back to company-wide when no clusters exist." },
|
|
58460
|
-
{ "id": "settings.tool_policy.get", "namespace": "settings", "action": "tool_policy.get", "title": "Get tenant tool policy", "description": "Read the tenant tool-policy settings that govern capability-grant defaults and the AICOS auto-trust posture. Returns metadata only.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read tenant capability-grant defaults and the AICOS auto-trust posture. No secrets." },
|
|
58461
|
-
{ "id": "settings.tool_policy.update", "namespace": "settings", "action": "tool_policy.update", "title": "Update tenant tool policy", "description": "Set the tenant tool-policy defaults for capability grants and the AICOS auto-trust posture. Owner/admin only and human-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "mode", "flag": "mode", "type": "enum", "required": true, "enumValues": ["managed", "open"] }], "hasComplexInput": true, "help": "Update tenant capability-grant defaults and the AICOS auto-trust posture. Owner/admin only, human-gated, and event-audited." },
|
|
58462
|
-
{ "id": "settings.update", "namespace": "settings", "action": "update", "title": "Update tenant settings", "description": "Update tenant AI budget caps (soft/hard, USD). Budget changes are dangerous and gated.", "requiredScope": "tenant", "confirmation": "dangerous", "exposeOverMcp": true, "fields": [{ "name": "soft_cap_usd", "flag": "soft-cap-usd", "type": "string", "required": false }, { "name": "hard_cap_usd", "flag": "hard-cap-usd", "type": "string", "required": false }], "hasComplexInput": false, "help": "Update tenant AI budget caps; budget changes are dangerous and require human confirmation." },
|
|
58463
|
-
{ "id": "signal.bind", "namespace": "signal", "action": "bind", "title": "Bind a signal source (draft)", "description": "Persist a validated recipe + connection + cadence as an INERT draft binding for a measurable. Requires a valid preview_token from signal.preview of the same recipe. Never activates \u2014 a human signal.bind_confirm does that.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "integration_id", "flag": "integration-id", "type": "string", "required": true }, { "name": "cadence", "flag": "cadence", "type": "enum", "required": true, "enumValues": ["daily", "weekly", "monthly", "quarterly", "annual"] }, { "name": "host_allowlist", "flag": "host-allowlist", "type": "array", "required": true, "itemType": "string" }, { "name": "preview_token", "flag": "preview-token", "type": "string", "required": true }, { "name": "role", "flag": "role", "type": "enum", "required": false, "enumValues": ["informs", "drives_status"] }], "hasComplexInput": true, "help": "Persist a validated recipe as an inert draft binding; requires the preview_token from a preview of the same recipe." },
|
|
58464
|
-
{ "id": "signal.bind_confirm", "namespace": "signal", "action": "bind_confirm", "title": "Confirm and activate a signal binding", "description": "Human-only activation of a draft signal binding (draft \u2192 active). Agents can never self-activate \u2014 an agent caller produces a pending confirmation. A drives_status binding requires a second-anchor confirmation. Once active, the scheduled pull auto-fills the measurable.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "binding_id", "flag": "binding-id", "type": "string", "required": true }], "hasComplexInput": true, "help": "Human-only: activate a draft signal binding (draft -> active) so scheduled pulls begin; an agent that calls it produces a pending confirmation." },
|
|
58465
|
-
{ "id": "signal.confirm_reading", "namespace": "signal", "action": "confirm_reading", "title": "Confirm Signal reading", "description": "Confirm an unconfirmed reading. Humans confirm; agents cannot. Idempotent on an already-confirmed reading.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "reading_id", "flag": "reading-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Confirm an unconfirmed reading as human-verified; confirmation is a human act, not an agent one." },
|
|
58466
|
-
{ "id": "signal.correct_reading", "namespace": "signal", "action": "correct_reading", "title": "Correct Signal reading", "description": "Overwrite a reading for a period with a human-confirmed value. A manual correction is a human decision and is gated behind confirmation.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "period_start", "flag": "period-start", "type": "string", "required": true }, { "name": "value", "flag": "value", "type": "number", "required": true }], "hasComplexInput": false, "help": "Correct a reading only as a human; manual corrections that change confirmed data require confirmation." },
|
|
58467
|
-
{ "id": "signal.draft_first_readings", "namespace": "signal", "action": "draft_first_readings", "title": "Draft first readings from a connected source", "description": "Pull a measurable's connected source ONCE (read-only, SSRF-guarded) and land the value as a DRAFT reading for the current period, for a human to confirm. For a measurable that has a source but no confirmed reading yet. Never publishes a reading and never fabricates a value \u2014 a non-numeric or blocked pull drafts nothing.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Pull a measurable's connected source once (read-only, SSRF-guarded) and land the value as a DRAFT reading for the current period, for a human to confirm with signal.confirm_reading. For a measurable that has a source but no confirmed reading yet. Never publishes and never fabricates a value \u2014 a non-numeric or blocked pull drafts nothing.", "example": { "measurable_id": "01900001-0001-7001-8001-000000000001" } },
|
|
58468
|
-
{ "id": "signal.get", "namespace": "signal", "action": "get", "title": "Get Signal", "description": "Return a measurable definition with its full reading history (confirmed and unconfirmed).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Read a measurable's full reading history before confirming or correcting a value." },
|
|
58469
|
-
{ "id": "signal.import", "namespace": "signal", "action": "import", "title": "Import Signals from CSV", "description": "Bulk-import measurable definitions and their historical readings from a parsed scorecard export (e.g. a ninety CSV). Owners are seat names resolved to seats; readings are human-confirmed. Idempotent \u2014 re-import upserts by (measurable, period, cadence). Re-importing a measurable at a different cadence is rejected, not overwritten.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "dry_run", "flag": "dry-run", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Bulk-import measurables + historical readings from a parsed scorecard export (owners resolve to seats); idempotent, human-confirmed, re-import upserts by period." },
|
|
58470
|
-
{ "id": "signal.list", "namespace": "signal", "action": "list", "title": "List Signals", "description": "List measurable definitions with their latest reading and on/off-track state. Seat-scoped callers see only their own seat.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "List Signals to find measurable ids and current on/off-track state before recording or correcting readings." },
|
|
58471
|
-
{ "id": "signal.preview", "namespace": "signal", "action": "preview", "title": "Preview a signal source", "description": "Execute a candidate rest-for-signals recipe LIVE and read-only against an allowlisted HTTPS source, returning the extracted scalar and a short-lived preview_token required by signal.bind. Guarded (SSRF + restricted JSONPath); writes a signal_pull_log row. Never mutates.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "integration_id", "flag": "integration-id", "type": "string", "required": true }, { "name": "cadence", "flag": "cadence", "type": "enum", "required": true, "enumValues": ["daily", "weekly", "monthly", "quarterly", "annual"] }, { "name": "host_allowlist", "flag": "host-allowlist", "type": "array", "required": true, "itemType": "string" }], "hasComplexInput": true, "help": "Run a candidate recipe live but read-only against an allowlisted HTTPS source; returns the extracted value + a short-lived preview_token. Never mutates; the credential is resolved from the connection at execution." },
|
|
58472
|
-
{ "id": "signal.report", "namespace": "signal", "action": "report", "title": "Report a Signal reading", "description": "A per-seat Signal agent proposes one draft reading for one of its OWN seat's agent-sourced measurables (a judgment/transform pull \u2014 reading a number off a document, reconciling messy data, estimating progress). The reading lands unconfirmed; a human confirms it with signal.confirm_reading. Refuses any measurable not owned by the acting seat or whose source is not 'agent'.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "value", "flag": "value", "type": "number", "required": true }, { "name": "period_start", "flag": "period-start", "type": "string", "required": false }, { "name": "note", "flag": "note", "type": "string", "required": false }, { "name": "confidence", "flag": "confidence", "type": "enum", "required": false, "enumValues": ["low", "medium", "high"] }], "hasComplexInput": false, "help": "A per-seat Signal agent proposes one draft reading for its own seat's agent-sourced measurable (a judgment/transform pull). The reading lands unconfirmed; a human confirms it with signal.confirm_reading. Refuses non-agent-sourced or other-seat measurables.", "example": { "measurable_id": "01900001-0001-7001-8001-000000000001", "value": 42, "note": "Read off the Q3 close PDF, page 2 \u2014 42 reconciled invoices this week.", "confidence": "high" } },
|
|
58473
|
-
{ "id": "signup.provision_tenant", "namespace": "signup", "action": "provision_tenant", "title": "Create company", "description": "Provision a new company (tenant) for the authenticated CLI user with no web step.", "requiredScope": "user", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "company_name", "flag": "company-name", "type": "string", "required": true }], "hasComplexInput": false, "help": "Create the company headlessly when the CLI session has no tenant yet; it becomes the user's active tenant so the rest of setup runs with no web step." },
|
|
58474
|
-
{ "id": "skill.assign_to_seat", "namespace": "skill", "action": "assign_to_seat", "title": "Assign skill to seat", "description": "Propose or human-approve a published immutable skill version for a Seat after checking required and optional tool dependencies.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "slug", "flag": "slug", "type": "string", "required": false }, { "name": "skill_version_id", "flag": "skill-version-id", "type": "string", "required": false }, { "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["proposed", "approved"] }, { "name": "rationale", "flag": "rationale", "type": "string", "required": true }, { "name": "allow_blocked_proposal", "flag": "allow-blocked-proposal", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Propose or human-approve a published Skill for a Seat after dependency checks. Missing required tools block approval; optional tools are warnings only." },
|
|
58475
|
-
{ "id": "skill.assigned.list", "namespace": "skill", "action": "assigned.list", "title": "List assigned skills", "description": "List approved skill assignments for a Seat, including immutable version, dependency status, rationale, and approval time. Seat-scoped callers can only read their own assignments.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "List approved Skills assigned to a Seat before loading instructions into a run. A seat-scoped token can only read its own assigned Skills." },
|
|
58476
|
-
{ "id": "skill.catalog", "namespace": "skill", "action": "catalog", "title": "List ROST skill catalog", "description": "List ROST-maintained catalog skills the active tenant is entitled to see. Private source URLs are never returned.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "query", "flag": "query", "type": "string", "required": false }, { "name": "include_unentitled", "flag": "include-unentitled", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "List entitled ROST catalog Skills. Private catalog source locations stay server-side; agents install from ROST APIs, not private GitHub." },
|
|
58477
|
-
{ "id": "skill.check_dependencies", "namespace": "skill", "action": "check_dependencies", "title": "Check skill dependencies", "description": "Compare a skill version's required and optional tools against a Seat's active or draft Charter permission manifest. Returns ready, blocked, or warning plus suggested agent.configure_tools input; it does not grant permissions.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "skill_version_id", "flag": "skill-version-id", "type": "string", "required": false }, { "name": "slug", "flag": "slug", "type": "string", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Compare a Skill's required and optional tools with a Seat's signed Charter manifest. Missing tools must be connected through agent.configure_tools; the Skill never grants authority." },
|
|
58478
|
-
{ "id": "skill.create", "namespace": "skill", "action": "create", "title": "Create skill", "description": "Create a tenant skill draft or pending-review skill from a bounded SKILL.md package. Skills store reusable know-how only; they do not grant tools.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["draft", "pending_review"] }], "hasComplexInput": true, "help": "Create a draft Skill from a bounded SKILL.md package only when the procedure is reusable operating know-how, not authorization or one-off task context." },
|
|
58479
|
-
{ "id": "skill.enable_catalog", "namespace": "skill", "action": "enable_catalog", "title": "Enable ROST catalog skill", "description": "Human-gated enablement of an entitled ROST catalog skill into the tenant-owned Skills library, preserving catalog provenance and content hash.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "slug", "flag": "slug", "type": "string", "required": true }], "hasComplexInput": false, "help": "Enable an entitled ROST catalog Skill into the company library with human confirmation, preserving catalog provenance and immutable content hash." },
|
|
58480
|
-
{ "id": "skill.file.get", "namespace": "skill", "action": "file.get", "title": "Get skill file", "description": "Read stored skill package file content by slug and package path. The path is resolved only inside the stored package payload; it never reads the server filesystem.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "slug", "flag": "slug", "type": "string", "required": true }, { "name": "path", "flag": "path", "type": "string", "required": true }], "hasComplexInput": false, "help": "Read a stored Skill package file by package path only; use SKILL.md for full instructions and supporting files only when the descriptor says they are needed." },
|
|
58481
|
-
{ "id": "skill.get", "namespace": "skill", "action": "get", "title": "Get skill", "description": "Read one skill descriptor and latest stored version metadata. Seat-scoped callers can read only approved assigned published skills.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "slug", "flag": "slug", "type": "string", "required": true }], "hasComplexInput": false, "help": "Read a Skill descriptor and latest version metadata before deciding whether to reuse it, inspect its files, or create a new Skill." },
|
|
58482
|
-
{ "id": "skill.import_github", "namespace": "skill", "action": "import_github", "title": "Import GitHub skill", "description": "Import a public GitHub skill package into pending review or draft after bounded package validation.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "url", "flag": "url", "type": "string", "required": true }, { "name": "ref", "flag": "ref", "type": "string", "required": false }, { "name": "path", "flag": "path", "type": "string", "required": false }, { "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["draft", "pending_review"] }], "hasComplexInput": false, "help": "Import a public GitHub Skill package into draft or pending review after validation; imported Skills are untrusted until reviewed and published." },
|
|
58483
|
-
{ "id": "skill.import_upload", "namespace": "skill", "action": "import_upload", "title": "Import uploaded skill", "description": "Import a bounded text skill package into the tenant library as a draft or pending-review skill.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["draft", "pending_review"] }], "hasComplexInput": true, "help": "Import a bounded text Skill package; never include secrets, private one-off task context, or authority rules that belong in the Charter." },
|
|
58484
|
-
{ "id": "skill.install_local", "namespace": "skill", "action": "install_local", "title": "Install skill locally", "description": "Resolve an approved company skill or entitled ROST catalog skill for local CLI installation. The server returns package files; it never exposes private GitHub URLs or tokens.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "slug", "flag": "slug", "type": "string", "required": true }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "client", "flag": "client", "type": "enum", "required": true, "enumValues": ["claude-code", "codex", "cursor"] }, { "name": "version", "flag": "version", "type": "integer", "required": false }, { "name": "local_only", "flag": "local-only", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Resolve company or entitled ROST catalog Skill files for local CLI installation. The returned package comes from ROST APIs and never includes private GitHub tokens or URLs." },
|
|
58485
|
-
{ "id": "skill.list", "namespace": "skill", "action": "list", "title": "List skills", "description": "List tenant skills with application descriptors, dependency metadata, source status, latest version, and assigned Seat count. Seat-scoped callers see only approved assigned published skills.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["draft", "pending_review", "published", "archived"] }, { "name": "visibility", "flag": "visibility", "type": "enum", "required": false, "enumValues": ["private", "seat", "tenant"] }, { "name": "query", "flag": "query", "type": "string", "required": false }, { "name": "include_archived", "flag": "include-archived", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "List reusable Skills before creating or assigning new agent operating knowledge. Seat-scoped callers only see assigned, approved, published Skills." },
|
|
58486
|
-
{ "id": "skill.publish", "namespace": "skill", "action": "publish", "title": "Publish skill", "description": "Human-gated publication of a reviewed skill version. Published versions become immutable and can be assigned to Seats.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "slug", "flag": "slug", "type": "string", "required": false }, { "name": "skill_version_id", "flag": "skill-version-id", "type": "string", "required": false }, { "name": "allow_warnings", "flag": "allow-warnings", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Publish a reviewed Skill version only with human confirmation. Publishing makes the version immutable and assignable, but it still grants no tools." },
|
|
58487
|
-
{ "id": "skill.revoke_from_seat", "namespace": "skill", "action": "revoke_from_seat", "title": "Revoke skill from seat", "description": "Human-gated revocation of a Seat skill assignment. Revocation stops future skill use without deleting historical run activations.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "assignment_id", "flag": "assignment-id", "type": "string", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "slug", "flag": "slug", "type": "string", "required": false }, { "name": "skill_version_id", "flag": "skill-version-id", "type": "string", "required": false }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "Revoke future use of an assigned Skill with human confirmation while preserving historical run activation records." },
|
|
58488
|
-
{ "id": "skill.sync_local", "namespace": "skill", "action": "sync_local", "title": "Sync assigned skills locally", "description": "Resolve all approved published skills assigned to a Seat for local CLI installation. Revoked assignments are reported so the client can mark stale local copies.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "client", "flag": "client", "type": "enum", "required": true, "enumValues": ["claude-code", "codex", "cursor"] }], "hasComplexInput": false, "help": "Resolve all approved Skills assigned to a local agent Seat so the CLI can install or update unchanged-by-hash local copies." },
|
|
58489
|
-
{ "id": "skill.update_draft", "namespace": "skill", "action": "update_draft", "title": "Update skill draft", "description": "Replace or create the current unpublished draft version for an existing skill from a bounded SKILL.md package.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "slug", "flag": "slug", "type": "string", "required": true }, { "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["draft", "pending_review"] }], "hasComplexInput": true, "help": "Update the current unpublished Skill draft; published versions stay immutable, so durable corrections should become reviewed new versions." },
|
|
58490
|
-
{ "id": "software_factory.authority_profile.create", "namespace": "software_factory", "action": "authority_profile.create", "title": "Create a Forge authority profile", "description": "Define a Forge authority profile (a named seat capability preset). Owner-only; defaults to the read_only preset (conservative by default). Entitlement-gated.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": false }, { "name": "name", "flag": "name", "type": "string", "required": true }, { "name": "preset", "flag": "preset", "type": "enum", "required": false, "enumValues": ["read_only", "contributor", "maintainer", "deployer", "power_admin"] }, { "name": "is_default", "flag": "is-default", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Define a Forge authority profile (a named seat capability preset). Owner-only; defaults to read_only." },
|
|
58491
|
-
{ "id": "software_factory.authority_profile.list", "namespace": "software_factory", "action": "authority_profile.list", "title": "List Forge authority profiles", "description": "The tenant's Forge authority profiles (the seat capability presets, read-only by default). Entitlement-gated.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "List Forge authority profiles (seat capability presets, read-only by default). Read-only; requires the Forge add-on." },
|
|
58492
|
-
{ "id": "software_factory.authority.grant", "namespace": "software_factory", "action": "authority.grant", "title": "Grant Forge seat authority", "description": "Grant a seat a Forge authority profile on a project (seat \u2192 project \u2192 profile). Owner-only, human-gated (an agent caller routes to /approvals). Entitlement-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "authority_profile_id", "flag": "authority-profile-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Grant a seat a Forge authority profile on a project. Owner-only and human-gated; emits a durable authority-change event." },
|
|
58493
|
-
{ "id": "software_factory.authority.revoke", "namespace": "software_factory", "action": "authority.revoke", "title": "Revoke Forge seat authority", "description": "Revoke a Forge authority grant (teardown \u2014 ADR-0018 \xA76). Owner-only, human-gated. Entitlement-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "grant_id", "flag": "grant-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Revoke a Forge authority grant (teardown). Owner-only and human-gated." },
|
|
58494
|
-
{ "id": "software_factory.capacity.list", "namespace": "software_factory", "action": "capacity.list", "title": "List Forge runner capacity", "description": "The tenant's Forge runner capacity observations (OS, CPU, memory, active sessions, usage-limit telemetry). Advisory scheduling input only, never an authority input. Entitlement-gated.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "runner_id", "flag": "runner-id", "type": "string", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List Forge runner capacity observations (advisory scheduling input only, never an authority input). Read-only; requires the Forge add-on." },
|
|
58495
|
-
{ "id": "software_factory.config.list", "namespace": "software_factory", "action": "config.list", "title": "List Forge config", "description": "Active Forge config metadata for project environments. Plain config values may be returned; secret refs are represented only as has_secret_ref.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": false }, { "name": "environment", "flag": "environment", "type": "enum", "required": false, "enumValues": ["development", "preview", "production"] }], "hasComplexInput": false, "help": "List active Forge config entries. Plain config may be shown; secret refs are represented only as metadata." },
|
|
58496
|
-
{ "id": "software_factory.config.set", "namespace": "software_factory", "action": "config.set", "title": "Set Forge config", "description": "Create or rotate a Forge project config entry. Secret config stores only a vault ref pointer; raw values are never accepted for secret_ref entries.", "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": "key_name", "flag": "key-name", "type": "string", "required": true }, { "name": "value_kind", "flag": "value-kind", "type": "enum", "required": true, "enumValues": ["plain", "secret_ref"] }, { "name": "plain_value", "flag": "plain-value", "type": "string", "required": false }, { "name": "vault_ref", "flag": "vault-ref", "type": "string", "required": false }], "hasComplexInput": false, "help": "Set or rotate a Forge project config key. Secret entries store only vault refs and are human-gated." },
|
|
58497
|
-
{ "id": "software_factory.conformance.record_findings", "namespace": "software_factory", "action": "conformance.record_findings", "title": "Record Forge conformance findings", "description": "The plan-conformance reviewer records one or more findings against a build request; open findings route the request back to implementation. Recording is evidence, not a decision \u2014 accepting a gap is a separate human gate. Requires the Forge add-on.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "phase_run_id", "flag": "phase-run-id", "type": "string", "required": false }], "hasComplexInput": true, "help": "Record structured Forge plan-conformance findings as reviewer evidence. Open findings route the request back to implementation; accepting a gap remains a separate human gate." },
|
|
58498
|
-
{ "id": "software_factory.conformance.resolve_finding", "namespace": "software_factory", "action": "conformance.resolve_finding", "title": "Resolve Forge conformance finding", "description": "A Forge review seat marks one or more prior open conformance findings resolved after re-reviewing the changeset and verifying they are fixed. This is reviewer verification, not gap-acceptance (accepting a gap stays a separate human gate). A resolved finding stops routing the request back to implementation, letting the recycle loop converge. Requires the Forge add-on.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "finding_ids", "flag": "finding-ids", "type": "array", "required": true, "itemType": "string" }, { "name": "phase_run_id", "flag": "phase-run-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Resolve a prior open Forge conformance finding after re-reviewing the changeset and verifying it is fixed (reviewer verification, not human gap-acceptance). A resolved finding stops routing the request back to implementation, letting the recycle loop converge." },
|
|
58499
|
-
{ "id": "software_factory.developer_team.install", "namespace": "software_factory", "action": "developer_team.install", "title": "Install Forge Developer Team", "description": "Install AND activate the governed Forge Developer Team: 8 seats (1 human lead + 7 agents), first-party skills, authority presets, and a conservative token budget. Approving this ACTIVATES the 7 agents as live occupancies at a pr_only, observe-first posture: they open pull requests but never merge or deploy without a human (the Release Manager auto-merges only after a human raises the automation-mode ceiling). Entitlement-gated and human-confirmed.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "steward_seat_id", "flag": "steward-seat-id", "type": "string", "required": true }, { "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": false }, { "name": "assign_skills", "flag": "assign-skills", "type": "boolean", "required": false }, { "name": "acknowledge_autonomy_ceiling", "flag": "acknowledge-autonomy-ceiling", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Install the governed Forge Developer Team template with seats, draft Charters, skills, project authority grants, and audit records. Tenant-admin and human-gated; creates no live agent occupancy." },
|
|
58500
|
-
{ "id": "software_factory.developer_team.uninstall", "namespace": "software_factory", "action": "developer_team.uninstall", "title": "Uninstall Forge Developer Team", "description": "Tear down the governed Forge Developer Team (ADR-0018 \xA76): end the auto-staffed agent occupancies in a no-orphan-safe order, decommission the agents, and revoke the team's project authority and secret grants. The human Forge Lead seat is left intact; re-installing re-staffs the team. The entitlement-lapse variant runs the same teardown path without re-checking the Forge paywall. Owner-only and human-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "reason", "flag": "reason", "type": "string", "required": false }, { "name": "trigger", "flag": "trigger", "type": "enum", "required": false, "enumValues": ["manual", "entitlement_lapse"] }], "hasComplexInput": false, "help": "Tear down the Forge Developer Team (teardown \u2014 ADR-0018 \xA76): end the agent occupancies in a no-orphan-safe order, decommission the agents, and revoke the team's authority and secret grants. The human Forge Lead seat stays. Owner-only and human-gated; the entitlement-lapse variant runs the same teardown path." },
|
|
58501
|
-
{ "id": "software_factory.dispatch.serialize", "namespace": "software_factory", "action": "dispatch.serialize", "title": "Serialize a Forge dispatch collision", "description": "A human appends a tightening depends_on edge to serialize two colliding Forge tasks within one build request (advisory-driven; never auto-blocks). Records a human decision.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "before_task_key", "flag": "before-task-key", "type": "string", "required": true }, { "name": "after_task_key", "flag": "after-task-key", "type": "string", "required": true }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "A human appends a tightening depends_on edge to serialize two colliding Forge tasks within one build request (advisory-driven; never auto-blocks). Records a human decision." },
|
|
58502
|
-
{ "id": "software_factory.gate.decide", "namespace": "software_factory", "action": "gate.decide", "title": "Decide a Forge gate", "description": "A human approves or rejects a Forge gate. The resolver is recorded (never an agent \u2014 invariant #7); sensitive gates (security sign-off, merge/deploy, authority change, production deploy) also write a linked human decision.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "gate_id", "flag": "gate-id", "type": "string", "required": true }, { "name": "decision", "flag": "decision", "type": "enum", "required": true, "enumValues": ["approve", "reject"] }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "A human approves or rejects a Forge gate; an agent caller routes to /approvals and can never self-approve. Sensitive gates record a human decision." },
|
|
58503
|
-
{ "id": "software_factory.github.installation_token.create", "namespace": "software_factory", "action": "github.installation_token.create", "title": "Create a Forge GitHub installation token", "description": "Mint a short-lived GitHub App installation token for one bound repository after server-side policy evaluation. The token is returned once and never persisted.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "repository_id", "flag": "repository-id", "type": "integer", "required": true }, { "name": "requested_actions", "flag": "requested-actions", "type": "array", "required": true, "itemType": "string" }, { "name": "requested_automation_mode", "flag": "requested-automation-mode", "type": "enum", "required": false, "enumValues": ["plan_only", "pr_only", "merge_after_checks", "deploy_preview", "deploy_production"] }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Mint a short-lived GitHub App installation token for one bound repository after policy evaluation; token material is returned once and never stored." },
|
|
58504
|
-
{ "id": "software_factory.github.installation.bind", "namespace": "software_factory", "action": "github.installation.bind", "title": "Bind Forge GitHub repositories to projects", "description": "Bind already-connected GitHub repositories to Forge projects. Owner-only and human-gated; operates on repositories already verified and connected in this tenant, so no GitHub re-authorization is required. Available any time, add or re-map bindings.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "app_slug", "flag": "app-slug", "type": "string", "required": false }, { "name": "installation_id", "flag": "installation-id", "type": "integer", "required": true }], "hasComplexInput": true, "help": "Bind already-connected GitHub repositories to Forge projects from the Forge GitHub settings flow. Owner-only and human-gated; no GitHub re-authorization required." },
|
|
58505
|
-
{ "id": "software_factory.github.installation.connect", "namespace": "software_factory", "action": "github.installation.connect", "title": "Connect a Forge GitHub installation", "description": "Record a proven GitHub App installation and its verified repositories as connected (unbound) so they can be bound to Forge projects later. Owner-only and human-gated; starts from the authenticated Forge GitHub settings flow. Idempotent \u2014 re-connecting reconciles metadata and never unbinds an already-bound repository.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "app_slug", "flag": "app-slug", "type": "string", "required": false }, { "name": "installation_id", "flag": "installation-id", "type": "integer", "required": true }, { "name": "account_login", "flag": "account-login", "type": "string", "required": true }, { "name": "account_id", "flag": "account-id", "type": "integer", "required": true }, { "name": "account_type", "flag": "account-type", "type": "string", "required": true }], "hasComplexInput": true, "help": "Record a verified GitHub App installation and its repositories as connected (unbound) so they can be bound to Forge projects later. Owner-only and human-gated." },
|
|
58506
|
-
{ "id": "software_factory.github.installation.list", "namespace": "software_factory", "action": "github.installation.list", "title": "List Forge GitHub installations", "description": "Connected GitHub App installations and their repositories with bind state (connected or active) and the Forge project each bound repository maps to. Requires the Forge add-on.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "app_slug", "flag": "app-slug", "type": "string", "required": false }], "hasComplexInput": false, "help": "List connected GitHub App installations and each repository's bind state (connected or active) with the Forge project it maps to. Read-only." },
|
|
58507
|
-
{ "id": "software_factory.github.policy.upsert", "namespace": "software_factory", "action": "github.policy.upsert", "title": "Set a Forge GitHub automation policy", "description": "Set the server-side policy for GitHub actions and automation-mode ceilings. Owner-only and human-gated; production deploy remains human-gated. Raising the ceiling to a merge-capable mode (merge_after_checks or higher) first verifies the bound repository has required status checks configured \u2014 it refuses otherwise.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "authority_profile_id", "flag": "authority-profile-id", "type": "string", "required": false }, { "name": "automation_mode_ceiling", "flag": "automation-mode-ceiling", "type": "enum", "required": false, "enumValues": ["plan_only", "pr_only", "merge_after_checks", "deploy_preview", "deploy_production"] }, { "name": "allowed_actions", "flag": "allowed-actions", "type": "array", "required": true, "itemType": "string" }, { "name": "requires_human_for", "flag": "requires-human-for", "type": "array", "required": true, "itemType": "string" }, { "name": "max_risk", "flag": "max-risk", "type": "enum", "required": false, "enumValues": ["low", "medium", "high", "critical"] }], "hasComplexInput": false, "help": "Set Forge's server-side GitHub automation policy for actions, mode ceilings, and human-gated operations." },
|
|
58508
|
-
{ "id": "software_factory.github.repository.unbind", "namespace": "software_factory", "action": "github.repository.unbind", "title": "Unbind a Forge GitHub repository", "description": "Remove a GitHub repository's Forge project binding. By default the repository stays connected (unbound) and can be re-bound later; pass disconnect to remove it entirely. Owner-only and human-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "app_slug", "flag": "app-slug", "type": "string", "required": false }, { "name": "installation_id", "flag": "installation-id", "type": "integer", "required": true }, { "name": "repository_id", "flag": "repository-id", "type": "integer", "required": true }, { "name": "disconnect", "flag": "disconnect", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Remove a GitHub repository's Forge project binding; the repository stays connected for re-binding unless disconnect is set. Owner-only and human-gated." },
|
|
58509
|
-
{ "id": "software_factory.phase.advance", "namespace": "software_factory", "action": "phase.advance", "title": "Advance a Forge build request phase", "description": "Advance a build request to the next phase, enforcing the closed phase state machine server-side (an illegal transition is rejected). Entitlement-gated.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "to_phase", "flag": "to-phase", "type": "enum", "required": true, "enumValues": ["intake", "discovery_scoping", "plan_review", "implementation", "plan_conformance_review", "security_review", "qa_verification", "release_preview", "merge_or_deploy_gate", "closeout"] }, { "name": "owning_seat_id", "flag": "owning-seat-id", "type": "string", "required": false }, { "name": "note", "flag": "note", "type": "string", "required": false }], "hasComplexInput": false, "help": "Advance a build request to its next phase; the server enforces the closed phase state machine and rejects an illegal transition." },
|
|
58510
|
-
{ "id": "software_factory.plan.approve", "namespace": "software_factory", "action": "plan.approve", "title": "Approve a Forge plan", "description": "A human approves the current plan at the plan_review gate; records a human decision and advances the request to implementation. Owner-only and human-gated (invariant #7).", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "A human approves the current plan at the plan_review gate; records a human decision and advances the request to implementation. Owner-only and human-gated." },
|
|
58511
|
-
{ "id": "software_factory.plan.reject", "namespace": "software_factory", "action": "plan.reject", "title": "Reject a Forge plan", "description": "A human rejects the current plan at the plan_review gate; records a human decision (with a required rationale) and routes the request back to discovery/scoping for re-planning. Owner-only and human-gated (invariant #7).", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "rationale", "flag": "rationale", "type": "string", "required": true }], "hasComplexInput": false, "help": "A human rejects the current plan (with a required rationale) and routes the request back to discovery/scoping for re-planning. Owner-only and human-gated." },
|
|
58512
|
-
{ "id": "software_factory.project.create", "namespace": "software_factory", "action": "project.create", "title": "Create a Forge project", "description": "Create an active Forge software project before binding repositories or opening build requests. Tenant-admin, human-gated, and entitlement-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "name", "flag": "name", "type": "string", "required": true }, { "name": "slug", "flag": "slug", "type": "string", "required": false }, { "name": "base_branch", "flag": "base-branch", "type": "string", "required": false }, { "name": "repo_ref", "flag": "repo-ref", "type": "string", "required": false }], "hasComplexInput": false, "help": "Create an active Forge software project before binding repositories or opening build requests. Tenant-admin and human-gated; requires the Forge add-on." },
|
|
58513
|
-
{ "id": "software_factory.project.list", "namespace": "software_factory", "action": "project.list", "title": "List Forge projects", "description": "Active Forge software projects so a tenant can choose a project for build requests, GitHub repository bindings, and config. Entitlement-gated.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List active Forge software projects so a tenant can choose a project for build requests, GitHub repository bindings, and config. Read-only; requires the Forge add-on." },
|
|
58514
|
-
{ "id": "software_factory.request.answer_clarification", "namespace": "software_factory", "action": "request.answer_clarification", "title": "Answer Forge plan clarifications", "description": "Write structured human answers to a draft plan's clarifying questions and optionally mark it ready for plan review. This never widens authority or automation mode.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "mark_ready_for_plan_review", "flag": "mark-ready-for-plan-review", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Write structured human answers to a draft plan's clarifying questions and optionally mark it ready for plan review. Never widens authority or automation mode." },
|
|
58515
|
-
{ "id": "software_factory.request.cancel", "namespace": "software_factory", "action": "request.cancel", "title": "Cancel a Forge build request", "description": "Cancel a Forge build request and expire active runner work orders. This is terminal; use pause for reversible holds. 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": "Cancel a Forge build request, expire unstarted runner work, and terminalize active runner work. Terminal, tenant-admin, and human-gated." },
|
|
58516
|
-
{ "id": "software_factory.request.create", "namespace": "software_factory", "action": "request.create", "title": "Create a Forge build request", "description": "Open a governed Forge build request against a connected software project. Entitlement-gated (Forge add-on); the title is untrusted display text, never an instruction.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": false }, { "name": "project", "flag": "project", "type": "string", "required": false }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "source_channel", "flag": "source-channel", "type": "enum", "required": false, "enumValues": ["ui", "cli", "github_issue", "linear", "api"] }, { "name": "source_ref", "flag": "source-ref", "type": "string", "required": false }, { "name": "automation_mode", "flag": "automation-mode", "type": "enum", "required": false, "enumValues": ["plan_only", "pr_only", "merge_after_checks", "deploy_preview", "deploy_production"] }], "hasComplexInput": true, "help": "Open a governed Forge build request against a connected software project; the title is untrusted display text. Requires the Forge add-on." },
|
|
58517
|
-
{ "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." },
|
|
58518
|
-
{ "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." },
|
|
58519
|
-
{ "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." },
|
|
58520
|
-
{ "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." },
|
|
58521
|
-
{ "id": "software_factory.secret_request.list", "namespace": "software_factory", "action": "secret_request.list", "title": "List Forge secret requests", "description": "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." },
|
|
58522
|
-
{ "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." },
|
|
58523
|
-
{ "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." },
|
|
58524
|
-
{ "id": "software_factory.secret.revoke", "namespace": "software_factory", "action": "secret.revoke", "title": "Revoke a Forge secret grant", "description": "Revoke a Forge secret grant (teardown \u2014 a compromised seat's access can be cut immediately, ADR-0018 \xA76). Owner-only, human-gated. Entitlement-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "grant_id", "flag": "grant-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Revoke a Forge secret grant (teardown \u2014 cut a compromised seat's access immediately). Owner-only and human-gated." },
|
|
58525
|
-
{ "id": "software_factory.secret.use", "namespace": "software_factory", "action": "secret.use", "title": "Verify Forge secret broker access", "description": "Verify a scoped secret broker grant without returning or opening the raw value. Runtime vault access happens only in the runner-side broker helper; this command writes a redacted authorization log and creates a request task for missing grants.", "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": "operation", "flag": "operation", "type": "enum", "required": false, "enumValues": ["use", "vercel_env_sync", "test_execution"] }], "hasComplexInput": false, "help": "Verify scoped broker access without returning or opening the raw value; missing grants create or reuse a request task and all attempts write redacted access logs." },
|
|
58526
|
-
{ "id": "software_factory.vercel.connection.connect", "namespace": "software_factory", "action": "vercel.connection.connect", "title": "Connect a Forge Vercel account", "description": "Record a Vercel OAuth account/team connection. The access token is stored only as a vault ref; this command persists bounded account metadata. Owner-only and human-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "account_id", "flag": "account-id", "type": "string", "required": true }, { "name": "account_name", "flag": "account-name", "type": "string", "required": false }, { "name": "team_id", "flag": "team-id", "type": "string", "required": false }, { "name": "team_slug", "flag": "team-slug", "type": "string", "required": false }, { "name": "user_id", "flag": "user-id", "type": "string", "required": false }, { "name": "configuration_id", "flag": "configuration-id", "type": "string", "required": false }, { "name": "access_token_vault_ref", "flag": "access-token-vault-ref", "type": "string", "required": true }, { "name": "scopes", "flag": "scopes", "type": "array", "required": false, "itemType": "string" }], "hasComplexInput": false, "help": "Record a Vercel OAuth account/team connection from the Forge Vercel settings flow. Stores only a vault-ref pointer to the token. Owner-only and human-gated." },
|
|
58527
|
-
{ "id": "software_factory.vercel.deploy_preview", "namespace": "software_factory", "action": "vercel.deploy_preview", "title": "Create a Forge Vercel preview deployment", "description": "Create a Vercel preview deployment for a linked existing project after Forge authority, Vercel connection, and required secret/config grants are verified.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "commit_sha", "flag": "commit-sha", "type": "string", "required": true }, { "name": "git_ref", "flag": "git-ref", "type": "string", "required": true }, { "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": false }, { "name": "phase_run_id", "flag": "phase-run-id", "type": "string", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "required_secret_keys", "flag": "required-secret-keys", "type": "array", "required": false, "itemType": "string" }], "hasComplexInput": false, "help": "Create a Vercel preview deployment for a linked project after Forge authority, Vercel connection, and required secret/config grants are verified." },
|
|
58528
|
-
{ "id": "software_factory.vercel.project.link", "namespace": "software_factory", "action": "vercel.project.link", "title": "Link a Forge project to Vercel", "description": "Link a Forge project to an existing Vercel project. Greenfield Vercel project creation is intentionally out of scope and remains behind a future authority flag.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "vercel_connection_id", "flag": "vercel-connection-id", "type": "string", "required": true }, { "name": "vercel_project_id", "flag": "vercel-project-id", "type": "string", "required": true }, { "name": "vercel_project_name", "flag": "vercel-project-name", "type": "string", "required": true }, { "name": "framework", "flag": "framework", "type": "string", "required": false }, { "name": "root_directory", "flag": "root-directory", "type": "string", "required": false }, { "name": "production_branch", "flag": "production-branch", "type": "string", "required": false }], "hasComplexInput": true, "help": "Link an existing Vercel project to a Forge software project. Owner-only and human-gated; greenfield project creation remains a future explicit authority." },
|
|
58529
|
-
{ "id": "software_factory.vercel.project.list", "namespace": "software_factory", "action": "vercel.project.list", "title": "List Forge Vercel links", "description": "Vercel account/team connections and existing Vercel project links for this tenant. Token vault refs are never returned.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List Vercel account/team connections and linked Vercel projects. Read-only; no OAuth tokens or vault refs are returned." },
|
|
58530
|
-
{ "id": "staffing.assign", "namespace": "staffing", "action": "assign", "title": "Staff seat", "description": "Compatibility command for the DER-626 MCP staffing tool.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": true, "help": "Staff a seat only after the function, Charter, and human accountability are clear." },
|
|
58531
|
-
{ "id": "staffing.assign_agent_dry_run", "namespace": "staffing", "action": "assign_agent_dry_run", "title": "Assign dry-run agent to seat", "description": "Assign an agent occupancy while the agent remains in dry-run.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Start agent staffing with dry runs and a named human Steward." },
|
|
58532
|
-
{ "id": "staffing.assign_user", "namespace": "staffing", "action": "assign_user", "title": "Assign user to seat", "description": "Assign a human user occupancy to a seat.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "user_id", "flag": "user-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Assign humans to seats after the seat accountability is clear." },
|
|
58533
|
-
{ "id": "status.record", "namespace": "status", "action": "record", "title": "Record status", "description": "Record a status event and readings/goal status for the acting seat's Signals and goals.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": true, "help": "Record Signal readings and goal status only for measurables and goals the seat owns; agent readings stay unconfirmed." },
|
|
58534
|
-
{ "id": "sync.brief.compile", "namespace": "sync", "action": "brief.compile", "title": "Compile Sync Brief", "description": "Compile (or recompile) the weekly Sync Brief for the current period. Idempotent per (tenant, period, cluster): a second compile updates the existing brief.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "cluster_id", "flag": "cluster-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Compile the weekly Sync Brief; compiling is idempotent per period." },
|
|
58535
|
-
{ "id": "sync.brief.get", "namespace": "sync", "action": "brief.get", "title": "Get Sync Brief", "description": "Return a Sync Brief (a specific id, or the latest for the tenant) including its compiled agenda document.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "sync_brief_id", "flag": "sync-brief-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Read the latest or a specific Sync Brief and its agenda before running the meeting." },
|
|
58536
|
-
{ "id": "sync.item.assign", "namespace": "sync", "action": "item.assign", "title": "Assign Sync follow-up", "description": "Create a follow-up task (a seat commitment) from a Sync agenda item. The brief and owner seat must belong to the tenant.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "sync_brief_id", "flag": "sync-brief-id", "type": "string", "required": true }, { "name": "owner_seat_id", "flag": "owner-seat-id", "type": "string", "required": true }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "description", "flag": "description", "type": "string", "required": true }, { "name": "due_on", "flag": "due-on", "type": "string", "required": false }], "hasComplexInput": false, "help": "Create a follow-up task from a Sync agenda item so a seat owns the commitment." },
|
|
58537
|
-
{ "id": "sync.run.complete", "namespace": "sync", "action": "run.complete", "title": "Complete Sync run", "description": "Record that the weekly Sync meeting completed against a brief, capturing the decisions and tasks created since it compiled. Idempotent: a second completion does not write a duplicate event.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "sync_brief_id", "flag": "sync-brief-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Record that the Sync meeting completed; completion is idempotent per brief." },
|
|
58538
|
-
{ "id": "sync.run.start", "namespace": "sync", "action": "run.start", "title": "Start Sync run", "description": "Ensure a Sync Brief exists for the current period so the meeting can begin. Compiles the brief if needed (idempotent).", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "cluster_id", "flag": "cluster-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Ensure a Sync Brief exists for the current period so the weekly meeting can begin." },
|
|
58539
|
-
{ "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." },
|
|
58540
|
-
{ "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." },
|
|
58541
|
-
{ "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." },
|
|
58542
|
-
{ "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." },
|
|
58543
|
-
{ "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 }, { "name": "source_key", "flag": "source-key", "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" } },
|
|
58544
|
-
{ "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." },
|
|
58545
|
-
{ "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." },
|
|
58546
|
-
{ "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." },
|
|
58547
|
-
{ "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." },
|
|
58548
|
-
{ "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)." },
|
|
58549
|
-
{ "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." },
|
|
58550
|
-
{ "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." },
|
|
58551
|
-
{ "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." },
|
|
58552
|
-
{ "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." },
|
|
58553
|
-
{ "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." },
|
|
58554
|
-
{ "id": "tenant.rename", "namespace": "tenant", "action": "rename", "title": "Rename company", "description": "Rename the current tenant/company. The rename is human-gated and writes an audit event.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "company_name", "flag": "company-name", "type": "string", "required": true }], "hasComplexInput": false, "help": "Rename the current company; owner-only, human-gated, and audited as an event." },
|
|
58555
|
-
{ "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." },
|
|
58556
|
-
{ "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." },
|
|
58557
|
-
{ "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." },
|
|
58558
|
-
{ "id": "tool.catalog", "namespace": "tool", "action": "catalog", "title": "List tool catalog", "description": "List the discoverable tool catalog the agent builder reads \u2014 scope tier, credential requirement, access policy, and execution-boundary guidance per tool.", "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." },
|
|
58559
|
-
{ "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." },
|
|
58560
|
-
{ "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." },
|
|
58561
|
-
{ "id": "user.tenants", "namespace": "user", "action": "tenants", "title": "List tenants", "description": "List tenants accessible to the authenticated CLI user.", "requiredScope": "user", "confirmation": "none", "exposeOverMcp": false, "fields": [], "hasComplexInput": false, "help": "List available companies before choosing the tenant where setup work should happen." },
|
|
58562
|
-
{ "id": "user.use_tenant", "namespace": "user", "action": "use_tenant", "title": "Select tenant", "description": "Validate and return an active tenant selection for the authenticated CLI user.", "requiredScope": "user", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "tenant", "flag": "tenant", "type": "string", "required": true }], "hasComplexInput": false, "help": "Set the active tenant explicitly before running onboarding, graph, Charter, or staffing commands." },
|
|
58563
|
-
{ "id": "user.whoami", "namespace": "user", "action": "whoami", "title": "Who am I", "description": "Return the authenticated CLI user and accessible tenant roles.", "requiredScope": "user", "confirmation": "none", "exposeOverMcp": false, "fields": [], "hasComplexInput": false, "help": "Use session identity checks before making tenant-scoped recommendations or setup changes." },
|
|
58564
|
-
{ "id": "work_order.cancel", "namespace": "work_order", "action": "cancel", "title": "Cancel work order", "description": "Cancel a queued, claimed, or running work order. Already-terminal orders return a stable error.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "work_order_id", "flag": "work-order-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Cancel a queued, claimed, or running work order; this is a human-gated action." },
|
|
58565
|
-
{ "id": "work_order.enqueue", "namespace": "work_order", "action": "enqueue", "title": "Enqueue work order", "description": "Queue a work order for a live scheduled agent. Idempotent per (agent, scheduled time). task_id is cloud-lane only; a runner-lane agent rejects it.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "scheduled_for", "flag": "scheduled-for", "type": "string", "required": false }, { "name": "task_id", "flag": "task-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Queue a work order for a live scheduled agent; enqueue is idempotent per agent and scheduled time. task_id is cloud-lane only; a runner-lane agent rejects it (run task-linked runner work as an interactive agent turn)." },
|
|
58566
|
-
{ "id": "work_order.list", "namespace": "work_order", "action": "list", "title": "List work orders", "description": "List runner/cloud work orders for the tenant, optionally filtered by status, agent, or runner.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["queued", "claimed", "running", "done", "failed", "expired"] }, { "name": "agent_id", "flag": "agent-id", "type": "string", "required": false }, { "name": "runner_id", "flag": "runner-id", "type": "string", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Inspect queued, claimed, running, and expired work orders to understand runner activity." },
|
|
58567
|
-
{ "id": "work.list", "namespace": "work", "action": "list", "title": "List work records", "description": "List the acting seat's work-ledger records newest-first (keyset-paginated), filterable by verb, object kind/ref, outcome, or run. Superseded records are hidden unless include_superseded is set.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "verb", "flag": "verb", "type": "enum", "required": false, "enumValues": ["created", "updated", "removed", "sent", "received", "contacted", "replied", "offered", "accepted", "rejected", "assessed", "announced", "assigned", "invited", "flagged", "booked", "searched", "filed", "extracted", "escalated"] }, { "name": "outcome", "flag": "outcome", "type": "enum", "required": false, "enumValues": ["success", "warning", "error", "held"] }, { "name": "object_kind", "flag": "object-kind", "type": "string", "required": false }, { "name": "object_external_id", "flag": "object-external-id", "type": "string", "required": false }, { "name": "run_id", "flag": "run-id", "type": "string", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "include_superseded", "flag": "include-superseded", "type": "boolean", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }, { "name": "cursor", "flag": "cursor", "type": "string", "required": false }], "hasComplexInput": false, "help": "List the seat's work-ledger records newest-first with keyset pagination, filterable by verb, object, outcome, or run." },
|
|
58568
|
-
{ "id": "work.log", "namespace": "work", "action": "log", "title": "Log work", "description": "Write a lightweight activity breadcrumb event for the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "note", "flag": "note", "type": "string", "required": true }], "hasComplexInput": false, "help": "Log a lightweight work breadcrumb so the seat's activity is visible without durable side effects." },
|
|
58569
|
-
{ "id": "work.record", "namespace": "work", "action": "record", "title": "Record work", "description": "Append one or more structured business-activity records to the agent work ledger for the acting seat. Batch-accepting, append-only, secret-redacted, and idempotent on dedup_key. Corrections are superseding records.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": true, "help": "Append structured business-activity records (verb + entity refs + outcome + evidence) to the seat's work ledger, in a batch, right after each action succeeds." }
|
|
58570
|
-
];
|
|
58571
|
-
|
|
58572
59057
|
// src/generator/groups.ts
|
|
58573
59058
|
import { readFileSync as readFileSync2 } from "node:fs";
|
|
58574
59059
|
|
|
@@ -62454,7 +62939,7 @@ async function sweepStaleRunnerTempFiles(dir, options = {}) {
|
|
|
62454
62939
|
// src/runner-service.ts
|
|
62455
62940
|
import { execFile as execFileCallback2 } from "node:child_process";
|
|
62456
62941
|
import { realpathSync as realpathSync2 } from "node:fs";
|
|
62457
|
-
import { access, mkdir as mkdir4, readFile as
|
|
62942
|
+
import { access, mkdir as mkdir4, readFile as readFile6, readdir as readdir2, rm as rm4, writeFile as writeFile4 } from "node:fs/promises";
|
|
62458
62943
|
import { homedir as homedir4 } from "node:os";
|
|
62459
62944
|
import path7 from "node:path";
|
|
62460
62945
|
import { promisify as promisify2 } from "node:util";
|
|
@@ -62868,7 +63353,7 @@ async function inspectRunnerService(options) {
|
|
|
62868
63353
|
const paths = runnerServicePaths(options.homeDir, safeName);
|
|
62869
63354
|
const label = serviceLabel(safeName);
|
|
62870
63355
|
const installed = await fileExists(paths.launchAgentPath);
|
|
62871
|
-
const plist = installed ? await
|
|
63356
|
+
const plist = installed ? await readFile6(paths.launchAgentPath, "utf8").catch(() => null) : null;
|
|
62872
63357
|
const programArgs = plist ? extractProgramArguments(plist) : [];
|
|
62873
63358
|
const appUrl2 = plist ? extractPlistEnvironmentValue(plist, `${cliBrand.envPrefix}_APP_URL`) : null;
|
|
62874
63359
|
const urlPolicyEnv = extractPlistEnvironmentValue(plist ?? "", allowInsecureAppUrlEnv) === "1" ? "set" : "unset";
|
|
@@ -63136,7 +63621,7 @@ async function fileExists(file2) {
|
|
|
63136
63621
|
}
|
|
63137
63622
|
async function readTail(file2, maxBytes) {
|
|
63138
63623
|
try {
|
|
63139
|
-
const content = await
|
|
63624
|
+
const content = await readFile6(file2, "utf8");
|
|
63140
63625
|
return content.length > maxBytes ? content.slice(content.length - maxBytes) : content;
|
|
63141
63626
|
} catch {
|
|
63142
63627
|
return null;
|
|
@@ -63284,7 +63769,7 @@ function parseSemver2(value) {
|
|
|
63284
63769
|
import { execFile as execFileCallback5, spawn } from "node:child_process";
|
|
63285
63770
|
import { createHash as createHash4, randomUUID } from "node:crypto";
|
|
63286
63771
|
import { constants as fsConstants4 } from "node:fs";
|
|
63287
|
-
import { access as access3, chmod as chmod2, lstat as lstat2, mkdir as mkdir6, open as open2, readFile as
|
|
63772
|
+
import { access as access3, chmod as chmod2, lstat as lstat2, mkdir as mkdir6, open as open2, readFile as readFile8, rename as rename2, rm as rm6, statfs, writeFile as writeFile6 } from "node:fs/promises";
|
|
63288
63773
|
import { cpus, homedir as homedir5, hostname as hostname3, platform, totalmem, tmpdir as tmpdir2 } from "node:os";
|
|
63289
63774
|
import path10 from "node:path";
|
|
63290
63775
|
import { setTimeout as sleep3 } from "node:timers/promises";
|
|
@@ -63294,7 +63779,7 @@ import { promisify as promisify5 } from "node:util";
|
|
|
63294
63779
|
import { execFile as execFileCallback4 } from "node:child_process";
|
|
63295
63780
|
import { createHash as createHash3, randomBytes } from "node:crypto";
|
|
63296
63781
|
import { constants as fsConstants3 } from "node:fs";
|
|
63297
|
-
import { chmod, link, lstat, mkdir as mkdir5, mkdtemp, open, readdir as readdir3, readFile as
|
|
63782
|
+
import { chmod, link, lstat, mkdir as mkdir5, mkdtemp, open, readdir as readdir3, readFile as readFile7, realpath, rename, rm as rm5, stat as stat4, writeFile as writeFile5 } from "node:fs/promises";
|
|
63298
63783
|
import os3 from "node:os";
|
|
63299
63784
|
import path8 from "node:path";
|
|
63300
63785
|
import { setTimeout as sleep2 } from "node:timers/promises";
|
|
@@ -63406,7 +63891,7 @@ async function provisionIsolatedClaudeConfigDir(base, configDir, onRepair) {
|
|
|
63406
63891
|
const source = resolveSourceClaudeConfigDir(base);
|
|
63407
63892
|
for (const file2 of CLAUDE_CONFIG_AUTH_FILES) {
|
|
63408
63893
|
try {
|
|
63409
|
-
const data = await
|
|
63894
|
+
const data = await readFile7(path8.join(source, file2));
|
|
63410
63895
|
await writeFileAtomicNoFollow(path8.join(configDir, file2), data, { mode: 384 });
|
|
63411
63896
|
} catch {
|
|
63412
63897
|
}
|
|
@@ -63609,7 +64094,7 @@ trust_level = "untrusted"
|
|
|
63609
64094
|
await rm5(dest, { recursive: true, force: true });
|
|
63610
64095
|
}
|
|
63611
64096
|
const source = resolveSourceCodexHomeDir(base);
|
|
63612
|
-
const data = await
|
|
64097
|
+
const data = await readFile7(path8.join(source, CODEX_HOME_AUTH_FILE)).catch(() => null);
|
|
63613
64098
|
if (data === null) {
|
|
63614
64099
|
return homeDir;
|
|
63615
64100
|
}
|
|
@@ -63692,7 +64177,7 @@ async function acquireCodexHomeLock(homeDir, options = {}) {
|
|
|
63692
64177
|
ino = String((await handle.stat()).ino);
|
|
63693
64178
|
} catch (error51) {
|
|
63694
64179
|
await handle.close().catch(() => void 0);
|
|
63695
|
-
const stillOurs = await
|
|
64180
|
+
const stillOurs = await readFile7(lockPath, "utf8").then((raw) => JSON.parse(raw).nonce === nonce).catch(() => false);
|
|
63696
64181
|
if (stillOurs) {
|
|
63697
64182
|
await rm5(lockPath, { force: true }).catch(() => void 0);
|
|
63698
64183
|
}
|
|
@@ -63735,7 +64220,7 @@ async function breakCodexHomeLock(lockPath, expected) {
|
|
|
63735
64220
|
}
|
|
63736
64221
|
let raw;
|
|
63737
64222
|
try {
|
|
63738
|
-
raw = await
|
|
64223
|
+
raw = await readFile7(lockPath, "utf8");
|
|
63739
64224
|
} catch {
|
|
63740
64225
|
return;
|
|
63741
64226
|
}
|
|
@@ -63752,7 +64237,7 @@ async function judgeCodexHomeLock(lockPath, staleMs) {
|
|
|
63752
64237
|
}
|
|
63753
64238
|
let raw;
|
|
63754
64239
|
try {
|
|
63755
|
-
raw = await
|
|
64240
|
+
raw = await readFile7(lockPath, "utf8");
|
|
63756
64241
|
} catch (error51) {
|
|
63757
64242
|
if (error51.code === "ENOENT") {
|
|
63758
64243
|
return { stale: false, identity: null };
|
|
@@ -65315,7 +65800,7 @@ async function migrateOneLegacyCodexHome(legacyHome, newHome, io) {
|
|
|
65315
65800
|
}
|
|
65316
65801
|
async function loadState(filePath, expectedTenantId) {
|
|
65317
65802
|
try {
|
|
65318
|
-
const parsed = JSON.parse(await
|
|
65803
|
+
const parsed = JSON.parse(await readFile8(filePath, "utf8"));
|
|
65319
65804
|
if (typeof parsed.runner_id === "string" && typeof parsed.runner_secret === "string") {
|
|
65320
65805
|
if (expectedTenantId && parsed.tenant_id !== expectedTenantId) {
|
|
65321
65806
|
return null;
|
|
@@ -67113,7 +67598,7 @@ async function reconcileOrphanedInFlightWorkOrders(deps) {
|
|
|
67113
67598
|
const transcriptPath = await findClaudeTranscriptPath(entry.claude_config_dir, entry.claude_session_id);
|
|
67114
67599
|
if (transcriptPath) {
|
|
67115
67600
|
try {
|
|
67116
|
-
const content = await
|
|
67601
|
+
const content = await readFile8(transcriptPath, "utf8");
|
|
67117
67602
|
verdict = classifyClaudeTranscript(content);
|
|
67118
67603
|
} catch {
|
|
67119
67604
|
verdict = { kind: "missing" };
|
|
@@ -67512,7 +67997,7 @@ async function main(argv = process.argv.slice(2), options = {}) {
|
|
|
67512
67997
|
allowDevelopmentAppUrl: process.env[allowInsecureAppUrlEnv] === "1"
|
|
67513
67998
|
});
|
|
67514
67999
|
}
|
|
67515
|
-
if (command === "onboard" && (args[0] === "status" || args[0] === "resume" || args[0] === "rehearse")) {
|
|
68000
|
+
if (command === "onboard" && (args[0] === "status" || args[0] === "resume" || args[0] === "rehearse" || args[0] === "activate" || args[0] === "source-ingest" || args[0] === "setup" || args[0] === "setup-status")) {
|
|
67516
68001
|
let implCredential = null;
|
|
67517
68002
|
try {
|
|
67518
68003
|
implCredential = await createImplementationCredentialStore().read();
|
|
@@ -67523,6 +68008,7 @@ async function main(argv = process.argv.slice(2), options = {}) {
|
|
|
67523
68008
|
let invocation;
|
|
67524
68009
|
try {
|
|
67525
68010
|
invocation = parseOnboardingInvocation(args);
|
|
68011
|
+
await resolveOnboardingInvocationFiles(invocation);
|
|
67526
68012
|
} catch (error51) {
|
|
67527
68013
|
if (!(error51 instanceof OnboardingUsageError)) {
|
|
67528
68014
|
throw error51;
|
|
@@ -67538,15 +68024,51 @@ ${onboardingUsage()}
|
|
|
67538
68024
|
token: implCredential.token,
|
|
67539
68025
|
credentialKind: "implementation_bootstrap"
|
|
67540
68026
|
});
|
|
67541
|
-
|
|
67542
|
-
|
|
67543
|
-
|
|
68027
|
+
const exit = await executeOnboardingInvocation(invocation, io, implClient, {
|
|
68028
|
+
onError: (error51) => isDeadRunError(error51) ? "handled" : "print"
|
|
68029
|
+
});
|
|
68030
|
+
if (exit !== "fall-through") {
|
|
68031
|
+
return exit;
|
|
68032
|
+
}
|
|
68033
|
+
}
|
|
68034
|
+
}
|
|
68035
|
+
if (command === "seat" && args[0] === "create-complete") {
|
|
68036
|
+
let implCredential = null;
|
|
68037
|
+
try {
|
|
68038
|
+
implCredential = await createImplementationCredentialStore().read();
|
|
68039
|
+
} catch {
|
|
68040
|
+
implCredential = null;
|
|
68041
|
+
}
|
|
68042
|
+
if (implCredential) {
|
|
68043
|
+
const CommandClientCtor2 = options.commandClient ?? CommandClient;
|
|
68044
|
+
const implClient = new CommandClientCtor2({
|
|
68045
|
+
appUrl: config2.appUrl,
|
|
68046
|
+
token: implCredential.token,
|
|
68047
|
+
credentialKind: "implementation_bootstrap"
|
|
68048
|
+
});
|
|
68049
|
+
let deadRun = false;
|
|
68050
|
+
const exit = await runOperation("seat", args, {
|
|
68051
|
+
io,
|
|
68052
|
+
client: implClient,
|
|
68053
|
+
binName: cliBrand.binName,
|
|
68054
|
+
run: async (wrapperClient, commandId, body, format, runOptions) => {
|
|
68055
|
+
try {
|
|
68056
|
+
const result = await wrapperClient.execute(commandId, body, runOptions ?? {});
|
|
68057
|
+
const rendered = format ? format(result.output) : JSON.stringify(result.output, null, 2);
|
|
68058
|
+
io.stdout.write(`${rendered}
|
|
67544
68059
|
`);
|
|
67545
|
-
|
|
67546
|
-
|
|
67547
|
-
|
|
67548
|
-
|
|
68060
|
+
return 0;
|
|
68061
|
+
} catch (error51) {
|
|
68062
|
+
if (isDeadRunError(error51)) {
|
|
68063
|
+
deadRun = true;
|
|
68064
|
+
return 1;
|
|
68065
|
+
}
|
|
68066
|
+
return printCommandError3(io, error51);
|
|
68067
|
+
}
|
|
67549
68068
|
}
|
|
68069
|
+
});
|
|
68070
|
+
if (!deadRun) {
|
|
68071
|
+
return exit;
|
|
67550
68072
|
}
|
|
67551
68073
|
}
|
|
67552
68074
|
}
|
|
@@ -68046,6 +68568,10 @@ function printUsage(io) {
|
|
|
68046
68568
|
`${cliBrand.binName} onboard status`,
|
|
68047
68569
|
`${cliBrand.binName} onboard resume`,
|
|
68048
68570
|
`${cliBrand.binName} onboard run`,
|
|
68571
|
+
`${cliBrand.binName} onboard source-ingest --file <path> --source-key <key> --kind <kind> --title <title> [--json]`,
|
|
68572
|
+
`${cliBrand.binName} onboard setup --input '<json-plan>' | --input-file <path> [--json]`,
|
|
68573
|
+
`${cliBrand.binName} onboard setup-status --input '<json-plan>' | --input-file <path> [--json]`,
|
|
68574
|
+
`${cliBrand.binName} onboard rehearse|activate --setup-application-id <uuid> ... [--json]`,
|
|
68049
68575
|
`${cliBrand.binName} mcp install --client claude-code|codex|cursor --scope tenant-admin|seat [--seat-id <id>] [--expires-in <days>|--no-expiry]`,
|
|
68050
68576
|
`${cliBrand.binName} mcp install --client claude-code|codex|cursor --rotate <old-token-id> (inherits the old token's scope; no --scope)`,
|
|
68051
68577
|
`${cliBrand.binName} implementation access start|status|complete|abandon [--json]`,
|