Chat
Chat is the surface where everything else shows up. It's the runtime for DARS, not a thin wrapper around a model.
What chat actually does
When a user sends a message, the chat backend opens a Server-Sent Events stream and pushes back five kinds of frames: reasoning chunks, tool-use frames, tool-result previews, final answer tokens, and a terminal done frame with citations. The client renders all five differently — reasoning is shown in a thinking-mode visualizer, tool use renders as inline pills, and the final answer streams character by character.
# SSE frame types
event: reasoning # thinking-mode visualizer
event: tool_call # tool name + sanitized args
event: tool_result # compressed payload preview
event: token # final answer streaming
event: done # turn complete + citations
Default model
Chat runs on a fast Anthropic model by default, chosen for latency at scale, and escalates to a stronger one when the orchestrator judges the question needs it. We do not pin a version on this page: the routing changes as models improve, and a documented version number would be wrong within weeks.
Memory model
Chat sessions are persisted per wallet. The orchestrator carries a sliding window of the conversation plus a long-term summary updated at session boundaries. The user-visible Reset chat button clears the window but keeps the long-term profile, which feeds personalization (preferred assets, time-zone, language). To wipe the long-term profile entirely, use Settings → Privacy → Erase profile.
Quick actions
Twelve curated prompts ship as one-tap entry points, translated into eight languages and updated based on usage telemetry.
- 60-Sec News — global market debrief in one minute.
- What’s Hot — top movers and unusual flow.
- Surprise Me — opportunistic asset surfacing.
- Dip Alert — local lows worth a closer look.
- Bull or Bear This Week — directional read with reasons.
Public-facing surfaces avoid the words trading, investing, finance, financial. Use thought, signal, read, flow instead. This isn’t a stylistic preference — it’s a regulatory constraint that keeps the surface compliant in the jurisdictions TRUE serves.
Chat works in eight languages. Switch with the language selector in the top nav — your conversation history follows you. Voice input is available on mobile. Quick actions surface what’s most relevant to your watchlist; you can pin or hide any of them.
TRUE chat is an in-product surface, not a public API. There is no bearer-token chat endpoint you can call from your own backend today, and the host that used to be named here does not answer. If you want TRUE’s intelligence in your own client, use the MCP server: it exposes the same tools the chat answers are built from, and it is the surface we support for third parties.
The frame shapes below are documented because they describe how the product behaves, which matters if you are reasoning about latency or building on the MCP tools that sit underneath.
A turn looks like this on the wire:
{
"message": "What's SOL doing today?",
"session_id": "ses_01JX...",
"locale": "en",
"stream": true
}Streaming response is SSE with the frame types above. Reconnection logic should resume from the last event: token cursor; the server idempotently re-emits any token after the cursor on reconnect. Idempotency keys (Idempotency-Key header) deduplicate retried POSTs within a 24-hour window.
// Minimal TypeScript client
const r = await fetch(CHAT_ENDPOINT, { // in-product surface; see the note above
method: 'POST',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
'Idempotency-Key': crypto.randomUUID(),
},
body: JSON.stringify({ message, session_id, stream: true }),
});
const reader = r.body!.getReader();
const decoder = new TextDecoder();
let buf = '';
while (true) {
const { value, done } = await reader.read();
if (done) break;
buf += decoder.decode(value, { stream: true });
// parse SSE frames out of `buf` and dispatch...
}Error frames carry event: error with a structured payload (code, retryable, message). 429s include Retry-After. See Rate Limits for the full table.
Never paste seed phrases, private keys, or recovery phrases into chat. Chat content is logged for abuse-prevention and quality review, and even encrypted-at-rest logs are an unnecessary attack surface for secrets that should never leave your wallet. The chat will refuse a message that looks like a seed phrase, but the only safe rule is: don’t type it.
Safety, limits, failure modes
- Streaming dropouts. Reconnect with the cursor from the last
tokenframe; the server resumes from the next token deterministically. - Idempotency window. 24 hours. After that, the same key on a new POST creates a new turn.
- Sliding window size. Last 30 turns by default; older turns roll into the long-term summary.
- Rate limit on free tier. 60 requests / minute / token. Higher tiers available for partners.