update_goal
Update a goal — its status, target, tags, metric, dates, or the manual counter. Status is one of not_started | active | at_risk | achieved | abandoned. at_risk is set deliberately by a human or agent that knows the goal is slipping; nothing sets it automatically, so it stays meaningful. To advance a manual goal pass manual_done. Do not set current_value — measured goals are re-read from the source by refresh_goals. Passing metric_key CHANGES what this goal measures — it re-baselines from the new metric immediately (the old baseline meant nothing under the new one), it does not just relabel the existing progress. Call goal_metrics first to confirm the key. This is the fix for a wrong metric choice at create time — no need to delete and recreate the goal.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | JSON array of labels — replaces the existing set | |
| stage | No | discover | fix | build | grow | defend | |
| title | No | New title | |
| due_at | No | ISO 8601 date/time this goal is due | |
| status | No | not_started | active | at_risk | achieved | abandoned | |
| goal_id | Yes | Goal id from list_goals | |
| site_id | Yes | The brand/site ID | |
| category | No | seo | aeo | geo | technical | content | authority | |
| priority | No | low | medium | high | |
| starts_at | No | ISO 8601 date/time this goal starts | |
| metric_key | No | A key from goal_metrics. Changing this re-baselines the goal from the new metric, right now. | |
| description | No | New description | |
| manual_done | No | How many of manual_total are done | |
| manual_total | No | Revised total for a manual goal | |
| target_value | No | Revised target |