tell ask or through MCP, the response comes back as blocks — a streaming JSONL format that renders as rich UI on any platform. The same JSON produces charts in your terminal, on the web dashboard, and in native apps.
How it works
An LLM generates one JSON object per line. Each object has at field that identifies its type. Your client reads lines as they arrive and renders each block immediately — no waiting for the full response.
Block types
Tell supports 8 block types:| Type | What it shows |
|---|---|
text | Plain text paragraph |
metric | Single KPI — value, unit, trend, color |
metrics | 2-4 KPIs in a row |
chart | Line, bar, area, pie, or sparkline |
table | Rows and columns with headers |
status | Health indicator (healthy, degraded, down, unknown) |
callout | Alert box (info, warning, error, success) |
code | Source code with syntax highlighting |
metric
A single number with optional context:title— what the number measuresvalue— the number itselfunit— display unit (users, %, ms, etc.)change— percentage trend (positive = up, negative = down)color— hint:success,error,warning,info, ordefault
metrics
Multiple KPIs side by side:chart
Data visualization with five chart variants:v— chart variant:line,bar,area,pie, orsparklinedata— array of[x, y]pairs (x is typically a timestamp in milliseconds)
▂▃▅▆▇).
table
Structured data with headers:status
Health indicators for systems or components:healthy (green), degraded (yellow), down (red), unknown (gray).
callout
Highlighted notices:info, warning, error, success.
code
Source code with optional syntax highlighting:Streaming
Blocks stream as JSONL — one complete JSON object per line. The parser buffers partial data and emits blocks as each line completes. If a line can’t be parsed, it’s reported as an error without crashing the stream. This means LLM output renders progressively as it’s generated.Where blocks appear
tell ask— CLI responses rendered in the terminal- MCP tools — AI assistant responses in editors and chat interfaces
- TUI — interactive dashboard views
- Web dashboard — rendered as React components