diff --git a/.github/assets/obelisk-wordmark-l2.svg b/.github/assets/obelisk-wordmark-l2.svg
index 4e6b3d1..0843037 100644
--- a/.github/assets/obelisk-wordmark-l2.svg
+++ b/.github/assets/obelisk-wordmark-l2.svg
@@ -19,5 +19,5 @@
Obelisk
- Let Claude Code search its own memory.
+ Let Coding agent search its own memory.
\ No newline at end of file
diff --git a/README.md b/README.md
index 9fd5d9a..49e90cf 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@
[](https://github.com/tommy0103/obelisk/releases)
[](LICENSE)
-Every past session, subagent, and workflow -- queryable by your agent, browsable by you.
+Every past Claude Code and Codex session -- queryable by your agent, browsable by you.
@@ -19,11 +19,19 @@ Every past session, subagent, and workflow -- queryable by your agent, browsable
Obelisk has two sides that share one SQLite index:
-**Skill side** — a Claude Code skill that lets the agent search and query its own session history. The agent writes JS queries, runs them locally, answers in plain language.
+**Skill side** — an agent skill that lets coding agents search and query their own session history. The agent writes JS queries, runs them locally, answers in plain language.
**App side** — an Electron desktop app for humans to browse sessions, manage memories, view usage stats, and see weekly recap cards.
-Both read from the same `~/.claude/obelisk.sqlite` database. The skill indexes; the app watches and renders.
+Both read from the same `~/.obelisk/obelisk.sqlite` database. The indexer reads Claude Code transcripts from `~/.claude/projects` and Codex transcripts from `~/.codex/sessions`.
+
+## Codex support
+
+Obelisk indexes Claude Code and Codex into the same SQLite schema instead of keeping separate databases. Rows carry a `source` value (`claude` or `codex`), and Codex IDs are prefixed with `codex:` so they cannot collide with Claude session IDs.
+
+Codex root threads become normal Obelisk sessions. Codex child threads are attached through the same `subagents` table when parent-thread metadata is available. Codex does not emit Claude-style workflow metadata, so workflow tables may be empty for Codex-only history.
+
+For live app refresh, Obelisk watches `~/.claude/projects` and `~/.codex/sessions`. It does not watch the whole `~/.codex` root. Codex's `session_index.jsonl` is used as lightweight title/update metadata during indexing, not as the message transcript source.
## Skill: agent-first retrieval
@@ -89,12 +97,12 @@ macOS only. Download from [Releases](https://github.com/tommy0103/obelisk/releas
| Layer | Source | What's captured |
|-------|--------|----------------|
-| **Sessions** | `/.jsonl` | Title, project, timestamps, git branch |
+| **Sessions** | Claude `/.jsonl`; Codex `sessions/YYYY/MM/DD/*.jsonl` | Title, project, timestamps, git branch, source |
| **Messages** | user + assistant turns | Full text, model, token usage, parent chain |
| **Tool calls** | every tool invocation | Tool name, input, file paths |
-| **Subagents** | `subagents/agent-.jsonl` | Agent type, description, full conversation |
-| **Workflows** | `workflows/wf_.json` | Script, result, agent count |
-| **Workflow agents** | `subagents/workflows/wf_/` | Per-agent transcripts |
+| **Subagents** | Claude `subagents/agent-.jsonl`; Codex child threads | Agent type, description, full conversation |
+| **Workflows** | Claude `workflows/wf_.json` | Script, result, agent count |
+| **Workflow agents** | Claude `subagents/workflows/wf_/` | Per-agent transcripts |
| **Memories** | registered markdown files | Conclusions linked to source sessions |
Full-text search via FTS5 covers all layers.
@@ -124,6 +132,7 @@ SKILL.md # Skill definition + API + retrieval strategy
- Index rebuilds incrementally — only new/modified JSONL files are re-parsed
- Skill side uses Node 22 built-in `node:sqlite`; zero npm dependencies
+- Older `~/.claude/obelisk.sqlite` databases are copied forward to `~/.obelisk/obelisk.sqlite` on first open
- `~/.obelisk/recap/` watched for new recap JSON files (agent writes, app renders)
---