A session (a sitting) is one harness conversation. session_id is the spine. Spend, type, episodes, touches, path-product, and scope all hang on it.

The list

Dashboard → Sessions. Each row is a sitting: type, product / objective, tokens, cost. Filters:
  • principal
  • window
  • type
  • objective
  • touches
  • who opened it (initiated=subagent)
  • minimum cost
Episode and touch chips sit beside the primary. Unknown sittings (no objective window) are not hidden. They are unplaced. The list does not need the content key. It is metadata.

The timeline

Open a sitting. You get the conversation, turn by turn, with per-turn cost joined from the ledger. The header carries the whole sitting’s Tokens / Cost.
  • Human and agent messages are open. Long ones clamp.
  • Tool calls fold behind a computed heading (counts and tool names).
  • Agent reasoning folds.
  • Subagent messages fold. A briefing an agent wrote to a subagent is captured with the human role because it is the user side of that subagent’s conversation. It is not a person. The control Show human subagent messages reveals them. They are on the page either way.
An unreadable turn (missing key, shredded, corrupt) is drawn as unreadable. It is not drawn as silence.

Set type from the page

Click the type value and type. Enter saves. Escape or click away abandons.
  • A sitting with no type reads unannotated and is editable the same way.
  • The write is declared-family. It outranks judge and heuristic.
  • Re-typing replaces. Emptying does nothing. Deleting is a different act.
  • Minted shares, snapshots, and embedded hosts do not get the writer.
See Type.

Share

The share control is top-right of the session page, when sharing is configured. See Share.

CLI

assay transcripts list
assay transcripts show --session <id>
assay turns --session <id>
transcripts show is the store inspection form. turns is the debug timeline. The dashboard is the readable one.