A reply from DataMind Oda can carry tables, code, visuals and links, and it shows its work as it goes. Everything Oda does in a chat is recorded in order, and the chat draws that record as the transcript: your messages, the work in between, and the answers. This page explains how the transcript is laid out, how to read an answer, follow its steps, and check what a turn used. The chat around it is covered in Chat with Oda.
The layout of a chat
The conversation is one centred column of messages, between the header and the message box.
Your messages appear in bubbles, aligned to the right. An answer from Oda runs the full width of the column as formatted text, so a reply with headings, lists or code reads as one document.
The chat draws your message as you send it; when the chat's record confirms it, the saved copy replaces it in place, so you never see two copies.
A message can be marked with what came with it: a reference to another chat shows as Referenced session · {labels}, and lines taken from the editor as From the editor · {labels}.
A turn reads from top to bottom: your message, the work Oda did, and the answer.
A chat reopens at the place you were reading. A chat with no saved place, such as a new one, opens at its newest message.
What a reply can contain
Headings, lists, quotes and tables, written to be read as a document.
Task lists, shown with checkboxes that mark state; they cannot be ticked.
Code blocks with the language named in their banner. Use Copy in the banner to copy the code; the button shows Copied for a moment. Line numbers stay out of what you copy.
Web links (http and https), which open when you select them. Other link targets, such as a javascript: address, stay as plain text. A full web address written as inline code becomes a link too.
Images, shown in place; an image that cannot load leaves its description text behind. Images that sit together in one reply tile into a single gallery, and a run of text between them starts a new gallery. Each gallery stays where the reply placed it.
Footnotes: numbered markers in the text and the notes at the end of the reply. The markers are not links.
HTML written in a reply stays literal text. A live page is something Oda builds on purpose; see HTML pages in chat.
When reasoning is hidden, the gap it leaves is closed, so the answer keeps its normal spacing.
Link into your files
A reply can point at a file in your workspace and at a line inside it:
path/to/file#L24 opens the file at line 24; #L24-L30 opens it at the start of the range.
The link carries a small icon for the kind of file.
File links become live only after the answer settles. While the reply is still being written they appear as plain text, because the names and links in it are not final yet.
Selecting a link opens the file in a preview beside the chat, scrolled to the requested line. The page you are on does not navigate away. See Preview files in Oda.
Tables that scroll sideways
A narrow table fills the width of the chat and wraps its text. A table with four or more columns keeps its natural width instead and can use the full width of the transcript, beyond the message column; when it is still too wide, it scrolls sideways, so its columns stay aligned. A table inside a quote always fills the column and wraps.
Move the pointer over the table, or focus it, to reveal the scrollbar.
With the table focused, the arrow keys scroll it.
Charts, KPIs and diagrams
A reply can carry visual blocks that render live in the chat instead of showing as code:
chart blocks render as charts and kpi blocks as KPI cards; both are covered in Charts and KPIs in chat.
Only those exact fence names render. A similar name, such as charts or kpis, stays an ordinary code block.
A block whose opening line runs the chart type into the fence tag is repaired and still renders.
Formulas and other typeset math
Formulas written with $...$, $$...$$, \(...\) or \[...\] are typeset; a numbered formula keeps its number, such as (1).
While the answer is still being written, a formula is shown as written. It is typeset once the reply settles, so an unfinished formula never flashes an error.
A formula that cannot be parsed shows its source in the error colour instead of typesetting.
While an answer is still being written
New text appears as it is generated, and a piece such as a footnote or a reference-style link can show as plain text until the reply settles.
A code block appears as plain text first and gets its colours a moment later, when the block is visible and its language is ready.
Nothing is shown as finished before it is: incomplete parts render as written text rather than being guessed at.
The steps of a turn
Every step of a task appears in the chat as a row, so an answer shows its work:
While Oda is thinking, the process row shows that it is running: its label reads Deep diving..., and its controls are disabled until it settles.
Think opens the model's reasoning for the turn. Asked questions opens the question the turn asked, with its answer state, for example Ask question 1/1 answered.
Every other step (a file read, a change, a command, a search) is a compact row with a one-line summary. Select the row, or press Enter or Space, to expand it; Inspect opens the recorded view of a step when one was kept.
When a card holds more than it can show, it says so rather than pretending to be complete: a search summary reads Showing 9 of 42 matches · 3 files, and a truncated source list is marked as truncated.
Once the reply arrives, the process row folds behind a single control; expand it again whenever you want to re-read the work. See Work details and process folding.
A turn that was stopped before it finished keeps a Stopped marker, and the material it had produced stays in the chat.
When Oda changes something you saved, such as a memory, a skill or a scheduled task, the row for that change is kept out of the folded work.
Such rows collect in a strip labelled Changes the agent made at the end of the turn, after the answer, so their controls stay within reach.
The buttons under an answer
Copy copies the message.
Branch into a new conversation makes a separate chat from the answer. It is enabled only on the last message of a completed turn; elsewhere the button stays greyed, with the tooltip Available only on the last message of a completed turn. See Edit, rewind and retry a message.
Usage (for example Usage 15.8K tok) opens the Turn usage dialog: the model that answered, the share of the context window the turn used, and the turn's token counts, including the reasoning part.
While a turn runs, an answer does not have its footer yet; the buttons appear as the turn settles.
Times on messages
Every message shows its time. A message from today shows the clock (HH:mm).
A message from earlier this year shows the short date beside its clock (m/d); a message from an earlier year shows the full date (y-m-d).
A running turn's clock updates each second.
Move through a long chat
The rail beside the chat marks every turn; select a mark, labelled Jump to turn 1 and so on, to go to that turn. Reading and navigating a chat covers the rail and the chat's statistics.
After you scroll away from the newest message, Back to bottom returns you to it.
Reading back loads older messages in pages, under Load earlier. While a part of the history loads, the transcript shows Loading history…; if the load fails, the line reads Failed to load history: {message} ({code}), naming the reason.
The context meter and the chat's tokens
A small ring in the message box's control row shows how much of the model's context window the chat is using, as a percentage. It stays hidden until both the usage and the model's capacity are known, and it never reads more than 100%.
Where the chat statistics are on, a line next to it shows the chat's tokens and cache rate, for example 66.8K tok · Cache hit 77%.
Select the ring to open the of context used panel: what the context holds (the system prompt, the tool definitions and the messages) and the share each part takes. The panel opens inside the window; Escape or a click outside closes it.
Notices in a turn
While you read an answer, a few rows and pills can appear:
If the model reaches its output limit, the answer stops part-way and a warning row follows: Output token limit reached. The earlier text stays in the chat; send continue to let the model carry on.
If a turn fails, a row says This turn failed and names the reason. Some failures, such as a rate limit or a temporary server problem, are retried on their own first; a retry row stays in the turn, and the failed attempt's partial output is dropped. Failures that retrying cannot fix end the turn.
If the connection to your company's server drops, a pill reads Disconnected, reconnect now; while Oda retries it reads Reconnecting, reconnect now, and Connected for a moment once it returns.
Messages like these, and what to do about them, live on Troubleshooting.
When content is not recognised
A chat can hold rows and blocks this version of the app does not know, for example when the chat was written by a newer version of Oda. They are drawn as labelled placeholders, such as Unknown surface event: {type}, Unknown content block or Extra content block, and the rest of the chat keeps working.
A long unknown payload is shown cut, with … truncated, {total} characters total under it.
Messages written for developers are not drawn in the chat at all.
Not everything the session records is drawn as a chat row. The record itself stays complete, and the Trajectory view can show it in full (The Trajectory tab).
When there is too much to show
A long context body is shown up to 20,000 characters, then cut with a note.
A long list inside a context row shows at most its first 200 entries, and a note counts the rest.
The one-line detail under a running step is kept to 160 characters.
A running group lists at most its three latest steps, and chains of nested tool calls are drawn up to 256 levels deep.
The record itself keeps the full content.
Questions, answered
Why do file links only work after the answer finishes?
File names and links in a reply are only final once the reply has settled, so until then they are shown as plain text. When the answer settles, the link becomes clickable and opens the file at its line in a preview beside the chat.
Why does a wide table scroll sideways instead of wrapping?
Tables with four or more columns keep their natural width and scroll sideways so the columns stay aligned with their headings; narrower tables wrap to the chat's width. Move the pointer over the table, or focus it, to reveal the scrollbar, and use the arrow keys to scroll it.
How do I copy code without the line numbers?
Use Copy in the code block's banner and paste it where you need it. The copy holds the code itself: the line numbers are drawn beside the code and are not included. The button shows Copied when the copy lands.
Where are the token details of a turn?
Open Usage under a settled answer (for example Usage 15.8K tok). The Turn usage dialog shows the model that answered, the share of the context window the turn used, and the turn's token counts, including how many were reasoning tokens.
What does the warning row after a cut-off answer mean?
The model reached its output limit, so the reply stopped part-way. The text before the cut stays in the chat; send continue and the model carries on from where it stopped.
Why do formulas show as plain text while an answer is still being written?
Math is typeset once the reply settles. While the answer is still being written, formulas are shown as written, which also means an unfinished formula never flashes an error. A formula that cannot be parsed keeps its source text in the error colour.
Why did the chat stop updating for a moment?
The connection to your company's server dropped. Oda shows the state as it goes: Disconnected, reconnect now, then Reconnecting, reconnect now while it retries, and Connected for a moment once it returns. If it does not recover, see Troubleshooting.
Why does a chart sometimes show as a code block?
Only replies carrying the exact chart, kpi or mermaid fences render as visuals. A similar fence name, such as charts or mermaidjs, is a code block on purpose, so a code example is never turned into a chart.
What does Stopped mean in a chat?
The turn was stopped before it finished, for example when you pressed Stop. What it had produced up to that point stays in the chat as its record, and Oda does not carry the turn on. Send a new message if you want to continue the work.
What does Changes the agent made show?
The rows for changes Oda made to your saved setup during the turn, such as saving a memory, creating a skill or changing a scheduled task. These rows are kept out of the folded work and gather in one strip, so their controls stay reachable after the turn.
What does Failed to load history mean?
A part of the chat could not be loaded, and the reason is named beside the message. Try the load again; if it fails the same way every time, the stored part of the chat may have a problem, which Session log problems explains.
What does an Unknown surface event row mean?
The chat met something this version of the app does not know how to draw, for example from a chat written by a newer version of Oda. It shows a labelled placeholder in that spot, and the rest of the chat keeps working.