A chat that shows its work
vocion-v2.1.5 makes agent chat legible and safe: a typed hierarchical Activity trace with tool drill-in, true token streaming, inline [n] citations with a two-level Sources drawer, recommended-action cards that land in human review, and a never-auto-send guard on outbound email.
Until now, agent chat was opaque in three ways at once. You asked a question, watched a spinner, and got the whole answer dumped in one block — the runtime buffered the full reply before emitting a single delta. Whatever the agent did in the meantime — which tools it called, what a delegated specialist actually searched — was invisible, because the old event projection threw away everything a subagent did internally. And when the answer arrived, its claims were unverifiable: no way to tap a sentence and see which document backed it. vocion-v2.1.5 (the 2026-07-20 through 2026-07-24 sprint) rebuilds the chat surface around one idea: the agent shows its work, and a human signs off before anything leaves the building.
What's new
- Typed hierarchical trace events. The runtime now consumes the raw
streamEvents(v2)stream and maps it — in the pure, unit-testedtraceEmitter— into typed, actor-attributed trace nodes (reason | tool | skill | search | delegate | draft). Delegated work nests under the delegation node, so a specialist's reasoning, tools, and citations are no longer lost. - Redesigned Activity trace with tool drill-in. Minimal by default —
Worked it out · N steps · M specialists · K sources— and explorable on demand. Tool, search, and skill nodes expand to a call-detail panel: tool name, compact args, a curated result preview. Never a raw dump. - True token streaming. The old buffer-then-sanitize pipeline (155 lines of dump-scrubbing) is gone. The answer streams token-by-token as lead text arrives; chain-of-thought routes to the trace, everything after it to the message. Proven live: one
response_deltabecame nine on a short turn, zero dump markers. - Inline citations and a two-level Sources drawer. Grounded claims carry tappable
[n]superscripts with per-turn global numbering. Tapping one opens the Sources drawer focused on that source; tapping the card slides into a detail pane with the full excerpt and an "Open in" link. Specialist-found sources are tagged "via ‹specialist›". - Citations survive reload. Cited documents persist with the message (
documents_json) and rehydrate on refresh — transcript, superscripts, and drawer all restore. - Recommended-action cards. The agent surfaces a concrete next step as a clickable card. Tapping it creates a gated review item just in time — nothing is written until you tap, nothing executes until you approve. Two or more recommendations render as an in-chat triage stepper (x of N, Skip / Save for later / Queue all).
- Never-auto-send guard + edit-then-approve.
gmail.sendalways requires an explicit human approve, and you can edit the draft's To/Subject/Message before approving. - Resumable mid-turn streams. Refresh or lock your phone mid-turn and the client replays what it missed, then re-attaches live. Proven: hard reload ten seconds in, replay from event 30, a 5,342-character answer intact.
- Anti-slop voice directive. A core output rule for every agent: no stoplight emoji, no templated scaffolding, no "Want me to draft all three?" closers. Density over decoration.
Why we built it
An agent you can't inspect is an agent you can't trust with real work. Every feature here is the same move: replace "trust me" with structure. The trace is typed data, not prose about what happened. Citations are per-actor and persistent, not decorative. Streaming means you watch the answer form instead of auditing it after the fact.
The never-auto-send guard deserves its own paragraph, because it's safety as structure, not prompting. No prompt tells the agent to be careful with email — instead, the action layer itself refuses to auto-execute gmail.send or send_email, regardless of any configured trust rule. Outbound messages to real people always land in the review queue, where a human edits, then approves, then sends. It fails safe: the only failure mode is an item waiting for you. We'll revisit this only once trust reporting and explicit opt-in exist — until then, the guard is not configurable off.
Where to find it
Chat lives at /dashboard/chat. The Activity trace renders inline on desktop and as a bottom drawer on mobile; the Sources drawer opens from any [n] superscript or the Sources pill. Gated sends appear in the review queue with editable drafts and "Approve & send". In code: packages/core/src/services/agents/traceEmitter.ts, packages/core/src/features/dashboard/chat/{WorkTimeline,SourcesPanel,RecommendedActionStack}.tsx, and stream resume at /rpc/agent/stream/resume.
Links
- GitHub release: https://github.com/vocion/vocion-core/releases/tag/v2.1.5