{"id":4560,"date":"2026-04-02T00:14:51","date_gmt":"2026-04-02T00:14:51","guid":{"rendered":"https:\/\/frontlinenewsng.org\/?p=4560"},"modified":"2026-04-02T00:14:51","modified_gmt":"2026-04-02T00:14:51","slug":"matt-taxonomist","status":"publish","type":"post","link":"https:\/\/frontlinenewsng.org\/?p=4560","title":{"rendered":"Matt: Taxonomist"},"content":{"rendered":"<p class=\"wp-block-paragraph\">I\u2019m 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.<\/p>\n<p class=\"wp-block-paragraph\">First, the problem: My WordPress site has 5,600+ posts going back decades, and I had some categories that were old and I didn\u2019t really use anymore, and I wasn\u2019t 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.<\/p>\n<p class=\"wp-block-paragraph\">Let me present<span> <a href=\"https:\/\/github.com\/m\/taxonomist\" target=\"_blank\">Taxonomist<\/a>, a new open-source tool you can run with one copy-and-paste<\/span> command line that solves this problem. Here\u2019s the idea:<\/p>\n<ol class=\"wp-block-list\">\n<li>You run this code in your terminal, and it spins up a Claude Code instance that asks you for your URL.<\/li>\n<li>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.<\/li>\n<li>Sub-agents analyze every post against your current categories and thinks about suggesting new ones.<\/li>\n<li>It previews all the changes.<\/li>\n<li>Tries a variety of ways to authenticate against your site and make all the changes.<\/li>\n<li>Logs everything locally, so anything is reversible later.<\/li>\n<\/ol>\n<p class=\"wp-block-paragraph\">THIS IS VERY ALPHA. PROBABLY BUGGY. BE CAREFUL WITH IT. PATCHES WELCOME. MAYBE MAKE A BACKUP OF YOUR SITE BEFORE YOU CHANGE IT.<\/p>\n<p class=\"wp-block-paragraph\">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\u2019s a lot of weird stuff happening here, so I don\u2019t know quite what this is yet.<\/p>\n<ol class=\"wp-block-list\">\n<li>It\u2019s 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.<\/li>\n<li>I kind of want a directory of these useful AI agents on WordPress.org, but also, there\u2019s something a little strange about trusting a remote shell script to run on your machine.<\/li>\n<li>I tested this with Claude, but there\u2019s no reason Codex couldn\u2019t use the repo in the exact same way, and I\u2019d love to improve the quick start script to start by detecting all the agents you have, asking which you\u2019d like to use, and also which directory you\u2019d like to work in. I think we could kill the <code>cd taxonomist-main &amp;&amp; claude \"start\"<\/code> part of it.<\/li>\n<li>Because much of the code and commands are generated on the fly from prompts, it\u2019s very resilient! I\u2019ve seen people try it, and it ran into errors with libraries or whatever, but it just figured out how to work around them.<\/li>\n<li>I\u2019d 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.<\/li>\n<li>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.<\/li>\n<li>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 <a href=\"https:\/\/distributed.blog\/\">distributed.blog<\/a> as a demo. It\u2019ll still do all the fun downloading and analysis and everything, you just won\u2019t be able to make changes.<\/li>\n<li>I now have a local cache of all my WordPress posts I can do other interesting things with, and that\u2019s cool.<\/li>\n<li>The logging and reverting probably still has some bugs in it.<\/li>\n<li>You can riff with it along the way, so for example, it suggested I get rid of my <a href=\"https:\/\/ma.tt\/category\/audrey\/\">Audrey category<\/a> because it didn\u2019t have enough posts, and I asked it to look at all the companies on <a href=\"https:\/\/audrey.co\/\">Audrey.co website<\/a> and categorize any posts that talk about them as Audrey, which created like 50 more.<\/li>\n<li>I want to check the GitHub repo for any updates before it starts, and maybe periodically, because it\u2019s iterating and improving really fast.<\/li>\n<li>It\u2019s 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.<\/li>\n<li>You can see some of my prompt history in the Github but I apologize it\u2019s not comprehensive, I also used Gemini and Codex with this and got lots of value from them.<\/li>\n<\/ol>\n<p class=\"wp-block-paragraph\">So, not sure what this is, but please check it out, play with it, submit improvements or ideas, and think about what\u2019s next. Might host a Zoom or something to brainstorm.<\/p>\n<p class=\"wp-block-paragraph\">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\u2019ll return to my <a href=\"https:\/\/en.wikipedia.org\/wiki\/Polyphasic_sleep\">Uberman polyphasic sleep days<\/a>? Nap-driven development?<\/p>\n<p class=\"wp-block-paragraph\">BTW I have lots of thoughts and feedback for <a href=\"https:\/\/github.com\/emdash-cms\/emdash\">Emdash<\/a> but I thought this was more interesting, will try to get that out later tonight. One preview: TinyMCE is a regression; they should use <a href=\"https:\/\/github.com\/wordpress\/gutenberg\">Gutenberg<\/a>! We designed it for other CMSes and would be fun to have some common ground to jam on.<\/p>","protected":false},"excerpt":{"rendered":"<p>I\u2019m 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\u2019t really [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4560","post","type-post","status-publish","format-standard","hentry","category-latest-news"],"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/frontlinenewsng.org\/index.php?rest_route=\/wp\/v2\/posts\/4560","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/frontlinenewsng.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/frontlinenewsng.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/frontlinenewsng.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/frontlinenewsng.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4560"}],"version-history":[{"count":0,"href":"https:\/\/frontlinenewsng.org\/index.php?rest_route=\/wp\/v2\/posts\/4560\/revisions"}],"wp:attachment":[{"href":"https:\/\/frontlinenewsng.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4560"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/frontlinenewsng.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4560"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/frontlinenewsng.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}