One window for every AI coding agent session — local and remote.
Browse, search and follow the session transcripts of all your AI coding agents, across every machine you SSH into. No cloud, no uploads: everything is read from the agents' own storage, on the machines where it lives.
AI coding agents accumulate sessions in ~/.claude, ~/.codex, sqlite databases and assorted JSONL files — spread across your laptop, dev servers and WSL instances. When you want to check "what did the agent actually do?", you're stuck reading raw JSONL. Agent Viewer turns all of it into:
- A unified session browser — sessions from every detected agent on every configured machine, newest first, with title, project, model, token and cost metadata.
- A conversation view — messages, thinking blocks and tool calls rendered as readable chat with syntax-highlighted markdown.
- A swimlane view — the session as an interaction sequence diagram, including sub-agents in their own lanes.
- Live mode — watch a session update in real time while the agent is still working.
- English & Chinese UI — auto-detected from the system language, toggleable in the nav bar.
Known agents (first-class parsers):
| Agent | Storage | Format |
|---|---|---|
| Claude Code | ~/.claude/projects |
JSONL |
| Codex | ~/.codex/sessions |
JSONL |
| OpenCode | ~/.local/share/opencode/opencode.db |
SQLite |
| Gemini CLI | ~/.gemini/antigravity-cli |
JSONL |
| DeepSeek | ~/.deepseek/sessions |
JSON |
| Hermes | ~/.hermes/sessions |
JSONL |
| Kimi Code | ~/.kimi-code/sessions |
JSONL |
Unknown agents are auto-discovered. Transcript files (*.jsonl / *.json)
are located directly under any home dot-directory — the folder's name doesn't
matter (sessions, chats, flat layouts all work). Candidate roots are
validated by sampling: anything that parses as a Claude-style event stream,
Codex-style rollout, or a plain chat dump is rendered. In-house CLIs just
work — no code changes needed.
If your agent follows a different layout or format, run the diagnostic one-liner from CONTRIBUTING.md and open an issue with the output.
Adding a first-class parser (better titles, metadata, tool-call pairing for a
specific dialect) is two steps: write src/lib/<tool>.ts (list/read), then add
one entry to the registry (src/lib/registry.ts).
- Local — works out of the box.
- SSH — add any Linux machine (host, user, SSH key or password). Detection, listing and streaming all happen over SSH; session data is read on demand, never synced or copied to a central store.
- WSL — on Windows, WSL instances are treated as first-class filesystems.
Passwords are encrypted with the OS keychain (Electron safeStorage); SSH host keys are verified trust-on-first-use (TOFU).
Prebuilt installers are on the Releases page:
| Platform | Artifacts |
|---|---|
| Windows | Agent Viewer Setup x.y.z.exe (NSIS) |
| macOS | .dmg / .zip |
| Linux | .AppImage / .deb |
Windows/macOS builds are currently unsigned, so SmartScreen/Gatekeeper will warn on first launch. Signed & notarized builds are on the roadmap.
npm install
npm run rebuild # build better-sqlite3 against Electron's ABI
npm run dev # terminal 1: Next.js dev server
npm run electron:dev # terminal 2: Electron shellUseful scripts:
npm test # vitest (parsers, file sources, registry)
npm run lint
npm run smoke # main-process smoke test (native module + boot)
npm run dist # build installers with electron-builderAgent Viewer is a read-only viewer. It never modifies agent session files, never sends data anywhere, and has no telemetry. The only files it writes are its own config (~/.config/agent-viewer/) and temporary files for remote SQLite reads, which are deleted after use.
Issues and pull requests are welcome. Bug reports are most useful when they include (a redacted excerpt of) the session file that fails to parse.