combobulator
v0.1.6
Published
Unify local chat memory across Claude Code, Codex, and Cursor — your prompts and assistant replies follow you across tools.
Maintainers
Readme
combobulator
Keep local coding chats in sync across Claude Code, Codex, Cursor, and T3 Code.
Combobulator runs as a small macOS background service. It watches each tool's local session storage and writes new chats into the native history format used by the other tools.
Start a chat in Codex, continue it in Claude Code, then reopen the original Codex chat and see the continuation there too. The same flow works in the other direction. Mirrored chats keep their project, title, messages, and timestamps.
Requirements
- macOS
- Node.js 22 or newer
Install
npm install -g combobulator
combobulator combobulatecombobulator combobulate starts the launchd agent and configures it to run after
login. Only chats created or updated after installation are synced by default.
To install from a local clone instead:
npm install -g .
combobulator combobulateSupported tools
| Tool | Support | |---|---| | Claude Code CLI and editor extensions | Read and write | | Codex CLI and Codex Desktop | Read and write | | Cursor chat | Read only | | T3 Code | Read and write |
Cursor chats can be mirrored into Claude Code, Codex, and T3 Code. Combobulator does not write chats into Cursor's database because Cursor keeps it locked while running.
Claude Desktop's cloud-backed "Claude Code" tab is not supported. Synced chats are available through the Claude Code CLI and its VS Code or Cursor extensions.
Commands
combobulator combobulate
combobulator stop
combobulator status
combobulator doctor
combobulator sync
combobulator discombobulate --allcombobulateinstalls and starts the background service.stopstops and removes the background service. Sync state is preserved.statusshows daemon, path, and recent sync information.doctorchecks the installation and reports repair commands.syncruns a one-time sync without the daemon.discombobulate --allremoves every mirrored chat and tracking record while preserving original Claude Code, Codex, and Cursor chats.
Useful one-time sync options:
combobulator sync --all --since-hours=24 --limit=20 --dry-runUse --all to ignore the installation time, --since-hours to set the search
window, --limit to cap sessions per source, and --dry-run to preview changes.
Preview mirror removal before running it:
combobulator discombobulate --all --dry-runHow syncing works
The daemon uses filesystem events instead of continuously polling. A slow recovery scan catches dropped events or source directories created after the daemon starts.
Combobulator marks every mirror it creates to prevent sync loops. When a mirror is continued in Claude Code or Codex, the new transcript tail is written back to the original chat only when the existing messages match exactly. Divergent histories are left untouched rather than merged automatically.
Mirrored titles include [Claude Code], [Codex], or [Cursor] so their source
is visible in resume lists.
ChatGPT Desktop does not currently expose a background refresh API for chats created or updated outside its own app-server process. Mirrors are updated on disk immediately, but an already-running ChatGPT app may need to be restarted before its cached task list or transcript reflects those changes. Combobulator does not automatically open or reload ChatGPT because doing so can interrupt active work.
Troubleshooting
Start with:
combobulator doctorFor Codex Desktop project-list problems, run:
combobulator fix-codex-projectsDaemon logs are stored at ~/.combobulator/daemon.log.
Development
npm test
COMBOBULATOR_DEBUG=1 combobulator daemonThe tests use temporary home directories and do not modify your real chat history.
License
MIT
