Skip to main content
Glama

Shape the roadmap

objective
Destructive

Shape the roadmap. action = create | add_milestone | attach (task → milestone) | move (task → objective) | detach | reorder | set_target | achieve. Retiring an objective lives in the destructive tool.

Input Schema

NameRequiredDescriptionDefault

No arguments

Output Schema

NameRequiredDescriptionDefault
dataYesThe action-specific result returned by Stele.
actionYesThe action that produced this result.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"create\": Create an objective — a standing goal whose end-state lives in its body, with ordered milestone phases under it. Non-claimable; it rolls up from its milestones and the tasks attached to them. Add milestones with objective(action=\"add_milestone\"), then attach tasks with objective(action=\"attach\").",
      -    "properties": {
      -      "action": {
      -        "const": "create",
      -        "type": "string"
      -      },
      -      "body": {
      -        "description": "(create/add_milestone only) Optional markdown body — the objective's end-state prose (what 'done' looks like), or a milestone description.",
      -        "type": "string"
      -      },
      -      "component_id": {
      -        "description": "REQUIRED for create/add_milestone — parent component shareable id.",
      -        "type": "string"
      -      },
      -      "privacy_bypass": {
      -        "description": "true writes despite a privacy flag. Only meaningful after a flag; the user decides whether the content can be written.",
      -        "type": "boolean"
      -      },
      -      "privacy_false_positive": {
      -        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      -        "type": "boolean"
      -      },
      -      "privacy_judgement_id": {
      -        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      -        "type": "string"
      -      },
      -      "privacy_note": {
      -        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      -        "maxLength": 500,
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "scope": {
      -        "description": "(create/add_milestone only) Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it.",
      -        "type": "string"
      -      },
      -      "target_date": {
      -        "description": "(create/add_milestone/set_target only) Soft target date, ISO e.g. 2026-09-30. Optional on create/add_milestone; REQUIRED for set_target (pass null there to clear).",
      -        "type": "string"
      -      },
      -      "title": {
      -        "description": "REQUIRED for create/add_milestone — one-line title (an objective's end-state, or a milestone name).",
      -        "maxLength": 300,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "topics": {
      -        "description": "(create/add_milestone only) Short tag list.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "component_id",
      -      "title"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"add_milestone\": Create a milestone — an ordered phase under an objective. Appended after the objective's existing milestones unless you pass an explicit position. Attach tasks to it with objective(action=\"attach\").",
      -    "properties": {
      -      "action": {
      -        "const": "add_milestone",
      -        "type": "string"
      -      },
      -      "body": {
      -        "description": "Optional milestone description.",
      -        "type": "string"
      -      },
      -      "component_id": {
      -        "description": "Parent component shareable id. REQUIRED.",
      -        "type": "string"
      -      },
      -      "objective_id": {
      -        "description": "REQUIRED for add_milestone/move/reorder/achieve — the objective (TASK-N).",
      -        "type": "string"
      -      },
      -      "position": {
      -        "description": "1-based order within the objective. Appended last when omitted.",
      -        "type": "integer"
      -      },
      -      "privacy_bypass": {
      -        "description": "true writes despite a privacy flag. Only meaningful after a flag; the user decides whether the content can be written.",
      -        "type": "boolean"
      -      },
      -      "privacy_false_positive": {
      -        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      -        "type": "boolean"
      -      },
      -      "privacy_judgement_id": {
      -        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      -        "type": "string"
      -      },
      -      "privacy_note": {
      -        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      -        "maxLength": 500,
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "scope": {
      -        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      -        "type": "string"
      -      },
      -      "target_date": {
      -        "description": "Optional soft target date, ISO e.g. 2026-09-30.",
      -        "type": "string"
      -      },
      -      "title": {
      -        "description": "Milestone one-liner.",
      -        "maxLength": 300,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "topics": {
      -        "description": "Short tag list.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "objective_id",
      -      "component_id",
      -      "title"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"attach\": Attach a plain task to a milestone, re-parenting it off any prior milestone/objective. Real task→task `blocks` dependencies are preserved — only the milestone/objective containment moves.",
      -    "properties": {
      -      "action": {
      -        "const": "attach",
      -        "type": "string"
      -      },
      -      "milestone_id": {
      -        "description": "REQUIRED for attach/set_target — the milestone (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "task_id": {
      -        "description": "REQUIRED for attach/move/detach — the plain task (TASK-N).",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "task_id",
      -      "milestone_id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"move\": Attach a plain task directly to an objective — a 'loose' task serving the objective without a milestone. Re-parents off any prior container. Once an objective has milestones, loose tasks are its drift signal.",
      -    "properties": {
      -      "action": {
      -        "const": "move",
      -        "type": "string"
      -      },
      -      "objective_id": {
      -        "description": "The objective to attach it to directly (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "task_id": {
      -        "description": "The plain task to attach (TASK-N).",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "task_id",
      -      "objective_id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"detach\": Remove a task's milestone/objective containment. Genuine task→task `blocks` dependencies are left intact.",
      -    "properties": {
      -      "action": {
      -        "const": "detach",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "task_id": {
      -        "description": "The task to detach from its milestone/objective (TASK-N).",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "task_id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"reorder\": Reorder an objective's milestones. `milestone_ids` must list exactly the objective's own milestones, in the new order (a total permutation); a partial or foreign list is rejected so positions never go inconsistent.",
      -    "properties": {
      -      "action": {
      -        "const": "reorder",
      -        "type": "string"
      -      },
      -      "milestone_ids": {
      -        "description": "REQUIRED for reorder — the objective's milestones (TASK-N) in the desired order. Must be exactly the objective's own milestones — a full permutation.",
      -        "items": {
      -          "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      -          "type": "string"
      -        },
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "objective_id": {
      -        "description": "The objective whose milestones to reorder (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "objective_id",
      -      "milestone_ids"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"set_target\": Set (or clear, with null) a milestone's soft target date.",
      -    "properties": {
      -      "action": {
      -        "const": "set_target",
      -        "type": "string"
      -      },
      -      "milestone_id": {
      -        "description": "The milestone to retarget (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "target_date": {
      -        "description": "ISO target date e.g. 2026-09-30, or null to clear.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "milestone_id",
      -      "target_date"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"achieve\": Mark an objective as achieved (status → done).",
      -    "properties": {
      -      "action": {
      -        "const": "achieve",
      -        "type": "string"
      -      },
      -      "objective_id": {
      -        "description": "The objective to mark achieved (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "objective_id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "objective action \"create\".",
      +    "properties": {
      +      "action": {
      +        "const": "create",
      +        "description": "Run the create action.",
      +        "type": "string"
      +      },
      +      "body": {
      +        "description": "(create/add_milestone only) Optional markdown body — the objective's end-state prose (what 'done' looks like), or a milestone description.",
      +        "type": "string"
      +      },
      +      "component_id": {
      +        "description": "REQUIRED for create/add_milestone — parent component shareable id.",
      +        "type": "string"
      +      },
      +      "privacy_bypass": {
      +        "description": "true writes despite a privacy flag. Only meaningful after a flag; the user decides whether the content can be written.",
      +        "type": "boolean"
      +      },
      +      "privacy_false_positive": {
      +        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      +        "type": "boolean"
      +      },
      +      "privacy_judgement_id": {
      +        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      +        "type": "string"
      +      },
      +      "privacy_note": {
      +        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      +        "maxLength": 500,
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "(create/add_milestone only) Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it.",
      +        "type": "string"
      +      },
      +      "target_date": {
      +        "description": "(create/add_milestone/set_target only) Soft target date, ISO e.g. 2026-09-30. Optional on create/add_milestone; REQUIRED for set_target (pass null there to clear).",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "REQUIRED for create/add_milestone — one-line title (an objective's end-state, or a milestone name).",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "topics": {
      +        "description": "(create/add_milestone only) Short tag list.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "component_id",
      +      "title"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "objective action \"add_milestone\".",
      +    "properties": {
      +      "action": {
      +        "const": "add_milestone",
      +        "description": "Run the add_milestone action.",
      +        "type": "string"
      +      },
      +      "body": {
      +        "description": "Optional milestone description.",
      +        "type": "string"
      +      },
      +      "component_id": {
      +        "description": "Parent component shareable id. REQUIRED.",
      +        "type": "string"
      +      },
      +      "objective_id": {
      +        "description": "REQUIRED for add_milestone/move/reorder/achieve — the objective (TASK-N).",
      +        "type": "string"
      +      },
      +      "position": {
      +        "description": "1-based order within the objective. Appended last when omitted.",
      +        "type": "integer"
      +      },
      +      "privacy_bypass": {
      +        "description": "true writes despite a privacy flag. Only meaningful after a flag; the user decides whether the content can be written.",
      +        "type": "boolean"
      +      },
      +      "privacy_false_positive": {
      +        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      +        "type": "boolean"
      +      },
      +      "privacy_judgement_id": {
      +        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      +        "type": "string"
      +      },
      +      "privacy_note": {
      +        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      +        "maxLength": 500,
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      +        "type": "string"
      +      },
      +      "target_date": {
      +        "description": "Optional soft target date, ISO e.g. 2026-09-30.",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "Milestone one-liner.",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "topics": {
      +        "description": "Short tag list.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "objective_id",
      +      "component_id",
      +      "title"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "objective action \"attach\".",
      +    "properties": {
      +      "action": {
      +        "const": "attach",
      +        "description": "Run the attach action.",
      +        "type": "string"
      +      },
      +      "milestone_id": {
      +        "description": "REQUIRED for attach/set_target — the milestone (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "task_id": {
      +        "description": "REQUIRED for attach/move/detach — the plain task (TASK-N).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "task_id",
      +      "milestone_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "objective action \"move\".",
      +    "properties": {
      +      "action": {
      +        "const": "move",
      +        "description": "Run the move action.",
      +        "type": "string"
      +      },
      +      "objective_id": {
      +        "description": "The objective to attach it to directly (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "task_id": {
      +        "description": "The plain task to attach (TASK-N).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "task_id",
      +      "objective_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "objective action \"detach\".",
      +    "properties": {
      +      "action": {
      +        "const": "detach",
      +        "description": "Run the detach action.",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "task_id": {
      +        "description": "The task to detach from its milestone/objective (TASK-N).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "task_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "objective action \"reorder\".",
      +    "properties": {
      +      "action": {
      +        "const": "reorder",
      +        "description": "Run the reorder action.",
      +        "type": "string"
      +      },
      +      "milestone_ids": {
      +        "description": "REQUIRED for reorder — the objective's milestones (TASK-N) in the desired order. Must be exactly the objective's own milestones — a full permutation.",
      +        "items": {
      +          "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      +          "type": "string"
      +        },
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "objective_id": {
      +        "description": "The objective whose milestones to reorder (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "objective_id",
      +      "milestone_ids"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "objective action \"set_target\".",
      +    "properties": {
      +      "action": {
      +        "const": "set_target",
      +        "description": "Run the set_target action.",
      +        "type": "string"
      +      },
      +      "milestone_id": {
      +        "description": "The milestone to retarget (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "target_date": {
      +        "description": "ISO target date e.g. 2026-09-30, or null to clear.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "milestone_id",
      +      "target_date"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "objective action \"achieve\".",
      +    "properties": {
      +      "action": {
      +        "const": "achieve",
      +        "description": "Run the achieve action.",
      +        "type": "string"
      +      },
      +      "objective_id": {
      +        "description": "The objective to mark achieved (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "objective_id"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed1 schema field changed
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"create\": Create an objective — a standing goal whose end-state lives in its body, with ordered milestone phases under it. Non-claimable; it rolls up from its milestones and the tasks attached to them. Add milestones with objective(action=\"add_milestone\"), then attach tasks with objective(action=\"attach\").",
      -    "properties": {
      -      "action": {
      -        "const": "create",
      -        "type": "string"
      -      },
      -      "body": {
      -        "description": "(create/add_milestone only) Optional markdown body — the objective's end-state prose (what 'done' looks like), or a milestone description.",
      -        "type": "string"
      -      },
      -      "component_id": {
      -        "description": "REQUIRED for create/add_milestone — parent component shareable id.",
      -        "type": "string"
      -      },
      -      "privacy_bypass": {
      -        "description": "true writes despite a privacy flag on a public project. Only meaningful after a flag; the user decides whether the content can be public.",
      -        "type": "boolean"
      -      },
      -      "privacy_false_positive": {
      -        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      -        "type": "boolean"
      -      },
      -      "privacy_judgement_id": {
      -        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      -        "type": "string"
      -      },
      -      "privacy_note": {
      -        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      -        "maxLength": 500,
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "scope": {
      -        "description": "(create/add_milestone only) Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it.",
      -        "type": "string"
      -      },
      -      "target_date": {
      -        "description": "(create/add_milestone/set_target only) Soft target date, ISO e.g. 2026-09-30. Optional on create/add_milestone; REQUIRED for set_target (pass null there to clear).",
      -        "type": "string"
      -      },
      -      "title": {
      -        "description": "REQUIRED for create/add_milestone — one-line title (an objective's end-state, or a milestone name).",
      -        "maxLength": 300,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "topics": {
      -        "description": "(create/add_milestone only) Short tag list.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "component_id",
      -      "title"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"add_milestone\": Create a milestone — an ordered phase under an objective. Appended after the objective's existing milestones unless you pass an explicit position. Attach tasks to it with objective(action=\"attach\").",
      -    "properties": {
      -      "action": {
      -        "const": "add_milestone",
      -        "type": "string"
      -      },
      -      "body": {
      -        "description": "Optional milestone description.",
      -        "type": "string"
      -      },
      -      "component_id": {
      -        "description": "Parent component shareable id. REQUIRED.",
      -        "type": "string"
      -      },
      -      "objective_id": {
      -        "description": "REQUIRED for add_milestone/move/reorder/achieve — the objective (TASK-N).",
      -        "type": "string"
      -      },
      -      "position": {
      -        "description": "1-based order within the objective. Appended last when omitted.",
      -        "type": "integer"
      -      },
      -      "privacy_bypass": {
      -        "description": "true writes despite a privacy flag on a public project. Only meaningful after a flag; the user decides whether the content can be public.",
      -        "type": "boolean"
      -      },
      -      "privacy_false_positive": {
      -        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      -        "type": "boolean"
      -      },
      -      "privacy_judgement_id": {
      -        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      -        "type": "string"
      -      },
      -      "privacy_note": {
      -        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      -        "maxLength": 500,
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "scope": {
      -        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      -        "type": "string"
      -      },
      -      "target_date": {
      -        "description": "Optional soft target date, ISO e.g. 2026-09-30.",
      -        "type": "string"
      -      },
      -      "title": {
      -        "description": "Milestone one-liner.",
      -        "maxLength": 300,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "topics": {
      -        "description": "Short tag list.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "objective_id",
      -      "component_id",
      -      "title"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"attach\": Attach a plain task to a milestone, re-parenting it off any prior milestone/objective. Real task→task `blocks` dependencies are preserved — only the milestone/objective containment moves.",
      -    "properties": {
      -      "action": {
      -        "const": "attach",
      -        "type": "string"
      -      },
      -      "milestone_id": {
      -        "description": "REQUIRED for attach/set_target — the milestone (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "task_id": {
      -        "description": "REQUIRED for attach/move/detach — the plain task (TASK-N).",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "task_id",
      -      "milestone_id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"move\": Attach a plain task directly to an objective — a 'loose' task serving the objective without a milestone. Re-parents off any prior container. Once an objective has milestones, loose tasks are its drift signal.",
      -    "properties": {
      -      "action": {
      -        "const": "move",
      -        "type": "string"
      -      },
      -      "objective_id": {
      -        "description": "The objective to attach it to directly (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "task_id": {
      -        "description": "The plain task to attach (TASK-N).",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "task_id",
      -      "objective_id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"detach\": Remove a task's milestone/objective containment. Genuine task→task `blocks` dependencies are left intact.",
      -    "properties": {
      -      "action": {
      -        "const": "detach",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "task_id": {
      -        "description": "The task to detach from its milestone/objective (TASK-N).",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "task_id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"reorder\": Reorder an objective's milestones. `milestone_ids` must list exactly the objective's own milestones, in the new order (a total permutation); a partial or foreign list is rejected so positions never go inconsistent.",
      -    "properties": {
      -      "action": {
      -        "const": "reorder",
      -        "type": "string"
      -      },
      -      "milestone_ids": {
      -        "description": "REQUIRED for reorder — the objective's milestones (TASK-N) in the desired order. Must be exactly the objective's own milestones — a full permutation.",
      -        "items": {
      -          "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      -          "type": "string"
      -        },
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "objective_id": {
      -        "description": "The objective whose milestones to reorder (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "objective_id",
      -      "milestone_ids"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"set_target\": Set (or clear, with null) a milestone's soft target date.",
      -    "properties": {
      -      "action": {
      -        "const": "set_target",
      -        "type": "string"
      -      },
      -      "milestone_id": {
      -        "description": "The milestone to retarget (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "target_date": {
      -        "description": "ISO target date e.g. 2026-09-30, or null to clear.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "milestone_id",
      -      "target_date"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"achieve\": Mark an objective as achieved (status → done).",
      -    "properties": {
      -      "action": {
      -        "const": "achieve",
      -        "type": "string"
      -      },
      -      "objective_id": {
      -        "description": "The objective to mark achieved (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "objective_id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"create\": Create an objective — a standing goal whose end-state lives in its body, with ordered milestone phases under it. Non-claimable; it rolls up from its milestones and the tasks attached to them. Add milestones with objective(action=\"add_milestone\"), then attach tasks with objective(action=\"attach\").",
      +    "properties": {
      +      "action": {
      +        "const": "create",
      +        "type": "string"
      +      },
      +      "body": {
      +        "description": "(create/add_milestone only) Optional markdown body — the objective's end-state prose (what 'done' looks like), or a milestone description.",
      +        "type": "string"
      +      },
      +      "component_id": {
      +        "description": "REQUIRED for create/add_milestone — parent component shareable id.",
      +        "type": "string"
      +      },
      +      "privacy_bypass": {
      +        "description": "true writes despite a privacy flag. Only meaningful after a flag; the user decides whether the content can be written.",
      +        "type": "boolean"
      +      },
      +      "privacy_false_positive": {
      +        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      +        "type": "boolean"
      +      },
      +      "privacy_judgement_id": {
      +        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      +        "type": "string"
      +      },
      +      "privacy_note": {
      +        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      +        "maxLength": 500,
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "(create/add_milestone only) Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it.",
      +        "type": "string"
      +      },
      +      "target_date": {
      +        "description": "(create/add_milestone/set_target only) Soft target date, ISO e.g. 2026-09-30. Optional on create/add_milestone; REQUIRED for set_target (pass null there to clear).",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "REQUIRED for create/add_milestone — one-line title (an objective's end-state, or a milestone name).",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "topics": {
      +        "description": "(create/add_milestone only) Short tag list.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "component_id",
      +      "title"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"add_milestone\": Create a milestone — an ordered phase under an objective. Appended after the objective's existing milestones unless you pass an explicit position. Attach tasks to it with objective(action=\"attach\").",
      +    "properties": {
      +      "action": {
      +        "const": "add_milestone",
      +        "type": "string"
      +      },
      +      "body": {
      +        "description": "Optional milestone description.",
      +        "type": "string"
      +      },
      +      "component_id": {
      +        "description": "Parent component shareable id. REQUIRED.",
      +        "type": "string"
      +      },
      +      "objective_id": {
      +        "description": "REQUIRED for add_milestone/move/reorder/achieve — the objective (TASK-N).",
      +        "type": "string"
      +      },
      +      "position": {
      +        "description": "1-based order within the objective. Appended last when omitted.",
      +        "type": "integer"
      +      },
      +      "privacy_bypass": {
      +        "description": "true writes despite a privacy flag. Only meaningful after a flag; the user decides whether the content can be written.",
      +        "type": "boolean"
      +      },
      +      "privacy_false_positive": {
      +        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      +        "type": "boolean"
      +      },
      +      "privacy_judgement_id": {
      +        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      +        "type": "string"
      +      },
      +      "privacy_note": {
      +        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      +        "maxLength": 500,
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      +        "type": "string"
      +      },
      +      "target_date": {
      +        "description": "Optional soft target date, ISO e.g. 2026-09-30.",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "Milestone one-liner.",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "topics": {
      +        "description": "Short tag list.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "objective_id",
      +      "component_id",
      +      "title"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"attach\": Attach a plain task to a milestone, re-parenting it off any prior milestone/objective. Real task→task `blocks` dependencies are preserved — only the milestone/objective containment moves.",
      +    "properties": {
      +      "action": {
      +        "const": "attach",
      +        "type": "string"
      +      },
      +      "milestone_id": {
      +        "description": "REQUIRED for attach/set_target — the milestone (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "task_id": {
      +        "description": "REQUIRED for attach/move/detach — the plain task (TASK-N).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "task_id",
      +      "milestone_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"move\": Attach a plain task directly to an objective — a 'loose' task serving the objective without a milestone. Re-parents off any prior container. Once an objective has milestones, loose tasks are its drift signal.",
      +    "properties": {
      +      "action": {
      +        "const": "move",
      +        "type": "string"
      +      },
      +      "objective_id": {
      +        "description": "The objective to attach it to directly (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "task_id": {
      +        "description": "The plain task to attach (TASK-N).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "task_id",
      +      "objective_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"detach\": Remove a task's milestone/objective containment. Genuine task→task `blocks` dependencies are left intact.",
      +    "properties": {
      +      "action": {
      +        "const": "detach",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "task_id": {
      +        "description": "The task to detach from its milestone/objective (TASK-N).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "task_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"reorder\": Reorder an objective's milestones. `milestone_ids` must list exactly the objective's own milestones, in the new order (a total permutation); a partial or foreign list is rejected so positions never go inconsistent.",
      +    "properties": {
      +      "action": {
      +        "const": "reorder",
      +        "type": "string"
      +      },
      +      "milestone_ids": {
      +        "description": "REQUIRED for reorder — the objective's milestones (TASK-N) in the desired order. Must be exactly the objective's own milestones — a full permutation.",
      +        "items": {
      +          "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      +          "type": "string"
      +        },
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "objective_id": {
      +        "description": "The objective whose milestones to reorder (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "objective_id",
      +      "milestone_ids"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"set_target\": Set (or clear, with null) a milestone's soft target date.",
      +    "properties": {
      +      "action": {
      +        "const": "set_target",
      +        "type": "string"
      +      },
      +      "milestone_id": {
      +        "description": "The milestone to retarget (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "target_date": {
      +        "description": "ISO target date e.g. 2026-09-30, or null to clear.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "milestone_id",
      +      "target_date"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"achieve\": Mark an objective as achieved (status → done).",
      +    "properties": {
      +      "action": {
      +        "const": "achieve",
      +        "type": "string"
      +      },
      +      "objective_id": {
      +        "description": "The objective to mark achieved (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "objective_id"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. Changed1 schema field changed
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"create\": Create an objective — a standing goal whose end-state lives in its body, with ordered milestone phases under it. Non-claimable; it rolls up from its milestones and the tasks attached to them. Add milestones with objective(action=\"add_milestone\"), then attach tasks with objective(action=\"attach\").",
      -    "properties": {
      -      "action": {
      -        "const": "create",
      -        "type": "string"
      -      },
      -      "body": {
      -        "description": "(create/add_milestone only) Optional markdown body — the objective's end-state prose (what 'done' looks like), or a milestone description.",
      -        "type": "string"
      -      },
      -      "component_id": {
      -        "description": "REQUIRED for create/add_milestone — parent component shareable id.",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "scope": {
      -        "description": "(create/add_milestone only) Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it.",
      -        "type": "string"
      -      },
      -      "target_date": {
      -        "description": "(create/add_milestone/set_target only) Soft target date, ISO e.g. 2026-09-30. Optional on create/add_milestone; REQUIRED for set_target (pass null there to clear).",
      -        "type": "string"
      -      },
      -      "title": {
      -        "description": "REQUIRED for create/add_milestone — one-line title (an objective's end-state, or a milestone name).",
      -        "maxLength": 300,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "topics": {
      -        "description": "(create/add_milestone only) Short tag list.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "component_id",
      -      "title"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"add_milestone\": Create a milestone — an ordered phase under an objective. Appended after the objective's existing milestones unless you pass an explicit position. Attach tasks to it with objective(action=\"attach\").",
      -    "properties": {
      -      "action": {
      -        "const": "add_milestone",
      -        "type": "string"
      -      },
      -      "body": {
      -        "description": "Optional milestone description.",
      -        "type": "string"
      -      },
      -      "component_id": {
      -        "description": "Parent component shareable id. REQUIRED.",
      -        "type": "string"
      -      },
      -      "objective_id": {
      -        "description": "REQUIRED for add_milestone/move/reorder/achieve — the objective (TASK-N).",
      -        "type": "string"
      -      },
      -      "position": {
      -        "description": "1-based order within the objective. Appended last when omitted.",
      -        "type": "integer"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "scope": {
      -        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      -        "type": "string"
      -      },
      -      "target_date": {
      -        "description": "Optional soft target date, ISO e.g. 2026-09-30.",
      -        "type": "string"
      -      },
      -      "title": {
      -        "description": "Milestone one-liner.",
      -        "maxLength": 300,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "topics": {
      -        "description": "Short tag list.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "objective_id",
      -      "component_id",
      -      "title"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"attach\": Attach a plain task to a milestone, re-parenting it off any prior milestone/objective. Real task→task `blocks` dependencies are preserved — only the milestone/objective containment moves.",
      -    "properties": {
      -      "action": {
      -        "const": "attach",
      -        "type": "string"
      -      },
      -      "milestone_id": {
      -        "description": "REQUIRED for attach/set_target — the milestone (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "task_id": {
      -        "description": "REQUIRED for attach/move/detach — the plain task (TASK-N).",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "task_id",
      -      "milestone_id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"move\": Attach a plain task directly to an objective — a 'loose' task serving the objective without a milestone. Re-parents off any prior container. Once an objective has milestones, loose tasks are its drift signal.",
      -    "properties": {
      -      "action": {
      -        "const": "move",
      -        "type": "string"
      -      },
      -      "objective_id": {
      -        "description": "The objective to attach it to directly (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "task_id": {
      -        "description": "The plain task to attach (TASK-N).",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "task_id",
      -      "objective_id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"detach\": Remove a task's milestone/objective containment. Genuine task→task `blocks` dependencies are left intact.",
      -    "properties": {
      -      "action": {
      -        "const": "detach",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "task_id": {
      -        "description": "The task to detach from its milestone/objective (TASK-N).",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "task_id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"reorder\": Reorder an objective's milestones. `milestone_ids` must list exactly the objective's own milestones, in the new order (a total permutation); a partial or foreign list is rejected so positions never go inconsistent.",
      -    "properties": {
      -      "action": {
      -        "const": "reorder",
      -        "type": "string"
      -      },
      -      "milestone_ids": {
      -        "description": "REQUIRED for reorder — the objective's milestones (TASK-N) in the desired order. Must be exactly the objective's own milestones — a full permutation.",
      -        "items": {
      -          "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      -          "type": "string"
      -        },
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "objective_id": {
      -        "description": "The objective whose milestones to reorder (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "objective_id",
      -      "milestone_ids"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"set_target\": Set (or clear, with null) a milestone's soft target date.",
      -    "properties": {
      -      "action": {
      -        "const": "set_target",
      -        "type": "string"
      -      },
      -      "milestone_id": {
      -        "description": "The milestone to retarget (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "target_date": {
      -        "description": "ISO target date e.g. 2026-09-30, or null to clear.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "milestone_id",
      -      "target_date"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"achieve\": Mark an objective as achieved (status → done).",
      -    "properties": {
      -      "action": {
      -        "const": "achieve",
      -        "type": "string"
      -      },
      -      "objective_id": {
      -        "description": "The objective to mark achieved (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "objective_id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"create\": Create an objective — a standing goal whose end-state lives in its body, with ordered milestone phases under it. Non-claimable; it rolls up from its milestones and the tasks attached to them. Add milestones with objective(action=\"add_milestone\"), then attach tasks with objective(action=\"attach\").",
      +    "properties": {
      +      "action": {
      +        "const": "create",
      +        "type": "string"
      +      },
      +      "body": {
      +        "description": "(create/add_milestone only) Optional markdown body — the objective's end-state prose (what 'done' looks like), or a milestone description.",
      +        "type": "string"
      +      },
      +      "component_id": {
      +        "description": "REQUIRED for create/add_milestone — parent component shareable id.",
      +        "type": "string"
      +      },
      +      "privacy_bypass": {
      +        "description": "true writes despite a privacy flag on a public project. Only meaningful after a flag; the user decides whether the content can be public.",
      +        "type": "boolean"
      +      },
      +      "privacy_false_positive": {
      +        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      +        "type": "boolean"
      +      },
      +      "privacy_judgement_id": {
      +        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      +        "type": "string"
      +      },
      +      "privacy_note": {
      +        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      +        "maxLength": 500,
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "(create/add_milestone only) Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it.",
      +        "type": "string"
      +      },
      +      "target_date": {
      +        "description": "(create/add_milestone/set_target only) Soft target date, ISO e.g. 2026-09-30. Optional on create/add_milestone; REQUIRED for set_target (pass null there to clear).",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "REQUIRED for create/add_milestone — one-line title (an objective's end-state, or a milestone name).",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "topics": {
      +        "description": "(create/add_milestone only) Short tag list.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "component_id",
      +      "title"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"add_milestone\": Create a milestone — an ordered phase under an objective. Appended after the objective's existing milestones unless you pass an explicit position. Attach tasks to it with objective(action=\"attach\").",
      +    "properties": {
      +      "action": {
      +        "const": "add_milestone",
      +        "type": "string"
      +      },
      +      "body": {
      +        "description": "Optional milestone description.",
      +        "type": "string"
      +      },
      +      "component_id": {
      +        "description": "Parent component shareable id. REQUIRED.",
      +        "type": "string"
      +      },
      +      "objective_id": {
      +        "description": "REQUIRED for add_milestone/move/reorder/achieve — the objective (TASK-N).",
      +        "type": "string"
      +      },
      +      "position": {
      +        "description": "1-based order within the objective. Appended last when omitted.",
      +        "type": "integer"
      +      },
      +      "privacy_bypass": {
      +        "description": "true writes despite a privacy flag on a public project. Only meaningful after a flag; the user decides whether the content can be public.",
      +        "type": "boolean"
      +      },
      +      "privacy_false_positive": {
      +        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      +        "type": "boolean"
      +      },
      +      "privacy_judgement_id": {
      +        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      +        "type": "string"
      +      },
      +      "privacy_note": {
      +        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      +        "maxLength": 500,
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      +        "type": "string"
      +      },
      +      "target_date": {
      +        "description": "Optional soft target date, ISO e.g. 2026-09-30.",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "Milestone one-liner.",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "topics": {
      +        "description": "Short tag list.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "objective_id",
      +      "component_id",
      +      "title"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"attach\": Attach a plain task to a milestone, re-parenting it off any prior milestone/objective. Real task→task `blocks` dependencies are preserved — only the milestone/objective containment moves.",
      +    "properties": {
      +      "action": {
      +        "const": "attach",
      +        "type": "string"
      +      },
      +      "milestone_id": {
      +        "description": "REQUIRED for attach/set_target — the milestone (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "task_id": {
      +        "description": "REQUIRED for attach/move/detach — the plain task (TASK-N).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "task_id",
      +      "milestone_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"move\": Attach a plain task directly to an objective — a 'loose' task serving the objective without a milestone. Re-parents off any prior container. Once an objective has milestones, loose tasks are its drift signal.",
      +    "properties": {
      +      "action": {
      +        "const": "move",
      +        "type": "string"
      +      },
      +      "objective_id": {
      +        "description": "The objective to attach it to directly (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "task_id": {
      +        "description": "The plain task to attach (TASK-N).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "task_id",
      +      "objective_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"detach\": Remove a task's milestone/objective containment. Genuine task→task `blocks` dependencies are left intact.",
      +    "properties": {
      +      "action": {
      +        "const": "detach",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "task_id": {
      +        "description": "The task to detach from its milestone/objective (TASK-N).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "task_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"reorder\": Reorder an objective's milestones. `milestone_ids` must list exactly the objective's own milestones, in the new order (a total permutation); a partial or foreign list is rejected so positions never go inconsistent.",
      +    "properties": {
      +      "action": {
      +        "const": "reorder",
      +        "type": "string"
      +      },
      +      "milestone_ids": {
      +        "description": "REQUIRED for reorder — the objective's milestones (TASK-N) in the desired order. Must be exactly the objective's own milestones — a full permutation.",
      +        "items": {
      +          "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      +          "type": "string"
      +        },
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "objective_id": {
      +        "description": "The objective whose milestones to reorder (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "objective_id",
      +      "milestone_ids"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"set_target\": Set (or clear, with null) a milestone's soft target date.",
      +    "properties": {
      +      "action": {
      +        "const": "set_target",
      +        "type": "string"
      +      },
      +      "milestone_id": {
      +        "description": "The milestone to retarget (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "target_date": {
      +        "description": "ISO target date e.g. 2026-09-30, or null to clear.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "milestone_id",
      +      "target_date"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"achieve\": Mark an objective as achieved (status → done).",
      +    "properties": {
      +      "action": {
      +        "const": "achieve",
      +        "type": "string"
      +      },
      +      "objective_id": {
      +        "description": "The objective to mark achieved (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "objective_id"
      +    ],
      +    "type": "object"
      +  }
      +]
  4. Changed1 schema field changed
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "objective action \"create\".",
      -    "properties": {
      -      "action": {
      -        "const": "create",
      -        "description": "Run the create action.",
      -        "type": "string"
      -      },
      -      "body": {
      -        "description": "(create/add_milestone only) Optional markdown body — the objective's end-state prose (what 'done' looks like), or a milestone description.",
      -        "type": "string"
      -      },
      -      "component_id": {
      -        "description": "REQUIRED for create/add_milestone — parent component shareable id.",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "scope": {
      -        "description": "(create/add_milestone only) Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it.",
      -        "type": "string"
      -      },
      -      "target_date": {
      -        "description": "(create/add_milestone/set_target only) Soft target date, ISO e.g. 2026-09-30. Optional on create/add_milestone; REQUIRED for set_target (pass null there to clear).",
      -        "type": "string"
      -      },
      -      "title": {
      -        "description": "REQUIRED for create/add_milestone — one-line title (an objective's end-state, or a milestone name).",
      -        "maxLength": 300,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "topics": {
      -        "description": "(create/add_milestone only) Short tag list.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "component_id",
      -      "title"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "objective action \"add_milestone\".",
      -    "properties": {
      -      "action": {
      -        "const": "add_milestone",
      -        "description": "Run the add_milestone action.",
      -        "type": "string"
      -      },
      -      "body": {
      -        "description": "Optional milestone description.",
      -        "type": "string"
      -      },
      -      "component_id": {
      -        "description": "Parent component shareable id. REQUIRED.",
      -        "type": "string"
      -      },
      -      "objective_id": {
      -        "description": "REQUIRED for add_milestone/move/reorder/achieve — the objective (TASK-N).",
      -        "type": "string"
      -      },
      -      "position": {
      -        "description": "1-based order within the objective. Appended last when omitted.",
      -        "type": "integer"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "scope": {
      -        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      -        "type": "string"
      -      },
      -      "target_date": {
      -        "description": "Optional soft target date, ISO e.g. 2026-09-30.",
      -        "type": "string"
      -      },
      -      "title": {
      -        "description": "Milestone one-liner.",
      -        "maxLength": 300,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "topics": {
      -        "description": "Short tag list.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "objective_id",
      -      "component_id",
      -      "title"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "objective action \"attach\".",
      -    "properties": {
      -      "action": {
      -        "const": "attach",
      -        "description": "Run the attach action.",
      -        "type": "string"
      -      },
      -      "milestone_id": {
      -        "description": "REQUIRED for attach/set_target — the milestone (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "task_id": {
      -        "description": "REQUIRED for attach/move/detach — the plain task (TASK-N).",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "task_id",
      -      "milestone_id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "objective action \"move\".",
      -    "properties": {
      -      "action": {
      -        "const": "move",
      -        "description": "Run the move action.",
      -        "type": "string"
      -      },
      -      "objective_id": {
      -        "description": "The objective to attach it to directly (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "task_id": {
      -        "description": "The plain task to attach (TASK-N).",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "task_id",
      -      "objective_id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "objective action \"detach\".",
      -    "properties": {
      -      "action": {
      -        "const": "detach",
      -        "description": "Run the detach action.",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "task_id": {
      -        "description": "The task to detach from its milestone/objective (TASK-N).",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "task_id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "objective action \"reorder\".",
      -    "properties": {
      -      "action": {
      -        "const": "reorder",
      -        "description": "Run the reorder action.",
      -        "type": "string"
      -      },
      -      "milestone_ids": {
      -        "description": "REQUIRED for reorder — the objective's milestones (TASK-N) in the desired order. Must be exactly the objective's own milestones — a full permutation.",
      -        "items": {
      -          "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      -          "type": "string"
      -        },
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "objective_id": {
      -        "description": "The objective whose milestones to reorder (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "objective_id",
      -      "milestone_ids"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "objective action \"set_target\".",
      -    "properties": {
      -      "action": {
      -        "const": "set_target",
      -        "description": "Run the set_target action.",
      -        "type": "string"
      -      },
      -      "milestone_id": {
      -        "description": "The milestone to retarget (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "target_date": {
      -        "description": "ISO target date e.g. 2026-09-30, or null to clear.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "milestone_id",
      -      "target_date"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "objective action \"achieve\".",
      -    "properties": {
      -      "action": {
      -        "const": "achieve",
      -        "description": "Run the achieve action.",
      -        "type": "string"
      -      },
      -      "objective_id": {
      -        "description": "The objective to mark achieved (TASK-N).",
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "objective_id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"create\": Create an objective — a standing goal whose end-state lives in its body, with ordered milestone phases under it. Non-claimable; it rolls up from its milestones and the tasks attached to them. Add milestones with objective(action=\"add_milestone\"), then attach tasks with objective(action=\"attach\").",
      +    "properties": {
      +      "action": {
      +        "const": "create",
      +        "type": "string"
      +      },
      +      "body": {
      +        "description": "(create/add_milestone only) Optional markdown body — the objective's end-state prose (what 'done' looks like), or a milestone description.",
      +        "type": "string"
      +      },
      +      "component_id": {
      +        "description": "REQUIRED for create/add_milestone — parent component shareable id.",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "(create/add_milestone only) Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it.",
      +        "type": "string"
      +      },
      +      "target_date": {
      +        "description": "(create/add_milestone/set_target only) Soft target date, ISO e.g. 2026-09-30. Optional on create/add_milestone; REQUIRED for set_target (pass null there to clear).",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "REQUIRED for create/add_milestone — one-line title (an objective's end-state, or a milestone name).",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "topics": {
      +        "description": "(create/add_milestone only) Short tag list.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "component_id",
      +      "title"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"add_milestone\": Create a milestone — an ordered phase under an objective. Appended after the objective's existing milestones unless you pass an explicit position. Attach tasks to it with objective(action=\"attach\").",
      +    "properties": {
      +      "action": {
      +        "const": "add_milestone",
      +        "type": "string"
      +      },
      +      "body": {
      +        "description": "Optional milestone description.",
      +        "type": "string"
      +      },
      +      "component_id": {
      +        "description": "Parent component shareable id. REQUIRED.",
      +        "type": "string"
      +      },
      +      "objective_id": {
      +        "description": "REQUIRED for add_milestone/move/reorder/achieve — the objective (TASK-N).",
      +        "type": "string"
      +      },
      +      "position": {
      +        "description": "1-based order within the objective. Appended last when omitted.",
      +        "type": "integer"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      +        "type": "string"
      +      },
      +      "target_date": {
      +        "description": "Optional soft target date, ISO e.g. 2026-09-30.",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "Milestone one-liner.",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "topics": {
      +        "description": "Short tag list.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "objective_id",
      +      "component_id",
      +      "title"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"attach\": Attach a plain task to a milestone, re-parenting it off any prior milestone/objective. Real task→task `blocks` dependencies are preserved — only the milestone/objective containment moves.",
      +    "properties": {
      +      "action": {
      +        "const": "attach",
      +        "type": "string"
      +      },
      +      "milestone_id": {
      +        "description": "REQUIRED for attach/set_target — the milestone (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "task_id": {
      +        "description": "REQUIRED for attach/move/detach — the plain task (TASK-N).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "task_id",
      +      "milestone_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"move\": Attach a plain task directly to an objective — a 'loose' task serving the objective without a milestone. Re-parents off any prior container. Once an objective has milestones, loose tasks are its drift signal.",
      +    "properties": {
      +      "action": {
      +        "const": "move",
      +        "type": "string"
      +      },
      +      "objective_id": {
      +        "description": "The objective to attach it to directly (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "task_id": {
      +        "description": "The plain task to attach (TASK-N).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "task_id",
      +      "objective_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"detach\": Remove a task's milestone/objective containment. Genuine task→task `blocks` dependencies are left intact.",
      +    "properties": {
      +      "action": {
      +        "const": "detach",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "task_id": {
      +        "description": "The task to detach from its milestone/objective (TASK-N).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "task_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"reorder\": Reorder an objective's milestones. `milestone_ids` must list exactly the objective's own milestones, in the new order (a total permutation); a partial or foreign list is rejected so positions never go inconsistent.",
      +    "properties": {
      +      "action": {
      +        "const": "reorder",
      +        "type": "string"
      +      },
      +      "milestone_ids": {
      +        "description": "REQUIRED for reorder — the objective's milestones (TASK-N) in the desired order. Must be exactly the objective's own milestones — a full permutation.",
      +        "items": {
      +          "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      +          "type": "string"
      +        },
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "objective_id": {
      +        "description": "The objective whose milestones to reorder (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "objective_id",
      +      "milestone_ids"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"set_target\": Set (or clear, with null) a milestone's soft target date.",
      +    "properties": {
      +      "action": {
      +        "const": "set_target",
      +        "type": "string"
      +      },
      +      "milestone_id": {
      +        "description": "The milestone to retarget (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "target_date": {
      +        "description": "ISO target date e.g. 2026-09-30, or null to clear.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "milestone_id",
      +      "target_date"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"achieve\": Mark an objective as achieved (status → done).",
      +    "properties": {
      +      "action": {
      +        "const": "achieve",
      +        "type": "string"
      +      },
      +      "objective_id": {
      +        "description": "The objective to mark achieved (TASK-N).",
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "objective_id"
      +    ],
      +    "type": "object"
      +  }
      +]
  5. First observed

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds real routing context by naming the sibling that owns the destructive retirement path, which the annotations alone would not convey. However, annotations declare destructiveHint=true, and the description never explains which of these eight actions is actually destructive (detach presumably breaks the task→milestone link) or whether it is reversible — leaving the agent with a tension between 'destructive lives elsewhere' and destructiveHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both front-loaded with the highest-value information: the action vocabulary first, the destructive exclusion second. No filler and nothing an agent must scroll past to find the decision-relevant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An eight-action tool with a rich discriminated-union schema and an output schema is reasonably served by an action list, and the schema carries body/scope/privacy semantics. But the description gives no sense of sequencing (create before add_milestone before attach), no confirmation of what achieve or reorder side effects are, and no warning that detach is the destructive path implied by the annotation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description earns extra credit by mapping operands the schema only implies: 'attach (task → milestone)' and 'move (task → objective)' clarify the direction of each relation, which is the key disambiguation between two otherwise similar actions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title 'Shape the roadmap' alone is vague, but the description immediately enumerates the eight concrete actions (create, add_milestone, attach, move, detach, reorder, set_target, achieve) with parenthetical operand mappings, which pins the resource down as objectives/milestones. It clearly distinguishes itself from the `destructive` sibling by routing retirement there.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is one explicit exclusion — 'Retiring an objective lives in the `destructive` tool' — which is genuinely useful routing. But nothing says when to use create vs add_milestone, whether milestones must exist before attach, or how this relates to siblings like `task` and `organize` that also manipulate tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.