# Read a session

> An open development session: header and metrics, the session timeline with coloured marks, the feed of messages and actions, service calls, “Follow”, phones.

An open session shows the developer’s work with the model the way it went: the **header** with
metrics, the **session timeline** with a mark for each step, the **feed** of messages and actions on the left and
the **inspector** of the selected action on the right. What the inspector shows for each kind of
action is on the [What exactly the agent did](/en/docs/buff-code/sessions/action) page.

_Illustration: The feed on the left, the inspector on the right; the session timeline above them takes you to any step of the session._

## Header and metrics

At the top there is the **“Development sessions”** back button, the session title (the first line of the developer’s first
message) and a line: **login** · **device** · **project** · **start day**.
If the last turn was less than five minutes ago, a green **“Live”** mark is next to it.

Header buttons:

| Button | What it does |
| --- | --- |
| **Ask** | ask the model a question about this session — [Ask about sessions](/en/docs/buff-code/sessions/ask) |
| **Follow** | keep the last step selected and show new turns as they appear — see below |
| **Markdown**, **JSON** | export the session as a file — [Export](/en/docs/buff-code/sessions/export) |

Under the buttons there is a line of metrics for the whole session: the **number of turns**; **tokens** — the sum and the breakdown
input · output · reasoning · cache (hover over the number to see cache read and cache write
separately); **model working time**; **charged** in roubles.

An owner who opened another developer’s session sees a warning under the metrics:
**“Someone else’s session”**: “You are viewing developer …’s session. Viewing and exporting are recorded in the
organisation’s audit log”. More — [Audit log and Buff Code](/en/docs/buff-code/sessions/audit).

## Session timeline

Under the header there is a strip with a mark for each **step**: a developer message or one action of
the model, left to right in time. The captions at the ends under the strip are the times of the first and last
step.

_Illustration: The session timeline (outlined): a mark for each action and message, coloured by the kind of action, errors in red; under the strip — “step i of N” and the legend._

**The mark’s colour is the kind of action.** The legend under the strip: **developer** · **terminal** ·
**file read** · **file edit** · **code** · **knowledge** · **error**. An action that
ended with an error — a command with a non-zero exit code, a tool refusal — is red, whatever
it is. The other kinds (search, handbook, question to the developer, web,
subtask) have their own colours; hover over a mark — a tooltip shows the time and the kind.

**How to move along the timeline:**

- **clicking a mark** selects the step: the inspector shows that action, and the feed scrolls
  to its line. Developer message marks are not clickable — the message is visible in the feed anyway;
- the **← and →** arrow keys (with the strip in focus) go to the neighbouring action;
- the **“To the last step”** button to the right of the strip — to the end of the session;
- the caption **“step 12 of 40 · 14:07”** under the strip — where you are now and what time it was.

**Find an error or an edit in ten seconds.** A red mark on the timeline is an error: clicking it
opens the command and its output with the exit code in the inspector. Green marks are file edits:
a click shows the diff. If there are many edits, the inspector’s **“Files”** tab is faster: all files of
the session with the number of changes; a click takes you to the file’s last edit.

## The feed

The feed is the session’s history in the order it happened. Its header shows the **number of messages** and the
**“Service calls (N)”** checkbox (see below).

- **A developer message** — a bubble on the right captioned “login · hh:mm”. Long text
  (more than twelve lines or about a thousand characters) is collapsed; **“Show in full”** expands it, **“Collapse”** folds it back.
- **The model’s answer** — captioned “Buff Code · hh:mm”, and under it:
  - **“Model’s reasoning”** — an expandable block, if the model reasoned before answering;
  - **the answer text** — as Markdown, with code and lists;
  - **“Model error”** — a red badge with the refusal text, if the turn failed;
  - an **“N actions”** block — a line per action: the icon of the kind, the **verb** and the
    **object** — “Ran · `make test`”, “Edited · `src/api.py`”; edits show **+N −N**
    added and removed lines, a command with a non-zero exit code has a red **“exit code N”**
    mark, a failed tool — **“error”**, an action without an answer — a spinner
    “awaiting reply”. If the block has at least one error, its header has a **“has an error”** mark;
  - the turn line: **model · time · tokens · ₽**.
- **“A tool result for a call missing from the record”** — a result whose call did not make it into the
  record (the stream broke off); shown as is.

Clicking an action line selects it in the inspector. On a wide screen the inspector is always visible:
until you select anything, it shows the session’s last step.

_Illustration: The feed and the inspector side by side: in the feed — the model’s answer and the “N actions” block with “verb · object” lines; on the right — the selected action in full._

## Service calls

Besides the work of the developer and the model, the record has **service** messages: compaction of a long
conversation and what Buff Code inserts by itself — a reminder to the model about the “Plan” mode, the next
turn of a goal. They are recorded like the rest, but hidden in the feed and on the timeline by default,
so as not to get in the way of reading the work. The **“Service calls (N)”** checkbox in the feed header shows them:
each is marked “service call” and captioned “Buff Code” — the developer did not write it.
N is how many such turns there were. They are always included in the [export](/en/docs/buff-code/sessions/export).

_Illustration: The checkbox is on (outlined): the feed now shows the “Plan” mode reminder that Buff Code inserted by itself. The developer’s name and device are blurred in the screenshot._

## “Follow” and “Live”

**“Live”** in the header marks a session whose last turn was less than five minutes ago: the developer
is most likely still working.

**“Follow”** is a mode, not a loader. While it is on, the last step stays selected, the feed
stays scrolled to the end, and new turns arrive by themselves: the server reports by push that
a turn has appeared in the session, and the tail of the feed is appended without a reload. For a live session the mode is on
from the start — the button is highlighted. As soon as you select an earlier step, following
turns off; the button turns it back on. You can also turn on “Follow” for a long-finished
session — then it simply keeps the last step.

This is handy when a newcomer is getting to grips with a project and the team lead wants to see where the model is taking them,
without looking over their shoulder.

## “Show more”

A long session arrives in pages. When the feed ends before the session does, there is a
**“Show more”** button at the bottom; it appends the next page. The session timeline and the “Files” tab
count only the loaded part; the export and questions about the session take it in full.

## On a phone

On a narrow screen the feed takes up all the space, and the session timeline is shown without the legend. The inspector
opens as a **bottom sheet** when you tap an action line or a timeline mark; the
**“Close”** button or a tap outside the sheet hides it. The “Action” and “Files” tabs in the sheet are the same.

<div className="grid gap-4 sm:grid-cols-2">
  _Illustration: On a phone the session timeline has no legend, and the feed is full width._

  _Illustration: The inspector opens as a bottom sheet; the “Close” button closes it._

</div>
