opbox

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

PropertyValue
Capabilityconversation.write
Risk classSensitive - autonomy L2
Min. permissionMember
AvailabilityCore - always on (MCP tier 1)
IdempotentYes
EgressNone - 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

PropertyValue
Capabilityconversation.write
Risk classSensitive - autonomy L2
Min. permissionMember
AvailabilityCore - always on (MCP tier 1)
IdempotentNo
EgressNone - 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

PropertyValue
Capabilityconversation.read
Risk classRead - autonomy L0
Min. permissionMember
AvailabilityCore - always on (MCP tier 1)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)
Render schemaYes - 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

PropertyValue
Capabilityconversation.read
Risk classRead - autonomy L0
Min. permissionMember
AvailabilityCore - always on (MCP tier 1)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)
Render schemaYes - 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

PropertyValue
Capabilityconversation.write
Risk classSensitive - autonomy L2
Min. permissionMember
AvailabilityCore - always on (MCP tier 1)
IdempotentNo
EgressNone - 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

PropertyValue
Capabilityconversation.write
Risk classWrite - autonomy L1
Min. permissionAdmin
AvailabilityAdmin only (CLI/HTTP; never advertised over MCP)
IdempotentNo
EgressNone - 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

PropertyValue
Capabilityconversation.write
Risk classSensitive - autonomy L2
Min. permissionMember
AvailabilityCore - always on (MCP tier 1)
IdempotentYes
EgressNone - 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

PropertyValue
Capabilityconversation.write
Risk classSensitive - autonomy L2
Min. permissionMember
AvailabilityCore - always on (MCP tier 1)
IdempotentYes
EgressNone - 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.