I have three paid AI subscriptions. I want two. OpenAI’s ChatGPT Pro stays, Google AI Pro stays, Claude goes. A small administrative decision which has somehow involved a server, a searchable archive, two Linux machines, a Mac, and a laptop insisting it has absolutely no idea who I am while I’m already logged into it.

I should probably stop describing things as small administrative decisions.

Claude has been useful. There’s a lot of work in those conversations: code, project decisions, explanations, failed attempts, and the eventual discovery of which stupid little thing was causing the problem. I want to save twenty bucks. I would also quite like to avoid spending the rest of my life explaining my own projects back to a succession of helpful strangers.

So before I cancel anything, I need to take the useful history with me.

Packing, apparently

The account export arrived as five ZIP files on the Mac. I copied them across and checked that they matched the originals using SHA-256 hashes, essentially digital fingerprints for the files. I also checked that the archives opened without errors. Everything passed.

After my previous adventure in deleting this website while carefully preserving my terminal colours, I’m trying to get better at checking what I’ve actually saved. The bar is low. I put it there myself.

The export contained 59 conversations, along with project documents, saved memories, and summaries. I also collected the separate Claude Code histories from my Linux machines. Those are the records from using Claude in the terminal, where much of the coding work happened. Some of that history overlaps with the account export, so I kept track of where it came from rather than pretending every saved message was a unique contribution to human knowledge.

The original files are preserved. Alongside them, I now have readable text versions and a searchable database, built with SQLite. That means I can look up a project or an old problem without opening dozens of conversations and trying to remember which one contained the useful bit.

There’s also a starting document pointing to the relevant topics and correcting things that have changed. The old summaries are labelled as historical material. An assistant confidently saying something was true six conversations ago doesn’t make it true now. It might not even have been true then.

This gives the next assistant somewhere to look before asking me to explain the whole fucking setup again. It still has to find the relevant history and check it against the current work. The old chats don’t magically appear in ChatGPT’s sidebar, and putting a ZIP file within reach of an AI does not mean it has read it.

A note saying I once had a document

The export also contained 180 references to files whose originals weren’t included.

References. Lovely.

Some attachment text survived, but text pulled out of a document doesn’t give me the original document back. A reference to an image is even less useful when what I need is the bloody image. The code repositories, manuscripts, and other original files still need their own preservation. A conversation about building something is a poor substitute for the thing I built.

The archive now lives on my server, with a working copy on my main Linux machine. I’ve checked the server copy against the originals and tested the search. It’s in a directory covered by my existing local and offsite backup jobs, although I still need to verify a completed backup and restore containing this new material.

I have already written one blog post about discovering what my backups didn’t contain. I’d prefer not to establish a series.

The archive is a snapshot of the history I’ve collected so far. It won’t quietly gather every future conversation by itself. My assistants have instructions pointing to it, but they need access to those files to use it. The apps on my phones haven’t suddenly acquired my entire project history either.

The other subscription

Google AI Pro was already paid for, so getting proper use out of it was the next job. For coding work, that meant installing Google’s Antigravity tool, launched with the command agy, on the Linux machines and the Mac. Gemini is on both phones too.

The second laptop needed a small networking repair before any of that: I had forgotten to reinstall Tailscale after reinstalling the operating system. Tailscale is what lets my machines reach each other securely when they’re elsewhere.

The laptop wasn’t on the network because I hadn’t installed the software that puts it on the network. A difficult bug to report without the entire report being about me.

With that fixed, I got its remaining history archived and signed into agy. A test in the laptop’s own terminal worked. The same basic test through SSH, the secure connection I use to run commands remotely, returned authentication required.

Of course it fucking did.

Logged in, depending on who’s asking

Linux keeps saved sign-in credentials in a protected store called a keyring. Mine was unlocked, and agy could use it from the desktop. The remote session still couldn’t sign in. Matching the desktop’s session settings didn’t fix it either.

What finally worked was letting agy use the existing desktop connection to that keyring while removing the environment markers that told the program it had been launched through SSH. The secure remote connection itself stayed intact. Only the information passed to the agy process changed.

I put that into a small launcher called agy-desktop, opened a fresh SSH connection, and tested again. It answered correctly, including following my project instructions. No copying passwords around, no disabling keyring protection, no surgery on the actual agy program.

It still needs the desktop keyring to be accessible and unlocked. I haven’t proved it will work unattended after a reboot. Two successful tests are useful evidence, but I’m not promoting them to a lifetime guarantee because I’d like this paragraph to end happily.

I now have searchable history on the server and a working way to use the Google subscription I’m keeping. There are still original files to account for before I call the preservation job finished, and I haven’t cancelled Claude yet.

I set out to save twenty bucks and built a searchable archive with remote access. Apparently the cancel button is the only part of this process I haven’t needed to troubleshoot.