Skip to content

Comment thread

Inline replies on a model's output.

10 min

The moment you can comment on a model's response, the product becomes a document. Threads anchor to specific words, not to "the response." Resolutions mark the line where the team agreed. A conversation with the model grows a spine and stops feeling like a disposable session.

This is the pattern that transforms AI output from ephemera into something a team can collectively sharpen.

"A reply anchored to a sentence is worth ten general notes."
The pattern

Anchor, reply, resolve.

Every thread anchors to a specific selection — a phrase, a sentence, a paragraph. Hovering the anchor in the output highlights the thread in the margin. Hovering the thread highlights the anchor. Nothing about a thread is ambient. It is always bound to something precise.

Replies are short and lightly formatted. Resolution dims the thread without hiding it. A "reply with regeneration" action lets a commenter ask the model to revise the anchored text in response to the thread — turning a comment into a draft move.

Inline threads
Each thread anchors to a sentence. Click resolve to mute; click the text to re-anchor.
Model output · threads in margin
The Q3 plan is a bet on enterprise ACV. Three workstreams, two risks, one decision I need by Friday. The pricing pilot holds flat assumptions about churn. The audit-log dependency is 3 weeks behind. I recommend a soft-pilot with 6 accounts rather than a wide GA.
Margin · 2 threads
anchored · "The Q3 plan is a bet on …"
  • MCan I quote the SAM instead of the ACV here?· today 10:14
  • DFair — let me ask the model to redraft.· today 10:17
anchored · "The pricing pilot holds …"
  • EAudit-log lag — is that the 2.1 release dependency?· today 10:22
The why

Precise disagreement makes better work.

General notes are the enemy of sharp output. "I don't love this part" is useless. "This sentence implies I shipped on time, I did not" is actionable. Threads that anchor to specific text force the precision that makes collaborative editing possible.

They also let the model participate. A reply-with-regeneration that names the anchored text as the subject of revision keeps the model grounded in exactly what the team wants changed.

Three moves

The thread I'd ship.

  • Margin over modal. Threads live in the margin next to the output. A modal severs the thread from the text and forces a reader to hold the anchor in their head.
  • Resolve, don't delete. Resolution is how a conversation says "I'm done with this disagreement." Deletion loses the history of what was debated and why.
  • Let the model answer. A thread should be able to address the author or the model. A "reply with regeneration" button turns feedback into a revision instead of a meeting.

The trap

Stale threads on regenerated text.

When a user regenerates a response, what happens to the threads anchored to the old text? The easy answer is "drop them." The better answer is "surface them as orphaned, with the text they were anchored to, and let the user re-anchor or archive."

A thread is a record of a disagreement. Don't quietly delete the record because the artifact moved.

Failure modes

What this pattern gets wrong when it gets wrong.

Ambiguous state
Running, done, errored, paused all look the same. The user has to infer from context.
Leaky context
Content from another source, session, or user surfacing in a place it shouldn't.
Seen in the wild

Three shipping variants worth copying.

  • A margin-rail that shows thread count per paragraph
  • A resolve affordance that dims the thread but keeps it recoverable
  • A 'reply with regeneration' affordance that asks the model to revise the anchored sentence