Persistence
Save and resume agent sessions using ActiveRecord. By default, sessions run in-memory with no database needed. Wire up a persistence adapter when you want to continue conversations across requests.
How It Works
The persistence adapter stores sessions as rows in an ask_sessions table with a JSONB data column that holds the full conversation state.
# In-memory (default) — no database needed
session = Ask::Rails::Harness.agent_session
# Persisted — requires migration + adapter config
Ask::Rails::Harness.configure do |config|
config.persistence_adapter = Ask::Rails::Harness::Persistence.new
end
session = Ask::Rails::Harness.agent_session
Database Schema
Run the generator migration to create the table:
rails generate ask_rails:install
rails db:migrate
create_table :ask_sessions do |t|
t.string :session_id, null: false
t.string :model
t.jsonb :data, default: {}
t.timestamps
end
add_index :ask_sessions, :session_id, unique: true
Saving and Loading
```ruby
adapter = Ask::Rails::Harness.configuration.persistence_adapter
session = Ask::Rails::Harness.agent_session
session.run("Hello")
saved_id = session.id
# Load it later using the Session.load class method
restored = Ask::Agent::Session.load(saved_id, adapter: adapter)
restored.run("Continue where I left off")
```
In-Memory vs Database
| In-Memory | Database | |
|---|---|---|
| Setup | None (default) | Run migration + configure adapter |
| Cross-request | No | Yes |
| Resumability | No | Yes |
| Inspectable | No | Via Rails console |