Skip to main content
Manage conversation routes.

tai conversations config-delete

Delete a per-target conversation config by (target_kind, target_name). Example: tai conversations config-delete agent assistant

tai conversations config-get

Show one per-target conversation config by (target_kind, target_name). Example: tai conversations config-get agent assistant

tai conversations config-list

List the per-target conversation configs (multichannel opt-in + first-contact greeting). Example: tai conversations config-list

tai conversations config-set

Create or replace a per-target conversation config. An UPSERT — a config for that (target_kind, target_name) is REPLACED if it exists (created is false for a replace). The target must EXIST. --greeting-template may reference at most the {pairing_code} placeholder; omit it (or pass an empty value is refused) for no greeting. Example: tai conversations config-set agent assistant --multichannel \ --greeting-template 'Hi! Pair another channel with {pairing_code}'

tai conversations create

Create or replace a conversation route. An UPSERT — a name that already exists is REPLACED, rebinding its execution_key along with everything else (created is false for a replace). A door=api route’s callback_secret is minted server-side and shown ONCE in the result; it signs the delivery callback and is never re-readable. There is no check that you can run the target — the execution key’s live grants bound the turn. A tool target may map the message to the tool kwargs (--payload-expr) and the result to the reply (--reply-expr); a tool reply of null/blank sends nothing. Example: tai conversations create chat-line --door channel --target-name relay \ --execution-key svc --channel twilio --identity +15550001111

tai conversations delete

Delete a conversation route by name. Example: tai conversations delete chat-line

tai conversations delete-person

Erase a linked person ENTIRELY — its aggregated bridge:@person:<id> thread (agent checkpoint, answer records, thread indexes and mode override across every route it spans), its person row, and every address→person index mapping. Idempotent: erasing an already-gone person is not an error (erased: false), and its aggregated checkpoint is forgotten regardless. A turn in flight on the aggregated thread is refused (409, retry once it drains). The same write grant that forgets a thread erases a person. Example: tai conversations delete-person 4f1c0e2a-...

tai conversations delete-thread

Forget one conversation thread — its agent checkpoint, its answer records and its thread indexes — so a later message on the same address starts a fresh memory. Forgetting is absolute: a valid id on its own route always succeeds, reporting removed: 0 when nothing was left to clear (an aged-out or never-seen thread), never a 404 — the agent memory is forgotten regardless. A route-keyed id must carry the route’s bridge:<route_name>: prefix, else it is refused (400); a person thread not on the named route is a 404. A turn in flight on the thread is refused (409, retry once it drains). The same write grant that creates a route lets you delete routes and forget threads. The thread id rides the query string, so an api-door id — which carries a percent-encoded principal — reaches the door spelled exactly as the listing showed it. Example: tai conversations delete-thread chat-line bridge:chat-line:+15550001111

tai conversations failed

List answer records whose delivery ended failed (admin only). Example: tai conversations failed

tai conversations get

Show one conversation route by name (its callback_secret is withheld). Example: tai conversations get chat-line

tai conversations get-message

Read one conversation answer record. Any holder of the conversations read grant reads any record on the route, whichever door it arrived through; a non-admin caller gets the caller-safe projection, with the internal error detail withheld. Example: tai conversations get-message chat-line 4f1c...

tai conversations get-person

Read a person — its identity, folded addresses and stored locale (the BCP 47 tag the rendering layer resolves text against, or null when none is known). Example: tai conversations get-person 4f1c0e2a-...

tai conversations list

List conversation routes (each row’s callback_secret is withheld). Example: tai conversations list

tai conversations mode-get

Show a thread’s control mode and where it comes from (a per-thread override, or the route’s default). Example: tai conversations mode-get chat-line bridge:chat-line:+15550001111

tai conversations mode-set

Set a thread’s control mode override. agent runs the target turn on the next inbound message; manual suppresses it so an operator answers by hand, while platform control turns (pairing, greeting) still run. The same write grant that forgets threads sets a thread’s mode. Example: tai conversations mode-set chat-line bridge:chat-line:+15550001111 manual
Search a route’s answer records by text, across all its threads (admin only). Matches an inbound message or an answer containing q. A bounded server-side scan, so a page that spent its budget reports truncated: true (matches may lie beyond it). Example: tai conversations search chat-line --q widget

tai conversations send

Send a message BY HAND into one thread, delivered as the route identity — no turn runs. Allowed in either mode and it never flips the mode. A route-keyed id must carry the route’s bridge:<route_name>: prefix (else 400); a person thread not on the named route is a 404. --address picks the send target on a linked person’s aggregated thread and must be one of the person’s addresses; without it the target is the thread’s newest record, and an empty person thread with no --address is a 400. A target that keeps thread memory gets the message appended to that memory as an assistant reply; a target with no thread memory skips it. The thread id rides the body, so an api-door id — which carries a percent-encoded principal — reaches the door spelled exactly as the listing showed it. Example: tai conversations send chat-line bridge:chat-line:+15550001111 --text 'On it.'

tai conversations set-person-locale

Set (or clear) a person’s stored locale — the operator override the rendering layer resolves text against, winning over the channel-seeded value on every later turn. Omit locale to clear it back to no-locale-known. The same write grant that forgets a thread sets a person’s locale. Example: tai conversations set-person-locale 4f1c0e2a-... he-IL

tai conversations threads

List a route’s conversation threads, newest activity first (admin only). --status and --address filter the listing with a bounded server-side scan; a page that spent its scan budget reports truncated: true (matches may lie beyond it). An unknown --status is refused (400). Example: tai conversations threads chat-line --page 1 --status failed

tai conversations transcript

Read one thread’s transcript. Any holder of the conversations read grant reads any thread’s transcript on the route; an unknown thread or route is a plain 404. --order asc (the default) reads oldest first; --order desc reads newest first, so page 1 always holds the latest messages — the order a live tail wants. The window pages that order from its own end. --q filters to matching records with a bounded server-side scan; a page that spent its budget reports truncated: true, and under --q a thread with no match reads as an empty page rather than a 404. The thread id rides the query string, so an api-door id — which carries a percent-encoded principal — reaches the door spelled exactly as the listing showed it. Example: tai conversations transcript chat-line bridge:chat-line:+15550001111