Conversations
How messages, tool activity, todo lists, and session history work in the ML.ai panel.
Message structure
Each assistant message carries two streams that render together: the assistant's text, and a separately-streamed record of tool activity (file reads, edits, commands run). Both are attached to the same message rather than shown as disconnected log lines.
The Working block
Tool activity renders as a "Working" block:
- A spinner shows while a step is running; a check mark replaces it when the step finishes.
- A failed step stays expanded rather than collapsing away.
- Any row can be expanded to see its output.
- Once a group of steps completes, it auto-collapses to keep the transcript scannable.
- Fs.read app/robots.js
- Fs.read app/sitemap.js
- Fs.glob app/llms.txt/**/*
- Fs.read .env.local
- Permission requiredAllowAlwaysDeny
- Fs.read .env.example
Fix the refresh path. Show me the diff before writing.
Todo lists
For multi-step work, a todo list renders above the composer, attached to the message that produced it.
Todo lists refresh at turn boundaries, not continuously. Treat the list as a plan record from the last completed turn, not a live progress bar for the turn in progress.
Copying content
Copy controls are available on full responses, on your own messages, on individual tool call details, and on any expanded output or error text.
Clickable file paths
Any file path in a response, whether written as a Markdown link or as inline code like src/foo.ts:42, opens that file at that line when clicked.
@ in the composer is for selecting subagents, not for referencing files. Typing @ does not open a file picker.
Session history
Sessions are stored per workspace and persist across restarts. You can switch between sessions, create new ones, delete old ones, and see which sessions have runs currently in progress. Sessions are titled from their content, not from a timestamp; this includes sessions created by delegated background runs.
If you're upgrading from a version of ML.ai that stored history per Git branch, a one-time recovery step migrates that history into the new per-workspace scheme the first time you open the panel.