Skip to main content

Local CLI chat history index for Codex, Claude Code, and Pi.

Project description

Gora header

gora

Local memory for coding-agent chats.

gora indexes chat history from Codex, Claude Code, and Pi into one local SQLite archive. Use it when you need to remember what you asked a model, what a coding agent changed, which repo a conversation belonged to, or which harness and model were used.

Why

Coding-agent history is spread across different local folders. Some harnesses also prune or rewrite old logs. gora gives you one place to search them.

Common uses:

  • Find an old debugging session by keyword.
  • Check what a coding agent did in a repo last week.
  • Recover a command, error, plan, or explanation from a past chat.
  • See tool calls and command output inline with the chat transcript.
  • Search across Codex, Claude Code, and Pi at the same time.
  • Filter history by harness, repo, role, or model.

Supported History

gora reads local history files from:

Codex       ~/.codex/sessions/**/*.jsonl
Claude Code ~/.claude/projects/**/*.jsonl
Pi          ~/.pi/agent/sessions/**/*.jsonl

No cloud service is required. The index stays on your machine.

Install

uv tool install gora-cli
gora

The PyPI package is gora-cli. The installed command is gora.

Install directly from GitHub:

uv tool install git+https://github.com/mertdeveci5/gora

For local development:

git clone <repo-url>
cd gora
uv tool install --editable .

Quick Start

  1. Check what Gora can see:
gora doctor
  1. Import local history:
gora import

The TUI also refreshes the index in the background on launch, so new chats and new repos appear automatically after running gora.

  1. Open the terminal UI:
gora
  1. Search from the CLI:
gora search "render deploy"
gora search "ctx7 login" --provider codex
gora search "database migration" --model "model-from-gora-models"
  1. Show a full transcript:
gora show codex:<session-id>

Terminal UI

Run:

gora

The interactive UI is a Bubble Tea app built with Bubbles components. Gora builds a cached local helper from the bundled Go source on first launch when Go is available. For a prebuilt local helper:

go -C gora/go_tui build -o ../../dist/gora-tui .
GORA_TUI_BIN=dist/gora-tui gora

Live search starts after two characters and updates as you type. The TUI starts a background import on launch. Use gora --no-auto-import to open the UI without refreshing the index.

Controls:

Type             search chats
Tab              move focus between search, filters, and results
Ctrl-F           open the filter editor
Enter            open the selected chat or edit focused filters
Click Filters    open the filter editor
Type             narrow the current filter list in the filter editor
Space            select or clear a filter option in the filter editor
1 2 3 4          jump between filter editor steps
Enter            select a filter option and move to the next filter step
Up/Down          move through results or filter options
M                export the selected chat as Markdown from results/transcript
T                export the selected chat as plain text from results/transcript
Left/Esc         return from transcript or apply filters and go back
Ctrl-U           clear search or all filters in the filter editor
Ctrl-X           clear the current filter editor step
Esc              clear search, clear active filters, or quit

The filter editor supports multi-select harnesses, repos, and models. For example, type part of a repo path, select two repos, then select Claude Code to show only Claude Code sessions from those repos.

Exports are written to ~/Downloads/gora-exports and keep the transcript in a portable Markdown or plain-text file.

CLI Commands

gora doctor
gora import
gora harnesses
gora repos
gora models
gora recent
gora list --limit 20
gora search "query"
gora show <session>

Filters:

gora list --provider codex
gora list --cwd tlmc
gora list --model "model-from-gora-models"
gora list --include-children
gora search "auth bug" --provider claude --model "model-from-gora-models"
gora search "review output" --include-children
gora show <session> --role user --role assistant

Most list-style commands print numbered results and a quick command for the top result.

Example:

gora models
1. Model: gpt-5.4
   Provider: openai
   Chats: 460
   Messages: 43079

2. Model: gpt-5.3-codex
   Provider: openai
   Chats: 333
   Messages: 14585

Quick command:
  gora search "<query>" --model gpt-5.4

Useful one-shot commands:

gora harnesses
gora repos --limit 10
gora models --limit 10
gora recent --provider codex --limit 5
gora search "migration bug" --cwd tlmc
gora search "auth bug" --model "model-from-gora-models"
gora show claude:<session-id>

Import Behavior

gora import is archive-oriented.

Once a chat is imported, Gora keeps it searchable even if the original harness later deletes, prunes, or rewrites its local log file. Refreshing a changed source file merges in new messages but does not delete messages already in the archive.

Tool calls and tool-result output are imported by default so transcripts show what the agent actually ran. Gora redacts common token shapes before storing message text.

Codex can create child rollout files for subagents and review tasks. Gora stores those records with their parent thread metadata, but normal list, recent, repos, search, and TUI views show root user chats by default. Use --include-children on CLI list and search style commands when you want to inspect child rollout records too.

Models

Gora does not use a fixed model-name list.

It extracts model metadata from each harness's logged structure:

Codex        turn context model metadata
Claude Code  assistant message model metadata
Pi           model change records and message metadata

List indexed models:

gora models

Filter by an indexed model:

gora search "cache bug" --model gpt-5.5

Data Location

Default index path:

macOS  ~/Library/Application Support/gora/history.sqlite
Linux  ~/.local/share/gora/history.sqlite

Use another path:

GORA_DB=/path/to/history.sqlite gora import
gora --db /path/to/history.sqlite search "query"

The default data directory is created with owner-only permissions.

Development

uv run python -m unittest
uv run python -m compileall gora tests main.py
uv build

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gora_cli-0.1.6.tar.gz (1.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gora_cli-0.1.6-py3-none-any.whl (52.8 kB view details)

Uploaded Python 3

File details

Details for the file gora_cli-0.1.6.tar.gz.

File metadata

  • Download URL: gora_cli-0.1.6.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for gora_cli-0.1.6.tar.gz
Algorithm Hash digest
SHA256 49a14a1809e3fabd02faaec87e5b4f96a3dce9bc21a0053663c8b1bec096ec88
MD5 36a85aa8dd7e01c5a77ab4ef3bdadbea
BLAKE2b-256 1e504780c83991a5cbb3f279a59b3a55d168a6fe1936bb1e99ce9863a48d1fe7

See more details on using hashes here.

File details

Details for the file gora_cli-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: gora_cli-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 52.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for gora_cli-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 aa57beeddb3ab176e8d5c78e91667f2d6a4bb1d8c9d7f051364f3182d9b21364
MD5 b7b129cd3b5578dc307b87d96a96d08f
BLAKE2b-256 1eaea87dc77a7e4e30220d2be497b459be7eb858dd9a244a388a957d3f84fd91

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page