What a session is
A session is one persistent conversation thread between you and an agent. It lives in the daemon, not in any client: the transcript, tool events, and resume state survive daemon restarts, and every client — web UI, CLI, TUI, editor, IM channel — sees the same session. Closing a browser tab or terminal never loses a conversation. Each session records immutableOperationSource provenance describing the surface,
client, and server-stamped semantic transport that created it — see
operation-source.md.
Standalone chats and project sessions share this contract. A project is the durable
workspace and member environment; each conversation under it is a separate Session
with its own transcript, member bindings, lifecycle, and optional Plan. See
project-sessions.md.
Creating and continuing a session
monad chat is the conversational entry point:
session commands give finer control:
monad, then the workspace home) and in
monad tui; the composer there picks the agent before the first message. See
the web UI.
Inside any conversation, typing / opens the command and skill menu: /new
starts a fresh session, /sessions lists them, /switch changes the active one,
and /handoff summarizes the current conversation and continues it in a new
session. The same commands work from every surface, including IM channels. See
skills.md for the skill side of the / menu.
Branching and restoring
Use these when you want to explore without losing the original thread:- Branch copies history through the selected message into a new independent session. The source is untouched, and later edits to either session do not affect the other. Use it to try a different approach, ask a side question with full context, or compare two directions.
- Restore rewinds a session in place to an earlier message checkpoint, discarding everything after it. Use it when a conversation went off the rails and you want to redo from a known-good point. Unlike branch, this rewrites the session itself, so the web UI asks you to confirm.
OperationSource is not a client-configurable permission list;
see operation-source.md.
Approvals
When the agent wants to run a high-risk tool — shell commands, file writes outside its sandbox, self-authored skills, and similar — the call pauses at the approval gate until a human answers. The turn blocks; nothing executes while the request is pending. From the CLI,monad approval list shows what is waiting and monad approval allow
or monad approval deny answers it; --scope <once|session|agent|global> decides how
long the decision is remembered. In the browser and TUI the same request appears as an
approval card in the transcript, naming the tool and its input, with these choices:
- Approve once — allow this single call.
- Approve for this session — remember the decision for the rest of the session.
- Always allow — remember it globally. Tools that control your real machine (host-control) never offer this scope; they can be allowed at most per session.
- Deny — refuse the call; the agent is told and continues without it.
Agents
An agent is the configured persona a session runs with: its name, system prompt, model profile, skill set, tool exposure, sandbox mode, and limits. One daemon can define many agents; each session binds to exactly one at creation. If you don’t pick one, the daemon uses the default agent (agent.defaultAgentId in
agents.json).
Agents are defined under agent.agents in agents.json. Drive the roster from the
CLI:
modelAliasand per-role model overrides — e.g. a cheaper model for memory work.skills— per-agent skill auto-load overrides (see skills.md).atoms— which tools and capabilities the agent may use.sandbox,maxTurns,maxBudgetUsd— containment and spending limits.
agentId field on
the create-session API, or the agent picker in the browser composer. A session’s agent
is fixed at creation; to move a conversation to a different setup, use /handoff or
branch into a new session created with the other agent.
Watching sessions across clients
Because sessions live in the daemon, any client can observe a session another client is driving. A conversation started from Telegram shows up in the web UI’s session list, and its replies stream there live;monad session watch <id> tails
the same events in a terminal. Selected write and branch paths currently apply a
server-side semantic-transport containment check, so observing a session does not
imply that every ingress may mutate it. This is an explicit temporary architecture
exception, not a configurable origin policy; see
operation-source.md.
Where your data lives
The daemon home directory is~/.monad on macOS, the XDG directories on Linux,
and %APPDATA%/monad on Windows. MONAD_HOME overrides these locations. See
runtime.md for the complete transport and security model.