Session Plugin

Session persistence for conversation history. Save and resume sessions across client restarts with auto-save, checkpointing, and session management.

Name session
Type Client-configured Plugin
User Commands save, resume, sessions

Features

  • Auto-save: Save on exit, interval, or after N turns
  • Auto-resume: Optionally resume last session on startup
  • Session descriptions: Model-generated names for easy identification
  • Session limits: Automatic cleanup of old sessions
  • Token accounting: Track token usage per session
Basic usage
from shared.plugins.session import FileSessionPlugin
from shared.plugins.session.base import SessionConfig

# Create session plugin with config
session_plugin = FileSessionPlugin()
session_plugin.initialize(SessionConfig(
    storage_path='.jaato/sessions',
    auto_save_on_exit=True,
    checkpoint_after_turns=5,
))

# Configure on client
client.configure_session(session_plugin=session_plugin)
User commands
> save
Session saved: 20240115_143022

> sessions
Available sessions:
  20240115_143022 - "Refactoring auth module"
  20240114_091500 - "Setting up CI/CD"
  20240113_160000 (unnamed)

> resume 20240114_091500
Session resumed: 20240114_091500

SessionConfig

Storage Settings

ParameterTypeDefault
storage_pathstr".jaato/sessions"

Auto-save Settings

ParameterTypeDefault
auto_save_on_exitboolTrue
auto_save_intervalint | NoneNone
checkpoint_after_turnsint | NoneNone

Resume Settings

ParameterTypeDefault
auto_resume_lastboolFalse

Naming Settings

ParameterTypeDefault
request_description_after_turnsint3

Cleanup Settings

ParameterTypeDefault
max_sessionsint20
Configuration examples
# Minimal: just save on exit
config = SessionConfig()

# Aggressive checkpointing
config = SessionConfig(
    auto_save_on_exit=True,
    auto_save_interval=60,      # Every minute
    checkpoint_after_turns=3,   # After every 3 turns
)

# Auto-resume workflow
config = SessionConfig(
    auto_resume_last=True,
    auto_save_on_exit=True,
)

# Long-running sessions
config = SessionConfig(
    max_sessions=100,
    request_description_after_turns=5,
)

SessionState

Complete state saved for each session:

FieldTypeDescription
session_idstrTimestamp-based ID
historyList[Message]Conversation history
created_atdatetimeSession creation time
updated_atdatetimeLast save time
descriptionstr | NoneModel-generated name
turn_countintNumber of turns
turn_accountingList[Dict]Token usage per turn
user_inputsList[str]Original prompts
projectstr | NoneCloud project ID (if applicable)
locationstr | NoneProvider region (if applicable)
modelstr | NoneModel name
Session file structure
.jaato/
  sessions/
    20240115_143022.json
    20240114_091500.json
    20240113_160000.json
Session JSON format
{
  "session_id": "20240115_143022",
  "description": "Refactoring auth module",
  "created_at": "2024-01-15T14:30:22",
  "updated_at": "2024-01-15T15:45:00",
  "turn_count": 12,
  "turn_accounting": [
    {"prompt": 150, "output": 200, "total": 350},
    {"prompt": 500, "output": 1200, "total": 1700}
  ],
  "project": "my-project",
  "location": null,
  "model": "claude-sonnet-4-20250514",
  "history": [...]
}

User Commands

save

Save current session with optional description.

save [description]

resume

Resume a previously saved session by ID.

resume <session_id>

sessions

List all saved sessions with metadata.

sessions
User Input Restoration
When resuming a session, the plugin can restore original user inputs to the prompt history for readline/up-arrow navigation.
Command examples
> save "Working on auth refactor"
Session saved: 20240115_143022
Description: "Working on auth refactor"

> sessions
Available sessions:
  1. 20240115_143022 - "Working on auth refactor" (12 turns)
  2. 20240114_091500 - "Setting up CI/CD" (8 turns)
  3. 20240113_160000 (unnamed, 3 turns)

> resume 20240114_091500
Resuming session: 20240114_091500
Description: "Setting up CI/CD"
Turns: 8
Model: claude-sonnet-4-20250514

Session resumed successfully.