{"id":4279,"date":"2026-10-19T07:46:38","date_gmt":"2026-10-19T07:46:38","guid":{"rendered":"https:\/\/quicknewsnigeria.com\/?p=4279"},"modified":"2026-10-19T07:46:38","modified_gmt":"2026-10-19T07:46:38","slug":"dennis-snell-radical-explorations-in-agentic-development","status":"publish","type":"post","link":"https:\/\/quicknewsnigeria.com\/?p=4279","title":{"rendered":"Dennis Snell: Radical explorations in agentic development"},"content":{"rendered":"<p class=\"wp-block-paragraph\">In mid-April 2026 my employer started a project called \u201cRadical Speed Month\u201d to step away from our existing structures and processes, make space for people to dive more deeply into AI tooling, and try to build new or sleeping ideas. My participation in this experiment ran until late September and I stacked up a lot of explorations without having written about them or about the process. In this post I\u2019d like to highlight some of the results of this time and share some learnings.<\/p>\n<h2 class=\"wp-block-heading\">Selected lessons<\/h2>\n<ul class=\"wp-block-list\">\n<li>Massive agentic deployment demands heavy storage and generic compute capacity \u2014 inference is not the only bottleneck. This is necessary to support massively parallel checkouts of code, benchmarking, analysis of other software and data, running hierarchies of thousands of test workers and headless browsers, generating and analyzing image and video artifacts, creating indexes, and more.<\/li>\n<li>Instructing an agent to \u201cfind the five hidden defects\u201d is more effective at finding real issues than asking if there are any hidden defects. They may return false claims, but they try to answer the questions they are prompted \u2014 it\u2019s not that different than the comparison between asking someone what in their day brought them a smile, or what was difficult for them, rather than asking \u201chow was your day?\u201d<\/li>\n<li>Agents with web searching capabilities are powerful knowledge-retrieval and aggregation tools. Reports they generate to aid in developing code can be more effective than asking the agents to generate the code directly.<\/li>\n<li>Models today are incredibly powerful, but guiding human insight is also powerful. Autonomous agentic activity demonstrated a tendency to produce more evidence of accomplished work than actual accomplished work. In a strange way this might reflect the training dataset: corporations must also guard against the dangers of overly-burdensome paperwork.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">Projects<\/h2>\n<p class=\"wp-block-paragraph\">All of the projects here were almost entirely built by AI agents, but with my guidance and supervision. Therefore, credit for each of them does not rest entirely with me. However, for the sake of brevity I will omit mentioning in each one that AI tooling was the actual producer.<\/p>\n<p><span><\/span><\/p>\n<p class=\"wp-block-paragraph\">Each project below is assigned a truly unscientific evaluation:<\/p>\n<ul class=\"wp-block-list\">\n<li><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> The project succeeded with clear value.<\/li>\n<li><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\ud83e\udd37\u200d\u2642\ufe0f\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f937-200d-2642-fe0f.png?w=640&#038;ssl=1\" \/> The project completed its goals, but the value is unclear.<\/li>\n<li><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u23f3\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/23f3.png?w=640&#038;ssl=1\" \/> The hard work has completed, but I need to close the loop and deploy it.<\/li>\n<li><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\ud83d\udd04\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f504.png?w=640&#038;ssl=1\" \/> The idea is sound but not ready; it needs more development.<\/li>\n<li><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u274c\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/274c.png?w=640&#038;ssl=1\" \/> The project failed to bear fruit for any reason.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">My personal favorites:<\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/fluffyandflakey.blog\/tag\/wordpress\/feed\/#fix-a-driver-bug\">Fix bugs in proprietary hardware drivers<\/a><\/li>\n<li><a href=\"https:\/\/fluffyandflakey.blog\/tag\/wordpress\/feed\/#gather-empirical-data\">Gather empirical evidence to guide development decisions<\/a><\/li>\n<li><a href=\"https:\/\/fluffyandflakey.blog\/tag\/wordpress\/feed\/#crawl-it-all\">Stream real-world HTML from Common Crawl<\/a><\/li>\n<li><a href=\"https:\/\/fluffyandflakey.blog\/tag\/wordpress\/feed\/#php-gameshark\">Provide deep insight into PHP script execution<\/a><\/li>\n<li><a href=\"https:\/\/fluffyandflakey.blog\/tag\/wordpress\/feed\/#wp-de-rtc\">Rapidly prototype a comprehensive collaborative editing environment for WordPress<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">Tools<\/h3>\n<p class=\"wp-block-paragraph\">Because I expected a short availability for the enhanced AI access, I prioritized building, early on, tools whose value would outlast the project. Generally I prefer working in offline or local environments, so I built archivers for several services which are only available when connected to the Internet.<\/p>\n<p class=\"wp-block-paragraph\">While MCP servers were very popular at this time, I have always been unhappy with the load centralization and amplification they create. The same is true for any online resource against which agents perform searches. My intuition is that it\u2019s more considerate to those services to make one batched update, to download all new data since the last sync, than it is to make repeated queries which might overwhelm their servers and fetch the same resources over and over.<\/p>\n<p class=\"wp-block-paragraph\">Being offline and local, the archivers are extremely fast and operate in the terminal where I prefer to interact.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> GitHub archive<\/h4>\n<p class=\"wp-block-paragraph\">Finding GitHub\u2019s search functionality lacking, and wishing for a chronological stream of my activity, I built <code>github-archiver<\/code> so I could have the tools and performance I wanted. This initially supported searching through PRs, issues, and comments, as well as rendering my own activity in a reverse-chronological view. I eventually added two additional views for replies: people I replied to, and people who had replied to me. This gives me great awareness of my recent conversations and has helped me to avoid losing conversations. Sometimes I struggle to find a PR that I meant to follow-up on, but it disappears from my GitHub notifications and I can\u2019t remember the exact wording that will turn it up in a search result. I even tend to forget in which code repository it was left, so my tool aggregates activity across all archived repositories.<\/p>\n<p class=\"wp-block-paragraph\">The basic design is a compressed HTTP cache of the GitHub API. When fetching or updating, it respects rate limits and leans on HTTP headers to avoid wasted transfers. After some work with banking APIs several years ago, I found that storing raw HTTP responses proved more flexible than parsing into a custom internal data type, as it lets me rewrite logic in the app later without having to re-download the entire archive. This came in handy several times as I expanded the search index and added more functionality.<\/p>\n<p class=\"wp-block-paragraph\">The tool renders GitHub content as richly-formatted and highlighted text in a console unless running outside of an interactive TTY. It renders Markdown and HTML content into this rich text format and lays out meta elements in a meaningful way. Its speed, zero-network dependence, and minimized output make it a good fit for agents that would otherwise be hammering GitHub\u2019s API, waiting, and wasting tokens on irrelevant content.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img fetchpriority=\"high\" decoding=\"async\" data-attachment-id=\"4214\" data-permalink=\"https:\/\/quicknewsnigeria.com\/?attachment_id=4214\" data-orig-file=\"https:\/\/i0.wp.com\/quicknewsnigeria.com\/wp-content\/uploads\/2026\/10\/quick-news-nigeria-6ad07cb11bd51.png?fit=1024%2C1024&amp;ssl=1\" data-orig-size=\"1024,1024\" data-comments-opened=\"1\" data-image-title=\"Night market seafood vendor at work\" data-image-description=\"&lt;p&gt;A vendor stands behind open coolers filled with fish and seafood in a dimly lit nighttime market. Candles illuminate the wooden stall, shelves of produce, a weighing scale, and nearby shoppers moving through the narrow walkway. The scene has a warm, atmospheric glow contrasted with deep shadows, corrugated metal walls, and wet reflective flooring.&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;A seafood vendor prepares fresh goods by candlelight in a bustling nighttime market.&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/quicknewsnigeria.com\/wp-content\/uploads\/2026\/10\/quick-news-nigeria-6ad07cb11bd51.png?fit=640%2C640&amp;ssl=1\" alt=\"github-archiver renders PRs, Issues, comments, and line-level comments into the terminal with parsed markup, syntax highlighting, code snippets, and links created via ANSI terminal codes. It provides an alternative to the slower browser-based interface.\" class=\"wp-image-4214\" height=\"409\" src=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-17-at-3.11.29-PM.png?resize=740%2C409&amp;ssl=1\" width=\"740\" \/><\/figure>\n<\/div>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Trac archive<\/h4>\n<p class=\"wp-block-paragraph\">Just like the <code>github-archiver<\/code>, I built a <code>trac-archive<\/code> for <a href=\"https:\/\/core.trac.wordpress.org\/\">WordPress\u2019 Trac<\/a> system. It is feature-similar to the GitHub archiver, but provides an additional perk: because bots relay messages from GitHub back into Trac, issues often have two markup formats in use simultaneously. My <code>trac-archive<\/code> first parses its content according to Trac\u2019s own system, but then it additionally parses Markdown where it finds it. It shares much of the rendering logic with the <code>github-archiver<\/code> and provides a clearer experience than the web view due to the additional parsing, syntax highlighting, and ability to exclude bot traffic from the results.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-17-at-3.49.04-PM.png?ssl=1\"><img decoding=\"async\" alt=\"Like the github-archiver, the trac-archive renders tickets into the terminal with parsed markup, syntax highlighting, code snippets, and links created via ANSI terminal codes. It provides an alternative to the slower browser-based interface and in many ways a more usable one due to the way Trac aggregates content from GitHub.\" class=\"wp-image-4228\" height=\"459\" src=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-17-at-3.49.04-PM.png?resize=740%2C459&amp;ssl=1\" width=\"740\" \/><\/a><\/figure>\n<\/div>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Review the evolution of a series of commits over time<\/h4>\n<p class=\"wp-block-paragraph\"><code>git-sequence-patch<\/code> was used to help me understand the full scope of the WordPress collaborative editor project. Since many large features or projects span many commits and possibly even months or years of work, this tool reads a number of <code>git<\/code> commit SHAs and will build a fictitious patch that more or less represents how the entire project would be proposed were it to be proposed against the latest branch head. Another way to look at this is to generate one massive revert commit for the original feature and all descendant changes to it since its inception.<\/p>\n<p class=\"wp-block-paragraph\">This is a project I had been wanting to build for a long time; for each of the given commits, it tracks which lines were changed by the commits, and then steps forward through the branch history, noting when other commits also modify or remove those lines. Once it completes at the branch head, it prepares a patch to replace all of those lines with the code that was there before the original patch, and reverse the patch. This means that it doesn\u2019t produce a patch that would actually merge, but it produces a patch that\u2019s useful for understanding the full scope of how a change evolves over time.<\/p>\n<p class=\"wp-block-paragraph\">It\u2019s line-oriented and so would miss some obvious scope. For example, if tracing the sequence for a new function, it will miss a later change which calls into that function. This would actually be possible to add to the tool as an enhancement, but it wasn\u2019t necessary for my purposes at the time and I think it would remain ideally an option rather than a default behavior.<\/p>\n<p class=\"wp-block-paragraph\">I spend a lot of time trying to quickly understand entire systems that I didn\u2019t write or have any experience with, and this tool is a delight for answering the question: \u201chow has this change evolved through time?\u201d<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Analyze real-world HTML from Common Crawl<\/h4>\n<p class=\"wp-block-paragraph\">To better test the HTML API against real HTML documents, I built <code>cc-analyzer<\/code>, which feeds data from the Common Crawl index into a user-supplied PHP script. This operates in two modes: streaming and batched. In streaming mode it continuously sends HTML documents from the archive into the analysis script. In batched mode, it saves documents from the archive into a subdirectory and then may be invoked again to re-run those documents through specific analysis scripts.<\/p>\n<p class=\"wp-block-paragraph\">This project has greatly benefited the testing and verification of the HTML API, and informed decisions about what actual HTML syntax patterns exist on the web and what concerns are practical and which are esoteric. Throughout this grand experiment I have examined hundreds of thousands of HTML documents to test the HTML API code, to understand reported and actual text encodings of websites at large, to benchmark changes and optimizations for the HTML API, and to understand parsing needs of real HTML documents.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Instantly search code from the WordPress ecosystem<\/h4>\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/veloria.dev\/\">Veloria.dev<\/a> (formerly WPDirectory.net) provides fast code search across all of the plugins and themes listed on the WordPress directory. It was experiencing elevated outage rates and I decided at the start of September to recreate it locally as a single binary with a simple compressed offline archive. Previous efforts to <a href=\"https:\/\/github.com\/markjaquith\/WordPress-Plugin-Directory-Slurper\">slurp the directory<\/a> left efficiency gains on the table and output around 120 GB of data on the filesystem. By taking advantage of available concurrency, streaming computation as resources are downloaded, pruning the stored files to those which were being indexed, and saving into a custom compressed binary object, my <code>wp-code-search<\/code> tool was able to archive the directory in five hours storing only 5 GB among three data files: a compressed archive of the source files, a search index, and a metadata archive.<\/p>\n<p class=\"wp-block-paragraph\">This idea originally came from Dan Luu, who <a href=\"https:\/\/danluu.com\/perf-opt\/#build-an-index\">commented<\/a> that \u201c<em>if we\u2019re repeatedly searching for text on a computer, the obvious thing to do to speed that up isn\u2019t to write a native code compiler for regex matching, it\u2019s to create an index<\/em>.\u201d Code searches across the entire directory typically return within 10 ms, output syntax-highlighted snippets from the files in which they are found, and the tool can extract those files or entire plugins from the compressed archive. The index is sorted by active installs so the most-deployed results appear first.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-17-at-4.01.11-PM.png?ssl=1\"><img decoding=\"async\" alt=\"When performing searches on the WordPress directory, the results print out with the name of the file the result was found in, how many active installs the plugin reports, and a syntax-highlighted snippet of the code with the search matching underlined.\" class=\"wp-image-4233\" height=\"215\" src=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-17-at-4.01.11-PM.png?resize=740%2C215&amp;ssl=1\" width=\"740\" \/><\/a><figcaption class=\"wp-element-caption\">Basic regex searches execute in milliseconds.<\/figcaption><\/figure>\n<\/div>\n<p class=\"wp-block-paragraph\">This tool has become an invaluable daily driver for me as I refactor Core WordPress internals and want to avoid needlessly breaking existing code.<\/p>\n<p class=\"wp-block-paragraph\">Towards the end of September I had another long-shot idea: could the ideas making the text search so fast be mixed with structural queries so that I could perform data-flow and control-flow analysis on the code? Turns out that yes, with another 5 GB sidecar index, and a custom WordPress-specific query syntax this was not only possible, but practical with many complicated queries executing in anywhere from a few seconds to a few tens of seconds.<\/p>\n<p class=\"wp-block-paragraph\">There\u2019s a lot of power in this query syntax to identify complicated code structures and I still have to learn how to generate the kinds of queries I want to. I built the structural code search to aid in discovery of risky code patterns to harden as part of my work improving WordPress\u2019 security stance.<\/p>\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-17-at-4.06.36-PM-1.png?ssl=1\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"4236\" data-permalink=\"https:\/\/quicknewsnigeria.com\/?attachment_id=4236\" data-orig-file=\"https:\/\/i0.wp.com\/quicknewsnigeria.com\/wp-content\/uploads\/2026\/10\/15pol-musk-paxton-pkhj-mediumSquareAt3X-v2-m4Z51g.jpg?fit=1800%2C1800&amp;ssl=1\" data-orig-size=\"1800,1800\" data-comments-opened=\"1\" data-image-title=\"Elon Musk Spends Heavily to Back Ken Paxton\u2019s Senate Bid in Texas\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/quicknewsnigeria.com\/wp-content\/uploads\/2026\/10\/15pol-musk-paxton-pkhj-mediumSquareAt3X-v2-m4Z51g.jpg?fit=640%2C640&amp;ssl=1\" alt=\"The custom query syntax provides constructs for describing data flow and control flow. It resembles structural query syntaxes from other languages.\" class=\"wp-image-4236\" height=\"660\" src=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-17-at-4.06.36-PM-1.png?resize=740%2C660&amp;ssl=1\" width=\"740\" \/><\/a><figcaption class=\"wp-element-caption\">A custom syntax makes possible complicated structural queries on the code and values passing through it.<\/figcaption><\/figure>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-17-at-4.05.50-PM.png?ssl=1\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"4241\" data-permalink=\"https:\/\/quicknewsnigeria.com\/?attachment_id=4241\" data-orig-file=\"https:\/\/i0.wp.com\/quicknewsnigeria.com\/wp-content\/uploads\/2026\/10\/15dc-ukraine-support-cvfl-mediumSquareAt3X-v3-iGLfEk.jpg?fit=1800%2C1800&amp;ssl=1\" data-orig-size=\"1800,1800\" data-comments-opened=\"1\" data-image-title=\"How U.S. Support to Ukraine Has Evolved Under Trump\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/quicknewsnigeria.com\/wp-content\/uploads\/2026\/10\/15dc-ukraine-support-cvfl-mediumSquareAt3X-v3-iGLfEk.jpg?fit=640%2C640&amp;ssl=1\" alt=\"Some results from the more powerful queries could have been more-efficiently found with string-based searches, such as when one function call is found as an argument to another function call, and on the same line.\" class=\"wp-image-4241\" height=\"311\" src=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-17-at-4.05.50-PM.png?resize=740%2C311&amp;ssl=1\" width=\"740\" \/><\/a><figcaption class=\"wp-element-caption\">Executing returns results we could have matched with a regex.<\/figcaption><\/figure>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-17-at-4.13.12-PM.png?ssl=1\"><img loading=\"lazy\" decoding=\"async\" alt=\"Structural queries detect far more than same-line lexical results. They ignore whitespace and can follow other patterns, such as when the result of a function call is later passed into another function as an argument.\" class=\"wp-image-4238\" height=\"123\" src=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-17-at-4.13.12-PM.png?resize=740%2C123&amp;ssl=1\" width=\"740\" \/><\/a><figcaption class=\"wp-element-caption\">Executing also returns matches not possible through lexical pattern matching alone, tracing the flow of data and control throughout a program.<\/figcaption><\/figure>\n<\/figure>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\ud83e\udd37\u200d\u2642\ufe0f\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f937-200d-2642-fe0f.png?w=640&#038;ssl=1\" \/> Text-mode access to the modern web<\/h4>\n<p class=\"wp-block-paragraph\">My <code>zs<\/code> tool performs web searches and downloads rendered HTML pages in the terminal. Fascinatingly enough, when I attempted to start this project I tried explaining very clearly that I wanted to adhere to the terms of use for all services, that I wanted to respect the remote servers providing the content, and that this was a user-agent acting on my behalf to perform queries in the terminal instead of a browser. Unfortunately, it seems like the instructions to follow the rules were misinterpreted as attempted bypasses and overly-refused.<\/p>\n<p class=\"wp-block-paragraph\">Regardless, I was able to create this non-GUI browser and build up enough of the Web Platform to render the pages I wanted to view. When Captchas and other verification interstitials appear, they render inline into the terminal via terminal raster commands. I\u2019m able to indicate which boxes contain the bus, or motorcycle, or a bridge, which Google seems really intent on learning, and continue with text flows and shell pipelines.<\/p>\n<p class=\"wp-block-paragraph\">My motivation for building this was to perform web searches from the CLI, but once I had the mechanisms in place to interact with the search engines, I realized I could also use this to grab dynamically-rendered pages. For any given URL, a page loads, executes scripts, and renders until the JavaScript event queue empties or a timeout trips, and then the final DOM serializes into the HTML output.<\/p>\n<p class=\"wp-block-paragraph\">This makes the tool more valuable than my typical <code>curl<\/code> flow, which too-often downloads an empty HTML page reminding me that I should be using JavaScript. Because it implemented so much of a browser\u2019s internals, I added a feature to extract the visible text content of the rendered page, something which is surprisingly difficult to download without a full browser and CSS engine, and something which is really valuable when trying to pipe documentation pages into coding agents.<\/p>\n<p class=\"wp-block-paragraph\">All in all it\u2019s a bit buggy and I would like to start over based on what I learned along the way. It still works <em>sometimes<\/em> and it\u2019s valuable to me when web pages return otherwise-empty mountains of script contents.<\/p>\n<div class=\"wp-block-jetpack-tiled-gallery aligncenter is-style-rectangular\">\n<div class=\"\">\n<div class=\"tiled-gallery__gallery\">\n<div class=\"tiled-gallery__row\">\n<div class=\"tiled-gallery__col\">\n<figure class=\"tiled-gallery__item\"><img decoding=\"async\" alt=\"\" src=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-17-at-5.05.37-PM-1024x957.png?ssl=1\" tabindex=\"0\" \/><\/figure>\n<\/div>\n<div class=\"tiled-gallery__col\">\n<figure class=\"tiled-gallery__item\"><img decoding=\"async\" alt=\"\" src=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-17-at-5.05.52-PM-757x1024.png?ssl=1\" tabindex=\"0\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 class=\"wp-block-heading\">WordPress.com<\/h3>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u23f3\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/23f3.png?w=640&#038;ssl=1\" \/> Clarify wording in notification messages<\/h4>\n<p class=\"wp-block-paragraph\">WordPress.com sends notifications about comments, likes, follows, etc., and sometimes the wording is awkward or inconsistent. I generated a report classifying emotional content of the wording and suggested improvements to better inform the reader of what they could or needed to do. It was effective at joining snippets of strings that are concatenated together throughout the code and provided useful insights. It also provided good suggestions for updates that focused on removing anxiety and clarifying possible actions to take in response to the alerts (e.g. replace \u201cRenewal Failed\u201d with \u201cPayment did not go through; update by May 18 to keep your plan active\u201d). Unfortunately those updates are still on my backlog to deploy.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u23f3\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/23f3.png?w=640&#038;ssl=1\" \/> Migrate confused legacy data to simplify runtime code<\/h4>\n<p class=\"wp-block-paragraph\">There are old notification records in the database with conflated and truncated values, and these require complicated code when rendering them to make sense of the confused properties. I was hoping that it would be possible to have the AI examine these broken records and the generating code and provide clear guidance on how to update them. Among 3,000 old records in the database, it proposed seventeen cases for recovery and fixing. Unfortunately this also sits in my backlog to assess and apply.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Fix translation issues and typos<\/h4>\n<p class=\"wp-block-paragraph\">Developers frequently concatenate separately-translated strings which lead to confusing translations. I ran an analysis for this kind of translation issue inside the notifications source code and also for typos and other mistakes. This produced a list of around fifty bug-fixes, including for a missing namespace specifier that was broken for more than a decade and which hadn\u2019t been noticed in error logs, malformed HTML tags which had been hard-coded in string literals, plenty of concatenated translated strings, broken interpolation placeholders, <em>missing<\/em> calls to the translation function, and missing null checks. This was deployed in May to the production system.<\/p>\n<h3 class=\"wp-block-heading\">WordPress, the open-source project<\/h3>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\ud83d\udd04\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f504.png?w=640&#038;ssl=1\" \/> Generate automatic previews for dev-docs changes<\/h4>\n<p class=\"wp-block-paragraph\">WordPress Playground runs a copy of PHP and WordPress entirely in the browser via compilation into a WASM environment. It provides testable previews for WordPress and Gutenberg PRs. Missing has been a way to preview changes to the generated developer documentation, which is notoriously difficult to get running at all, let alone dynamically in a browser. I proposed a demonstrator in <a href=\"https:\/\/github.com\/dmsnell\/wordpress-develop\/pull\/29\">#29<\/a> that does just that through a GitHub Actions workflow on PRs. It has inspired follow-up, but due to the need to ensure a maintainable solution, is still pending deployment.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\ud83d\udd04\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f504.png?w=640&#038;ssl=1\" \/> Harmonize the ignore ruleset across <code>git<\/code> and Subversion<\/h4>\n<p class=\"wp-block-paragraph\">The official WordPress source code lives in Subversion with a <code>git<\/code> mirror. The <code>.gitignore<\/code> and Subversion ignore rulesets are fundamentally distinct from each other, notably in that <code>git<\/code> ignore patterns apply recursively through a file tree. I attempted to use AI to harmonize the rulesets. Some adjustments were made, but the entire set still needs careful review.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Visualize per-package activity within Gutenberg<\/h4>\n<p class=\"wp-block-paragraph\">To better understand per-package activity within the Gutenberg editor project, I produced <a href=\"https:\/\/fluffyandflakey.blog\/2026\/06\/11\/gutenberg-package-activity\/\">a visualization showing commit activity<\/a>.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Provide deep insight into PHP script execution<\/h4>\n<p class=\"wp-block-paragraph\">Inspired by my childhood <a href=\"https:\/\/en.wikipedia.org\/wiki\/GameShark\">Gameshark<\/a>, I built a PHP extension to improve my ability to debug and analyze PHP script runs. This started as a way to compare two runs of a given script, but expanded into a set of related but distinct modes.<\/p>\n<p class=\"wp-block-paragraph\"><em>Differential mode<\/em> compares which functions were called and how many times across two different script runs; this could be useful for performance optimizations or comparing what runs for two different code paths and was built initially while working on page renders vs API call responses.<\/p>\n<p class=\"wp-block-paragraph\"><em>Trace value<\/em> records every function or method call whose arguments contain a requested value. It tracks user space as well as builtin functions and was built to help identify code paths which send untransformed data where it shouldn\u2019t reach. A <em>follow transformations<\/em> option tracks not only the given value, but also common escaped, encoded, serialized, quoted, slashed, and other variations of it. This is a clever security tool for finding out where and how unwanted data is passed around.<\/p>\n<p class=\"wp-block-paragraph\"><em>Invariant mode<\/em> takes a PHP file with \u201chooks\u201d that attach to functions and methods, either during entry into those contexts or when returning from them. They are supplied the values to the arguments, the <code>$this<\/code> value if a method, and the return value if a post hook. This enables a novel approach to applying software contracts on code with neither the production runtime overhead nor the noise from the contract-enforcement. This was loosely inspired by <a href=\"https:\/\/clojure.org\/guides\/spec\">Clojure\u2019s <code>core.spec<\/code><\/a>. Because the hooks file is user-space PHP code with access to global state, this provides mechanisms for enhanced testing and analysis code, and when registering a shutdown handler in PHP, can print reports at the end of script execution. Hooks may also raise exceptions to halt execution when any desired invariant is violated, such as when <code>preg_match()<\/code> receives a pattern that might be attempting to parse HTML.<\/p>\n<p class=\"wp-block-paragraph\"><em>Unused runtime coverage mode<\/em> generates a report of all loaded identifiers which were never read or executed during a script execution. A sampling option can be used in production to assemble such a report, probabilistically, over time. This mode was designed to find effectively dead-code that might be lurking behind runtime conditions which can never actually run due to real data distributions. For example, a function which is only ever called before a given date, when the given date is several years in the past. Static analysis will miss this while a month of production sampling with no calls will provide evidence that it\u2019s safe to remove the function, that no other strange or unexpected call-paths are still calling it.<\/p>\n<p class=\"wp-block-paragraph\"><em>Trace allocations<\/em> mode traces heap allocations made by PHP during a script execution. It immediately surfaced unnecessary allocation in <code>wp_is_numeric_array()<\/code>, which was promptly eliminated in [<a href=\"https:\/\/github.com\/WordPress\/wordpress-develop\/pull\/12100\">#12100<\/a>].<\/p>\n<p class=\"wp-block-paragraph\">This extension has provided incredible insight into how WordPress and other PHP scripts run, and I\u2019ve only scratched the surface of how I can take advantage of it.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\ud83d\udd04\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f504.png?w=640&#038;ssl=1\" \/> Introduce dynamic security policies into PHP with eBPF to isolate plugin code and extensions<\/h4>\n<p class=\"wp-block-paragraph\">Like the <code>php-gameshark<\/code> extension, I built a modified <code>php<\/code> binary which coordinates with eBPF in the Linux kernel to apply dynamic security policies and create isolated security domains within executing PHP code. There is no logical separation between executing the Core WordPress code and the code from plugins running on a site. This is a security challenge because the two kinds of code warrant different trust, and a site operator may want to assign unique trust and capabilities to different plugins.<\/p>\n<p class=\"wp-block-paragraph\">This extension provides a <code>wp_runtime_security_apply_policies()<\/code> function which registers sandboxing rules against files whose source code matches the provided glob. It allows disabling network access, shell execution, sending of emails, reading uploaded files, and writing uploaded files demonstrating a path towards securing WordPress sites from errant or malicious plugins, as well as an explicit opt-in capability model for plugins as they have need. It doesn\u2019t just protect user-space PHP code either; thanks to the fact that policy enforcement occurs within eBPF, it can also apply the same policies against compiled PHP extensions running on the host, assuming that the extensions are not actively attempting to exploit the guards (the protection is aimed at security vulnerabilities within the commonly-deployed PHP extensions, not against potentially-malicious extensions).<\/p>\n<p class=\"wp-block-paragraph\">I built this extension after a discussion with Lynn Griffith at WordCamp US in late August. It seems promising but is under-developed and needs production testing. As it relies on eBPF, it only supports Linux environments, ruling out Windows, BSD, and macOS-based hosts.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-17-at-5.51.38-PM.png?ssl=1\"><img loading=\"lazy\" decoding=\"async\" alt=\"User-space PHP code can change the current policies by passing a descriptor object to the extension showing which file globs are to have which privileges.\" class=\"wp-image-4269\" height=\"387\" src=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-17-at-5.51.38-PM.png?resize=740%2C387&amp;ssl=1\" width=\"740\" \/><\/a><figcaption class=\"wp-element-caption\">Policy rules stack: code deeper in the call stack may further restrict the permissions, but cannot expand them.<\/figcaption><\/figure>\n<\/div>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Benchmark HTML parsing optimizations against realistic data from the Internet<\/h4>\n<p class=\"wp-block-paragraph\">With the aid of <code>cc-analyzer<\/code>, I automated the benchmarking of numerous optimizations that we have explored over the years with the HTML API, mostly changes to the internal data structures and how attributes are represented during the parse. The AI tooling provided the run-scripts for <code>cc-analyzer<\/code>, invoked it, and gathered the results. It also collected PRs that I had proposed (using the <code>github-archiver<\/code>) since May 2023 so that I didn\u2019t have to find them.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Fuzz-test the HTML API<\/h4>\n<p class=\"wp-block-paragraph\">I fuzz-tested the HTML API, finding several unreported bugs, including <a href=\"https:\/\/github.com\/WordPress\/wordpress-develop\/pull\/11982\">easy-to-overlook defects in the code<\/a>. Fuzzing in this way also prevented a number of defects with <a href=\"https:\/\/make.wordpress.org\/core\/2026\/10\/07\/progress-report-wp_kses\/\">the rewrite of <code>wp_kses()<\/code><\/a>. This complements the existing spec-compliance tests against the <code>html5lib<\/code> test suite, practical tests against real HTML from the web, and a unit-test suite covering intentional behaviors.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u274c\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/274c.png?w=640&#038;ssl=1\" \/> Scaffold fuzz-testing in Gutenberg<\/h4>\n<p class=\"wp-block-paragraph\">I attempted to build a generalizable fuzz-testing infrastructure for the Gutenberg editor. This was an extended autonomy agentic session that ultimately produced a good-looking dashboard with nothing but false-alarms. I tried to establish a framework in which other developers could easily add new generative categories and the system would run new fuzzers for them, compare outputs, and triage failures. AI parallelism made for impressive work, but in this early project I was unable to accomplish my goal and gave up on the idea.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Port data sync libraries into PHP<\/h4>\n<p class=\"wp-block-paragraph\">As an experiment in goal-oriented design, ten distributed data structure libraries were ported into PHP userspace code to aid in building a demonstrator for <a href=\"https:\/\/make.wordpress.org\/core\/2026\/10\/14\/real-time-collaboration-a-guide-to-sync-engines\/#:~:text=the%20same%20time.-,Engine%202:%20DE-RTC,-Summary:%20Most%20similar\">the DE-RTC prototype<\/a> [<a href=\"https:\/\/github.com\/WordPress\/wordpress-develop\/pull\/12334\">#12334<\/a>, <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/79602\">#79602<\/a>]. With minor caveats, this built working copies of <code>yjs<\/code>, <code>automerge<\/code>, <code>loro<\/code>, <code>diamond-types<\/code>, <code>diff-match-patch<\/code>, <code>json-patch<\/code>, <code>json-joy<\/code>, <code>sharedb-json0<\/code>, <code>prosemirror-collab<\/code>, and <code>collabs<\/code> which passed their upstream test suites when they were converted to call the PHP code. Eight of the libraries were completed within a few days, but <code>loro<\/code> (the library I was primarily interested in) and <code>json-joy<\/code> held out the longest, taking weeks to complete. They appeared stagnant for the bulk of that time and rapidly finished passing the remaining tests in a burst at the end. While I had originally built a prototype collaborative editor with <code>yjs<\/code> (which is what the existing project team had chosen to use in JavaScript), once <code>automerge<\/code> completed I was able to swap out the synchronization primitive and later do that again with <code>loro<\/code>, adding the capability to make more semantically granular changes and merges. This work was almost entirely hands-off and ran in the background until it was completed; every ten minutes it updated an HTML dashboard showing status and operating notes.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Fuzz-test the proposed collaborative editor for WordPress<\/h4>\n<p class=\"wp-block-paragraph\">From the end of April until October, I paired with Dan Luu to fuzz-test the collaborative editor proposal, and we uncovered an array of issues which ultimately led to changes in the timeline for the project, as a number of the defects were nontrivial to solve. Most of the fuzz infrastructure was built by Dan, while I attempted to coordinate the reproducible bug reports with the rest of the team and to propose fixes. The fuzzing machinery produced effectively no false positives due to the triage and reproduction steps built in. It also provided the visuals for theoretical bugs which are hard to diagnose manually with a keyboard and mouse, but which actually occur frequently in concurrent systems.<\/p>\n<p class=\"wp-block-paragraph\">This was a high-reward project for the investment because, while AI was dominant in the early code generation, once the testing suite was established, it was able to continue to operate without much additional AI input, and it\u2019s possible to run without <em>any<\/em> AI inputs.<\/p>\n<p class=\"wp-block-paragraph\">It highlighted two aspects of fuzz-testing: the more robust the code being tested already is, the more valuable the fuzz-testing will be; and the more frequently a bug is likely to materialize, the more quickly fuzz-testing will find it. There is a good match here between the needs and the operating characteristics.<\/p>\n<p class=\"wp-block-paragraph\">Actually, Dan and I were originally looking at working on other projects for this <em>Radical<\/em> experiment. I had suggested that we use the nascent collaborative editing project to organize our notes and work within a WordPress site \u2014 to \u201cdogfood\u201d the editor. We pivoted to this testing and design support role only because of problems which immediately appeared as we tried to use it.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Prototype a comprehensive collaborative editing environment for WordPress<\/h4>\n<p class=\"wp-block-paragraph\">To demonstrate another approach to collaborative editing, I instructed an agent to follow my core principles and requirements for the task and build a prototype. At first I wanted the agent to mimic forming its own company, planning, dividing labor, and harmonizing productivity, but as this ran for weeks it kept descending into a cycle of producing more and more meaningless paperwork with less and less actual work. Around the end of May I rebooted the project with far more direction and guidance, replacing the goal-oriented and hands-off approach with a <em>human-driving-the-loop<\/em> method. This proved more effective and in two weeks I had a working prototype that demonstrated every aspect that I considered important and lacking in some of the other public proposals. At some point I will share a version of an internal post I wrote summarizing this work. It proved influential on the project and I believe that the continued development of collaborative editing is heading in a stronger direction as a result.<\/p>\n<p class=\"wp-block-paragraph\">For years I have struggled to adequately convey why specific principles and requirements are important, but having a visual prototype made it feel real in a way that persuasion had failed me. The amount of up-front work to produce this prototype had been obstructive for years, and without the agent I would not have been able to communicate the tradeoffs involved in its approach.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Restore developer documentation generation by updating deprecated legacy code<\/h4>\n<p class=\"wp-block-paragraph\">At the end of February I had <a href=\"https:\/\/make.wordpress.org\/core\/2026\/02\/25\/developer-documentation-restored\/\">restored WordPress developer documentation<\/a> which had been stale for two years due to failing build scripts and deploy scripts. While this work resolved most issues and unlocked updated docs for WordPress 6.9, there remained a few unresolved issues which led to specific submodules being excluded from those docs. In mid-May, <a href=\"https:\/\/github.com\/dmsnell\/phpdoc-parser\/commits?author=codex\">fixes for the remaining issues<\/a> were applied to the dependent projects which removed all remaining barriers. All documentation was updatable again and the scripts could run in the latest PHP versions without crashing.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Prevent mistakes in commit messages and automate the repetitive parts of writing them<\/h4>\n<p class=\"wp-block-paragraph\">After seeing my colleague Jon Surrell\u2019s <code>neovim<\/code> linter for writing <a href=\"https:\/\/make.wordpress.org\/core\/handbook\/best-practices\/commit-messages\/\">WordPress commit messages<\/a>, I ported his linter into a single-binary\/stdout LSP usable in any LSP-supporting editor. This expanded the work Jon did and built upon work from my other tools to show inline previews of Trac tickets and GitHub PRs. It included new auto-fixers for formatting and line ordering and I use this today to prepare my commit messages, avoiding mistakes I have overlooked in the past.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Gather empirical evidence to guide parsing decisions in the HTML API<\/h4>\n<p class=\"wp-block-paragraph\">I used an instrumented custom build of PHP and <code>lexbor<\/code> in September to answer a perplexing question: \u201chow many tokens of lookahead would be required for the HTML Processor to fully-parse a given percentage of all HTML documents?\u201d This stems from the tricky <em>re-parenting<\/em> issues in HTML tree building, where a syntax form at the end of the document could appear towards the start of parsed tree structure. The instrumented code examined when <code>lexbor<\/code> ran its \u201cadoption-agency algorithm\u201d and tracked how much further into the document the current token appeared after the token associated with its actual parent node.<\/p>\n<p class=\"wp-block-paragraph\">An hour-long run of <code>cc-analyzer<\/code> showed that among 70,000 documents, approximately 1,000 require at least 1-token lookahead, only about 250 could parse with 5-token lookahead, and 13 would have required more than 10,000-token lookahead! In one case, a document contained an un-closed <code>&lt;b&gt;<\/code> tag near the start of the document, and then 400 kB and 35,000 syntax tokens later, triggered re-parenting \u2014 no default behavior will offer 35,000-token lookahead.<\/p>\n<p class=\"wp-block-paragraph\">The outcome of this run was disappointing, but the data was invaluable and prevented wasting time implementing a lookahead mechanism that wouldn\u2019t meaningfully benefit consumers of the API.<\/p>\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-09-01-at-1.10.35-AM.png?ssl=1\"><img loading=\"lazy\" decoding=\"async\" alt=\"Of the documents requiring lookahead, more than half of them require more than 20-token lookahead. Real HTML on the web is not tamed by a few tokens of lookahead.\" class=\"wp-image-4347\" height=\"790\" src=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-09-01-at-1.10.35-AM.png?resize=740%2C790&amp;ssl=1\" width=\"740\" \/><\/a><\/figure>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-09-01-at-1.30.52-AM.png?ssl=1\"><img loading=\"lazy\" decoding=\"async\" alt=\"Agents were helpful in producing explanatory failure reports to investigate particular error cases. They can show snippets of the document triggering re-parenting and explain which rule in the spec was unsupported and led to the bailout.\" class=\"wp-image-4349\" height=\"760\" src=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-09-01-at-1.30.52-AM.png?resize=740%2C760&amp;ssl=1\" width=\"740\" \/><\/a><\/figure>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-09-01-at-1.49.31-AM.png?ssl=1\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"wp-image-4350\" height=\"806\" src=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-09-01-at-1.49.31-AM.png?resize=740%2C806&amp;ssl=1\" width=\"740\" \/><\/a><\/figure>\n<\/figure>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Review and scrutinize code change proposals<\/h4>\n<p class=\"wp-block-paragraph\">Throughout the entire experiment AI was providing valuable code review and patch preparation. WordPress security fixes are typically backported to WordPress 4.7, which covers 25 released versions <em>and <\/em><code>trunk<\/code>. Many of these support older versions of PHP missing standard-library features that newer code depends on, and lack WordPress functionality that newer code depends on. When preparing a backported patch, I created reports detailing which features and functions had to change at each WordPress release, and what was driving that need. I found these to be more useful than having agents automate the backporting as fewer mistakes were overlooked when I was performing the changes with the assistance of the reports.<\/p>\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-08-07-at-1.29.22-PM.png?ssl=1\"><img loading=\"lazy\" decoding=\"async\" alt=\"In one report, the agent lists for each version of WordPress, including the minimum-supported version for that release, issues with given code constructs or function calls. It indicates if there would be runtime issues and also if the syntax would fail to parse in the oldest-supported PHP version.\" class=\"wp-image-4352\" height=\"345\" src=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-08-07-at-1.29.22-PM.png?resize=740%2C345&amp;ssl=1\" width=\"740\" \/><\/a><\/figure>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-08-07-at-1.28.47-PM.png?ssl=1\"><img loading=\"lazy\" decoding=\"async\" alt=\"Another report lists for each kind of code construct, at which release of WordPress it\u2019s first supported, and which lines of code in the proposed patch must be changed in order for it to run on older releases.\" class=\"wp-image-4353\" height=\"395\" src=\"https:\/\/i0.wp.com\/fluffyandflakey.blog\/wp-content\/uploads\/2026\/10\/Screenshot-2026-08-07-at-1.28.47-PM.png?resize=740%2C395&amp;ssl=1\" width=\"740\" \/><\/a><\/figure>\n<\/figure>\n<p class=\"wp-block-paragraph\">AI code review was invaluable though during the refactor of <code>wp_kses()<\/code> within WordPress. For weeks I instructed it to find the remaining overlooked defects that need resolving before merge, and it kept finding places to harden or fix the code. I never asked an agent to perform \u201ccode review\u201d or indicate if a patch was ready to go. Instead, I instructed them to find hidden defects that I wasn\u2019t sure existed, but when told to return three items, they would do it! I consider these kinds of situations among LLMs\u2019 greatest strengths, when false negatives are more costly than false positives, and when validating claims is trivial. Every issue the agent claimed became a test that proved or disproved it and now guards against regression.<\/p>\n<h3 class=\"wp-block-heading\">Simplenote and Simperium<\/h3>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Implement well-defined feature requests in unfamiliar code<\/h4>\n<p class=\"wp-block-paragraph\">To explore autonomous feature development, I had an agent resolve a concrete bug report describing difficulty copying content from historic revisions of a note [<a href=\"https:\/\/github.com\/Automattic\/simplenote-electron\/pull\/3358\">#3358<\/a>]. This kind of enhancement\/fix was frustrating previously because it touches numerous parts of the codebase I was unfamiliar with. The models picked up a number of places I would have overlooked when working on the problem.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Document confusing data flows in unfamiliar projects<\/h4>\n<p class=\"wp-block-paragraph\">The data service powering Simplenote was written with untyped Python code, and partial duck-typed data structures are passed around which can make code comprehension dizzying. While I wanted to avoid AI-generated code changes, given how critical the backend is, in late May I produced comment-only changes annotating data types and providing explanatory comments where certain code constructs were unclear. This was a low-effort way to pass along some insight about the code in hopes that it makes someone else\u2019s job clearer in the future, as I have not maintained this codebase for years.<\/p>\n<h3 class=\"wp-block-heading\">Random<\/h3>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\ud83e\udd37\u200d\u2642\ufe0f\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f937-200d-2642-fe0f.png?w=640&#038;ssl=1\" \/> Monitor Codex usage<\/h4>\n<p class=\"wp-block-paragraph\"><code>codex-usage-report.py<\/code> scans the <code>~\/.codex<\/code> directory and summarizes token counts, the models which were used with them, and approximates the dollar cost of that usage based on current API pricing.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Export Codex usage into a searchable format<\/h4>\n<p class=\"wp-block-paragraph\">As the radical experiment was drawing to a close, I created a Codex exporter which dumps the session data into a giant single-file HTML archive where I can search interactively through the sessions and view the chat history, including tool calls, in a rendered view. I\u2019ve referenced this several times as it\u2019s quick and easy compared to logging into a server, finding the right session, and searching through its history.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Run inference on unsupported legacy hardware<\/h4>\n<p class=\"wp-block-paragraph\">My old MacBook Pro came with a dedicated Radeon GPU and sits idle or off most of the time. <code>llama.cpp<\/code> doesn\u2019t support the older GPU and so I wanted to see if I could get it running. It did produce a working copy that runs local inference on the Radeon GPU, but in practice it underperformed the CPU-based inference for the same models. With only 4 GB of VRAM, it couldn\u2019t load enough weights at one time to operate without constantly transferring data, and the transfer overhead was too high. I explored different means of sharing work between the CPU and GPU, but they were fighting for memory bandwidth.<\/p>\n<p class=\"wp-block-paragraph\">While this didn\u2019t provide me with a low-and-slow inference engine, it demonstrated the ideas and ran the experiments which is something I had little patience for, given that I expected poor usefulness in the best of cases.<\/p>\n<h4 class=\"wp-block-heading\"><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\u2705\" class=\"wp-smiley\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2705.png?w=640&#038;ssl=1\" \/> Fix bugs in proprietary hardware drivers<\/h4>\n<p class=\"wp-block-paragraph\">At home I use my Fujifilm X-T3 as a webcam. It makes for a great quality video feed, but when Fujifilm updated the camera driver to integrate with one of the previous macOS updates, they introduced a memory leak which would end up using 90 GB+ of RAM plus swap by the end of a call and sometimes take down my system before I realized it. Knowing I had little hope of motivating Fujifilm to fix this, I made a binary patch to the driver and fixed the bug directly. This was directly inspired by <a href=\"https:\/\/arstechnica.com\/gadgets\/2017\/11\/microsoft-patches-equation-editor-flaw-without-fixing-the-source-code\/\">stories of Microsoft fixing bugs<\/a> in components whose source code they had lost.<\/p>\n<p class=\"wp-block-paragraph\">To my delight this fixed the memory leak and provided a plausible explanation. By decompiling the driver, the AI found a missing call to release JPEG data from each frame after passing it to <code><a href=\"https:\/\/developer.apple.com\/documentation\/coremediaio\/cmiosamplebuffercreate\">CMIOSampleBufferCreate<\/a><\/code> \u2014 a classic memory bug. It predicted the impact of this defect and confirmed the rate of memory bloat with successive system dumps of the process. To add the missing release call it shuffled around some existing instructions to a region of padding bytes in the driver and then called into those; this freed up the bytes necessary for the instructions to call the release function. 44 bytes are written across three spans to make the fix, and this is a verifiable fix that I was able to apply without disabling the <a href=\"https:\/\/support.apple.com\/en-us\/102149\">system integrity protection<\/a> \u2014 an even better delight.<\/p>\n<p class=\"wp-block-paragraph\">This has been quite possibly my favorite AI-assisted project. There is no way I could have imagined doing this work myself or having traction with Fujifilm to debug and fix this issue, and yet now I can have video calls run on for hours (were I to want such a thing) and memory use by the driver is fixed; it doesn\u2019t fill up and then purge all of my RAM.<\/p>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<p class=\"wp-block-paragraph\">A special thanks belongs to Automattic for providing this space in which to learn and explore, to OpenAI who provided elevated access to their frontier models and made it possible to preview what a future of abundant AI might look like, and to the <a href=\"https:\/\/jetstream-cloud.org\/\">Jetstream2 project<\/a> funded by US taxpayers who donated high-capacity compute resources to help improve the reliability and security of the WordPress project. I would also like to thank Dan Luu, who worked with me on this project and who taught me so much about practical generative\/fuzz testing, and with whom I could never keep pace, in the best of ways.<\/p>\n<p class=\"wp-block-paragraph\">Over the course of this time period I worked with GPT-5.4 all the way up to GPT-6-Astra, at ultra thinking levels on fast priority, and with Claude Sonnet 4.6\u20135.4. The earliest use came from <code>Qwen3.5-397B-A17B<\/code>, but I had also been running <code>Qwen3.5-27B-4bit<\/code> locally before the experiment started, and by the end was relying on <code>Qwen3.6-27B-4bit<\/code>.<\/p>\n<p class=\"wp-block-paragraph\">I\u2019m thankful for the chance to reach into the past and demonstrate ideas I\u2019ve had sitting on the back-burner, as well as to look towards the future and prototype designs I want to see turn into usable products.<\/p>","protected":false},"excerpt":{"rendered":"<p>In mid-April 2026 my employer started a project called \u201cRadical Speed Month\u201d to step away<\/p>\n","protected":false},"author":1,"featured_media":4280,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-4279","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-world"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/quicknewsnigeria.com\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-17-at-3.11.29-PM-ABq71Z.png?fit=740%2C409&ssl=1","_links":{"self":[{"href":"https:\/\/quicknewsnigeria.com\/index.php?rest_route=\/wp\/v2\/posts\/4279","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/quicknewsnigeria.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/quicknewsnigeria.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/quicknewsnigeria.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/quicknewsnigeria.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4279"}],"version-history":[{"count":0,"href":"https:\/\/quicknewsnigeria.com\/index.php?rest_route=\/wp\/v2\/posts\/4279\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/quicknewsnigeria.com\/index.php?rest_route=\/wp\/v2\/media\/4280"}],"wp:attachment":[{"href":"https:\/\/quicknewsnigeria.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4279"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/quicknewsnigeria.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4279"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/quicknewsnigeria.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4279"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}