Discover MCPs & agents
Loading MCPs and agents…
Loading MCPs and agents…
The only tool that replays Claude, Codex, Cursor, AND Gemini AI coding sessions in one unified UI. Vibe coding companion for reviewing, searching, and sharing your AI pair programming transcripts.
From the repo.
The only tool that replays Claude, Codex, Cursor, AND Gemini sessions in one unified UI.
Unlike CLI tools that export static HTML, TalkReplay gives you a live, searchable interface to revisit AI pairing sessions, star important conversations, filter by date/keyword, and share insights with your team.
npx talk-replay
npxVibe coding thrives on fast feedback loops. TalkReplay preserves that energy by:
agents_chat/ and enforcing hooks for reproducibilityTalkReplay doubles as a living reference implementation for vibe coding teams:
agents_chat/ captures each AI pairing session using timestamped Markdown that logs prompts, decisions, code excerpts, and self-tests.pre-commit hook blocks commits unless a new log is staged and pnpm lint / pnpm test pass, preserving replayable histories.tasks.md tracks milestone checklists so incremental commits stay aligned with the agreed plan.agents.md, docs/) keep collaboration guardrails co-located with the codebase.





pnpm install
pnpm dev -- --port 3002
Key scripts:
pnpm lint – ESLint with Tailwind orderingpnpm test – Vitest + React Testing Librarypnpm build – Next.js production buildpnpm format:fix – Prettier write modeOn first run, a provider setup wizard appears and auto-detects common Claude/Codex/Cursor/Gemini directories; confirm or tweak the suggestions to start importing. You can revisit Settings at any point. Preferences persist via a safe localStorage wrapper that falls back to an in-memory store when quotas are exceeded.
Install Node.js 18 or newer, then launch the prebuilt bundle directly from npm:
npx talk-replay --port 4000
Flags:
--port / -p sets the listening port (defaults to 3000 or $PORT).--hostname / -H controls the bind address (0.0.0.0 by default for LAN access).--help prints usage details without starting the server.The CLI ships with the Next.js standalone output, so no extra build step is needed when running via npx. When executing the CLI from a git checkout instead of npm, run pnpm build first to generate .next/standalone.
Install TalkReplay as a system service to auto-start on login:
# Install and start the service
npx talk-replay install --port 3000
# Check status
npx talk-replay status
# Stop, start, restart
npx talk-replay stop
npx talk-replay start
npx talk-replay restart
# Remove the service
npx talk-replay uninstall
Install options:
--port <number> – Port to listen on (default 3000)--hostname <value> – Hostname binding (default 0.0.0.0)--name <string> – Service name (default talk-replay)macOS (launchd)
~/Library/LaunchAgents/com.talkreplay.plist~/Library/Logs/talk-replay.logLinux (systemd user service)
~/.config/systemd/user/talk-replay.servicejournalctl --user -u talk-replay -fWindows
node-windows package (optional dependency)npm install -g node-windows && npm link node-windowsservices.msc)Provider paths follow the same precedence as the web app (in-app settings → env vars → auto-detection). Supply overrides with environment variables when invoking npx:
NEXT_PUBLIC_CLAUDE_ROOT=$HOME/.claude/projects \
NEXT_PUBLIC_CODEX_ROOT=$HOME/.codex/sessions \
npx talk-replay --port 4500
Environment variables drive autodiscovery (defaults by OS):
NEXT_PUBLIC_CLAUDE_ROOT=/Users/you/.claude/projects # macOS/Linux default
NEXT_PUBLIC_CODEX_ROOT=/Users/you/.codex/sessions # macOS/Linux default
NEXT_PUBLIC_CURSOR_ROOT="/Users/you/Library/Application Support/Cursor" # macOS default
NEXT_PUBLIC_GEMINI_ROOT=/path/to/gemini/logs # optional
Windows paths
# PowerShell
$env:CLAUDE_ROOT="C:\\Users\\<you>\\.claude\\projects"
$env:CODEX_ROOT="C:\\Users\\<you>\\.codex\\sessions"
$env:CURSOR_ROOT="C:\\Users\\<you>\\AppData\\Roaming\\Cursor"
$env:NEXT_PUBLIC_CLAUDE_ROOT=$env:CLAUDE_ROOT
$env:NEXT_PUBLIC_CODEX_ROOT=$env:CODEX_ROOT
$env:NEXT_PUBLIC_CURSOR_ROOT=$env:CURSOR_ROOT
# Cmd
set CLAUDE_ROOT=C:\Users\<you>\.claude\projects
set CODEX_ROOT=C:\Users\<you>\.codex\sessions
set CURSOR_ROOT=C:\Users\<you>\AppData\Roaming\Cursor
set NEXT_PUBLIC_CLAUDE_ROOT=%CLAUDE_ROOT%
set NEXT_PUBLIC_CODEX_ROOT=%CODEX_ROOT%
set NEXT_PUBLIC_CURSOR_ROOT=%CURSOR_ROOT%
Linux/macOS paths
export CLAUDE_ROOT="$HOME/.claude/projects"
export CODEX_ROOT="$HOME/.codex/sessions"
export CURSOR_ROOT="$HOME/.config/Cursor"
export NEXT_PUBLIC_CLAUDE_ROOT="$CLAUDE_ROOT"
export NEXT_PUBLIC_CODEX_ROOT="$CODEX_ROOT"
export NEXT_PUBLIC_CURSOR_ROOT="$CURSOR_ROOT"
WSL2 note: use /mnt/c/Users/<you>/.claude/projects and /mnt/c/Users/<you>/.codex/sessions when launching Docker from WSL.
Server-side fallbacks honour CLAUDE_ROOT, CODEX_ROOT, CURSOR_ROOT, and GEMINI_ROOT. See src/config/providerPaths.ts for normalisation logic.
When neither Settings nor environment variables provide explicit paths, the server attempts to auto-detect provider roots from common locations. The first existing directory in the list below is used per provider.
/app/data/claude~/.claude/projectsC:\Users\<you>\.claude\projects (also tries ~/Documents/Claude/projects)/app/data/codex~/.codex/sessionsC:\Users\<you>\.codex\sessions (also tries ~/Documents/Codex/sessions)~/Library/Application Support/Cursor~/.config/CursorC:\Users\<you>\AppData\Roaming\Cursor/app/data/cursorQuick check: confirm Cursor ingestion with
pnpm dlx tsx scripts/check-cursor.ts \
"/Users/<you>/Library/Application Support/Cursor"
CURSOR_ROOT / automatic defaults.~/.gemini/logs or ~/.gemini/sessionsPrecedence
NEXT_PUBLIC_* for UI, CLAUDE_ROOT/CODEX_ROOT/GEMINI_ROOT for server) > 3. Automatic defaultsThese defaults align with the Docker image’s volume layout and common CLI storage conventions, so most users can simply mount their local logs or let the app pick them up from ~.
src/lib/providers/; adapters share a unified message schema in src/types/chat.ts.fixtures/ mirrors real directory layouts for Claude, Codex (Cursor coming soon), enabling offline demos.Build and run the production bundle inside Docker:
docker build -t talk-replay .
docker run \
-p 3000:3000 \
-e NEXT_PUBLIC_CLAUDE_ROOT=/app/data/claude \
-e NEXT_PUBLIC_CODEX_ROOT=/app/data/codex \
-e NEXT_PUBLIC_CURSOR_ROOT=/app/data/cursor \
-e CLAUDE_ROOT=/app/data/claude \
-e CODEX_ROOT=/app/data/codex \
-e CURSOR_ROOT=/app/data/cursor \
-v "$HOME/.claude/projects":/app/data/claude:ro \
-v "$HOME/.codex/sessions":/app/data/codex:ro \
-v "$HOME/Library/Application Support/Cursor":/app/data/cursor:ro \
talk-replay
Windows PowerShell
docker run `
-p 3000:3000 `
-e NEXT_PUBLIC_CLAUDE_ROOT=/app/data/claude `
-e NEXT_PUBLIC_CODEX_ROOT=/app/data/codex `
-e NEXT_PUBLIC_CURSOR_ROOT=/app/data/cursor `
-e CLAUDE_ROOT=/app/data/claude `
-e CODEX_ROOT=/app/data/codex `
-e CURSOR_ROOT=/app/data/cursor `
-v C:\Users\<you>\.claude\projects:/app/data/claude:ro `
-v C:\Users\<you>\.codex\sessions:/app/data/codex:ro `
-v C:\Users\<you>\AppData\Roaming\Cursor:/app/data/cursor:ro `
talk-replay
WSL2 (from the Ubuntu shell)
docker run \
-p 3000:3000 \
-e NEXT_PUBLIC_CLAUDE_ROOT=/app/data/claude \
-e NEXT_PUBLIC_CODEX_ROOT=/app/data/codex \
-e NEXT_PUBLIC_CURSOR_ROOT=/app/data/cursor \
-e CLAUDE_ROOT=/app/data/claude \
-e CODEX_ROOT=/app/data/codex \
-e CURSOR_ROOT=/app/data/cursor \
-v /mnt/c/Users/<you>/.claude/projects:/app/data/claude:ro \
-v /mnt/c/Users/<you>/.codex/sessions:/app/data/codex:ro \
-v /mnt/c/Users/<you>/AppData/Roaming/Cursor:/app/data/cursor:ro \
talk-replay
Or use docker-compose:
CLAUDE_LOGS_PATH="$HOME/.claude/projects" \
CODEX_LOGS_PATH="$HOME/.codex/sessions" \
CURSOR_LOGS_PATH="$HOME/Library/Application Support/Cursor" \
APP_PORT=3000 \
docker compose up --build
To demo bundled fixtures instead, set CLAUDE_LOGS_PATH=./fixtures/claude and CODEX_LOGS_PATH=./fixtures/codex before running compose. The container sets both runtime and NEXT_PUBLIC_* env variables so the UI skips manual setup.
Windows compose (PowerShell)
$env:CLAUDE_LOGS_PATH="C:\\Users\\<you>\\.claude\\projects";
$env:CODEX_LOGS_PATH="C:\\Users\\<you>\\.codex\\sessions";
$env:CURSOR_LOGS_PATH="C:\\Users\\<you>\\AppData\\Roaming\\Cursor";
$env:APP_PORT=3000;
docker compose up --build
Containers can only see paths mounted into the filesystem above. Open Settings
to confirm the mapped /app/data/** directories once the container is running; host-only paths will not
resolve inside Docker without the volume bindings shown here.
If you prefer to run the production server directly on the host, build once and then launch with provider paths pointing to your local transcripts:
pnpm build
CLAUDE_ROOT="$HOME/.claude/projects" \
CODEX_ROOT="$HOME/.codex/sessions" \
NEXT_PUBLIC_CLAUDE_ROOT="$CLAUDE_ROOT" \
NEXT_PUBLIC_CODEX_ROOT="$CODEX_ROOT" \
pnpm start
On Windows PowerShell:
pnpm build
$env:CLAUDE_ROOT="C:\\Users\\<you>\\.claude\\projects"
$env:CODEX_ROOT="C:\\Users\\<you>\\.codex\\sessions"
$env:NEXT_PUBLIC_CLAUDE_ROOT=$env:CLAUDE_ROOT
$env:NEXT_PUBLIC_CODEX_ROOT=$env:CODEX_ROOT
pnpm start
Alternatively, leverage the standalone output (next.config.mjs sets output: "standalone") and
run it with Node directly. Ensure the .next/standalone, .next/static, and public folders stay
side-by-side so asset paths resolve correctly:
pnpm build
CLAUDE_ROOT="$HOME/.claude/projects" \
CODEX_ROOT="$HOME/.codex/sessions" \
NEXT_PUBLIC_CLAUDE_ROOT="$CLAUDE_ROOT" \
NEXT_PUBLIC_CODEX_ROOT="$CODEX_ROOT" \
PORT=3000 \
NODE_ENV=production \
node .next/standalone/server.js
Windows PowerShell:
pnpm build
$env:CLAUDE_ROOT="C:\\Users\\<you>\\.claude\\projects"
$env:CODEX_ROOT="C:\\Users\\<you>\\.codex\\sessions"
$env:NEXT_PUBLIC_CLAUDE_ROOT=$env:CLAUDE_ROOT
$env:NEXT_PUBLIC_CODEX_ROOT=$env:CODEX_ROOT
$env:PORT=3000
$env:NODE_ENV="production"
node .next/standalone/server.js
Adjust the paths if you store transcripts elsewhere. When running directly on the host, you can also skip the environment variables and use the Settings page to point to any readable directory on demand; the env vars simply provide sensible defaults that mirror the Docker layout.
Two GitHub Actions keep packaging and releases reproducible:
.github/workflows/ci.yml runs linting, tests, builds the Next.js bundle, exercises the CLI help command, and creates an npm tarball for inspection on every push/PR..github/workflows/npm-publish.yml publishes the talk-replay package to npm when a GitHub release is published (or when the workflow is triggered manually). Configure an NPM_TOKEN secret with publish rights before enabling it.See docs/release-process.md for the end-to-end checklist, including how to capture release notes in agents_chat.
pnpm lint, pnpm test, and verifies agents_chat compliance/api/sessions and /api/sessions/detailtasks.md – milestone tracking (Milestone 1 focuses on local replay, Milestone 2 on shared backend)docs/browser-file-access.md – browser capabilities for local importsdocs/cursor-storage.md – notes on Cursor prompt storage and reconstructing assistant outputsagents.md – collaboration rules for vibe coding workflowsREADME.zh.md – Chinese overview for bilingual teamsFuture enhancements: Gemini support, virtualised lists, keyboard shortcuts, collaborative backend, and export tooling.
Replace {MCP_ENDPOINT_URL} with this MCP’s endpoint URL (from its repo or docs above). No API key — you connect directly.
Tool
OS
Config file: ~/.cursor/mcp.json
{
"mcpServers": {
"mcp-server": {
"url": "{MCP_ENDPOINT_URL}"
}
}
}Paste into mcpServers in the config file. Restart Cursor after saving.
If this MCP is also published on mcpchannel.ai, you can subscribe from Browse and use the gateway config there instead.