Update an existing dashboard's shared `dashboardContext`, widgets, tags, and/or team. Call get_skill with skillId: "dashboards" first — see skill for inheritance rules. Look up the dashboard id via search. Pass `dashboardContext` as a partial patch to edit the global filter (`conditionsCel`), period, groupBy, metricId, currency, or scopeId without recreating the dashboard — omit fields you want to keep; empty `conditionsCel` clears the filter. The legacy `context` alias is temporarily accepted but deprecated; never send both. Pass `operations` to add/replace/remove widgets. Pass `tags` to replace the full tag list (existing IDs from list_tags and/or `{ name, color? }` for new tags; `[]` clears). Pass `teamId` (from list_teams) to assign a team, or `teamId: null` to detach. At least one of `dashboardContext`, `operations`, `tags`, or `teamId` is required. Response includes `inheritedContext` so new chart widgets can omit fields matching the dashboard. Chart widgets inherit metricId, groupBy, currency, period, and conditionsCel by default — only pass per-widget overrides. Text widgets: `{ type: "text", title, textContent }`. Do not repeat from/to, datePreset, or groupBy when they match the dashboard context. Set `extendDashboardConditions: false` only when a chart widget must ignore the dashboard filter. Optional grid fields on add: `x`/`y`/`w`/`h` (from get). Returns a URL — you MUST include it in your response.
EXAMPLES: see skill dashboards Workflow B (widgets) and Workflow D (context / global filter).
• "Tag the AWS dashboard as infrastructure" (after list_tags returned tag id "tag_abc") → { dashboardId: "clx9aws", tags: ["tag_abc"] }
• "Move the K8s dashboard to the infra team" (after list_teams returned id "team_xyz") → { dashboardId: "clx9k8s", teamId: "team_xyz" }
• "Remove the dashboard from its team" → { dashboardId: "clx9k8s", teamId: null }