The conversation.* family (8 verbs). Every verb enters through the one front door: it is capability-checked, permission-checked, scope-checked and audited before it runs (see Security & permissions). Each entry below lists its capability, risk class (which fixes the minimum autonomy level), the minimum caller permission, its availability tier, whether it is idempotent, and any outbound egress.
Archiveconversation.archive
| Property | Value |
|---|---|
| Capability | conversation.write |
| Risk class | Sensitive - autonomy L2 |
| Min. permission | Member |
| Availability | Core - always on (MCP tier 1) |
| Idempotent | Yes |
| Egress | None - in-box (pure Postgres, no outbound call) |
flip the own thread to ARCHIVED (idempotent; owner-only). { conversationId }.
Call POST /v/conversation.archive with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool conversation.archive.
Createconversation.create
| Property | Value |
|---|---|
| Capability | conversation.write |
| Risk class | Sensitive - autonomy L2 |
| Min. permission | Member |
| Availability | Core - always on (MCP tier 1) |
| Idempotent | No |
| Egress | None - in-box (pure Postgres, no outbound call) |
spawn a thread owned by the calling actor.
{ title?, contextType?, contextId? }. Context columns scope the thread to a doc/matter
([2026] CC-OPBOX 83; typed, no jsonb).
Call POST /v/conversation.create with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool conversation.create.
Getconversation.get
| Property | Value |
|---|---|
| Capability | conversation.read |
| Risk class | Read - autonomy L0 |
| Min. permission | Member |
| Availability | Core - always on (MCP tier 1) |
| Idempotent | No |
| Egress | None - in-box (pure Postgres, no outbound call) |
| Render schema | Yes - drives an inline chat artefact and a GUI panel |
the own thread + its messages (role + tools + citations), bodies UNSEALED for
the owner. { conversationId }. Tool/citation sidecar payloads unsealed alongside the body.
Call POST /v/conversation.get with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool conversation.get.
Listconversation.list
| Property | Value |
|---|---|
| Capability | conversation.read |
| Risk class | Read - autonomy L0 |
| Min. permission | Member |
| Availability | Core - always on (MCP tier 1) |
| Idempotent | No |
| Egress | None - in-box (pure Postgres, no outbound call) |
| Render schema | Yes - drives an inline chat artefact and a GUI panel |
the CALLER’s own threads, newest first, optionally scoped by context.
{ contextType?, contextId? }. Returns context + updatedAt per thread ([2026] CC-OPBOX 83).
Call POST /v/conversation.list with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool conversation.list.
Postconversation.post
| Property | Value |
|---|---|
| Capability | conversation.write |
| Risk class | Sensitive - autonomy L2 |
| Min. permission | Member |
| Availability | Core - always on (MCP tier 1) |
| Idempotent | No |
| Egress | None - in-box (pure Postgres, no outbound call) |
append a SEALED message to the caller’s own thread.
{ conversationId, body, role?, tools?, citations? }. role is a typed discriminator
(user|assistant|system); tools[] + citations[] are TYPED sidecar rows with sealed PII payloads
([2026] CC-OPBOX 82 - no jsonb blobs). ARCHIVED threads refuse; seq = MAX+1 (append-only).
Call POST /v/conversation.post with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool conversation.post.
Purgeconversation.purge
| Property | Value |
|---|---|
| Capability | conversation.write |
| Risk class | Write - autonomy L1 |
| Min. permission | Admin |
| Availability | Admin only (CLI/HTTP; never advertised over MCP) |
| Idempotent | No |
| Egress | None - in-box (pure Postgres, no outbound call) |
(AdminOnly/system). Retention sweep of ARCHIVED conversations older than
the cutoff. { olderThanDays?:int (default 90) }. Workspace-fenced via ctx.workspace_id (RLS-safe); a
platform-wide sweep runs this per-workspace under a system seat. DEFERRED (built, not wired): Class-1
data-retention cron, bearerless. NOTE: the frontend data-retention.ts:245 site purges the LEGACY
ai_chat_threads Prisma table; AI chat now writes the kernel conversation SoR, so this verb purges that.
Confirm the conversation_message FK is ON DELETE CASCADE before wiring (else delete children first).
Call POST /v/conversation.purge with a JSON body; returns JSON (or { error, code }). Not advertised over MCP (admin-only); reachable via the CLI and HTTP doors.
Rateconversation.rate
| Property | Value |
|---|---|
| Capability | conversation.write |
| Risk class | Sensitive - autonomy L2 |
| Min. permission | Member |
| Availability | Core - always on (MCP tier 1) |
| Idempotent | Yes |
| Egress | None - in-box (pure Postgres, no outbound call) |
set a thumbs-up (1) or thumbs-down (-1) rating on the caller’s own
conversation message. { conversationId, messageId, rating }. Rating must be 1 or -1.
Emits a workspace quality signal when thumbs-down count in the workspace reaches 3+ in 7 days.
Call POST /v/conversation.rate with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool conversation.rate.
Renameconversation.rename
| Property | Value |
|---|---|
| Capability | conversation.write |
| Risk class | Sensitive - autonomy L2 |
| Min. permission | Member |
| Availability | Core - always on (MCP tier 1) |
| Idempotent | Yes |
| Egress | None - in-box (pure Postgres, no outbound call) |
set the title of the caller’s own thread. { conversationId, title }.
Owner-only via own_thread (fail-closed); title is plaintext ([2026] CC-OPBOX 83). Sensitive/MEMBER.
Call POST /v/conversation.rename with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool conversation.rename.