# Storage, search, and privacy ## Session discovery `cont` reads the agents' central stores, not every folder on your disk. Each session's recorded working directory supplies its location in the picker. Discovery includes sessions from all locations; the initial **view** is scoped to your current directory. | Agent | Default store | Resume command | | --- | --- | --- | | Pi | `~/.pi/agent/sessions/**/*.jsonl` | `pi --session ` | | Claude Code | `~/.claude/projects/*/*.jsonl` | `claude --resume ` | | Codex | `~/.codex/sessions/**/*.jsonl` | `codex resume ` | | OpenCode | `~/.local/share/opencode/opencode*.db` | `opencode --session ` | | Oh My Pi | `~/.omp/agent/sessions/**/*.jsonl` | `omp --resume ` | ### Overrides - **Pi:** honors `PI_CODING_AGENT_DIR` and `PI_CODING_AGENT_SESSION_DIR`. - **Claude Code:** honors `CLAUDE_CONFIG_DIR`. - **Codex:** honors `CODEX_HOME`; names also come from `session_index.jsonl` beside the session root. - **OpenCode:** honors `XDG_DATA_HOME` and `OPENCODE_DB`. Relative database names resolve beneath its data directory. Resuming sets `OPENCODE_DB` to the selected store, including custom/channel databases. - **OMP:** also scans `${XDG_DATA_HOME:-~/.local/share}/omp/sessions` for migrated stores. Its shared `PI_CODING_AGENT_DIR` override is deliberately not auto-used: that would mislabel Pi history as OMP. Use `--omp-dir` for custom/profile stores. The active OMP configuration/profile is inherited when resuming. Repeatable `--pi-dir`, `--claude-dir`, `--codex-dir`, and `--omp-dir` add **session/project storage roots**, not working directories. `--opencode-db` adds a SQLite file. ```sh cont --all --omp-dir /path/to/omp/sessions cont --all --opencode-db /path/to/opencode.db ``` ### Format support - Claude subagent logs/sidechain messages and Codex sessions marked as subagents are excluded. Codex archived sessions are not scanned by default. - OpenCode's current SQLite format is supported; older pre-SQLite JSON stores are not. Reads use a read-only transaction and include committed WAL contents. Child/archived sessions, synthetic/ignored parts, assistant messages, and tool output are excluded. - OMP supports legacy header titles, current title slots/renames, and human attribution. - Malformed JSONL records and incomplete live-write tails are skipped. Changed files are retried on refresh. The picker never rewrites session logs or changes OpenCode database records. ## Search ranking 1. Exact title phrases, with exact titles and prefixes first. 2. Titles containing every query word, in any order. 3. Fuzzy title matches using Nucleo's Unicode-aware subsequence matcher. 4. Human messages containing the phrase or every query word, in any order, **within one message**. Recency breaks ties. Named/renamed titles take precedence over the first human prompt. Search is case-insensitive; fuzzy title matching supports accent normalization. Message search is literal, not semantic or typo-correcting. Assistant replies, tools, images, compaction summaries, and recognized injected notifications are not searched. Human text is not truncated for indexing. ## Cache and privacy The TUI opens immediately, loads cached results, and refreshes changed files in a background worker. JSONL parsing is parallel; unchanged files are detected by nanosecond mtime and size. OpenCode cache invalidation checks both database and WAL metadata, so it catches new messages and renames before checkpointing. Deleted files/sessions are removed during refresh. **Ctrl-R** rescans; there is no watcher or daemon. Cache location: ```text ${XDG_CACHE_HOME:-~/.cache}/cont/sessions-v1.json ``` Use `RESUME_CACHE_DIR` to choose a dedicated alternative directory. **The cache contains metadata and human messages in plaintext.** Directory/file permissions are `0700`/`0600` on Unix, and writes are atomic. Nothing is sent over the network. Don't share the cache or commit it to a repository. - `--no-cache`: don't read or write a cache. - `--rebuild`: force a fresh parse. - Delete the cache directory to remove copied text; the next launch rebuilds it. ## Resume behavior Enter restores the terminal, changes to the session's original working directory, and launches the matching agent. On Unix, `exec` gives the agent the existing terminal directly. The picker does not fork sessions, change your parent shell's directory, or add permission-bypass flags. Agents must be on `PATH`; their normal configuration and trust checks apply. Missing directories are reported rather than silently resuming elsewhere. `--print` prints the selected command without executing it.