Obelisk [![stars](https://img.shields.io/github/stars/tommy0103/obelisk?style=flat-square)](https://github.com/tommy0103/obelisk/stargazers) [![version](https://img.shields.io/github/v/tag/tommy0103/obelisk?label=version&style=flat-square)](https://github.com/tommy0103/obelisk/releases) [![license](https://img.shields.io/badge/license-AGPL--3.0-blue.svg?style=flat-square)](LICENSE) Every past Claude Code and Codex session -- queryable by your agent, browsable by you.

## Two sides of the same index Obelisk has two sides that share one SQLite index: **Agent side** — the `obelisk` CLI owns the local runtime, while a separate agent skill teaches coding agents how to search and query their session history. The agent writes JS queries, runs them locally, and 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 `~/.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
Obelisk App
You can use obelisk like: ``` /obelisk 上次 auth bug 最后到底改了哪些文件,为什么这么改 /obelisk 这个文件最近在哪些 sessions 里被反复修改 /obelisk 找出最近失败的 tool calls,它们分别发生在哪些任务里 /obelisk 那个 review workflow 的 subagents 各自结论是什么 /obelisk recap this week ``` ### Install #### Let your agent install it (recommended) The shortest path is to give the bootstrap guide directly to a coding agent with shell access. Paste this as a prompt into Claude Code, Codex, or another agent — not into your terminal: ```text Install Obelisk by fetching and following this guide: curl -fsSL https://raw.githubusercontent.com/tommy0103/obelisk/main/SKILL.md ``` The agent will ask before changing your machine, install and verify the CLI, then ask whether the formal `/obelisk` skill should be installed for the current project or globally. The bootstrap guide is only for one-time setup; it is not the query skill itself. #### Install manually Obelisk requires Node.js 22.13 or newer. Install the platform-neutral CLI: ```bash npm install --global @obelisk-apps/cli obelisk --version ``` On macOS, Linux, or WSL, the CLI-only installer is equivalent: ```bash curl -fsSL https://raw.githubusercontent.com/tommy0103/obelisk/main/install.sh | sh ``` Then install the agent skill: ```bash obelisk install ``` `obelisk install` delegates to the standard skills installer for `tommy0103/obelisk-skill`. Then in any Claude Code session: ``` /obelisk ``` First run builds the index (~5 seconds for 100 sessions). After that it rebuilds incrementally. ### How it works ``` You ask a question ↓ Agent writes a JS query against the SQLite index ↓ Runs it via obelisk --query