Taxonomist

I’m really excited to introduce a project I worked on with various AI agents the other night, which I think represents a new way we might build things in the future.

First, the problem: My WordPress site has 5,600+ posts going back decades, and I had some categories that were old and I didn’t really use anymore, and I wasn’t happy with the structure. Every time I made a new post, it irked me a little, and I had this long-standing itch to go back and clean up all my categories, but I knew it was going to be a slog.

Let me present Taxonomist, a new open-source tool you can run with one copy-and-paste command line that solves this problem. Here’s the idea:

  1. You run this code in your terminal, and it spins up a Claude Code instance that asks you for your URL.
  2. Then it takes that and figures out what type of site you have, which APIs are available, and starts downloading all your posts locally for analysis.
  3. Sub-agents analyze every post against your current categories and thinks about suggesting new ones.
  4. It previews all the changes.
  5. Tries a variety of ways to authenticate against your site and make all the changes.
  6. Logs everything locally, so anything is reversible later.

THIS IS VERY ALPHA. PROBABLY BUGGY. BE CAREFUL WITH IT. PATCHES WELCOME. MAYBE MAKE A BACKUP OF YOUR SITE BEFORE YOU CHANGE IT.

It kind of just worked. I ran it live against ma.tt and it cleaned up a ton of stuff pretty much exactly how I wanted. But there’s a lot of weird stuff happening here, so I don’t know quite what this is yet.

  1. It’s very non-deterministic! There is some pre-written code, and probably could be more, but a lot of the code is generated on the fly by your agent. This creates interesting bugs where people testing with less powerful models had some odd behavior.
  2. I kind of want a directory of these useful AI agents on WordPress.org, but also, there’s something a little strange about trusting a remote shell script to run on your machine.
  3. I tested this with Claude, but there’s no reason Codex couldn’t use the repo in the exact same way, and I’d love to improve the quick start script to start by detecting all the agents you have, asking which you’d like to use, and also which directory you’d like to work in. I think we could kill the cd taxonomist-main && claude "start" part of it.
  4. Because much of the code and commands are generated on the fly from prompts, it’s very resilient! I’ve seen people try it, and it ran into errors with libraries or whatever, but it just figured out how to work around them.
  5. I’d love it if, at the end of every session, there was a moment for self-reflection where the agent would take the repository and suggest upstream issues and PRs based on anything that went wrong. Then this could recursively self-improve very quickly.
  6. There are some obvious improvements to this, for example, doing this for tags. Sometimes it creates too many categories when you might only want 3-5 for your theme.
  7. One fun thing is a bunch of the work of this just uses public WordPress APIs, so you can run it against any site! I like using distributed.blog as a demo. It’ll still do all the fun downloading and analysis and everything, you just won’t be able to make changes.
  8. I now have a local cache of all my WordPress posts I can do other interesting things with, and that’s cool.
  9. The logging and reverting probably still has some bugs in it.
  10. You can riff with it along the way, so for example, it suggested I get rid of my Audrey category because it didn’t have enough posts, and I asked it to look at all the companies on Audrey.co website and categorize any posts that talk about them as Audrey, which created like 50 more.
  11. I want to check the GitHub repo for any updates before it starts, and maybe periodically, because it’s iterating and improving really fast.
  12. It’s not the default but the entire thing is way more pleasant if you run it with skip-permissions. So testing I usually run the one-liner, exit, resume with skip.
  13. You can see some of my prompt history in the Github but I apologize it’s not comprehensive, I also used Gemini and Codex with this and got lots of value from them.

So, not sure what this is, but please check it out, play with it, submit improvements or ideas, and think about what’s next. Might host a Zoom or something to brainstorm.

The final thing I say is that this was a very different process of writing software for me. Instead of staying at the computer the entire time, I found myself going away for a bit, napping and dreaming about the code, coming back with new ideas and riffing on them. Maybe I’ll return to my Uberman polyphasic sleep days? Nap-driven development?

BTW I have lots of thoughts and feedback for Emdash but I thought this was more interesting, will try to get that out later tonight. One preview: TinyMCE is a regression; they should use Gutenberg! We designed it for other CMSes and would be fun to have some common ground to jam on.

Thirty Eight

This is an unusually late birthday post (still backdated to January 11). I woke up on my actual birthday and was not feeling it. I was locked down even more strictly than January 2021 because I was trying to be extra cautious prior to a surgery my Mom had later in the month. I was also on a fairly strict diet and exercise regime after slipping into a weight range I wasn’t comfortable with.

So I was feeling extra isolated, had a strange pain in my lower back, and I just felt old all over. I thought of the Drake line, “I’m really too young to be feeling this old.” (Maybe originally from Garth Brooks?)

I meditated with a Daily Calm from Jeff Warren called “The Boggle,” which unfortunately I can’t hotlink but here’s how it starts: Sometimes we’re in the boggle, life is throwing everything at us: complicated situations, complicated relationships, we have all these feelings, all these impulses pulling us in different directions, and we have no idea what to do. No idea how to resolve it all. Even no idea what self-care strategy to implement right now. So what’s interesting about the boggle is that there’s the challenge of the situation itself, or situations, and there’s the added challenge of the confusion of it, the scrambling to make sense of everything. So we’re going to try something different, we’re going to stop scrambling and accept, even forgive, the boggle. We’re going to let ourselves be right here, inside any confusion, and take a break from trying to fix any of it. That’s the itinerary, let’s go. It hit close to home, and I’ve ended up returning to that meditation several times since.

The day really shaped up, though! Friends surprised me with a trip to a Teamlab exhibit at a museum that was closed on Tuesdays but they got opened up just for us. The museum was magical, but the best part was seeing friends I wasn’t expecting to, even if masked and relatively distanced. I wore a new comfy matching tie die outfit too, because, why not? Ended the day with a small dinner with Mom and three friends.

I don’t have any particular wisdom from this birthday except no matter how you feel, take some Advil and keep going.

This year on the personal side I’d like to take more silent retreats, get settled at home and out of liminal states, particularly construction projects, and listen to more operas. On the work side I’d like to set up alternative ecosystems for people tired of the traditional options for social with Tumblr, listening with Pocket Casts, and writing with Day One. (Update: A few weeks after my birthday I announced I’m working on Tumblr full-time.) Finally, I’d like to do my birthday post on time next year, but I’m forgiving myself for prioritizing friends and family that day. 😄

All birthday posts: 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42.

WP.com Simplification

WordPress.com offers two modes of WP: WordPress and WordPress MS. For free and lower-priced accounts it runs a version of WordPress called WordPress MS, or WordPress Multisite, which is designed for super-efficient multi-tenant usage, which is what has allowed it to introduce hundreds of millions of people to WordPress and run at a huge scale. (It was initially called MU, for multi-user, but we had to change it because someone squatted the name WPMU and built a business on top that was confusing users with commercial products. Such is my curse.) It revolutionized the hosting industry in a number of ways, including acclimating customers to per-site pricing instead of unlimited domains and raising the bar for what a host would manage for users so they didn’t have to worry. It has also provided a highly secure base login, which allows us to offer popular SaaS services, such as statistics and anti-spam, to all WordPress users, regardless of where they’re hosted.

At higher-priced plans you’d get access to not just a curated set of plugins and themes but the ability to install anything you like from the ecosystem, which invisibly switches your account to WP.cloud in the backend that supports unlimited plugins and themes and custom code, in a way that’s still multi-datacenter and maintenance-free. This has been very successful and works great for a ton of customers, but it still puts an asterisk when you recommend WordPress.com to someone because they’d need to be on one of the higher-priced plans to get an experience of WordPress with custom plugins and themes.

For the first time ever we’re running a summer special where every single paid account gets that full WP.cloud experience with full customization and control. It’s a test we’re running until August 25th. It’s WordPress, without the asterisk, without limits, implemented in a way that’s intuitive and safe for novice users, while also being extremely powerful for developers. If you haven’t checked out WP.com in a while, it’s a great deal starting at just $4 per month. I’m curious to see the results of how this goes. We also have a number of more radical things I’m eager to try out! It’s a great time to reimagine what you’re doing from the ground up and question your longest-held beliefs, as AI has really put people in a more experimental and open mindset.

R.I.P Dean Allen

Dean Allen, a web pioneer and good man, has passed away. I’ve been processing the news for a few days and still don’t know where to begin. Dean was a writer, who wrote the software he wrote on. His websites were crafted, designed, and typeset so well you would have visited them even if they were filled with Lorem Ipsum, and paired with his writing you were drawn into an impossibly rich world. His blog was called Textism, and among many other things it introduced me to the art of typography.

Later, he created Textpattern, without which WordPress wouldn’t exist. Later, he created Textdrive with Jason Hoffman, without which WordPress wouldn’t have found an early business model or had a home on the web. He brought a care and craft to everything he touched that inspires me to this day. As John Gruber said, “Dean strove for perfection and often achieved it.” (Aside: Making typography better on the web led John Gruber to release Smarty Pants, Dean a tool called Textile, and myself something called Texturize all within a few months of each other; John continued his work and created Markdown, I put Texturize into WP, and Dean released Textile in Textpattern.)

Years later, we became friends and shared many trips, walks, drinks, and meals together, often with Hanni and Om. (When we overlapped in Vancouver he immediately texted “I’ll show you some butt-kicking food and drink.”) His zest for life was matched with an encyclopedic knowledge of culture and voracious reading (and later podcast listening) habits. I learned so much in our time together, a web inspiration who turned for me into a real-life mensch. He was endlessly generous with his time and counsel in design, prose, and fashion. I learned the impossibly clever sentences he wrote, that you assumed were the product of a small writing crew or at least a few revisions, came annoyingly easily to him, an extension of how he actually thought and wrote and the culmination of a lifetime of telling stories and connecting to the human psyche.

Dean, who (of course) was also a great photographer, didn’t love having his own photo taken but would occasionally tolerate me when I pointed a camera at him and Om has a number of the photos on his post. There’s one that haunts me: before getting BBQ we were at his friend’s apartment in Vancouver, listening to Mingus and enjoying hand-crafted old fashioneds with antique bitters, and despite the rain we went on the roof to see the art that was visible from there. He obliged to a photo this time though and we took photos of each other individually in front of a sign that said “EVERYTHING IS GOING TO BE ALRIGHT.” It wasn’t, but it’s what I imagine Dean would say right now if he could.

When we first met, in 2006, from Jason.

Very honored to be on Time’s 30 under 30 list alongside some amazing folks across a number of fields. I only have about another month of being under 30, so good to be on these lists while I still can. 🙂

New TV Ads

As I mentioned in the State of the Word this is the year we’re ramping up marketing. There is lots to learn and much to follow, but we have our first TV ads up in six markets to test. Each shares a story of a business in Detroit, and I actually got the chance to visit one of the businesses earlier today.

 

Whole Foods and Pseudoscience

Michael Schulson takes a great look at the contrast between Whole Foods and the Creationist Museum in Whole Foods: America’s Temple of Pseudoscience. It is a good reminder that we must try to use the best available data in decisions regardless of our preëxisting proclivities. Also good to check out is Grist’s series on GMOs, probably best summarized in What I learned from six months of GMO research: None of it matters or the NY Times A Lonely Quest for Facts on Genetically Modified Crops.

Do you know someone who is an amazing developer or designer? Someone who is passionate about helping people? An awesome lounge manager? Or maybe that person is you. Automattic is hiring for a variety of positions, and for all except two you can live and work wherever you like in the entire planet. There are also a number of other benefits; the main downside it’s a high performance culture and expectations are extremely high. Automattic hires the best folks regardless of geography, and we are especially looking for people right now outside of US timezones.

Keeping Links Kosher

As part of the re-vamp I’ve put together a 404 script that emails me whenever it’s called. This has certainly been an eye-opener as to the misguided traffic that this site gets. An email is so much different than just seeing the hits in your logs, and I would recommend anyone serious about maintaining a site do something similar.

There are a few links to my old curly quotes entry that link to a rather funky perversion of a fly-by-night URI scheme that has long since gone by the by. These links worked just fine until I deleted the file that was keeping things going, now it’s time to move things into the magic .htaccess file.

Let’s take a look at the URI in question:
http://www.photomatt.net/archives/m/200209?p=186

My first thought was to just plop latter part of the request and create a rule just for this link, as such.

Redirect Permanent /archives/m/200209?p=186 http://photomatt.net/p186

Didn’t work, never matched. Next try I decided to go for something a little broader:

RedirectMatch 301 .*p=([0-9]+) http://photomatt.net/p$1

Didn’t work, never matched. Some research found that the problem lies in the query string, and the Apache redirect directives don’t address the query string. So let’s give mod_rewrite a go:

RewriteRule ^.*p=([0-9]+) http://photomatt.net/p$1 [R=301,L]

Still no luck. (For those that wonder, the HTTP response code 301 indicates that the resource has been permanently moved. “Permanent” in the first try is just a synonym of “301”.) It looks like the magical mod_rewrite doesn’t match query strings either. Some more research turned up that while redirect doesn’t match or rewrite query strings, it does pass them all. So we are left with:

Redirect Permanent /archives/m/200209 http://photomatt.net/

Which, counter-intuitively, works. The ?p=186 on the end is just passed to the root of the site, which gives it to my index file which knows just what to do with it. I would like to eliminate the query string entirely and forward the URI to http://photomat.net/p186 but while that would be trivial in any scripting language I can’t nail down how to do it on the Apache or mod_rewrite level. So my options now are to add something to the global header to catch p=something query strings and redirect it, but I’d like to keep that file clean, so more likely is that I’ll start adding some URI management code into the 404 handler and generally make that file more sophisticated in general. We’ll see.

Published on CNN

Today a short piece “10 blogs to make you think” I wrote for CNN.com was published. I’m pretty excited about this and I also hope it drives a new audience to the blogs I mentioned, though to be fair if you’re not fascinated by how technology is changing society my picks might not be interesting. It’s a short piece in a “top ten” format, but I put a lot of thought into curating the picks.

I started blogging because I love writing. While the nature of Automattic is such that I’m writing all day long to communicate with my colleagues but writing for communication is different from the state of mind you’re in when you sit down to tell a story or change someone’s perspective. (Though perhaps it shouldn’t be.)

I started blogging for writing, I kept blogging for comments. It turns out what I love isn’t the act of writing itself, which has never come easy to me, but the conversation that happens afterward. Collectively in tech we become infatuated with each new medium be it blogs, widgets, social networks, micro-blogs, but in the end it always comes back to people talking to each other and eventually the novelty of the format fades.

As a final note when I write now I go into the WordPress editor because I know the auto-save will make sure my text is always safe, it produces clean and simple HTML, and I lean on After the Deadline. (Which now helps you rock the diaeresis New Yorker-style.)

Driving on the Left

We’ve been driving all around the Dublin area, through Slane, Dunleek, Dowth, New Grange, and finally Drogheda and becoming accustomed to driving on the left has been an interesting experience. First in the rental car there are no fewer than 4 stickers throughout the driver area reminding you to be on the left, and there also seem to be signs to remind you about it around all the tourist areas. What I found difficult wasn’t driving on the left side, which was fairly easy to remember, but rather I found myself aligning myself as the driver with the part of the lane I would be in if I was driving on the right side. Needless to say, this can put you dangerously close to anything to the left of you. So my new mantra (oft-repeated by my sister) has become “Guide to the left.” Thank goodness for collapsible mirrors. On the bright side, left turns are easy.