Session
The session skill keeps an agent's conversations. It is the same skill in both SDKs.
skills:
- session # conversations kept on this machine
- session: {backend: robutler} # and yours on Robutler too, as chats with the agentIn the Chat
The chat always keeps its conversations on this machine, and /resume
continues them (see Conversations). The session skill
decides whether they are also kept on Robutler.
With backend: robutler, each conversation you have with the agent in the
terminal is also your chat with it on Robutler: your messages as you, its
replies as the agent. It appears in your chat list on the web, and /resume on
another machine, or after you continued it on the web, lists it and picks it
up. Recording a turn does not make the agent answer again on Robutler and does
not notify you.
This needs two things: you signed in (webagents login) and the agent on
Robutler (webagents publish, which links the folder to it). Without either,
conversations stay on this machine and the chat says which one is missing.
Served
Under webagents serve or webagents daemon, the skill keeps each verified
caller's conversation when the request names it:
{
"model": "openai/gpt-4o-mini",
"messages": [{"role": "user", "content": "Plan the launch."}],
"metadata": {"session_id": "launch-plan"}
}- Your own requests, verified as the agent's owner, are kept with the chat's
conversations, so
/resumefinds them. - Anyone else's are kept under
callers/<hash>/beside them, one namespace per caller: a session id only ever names a conversation of the caller who sent it. - An anonymous caller's conversation is not kept, and neither is a request that names no session.
A request carries the whole conversation, as an OpenAI-style client sends it,
and what is kept is that conversation and the reply. Conversations that reach
the agent through Robutler are chats there already, so backend: robutler
changes nothing for a served agent.
Where Conversations Live
~/.webagents/sessions/<folder>/<agent>/<id>.json # yours
~/.webagents/sessions/<folder>/<agent>/callers/<hash>/<id>.json # other callers'Files are readable only by you. Under --profile <name> they move to
~/.webagents-<name>/.
In Code
import { SessionSkill } from 'webagents/skills/session';
const agent = new BaseAgent({ name: 'helper', skills: [new SessionSkill({ agentDir: process.cwd() })] });