npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

combobulator

v0.1.6

Published

Unify local chat memory across Claude Code, Codex, and Cursor — your prompts and assistant replies follow you across tools.

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 combobulate

combobulator 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 combobulate

Supported 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 --all
  • combobulate installs and starts the background service.
  • stop stops and removes the background service. Sync state is preserved.
  • status shows daemon, path, and recent sync information.
  • doctor checks the installation and reports repair commands.
  • sync runs a one-time sync without the daemon.
  • discombobulate --all removes 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-run

Use --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-run

How 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 doctor

For Codex Desktop project-list problems, run:

combobulator fix-codex-projects

Daemon logs are stored at ~/.combobulator/daemon.log.

Development

npm test
COMBOBULATOR_DEBUG=1 combobulator daemon

The tests use temporary home directories and do not modify your real chat history.

License

MIT