squasher ask, API clients, or MCP Code Mode. Conversations with the Squasher Agent in Slack are
separate and are not stored in chat threads. See Squasher Agent.
Threads
source, created_by, external_thread_id, archived_at, last_message_at, model_id, and the canonical incident UUID in incident_id when the conversation belongs to an incident. The list filter accepts either that UUID or the incident’s user-facing display ID.
The list, search, and get routes also return origin, which says what opened the thread:
kind:dashboard,slack,api,cli, ormcpfor a thread a person started;monitor,connector, orincidentfor a thread an incident opened;drillfor a test alert sent to check an alert connector;automationfor other automatic threads.incident: the incident’s displayid,severity,status, andtitle, ornull.monitor: theidandnameof the monitor that opened the incident, ornull.connector: theid,label, andproviderof the alert connector that opened the incident, ornull.
Messages
sequence, role, source, text, external message id, and author metadata. Human messages can carry author_name, author_image, and an authenticated user id. Assistant and system messages are attributed to Squasher.
Assistant history may also include a parts array, in the order the answer was made:
A
tool part is one tool call of the agent. Squasher writes title, detail, and summary (for
example “Read issues”, GET /errors, and “43 results”). input and output are previews of at
most 1,500 characters. An approval-requested part has approval.action, and optional
approval.details and approval.operation: the change the agent asks to make.
Squasher never makes a change for the agent without a person’s approval. When the part also has
approval.id, the change is held until a project owner or admin presses Approve or Decline in the
Squasher chat or in Slack. An approved change runs once, and the result arrives in the same
conversation as the next message. A request expires after 24 hours. Older parts without
approval.id are answered with a new message that starts with Approved: or Declined:.
The required top-level text field is the plain-text projection for existing clients: the text of
every step, with a blank line between steps. Platform results never include a URL; clients construct
their own project-scoped destinations from the entity and id.
Responses are ordered by sequence, not client timestamps. Replaying the same
message id, or the same source plus external message id, is idempotent. This
lets web, API, CLI, and MCP append concurrently without one surface
overwriting another surface’s messages.
Ask
ask creates or continues a shared thread and stores the question as a user message. Pass thread_id to continue an existing investigation.
By default, /ask/stream returns text/plain; charset=utf-8 chunks as the assistant responds, then persists the assistant message back to the same thread. This remains the compatible format for terminal, CLI, and other API clients.
Web clients can opt into typed streaming by sending:
step-start events and tool events. Each tool event has the full tool
part. The same tool id arrives again when its state changes, so replace the earlier part:
thinking, searching, or working. A failed stream ends with an error event instead of done. Platform results are emitted only from strictly validated Squasher tool results, are deduplicated by entity and id, and contain no model-supplied links or other source fields. The persisted assistant message contains the same text and platform-result parts, so message history can reproduce the typed response.