::docs :: concepts

answers you can check

Citations and sources, token-confidence marking, the groundedness check on every figure, and interrupt-and-correct.

::citations

Answers that drew on tools or documents cite their sources inline ([1]) and end with a Sources list mapping each number to the exact tool call or document behind it, trust-colored by origin. /trace source 3 shows the full material behind any citation; /trace answer shows the whole provenance picture. runtime.citations: false restores unadorned answers.

::confidence on screen

While the final answer streams, the daemon's per-token log-probabilities are captured and runs of consecutive low-probability tokens render red — live in the streaming tail, in the freeze editor, and on the final render. The receipt counts the uncertain spans. It is the model's own uncertainty, made visible where it lands.

  • runtime.confidence_threshold: auto (default) uses the synthesizer model's own calibrated threshold — "worse than 95% of this model's clean output" — from a shipped table covering the tier synthesizers; an uncalibrated model falls back to 0.20. Set a number to pin it. Regenerate the table with utilities/confidence_calibrate.py.
  • A run needs three or more consecutive low tokens; single uncertain tokens (an open word choice) are never marked.
  • Two-threshold hysteresis (runtime.confidence_exit_threshold, derived by default) keeps an open run from flickering off on one merely-unlikely token, and function words (the, of, is, …) never count toward or break a run.
  • runtime.confidence: false stops requesting logprobs entirely.

::every figure is checked

After a turn that observed something, every figure the answer states (three or more digits, or any decimal) is traced back to your words or the turn's tool results. A figure that traces to nothing gets one corrective regeneration; anything still untraceable is disclosed under the answer ("these figures could not be traced to any gathered result") rather than passed off as gathered. The inverse check makes sure the value the plan's own calculate step produced actually appears in the answer.

Upstream of that, calculate refuses a bare value (551) with a hint to write the actual arithmetic over gathered values — it cannot be used to launder a made-up number into a "computed" result. And before a value is persisted to disk, the semantic write gate verifies it actually came from the request or gathered results, failing closed when it can't.

::interrupt-and-correct

Press Esc while the answer streams: the stream freezes (✂ freezing…), an editor opens on the text so far, and when you save, the model continues from your edited prefix. Human-authored spans stay marked in the final answer and its audit record.

  • Pressing Esc mid-word lets the answer finish the word before freezing, so the editor opens on a clean boundary; a second Esc cuts immediately.
  • The edited prefix is trimmed of trailing spaces and tabs before generation resumes; newlines are kept; a resume without changes is not recorded as an edit.
  • On a resumed answer the figure checks only mark — your edit is never regenerated over.
  • Verified on the qwen3.5, qwen3.6, qwen3.8, and gemma4 families; a model outside the registry simply never arms the freeze key.

::honest disclosure

Skipped, blocked, or failed steps are disclosed in the answer's incidents note. An answer that came back empty still carries the incidents note and the Sources footer, and the recorded answer states that no answer text was produced. Trailers are gated on their own triggers, never on whether the prose happened to mention them.

note

Every model call now states explicitly whether the model may "think": only the planner keeps its hidden rationale (measured to matter for plan quality on small models); the judge, tool-argument generation, reasoning steps, and the streamed answer run without it. Every call carries an output-token bound so a looping generation ends as a truncated result instead of filling the context window.