Rebuild the saved snapshot inside the "ai-team-workgroup-status" Cowork artifact from the last 30 days of Slack activity. This runs fresh with no memory of prior conversations, so follow these steps exactly.
TOOLS TO LOAD FIRST (via ToolSearch "select:<name>"):
- mcp__cowork__list_artifacts and mcp__cowork__update_artifact
- mcp__abb1c810-65a0-46c7-9341-b375ca1dd88a__slack_read_channel
(Use the Read and Write file tools directly.)
STEP 1 — Locate the artifact and read its current data.
Call list_artifacts, find the one with id "ai-team-workgroup-status", and Read the file at its `path` (index.html). Inside there is a JavaScript object literal `const DATA = { ... };`. Parse out, for each channel, the existing `features` array (name + status). You need these as the PRIOR statuses for carry-over in Step 4.
STEP 2 — These are the 13 channels (name | channelId):
Investigations | C08U43PM3S4
Assistant Core | C08JKQKQ448
Assistant Platform | C0APUJ94MQT
Assistant Workspace | C0AT2GH7YDU
Evaluation | C0ANRMPTUJH
SRE Agent | C0B0EE7BARF
Shift left / CLI | C0AEPV3K43A
Memory / Search | C0ADZQ4SXDZ
Forecasting / Outlier detection | C01A26KK49M
ChatOps | C0AB1KA2YHG
AI Observability (Sigil) | C0AL71QRJQ6
Demos / AI Dept | C0B2NMVH4BT
AI Week | C0BBP82G03Y
STEP 3 — For EACH channel, read the last 30 days of messages.
Compute oldest = (now − 30 days) as a Unix epoch-seconds string. Call slack_read_channel with { channel_id, limit: 100, oldest, response_format: "concise" }. The response is { messages, pagination_info }. If pagination_info contains `cursor: \`TOKEN\``, call again with the same args plus cursor=TOKEN. Repeat until no cursor or 6 pages, collecting all message text. (Channels are independent; you may process them one at a time.)
STEP 4 — From each channel's messages, extract:
- features: distinct features/projects with a stage signal. status is one of: "in dev", "private preview", "public preview", "GA", "unknown". Use the MOST ADVANCED stage mentioned. Use canonical names that match the PRIOR feature names where the same feature is meant.
- contributors: up to 6 real human full names posting substantive content (skip bots, Gong, join notices).
- updates: 2–5 concrete one-line shipping/PR/decision items from the period (under 140 chars each).
Then MERGE features with the PRIOR statuses from Step 1, per channel:
- Maturity rank: unknown(0) < in dev(1) < private preview(2) < public preview(3) < GA(4).
- A feature present in PRIOR but NOT mentioned in the last 30 days: KEEP it with its prior status and set "stale": true.
- A feature mentioned this round: set "stale": false, and use the HIGHER of (prior status, newly-observed status) — never downgrade a known stage.
- A brand-new feature mentioned this round: add it with "stale": false.
- PINNED corrections — always force these exact statuses regardless of the above (verified against Grafana public docs):
• Assistant Core (C08JKQKQ448): "Dashboarding mode" = "public preview"; "EU regional inference" = "unknown"; "k6 script authoring mode" = "GA".
• Evaluation (C0ANRMPTUJH): "Sigil (Experiments)" = "public preview".
STEP 5 — Write the new snapshot back.
Build the new DATA object with the same shape:
{ "generatedAt": "<current ISO-8601 UTC timestamp>", "channels": { "<channelId>": { "features": [ {"name","status","stale"} ], "contributors": [...], "updates": [...] }, ... } }
Do NOT include the "note" field (it was only for the un-refreshed baseline). Keep all 13 channels even if a fetch returned nothing (in that case keep the prior features marked stale, with empty contributors/updates).
Replace ONLY the `const DATA = { ... };` block in index.html with `const DATA = <new JSON>;` — leave the rest of the file (styles, render code) untouched. Write the updated file, then call update_artifact with id "ai-team-workgroup-status", the html_path of the file you wrote, and update_summary "Morning refresh: rebuilt snapshot from the last 30 days of Slack."
Be efficient and do not post anything to Slack — this is read-only except for updating the artifact.