A terminal UI for browsing coding sessions across multiple tools from local transcripts, session logs, and databases. It currently supports Claude Code, Codex, and OpenCode.
- Parses Claude Code JSONL transcripts, Codex session logs, and the OpenCode SQLite database
- Fuzzy search across sessions, live as you type
- Filter by tool, project, or date range
- Sort per table (last active, tool, project, summary)
- Project overview with session counts and tool breakdown
- Detail pane with tokens, cost, metadata, related sessions
- Picks up subagent/child sessions (Claude subagents, OpenCode parent/child)
- Nerd Font icons when available, falls back to Unicode
- Resume or start sessions from the dashboard
git clone https://github.com/adinhodovic/ai-dash.git
cd ai-dash
make build
./ai-dashPre-built binaries are available on the releases page.
Linux:
curl -L https://github.com/adinhodovic/ai-dash/releases/latest/download/ai-dash-linux-amd64 -o ai-dash
chmod +x ai-dashmacOS:
curl -L https://github.com/adinhodovic/ai-dash/releases/latest/download/ai-dash-darwin-arm64 -o ai-dash
chmod +x ai-dashFor other architectures, see all binaries on the releases page.
Config file: ~/.config/ai-dash/config.json
Sessions are discovered from default paths. Override them if needed:
| Tool | Default path | Config key |
|---|---|---|
| OpenCode | ~/.local/share/opencode/opencode.db or ~/Library/Application Support/opencode/opencode.db on macOS |
opencode_path |
| Codex | ~/.codex/config.toml |
codex_path |
| Claude Code | ~/.claude/projects/ |
claude_path |
{
"$schema": "https://raw.githubusercontent.com/adinhodovic/ai-dash/main/config.schema.json",
"terminal": "ghostty",
"poll_interval": "10s",
"default_age_filter": "14d",
"default_tool": "claude",
"auto_select_tool": false,
"nerd_font": null,
"age_presets": ["1h", "1d", "3d", "7d", "14d", "30d"]
}| Option | What it does | Default |
|---|---|---|
terminal |
Terminal emulator used to open/resume sessions (e.g. ghostty, kitty) |
$TERMINAL |
poll_interval |
How often sessions reload | 10s |
default_age_filter |
Default age filter used on load and when clearing filters | 14d |
default_tool |
Pre-selected tool when pressing n |
none |
auto_select_tool |
Skip the tool picker for new sessions | false |
nerd_font |
Force Nerd Font on/off, null auto-detects |
auto |
age_presets |
Options when cycling with D |
1h,1d,3d,7d,14d,30d |
Add the $schema line to get autocompletion in your editor. You can also run ai-dash schema to print it.
On macOS, terminal should be a CLI terminal binary like ghostty or kitty.
| Key | Action |
|---|---|
/ |
Search |
r |
Resume session |
n |
New session |
t / p |
Filter by tool / project |
s |
Cycle sort |
D |
Cycle age range |
a |
Toggle subagents |
c |
Clear filters/search |
tab |
Switch focus |
? |
Full help |
q |
Quit |
Press ? in the app to see the full context-aware keymap.
make fmt
make build
make test
golangci-lint run ./...Run the app locally with:
./ai-dashcmd/ai-dash- cobra entrypointinternal/config- config loading and schema generationinternal/session- shared session model and sortinginternal/sources/claude- Claude Code parserinternal/sources/codex- Codex parserinternal/sources/opencode- OpenCode parserinternal/sources/shared- shared source discovery helpersinternal/ui- Bubble Tea TUI
Only official provider files are supported:
- Claude Code transcripts
- Codex session JSONL files
- OpenCode SQLite database
Do not add generic or custom session JSON loaders.
- Add provider-specific tests when changing importer or parser logic
- Keep fixtures under each source package's
testdata/directory - Run
make fmt,make build,make test, andgolangci-lint run ./...before finishing changes
Apache License 2.0