Artifacts · 3 min read

Comments

How an agent finds activated threads, answers in them, and starts its own.

People who open an Artifact you published can leave comment threads on it: pinned to an element, to a passage, or to the page. When someone mentions the agent in a thread, the thread is activated and your agent can answer in it, republish, and mark it resolved. This page is for the agent: how to find the threads that are waiting on you, read them, reply, resolve, and start a thread of your own. Both hosts, https://bisque.today and https://bisque.cloud, serve every path here, and every path takes Authorization: Bearer <credential> (see /auth.md). Comments do not exist on public Artifacts.

The same operations exist as MCP tools on the presentations server at /mcp: list_artifact_threads, get_artifact_thread, create_artifact_thread, reply_to_artifact_thread, and resolve_artifact_thread. The full HTTP surface is in /openapi.json.

Find the threads waiting on you

Ask for open threads where someone mentioned the agent. That is the whole work queue.

curl -s "https://bisque.cloud/v1/artifacts/$ARTIFACT_ID/threads?status=open&activated=true" \
  -H "Authorization: Bearer $BISQUE_API_KEY"
{
  "items": [
    {
      "thread_id": "thr_…",
      "status": "open",
      "anchor": {
        "kind": "element",
        "selector": "#revenue-chart",
        "snapshot": { "tag": "div", "text": "Revenue by quarter" },
        "slideId": "s2",
        "slideIndex": 1
      },
      "version_number": 3,
      "preview": "Make this chart larger @Agent",
      "message_count": 2,
      "agent_activated": true,
      "created_by": { "kind": "user", "uid": "…", "name": "Nick" }
    }
  ],
  "next_cursor": null
}

anchor says what the comment is about. element carries the selector and a text snapshot of the element; text carries the quoted passage; page is a general comment, with the slide and time when the Artifact is a presentation. version_number is the Version the person was looking at. Pass after= with an RFC 3339 time to see only threads with activity since your last check, and status=all or status=resolved to widen the view.

MCP: list_artifact_threads with { "artifact_id": "art_…", "activated_only": true }.

Read a thread

curl -s "https://bisque.cloud/v1/artifacts/$ARTIFACT_ID/threads/$THREAD_ID" \
  -H "Authorization: Bearer $BISQUE_API_KEY"

The response is the thread plus messages, oldest first. Each message has an author, a markdown body, mentions, attachments, and reactions. A mention in a body looks like @[Nick](mention:uid); a mention of the agent is @[Agent](mention:agent). To view an attached screenshot, fetch …/attachments/{attachment_id} with the same header; it answers with the image bytes.

MCP: get_artifact_thread with { "artifact_id", "thread_id" }.

Reply

Reply in an activated thread. Say what you changed, then republish, then resolve. People see the reply as "Agent · via Nick", where Nick is the person whose credential made the call.

curl -s -X POST "https://bisque.cloud/v1/artifacts/$ARTIFACT_ID/threads/$THREAD_ID/messages" \
  -H "Authorization: Bearer $BISQUE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"body": "Widened the chart to the full slide in version 4."}'

A reply on a thread that is not activated fails with 403 THREAD_NOT_ACTIVATED. Mention a person with @[Name](mention:uid); the ids come from GET …/mentionables?q=ni, which lists everyone who can open the Artifact.

MCP: reply_to_artifact_thread with { "artifact_id", "thread_id", "body" }.

Resolve

curl -s -X PATCH "https://bisque.cloud/v1/artifacts/$ARTIFACT_ID/threads/$THREAD_ID" \
  -H "Authorization: Bearer $BISQUE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status": "resolved"}'

Send {"status": "open"} to reopen. Resolving after a republish shows people "Resolved in version N" beside the thread.

MCP: resolve_artifact_thread with { "artifact_id", "thread_id", "resolved": true }.

Start a thread

An agent can leave a comment of its own, for example to ask the owner a question about a draft. A thread the agent starts is activated from the start, so you can reply in it and resolve it later. anchor is required over HTTP; use a page anchor for a general comment.

curl -s -X POST "https://bisque.cloud/v1/artifacts/$ARTIFACT_ID/threads" \
  -H "Authorization: Bearer $BISQUE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "anchor": { "kind": "page", "slideId": "s3", "slideIndex": 2, "timeSec": null },
    "body": "@[Nick](mention:uid_nick) the Q3 number on this slide is from the draft sheet. Confirm before I publish?"
  }'

MCP: create_artifact_thread with { "artifact_id", "body", "anchor"? }; without an anchor the tool leaves a general comment.

Where it fits

Comments arrive after you publish with the API or the MCP server. Poll the activated list at the start of a session, or whenever the owner asks what people said about an Artifact, and close the loop in the thread: reply, republish, resolve.