
All your AI agent sessions in one place — browse, search, resume. Rust + GPUI.
All your AI agent sessions in one place — browse, search, resume. Rust + GPUI.
A native desktop app that gathers every coding-agent session on your machine into one place — browse, full-text search, and resume any conversation in seconds. Built with Rust + GPUI (gpui 0.2 + gpui-component 0.5). macOS first; experimental Linux support since v0.2.5, experimental Windows support since v0.2.7.
Your agent history is scattered across ~/.claude, ~/.codex, and a dozen other private directories. Wake reads them all, read-only, and gives you one fast window into it. Everything stays local; Wake only contacts GitHub when you explicitly check for an update.
useEffect() equally well; jumps straight to the matched message in the transcriptclaude --resume, codex resume, …)@host badge, searchable like everything else, and resume through a copied ssh -t commandwake-mcp, lets Claude Code, Codex, Cursor or any MCP client search your whole history, list recent sessions per project and read transcripts page by page, so a new agent can pick up where another one left off; Settings → Connect has copy-paste setup snippetswake-cli gives the same four answers to anything that can run a shell command: wake-cli sessions --project "$PWD", wake-cli search "…", wake-cli show ; it prints the same text an MCP client sees; npx skills add iAmCorey/Wake installs a skill so agents reach for it on their own| Agent | Data source | Model | Via |
|---|---|---|---|
| Claude Code | ~/.claude/projects/**/*.jsonl |
✅ | — |
| Codex CLI | ~/.codex/sessions + state_5.sqlite (read-only) |
✅ | ✅ |
| Qoder CLI | ~/.qoder/projects/*/*.jsonl (QODER_CONFIG_DIR is respected) |
✅ | — |
| Copilot CLI | ~/.copilot/session-store.db |
— | — |
| Cursor | ~/.cursor/projects/**/agent-transcripts (agent transcripts) + ~/Library/Application Support/Cursor/User/globalStorage/state.vscdb (IDE Chat/Composer history, read-only) |
— | — |
| OpenCode | ~/.local/share/opencode/opencode.db |
✅ | — |
OpenCode 2 (opencode2) |
~/.local/share/opencode/{opencode.db,opencode-next.db} (session_v2 or session + session_message); both paths are scanned |
✅ | — |
| Kiro | ~/.kiro/sessions/cli |
✅ | — |
| Gemini CLI | ~/.gemini/tmp/**/chats |
— | — |
| Pi | ~/.pi/agent/sessions/**/*.jsonl |
✅ | — |
| Oh My Pi | ~/.omp/agent/sessions/**/*.jsonl |
✅ | — |
| Grok Build | ~/.grok/sessions/**/updates.jsonl |
✅ | — |
| Kimi Code | ~/.kimi-code/sessions/**/wire.jsonl |
— | — |
| Antigravity CLI | ~/.gemini/antigravity-cli/conversation_summaries.db (metadata only — transcripts are encrypted) |
— | — |
DeepSeek Harness (dsh) |
~/.dsh/sessions/**/session.jsonl[.zstd] (zstd-compressed logs are decoded transparently) |
✅ | — |
| Hermes Agent | ~/.hermes/state.db + profiles/*/state.db (HERMES_HOME is respected) |
✅ | ✅ |
| OpenClaw | ~/.openclaw/agents/*/agent/openclaw-agent.sqlite + legacy agents/*/sessions/*.jsonl (OPENCLAW_STATE_DIR is respected) |
✅ | ✅ |
| CodeBuddy | ~/.codebuddy/projects/*/*.jsonl (CODEBUDDY_CONFIG_DIR is respected) |
✅ | — |
| WorkBuddy | ~/.workbuddy/projects/*/*.jsonl (WORKBUDDY_CONFIG_DIR is respected; desktop app, so no resume) |
✅ | — |
Model = whether Wake shows which LLM a session used (the model the session last used). Via = whether Wake shows where the session was started from (CLI, IDE extension, desktop app) — Codex records this in its local data; Hermes and OpenClaw record the channel a session came in through (Telegram, Discord, …). A "—" means the agent's local data simply doesn't record that field, not a missing feature.
Codex writes its background threads — the guardian auto-review, /review, compaction, memory consolidation and spawned sub-agents — into the same sessions directory as your conversations. Wake recognises them from the metadata on their first line and skips them; a file it cannot identify stays visible rather than risk hiding a real conversation.
Cursor keeps two stores. A chat that has a full transcript under ~/.cursor/projects is read from there; local workspace metadata and filesystem matching restore its project path, including spaces. Project metadata is refreshed on each scan even if the transcript is unchanged. Chats that only live in Cursor's own database — older ones, or Cursor versions that leave nothing but a turn_ended marker in the transcript — are read from state.vscdb. Older IDE chats that Cursor stored without a workspace show up under Unknown project.
Token statistics depend on the usage recorded by each agent. Qoder CLI transcripts that contain only zero token counts leave token usage unknown in Wake, even when they include Credits or a context usage ratio. Those values measure different things and are not converted into tokens; the sessions remain visible in the Sessions and Prompts views of Insights.
Windsurf and Trae encrypt their local data; Amp, Factory (Droid), and Warp keep sessions in the cloud — none of those are supported. Reasonix stores sessions locally but hasn't been mapped yet.
Wake can mirror the sessions on your other machines and show them next to the local ones. Add a host in Settings → Remote hosts (an alias from ~/.ssh/config, or user@host); Wake then syncs on launch, on refresh, and whenever you click Sync now. Remote sessions carry an @host badge, are searchable like everything else, and resume through Copy SSH command, a ready-to-paste ssh -t 'cd && codex resume '.
Before you add a host:
rsync is needed on both ends — macOS and most Linux distributions ship one; on Windows install it yourselfHow it works, and what it doesn't do yet:
rsync into remotes// under its own data directory. Only session data and sidecar files are copied, never credentials, and nothing on the remote is ever writtenCODEX_HOME-style overrides on the remote aren't detected), and remote Windows machines aren't supportedWake ships wake-mcp, a small read-only MCP server over stdio that sits next to the app binary (Wake.app/Contents/MacOS/wake-mcp on macOS, beside wake on Linux and Windows). Point an MCP client at it and the agent gets four tools:
| Tool | What it does |
|---|---|
wake_search |
Full-text search across every agent's session titles and transcripts (CJK and code substrings work); each snippet carries a wake://session/# reference |
wake_list_sessions |
Most recently updated sessions, scoped by project (pass the agent's working directory), agent, time window or starred |
wake_get_session |
One transcript as compact Markdown — user and assistant messages with [seq N] markers, tool calls folded to a line, injected context omitted — paginated by from_seq |
wake_list_projects |
Projects with indexed sessions, most recently active first |
Setup is a copy-paste from Settings → Connect, or run wake-mcp setup in a terminal. For example, Claude Code:
claude mcp add --scope user wake -- "/Applications/Wake.app/Contents/MacOS/wake-mcp"Codex reads the same server from ~/.codex/config.toml:
[mcp_servers.wake]
command = "/Applications/Wake.app/Contents/MacOS/wake-mcp"A few things worth knowing:
wake-mcp call wake_search '{"query":"useEffect("}' runs a single tool from the terminal, handy for checking what an agent would seeThe full reference — every parameter, output formats, key and reference formats, error semantics, troubleshooting — is in docs/mcp.md.
Not every agent speaks MCP, and sometimes you just want the answer in a terminal. wake-cli sits next to wake-mcp and covers the same ground:
wake-cli sessions --project "$PWD" --limit 5 # what happened in this repo
wake-cli search "rate limiter" --project "$PWD" # where was this discussed
wake-cli show 'claude-code:1b2c3d4e-…' # read that transcript
wake-cli setup # path, PATH setup, and a block to paste into CLAUDE.mdIt prints what the MCP tools return, asserted byte for byte in the test suite apart from a trailing newline the CLI adds, so an agent driving it through a shell sees what a connected one does. Full reference in docs/cli.md.
To make an agent reach for it without being told, install the bundled skill with npx skills add iAmCorey/Wake (or copy skills/wake/ into ~/.claude/skills/wake/).
Wake's interface follows your system language on first launch and falls back to English. Simplified Chinese ships with the app; pick a fixed language under Settings → General → Language.
Adding a language is one flat JSON file mapping the English text to your translation — drop it in Wake's config folder to use it immediately, or send it as a pull request. Untranslated strings simply stay English, so a partial pack is welcome. See crates/wake/locales/README.md.
auth.json and friends) are never readrsync over your existing SSH setup: only session data and its sidecar files come across (never credentials), nothing on the remote machine is ever written, and the mirror lives inside Wake's own data directory (remotes//), so reNo open issues yet, or sync has not completed.