Every Claude Code and ChatGPT Codex session on your machine, in one sidebar.
Install · Features · Phone · Codex · Architecture · Docs · Contributing
I run Claude Code all day and I started running Codex alongside it. Between the two there are a few hundred conversations on this machine, spread across two CLIs that do not know about each other, in a dozen project folders, and the only way to get back to one is to pick a UUID out of a list. Open three at once and you are juggling terminal windows. Restart the machine and you reopen everything by hand. Scroll up in a pane to find what an agent did an hour ago and you hit the top of the buffer, because a coding agent repaints its screen and keeps no scrollback at all.
So I built the thing I wanted. Myrlin reads both CLIs where they already store their data, groups every session by the folder it ran in, and opens any of them in a real terminal in a browser tab. You can wheel back through the whole conversation, drag a selection across an hour of history and copy it. Costs come out of the transcripts. Docs, a kanban board and git worktrees sit next to the sessions they belong to. It runs on your phone over your own network.
It is not a hosted service and it is not an agent. There is no sign-up, no cloud, no telemetry, and no model gets called unless you ask for one. It is a local Node server, a browser tab, and your own two CLIs doing what they already do.
npx myrlin-workbook@alpha # v1.3 alpha: Claude Code and ChatGPT Codex, redesigned, phone layout
npx myrlin-workbook # v0.9 stable: Claude only, unchanged
npx myrlin-workbook --demo # sample data, no real sessions neededNode 20 or newer. node-pty needs C++ build tools; if they are missing the app still
boots, just without terminal panes.
A random password is generated on first launch and saved to ~/.myrlin/config.json, where
it survives updates, reinstalls and npx cache clears. Set CWM_PASSWORD to override it.
The server binds to 127.0.0.1 by default. Set CWM_HOST to your LAN IP to reach it from
a phone or another machine, and set a real password first.
Everything else, including tunnels, environment variables, keyboard shortcuts and troubleshooting, is in SETUP.md.
- Session templates. Save a working directory, model, flags and spawn options, then launch from it in one click.
- Conflict detection. Warns when two running sessions are editing the same files, with a per-file breakdown and a chip that jumps to the session responsible.
- Quick switcher.
Ctrl+KorCmd+Kfor fuzzy search across every session, project and command. - Git and worktrees. Branch, dirty state and ahead/behind per project, worktree create and delete, and a right-click that makes a branch, a worktree and a session at once.
- Pull request automation. Descriptions generated from the diff, PRs opened through
the
ghCLI, and card badges for open, draft, merged and closed. - td integration. Surfaces td issues in the docs panel and the sidebar, and promotes any issue to a worktree plus a session in one click.
- Port detection and resource monitoring. Listening ports per session, live CPU and memory, a system overview, and stop, restart or kill from the Resources tab.
- Search. One query across both providers, over sessions, commands and past conversations.
- Docs panel. Notes, Goals, Tasks, Rules and Roadmap per project, in a markdown editor, with a Planned, Active, Review and Done feature board.
- Remote access. Cloudflare tunnel management from inside the app, and QR pairing so a phone signs in once.
- TUI mode. A blessed interface for when you do not want a browser tab:
npm start.
The exhaustive list is in FEATURES.md.
An Express server and a vanilla HTML, CSS and JavaScript SPA. No React, no bundler, no build step: the frontend is served as written.
Terminals are xterm.js in the browser talking to node-pty on the server over a WebSocket
carrying binary frames. Live state reaches the browser over SSE, everything else over a
REST API. An optional headless VT sidecar keeps a deeper server-side line log for shells,
behind CWM_VT_SIDECAR=1.
Each CLI is a module under src/providers/, exposing the same interface for discovery,
parsing, search and spawning. A test guards the seam: hard-coding a provider name outside
that directory fails the build unless the line is explicitly annotated, so the rest of the
app does not know which CLI it is talking to.
State is JSON under ~/.myrlin/. There is no sign-up, no server of ours, no database of
its own and no telemetry. Your sessions, your costs and your notes stay on your disk.
The contract documents behind the 1.3 redesign are DESIGN-SPEC.md, TERMINAL-ARCHITECTURE.md, CODEX-PARITY.md and MOBILE-EXPERIENCE.md.
- SETUP.md is install, configuration, keyboard shortcuts and troubleshooting.
- FEATURES.md is every capability, by area, plus the roadmap.
- PROVIDER-INTERFACE.md is the contract a new CLI provider implements.
- WORKFLOWS.md covers the agent task board and worktree workflow.
- OPERATIONS.md covers running it as a long-lived service.
- CHANGELOG.md is the full record of what changed and why.
Issues and pull requests are welcome. There is no build step: clone it, npm install,
start editing.
npm test # unit and contract suite
npm run test:browser # real Chromium and xterm acceptance, on Windows
npm run gui # start the serverRead CONTRIBUTING.md first. It covers branch naming, what a good pull request looks like, and which changes have to pass the browser gate.
AGPL-3.0. Use it, change it and self-host it however you like. The one obligation is that if you run a modified version as a service other people can reach, you have to publish your changes.
Claude and Claude Code are trademarks of Anthropic. ChatGPT and Codex are trademarks of OpenAI. This project is not affiliated with, endorsed by or sponsored by either company.
Built by Arthur.





