Skip to main content
The Session system provides SQLite-backed persistence for conversations, extensions, and metadata in Goose.

Overview

Sessions store:
  • Conversation history (messages)
  • Extension states (enabled MCP servers)
  • Token usage metrics
  • Working directory and metadata
  • Recipe configurations

Core Types

Session

Represents a Goose conversation session.
Source: crates/goose/src/session/session_manager.rs:70-96
String
required
Unique session identifier (format: YYYYMMDD_N)
PathBuf
required
Directory where session tools execute
String
required
Human-readable session name
bool
required
Whether name was set by user (vs auto-generated)
SessionType
required
Type of session (User, Scheduled, SubAgent, Hidden, Terminal, Gateway)
ExtensionData
required
JSON blob storing extension states
Option<Conversation>
Full message history (only loaded with include_messages=true)
Option<i32>
Tokens used in the last LLM call
Option<i32>
Total tokens used across all LLM calls in this session

SessionType

Source: crates/goose/src/session/session_manager.rs:25-35

SessionManager

Manages session lifecycle and persistence.
Source: crates/goose/src/session/session_manager.rs:246-248

Constructor

instance()

Get the global SessionManager singleton.
Returns: Shared SessionManager instance Source: crates/goose/src/session/session_manager.rs:257-261 Example:

new()

Create a SessionManager with custom data directory.
PathBuf
required
Directory for session database
Source: crates/goose/src/session/session_manager.rs:251-255

CRUD Operations

create_session()

Create a new session.
PathBuf
required
Initial working directory for tools
String
required
Initial session name
SessionType
required
Type of session to create
Returns: Newly created Session Source: crates/goose/src/session/session_manager.rs:267-276 Example:

get_session()

Retrieve a session by ID.
&str
required
Session ID to retrieve
bool
required
Whether to load full conversation history
Returns: Session with optional conversation Source: crates/goose/src/session/session_manager.rs:278-280 Example:

list_sessions()

List all user and scheduled sessions.
Returns: Vector of sessions sorted by updated_at descending Source: crates/goose/src/session/session_manager.rs:298-300

list_sessions_by_types()

List sessions filtered by type.
&[SessionType]
required
Session types to include
Source: crates/goose/src/session/session_manager.rs:302-304 Example:

delete_session()

Delete a session and all its messages.
&str
required
Session ID to delete
Source: crates/goose/src/session/session_manager.rs:306-308

Message Management

add_message()

Append a message to a session.
&str
required
Session ID
&Message
required
Message to append
Source: crates/goose/src/session/session_manager.rs:290-292 Example:

replace_conversation()

Replace entire conversation history (used for compaction).
&str
required
Session ID
&Conversation
required
New conversation to store
Source: crates/goose/src/session/session_manager.rs:294-296

truncate_conversation()

Delete messages after a timestamp.
&str
required
Session ID
i64
required
Unix timestamp (seconds) - messages >= this timestamp are deleted
Source: crates/goose/src/session/session_manager.rs:326-330

Update Operations

update()

Get a builder for updating session fields.
&str
required
Session ID to update
Returns: Builder for chaining updates Source: crates/goose/src/session/session_manager.rs:282-284

SessionUpdateBuilder

Builder pattern for updating sessions. Source: crates/goose/src/session/session_manager.rs:98-117

user_provided_name()

Set user-provided name.
Source: crates/goose/src/session/session_manager.rs:154-161

system_generated_name()

Set auto-generated name.
Source: crates/goose/src/session/session_manager.rs:163-170

extension_data()

Update extension state.
Source: crates/goose/src/session/session_manager.rs:182-185

apply()

Execute the update.
Source: crates/goose/src/session/session_manager.rs:150-152 Example:

Import/Export

export_session()

Export session to JSON.
&str
required
Session ID to export
Returns: JSON string representation Source: crates/goose/src/session/session_manager.rs:314-316

import_session()

Import session from JSON.
&str
required
JSON session data
Returns: Newly created Session Source: crates/goose/src/session/session_manager.rs:318-320

copy_session()

Duplicate a session.
&str
required
ID of session to copy
String
required
Name for the new session
Source: crates/goose/src/session/session_manager.rs:322-324

Analytics

get_insights()

Get aggregated session statistics.
Returns: Session insights with token totals Source: crates/goose/src/session/session_manager.rs:310-312

SessionInsights

Source: crates/goose/src/session/session_manager.rs:119-124

search_chat_history()

Search messages across all sessions.
&str
required
Search query string
Option<usize>
Maximum results to return
Option<DateTime<Utc>>
Only include messages after this date
Option<DateTime<Utc>>
Only include messages before this date
Option<String>
Session ID to exclude from results
Source: crates/goose/src/session/session_manager.rs:357-368