GitHub Icon BYTE • WORKFLOW

Atproto Gave Me Superpowers to Fix My Bookhive Data

Yesterday I imported my StoryGraph (a famous Goodreads alternative) data into BookHive (a much less famous Goodreads alternative built on atproto).1

The migration went only partially okay. It imported 50% of my history, and the entries that were imported had wrong or missing data, in particular the dates I started reading them.

Matching books is HARD, so I am not criticizing BookHive. Still, I had to fix all the values, and the task was boring and overwhelming.

Then I realized that BookHive data is hosted on my PDS2. So I thought, “What if I give Claude a temporary password and unleash it to fix my data?”

After all, I keep extensive notes on all the books I read (and more) in my Obsidian vault. Each book has start/read dates, scores, ratings, and all the data it needs.

So I asked it. In two minutes, I got this answer:

I logged into your PDS setup (handle davideaversa.it on eurosky.social) read-only (no auth needed for listing) and compared your Bookhive library against the vault. Here’s what I found:

Bookhive already has 229 book records (171 finished, 57 want-to-read, 1 reading) — looks like it was populated recently, likely via a Goodreads import.

Vault has 177 books with a read_on date. Comparing them:

83 matched an existing Bookhive record — of those, 2 are marked wantToRead in Bookhive despite being finished in the vault (On the Calculation of Volume I, Self Editing for Fiction Writers). ~75 have no Bookhive record at all — notably the Steven Saylor Roma Sub Rosa series, Blackwater series, several Star Trek novels, Stephen King titles, the Cixin Liu trilogy, and a batch of Italian-language books (these are likely missing from Bookhive’s catalog/Goodreads matching, or just weren’t in the import). Adding a missing book to Bookhive isn’t a single write — for each one I’d need to search Bookhive’s catalog for a matching hiveId (their internal book-catalog ID), then write a record to your PDS repo referencing it. That’s ~75 catalog lookups plus writes, and some (Italian titles, small press) may not exist in their catalog at all and would need to be skipped or reported.

It was promising. I did a couple of manual checks and then I gave it the green light. Ten minutes later, all my books’ data were synchronized and fixed.

It was a revealing experience. Note that I didn’t have to specify anything: no BookHive API, no structure of BookHive’s lexicon, nothing. The full prompt was:

Can you log in to my PDS (did:plc:w2wvugwwbehm7v774fkgagfl) and update the read book of Bookhive according to my Obsidian book vault?

That’s it. In an era of powerful agents, atproto applications give me a universal API to interact with my data. I think we are only scratching the surface of how awesome this is.


  1. I am not migrating away from StoryGraph. I just wanted to participate in BookHive as a “mirror” of my data in the ATmosphere↩︎

  2. The Personal Data Server, that is, where the data of atproto applications is stored. In my case, on EuroSky↩︎