# A new kind of agent memory that keeps every detail

**Status:** Live beta.

CtrlB Session Store

CtrlB Session Store keeps every message, tool call and tool result of your agent sessions. Your agents search it when they need a detail.

- 6%: Exact answers left after compaction
- 81 to 94%: Detail recall, with a search instruction
- +37 to 63 pts: Smaller model with the store beats larger without
- 1.4 s vs 189 s: Search at 100× the record, against grep

## Other memory decides early. This one decides late.

A new kind of agent memory

Compaction and extracted memory choose what to keep before the question exists.

| | Compaction summary | Extracted memory | CtrlB Session Store |
|---|---|---|---|
| Decides | At compaction | When it writes | When your agent asks |
| Detail recall | 29% | 37% | 81% |

One model (GPT-6 Luna) and the same 100 detail questions for all three, asked at real compaction points.

Memory that decides when it writes has to guess which details will matter. The session store keeps every row, so the agent decides at read time, when it knows the question.

## From your agent to a search

Hooks upload every turn, and your agent searches the record when it needs a detail.

1. Your agent: Claude Code or Codex runs as usual. Subagents too.
2. Hooks upload: At the end of each turn, before compaction and at session end. Secrets are redacted first.
3. Your bucket: One row per message, tool call and tool result. Open Parquet in S3, GCS or Azure Blob.
4. Recall tools: The agent searches the record over MCP.

At session start, the plugin adds one line to the agent's context: search the record before you answer about earlier work. Without that line, GPT-6 Luna made no recall call in 90% of runs. Hooks redact text that looks like a secret before upload, but the patterns are not a guarantee.

## What your agents can ask

Four MCP tools read the record, and each reply stops at 12,000 characters.

- **Find a word across sessions** (`search_sessions`): It finds a whole word in messages, commands and results, in current and past sessions. It returns 10 hits by default, 25 at most. Example: `search_sessions(term="refunds.py")`. You get: Hits with session, row number and a 300-character snippet.
- **Find a command you ran before** (`find_command`): It returns every past tool call whose command contains your text, newest first. It returns 10 by default, 25 at most. Example: `find_command(command="pytest tests/refunds")`. You get: The total, then session, row and command for each match.
- **See what happened next** (`next_actions`): It returns the result of one tool call, then the next three calls and their results. Text and thinking rows are skipped. Example: `next_actions(session_id="7f3a91c2", seq=41)`. You get: What the agent did after a failure, and whether it worked.
- **Open the rows around a hit** (`fetch_records`): It returns the rows of a range in order. A range holds 50 rows at most, and each body is cut at 4,000 characters. Example: `fetch_records(session_id="7f3a91c2", seq_from=38, seq_to=42)`. You get: The exact rows, with the full length of any cut body.

## Measured on real sessions

Four models, two families, asked at real compaction points.

Four engineers' sessions, 100 detail questions per model family, with a one-line instruction to search.

| Model | Summary only | Session store |
|---|---|---|
| Claude Haiku 5.5 | 23% | 85% |
| Claude Sonnet 5.5 | 22% | 89% |
| GPT-6 Luna | 29% | 81% |
| GPT-6.1 Sol | 35% | 94% |

Detail recall, correct answers. One run per question. The summary stays in context in both arms. The store arm also gets a one-line instruction to search.

- 37 to 63 pts: Smaller model with the store, against a larger model with only a summary or extracted memory. Detail recall. Haiku 5.5 with the store costs about 1/15 as much per question as Sonnet 5.5.
- 70 to 72%: Cross-session lookup with the store, small models. Summary only answered none. 60 questions per family, no session named.
- -2 to +6 pts: Recall change when the summary is dropped, with the store and the search instruction on. Each answer cost less. Compaction pauses a Claude Code session for a median of 61 s.

With the store on both sides, the larger model is level or ahead. Haiku 5.5 trails Sonnet 5.5 by 4 points, not significant. GPT-6 Luna trails GPT-6.1 Sol by 13.

The limit: four engineers at one company over six weeks, and a model judged the answers.

Search matches exact words. We did not test search by meaning.

## See your team's sessions

Each engineer's sessions upload as rows you can search and query.

- You see your own sessions by default. The `sessions.read_all` permission shows everyone's.
- Rows are open Parquet files in your S3, GCS or Azure Blob bucket.
- Search stays fast as the record grows.

| Record size | CtrlB | grep over files |
|---|---|---|
| 1× (170k rows) | 147 ms | 450 ms |
| 10× (1.7M rows) | 494 ms | 4.1 s |
| 100× (17M rows) | 1.05 s | 165 to 408 s (9 of 120 calls finished) |

Median search time, 120 calls. At 100×, the files are larger than the test machine's memory, and grep finished 9 of 120 calls. On those nine calls, CtrlB took 1.4 s and grep took 189 s.

## Works with your agents and Relay

The CtrlB plugin connects Claude Code and Codex.

[See CtrlB Relay](https://ctrlb.ai/relay): Relay builds its runs from session store records. The session store also works on its own, with no Relay.

## Pricing

Start with the agents you run today. Tracing, evaluations, investigations, and Guardrails in one plan.

- Production traces and model cost tracking
- Scheduled investigations and prompt comparisons
- Tool policies with Guardrails
- OpenTelemetry, your own bucket and your own model key

**From $499 / month.** Platform fee. Usage is quoted separately for your workload. We agree usage costs before you start. Your providers bill model and bucket costs directly. Larger deployments: enterprise pricing.

## See the Session Store with your agents

Live beta. From $499/month, plus usage.

## Metadata

- **Canonical HTML**: https://ctrlb.ai/session-store
- **Last updated**: 2026-11-07

## Common questions

FAQ

### What does the session store keep?

It keeps one row for each message, tool call and tool result. Each row has the role, the shell command, the time and the session. Subagents are included. Nothing is updated or deleted.

### How is it different from extracted memory?

Extracted memory decides what to keep when it writes. The session store keeps every row, and your agent decides what matters when it asks. With GPT-6 Luna on 100 detail questions, extracted memory scored 37% and the store scored 81%.

### How is it different from compaction?

Compaction writes a summary and drops the rows. In our Claude Code sessions, 6% of exact answers were still in the context after compaction. Exact means a path, number, error line or command. The store keeps the rows, so the agent can find them.

### Where does my data live?

Rows are open Parquet files in your S3, GCS or Azure Blob bucket, and SQL can query them. Hooks redact text that looks like a secret before upload. The redaction patterns match common key and token shapes and are not a guarantee.

### Who can see whose sessions?

You see your own sessions by default. The sessions.read_all permission shows every user's sessions. The sessions.write permission lets your agents upload them.

### What does it cost, and how fast is it?

At 100× the record, CtrlB search took a median of 1.05 s. Grep over the files finished 9 of 120 calls. Haiku 5.5 with the store costs about 1/15 as much per question as Sonnet 5.5. Pricing is on this page.

### Do I need Relay?

No. The session store works on its own. Relay builds its runs from session store records, so agents in a Relay run need sessions.write.

### Which agents does it work with?

Claude Code and Codex, through the CtrlB plugin and hooks. The hooks upload at the end of each turn, before compaction and at session end.

## Related

- [AI Observability](https://ctrlb.ai/ai-observability): Trace agent runs, find failures, and test changes.
- [Self-Improving Agents](https://ctrlb.ai/ai-observability/self-improving-agents): Turn failed runs into proposed prompt and skill changes.
- [Evaluations](https://ctrlb.ai/ai-observability/evaluations): Save failures as tests. Compare versions before release.
- [Guardrails](https://ctrlb.ai/ai-observability/guardrails): Block, approve or mask tool calls and results.
- [CtrlB Relay](https://ctrlb.ai/relay): Claim work, share findings and continue across sessions.

## Links

- [Book a demo](https://ctrlb.ai/contact?source=demo-session_store)
- [AI Observability pricing](https://ctrlb.ai/ai-observability#pricing)
- [Documentation](https://docs.ctrlb.ai/)