@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/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: external_exports.object({
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 uuidSchema18 = external_exports.string().uuid();
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: uuidSchema18,
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: uuidSchema18,
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: uuidSchema18,
36675
- credential_id: uuidSchema18.nullable(),
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: uuidSchema18.nullable().optional(),
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: uuidSchema18,
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: uuidSchema18,
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: uuidSchema18,
36702
- new_parent_seat_id: uuidSchema18.nullable()
36856
+ seat_id: uuidSchema19,
36857
+ new_parent_seat_id: uuidSchema19.nullable()
36703
36858
  }).strict();
36704
36859
  var seatSetTypeInputSchema = external_exports.object({
36705
- seat_id: uuidSchema18,
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: uuidSchema18
36864
+ seat_id: uuidSchema19
36710
36865
  }).strict();
36711
36866
  var seatMutationOutputSchema = external_exports.object({
36712
- seat_id: uuidSchema18
36867
+ seat_id: uuidSchema19
36713
36868
  }).strict();
36714
36869
  var seatDecommissionPreviewOutputSchema = external_exports.object({
36715
- seat_id: uuidSchema18,
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(uuidSchema18),
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: uuidSchema18
36884
+ seat_id: uuidSchema19
36730
36885
  }).strict();
36731
36886
  var charterDraftOutputSchema = external_exports.object({
36732
- charter_version_id: uuidSchema18,
36733
- seat_id: uuidSchema18,
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: uuidSchema18,
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: uuidSchema18,
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: uuidSchema18,
36753
- seat_id: uuidSchema18,
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: uuidSchema18.optional(),
36758
- charter_version_id: uuidSchema18.optional(),
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: uuidSchema18
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: uuidSchema18
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: uuidSchema18,
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: uuidSchema18,
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: uuidSchema18.nullable(),
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: uuidSchema18,
36804
- owner_seat_id: uuidSchema18,
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: uuidSchema18.nullable(),
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: uuidSchema18
36990
+ charter_version_id: uuidSchema19
36836
36991
  }).strict();
36837
36992
  var charterPreviewSignalReconciliationOutputSchema = external_exports.object({
36838
- charter_version_id: uuidSchema18,
36839
- seat_id: uuidSchema18,
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(uuidSchema18),
37005
+ draft_ids: external_exports.array(uuidSchema19),
36851
37006
  skipped_seats: external_exports.array(external_exports.object({
36852
- seat_id: uuidSchema18,
37007
+ seat_id: uuidSchema19,
36853
37008
  reason: charterDraftSkipReasonSchema
36854
37009
  }).strict())
36855
37010
  });
36856
37011
  var charterSkipInputSchema = external_exports.object({
36857
- charter_version_id: uuidSchema18
37012
+ charter_version_id: uuidSchema19
36858
37013
  }).strict();
36859
37014
  var charterApplySeatTypeRecommendationInputSchema = external_exports.object({
36860
- charter_version_id: uuidSchema18
37015
+ charter_version_id: uuidSchema19
36861
37016
  }).strict();
36862
37017
  var charterSignManifestInputSchema = external_exports.object({
36863
- charter_version_id: uuidSchema18
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: uuidSchema18,
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: uuidSchema18.nullable(),
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: uuidSchema18
37094
+ confirmation_id: uuidSchema19
36940
37095
  }).strict();
36941
37096
  var confirmationDismissOutputSchema = external_exports.object({
36942
37097
  dismissed: external_exports.object({
36943
- id: uuidSchema18,
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(uuidSchema18)
37105
+ dismissed_ids: external_exports.array(uuidSchema19)
36951
37106
  }).strict();
36952
37107
  var credentialIngressInputSchema = external_exports.object({
36953
- seat_id: uuidSchema18.optional(),
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: uuidSchema18,
37115
+ credential_id: uuidSchema19,
36961
37116
  provider: external_exports.string().min(1),
36962
- seat_id: uuidSchema18.nullable()
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: uuidSchema18,
37121
+ credential_id: uuidSchema19,
36967
37122
  provider: external_exports.string(),
36968
37123
  scope_description: external_exports.string(),
36969
- seat_id: uuidSchema18.nullable(),
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: uuidSchema18,
36980
- charter_version_id: uuidSchema18
37134
+ seat_id: uuidSchema19,
37135
+ charter_version_id: uuidSchema19
36981
37136
  }).strict();
36982
37137
  var agentGoLiveOutputSchema = external_exports.object({
36983
- seat_id: uuidSchema18,
36984
- charter_version_id: uuidSchema18,
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: uuidSchema18.optional(),
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: uuidSchema18,
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: uuidSchema18,
37160
+ draft_id: uuidSchema19,
37006
37161
  doc: compassDraftSchema
37007
37162
  }).strict();
37008
37163
  var compassApproveVersionInputSchema = external_exports.object({
37009
- draft_id: uuidSchema18
37164
+ draft_id: uuidSchema19
37010
37165
  }).strict();
37011
37166
  var compassRejectDraftInputSchema = external_exports.object({
37012
- draft_id: uuidSchema18
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: uuidSchema18,
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: uuidSchema18 }).strict(),
37023
- external_exports.object({ type: external_exports.literal("agent"), agent_id: uuidSchema18 }).strict()
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: uuidSchema18,
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: uuidSchema18,
37032
- user_id: uuidSchema18
37186
+ seat_id: uuidSchema19,
37187
+ user_id: uuidSchema19
37033
37188
  }).strict();
37034
37189
  var staffingAssignAgentDryRunInputSchema = external_exports.object({
37035
- seat_id: uuidSchema18,
37036
- agent_id: uuidSchema18
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: uuidSchema18.optional(),
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: uuidSchema18,
37239
+ token_id: uuidSchema19,
37085
37240
  token: external_exports.string().min(1),
37086
37241
  scope: external_exports.enum(["tenant_admin", "seat"]),
37087
- seat_id: uuidSchema18.nullable()
37242
+ seat_id: uuidSchema19.nullable()
37088
37243
  }).strict();
37089
37244
  var mcpTokenRevokeInputSchema = external_exports.object({
37090
- token_id: uuidSchema18,
37091
- seat_id: uuidSchema18.optional()
37245
+ token_id: uuidSchema19,
37246
+ seat_id: uuidSchema19.optional()
37092
37247
  }).strict();
37093
37248
  var mcpTokenRevokeOutputSchema = external_exports.object({
37094
- token_id: uuidSchema18,
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 uuidSchema19 = external_exports.string().uuid();
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: uuidSchema19,
37202
- user_id: uuidSchema19.optional(),
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: uuidSchema19,
37212
- user_id: uuidSchema19.optional(),
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: uuidSchema19,
37222
- user_id: uuidSchema19.optional(),
37223
- seat_id: uuidSchema19.optional(),
37224
- run_id: uuidSchema19.optional(),
37225
- agent_turn_execution_id: uuidSchema19.optional(),
37226
- session_id: uuidSchema19.optional(),
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: uuidSchema19.nullable().optional(),
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: uuidSchema19,
37260
- user_id: uuidSchema19.optional(),
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: uuidSchema19,
37270
- user_id: uuidSchema19.optional(),
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: uuidSchema19.optional(),
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 uuidSchema20 = external_exports.string().uuid();
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: uuidSchema20,
37451
+ seat_id: uuidSchema21,
37297
37452
  name: external_exports.string(),
37298
37453
  seat_type: seatTypeSchema,
37299
37454
  status: seatStatusSchema,
37300
- parent_seat_id: uuidSchema20.nullable(),
37455
+ parent_seat_id: uuidSchema21.nullable(),
37301
37456
  is_root: external_exports.boolean(),
37302
- steward_seat_id: uuidSchema20.nullable(),
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: uuidSchema20,
37316
- child_seat_id: uuidSchema20
37470
+ parent_seat_id: uuidSchema21,
37471
+ child_seat_id: uuidSchema21
37317
37472
  }).strict();
37318
37473
  var graphGetOutputSchema = external_exports.object({
37319
- root_seat_id: uuidSchema20.nullable(),
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: uuidSchema20
37486
+ seat_id: uuidSchema21
37332
37487
  }).strict();
37333
37488
  var seatGetOutputSchema = external_exports.object({
37334
- seat_id: uuidSchema20,
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: uuidSchema20.nullable(),
37494
+ parent_seat_id: uuidSchema21.nullable(),
37340
37495
  steward_chain: external_exports.array(external_exports.object({
37341
- seat_id: uuidSchema20,
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: uuidSchema20,
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: uuidSchema20.nullable(),
37352
- draft_charter_version_id: uuidSchema20.nullable(),
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: uuidSchema20,
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: uuidSchema20,
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: uuidSchema20.optional(),
37533
+ seat_id: uuidSchema21.optional(),
37379
37534
  status: charterStatusSchema.optional()
37380
37535
  }).strict();
37381
37536
  var charterSummarySchema = external_exports.object({
37382
- charter_version_id: uuidSchema20,
37383
- seat_id: uuidSchema20,
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: uuidSchema20
37548
+ charter_version_id: uuidSchema21
37394
37549
  }).strict();
37395
37550
  var charterGetOutputSchema = external_exports.object({
37396
- charter_version_id: uuidSchema20,
37397
- seat_id: uuidSchema20,
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: uuidSchema20,
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: uuidSchema20,
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: uuidSchema20.nullable(),
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: uuidSchema20
37597
+ seat_id: uuidSchema21
37443
37598
  }).strict();
37444
37599
  var agentStatusOutputSchema = external_exports.object({
37445
- seat_id: uuidSchema20,
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: uuidSchema20.nullable(),
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: uuidSchema20.nullable(),
37615
+ charter_version_id: uuidSchema21.nullable(),
37461
37616
  steward_chain: external_exports.array(external_exports.object({
37462
- seat_id: uuidSchema20,
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: uuidSchema20.nullable(),
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: uuidSchema20,
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: uuidSchema20,
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: uuidSchema20,
37568
- seat_id: uuidSchema20,
37569
- agent_id: uuidSchema20,
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: uuidSchema20.nullable(),
37580
- agent_id: uuidSchema20.nullable(),
37581
- run_id: uuidSchema20.nullable(),
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: uuidSchema20,
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: uuidSchema20.nullable(),
37746
+ error_log_id: uuidSchema21.nullable(),
37592
37747
  source: external_exports.enum(["run", "llm", "tool", "mcp", "runner", "integration", "job", "web"]).nullable(),
37593
- seat_id: uuidSchema20.nullable(),
37594
- run_id: uuidSchema20.nullable(),
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: uuidSchema20,
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: uuidSchema20,
37649
- run_id: uuidSchema20,
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: uuidSchema20,
37657
- agent_id: uuidSchema20,
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: uuidSchema20.nullable(),
37675
- work_order_id: uuidSchema20.nullable(),
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: uuidSchema20,
37686
- skill_version_id: uuidSchema20,
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: uuidSchema20,
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: uuidSchema20,
37863
+ seat_id: uuidSchema21,
37709
37864
  run: seatRunDetailSchema
37710
37865
  }).strict();
37711
37866
  var agentListToolCallsInputSchema = external_exports.object({
37712
- seat_id: uuidSchema20,
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: uuidSchema20,
37719
- run_id: uuidSchema20.nullable(),
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: uuidSchema20,
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: uuidSchema20,
37734
- run_id: uuidSchema20
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: uuidSchema20,
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
- uuidSchema20,
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: uuidSchema20,
37785
- agent_id: uuidSchema20.nullable(),
37786
- run_id: uuidSchema20.nullable(),
37787
- task_id: uuidSchema20.nullable(),
37788
- work_order_id: uuidSchema20.nullable(),
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: uuidSchema20
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: uuidSchema20,
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: uuidSchema20.optional()
37977
+ seat_id: uuidSchema21.optional()
37823
37978
  }).strict();
37824
37979
  var mcpTokenMetadataSchema = external_exports.object({
37825
- token_id: uuidSchema20,
37980
+ token_id: uuidSchema21,
37826
37981
  scope: mcpScopeSchema,
37827
- seat_id: uuidSchema20.nullable(),
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: uuidSchema20.optional(),
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: uuidSchema20,
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: uuidSchema20.nullable(),
37854
- agent_id: uuidSchema20.nullable(),
37855
- run_id: uuidSchema20.nullable(),
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: uuidSchema20.nullable(),
38013
+ resolved_by: uuidSchema21.nullable(),
37859
38014
  resolution_reason: external_exports.string().nullable(),
37860
- linked_task_id: uuidSchema20.nullable(),
37861
- linked_issue_id: uuidSchema20.nullable(),
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: uuidSchema20.nullable(),
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: uuidSchema20,
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: uuidSchema20.optional(),
37875
- linked_issue_id: uuidSchema20.optional(),
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: uuidSchema20,
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: uuidSchema20,
37885
- new_error_log_id: uuidSchema20,
38039
+ error_log_id: uuidSchema21,
38040
+ new_error_log_id: uuidSchema21,
37886
38041
  reason: external_exports.string().trim().min(1),
37887
- linked_task_id: uuidSchema20.optional(),
37888
- linked_issue_id: uuidSchema20.optional(),
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: uuidSchema20,
37893
- superseded_by_id: uuidSchema20,
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: uuidSchema20,
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: uuidSchema20.nullable(),
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: uuidSchema20.nullable(),
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: uuidSchema20,
37925
- seat_id: uuidSchema20,
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: uuidSchema20,
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: uuidSchema20.nullable(),
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(uuidSchema20).min(1).max(200),
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: uuidSchema20,
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: uuidSchema20,
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(uuidSchema20),
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(uuidSchema20).min(1).max(200),
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: uuidSchema20,
38140
+ escalation_id: uuidSchema21,
37986
38141
  reason: external_exports.string()
37987
38142
  }).strict();
37988
38143
  var escalationBulkResolveFailedSchema = external_exports.object({
37989
- escalation_id: uuidSchema20,
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(uuidSchema20),
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(uuidSchema20).min(1).max(200),
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: uuidSchema20,
38161
+ issue_id: uuidSchema21,
38007
38162
  reason: external_exports.string()
38008
38163
  }).strict();
38009
38164
  var frictionBulkResolveFailedSchema = external_exports.object({
38010
- issue_id: uuidSchema20,
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(uuidSchema20),
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(uuidSchema20).min(1).max(200).optional()
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: uuidSchema20,
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 uuidSchema21 = external_exports.string().uuid();
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: uuidSchema21.optional(),
38153
- seat_ids: external_exports.array(uuidSchema21).min(1).optional()
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: uuidSchema21.nullable(),
38192
- goal_id: uuidSchema21.nullable(),
38193
- run_id: uuidSchema21.nullable(),
38194
- issue_id: uuidSchema21.nullable(),
38195
- task_id: uuidSchema21.nullable(),
38196
- error_log_id: uuidSchema21.nullable()
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(uuidSchema21),
38201
- included_seat_ids: external_exports.array(uuidSchema21),
38202
- requested_seat_id: uuidSchema21.nullable(),
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: uuidSchema21.optional()
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 uuidSchema22 = external_exports.string().uuid();
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: uuidSchema22,
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: uuidSchema22,
38301
- measurable_id: uuidSchema22,
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 uuidSchema23 = external_exports.string().uuid();
38487
+ var uuidSchema24 = external_exports.string().uuid();
38333
38488
  var signalDraftFirstReadingsInputSchema = external_exports.object({
38334
- measurable_id: uuidSchema23
38489
+ measurable_id: uuidSchema24
38335
38490
  }).strict();
38336
38491
  var signalDraftFirstReadingsOutputSchema = external_exports.object({
38337
- measurable_id: uuidSchema23,
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: uuidSchema23.optional(),
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 uuidSchema24 = external_exports.string().uuid();
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: uuidSchema24,
40067
- seat_id: uuidSchema24,
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: uuidSchema24,
40079
- seat_id: uuidSchema24.nullable(),
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: uuidSchema24,
40107
- owner_seat_id: uuidSchema24,
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: uuidSchema24,
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: uuidSchema24,
40121
- raised_by_seat_id: uuidSchema24,
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: uuidSchema24,
40293
+ goal_id: uuidSchema25,
40139
40294
  title: external_exports.string().min(1),
40140
- seat_id: uuidSchema24.nullable(),
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: uuidSchema24,
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: uuidSchema24,
40175
- seat_id: uuidSchema24,
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: uuidSchema24,
40343
+ id: uuidSchema25,
40189
40344
  name: external_exports.string().min(1)
40190
40345
  }).strict(),
40191
40346
  cluster: external_exports.object({
40192
- id: uuidSchema24,
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 uuidSchema25 = external_exports.string().uuid();
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: uuidSchema25,
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: uuidSchema25,
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: uuidSchema25.optional(),
40381
- broken_measurable_id: uuidSchema25.optional(),
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 uuidSchema26 = external_exports.string().uuid();
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: uuidSchema26,
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: uuidSchema26
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: uuidSchema26,
40426
- revoked_by: uuidSchema26
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: uuidSchema26,
40431
- user_id: uuidSchema26,
40432
- membership_id: uuidSchema26,
40433
- linked_seat_ids: external_exports.array(uuidSchema26)
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 uuidSchema27 = external_exports.string().uuid();
40653
+ var uuidSchema28 = external_exports.string().uuid();
40499
40654
  var taskListInputSchema = external_exports.object({}).strict();
40500
40655
  var operatingTaskSchema = external_exports.object({
40501
- id: uuidSchema27,
40656
+ id: uuidSchema28,
40502
40657
  title: external_exports.string(),
40503
40658
  description: external_exports.string().nullable(),
40504
- from_seat_id: uuidSchema27.nullable(),
40505
- goal_id: uuidSchema27.nullable(),
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: uuidSchema27
40669
+ id: uuidSchema28
40515
40670
  }).strict();
40516
40671
  var taskConfirmProposalInputSchema = external_exports.object({
40517
- id: uuidSchema27
40672
+ id: uuidSchema28
40518
40673
  }).strict();
40519
40674
  var taskMutationOutputSchema = external_exports.object({
40520
40675
  task: external_exports.object({
40521
- id: uuidSchema27,
40676
+ id: uuidSchema28,
40522
40677
  status: external_exports.string()
40523
40678
  }).strict()
40524
40679
  }).strict();
40525
40680
  var taskDeclineInputSchema = external_exports.object({
40526
- id: uuidSchema27,
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: uuidSchema27,
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: uuidSchema27,
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: uuidSchema27,
40543
- event_id: uuidSchema27,
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: uuidSchema27,
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: uuidSchema27,
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: uuidSchema27,
40561
- issue_id: uuidSchema27,
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: uuidSchema27,
40730
+ event_id: uuidSchema28,
40576
40731
  type: external_exports.literal("task")
40577
40732
  }).strict();
40578
40733
  var escalationRaiseOutputSchema = external_exports.object({
40579
- event_id: uuidSchema27,
40580
- escalation_id: uuidSchema27,
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 uuidSchema28 = external_exports.string().uuid();
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: uuidSchema28
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: uuidSchema28,
40656
- seat_id: uuidSchema28,
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: uuidSchema28,
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: uuidSchema28.nullable(),
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: uuidSchema28.nullable(),
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: uuidSchema28
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: uuidSchema28,
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: uuidSchema28,
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: uuidSchema28,
40868
+ escalation_id: uuidSchema29,
40714
40869
  status: escalationStatusSchema,
40715
- decision_id: uuidSchema28,
40716
- decided_by: uuidSchema28,
40717
- issue_id: uuidSchema28.nullable(),
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 uuidSchema29 = external_exports.string().uuid();
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: uuidSchema29,
40916
- seat_id: uuidSchema29,
41070
+ id: uuidSchema30,
41071
+ seat_id: uuidSchema30,
40917
41072
  seat_name: external_exports.string().nullable(),
40918
- agent_id: uuidSchema29.nullable(),
41073
+ agent_id: uuidSchema30.nullable(),
40919
41074
  // The source blocked attempt (audit link); null once the run is retention-purged.
40920
- run_id: uuidSchema29.nullable(),
41075
+ run_id: uuidSchema30.nullable(),
40921
41076
  // The runner the blocker lives on, for os_permission repairs ("Open on Runner").
40922
- runner_id: uuidSchema29.nullable(),
41077
+ runner_id: uuidSchema30.nullable(),
40923
41078
  // The linked continuation attempt, populated when a continuation is enqueued.
40924
- continuation_run_id: uuidSchema29.nullable(),
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: uuidSchema29.nullable(),
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: uuidSchema29.optional(),
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: uuidSchema29
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: uuidSchema29,
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: uuidSchema29,
41131
+ intervention_id: uuidSchema30,
40977
41132
  status: agentGrantInterventionStatusSchema,
40978
- continuation_run_id: uuidSchema29.nullable(),
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: uuidSchema29.nullable(),
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: uuidSchema29
41150
+ intervention_id: uuidSchema30
40996
41151
  }).strict();
40997
41152
  var agentGrantInterventionResumeOutputSchema = external_exports.object({
40998
- intervention_id: uuidSchema29,
41153
+ intervention_id: uuidSchema30,
40999
41154
  status: agentGrantInterventionStatusSchema,
41000
- continuation_run_id: uuidSchema29.nullable(),
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 uuidSchema30 = external_exports.string().uuid();
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: uuidSchema30
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: uuidSchema30,
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: uuidSchema30,
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: uuidSchema30,
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: uuidSchema30.nullable(),
41306
+ seat_id: uuidSchema31.nullable(),
41152
41307
  occurred_at: external_exports.string().datetime({ offset: true }),
41153
- goal_ancestry: external_exports.array(uuidSchema30),
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-29.3",
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
- 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. Only the later, separate \`onboarding.activate\` command may consume the exact terminal batch and unique per-agent evidence and stage the post-rehearsal activation decision.
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-29.1",
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. A successful staging response contains the pending confirmation id and exact approval URL. 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.
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 !== "rehearse") {
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
- setup_application_id: setupApplicationId,
57932
- expected_input_digest: expectedInputDigest,
57933
- expected_receipt_revision: expectedReceiptRevision,
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
- ` ${REHEARSE_USAGE}`
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 readFile5, readdir as readdir2, rm as rm4, writeFile as writeFile4 } from "node:fs/promises";
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 readFile5(paths.launchAgentPath, "utf8").catch(() => null) : null;
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 readFile5(file2, "utf8");
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 readFile7, rename as rename2, rm as rm6, statfs, writeFile as writeFile6 } from "node:fs/promises";
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 readFile6, realpath, rename, rm as rm5, stat as stat4, writeFile as writeFile5 } from "node:fs/promises";
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 readFile6(path8.join(source, file2));
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 readFile6(path8.join(source, CODEX_HOME_AUTH_FILE)).catch(() => null);
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 readFile6(lockPath, "utf8").then((raw) => JSON.parse(raw).nonce === nonce).catch(() => false);
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 readFile6(lockPath, "utf8");
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 readFile6(lockPath, "utf8");
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 readFile7(filePath, "utf8"));
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 readFile7(transcriptPath, "utf8");
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
- try {
67542
- const result = await implClient.execute(invocation.commandId, invocation.body);
67543
- io.stdout.write(`${invocation.json ? JSON.stringify(result.output, null, 2) : formatOnboardingOutput(invocation.action, result.output)}
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
- return 0;
67546
- } catch (error51) {
67547
- if (!isDeadRunError(error51)) {
67548
- return printCommandError3(io, error51);
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]`,