Myrlin Workbook
Every Claude Code and ChatGPT Codex session on your machine, unified in one browser sidebar with discovery, scrollback, cost tracking and orchestration.
Evidence shows read-only access to Claude/Codex session dirs, in-memory SQLite byte image with no write handle, default bind to 127.0.0.1, no telemetry, generated password with override — permissions are restrained (least_privilege 2). Deducted: no threat model or security design doc; LAN/tunnel exposure of session transcripts is covered by one-line warnings only. Dependency security shows only lodash/xml2js overrides with no audit process or lockfile evidence (1). External effects (PTY spawning, gh PRs, Cloudflare tunnels, worktree deletion) are all declared (2). Rollback relies on JSON state under ~/.myrlin with no backup/restore mechanism (1). Attribution is clear with proper trademark disclaimers; publisher unverified (2).
README and package. corroborate each other (1.3.0-alpha.31 vs v1.3 alpha, Node 20+ engines, CI matrix 20/22) (2). Graceful degradation when node-pty build tools are missing, 'unknown' rather than guessed fields (2). Deducted: the v0.9 stable dual-channel claim cannot be cross-verified in this evidence; tests cover the HTTP client and UI source scans, but core parsing/pricing logic tests are not shown (held at 2, not 3).
Audience and scenarios are unusually concrete: developers running Claude Code and Codex together, phone access, TUI, demo mode; environment fit covers Windows ConPTY/macOS/Linux (both 3). Boundaries are explicit: 'not a hosted service and not an agent'; honest about Codex lacking dollar pricing (2). Deducted: discovery trigger rules and resilience to third-party CLI format changes are asserted in docs without code-level evidence.
Documentation architecture is excellent: layered SETUP/FEATURES/PROVIDER-INTERFACE/WORKFLOWS/OPERATIONS/CHANGELOG/design specs (3); install notes cover Node version, build tools, password, CWM_HOST (3); full AGPL-3.0 text with obligation explained (3). Deducted: CHANGELOG content not present in evidence (2); maintenance is a single author with no governance, release policy, or security-response channel (1); dual alpha/stable channels and multiple bin names (myrlin/myrlin-tui/cwm) carry naming-drift risk (2).
Output usability (scrollable terminal, cost tables, kanban, search) is well described at the documentation level (2). Marginal value argument is specific (real pain of fragmented sessions and lost scrollback) but is a static, unverified claim (2). Cost-benefit: local, free, open-source, no subscription (2). Deducted: all efficacy claims (cost parsing correctness, terminal behavior) lack execution evidence.
README claims trace to specific docs, contract documents, and guard tests (provider hard-coding check, palette drift test) (2). Cross-source consistency is strong across README, package., CI comments, and test comments (2). Fact/inference separation is good: test comments record the 2026-05-11 prod-directory incident and its fix; explicit stance of showing 'unknown' and refusing to invent prices (2). Deducted: key claims (Codex SQLite read, cost calculation) lack directly reviewable code paths within this evidence.
- Publisher identity is unverified; AGPL-3.0 and good docs are not supply-chain trust — review install-time scripts such as scripts/postinstall.js before installing.
- Exposing via CWM_HOST or a Cloudflare tunnel makes AI session transcripts (potentially containing secrets and confidential code) reachable over the browser; set a strong password first and evaluate network exposure.
- The app spawns PTY terminals, opens PRs via gh, deletes worktrees, and can stop/kill processes; these affect local system state — trial in an isolated environment first (--demo mode exists).
- No backup/rollback mechanism; state lives in ~/.myrlin, and the repo history records an incident where tests wiped production data — back up that directory manually before upgrades.
- Single maintainer, alpha channel, and multiple bin names mean behavior and APIs may change quickly; not suitable as a dependency for critical workflows without pinning.
What does this agent do, and when should you use it?
Myrlin Workbook is an open-source, self-hosted workspace manager that unifies sessions from two AI coding CLIs, Claude Code and ChatGPT Codex, in a single browser app. It reads both CLIs' existing data stores read-only — ~/.claude/projects and ~/.codex including state_5.sqlite — groups every session by the folder it ran in, and opens any of them in a real terminal via xterm.js over node-pty. The architecture is an Express server plus a vanilla HTML/CSS/JavaScript SPA with no React, no bundler and no build step; live state arrives over SSE, terminal data over binary WebSocket frames. Costs are computed from Claude's own usage fields in the transcripts, priced per model, session and project, and parsed on a worker thread. It also ships a kanban board, per-project docs, git worktree management, a five-tab phone layout, and optional TUI mode. It is not a hosted service and not an agent itself: no sign-up, no cloud, no telemetry, all state stays in ~/.myrlin/, licensed under AGPL-3.0.
On startup it scans ~/.claude/projects and ~/.codex — reading state_5.sqlite through an in-memory byte image so no write handle touches your history, with a filesystem walk over rollout JSONL as fallback — and parses sessions read-only, grouping them by directory with Recent and Discovered lists and an All / Claude Code / ChatGPT Codex switcher. Clicking a session opens a real PTY terminal (xterm.js in the browser, node-pty on the server; ConPTY directly on Windows, no WSL) where you can wheel back through the full recorded conversation and drag-select across the seam to copy. A Codex detail strip shows the model, reasoning effort, approval policy and sandbox read from the conversation itself. Claude costs come from input, output, cache write and cache read tokens priced per model, per session and per project, parsed on a worker thread. The board runs Backlog/Planning/Running/Review/Done with drag and drop; a card can own a git branch, a worktree and a live session, and open and track a PR through the gh CLI. Phone access works over LAN via CWM_HOST or an in-app Cloudflare tunnel, and npm start launches a blessed-based TUI mode.
- A developer running Claude Code and Codex side by side who wants every one of a few hundred sessions, spread across project folders, findable and restartable from one sidebar
- An engineer who needs to scroll back an hour through an agent's output and copy it, instead of hitting the top of a repaint-only terminal buffer
- A team lead tracking Claude coding spend by day/week/month across models, sessions and projects
- Someone checking session status and the Attention badge from their phone over LAN or a Cloudflare tunnel while away from the desk
- An agent-task orchestrator binding a card to a branch, worktree and live session and opening a PR via gh in one click
- A developer who wants a warning, with per-file breakdown, when two running agents edit the same files
What are this agent's strengths and limitations?
- Uniquely discovers and read-only parses both Claude Code (~/.claude/projects) and Codex (state_5.sqlite plus rollout JSONL) stores locally, matching what the ChatGPT desktop app itself shows
- Real PTY terminals (xterm.js + node-pty, ConPTY directly on Windows without WSL) whose scrollback extends seamlessly into the full recorded conversation history
- Zero build step — vanilla frontend plus Express backend — with providers abstracted behind a module interface in src/providers/ guarded by a contract test, so new CLIs can be added per PROVIDER-INTERFACE.md
- Cost parsing derives per-model pricing from transcript usage fields on a worker thread without stalling terminal I/O, and honestly reports tokens for Codex where no price is published
- Full mobile experience (visualViewport-driven layout, native long-press selection, long-press Ctrl+C for all control keys) plus built-in Cloudflare tunnel management
- Depends on already-installed Claude Code and Codex CLIs — it calls no models and is not an agent itself; without those CLIs there is nothing to manage
- node-pty requires a C++ build toolchain; without it, terminal panes are unavailable (the app boots in a degraded state)
- AGPL-3.0 obliges you to publish your changes if you run a modified version as a service others can reach
- Remote/phone access requires manual CWM_HOST and strong-password configuration since the default bind is 127.0.0.1 — security setup is on the user
- The dual-provider v1.3 release is still alpha (npx myrlin-workbook@alpha); the stable v0.9 supports Claude only
How do you install or deploy this agent?
Requires Node.js 20 or newer. Run directly with npx:
npx myrlin-workbook@alpha # v1.3 alpha: Claude Code + ChatGPT Codex
npx myrlin-workbook # v0.9 stable: Claude only
npx myrlin-workbook --demo # sample data, no real sessions needednode-pty needs C++ build tools; without them the app still boots, just without terminal panes. A random password is generated on first launch and saved to ~/.myrlin/config.; override with CWM_PASSWORD. The server binds to 127.0.0.1 by default; set CWM_HOST to your LAN IP for phone access (set a real password first).
How do you use this agent?
After install, launch with one of the npx commands and open the served browser tab. The sidebar groups all discovered sessions by folder; Ctrl+K fuzzy-searches sessions, projects and commands. Clicking a session opens it in a terminal pane — wheel back through history, drag-select and Ctrl+C to copy, Ctrl+Shift+A for all, Shift+PageUp to page. Pick one of thirteen terminal palettes under Settings, Interface, Terminal theme. The Costs view offers Day/Week/Month/All selectors, a timeline chart and a sortable table. Right-click a board card to create a branch, worktree and session at once. For phone use, set CWM_HOST to your LAN IP or start the in-app Cloudflare tunnel and pair via QR. Keyboard shortcuts, environment variables and troubleshooting are in docs/SETUP.md.
How does this agent compare with similar options?
It positions itself as a unified workspace layer above two CLIs that do not know about each other — previously you had to pick a UUID out of each CLI's own session list or juggle terminal windows; Myrlin aggregates both by project folder and adds scrollback-enabled terminals, cost accounting and a task board.