AM-184: parallel tasks edit one progress message, web and Slack (kite#28197)

Same request on two deploy previews built from the same base: main control (v2dp28198, 88d3b8f) and this PR (v2dp28197, 222ede7). Each was run by a fresh sign-up through the web chat on 3 Nov 2026, starting 22:01 UTC.

Request: “Three things for our launch next week. Run them as three separate tasks at the same time and post an update as each one finishes: (1) Jasper's Pro plan price, (2) the five best-known AI marketing agents for startups, (3) a 700-word blog post…” Kite started three tasks of different lengths in both arms. After the first update, the person asked “Quick question while those run: for a board update, which of the three should I read first?”

4 Nov: the hand-off is part of the progress message (head 6046391f52)

Nikhil's review of deploy preview thread 530b1496 (a signup kickoff, 01:16–01:30 UTC): every task update rewrote one message, and the last replaced it with the answer, but the kickoff turn's opening line ("I'm checking Kite's site and onboarding notes…") and hand-off ("The kickoff is underway for kite.ai…") still sat above the answer. The first task update now takes their place. Same three-task request on fresh sign-ups:

No mid-run question (run prL): one Kite message at the end

+32 sOpening line: "I'll start the three tasks separately and post each result as it finishes."
+57 sHand-off: "The three tasks are running separately: Jasper's Pro price, the five-agent comparison, and the 700-word blog draft…"
+213 sFirst update (Jasper's price). Both earlier lines leave the chat; one Kite message remains, below the blog task's card.
+383 sThe last task's answer replaces it: "All three pieces are ready…". The thread: the request, the card, one answer.

hand-off posted

first update took its place

the answer

A hand-off that asks something, and a mid-run question (run prN)

The hand-off asked "What company name and primary website should I use for the launch?", so it stays where the person read it; the opening line above it still went at the first update. The person then asked which piece to read first: the progress message moved below that question, Kite answered, and the last task's answer replaced the progress message at the bottom.

Two cases found on the way, both fixed:

Slack (persona lane run 41761722408, head 7e20fe591a): the hand-off post "The three research tasks are running in parallel… I'll update this thread" was marked (02:41:27), then edited in place by each update (02:43:05, 02:43:17, 02:43:34), and the answer posted as a reply that deleted it (02:45:17). The thread at the end: the plan card, the person's messages, the answer and the follow-up Q&A; no hand-off, no progress copies.

Scenario B: the thread as stored (from GET /cmo/threads/{id}/messages)

main control: 12 Kite messages

22:01:12PersonThree things for our launch next week. Run them as three separate tasks at the same time and post an update as each one finishes: (1) find Jasper's Pro plan monthly price from its pricing page; (2) research the five best…
22:01:36Kite #1I’ll start the Jasper lookup, five-agent comparison, and blog draft as separate tasks, then update you as each finishes.
22:02:05Kite #2All three tasks are running separately. I’ll post each result as it finishes. The blog is being drafted as a general guide because I don’t have your company or website on file.
22:03:08Kite #3Jasper’s [pricing page](https://www.jasper.ai/pricing) lists Pro at **US$69 per seat per month** when billed monthly. The US$59 figure is the monthly equivalent when billed annually, not the monthly-billing price. That w…
22:03:22PersonQuick question while those run: for a board update, which of the three should I read first?
22:03:35Kite #4Read the five-agent comparison first. It’ll give the board the market picture: who the main players are, how they position themselves, and where pricing starts. Jasper’s price is one useful detail within that; the blog d…
22:06:32Kite #5The blog draft is ready. I’m opening the full text so I can share it with the meta description.
22:06:44Kite #6The blog draft is ready. It’s a general guide for startup founders and lean marketing teams; it doesn’t assume a product or launch offer for your company. # How startups can use an AI marketing agent A startup can give…
22:09:05Kite #7The five-agent comparison is still incomplete. I’m checking its remaining research before I share the board-ready version.
22:09:14Kite #8The five-agent comparison isn’t board-ready yet: **one of five entries is verified**. [HubSpot Agent Hub](https://www.hubspot.com/products/artificial-intelligence) offers CRM-based campaign planning, content creation an…
22:11:21Kite #9The five-agent comparison is complete. I’m pulling the full findings and putting the board version together.
22:11:35Kite #10The five-agent comparison is complete. For the board, the clearest point is that these products do different jobs at very different entry prices. This is a curated shortlist, **not a popularity ranking**. | Agent | Posi…
22:11:37Kite #11Publish five-agent board comparison
22:17:04Kite #12The [board-ready five-agent comparison](https://reports-b955c21d.vercel.app/reports/ai-marketing-agents-startups) is live behind team sign-in. It brings the positioning, starting prices and source links into one place. …

this PR: 5 Kite messages

22:01:12PersonThree things for our launch next week. Run them as three separate tasks at the same time and post an update as each one finishes: (1) find Jasper's Pro plan monthly price from its pricing page; (2) research the five best…
22:01:31Kite #1I’ll start the three tasks separately and post each result as it finishes.
22:02:05Kite #2The three tasks are running separately: Jasper’s Pro price, a five-agent comparison, and the 700-word blog draft with a meta description. I’ll post each result as it finishes.
22:04:02PersonQuick question while those run: for a board update, which of the three should I read first?
22:04:31Kite #3Read the five-agent comparison first once it’s ready. It gives the board the market context; Jasper’s price is one supporting data point, and the blog is the launch asset. If you need to brief them before the comparison …
22:09:30Kite #4I’m checking whether the remaining comparison is still running.
22:13:46Kite #5**The five-agent comparison is complete.** For the board, lead with the difference between *drafting marketing assets* and *running a marketing workflow*. These five are a sourced shortlist, not a ranking by users or mar…

On the PR, Kite #4 is a platform follow-up turn about a promise in Kite #3's answer, not a task update, so it posts as before. Each task update rewrote one progress message, first “Jasper's pricing page lists Pro at $69… The blog draft is ready… The five-agent comparison is still running.” After the person's question it moved below their exchange (timeline below). When the last task settled, Kite's answer replaced it: the comparison table, Jasper's price and the whole blog draft in one message (Kite #5).

Re-run on the corrected head (7c079cf852, after review rounds D1 and V1)

Same request on a fresh sign-up: 6 Kite rows, one of them the board report's card. The progress message was created at the first update and moved below the mid-run question's answer at the next. The final wake came from a report task that the comparison task started, and it replaced the progress message with the board report link. Jasper's price and the whole blog draft sit in Kite's answer to the mid-run question, because that turn carried the blog task's completion. The comparison table is in the linked report.

23:05:02PersonThree things for our launch next week. Run them as three separate tasks at the same time and post an update as each one finishes: (1) find Jasper's Pro plan monthly price from its pricing page; (2) research the five best…
23:05:22Kite #1I’ll start the three tasks separately and share each result as it finishes.
23:05:49Kite #2The three separate tasks are running in parallel: Jasper’s Pro price, five AI marketing agents and their starting prices, and the 700-word blog draft with a meta description. I’ll share each result as it finishes.
23:09:41PersonQuick question while those run: for a board update, which of the three should I read first?
23:11:14Kite #3I’m pulling the finished blog draft and checking which piece is most useful for the board update.
23:11:29Kite #4**For the board update, read the five-agent comparison first once it’s ready.** It will show the market options and prices in one place. If you’re preparing the update now, Jasper’s price is the first finished fact: [Pro…
23:15:41Kite #5Board-ready AI marketing agent comparison
23:20:53Kite #6The [board comparison is ready to read](https://reports-1a241e0f.vercel.app/reports/ai-marketing-agent-comparison). It’s sign-in protected, and **am132e2db63fa4@fldubai.com** is listed as an allowed viewer. It puts all f…

Web re-run on 1cd329a0d2 (the head that added Slack), 4 Nov 00:20 UTC

Same request on a fresh sign-up: 5 Kite messages at the end (main control: 12). The browser timeline, read from the bubbles on screen:

+165 sThe first update (Jasper's $69 monthly price; "the five-agent comparison and the 700-word blog draft are still running") is the progress message, the 3rd Kite bubble.
+175–185 sThe person asks which piece to read first for the board. Kite answers in its own two messages (the answer turn carried the blog task's completion, so the draft is in that answer).
+335 sThe next update ("The five-agent comparison is ready…") rewrites the progress message, and it moves below the mid-run exchange. The Jasper line is no longer a separate bubble above.
+576 sThe last task (the published board comparison) settles: the progress message is replaced by the answer for all of it ("The board-ready five-agent comparison is published… Jasper's separate monthly price check and the blog draft are complete too"). No new message follows.

progress message created

moved below the exchange and rewritten

replaced by the answer

Slack thread on 1cd329a0d2 (persona lane, real Slack workspace)

CMO persona Slack eval run 41745553610, 4 Nov 00:20 UTC, built from this PR's head plus the lane's spec entry. A simulated founder asked for three parallel board-prep tasks with an update as each finished. The run passed all three judges (conduct, register, research fidelity). Times are from the run's transcript and backend log.

00:20:20PersonCan you run three separate tasks at the same time for board prep, and update me as each one finishes? 1. Relevance AI pricing for a 10-person team 2. Sema4.ai announcements in the last three months 3. Beam AI homepage positioning
00:21:01KitePlan card: three tasks running. Hand-off reply: "The three board-prep tasks are running separately… I’ll update this thread as each one finishes."
00:22:19Kite (posted)Progress message posted: "Beam AI — finished: … Still running: Relevance AI’s 10-person pricing and Sema4.ai’s announcements." Log: Slack progress message posted.
00:22:37Kite (edited)The same message edited with chat.update (no notification): Relevance AI and Beam AI results, "Still running: Sema4.ai’s announcements." Log: Slack progress message edited.
00:22:54Kite (answer)"Board-prep readout — all three are ready." posts as an ordinary reply; the progress message is deleted. Log: Slack progress message reposted (closed).
00:24:41Personwhich of these matters most for the board?
00:24:52Kite"Sema4.ai’s Platform 3.0 launch matters most…"

The thread in Slack at the end (conversations.replies)

Eight messages. The progress message is gone: the answer replaced it. The plan card still shows each task's state.

PersonCan you run three separate tasks at the same time for board prep…
KitePlan card (edited in place to "done")
KiteThe three board-prep tasks are running separately…
KiteBoard-prep readout — all three are ready.
Personwhich of these matters most for the board?
KiteSema4.ai’s Platform 3.0 launch matters most.
Personthanks, that's what I needed
KiteGlad it helped.

On main, a Slack stage wake with the plan card showing is licensed to stay quiet, and the eval fixture cmo-slack-stage-wake-writes-the-progress-message shows Kite answering NO_UPDATE there on main's frame (0/2), so stage results reach the person only in the card's one-line results. 62a21d16b7 later changed only a media-carrying copy (now kept) and a top-level Slack post (back to main's behaviour); neither occurred in this run.

Whole thread at the end (first run)

main control (bottom of the thread)

this PR (the whole thread)

PR: the progress message moving below the mid-run exchange (browser timeline)

10s  ["U: Three things for our launch next week. Run them as"]
25s  ["U: Three things for our launch next week. Run them as","K: I’ll start the three tasks separately and post eac"]
55s  ["U: Three things for our launch next week. Run them as","K: I’ll start the three tasks separately and post eac","K: The three tasks are running separately: Jasper’s P"]
60s  ["U: Three things for our launch next week. Run them as","K: I’ll start the three tasks separately and post eac","K: The three tasks are running separately: Jasper’s P"]
166s  ["U: Three things for our launch next week. Run them as","K: I’ll start the three tasks separately and post eac","K: The three tasks are running separately: Jasper’s P","K: Jasper’s pricing page lists Pro at $69 USD per mon"]
[  175s] after reload: kite=3 row="Thinking" order=["U: Three things for our launch next week. Run them as","K: I’ll start the three tasks separately and post eac","K: The three tasks are running separately: Jasper’s P","K: Jasper’s pricing page lists Pro at $69 USD per mon"]
180s  ["U: Three things for our launch next week. Run them as","K: I’ll start the three tasks separately and post eac","K: The three tasks are running separately: Jasper’s P","K: Jasper’s pricing page lists Pro at $69 USD per mon","U: Quick question while those run: for a board update"]
190s  ["U: ","K: ","K: ","U: ","K: Jasper’s pricing page lists Pro at $69 USD per mon"]
205s  ["U: ","K: ","K: ","U: ","K: Jasper’s pricing page lists Pro at $69 USD per mon","K: Read the five-agent comparison first once it’s rea"]
506s  ["U: ","K: ","K: ","U: ","K: Jasper’s pricing page lists Pro at $69 USD per mon","K: Read the five-agent comparison first once it’s rea","K: I’m checking whether the remaining comparison is s"]
631s  ["U: ","K: ","K: ","U: ","K: ","K: ","K: Four of the five agent profiles are ready. HubSpot"]
762s  ["U: ","K: ","K: ","U: ","K: ","K: ","K: The five-agent comparison is complete. For the boa"]
[ 1002s] FINAL kite=5 order=["U: ","K: ","K: ","U: ","K: ","K: ","K: The five-agent comparison is complete. For the boa"]

Scenario A (three pricing checks that finished within about 25 s of each other)

main: 4 Kite messages (an extra “All three pricing checks are back. I’m checking…” line, then the report). PR: 3. The second wake rewrote the report in place.

main

PR, first update

PR, same bubble rewritten