@rosthq/cli 0.7.66 → 0.7.68

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.
@@ -1 +1 @@
1
- {"version":3,"file":"command-manifest.d.ts","sourceRoot":"","sources":["../../src/generated/command-manifest.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,eAAO,MAAM,gBAAgB,EAAE,SAAS,oBAAoB,EAyO3D,CAAC"}
1
+ {"version":3,"file":"command-manifest.d.ts","sourceRoot":"","sources":["../../src/generated/command-manifest.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,eAAO,MAAM,gBAAgB,EAAE,SAAS,oBAAoB,EA0O3D,CAAC"}
package/dist/index.js CHANGED
@@ -40844,14 +40844,19 @@ var goalListAtRiskOutputSchema = external_exports.object({
40844
40844
  }).strict();
40845
40845
  var goalSignalStateSchema = external_exports.enum(["ok", "risk", "crit", "pending"]);
40846
40846
  var goalStatusSourceSchema = external_exports.enum(["human", "agent", "rollup", "signal"]);
40847
+ var goalMeasurableRoleSchema = external_exports.enum(["drives_status", "informs"]);
40847
40848
  var goalBindMeasurableInputSchema = external_exports.object({
40848
40849
  goal_id: uuidSchema8,
40849
- measurable_id: uuidSchema8
40850
+ measurable_id: uuidSchema8,
40851
+ // DER-1643: new operator bindings default to the conservative 'informs' role.
40852
+ // 'drives_status' is the deliberate leaf-only status driver (childless goal only,
40853
+ // one per goal) and stays human-confirmed.
40854
+ role: goalMeasurableRoleSchema.default("informs")
40850
40855
  }).strict();
40851
40856
  var goalBindMeasurableOutputSchema = external_exports.object({
40852
40857
  goal_id: uuidSchema8,
40853
40858
  measurable_id: uuidSchema8,
40854
- role: external_exports.literal("drives_status"),
40859
+ role: goalMeasurableRoleSchema,
40855
40860
  // Per-binding steward opt-in; a fresh binding is always created OFF.
40856
40861
  auto_status_enabled: external_exports.boolean(),
40857
40862
  // The current signal indicator + the status it would compute (surfaced even
@@ -40860,11 +40865,17 @@ var goalBindMeasurableOutputSchema = external_exports.object({
40860
40865
  computed_status: goalStatusSchema.nullable(),
40861
40866
  // True when a human status pin currently diverges from what the signal computes
40862
40867
  // ("computed says X / you pinned Y").
40863
- pinned_divergence: external_exports.boolean()
40868
+ pinned_divergence: external_exports.boolean(),
40869
+ // DER-1633: false for a fresh binding; true when this exact (goal, Signal) pair was
40870
+ // already bound — the command is an idempotent no-op (no new event, no duplicate
40871
+ // confirmation). Lets a caller distinguish "just bound" from "already bound".
40872
+ already_bound: external_exports.boolean()
40864
40873
  }).strict();
40865
40874
  var goalUnbindMeasurableInputSchema = external_exports.object({
40866
40875
  goal_id: uuidSchema8,
40867
- measurable_id: uuidSchema8
40876
+ measurable_id: uuidSchema8,
40877
+ // Which binding to remove; defaults to the status driver (the historical unbind).
40878
+ role: goalMeasurableRoleSchema.default("drives_status")
40868
40879
  }).strict();
40869
40880
  var goalUnbindMeasurableOutputSchema = external_exports.object({
40870
40881
  goal_id: uuidSchema8,
@@ -40887,6 +40898,27 @@ var goalSetAutoStatusOutputSchema = external_exports.object({
40887
40898
  status_source: goalStatusSourceSchema,
40888
40899
  applied_from_signal: external_exports.boolean()
40889
40900
  }).strict();
40901
+ var goalMeasurableBindingSchema = external_exports.object({
40902
+ measurable_id: uuidSchema8,
40903
+ name: external_exports.string(),
40904
+ unit: external_exports.string(),
40905
+ role: external_exports.literal("drives_status"),
40906
+ auto_status_enabled: external_exports.boolean(),
40907
+ // Current signal indicator + the status it would compute from the latest CONFIRMED
40908
+ // reading (null while awaiting a confirmed reading).
40909
+ signal_state: goalSignalStateSchema,
40910
+ computed_status: goalStatusSchema.nullable(),
40911
+ // The latest confirmed reading's value (null while awaiting one) — enough to render
40912
+ // "measured by <Signal>: <value> <unit>" instead of a bare "Not measured".
40913
+ last_reading_value: external_exports.number().nullable()
40914
+ }).strict();
40915
+ var goalListMeasurablesInputSchema = external_exports.object({
40916
+ goal_id: uuidSchema8
40917
+ }).strict();
40918
+ var goalListMeasurablesOutputSchema = external_exports.object({
40919
+ goal_id: uuidSchema8,
40920
+ bindings: external_exports.array(goalMeasurableBindingSchema)
40921
+ }).strict();
40890
40922
  var issueStatusSchema = external_exports.enum(["open", "diagnosing", "resolved", "dropped"]);
40891
40923
  var frictionListInputSchema = external_exports.object({
40892
40924
  status: external_exports.enum(["open", "diagnosing", "resolved", "dropped", "active", "all"]).optional()
@@ -42297,7 +42329,7 @@ var fleetDigestAgentSchema = fleetOverviewRowSchema.extend({
42297
42329
  spend_7d_usd: external_exports.string(),
42298
42330
  spend_30d_usd: external_exports.string(),
42299
42331
  cost_drift_percent: external_exports.number().int().nullable(),
42300
- health_status: external_exports.enum(["needs_review", "stale", "setup_gap", "awaiting_data", "healthy"]),
42332
+ health_status: external_exports.enum(["needs_review", "stale", "setup_gap", "awaiting_data", "awaiting_data_overdue", "healthy"]),
42301
42333
  health_reasons: external_exports.array(external_exports.string()),
42302
42334
  recent_failed_runs: external_exports.array(fleetDigestRunSchema),
42303
42335
  unresolved_errors: external_exports.array(fleetDigestErrorSchema),
@@ -44426,7 +44458,8 @@ var syncBriefExceptionSchema = external_exports.object({
44426
44458
  latest_value: external_exports.number().nullable(),
44427
44459
  target: external_exports.number(),
44428
44460
  unit: external_exports.string(),
44429
- period_start: dateSchema.nullable()
44461
+ period_start: dateSchema.nullable(),
44462
+ freshness: external_exports.enum(["fresh", "due", "stale", "awaiting_first_reading", "not_expected"]).optional()
44430
44463
  }).strict();
44431
44464
  var syncBriefGoalDeltaSchema = external_exports.object({
44432
44465
  goal_id: uuidSchema15,
@@ -44704,10 +44737,20 @@ var statusRecordOutputSchema = external_exports.object({
44704
44737
  event_id: uuidSchema17,
44705
44738
  type: external_exports.literal("status")
44706
44739
  }).strict();
44740
+ var duplicateFrictionCandidateSchema = external_exports.object({
44741
+ issue_id: uuidSchema17,
44742
+ summary: external_exports.string().min(1),
44743
+ // pg_trgm similarity in [0, 1]; higher is more similar.
44744
+ similarity: external_exports.number().min(0).max(1)
44745
+ }).strict();
44707
44746
  var frictionFileIssueOutputSchema = external_exports.object({
44708
44747
  event_id: uuidSchema17,
44709
44748
  issue_id: uuidSchema17,
44710
- type: external_exports.literal("issue")
44749
+ type: external_exports.literal("issue"),
44750
+ // DER-1522: likely-duplicate candidates detected before creation. Recommend,
44751
+ // never block — filing always proceeds; empty when nothing crossed the
44752
+ // conservative threshold (or the actor is not an agent).
44753
+ duplicate_candidates: external_exports.array(duplicateFrictionCandidateSchema).default([])
44711
44754
  }).strict();
44712
44755
  var workLogInputSchema = external_exports.object({
44713
44756
  note: external_exports.string().min(1)
@@ -46218,7 +46261,7 @@ External connectors are being rolled out provider by provider, conservatively (r
46218
46261
  order: 48,
46219
46262
  title: "CLI and MCP installation guide",
46220
46263
  summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
46221
- version: "2026-07-11.1",
46264
+ version: "2026-07-12.2",
46222
46265
  public: true,
46223
46266
  audiences: ["human", "cli", "mcp", "in_app_agent"],
46224
46267
  stages: ["company_setup", "staffing"],
@@ -46891,12 +46934,13 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
46891
46934
  | \`rost_import_rocks_from_a_ninety_rocks_export\` | \`cascade.import\` | Bulk-import Rocks as Cascade cycle goals under a company objective in the active cycle (from a ninety Rocks export). Owners resolve to seats; idempotent re-import skips a cycle goal already imported for the same objective + seat + title. | Tenant | Call with the parsed \`rocks\` array. |
46892
46935
  | \`rost_import_a_ninety_v_to_into_a_compass_draft\` | \`compass.import\` | AI-draft a Compass from a ninety V/TO (Core Values \u2192 principles, 10/3/1-Year \u2192 horizon goals, Rocks \u2192 cycle objectives), landed as a draft a human confirms by supersession \u2014 never an accepted Compass. Idempotent by document content (a re-upload of the same V/TO short-circuits without re-drafting). | Tenant | Call with the extracted V/TO \`text\` (and optional \`source_name\`). |
46893
46936
  | \`rost_list_cascade_goals\` | \`goal.list\` | List Cascade goals, optionally by cycle or seat. | Seat or tenant-admin | Call with \`{}\` or \`{"cycle_id":"<id>"}\`. |
46937
+ | \`rost_list_a_cascade_goals_signals\` | \`goal.list_measurables\` | List the goal's status-driving Signal binding (role drives_status; 0-or-1 per goal) with its current indicator and latest confirmed reading. Driver-only \u2014 informs bindings (direct indicators) are not returned. Read-only. | Seat or tenant-admin | Call with \`{"goal_id":"<id>"}\`. |
46894
46938
  | \`rost_create_cascade_goal\` | \`goal.create\` | Create a cycle goal under an objective. | Tenant | Call with cycle, seat, parent, title, definition of done. |
46895
46939
  | \`rost_update_cascade_goal\` | \`goal.update\` | Update a goal's title or definition of done. | Tenant | Call with \`goal_id\` and the changed fields. |
46896
46940
  | \`rost_set_cascade_goal_status\` | \`goal.set_status\` | Set a goal's status (on/off/done). | Seat or tenant-admin | Seats may set only their own goals. |
46897
46941
  | \`rost_set_cascade_goal_progress\` | \`goal.set_progress\` | Report a goal's quantified progress (0-100). An agent's progress is a proposal a human approves before the goal moves. | Seat or tenant-admin | Seats set only their own goals; expect confirmation. |
46898
- | \`rost_bind_a_signal_to_a_cascade_goal\` | \`goal.bind_measurable\` | Bind a measurable to a childless leaf goal so a confirmed reading can drive its status (drives_status). Rejected on a company objective or a goal with children. Human-gated. | Seat or tenant-admin | Call with \`{"goal_id":"<id>","measurable_id":"<id>"}\`; expect confirmation. |
46899
- | \`rost_unbind_a_signal_from_a_cascade_goal\` | \`goal.unbind_measurable\` | Remove a goal\u2194measurable binding. | Seat or tenant-admin | Call with \`{"goal_id":"<id>","measurable_id":"<id>"}\`. |
46942
+ | \`rost_bind_a_signal_to_a_cascade_goal\` | \`goal.bind_measurable\` | Bind a measurable to a goal. Defaults to role \`informs\` \u2014 a conservative indicator allowed at any goal level (many per goal) that never changes status. Pass role \`drives_status\` to make it the goal's status driver (childless leaf only, one per goal). Human-gated. | Seat or tenant-admin | Call with \`{"goal_id":"<id>","measurable_id":"<id>"}\` (add \`"role":"drives_status"\` for the driver); expect confirmation. |
46943
+ | \`rost_unbind_a_signal_from_a_cascade_goal\` | \`goal.unbind_measurable\` | Remove a goal\u2194measurable binding (role defaults to \`drives_status\`; pass \`"role":"informs"\` to remove an indicator). | Seat or tenant-admin | Call with \`{"goal_id":"<id>","measurable_id":"<id>"}\`. |
46900
46944
  | \`rost_toggle_signal_driven_auto_status\` | \`goal.set_auto_status\` | Per-goal steward opt-in (default OFF) that lets the bound measurable's latest confirmed reading compute the goal's status. Enabling applies the current signal immediately. Human-gated. | Seat or tenant-admin | Call with \`{"goal_id":"<id>","enabled":true}\`; expect confirmation. |
46901
46945
  | \`rost_list_at_risk_cascade_goals\` | \`goal.list_at_risk\` | List goals projected off pace (at-risk or projected-miss) with days behind pace. Read-only; status-only goals excluded. | Tenant | Call with \`{}\`. |
46902
46946
  | \`rost_reparent_cascade_goal\` | \`goal.reparent\` | Move a goal under a new parent. | Tenant | Authority change; expect confirmation. |
@@ -47463,7 +47507,7 @@ Retrieve the narrowest relevant guide before making a setup recommendation. Pref
47463
47507
  order: 60,
47464
47508
  title: "Cascade guide",
47465
47509
  summary: "How to connect company goals to seat-level work without turning {{brand}} into a project-management tool.",
47466
- version: "2026-07-04.2",
47510
+ version: "2026-07-12.1",
47467
47511
  public: true,
47468
47512
  audiences: ["human", "cli", "mcp", "in_app_agent"],
47469
47513
  stages: ["operating_rhythm"],
@@ -47541,9 +47585,9 @@ On human and function seat pages, goal visibility includes both direct goals and
47541
47585
 
47542
47586
  ## Drive a goal's status from a Signal
47543
47587
 
47544
- A leaf goal's status can be computed from a bound measurable instead of set by hand. Bind a Signal with \`goal.bind_measurable\` (the goal must be a childless seat goal or milestone \u2014 a company objective or a goal with children rolls up from its children, so binding one is rejected). A goal can have at most one driving Signal.
47588
+ A Signal can be linked to a goal for visibility, or set to compute its status. Bind a Signal with \`goal.bind_measurable\`. By default the binding is **informative** (role \`informs\`): it appears as a direct indicator on the goal, is allowed at any level (company objective, parent, or leaf), can be one of many on the same goal, and never changes the goal's status. To let a Signal **drive** a leaf goal's status instead, bind it with \`--role drives_status\` (the goal must be a childless seat goal or milestone \u2014 a company objective or a goal with children rolls up from its children, so a driver there is rejected). A goal can have at most one driving Signal, and choosing a driver is a deliberate, human-gated act.
47545
47589
 
47546
- Binding starts as an indicator only: nothing changes until a steward opts in with \`goal.set_auto_status --enabled true\`. Once opted in, the goal's status is computed from the measurable's latest confirmed reading against its target and direction \u2014 on target reads on-track, below target reads off-track. Only confirmed readings drive status; an agent's draft reading never auto-flips a goal. A human who sets the status by hand pins it, and that pin wins over the computed value until they change it or re-run \`goal.set_auto_status\`. Remove a binding with \`goal.unbind_measurable\`; the goal keeps its last status. Until a binding is opted in, an off-track Signal never raises an at-risk alert on its own.
47590
+ A \`drives_status\` binding starts as an indicator only: nothing changes until a steward opts in with \`goal.set_auto_status --enabled true\`. Once opted in, the goal's status is computed from the measurable's latest confirmed reading against its target and direction \u2014 on target reads on-track, below target reads off-track. Only confirmed readings drive status; an agent's draft reading never auto-flips a goal. A human who sets the status by hand pins it, and that pin wins over the computed value until they change it or re-run \`goal.set_auto_status\`. Remove a binding with \`goal.unbind_measurable\`; the goal keeps its last status. Until a binding is opted in, an off-track Signal never raises an at-risk alert on its own.
47547
47591
 
47548
47592
  ## What does not belong
47549
47593
 
@@ -50146,16 +50190,17 @@ var COMMAND_MANIFEST = [
50146
50190
  { "id": "friction.list", "namespace": "friction", "action": "list", "title": "List Friction issues", "description": "List Friction issues 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." },
50147
50191
  { "id": "friction.resolve", "namespace": "friction", "action": "resolve", "title": "Resolve Friction issue", "description": "Resolve an issue with a root cause and remediation task. This records a human decision (decided_by) and creates the follow-up task in one transaction.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }, { "name": "root_cause", "flag": "root-cause", "type": "string", "required": true }, { "name": "owner_seat_id", "flag": "owner-seat-id", "type": "string", "required": true }, { "name": "task_title", "flag": "task-title", "type": "string", "required": true }, { "name": "task_description", "flag": "task-description", "type": "string", "required": true }, { "name": "done_by", "flag": "done-by", "type": "string", "required": true }, { "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." },
50148
50192
  { "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." },
50149
- { "id": "goal.bind_measurable", "namespace": "goal", "action": "bind_measurable", "title": "Bind a Signal to a Cascade goal", "description": "Bind a measurable to a goal as its status driver (role drives_status). Rejects a company objective or a goal with child goals (rollup is authoritative there). Auto-status starts OFF \u2014 the binding is a signal indicator until a steward opts in with goal.set_auto_status. 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 }], "hasComplexInput": false, "help": "Bind a Signal to a childless leaf goal so its status can be computed from a real number; rejects a company objective or a goal with children. Auto-status starts OFF (indicator only) until a steward opts in." },
50193
+ { "id": "goal.bind_measurable", "namespace": "goal", "action": "bind_measurable", "title": "Bind a Signal to a Cascade goal", "description": "Bind a measurable to a goal. 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, and auto-status starts OFF until a steward opts in with goal.set_auto_status. 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"] }], "hasComplexInput": false, "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 to make it a childless leaf goal's status driver (auto-status starts OFF until a steward opts in)." },
50150
50194
  { "id": "goal.create", "namespace": "goal", "action": "create", "title": "Create Cascade goal", "description": "Create a cycle goal under an existing objective. The parent chain must terminate at a Compass objective in the same cycle (enforced server-side).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "cycle_id", "flag": "cycle-id", "type": "string", "required": true }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "parent_goal_id", "flag": "parent-goal-id", "type": "string", "required": true }, { "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"] }], "hasComplexInput": false, "help": "Create cycle goals under an existing objective; the parent chain must terminate at a Compass objective." },
50151
50195
  { "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." },
50152
50196
  { "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." },
50153
50197
  { "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." },
50198
+ { "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." },
50154
50199
  { "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." },
50155
50200
  { "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." },
50156
50201
  { "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." },
50157
50202
  { "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." },
50158
- { "id": "goal.unbind_measurable", "namespace": "goal", "action": "unbind_measurable", "title": "Unbind a Signal from a Cascade goal", "description": "Remove a measurable's drives_status binding from a goal. The goal keeps its 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 }], "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." },
50203
+ { "id": "goal.unbind_measurable", "namespace": "goal", "action": "unbind_measurable", "title": "Unbind a Signal from a Cascade goal", "description": "Remove a measurable's binding from a goal. 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." },
50159
50204
  { "id": "goal.update", "namespace": "goal", "action": "update", "title": "Update Cascade goal", "description": "Update a goal's title or definition of done. 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 }], "hasComplexInput": false, "help": "Update a goal's title or definition of done; topology and status have dedicated commands." },
50160
50205
  { "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." },
50161
50206
  { "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." },