Store · Odyssey

Ask what you did last Tuesday.
Or yesterday. Or last quarter.

Open a new session. Your AI already has yesterday's summary in hand.

Every turn captured. Hourlies summarize turns. Dailies summarize hourlies. Weeklies summarize dailies. The narrative thickens automatically while you work on other things.

Architecture

Four tiers. One project anchor.

A .claude/project.json file in your repo holds the project UUID. Every turn, ship-event, and summary is keyed on that UUID. Two repos never see each other's memory.

The Stop hook posts each turn envelope to the API. Three crons run automatically: hourly compaction at the top of every hour, daily compaction + ship-event extraction at 03:00 UTC, weekly distillation Sunday 04:00 UTC.

Capture

Stop hook on every turn.

The hook ships with the CLI. /greprag wires it into your ~/.claude/settings.json during setup. After that, there's nothing to do. Each turn becomes a row in the memories table, tagged with the project UUID, with the user prompt and the assistant message scrubbed of env vars.

# on every turn — no action needed
POST https://api.greprag.com/v1/memory/turn
  project_id: d75850fa-...
  shape:      turn
  content:    { user: "...", assistant: "..." }

Compaction

Crons turn raw turns into a narrative.

Hourly compaction reads turns from the past hour and writes an hourly summary. Daily compaction reads hourlies from the past day and writes a daily summary plus any atomic ship-events (a fix landed, a feature shipped, a deploy went out). Weekly reads dailies.

Each tier shapes once and stays put. Retrieval returns the stored summary verbatim. No LLM rewriting at read time, no per-query token cost.

Injection

SessionStart recap, automatic.

Open a fresh session in any project with a GrepRAG anchor and the recap hook fires. You see yesterday's summary and recent sessions before you type a single word.

$ claude

[GrepRAG memory: your-project]

Yesterday's summary:
1. Shipped the new auth flow with migration 028 and updated env vars.
2. Fixed the race condition in the queue worker. Added the missing lock.
3. Refactored the API layer to use the new typed-client.

Recent sessions:

4 hours ago:
1. Started exploring the bento layout for the landing page.

1 hour ago:
1. Wired the SessionStart recap hook end-to-end.

Pull on demand

Time-window and shape queries.

Advisor skills and explicit commands can pull any window. Last 24h, last week, the entire month of April. Each shape is queryable directly.

$ curl "https://api.greprag.com/v1/memory/by-period?projectId=$PID&period=daily&days=7"

$ curl "https://api.greprag.com/v1/memory/by-shape?projectId=$PID&shape=ship-event&limit=20"

Cost

About ten cents a month.

LLM compaction runs at write only. Three crons per project: hourly, daily, weekly. At typical activity (one to two sessions a day) the bill lands near $0.10/month per project. Read is free.

Use case

"What was that bug from Tuesday?"

You spent four hours fixing a race condition Tuesday afternoon. It's Friday morning. You don't remember the file, the symptom, or what you tried before the fix landed. The session-start recap surfaces it without you asking.

The agent treats the recap as context. When you ask "what did I work on this week?", the answer is already in the window.