# showagent

showagent is a Golang TUI that pulls the coding-agent sessions scattered across your machine into one picker. Each agent — Codex, Claude Code, Gemini CLI, OpenCode, jcode, Pi — writes its own session format under its own dot-directory, so yesterday's context is stuck in whichever tool you happened to start it in. showagent reads those stores straight off disk and gives you a single list, grouped by workspace and sorted newest-first, that you can fuzzy-search, resume in the native CLI, branch into a local copy, or convert into another agent's format. It is fully local: one static binary reading your own files, with no hosted service, telemetry, or account.

The stand-out feature is cross-agent conversion. Start debugging in Codex, press `x`, and the conversation is rewritten into Claude Code's native session format so `claude`'s own resume just works. Like [[agentsview]] it unifies history across agents, but where agentsview is a read-only macOS browser, showagent is terminal-first and adds resume, branch, and conversion. It sits in the same session-tooling cluster as [[toolbox/mclaude]] (a Claude Code session browser), [[toolbox/re_gent|re_gent]] (session replay/analysis), and [[toolbox/mindwalk]].

## How it works

Each supported agent is a self-contained provider file implementing an 8-method interface (`internal/session/provider.go`) covering discovery, resume arguments, transcript extraction, and conversion — roughly 250 lines each. Providers register in a `registry` slice and the TUI picks up badges, filter keys, and convert targets automatically. Two templates exist: a file-based store (`gemini.go`) and a CLI-based store (`opencode.go`).

Storage differs per agent. Codex, Claude Code, jcode, and Pi keep JSONL or JSON files under their dot-directories; showagent reads those directly. OpenCode keeps sessions in a SQLite database, so every OpenCode operation (discover, export, import, delete) routes through your own `opencode` CLI — showagent never writes into the database. Agents whose CLI isn't on `PATH` are auto-hidden (jcode, OpenCode), and the convert picker only offers hand-off targets whose CLI is installed, so a conversion never strands. Pi sessions are versioned JSONL trees; showagent follows Pi's active leaf through `parentId` links and ignores abandoned branches.

Conversion extracts the user and assistant turns and writes a brand-new session in the target format, preserving code blocks, newlines, and indentation. It deliberately does not copy tool-call internals, approval history, encrypted reasoning blobs, or provider attachments — those are private to the source agent and wouldn't replay correctly anyway. Originals are never modified; new files are written atomically with `0600` permissions, so a crash can't leave a half-written session in another tool's store. Trust is explicit: the first `x` shows a hand-off preview, the second writes it (`--dry-run` gives the same preview in scripts).

An `mcp` subcommand runs a stdio MCP server that exposes your session history to whatever agent you're talking to — `list_sessions`, `get_transcript`, `branch_session`, `convert_session`, `resume_command`. Ask Claude Code whether you've solved a bug before and it can find the Codex session where you did and hand back the resume command. Transcript text is marked untrusted, and secret-like values are redacted unless the server is started with `--allow-secrets`; `--read-only` drops the two additive (branch/convert) tools. There is no delete tool over MCP — deletion stays in the TUI behind a two-press confirm.

## Install

```sh
# Homebrew (Linux/macOS)
brew install aytzey/tap/showagent

# Go 1.25.12+
go install github.com/aytzey/showagent/cmd/showagent@latest

# install script (Linux/macOS, binary to ~/.local/bin)
curl -fsSL https://raw.githubusercontent.com/aytzey/showagent/main/scripts/install.sh | sh
```

Prebuilt archives are on the releases page for linux/darwin amd64+arm64 and windows amd64.

## Usage

```sh
showagent                              # interactive picker
showagent list --json                  # every session, machine-readable, newest-first
showagent resume latest                # reopen the most recent session, any agent
showagent convert latest --to claude --dry-run   # preview a hand-off before writing
showagent info latest                  # exact resume command + storage location
showagent mcp                          # serve session history over stdio MCP
```

In the picker, `/` fuzzy-searches across agent, workspace, session id, and messages; `enter` resumes; `x` previews then writes a conversion; `n` branches a full local copy; `1`..`9` toggle provider visibility. `showagent list --json` emits a stable-field contract (`id`, `provider`, `workspace`, `updated`, `first_message`, `last_message`), and when stdout isn't a terminal plain `showagent` prints the list table, so pipes work.

## Limitations

Single-author project, early (34 stars at time of writing), so it's on [[toolbox/watchlist]] pending traction and release cadence. Linux and macOS are the supported platforms; Windows builds are released but experimental — resume runs the agent as a child process instead of replacing showagent (no `exec`), so its semantics are only approximated. OpenCode and jcode only appear when their CLI is installed, and OpenCode always needs its CLI because imports go through it. Conversion carries user/assistant turns only, not agent-private runtime state, which is the correct trade-off but means a converted session isn't a byte-for-byte clone.

Repo: <https://github.com/aytzey/showagent> — 34 stars, MIT license.
