How I work · AI coding
My AI coding sessions follow me between computers
Shared histories. Separate subscription logins. One place to find everything.
I use Claude Code, Codex, Grok, and OpenCode. I have several subscriptions, several Macs, and an Omarchy Linux PC.
That gives me plenty of ways to work.
It also gives me plenty of ways to lose the conversation I was working in.
Which computer was it on? Which account? Which agent? What was that session called?
So I put together a setup that makes those things easier to manage.
There are three pieces: shared histories, separate subscription logins, and a way to see what’s available.
The sessions follow me
I use Syncthing to share my Claude Code, Codex, and Grok histories between computers.
The shared folder looks roughly like this:
~/Sync/ai/
├── claude/
├── codex/
└── grok/
Each tool’s usual history directory points into that folder through a symlink.
For example:
~/.claude/projects → ~/Sync/ai/claude/projects
~/.codex/sessions → ~/Sync/ai/codex/sessions
~/.grok/sessions → ~/Sync/ai/grok/sessions
The tools keep using their normal paths. Syncthing handles moving the files.
I also share things like skills and instructions, so those follow me too.
Tailscale makes the machines easy to reach for SSH and setup work. Syncthing handles the file sync.
The subscriptions stay separate
I have short commands for the different accounts:
ccs → default Claude account
ccm → separate Claude profile
ccl → another Claude profile
cdx → default Codex account
cdx1 → separate Codex account
Each account has its own login. My Claude profiles point at the same project history.
That means choosing a subscription doesn’t require maintaining a separate library of conversations.
One small detail matters here: an inherited API key or OAuth token can override the profile you thought you selected. My Claude launchers clear those variables before choosing the account.
I want the command I typed to determine which subscription I’m using.
Getting the files there wasn’t enough
Codex has a local SQLite index as well as its transcript files.
A transcript can arrive through Syncthing without immediately appearing in the resume picker.
So I added a launcher that checks for newly synced sessions and asks Codex’s own backfill process to index them.
The Codex database stays local to each machine. The transcript files are shared.
Authentication is handled separately too. Copying a login once and blindly syncing rotating credentials forever are different problems.
Then I wanted one place to find everything
Backtrace is a native Mac app that browses sessions from Claude Code, Codex, Grok, and OpenCode.
I forked it to work with my setup.
The first problem was wonderfully mundane: its file scanner didn’t follow a history directory when the directory itself was a symlink.
Which was exactly how I’d arranged my histories.
I fixed that. I also made it avoid listing the same Claude history repeatedly when several profiles point at one shared folder.
And I changed OpenCode discovery to read its database directly, so sessions from other projects could be found.
Now I can search across the tools instead of remembering where I left something.
And I wanted to see the subscriptions
OpenUsage shows AI subscription usage in the Mac menu bar.
I forked that too.
My changes discover independent Claude profiles, label the accounts by email, and sort accounts by their next weekly quota reset.
So I can see which account has room and when its quota resets, then choose the corresponding command.
Both apps started as other people’s open-source projects. I adapted them to the way I work.
The result is pretty simple:
Find the conversation. Choose the subscription. Pick up the work on the computer I’m using.
Less remembering where everything lives. More getting on with it.
Built on amrshawqy’s Backtrace and robinebers’ OpenUsage. The links above point to my forks; the OpenUsage changes are on the feat/claude-profile-accounts branch.