Agents

DARS — the Dynamic Agent Response System that powers every chat turn on TRUE.

What this is

TRUE doesn’t run on a single LLM. It runs on a coordinated system of specialized agents called DARS — the Dynamic Agent Response System. The router is itself an agent: it decides which downstream specialists are involved and in what order before any model token streams back.

The DARS pipeline

Every user message enters a five-stage pipeline before a response is composed.

01
Intent Analysis
Classify the request: data lookup, narrative, signal, action.
02
Complexity Scoring
Estimate reasoning depth, latency budget, tool count.
03
Agent Selection
Pick the right specialists from the agent registry.
04
Execution
Parallel tool calls, oracle reads, on-chain queries.
05
Response Synthesis
Merge outputs into a single grounded answer with citations.

Specialist agents

The TRUE agent registry currently runs six core specialists, hosted on AWS AgentCore over Bedrock. Agents are stateless workers — context is held in the orchestrator, not the agent itself.

AgentDomainPrimary tools
price-agentQuotes, market data, OHLCVTRUE Quotes, Pyth, Chainlink
research-agentProject deep-dives, fundamentalsWeb fetch, on-chain RPC
news-agentHeadlines, sentiment, catalystsHighlights API, news feed
signal-agentSetups, risk-on / risk-off readsOHLCV, funding, oracles
memecoin-agentLong-tail discovery, securitySolana RPC, holder checks
execution-agentSwap routes, slippage, gasJupiter, route solver, SAE
Design Principle

Agents are narrow and replaceable. A specialist that can’t be swapped for a better one in under a day is too coupled to the orchestrator. The agent contract is intentionally small: input schema, output schema, tool allow-list, latency budget.

How escalation works

Most chat turns are handled by Claude Haiku 4.5 for its latency-to-quality ratio at scale. When the complexity score crosses a configured threshold — long context, multi-step reasoning, ambiguous intent across multiple tools — the orchestrator escalates to a Sonnet-class model. Escalations are logged with reason codes for audit; you can see them in the trace view of any turn.

How tool-use is gated

Every tool call passes through the orchestrator’s policy layer before it reaches the network. Tools have explicit allow-lists per agent (the news-agent cannot call swap_quote), an arg-shape validator that rejects malformed requests, and a per-turn budget so a single message cannot detonate the rate-limit bucket. Trace IDs propagate to every downstream tool so a misbehaving call is traceable to the originating turn.

Safety

Agent outputs are never auto-executed. Every execution path — swap, perp, agentic flow — flows through SAE after the agent has spoken, with the user’s signature in the loop unless agentic trading is explicitly opted in.

For Users

When you ask a question, the answer is composed by multiple specialists — that’s why the chat shows reasoning frames before the final reply. The badges next to a response indicate which sources informed it (Pyth, on-chain RPC, news feed). If a response looks confident but wrong, use Report an issue so the trace gets reviewed.

For Developers

Each chat turn emits an SSE stream with discrete frame types. To inspect tool use:

// Pseudocode for consuming the chat SSE stream
const res = await fetch('https://chat-api.true.trading/v1/chat', {
  method: 'POST',
  headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ message, session_id })
});

for await (const frame of parseSSE(res.body!)) {
  switch (frame.event) {
    case 'reasoning':   render.reasoning(frame.data); break;
    case 'tool_call':   trace.push({ tool: frame.data.name, args: frame.data.args }); break;
    case 'tool_result': trace.push({ result_preview: frame.data.preview }); break;
    case 'token':       render.token(frame.data); break;
    case 'done':        render.citations(frame.data.citations); break;
  }
}

Tool args are sanitized in the SSE preview (no bearer tokens, no full payloads). Full payloads remain server-side. Reproduction requests for an agent answer go to [email protected] with the trace ID from the response.

Safety, limits, failure modes

  • Hallucination on cold tokens. Long-tail memecoins with no oracle pricing surface as best-effort; the chat marks them with a confidence flag.
  • Tool timeouts. A specialist that exceeds its latency budget returns a partial answer with the missing pieces called out, never silent failure.
  • Escalation thrashing. Repeated escalations on the same conversation open a circuit-breaker and pin the model for the rest of the session.
  • Off-policy outputs. Anything that looks like an unsolicited execution instruction is filtered before the user ever sees it.

See also

  • Chat — the streaming runtime DARS produces frames into.
  • MCP — the tool surface DARS uses internally and exposes externally.
  • Agentic Trading — what happens after an agent decides something is actionable.
Last updated: