<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Mark&#39;s Dev Blog</title>
    <link>https://blog.isquaredsoftware.com/tags/opinions/index.xml</link>
    <description>Recent content on Mark&#39;s Dev Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <atom:link href="https://blog.isquaredsoftware.com/tags/opinions/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>My Thoughts on AI, Part 2: Agent Setup, Workflow, and Tools</title>
      <link>https://blog.isquaredsoftware.com/2026/05/ai-thoughts-part-2-agent-workflow-tools/</link>
      <pubDate>Thu, 07 May 2026 15:00:00 -0500</pubDate>
      
      <guid>https://blog.isquaredsoftware.com/2026/05/ai-thoughts-part-2-agent-workflow-tools/</guid>
      <description>

&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;

&lt;p&gt;Hopefully you&#39;ve already read &lt;a href=&#34;https://blog.isquaredsoftware.com/2026/05/ai-thoughts-part-1-fears-opinions-journey/&#34;&gt;Part 1: Fears, Opinions, and Mental Journey&lt;/a&gt; so you understand how I ended up with this mindset and approach. Or maybe you saw how long it was and just immediately bailed out :) Welcome either way.&lt;/p&gt;

&lt;p&gt;Part 1 was the braindump. Story, thoughts, feelings.&lt;/p&gt;

&lt;p&gt;Here&#39;s the part that probably more of you are interested in :) What my actual agent setup and dev workflow looks like. How I approach using AI for writing code, what tools I use, how I have them configured.&lt;/p&gt;

&lt;p&gt;You can see a cleaned-up version of my config at &lt;a href=&#34;https://github.com/markerikson/opencode-config-example&#34;&gt;https://github.com/markerikson/opencode-config-example&lt;/a&gt; - follow along in that repo for the pieces as I describe them here.&lt;/p&gt;

&lt;p&gt;As I said in Part 1: I am not trying to sell anything, change anyone&#39;s mind, or say I am an expert. I don&#39;t have the answers.&lt;/p&gt;

&lt;p&gt;BUT I DO HAVE SOME OPINIONS NOW! :) I&#39;m not saying that &lt;em&gt;everybody&lt;/em&gt; should follow them, but this is where I&#39;ve landed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#introduction&#34;&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#agent-setup-overview&#34;&gt;Agent Setup Overview&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#agent-opencode-and-codenomad&#34;&gt;Agent: OpenCode and CodeNomad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#model-opus-4-6&#34;&gt;Model: Opus 4.6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#ide-vcs-vs-code-and-fork&#34;&gt;IDE / VCS: VS Code and Fork&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#daily-development-workflow&#34;&gt;Daily Development Workflow&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#parent-orchestrator-session-for-project-management&#34;&gt;Parent Orchestrator Session for Project Management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#subtasks-for-development&#34;&gt;Subtasks for Development&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#opencode-config&#34;&gt;OpenCode Config&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#permissions-management&#34;&gt;Permissions Management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#file-reads&#34;&gt;File Reads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#code-structure-and-search&#34;&gt;Code Structure and Search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#context-management&#34;&gt;Context Management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#session-history-and-search&#34;&gt;Session History and Search&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dev-plans-repo-and-management-scripts&#34;&gt;Dev Plans Repo and Management Scripts&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#plan-management-issues&#34;&gt;Plan Management Issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#personal-dev-plans-repo&#34;&gt;Personal Dev Plans Repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#workflow-artifacts&#34;&gt;Workflow Artifacts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#devplans-ts-automation-script&#34;&gt;&lt;code&gt;devplans.ts&lt;/code&gt; Automation Script&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#progress-updates-and-subtask-handoffs&#34;&gt;Progress Updates and Subtask Handoffs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#agents-md&#34;&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#commands-and-skills&#34;&gt;Commands and Skills&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#project-setup&#34;&gt;Project Setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#progress-and-subtask-management&#34;&gt;Progress and Subtask Management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#task-tracking&#34;&gt;Task Tracking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#other-commands&#34;&gt;Other Commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#other-skills&#34;&gt;Other Skills&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#config-improvement-process&#34;&gt;Config Improvement Process&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#potential-future-workflow-improvements&#34;&gt;Potential Future Workflow Improvements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#final-thoughts&#34;&gt;Final Thoughts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;agent-setup-overview&#34;&gt;Agent Setup Overview&lt;/h2&gt;

&lt;h3 id=&#34;agent-opencode-and-codenomad&#34;&gt;Agent: OpenCode and CodeNomad&lt;/h3&gt;

&lt;p&gt;I&#39;ve settled on &lt;a href=&#34;https://opencode.ai/&#34;&gt;OpenCode&lt;/a&gt; as my agent of choice.&lt;/p&gt;

&lt;p&gt;I quickly decided I couldn&#39;t use TUIs for any development work. I&#39;ve always been a GUI / IDE user anyway. I briefly &lt;em&gt;tried&lt;/em&gt; both Claude Code and OpenCode TUIs, and bounced off &lt;em&gt;hard&lt;/em&gt;. It&#39;s not that I am against terminals or CLI tools, I use a lot of them! But I also like having multiple tabs, my choice of coding font, syntax highlighting, and even just straightforward copy/paste abilities. Maybe I gave up too quickly, but I really struggled to get any of the TUIs to do that.&lt;/p&gt;

&lt;p&gt;I know Claude Code is the market leader for coding agent. Maybe if I gave it another shot I&#39;d find some use out of it.&lt;/p&gt;

&lt;p&gt;On the other hand, I&#39;ve always been enough of a tinkerer that I do customize my tech and tool setups. Yeah, I&#39;m a lifelong Windows user, but I&#39;ve got a comprehensive suite of tools and techniques and customizations I&#39;ve built up over the years. I use Android because I want to fiddle and customize and configure the system the way I want it.&lt;/p&gt;

&lt;p&gt;OpenCode fit that bill when I tried it. It works well for me, and I&#39;m happy with it.&lt;/p&gt;

&lt;p&gt;So if I&#39;m not using the TUI, what&#39;s the alternative?&lt;/p&gt;

&lt;p&gt;I found a great third-party OpenCode web UI called &lt;a href=&#34;https://github.com/NeuralNomadsAI/CodeNomad&#34;&gt;CodeNomad&lt;/a&gt;. Tried it, loved it, works &lt;em&gt;great&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;My personal laptop is all Windows, but my day job is WSL within Windows. I can start CodeNomad&#39;s server from within the WSL environment, browse to the web UI from the Windows side, and not have to deal with any cross-platform filesystem limitations.&lt;/p&gt;

&lt;p&gt;I can have multiple sessions open in one browser tab (with a tabbed UI inside of the page), or have multiple browser tabs talking to the same server. I get full GUI copy and paste, good tool and edit/diff views, and a lot more.&lt;/p&gt;

&lt;p&gt;So, I now am actually doing my primary development there in CodeNomad. Not an IDE.&lt;/p&gt;

&lt;h3 id=&#34;model-opus-4-6&#34;&gt;Model: Opus 4.6&lt;/h3&gt;

&lt;p&gt;We primarily use Anthropic models at work. Honestly I&#39;ve never even tried Gemini / Codex / GPT-whatever / Kimi / etc. I&#39;ve really only used Opus and Sonnet.&lt;/p&gt;

&lt;p&gt;Opus 4.5 and 4.6 have both produced great results for me. Sonnet is decent.&lt;/p&gt;

&lt;p&gt;There&#39;s probably a lot I&#39;m missing. I don&#39;t want to burn a lot of time trying out models and running evals every few days, or switching back and forth just to eke out another 1% gainzzz. That&#39;s fine.&lt;/p&gt;

&lt;p&gt;I just need something that works well enough for me and that I&#39;m comfortable with, and Opus 4.5/4.6 have fit that bill perfectly.&lt;/p&gt;

&lt;p&gt;(As of writing, I haven&#39;t tried out 4.7, and I&#39;m kinda scared to. Too many weird reports about its behavior.)&lt;/p&gt;

&lt;p&gt;Also worth noting that I&#39;m using via API, not Max plans.&lt;/p&gt;

&lt;h3 id=&#34;ide-vcs-vs-code-and-fork&#34;&gt;IDE / VCS: VS Code and Fork&lt;/h3&gt;

&lt;p&gt;I&#39;ve been using VS Code as my editor and IDE of choice for many years. It&#39;s not perfect, but it works.&lt;/p&gt;

&lt;p&gt;Ironically, I now use it more as a file and diff viewer than as an editor :) I mean, I &lt;em&gt;am&lt;/em&gt; writing this blog post itself in VS Code. But for daily dev work, I do the session driving in CodeNomad in the browser, and then I flip over to VS Code to review and commit the diff.&lt;/p&gt;

&lt;p&gt;Honestly I don&#39;t &lt;em&gt;like&lt;/em&gt; VS Code&#39;s Git panels and UI! They feel very awkward. The diff hunk staging view in particular is &lt;em&gt;bad&lt;/em&gt;, especially compared to other IDEs like WebStorm or purpose-built Git GUIs. (Think I saw they maybe made some improvements in the last couple VSC releases - I haven&#39;t updated lately.)&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://git-fork.com/&#34;&gt;Fork&lt;/a&gt; has been my Git GUI client of choice for the last few years. Excellent, absolutely worth it.&lt;/p&gt;

&lt;p&gt;The issue here is that all my work repos are inside the WSL environment. It&#39;s &lt;em&gt;technically&lt;/em&gt; possible to point Fork at a cross-platform WSL share of the repo folder, but the file changes tend to not refresh well, so I&#39;ve mostly fallen back to just doing Git diff operations in VS Code. I think there may be some Fork tweaks that make it work better in WSL - haven&#39;t dug into those. I do know there&#39;s some Linux-native Git GUIs out there, I just haven&#39;t spent time evaluating those lately either.&lt;/p&gt;

&lt;h2 id=&#34;daily-development-workflow&#34;&gt;Daily Development Workflow&lt;/h2&gt;

&lt;p&gt;My workflow is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A long-running &amp;quot;Orchestrator&amp;quot;-mode parent session with the overall context for the major development work that I&#39;m doing. This session&#39;s job is solely to spawn child subtasks where I do the real work interactively.&lt;/li&gt;
&lt;li&gt;Child subtasks dedicated to some subset of the actual work. This may be codebase research and exploration, feature planning, or actual code development. These are highly interactive - I spend all my time discussing, directing, and driving these subtasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core principles here are: &lt;em&gt;I&#39;m&lt;/em&gt; in control. I&#39;m the one who knows what I&#39;m working on and what I want to accomplish. &lt;em&gt;I&lt;/em&gt; decide what the tasks are, and how to accomplish them. &lt;em&gt;I&lt;/em&gt; decide when to move from research to implementation, when to keep digging further or pivot a session from the original goal to a side quest, and when a task is actually done. &lt;em&gt;I&lt;/em&gt; need to be mentally engaged, understand what is happening and why, review the code, and actually commit it when I&#39;m satisfied.&lt;/p&gt;

&lt;p&gt;Most of the time I have one active parent session, and 1-3 active subtask sessions. I do bounce between the active subtasks and context-switch. Normally these are all still part of the same actual workstream. I have tried running sessions for 2-3 different workstreams at the same time, and it&#39;s tough, so I mostly stick with one workstream at a time now.&lt;/p&gt;

&lt;p&gt;I&#39;m sure a lot of folks will say &amp;quot;but that&#39;s so slow, you could be moving so much faster!&amp;quot;.&lt;/p&gt;

&lt;p&gt;I know. That&#39;s the point :) I&#39;m intentionally choosing to limit the workflow to what I can manage in my own head, so that I am still fully mentally engaged and building my own understanding of the system.&lt;/p&gt;

&lt;p&gt;I also specifically aim to keep as many of the moving pieces as deterministic and scripted as possible, especially for things that &lt;em&gt;can&lt;/em&gt; be automated like file management tasks.&lt;/p&gt;

&lt;h3 id=&#34;parent-orchestrator-session-for-project-management&#34;&gt;Parent Orchestrator Session for Project Management&lt;/h3&gt;

&lt;p&gt;I start every new parent session by running my &lt;code&gt;/context&lt;/code&gt; command. This tells the agent to read &lt;code&gt;current-focus.md&lt;/code&gt; and the last 2-3 days worth of progress file entries. That way it has baseline knowledge of the current repo, recent work, and what I&#39;m actually working on.&lt;/p&gt;

&lt;p&gt;From there, I give specific instructions for whatever I&#39;m working on. This is usually several paragraphs of &amp;quot;here&#39;s the overall goal I&#39;m working towards today, here&#39;s what I&#39;m specifically trying to accomplish, here&#39;s how I want to get there&amp;quot;. Then I specifically instruct the orchestrator parent session to spawn one or more subtasks to do the actual work. It then sits and waits for those to complete.&lt;/p&gt;

&lt;p&gt;OpenCode subtasks are essentially async functions with a return value, where the subtask can return some message to the parent. However, the child often returns a response with the &lt;em&gt;initial&lt;/em&gt; result, but I then keep driving the subtask much further and do a lot more work, so the initial response doesn&#39;t capture the actual work accomplished. Another problem is that if I don&#39;t like what a subtask is doing and hit the &amp;quot;Stop&amp;quot; button in that session, it cancels the response to the parent and returns an empty value. The orchestrator has a bad habit of seeing that empty response and saying &amp;quot;oh, the child didn&#39;t complete, let me spawn another subtask to pick up where it left off&amp;quot;. I&#39;ve had to specifically instruct it &amp;quot;&lt;em&gt;never spawn more subtasks until explicitly told to do so&lt;/em&gt;!&amp;quot;&lt;/p&gt;

&lt;p&gt;My instructions for spawning a subtask are surprisingly lax in some ways. I&#39;ve done a bunch of work to give the orchestrator context on what I&#39;m doing, why, and what the next goal is. At that point, I often say &amp;quot;spawn a new subtask to....&amp;quot;, and leave most of the details up to the orchestrator. Sometimes I&#39;ll give fairly specific bullet points: &amp;quot;have the child read files A, B, and C for context. Then, come up with an initial plan to build this feature, and pause. I&#39;ll review and confirm implementation.&amp;quot; Other times, especially when the parent session has gone on for a while and the orchestrator has already spun up a half dozen child tasks for earlier steps, I might just say &amp;quot;yep, kick off phase 3&amp;quot;, but by that point I have high confidence that we&#39;re on the right track and there&#39;s an established pattern for what we&#39;re doing.&lt;/p&gt;

&lt;p&gt;I&#39;ve had some parent sessions last up to a couple weeks as I&#39;m focused on an ongoing effort. Other times it might be a fresh parent session each day. Either way, it&#39;s about the overall goal that I&#39;m working towards right now.&lt;/p&gt;

&lt;p&gt;Here&#39;s what a typical orchestrator session looks like - the tail end of the &lt;code&gt;/context&lt;/code&gt; being loaded, and my initial instructions for what I want to do in this session.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog.isquaredsoftware.com/images/2026-05-thoughts-on-ai-part-2/CodeNomad-parentOrchestrator.png&#34; alt=&#34;CodeNomad - parent orchestrator&#34; /&gt;&lt;/p&gt;

&lt;h3 id=&#34;subtasks-for-development&#34;&gt;Subtasks for Development&lt;/h3&gt;

&lt;p&gt;Subtasks are where I do all the actual work.&lt;/p&gt;

&lt;p&gt;I let the orchestrator write up the full prompt for child subtasks. This is normally enough to get the task started, read a bunch of files, orient itself, and &amp;quot;get the full picture&amp;quot; :)&lt;/p&gt;

&lt;p&gt;The entire subtask session from there is highly interactive. If it&#39;s a research or planning session, I review the results and provide feedback on the output. If it&#39;s a coding session, I look at the initial plan for the changes and provide specific guidance and direction. I want to be very sure &lt;em&gt;both&lt;/em&gt; me and the agent understand what we&#39;re trying to do, why, and how. I&#39;ll provide guidance on specific techniques to use, ask questions about edge cases and ideas, have it expand my own thinking as much as possible. I only tell it &amp;quot;okay, go make these changes&amp;quot; once I&#39;m very sure about the intent.&lt;/p&gt;

&lt;p&gt;I usually try to keep an eye on the agent as it&#39;s making edits. I don&#39;t want to have to explicitly approve operations as it&#39;s running (and we&#39;ll talk about permissions management more later), but I at least want a sense of &lt;em&gt;what&lt;/em&gt; it&#39;s doing and if it looks like it&#39;s heading in the right direction. If not, I&#39;ll mash the &amp;quot;Stop&amp;quot; button and course-correct.&lt;/p&gt;

&lt;p&gt;Once the edits are done, I&#39;ll run / test / etc as needed. I also try to review the code as much as possible. &lt;em&gt;I&lt;/em&gt; then do the actual Git commits myself - staging, messages, commits.&lt;/p&gt;

&lt;p&gt;In a lot of ways this is &amp;quot;one developer workflow, but with extra steps&amp;quot;. Fair :) The speedup comes from the agent&#39;s ability to do the research for me, expand &amp;quot;here&#39;s what I want to do&amp;quot; into a plan for &lt;em&gt;how&lt;/em&gt; to do it, and then turn the &amp;quot;what and how&amp;quot; plan into specific code edits faster than I can. My fingers are fast, but my brain always had to work through the intent first. Here, I get to focus more on the intent and the desired behavior, and let the AI define most of the code-level changes to accomplish that.&lt;/p&gt;

&lt;p&gt;I frequently drive subtasks for extended periods of time. I &lt;em&gt;try&lt;/em&gt; to keep a given subtask on track, but sometimes I end up veering into side quests because it&#39;s easier to keep going here rather than start up a whole new subtask and load context for the freshly discovered problem all over again. Early on, this definitely led to hitting session context limits, which forced me to create commands to reload an entire session&#39;s transcript and run those after the entire session got auto-compacted. Now that I have the OpenCode Dynamic Context Plugin and better tools and instructions for reading files, it&#39;s rare for even an extended session to end up over 100K context. The agent is very proactive about compressing recent tool calls and discussions in order to keep context manageable, and this seems to produce much better results than a big-bang &amp;quot;summarize the entire session so far&amp;quot; compaction. (Granted, sometimes it &lt;em&gt;over&lt;/em&gt;-compresses recent chunks of the discussion and gets a bit confused on what we were doing :) )&lt;/p&gt;

&lt;p&gt;Once I am actually ready to wrap up a given subtask, I specifically manually trigger the two record keeping commands. &lt;code&gt;/progress&lt;/code&gt; tells the subtask to append a new &amp;quot;what did we accomplish?&amp;quot; entry to today&#39;s progress log file. &lt;code&gt;/subtask-complete&lt;/code&gt; writes a standalone version of that update with more details, suitable for the parent orchestrator session to read. I then switch back to the parent session and run &lt;code&gt;/subtask-resume&lt;/code&gt;, which reads all outstanding subtask handoff files so it knows what the N most recent subtasks accomplished. There&#39;s some duplication here, but I view it as &lt;code&gt;/progress&lt;/code&gt; is for the permanent record of what I did today, &lt;code&gt;/subtask-complete&lt;/code&gt; is the function return call results for the subtask to ensure the parent session knows where things stand.&lt;/p&gt;

&lt;p&gt;Here&#39;s a typical child subtask, in this case for working on Replay MCP&#39;s &lt;code&gt;ReactComponent&lt;/code&gt; MCP tool. First, the initial orchestrator-provided prompt:&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog.isquaredsoftware.com/images/2026-05-thoughts-on-ai-part-2/CodeNomad-childSubtask-01-prompt.png&#34; alt=&#34;CodeNomad - child subtask - initial prompt&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Then my responses to some of the agent&#39;s analysis and implementation suggestions:&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog.isquaredsoftware.com/images/2026-05-thoughts-on-ai-part-2/CodeNomad-childSubtask-02-discussion.png&#34; alt=&#34;CodeNomad - child subtask - implementation discussion&#34; /&gt;&lt;/p&gt;

&lt;p&gt;and finally nailing down some design decisions:&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog.isquaredsoftware.com/images/2026-05-thoughts-on-ai-part-2/CodeNomad-childSubtask-03-designDecisions.png&#34; alt=&#34;CodeNomad - child subtask - design decisions&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;opencode-config&#34;&gt;OpenCode Config&lt;/h2&gt;

&lt;p&gt;I have a &lt;em&gt;very&lt;/em&gt; customized OpenCode config and setup that I&#39;ve built to directly support that workflow.&lt;/p&gt;

&lt;h3 id=&#34;permissions-management&#34;&gt;Permissions Management&lt;/h3&gt;

&lt;p&gt;I don&#39;t YOLO or &lt;code&gt;--dangerously-skip-permissions&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I run my agents directly on my own machines, no sandboxing. That also means that I need &lt;em&gt;some&lt;/em&gt; amount of safety checks on commands that get run.&lt;/p&gt;

&lt;p&gt;I &lt;em&gt;do&lt;/em&gt; want to eliminate as many unnecessary permissions prompts as I can. Even if I&#39;m watching and directly driving an agent session, it does get very annoying to see a bunch of permission prompts in the chat session blocking and waiting for my approval, when they&#39;re pretty clearly harmless.&lt;/p&gt;

&lt;p&gt;So, as I said in Part 1: determinism.&lt;/p&gt;

&lt;p&gt;I generated a custom OpenCode plugin to auto-approve as many Bash commands as reasonable based on the contents. It&#39;s decently sophisticated. There&#39;s a very long regex-based list of known safe commands and subcommands that get auto-approved, as well as a similar of known &lt;em&gt;dangerous&lt;/em&gt; commands that will get blocked. It actually does Bash parsing and tries to deal with heredocs and command substitutions.&lt;/p&gt;

&lt;p&gt;The bigger question is how this actually works with OpenCode at all.&lt;/p&gt;

&lt;p&gt;OpenCode refactored their whole permissions and plugin system a few months ago. There &lt;em&gt;was&lt;/em&gt; already a &lt;code&gt;&amp;quot;permission.ask&amp;quot;&lt;/code&gt; event trigger that allowed plugins to actually return a result, but in the refactor that got disabled. I filed an issue, other people have filed PRs, those haven&#39;t been merged. So, I&#39;ve been maintaining a small local fork of OpenCode that reimplements that functionality. That allows my plugin to actually manage permissions.&lt;/p&gt;

&lt;p&gt;I saw Claude Code now has a &amp;quot;not quite YOLO but let the agent self-approve commands&amp;quot; mode. That&#39;s nice, but why rely on more agent calls and more tokens when you can just parse and manage the commands deterministically? :)&lt;/p&gt;

&lt;p&gt;The big loophole here is dynamic scripts - &lt;code&gt;bun -e&lt;/code&gt;, &lt;code&gt;node -e&lt;/code&gt;, &lt;code&gt;python3 -c&lt;/code&gt;. Agents love those. They&#39;re really useful! Don&#39;t even bother writing a script file to &lt;code&gt;/tmp&lt;/code&gt;, just &lt;code&gt;bun -e &amp;quot;someCodeHere()&amp;quot;&lt;/code&gt; and get the results. Really useful when introspecting some data files.&lt;/p&gt;

&lt;p&gt;Obviously this means the agent could trivially smuggle through code that starts nuking folders or uploading my secrets to the mothership.&lt;/p&gt;

&lt;p&gt;In practice: I&#39;m not sure I&#39;ve seen my agents actually &lt;em&gt;try&lt;/em&gt; to run a command that would be truly destructive. I&#39;ve got these guardrails in place, and to some extent I haven&#39;t seen evidence that they&#39;re &lt;em&gt;necessary&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The permissions plugin does try to do some additional scanning of inline eval scripts for blatantly obvious calls like &lt;code&gt;unlink()&lt;/code&gt; and flags those entire commands for approval.&lt;/p&gt;

&lt;p&gt;It&#39;s a tradeoff I&#39;m happy with at this point.&lt;/p&gt;

&lt;h3 id=&#34;file-reads&#34;&gt;File Reads&lt;/h3&gt;

&lt;p&gt;OpenCode has a &lt;code&gt;Read&lt;/code&gt; tool, same as every other harness. It works. But agents default to just reading massive amounts of file text, over and over, both to learn the codebase and to remind themselves of what they&#39;ve seen already.&lt;/p&gt;

&lt;p&gt;I found a file read caching tool called &lt;a href=&#34;https://github.com/glommer/cachebro&#34;&gt;&lt;code&gt;cachebro&lt;/code&gt;&lt;/a&gt; that is available as an MCP. It checks file access times and hashes, and if the file hasn&#39;t changed since the last read, the tool returns a message saying &amp;quot;this hasn&#39;t changed&amp;quot;.&lt;/p&gt;

&lt;p&gt;I&#39;ve told my agent to default to using &lt;code&gt;cachebro&lt;/code&gt; for file reads. Unfortunately, the &lt;code&gt;cachebro&lt;/code&gt; MCP read tool doesn&#39;t interact with OpenCode&#39;s own &amp;quot;file last read&amp;quot; logic. That meant that if my agent tried to &lt;em&gt;write&lt;/em&gt; to a file, OpenCode would return an error saying &amp;quot;you must use the &lt;code&gt;Read&lt;/code&gt; tool first&amp;quot;, and then it would have to actually call &lt;code&gt;Read&lt;/code&gt; and it&#39;s all a waste of time and tool calls and tokens.&lt;/p&gt;

&lt;p&gt;So since I was already maintaining a small running fork of OpenCode to handle the &lt;code&gt;&amp;quot;permission.ask&amp;quot;&lt;/code&gt; event, I just added another commit to the fork that exposed OpenCode&#39;s &amp;quot;file access time&amp;quot; calls into the &lt;code&gt;Plugin&lt;/code&gt; interface. Then I built my own &lt;code&gt;cachebro&lt;/code&gt; plugin that watches for &lt;code&gt;cachebro&lt;/code&gt; MCP tool calls, and gets/sets the file read times so OpenCode knows that file&#39;s been read. Works great.&lt;/p&gt;

&lt;h3 id=&#34;code-structure-and-search&#34;&gt;Code Structure and Search&lt;/h3&gt;

&lt;p&gt;Per above, agents default to just &lt;code&gt;Read&lt;/code&gt; for everything. This is &lt;em&gt;awful&lt;/em&gt; for codebase exploration. Read 10-15 files just to trace dependencies and imports. Lots of extra wasted code text bloating the context. &lt;em&gt;Don&#39;t&lt;/em&gt; do this!&lt;/p&gt;

&lt;p&gt;I&#39;ve tried out a half-dozen different MCP tools that do full codebase parsing and provide tools to query structure, dependencies, outlines, and relevant chunks of code.&lt;/p&gt;

&lt;p&gt;Currently, I use &lt;a href=&#34;https://github.com/agentika-labs/grepika&#34;&gt;&lt;code&gt;grepika&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://github.com/jahala/tilth&#34;&gt;&lt;code&gt;tilth&lt;/code&gt;&lt;/a&gt; via MCP, and get great results. Highly recommended. I again have my &lt;code&gt;AGENTS.md&lt;/code&gt; with instructions to always use those as the primary file reading options, and I consistently see my agent using them and intelligently only loading relevant parts of files.&lt;/p&gt;

&lt;p&gt;I&#39;ve also previously tried &lt;a href=&#34;https://github.com/SimplyLiz/CodeMCP&#34;&gt;&lt;code&gt;ckb&lt;/code&gt;&lt;/a&gt; (CodeKnowledgeBase). It&#39;s got a massive set of tools for querying structure and blast radius, and I&#39;ve &lt;em&gt;wanted&lt;/em&gt; to use it, but I&#39;ve run into a few problems with indexing not working or tool calls timing out. Been playing with &lt;a href=&#34;https://github.com/CRJFisher/ariadne&#34;&gt;&lt;code&gt;ariadne&lt;/code&gt;&lt;/a&gt;, and I&#39;m constantly keeping an eye out for other codebase indexing tools.&lt;/p&gt;

&lt;h3 id=&#34;context-management&#34;&gt;Context Management&lt;/h3&gt;

&lt;p&gt;Per above, I do all my work exclusively in subagent sessions that I drive myself. This means my parent orchestrator session doesn&#39;t have any issues with maxing out the context window and needing to compact, but the child tasks do.&lt;/p&gt;

&lt;p&gt;I did pretty frequently hit 160-170K context and run into auto-compaction. I &lt;em&gt;hated&lt;/em&gt; it. The auto-compact summaries were &lt;em&gt;adequate&lt;/em&gt;, but inevitably there&#39;d be a bunch of details I cared about that would get lost.&lt;/p&gt;

&lt;p&gt;At first I built some dev scripts commands that would read the OpenCode session JSON files, filter out tool calls, and export the meaningful message contents out as a complete Markdown file. I built a &lt;code&gt;/session-reload&lt;/code&gt; command and skill that would force the agent to run the export command, read the entire exported transcript, and then pause.&lt;/p&gt;

&lt;p&gt;However, &lt;code&gt;grepika&lt;/code&gt; really reduced the amount of &lt;em&gt;code&lt;/em&gt; that was bloating context. That helped.&lt;/p&gt;

&lt;p&gt;Then I found the &lt;a href=&#34;https://github.com/Opencode-DCP/opencode-dynamic-context-pruning&#34;&gt;OpenCode Dynamic Context Pruning Plugin&lt;/a&gt;. Instead of waiting until your session is almost at full context and then doing a big summary of the &lt;em&gt;entire&lt;/em&gt; session as a replacement, which would be &lt;em&gt;really&lt;/em&gt; lossy, it gives your agent a &lt;code&gt;compress&lt;/code&gt; tool that it can use at will to compress and summarize &lt;em&gt;chunks&lt;/em&gt; of your session (like a bunch of exploration file reads, or earlier messages as you switch focus to a follow-up effort). This means there&#39;s more of the session messages that stay exactly as-is, there&#39;s less time spent compacting, and it&#39;s much rarer that one of my subtask sessions actually nears max context and has to compact everything just to reset.&lt;/p&gt;

&lt;p&gt;Ironically, I really found a great working combo of tools right before Anthropic shipped 1.0M context windows by default for everyone :) But seriously, in the last couple months since landing on this combo of tools and plugins, I find that even a very long-running technical subtask session rarely gets above 100K context, thanks to &lt;code&gt;grepika&lt;/code&gt; and &lt;code&gt;cachebro&lt;/code&gt; minimizing file reads and the agent happily compressing earlier chunks on the fly.&lt;/p&gt;

&lt;p&gt;I know this does mean you might have some cache invalidations that could bump cost because it&#39;s no longer just the one latest message at the end of the session that hasn&#39;t been seen by the server. But on the flip side, keeping the actual total context size smaller seems to pay off, and it&#39;s not like the agent is calling &lt;code&gt;compress&lt;/code&gt; every other turn.&lt;/p&gt;

&lt;p&gt;I &lt;em&gt;was&lt;/em&gt; using the &lt;a href=&#34;https://github.com/rtk-ai/rtk&#34;&gt;&lt;code&gt;rtk&lt;/code&gt;&lt;/a&gt; Rust CLI tool to automatically compress the output of tools like &lt;code&gt;grep&lt;/code&gt; to save on tokens. Unfortunately I saw too many cases where the agent got stuck in a loop trying to call &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;rtk grep&lt;/code&gt; would change the output too much, the agent got confused and tried again, and it just wasted time and tokens. So, eventually disabled &lt;code&gt;rtk&lt;/code&gt;. Might come back to it at some point.&lt;/p&gt;

&lt;h3 id=&#34;session-history-and-search&#34;&gt;Session History and Search&lt;/h3&gt;

&lt;p&gt;As mentioned, I initially built some custom scripts that would find the right session JSON files and export as separate Markdown transcripts with just the message text, no tool contents.&lt;/p&gt;

&lt;p&gt;OpenCode 1.2 switched to storing sessions internally in SQLite. I held off upgrading to 1.2 for a while because I had all my custom scripts and commands and didn&#39;t want to take the time to rewrite them. But, I finally did, and that actually simplified things quite a bit.&lt;/p&gt;

&lt;p&gt;My previous &lt;code&gt;/session-reload&lt;/code&gt; command told the agent &amp;quot;run the &lt;code&gt;export session&lt;/code&gt;-type command, look at the list of most recent sessions it gives you, find what you &lt;em&gt;think&lt;/em&gt; is the right Markdown file based on your own context and instructions, and read that&amp;quot;. Kind of awkward, left room for error.&lt;/p&gt;

&lt;p&gt;After rewriting my own session history plugin to read from OpenCode&#39;s own plugin/internal &lt;code&gt;client.session&lt;/code&gt; object, that all went away. Instead, I have a &lt;code&gt;reload_session&lt;/code&gt; tool that can just directly grab the list of messages from the plugin API using the session ID, filter, construct the Markdown contents, and directly return it as the tool call result. No file path or &amp;quot;match up the session&amp;quot; steps needed.&lt;/p&gt;

&lt;p&gt;It was also trivial to throw together &lt;code&gt;search_sessions&lt;/code&gt; and &lt;code&gt;read_session&lt;/code&gt; tools. They&#39;re currently pretty dumb and just do basic regex searches on session contents, no vector DBs or similarity scores or anything. But they&#39;re pretty useful even in that form.&lt;/p&gt;

&lt;h2 id=&#34;dev-plans-repo-and-management-scripts&#34;&gt;Dev Plans Repo and Management Scripts&lt;/h2&gt;

&lt;h3 id=&#34;plan-management-issues&#34;&gt;Plan Management Issues&lt;/h3&gt;

&lt;p&gt;During my initial couple months of using KiloCode, I found myself with the same proliferation of Markdown plan files that we&#39;ve all run into. So where do those go? The agent wants to default to writing them to the root of whatever repo you&#39;re working in. I made an effort to redirect it to write them to a &lt;code&gt;./docs&lt;/code&gt; folder, although in our main backend repo that already existed so I had to resort to &lt;code&gt;./docs/merikson&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Some of these plan files were worth committing or preserving, even if just for my own reference later. Others weren&#39;t.&lt;/p&gt;

&lt;p&gt;So where do the plan files go if this is a shared repo? I really didn&#39;t want to pollute a shared repo and commit history with dozens of my own personal semi-ephemeral plan files, or even the maybe-more-widely-useful architectural writeups.&lt;/p&gt;

&lt;h3 id=&#34;personal-dev-plans-repo&#34;&gt;Personal Dev Plans Repo&lt;/h3&gt;

&lt;p&gt;I decided the best option was to set up an entirely separate personal development doc knowledge base repo, just for myself. I dubbed it &lt;code&gt;dev-plans&lt;/code&gt;. That would give me a consistent place that I could store all my own Markdown artifacts and knowledge, commit it, save those for future reference, and not pollute the shared actual repo Git history.&lt;/p&gt;

&lt;p&gt;My &lt;code&gt;dev-plans&lt;/code&gt; repo structure is:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;/dev-plans
  /personal
  /redux
    /$PROJECT1
      /architecture
      /features
      /progress-updates
      /research
      /subtask-handoffs
      current-focus.md
      QUIRKS.md
  /replay
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;current-focus.md&lt;/code&gt; is intermittently updated whenever I feel I&#39;m significantly shifting gears or focus on a repo, or completed a major chunk of work and the &amp;quot;what I&#39;m working on now&amp;quot; section should reflect that.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;QUIRKS.md&lt;/code&gt; is more of a project structure, known actual quirks or patterns, things to remember document.&lt;/p&gt;

&lt;p&gt;Every file other than the two fixed &lt;code&gt;current-focus.md&lt;/code&gt; and &lt;code&gt;QUIRKS.md&lt;/code&gt; files starts with a &lt;code&gt;YYYY-MM-DD&lt;/code&gt; prefix, such as &lt;code&gt;features/2026-05-06-some-feature.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I&#39;ve got some archival scripts set up to move older documents from the flat folder structure into a nested &lt;code&gt;YYYY/MM&lt;/code&gt; structure to keep things a bit more readable, but haven&#39;t done much with that yet. I suspect I&#39;ll need some tools to help index the documents when I do that.&lt;/p&gt;

&lt;h3 id=&#34;workflow-artifacts&#34;&gt;Workflow Artifacts&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;architecture&lt;/code&gt; is meant to be longer-lived explorations of the codebase structure and patterns. Full-blown &amp;quot;what do we know about this project&amp;quot;, vertical &amp;quot;trace through this feature or data flow path&amp;quot;, reference material&lt;/li&gt;
&lt;li&gt;&lt;code&gt;features&lt;/code&gt; is WIP development plans. Here&#39;s the next thing we&#39;re going to build, we&#39;ve turned this into a concrete plan, use this as the basis&lt;/li&gt;
&lt;li&gt;&lt;code&gt;research&lt;/code&gt; is more of a grab bag. Sometimes it&#39;s scanning the codebase for concepts, other times it&#39;s research dives through Github and NPM for relevant concepts&lt;/li&gt;
&lt;li&gt;&lt;code&gt;progress-updates&lt;/code&gt; is the daily dated appended progress entries, &lt;code&gt;subtask-handoffs&lt;/code&gt; is the individual handoff files that get automatically archived as soon as they&#39;re read&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;devplans-ts-automation-script&#34;&gt;&lt;code&gt;devplans.ts&lt;/code&gt; Automation Script&lt;/h3&gt;

&lt;p&gt;I&#39;ve settled on using Bun with TS scripts for a lot of my personal needs and utilities.&lt;/p&gt;

&lt;p&gt;I&#39;ve tried to automate a lot of the common tasks I saw consistently pop up when interacting with the &lt;code&gt;dev-plans&lt;/code&gt; repo. I created &lt;code&gt;~/.config/opencode/scripts/devplans.ts&lt;/code&gt; and have fleshed it out over time with a variety of commands the agent uses all the time.&lt;/p&gt;

&lt;p&gt;Currently, that provides:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-ts&#34;&gt;/**
 * devplans.ts - Unified dev-plans CLI helper
 *
 * Commands:
 *   devplans info                      Get project mapping info (no side effects)
 *   devplans progress                  Get/create today&#39;s progress file (with late-night date logic)
 *   devplans progress list [n]         List n most recent progress files (default 3)
 *   devplans progress append [file]    Append entry from JSON file (deleted after read) or stdin
 *   devplans handoff create [slug]     Get path for new handoff file
 *   devplans handoff list              List files in pending/
 *   devplans handoff move [file]       Move from pending/ to completed/YYYY/MM/DD/
 *   devplans handoff consume           List, read, and move all pending handoffs
 *   devplans doc create &amp;lt;type&amp;gt; &amp;lt;slug&amp;gt;  Create dated doc (type: feature|arch|analysis|issue)
 *   devplans doc list &amp;lt;type&amp;gt; [n]       List docs of type (default 10)
 *   devplans session extract           Extract recent sessions, list newest 10
 *   devplans archive &amp;lt;folder&amp;gt;          Archive old files to folder/archive/YYYY/MM/DD/
 *   devplans archive --all             Archive all doc folders
 */
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;These deterministic commands save a &lt;em&gt;lot&lt;/em&gt; of steps that the agent would have had to run itself to figure out what &lt;code&gt;dev-plans&lt;/code&gt; folder path matches the current repo, creating placeholder handoff files or documents, and updating progress docs. Most of my OpenCode slash commands start with some variation of &amp;quot;Run `bun dev-plans.ts some-command&amp;quot;.&lt;/p&gt;

&lt;p&gt;I also have a JSON file with folder mappings for my usual repo checkout paths in my personal laptop Windows and work laptop WSL environments. That way the script can just read those mappings and use the known paths.&lt;/p&gt;

&lt;p&gt;Per the Workflow section, I have a &lt;code&gt;/init&lt;/code&gt; command that helps me set up the scaffolding when adding a new project to &lt;code&gt;dev-plans&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&#34;progress-updates-and-subtask-handoffs&#34;&gt;Progress Updates and Subtask Handoffs&lt;/h3&gt;

&lt;p&gt;The most used subcommands are for &lt;code&gt;progress&lt;/code&gt; and &lt;code&gt;handoff&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;My original &lt;code&gt;/progress&lt;/code&gt; command told the agent to actually read today&#39;s progress file completely, then append a new section. This became an O(n^2)-type problem as the progress file kept growing over the course of a day. Just reading the file would bloat context, and this was especially bad when the subtask was already bordering on max session context.&lt;/p&gt;

&lt;p&gt;Now, &lt;code&gt;devplans progress&lt;/code&gt; prints JSON output with today&#39;s progress file path, but also creates a placeholder temp file and provides that path as well. The agent is instructed to overwrite the placeholder with its actual update, and then runs &lt;code&gt;devplans progress $TEMPFILE&lt;/code&gt;. The script then deterministically appends the new section to today&#39;s progress doc so the agent didn&#39;t have to read that file itself.&lt;/p&gt;

&lt;p&gt;Similarly, &lt;code&gt;/subtask-complete&lt;/code&gt; in the child tells it to run &lt;code&gt;devplans handoff create&lt;/code&gt; creates a target file path that the agent can write to, and then when I run &lt;code&gt;/subtask-resume&lt;/code&gt; in the orchestrator parent it runs &lt;code&gt;devplans handoff consume&lt;/code&gt; which auto-prints all pending handoff files immediately and then auto-archives them. This saves multiple steps of the agent fumbling around.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;devplans&lt;/code&gt; commands also intelligently handle dates and timestamps - automatically generating file paths with timestamps, figuring out today&#39;s progress file, and even assuming that any updates between midnight and 6 AM really belong on &amp;quot;the previous day&#39;s progress file&amp;quot; because it&#39;s likely I was working late into the night on something.&lt;/p&gt;

&lt;p&gt;There&#39;s still a lot of manual trigger behavior in here, and again I&#39;m good with that :)&lt;/p&gt;

&lt;h2 id=&#34;agents-md&#34;&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;My &lt;code&gt;AGENTS.md&lt;/code&gt; file is currently about 250 lines (and writing this post forced me to review it and do some reorganizing and condensation - it had gotten rather crufty).&lt;/p&gt;

&lt;p&gt;It starts with a short personal overview: who I am, day job at Replay, OSS work on Redux.&lt;/p&gt;

&lt;p&gt;Major sections include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Interaction patterns: I specifically instruct the agent to be keep its responses short and direct, and avoid sycophancy. That includes both descriptions, and acknowledging my instructions.&lt;/li&gt;
&lt;li&gt;Thinking and problem solving: use critical thinking and be skeptical about assumptions and correctness; stop and rethink problems if stuck; do research, not trial-and-error; state plans and wait for confirmation to check assumptions and confirm user intent&lt;/li&gt;
&lt;li&gt;Git: &lt;em&gt;never&lt;/em&gt; commit, always stop and wait for me to review changes&lt;/li&gt;
&lt;li&gt;Personal tool environment: personal vs work laptop setups, path management, use Bun for scripting not Python&lt;/li&gt;
&lt;li&gt;Coding standards: TS usage, running tests, minimizing comments&lt;/li&gt;
&lt;li&gt;Code navigation: minimize context loading at all times; use &lt;code&gt;grepika&lt;/code&gt; and &lt;code&gt;tilth&lt;/code&gt; for navigating code, &lt;code&gt;cachebro&lt;/code&gt; for other file reads&lt;/li&gt;
&lt;li&gt;Tasks and behavior: manage todos and progress; be careful counting completion; manage current context&lt;/li&gt;
&lt;li&gt;Dev plans workflow: use &lt;code&gt;devplans.ts&lt;/code&gt; for file management; use of &lt;code&gt;QUIRKS.md&lt;/code&gt; and other rules files&lt;/li&gt;
&lt;li&gt;Subtask spawning and workflow rules: only spawn subtasks when told; verify completion;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I make no claims that my &lt;code&gt;AGENTS.md&lt;/code&gt; is optimized, correct, or a model to follow :) It&#39;s just what I&#39;ve evolved through my own usage.&lt;/p&gt;

&lt;h2 id=&#34;commands-and-skills&#34;&gt;Commands and Skills&lt;/h2&gt;

&lt;h3 id=&#34;project-setup&#34;&gt;Project Setup&lt;/h3&gt;

&lt;p&gt;I have some commands and skills for initial &lt;code&gt;dev-plans&lt;/code&gt; setup for a new repo - the usual &lt;code&gt;/init&lt;/code&gt; and &lt;code&gt;/architecture&lt;/code&gt;-type commands that scan the codebase, do a writeup of the details, do some initial architecture description docs, etc. Don&#39;t do those often, nothing special there.&lt;/p&gt;

&lt;h3 id=&#34;progress-and-subtask-management&#34;&gt;Progress and Subtask Management&lt;/h3&gt;

&lt;p&gt;As described above: &lt;code&gt;/progress&lt;/code&gt; specifically instructs the current session to create a new entry in today&#39;s progress log. &lt;code&gt;/subtask-complete&lt;/code&gt; tells a child subtask to record a separate handoff file that can be used as a &amp;quot;return value&amp;quot; to update the parent orchestrator session, &lt;code&gt;/subtask-resume&lt;/code&gt; has the parent session read all outstanding handoff files to know what got done.&lt;/p&gt;

&lt;h3 id=&#34;task-tracking&#34;&gt;Task Tracking&lt;/h3&gt;

&lt;p&gt;For most of my day to day work development, I&#39;ve gotten along fine without any explicit external task tracker. I&#39;m the one who knows what I&#39;m working on.&lt;/p&gt;

&lt;p&gt;For a couple projects, I&#39;ve tried using &lt;a href=&#34;https://github.com/dcramer/dex&#34;&gt;&lt;code&gt;dex&lt;/code&gt;&lt;/a&gt; as a lightweight external nested task tracking CLI. (Think &lt;code&gt;beads&lt;/code&gt;, but with way less slop.) It&#39;s worked pretty well! I&#39;ve got a skill that instructs the agent how to use &lt;code&gt;dex&lt;/code&gt; efficiently. I&#39;d have the orchestrator session run &lt;code&gt;dex&lt;/code&gt; commands to see where we stand in terms of task status, then pass &lt;code&gt;dex&lt;/code&gt; task IDs to a subtask and tell it to mark that task as in progress. Similar to avoiding having the agent do any Git commits, I told it not to mark any &lt;code&gt;dex&lt;/code&gt; tasks as complete until I explicitly instructed it to do so, and have a &lt;code&gt;/dex-complete&lt;/code&gt; command to help with that.&lt;/p&gt;

&lt;h3 id=&#34;other-commands&#34;&gt;Other Commands&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;/session-reload&lt;/code&gt; extracts the entire message history of the current session and returns it. Per above, this used to be writing it all to disk as a Markdown file, now it just constructs the transcript in memory from the DB entries and returns it as the tool result. I use this much less frequently now thanks to the OC Dynamic Context plugin and use of better file search tools - now that I have those I rarely get close to 150K+ context even in a long running subtask session.&lt;/p&gt;

&lt;p&gt;I wrote my own AI-powered code review tool called &lt;a href=&#34;https://github.com/markerikson/diffloupe&#34;&gt;&lt;code&gt;diffloupe&lt;/code&gt;&lt;/a&gt; that tries to compare stated change intent vs inferred change intent, and reviews for both bugs and intent mismatches. I have a &lt;code&gt;/code-review&lt;/code&gt; command that tells the agent to review the current changes by triggering &lt;code&gt;diffloupe&lt;/code&gt; and then report on the results.&lt;/p&gt;

&lt;h3 id=&#34;other-skills&#34;&gt;Other Skills&lt;/h3&gt;

&lt;p&gt;I do have a variety of skills available:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;several for frontend design and UI work&lt;/li&gt;
&lt;li&gt;advanced TS patterns&lt;/li&gt;
&lt;li&gt;Replay CLI and MCP usage&lt;/li&gt;
&lt;li&gt;Architecture design and feature planning&lt;/li&gt;
&lt;li&gt;File / codebase search tools&lt;/li&gt;
&lt;li&gt;Assorted skills explaining how to use &lt;code&gt;diffloupe&lt;/code&gt;, &lt;code&gt;dex&lt;/code&gt;, and &lt;code&gt;gh&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;config-improvement-process&#34;&gt;Config Improvement Process&lt;/h2&gt;

&lt;p&gt;After I did my initial config and workflow development efforts back in December, I&#39;ve alternated between periods of leaving it exactly as-is and focusing on just doing work, and getting annoyed with parts of the workflow and making improvements. Generally it&#39;s noticing that some particular pain point is becoming an issue - that I keep having to repeat a particular set of instructions, or that part of the workflow could be automated via &lt;code&gt;devplans.ts&lt;/code&gt;, or trying out a different codebase indexing plugin that I found. At that point I&#39;ll go spin up a new session inside my OpenCode config repo itself, talk through the problem space, and develop the changes accordingly.&lt;/p&gt;

&lt;p&gt;As a relevant example, just reading &lt;code&gt;AGENTS.md&lt;/code&gt; to write this post showed me how the content had gotten somewhat bloated and disorganized. So, I just started up a new session to review it, described my pain points, and the agent suggested a slimmed-down version that retained the key points, moved some of the detailed file tool usage instructions out to a separate skill, and better organized the &amp;quot;how to communicate&amp;quot; and &amp;quot;daily workflow&amp;quot; sections. Done.&lt;/p&gt;

&lt;h3 id=&#34;potential-future-workflow-improvements&#34;&gt;Potential Future Workflow Improvements&lt;/h3&gt;

&lt;p&gt;I&#39;m pretty happy with the tooling and workflow that I&#39;ve got right now. The one area where I feel I&#39;m lacking right now is that longer-term memory and context. The system I&#39;ve got is great for &amp;quot;what is the repo we&#39;re working in?&amp;quot; and &amp;quot;what&#39;s the current set of tasks?&amp;quot;, but I&#39;m finding I have to do a lot of work to dig up other recent sessions where some decision was made or a research document was generated, and feed those back into the current session. I need something that helps index or scan generated planning and progress files and dynamically feeds in relevant results to the current session, or MCP tools that the session can use to scan already-indexed files.&lt;/p&gt;

&lt;p&gt;I also don&#39;t have any kind of automatic &amp;quot;scan recent sessions for common patterns or corrections or learnings, and extract workflow improvements&amp;quot; system. I &lt;em&gt;do&lt;/em&gt; instruct agents to include possible learnings in the progress and handoff artifacts, and sometimes those trickle over to updates to &lt;code&gt;QUIRKS.md&lt;/code&gt;, but I feel there&#39;d be value in the automatic review process.&lt;/p&gt;

&lt;p&gt;I &lt;em&gt;am&lt;/em&gt; very happy with &lt;code&gt;grepika&lt;/code&gt; and &lt;code&gt;tilth&lt;/code&gt; for codebase exploration over just reading files manually. I can imagine it would be nice to somehow preload more of the codebase into a given session so it doesn&#39;t have to re-explore some of the same files each time&lt;/p&gt;

&lt;p&gt;Code review and ensuring intent are still hard. &lt;code&gt;diffloupe&lt;/code&gt; has been useful for doing some review checks. I intended to add my own full code review UI to it, but got distracted and never got back to that. I&#39;ve bookmarked a bunch of other code review tools and may still investigate some of those.&lt;/p&gt;

&lt;h2 id=&#34;final-thoughts&#34;&gt;Final Thoughts&lt;/h2&gt;

&lt;p&gt;6000+ words, and this was with me deliberately &lt;em&gt;avoiding&lt;/em&gt; going into full amounts of technical detail :) So there you go.&lt;/p&gt;

&lt;p&gt;See &lt;a href=&#34;https://github.com/markerikson/opencode-config-example&#34;&gt;the example config repo&lt;/a&gt; for the actual commands, scripts, and setup.&lt;/p&gt;

&lt;p&gt;No idea how many people will end up going through here, but as always, hope this info was useful!&lt;/p&gt;

&lt;p&gt;And more than anything else: whether you use AI to write all your code or write it by hand, I hope that you can find a workflow for yourself that is sustainable, maintainable, understandable, and &lt;em&gt;safely&lt;/em&gt; productive.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>My Thoughts on AI, Part 1: Fears, Opinions, and Mental Journey</title>
      <link>https://blog.isquaredsoftware.com/2026/05/ai-thoughts-part-1-fears-opinions-journey/</link>
      <pubDate>Thu, 07 May 2026 14:00:00 -0500</pubDate>
      
      <guid>https://blog.isquaredsoftware.com/2026/05/ai-thoughts-part-1-fears-opinions-journey/</guid>
      <description>

&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;

&lt;p&gt;This post will be tough to write. There&#39;s a lot of discourse and arguing about AI everywhere you look. I&#39;ve read it all. I don&#39;t want to get caught up in arguments, get misinterpreted, or be labeled with beliefs that don&#39;t apply.&lt;/p&gt;

&lt;p&gt;I am not e/acc or P(doom). I am a software engineer, I am a person, trying to figure this out same as everyone else.&lt;/p&gt;

&lt;p&gt;I am not trying to sell anything, change anyone&#39;s mind, or say I am an expert. I don&#39;t have the answers.&lt;/p&gt;

&lt;p&gt;I &lt;em&gt;do&lt;/em&gt; have thoughts, opinions, fears, excitement, and concerns. I&#39;ve shared a lot of them in private. Enough people have heard those thoughts and said they want to hear or read more about my opinions that it seems worth my time to write them up publicly. A lot of these aren&#39;t original to me. I don&#39;t claim to be a deep thinker. I &lt;em&gt;have&lt;/em&gt; read a lot, thought a lot, synthesized a lot.&lt;/p&gt;

&lt;p&gt;So, here&#39;s my story and opinions, from the heart, best as I can write them. So many points I could make and articles I could cite as references here, but this one&#39;s just me. My story, told my way. A lot of you are probably going to see the length and yell &amp;quot;TLDR&amp;quot; and nope right out of here, or throw it in an agent to summarize. That&#39;s fine. Take it for what it&#39;s worth. Maybe this helps someone else. (and if you want to skip to &lt;a href=&#34;https://blog.isquaredsoftware.com/2026/05/ai-thoughts-part-2-agent-workflow-tools/&#34;&gt;the tech workflow post&lt;/a&gt; there you go.)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#introduction&#34;&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#part-1-the-before-times&#34;&gt;Part 1: The Before Times&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#programming-is-life&#34;&gt;Programming Is Life&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#clouds-on-the-horizon&#34;&gt;Clouds on the Horizon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#ominous-signs&#34;&gt;Ominous Signs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#part-2-fear-doom-and-depression&#34;&gt;Part 2: Fear, Doom, and Depression&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#the-pivot&#34;&gt;The Pivot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-wilderness&#34;&gt;The Wilderness&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-tidal-wave&#34;&gt;The Tidal Wave&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#p-doom&#34;&gt;P(doom)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#depression&#34;&gt;Depression&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#part-3-reverse-engineering&#34;&gt;Part 3: Reverse Engineering&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#miami-sunshine&#34;&gt;Miami Sunshine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#flipping-the-bit&#34;&gt;Flipping The Bit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#part-4-taming-the-beast&#34;&gt;Part 4: Taming the Beast&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#architectural-research&#34;&gt;Architectural Research&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#mind-blown&#34;&gt;Mind. Blown.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#part-5-diving-in&#34;&gt;Part 5: Diving In&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#ramping-up&#34;&gt;Ramping Up&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#immer&#34;&gt;Immer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#nerd-sniped&#34;&gt;Nerd-Sniped&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#self-reflection&#34;&gt;Self-Reflection&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#part-6-liftoff&#34;&gt;Part 6: Liftoff&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#trust-factor&#34;&gt;Trust Factor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#gearing-up&#34;&gt;Gearing Up&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-re-pivot&#34;&gt;The Re-Pivot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#part-7-warp-speed&#34;&gt;Part 7: Warp Speed&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#pulling-it-all-together&#34;&gt;Pulling It All Together&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pattern-matching&#34;&gt;Pattern Matching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#shipping-for-agents&#34;&gt;Shipping for Agents&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#part-8-so-what-do-i-think-today-anyway&#34;&gt;Part 8: So What Do I Think Today, Anyway?&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#most-of-my-fears-are-still-valid-and-so-are-you&#34;&gt;Most Of My Fears Are Still Valid, And So Are You&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-tiger-is-out&#34;&gt;The Tiger Is Out&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#gotta-go-fast&#34;&gt;Gotta Go Fast&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#oops-it-s-capitalism&#34;&gt;Oops It&#39;s Capitalism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#maintainability-is-the-mindset&#34;&gt;Maintainability is the Mindset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#but-non-determinism&#34;&gt;But Non-Determinism?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#is-this-actually-better&#34;&gt;Is This Actually Better?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#what-about-the-craft&#34;&gt;What About the Craft?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#final-thoughts&#34;&gt;Final Thoughts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;part-1-the-before-times&#34;&gt;Part 1: The Before Times&lt;/h2&gt;

&lt;h3 id=&#34;programming-is-life&#34;&gt;Programming Is Life&lt;/h3&gt;

&lt;p&gt;I love programming. I love the problem solving, the thinking. Getting in a flow state, trance music cranked up, deep in the code, surfacing hours later and seeing that this feature didn&#39;t exist at the start of the day and now it does and it&#39;s all because I figured out how to do it. Debugging deeply. Trying to understand the guts of an unfamiliar system, figuring out where things were going wrong, finally nailing the tweak or architectural change that fixes the problem. Learning new tools, unlocking new capabilities.&lt;/p&gt;

&lt;p&gt;I&#39;ve been programming for 25+ years, over half my life. I cut my teeth in the early days of the Agile Manifesto. I read Joel Spolsky and that rewriting a system from scratch was a bad idea. I read the HN debates about how to interview programmers. I read the 8th Light and Uncle Bob discussions about &amp;quot;Software Craftsmanship&amp;quot; and honing our skills. I never spent time doing code katas, but clearly craft &lt;em&gt;mattered&lt;/em&gt;. Writing code the right way &lt;em&gt;mattered&lt;/em&gt;. It wasn&#39;t just about whether the code &lt;em&gt;ran&lt;/em&gt;. It was whether the code was &lt;em&gt;elegant&lt;/em&gt;, clean, readable, maintainable. &amp;quot;Make It Work, Make It Right, Make It Fast&amp;quot; became my mantra. &amp;quot;Tradeoffs&amp;quot; was my favorite keyword.&lt;/p&gt;

&lt;p&gt;I built my career on deep understanding. I firmly believe that &amp;quot;programming is building a mental model of the system&amp;quot;. That every programmer&#39;s job is really to understand the problem domain and the system they&#39;re working on, that you break down a new feature or bugfix by comparing it to your existing understanding of the system, and that at the end of a 6-hour coding session you&#39;ve not only written working code but you&#39;ve shaped a new and improved understanding of the existing system &lt;em&gt;plus&lt;/em&gt; the changes. That you learn the fundamentals of your tools, go into the next layer of abstraction, dig into unfamiliar code, learn on the fly.&lt;/p&gt;

&lt;p&gt;I believe in determinism. That pure functions aren&#39;t just an esoteric concept, but make code predictable and testable. That you &lt;em&gt;can&lt;/em&gt; understand a system, even if there&#39;s distributed pieces and timing problems and race conditions. That you &lt;em&gt;can&lt;/em&gt; solve a problem by taking the time to understand it, break it down, build the mental model, scientific method debug the solution, document it, maintain it. Redux wasn&#39;t just a way to manage data outside React, but a way to make the data flow predictable. That the Redux DevTools should show a meaningful human readable history of what happened in the application.&lt;/p&gt;

&lt;p&gt;And then came AI.&lt;/p&gt;

&lt;h3 id=&#34;clouds-on-the-horizon&#34;&gt;Clouds on the Horizon&lt;/h3&gt;

&lt;p&gt;Dunno when I first started hearing about using AI to write code. Probably somewhere in the GPT-2ish era. Surely read it somewhere on HN or Reddit.&lt;/p&gt;

&lt;p&gt;I think the first real examples I saw of actual AI-generated code were from Github Copilot as a VS Code extension. I&#39;d always been an IDE user, all the way back to the Visual C++ days. (yes yes I know some of you predate that considerably, same as folks who used Amigas and C64s predate my first 286 and DOS 3.3 usage. My story here.)&lt;/p&gt;

&lt;p&gt;IDE autocomplete is ancient tech. Whether it was VC++, Visual Studio C#, Eclipse and Java, or fine even you Vim/Emacs people with some custom plugin, we&#39;ve always been able to type &lt;code&gt;person.&lt;/code&gt; and see &lt;code&gt;firstName, lastName, age&lt;/code&gt; pop up in the autocomplete overlay. Simple and deterministic. Sometimes we rely on it too heavily, but no one can memorize all the available methods anyway.&lt;/p&gt;

&lt;p&gt;AI-powered &amp;quot;autocomplete&amp;quot;, though? That&#39;s... something different.&lt;/p&gt;

&lt;p&gt;I resisted at first. I didn&#39;t want a non-deterministic tool trying to offer &amp;quot;suggestions&amp;quot;. &lt;em&gt;I&lt;/em&gt; knew what I wanted to write. I didn&#39;t need some Statistical Word Generating Machine trying to somehow guess what I &lt;em&gt;might&lt;/em&gt; want to do next.&lt;/p&gt;

&lt;p&gt;My work journal says I finally gave in and decided to try Github Copilot in March 2023, and concluded: &amp;quot;It&#39;s... not awful? It&#39;s doing a decent job being a smarter Intellisense so far.&amp;quot;&lt;/p&gt;

&lt;p&gt;So I left it on. Got some use out of it. Two thirds of the time the suggestions were completely bogus, but at least it was limited to trying to suggest a couple lines of code at a time, maybe outlining a &lt;code&gt;for&lt;/code&gt; loop or something. Scoped. Readable. I could see the suggestions, I could ignore them, I only had to accept them if they actually &lt;em&gt;were&lt;/em&gt; what I was about to type in. Still under my control, my understanding.&lt;/p&gt;

&lt;p&gt;I do remember one incident where I was working on some perf optimizations for Reselect, and hijacking some of the unit test files to run perf tests. I hit Enter a couple times and paused... and it suddenly &amp;quot;suggested&amp;quot; an entire multi-paragraph comment about doing performance analysis and even referenced some repo that might not have existed yet, but was eerily relevant conceptually. That was kinda funny! ... and also scary.&lt;/p&gt;

&lt;h3 id=&#34;ominous-signs&#34;&gt;Ominous Signs&lt;/h3&gt;

&lt;p&gt;I started hearing about devs using this tech on a larger scale. Just repeatedly auto-accepting suggestions, or doing more. Seemed.... &lt;em&gt;wrong&lt;/em&gt;. It&#39;s non-deterministic. These things &lt;em&gt;hallucinate&lt;/em&gt;. Surely you can&#39;t rely on that for anything &lt;em&gt;real&lt;/em&gt;, right?&lt;/p&gt;

&lt;p&gt;I started seeing more and more evidence of AI-generated code and text popping up online. These frequently seemed to involve hallucinations. A couple incidents particularly stick out in my mind.&lt;/p&gt;

&lt;p&gt;In one case, a dev pinged me on Twitter saying that a link to my blog was producing 404. The URL was something akin to &lt;code&gt;https://blog.isquaredsoftware.com/YYYY/MM/blogged-answers-selectors-fetching/&lt;/code&gt;. Not quite that, but close enough. I checked, got a 404. Confused, I went to my blog repo, looked for that Markdown file, and it didn&#39;t exi..... waitaminute. I don&#39;t &lt;em&gt;remember&lt;/em&gt; ever having written a post with that kind of title. Where&#39;d they get that link? and sure enough, an LLM had utterly hallucinated a URL to my blog for &lt;em&gt;a post that did not exist&lt;/em&gt;. Gotten the URL format correct and everything. Completely wrong.&lt;/p&gt;

&lt;p&gt;Another time, a user asked in the Redux Discord channels about some Redux APIs, with code snippets... and those APIs also &lt;em&gt;did not exist&lt;/em&gt;. Asked, and sure enough, same thing. They asked an LLM, it gave them the snippet, they never checked and just believed the answers and then the suggested code was completely bogus.&lt;/p&gt;

&lt;p&gt;Small sample size, but examples of the larger pattern I was seeing. Clearly, LLMs could &lt;em&gt;not&lt;/em&gt; be trusted! Too many hallucinations.&lt;/p&gt;

&lt;p&gt;I think I even tried downloading a local LLM setup once or twice. Tried asking something about &amp;quot;Redux vs Flux&amp;quot;, took a very long time to generate tokens, and came up with a vaguely plausible sounding but completely incorrect answer paragraph.&lt;/p&gt;

&lt;p&gt;At this point every single indicator I had seen was telling me this technology simply could not be trusted. It&#39;s one thing to copy-paste some snippets off Stack Overflow and maybe the answer&#39;s wrong, but at least there it&#39;s a &lt;em&gt;person&lt;/em&gt; that wrote that. AI code would never reach any acceptable level of trustworthiness. It&#39;s non-deterministic! It hallucinates! There is just no possible way you can safely build maintainable systems on this kind of flawed foundation.&lt;/p&gt;

&lt;h2 id=&#34;part-2-fear-doom-and-depression&#34;&gt;Part 2: Fear, Doom, and Depression&lt;/h2&gt;

&lt;h3 id=&#34;the-pivot&#34;&gt;The Pivot&lt;/h3&gt;

&lt;p&gt;I had joined &lt;a href=&#34;https://replay.io&#34;&gt;Replay&lt;/a&gt; in spring 2022. Time travel debugging. It was the perfect fit. It matched everything I believed in in my career, every experience I had. Amazing team, brilliantly talented engineers. An impossible tool, already working. The hard part&#39;s done! We&#39;ve built time travel! We&#39;ve brought determinism to a non-deterministic world! A perfect product, blindingly obvious how useful it is. It&#39;ll save every web developer thousands of hours. I wish I&#39;d had this &lt;em&gt;years&lt;/em&gt; ago in my career. A codebase using React and Redux that I&#39;m already familiar with. No possible way this could go wrong. Won&#39;t be a rocket ship, but steady growth on the way and we&#39;ll succeed.&lt;/p&gt;

&lt;p&gt;We were wrong. &lt;em&gt;I&lt;/em&gt; was wrong.&lt;/p&gt;

&lt;p&gt;Turns out there&#39;s many aspects we never accounted for. Most devs are never taught how to debug. We learn it on the fly, by osmosis, as we go. No one approaches it scientifically. No one uses &lt;em&gt;existing&lt;/em&gt; graphical debugging tools like Chrome DevTools or VS Code&#39;s debugger. It&#39;s just spam some more console logs and reload the page. Trying to sell a more powerful graphical debugger just didn&#39;t work the way we assumed it would.&lt;/p&gt;

&lt;p&gt;I had spent all of 2023 getting to build amazing time-travel powered debugging tools. Our React and Redux DevTools integrations. &amp;quot;Jump to Code&amp;quot;, going from a click event to the React &lt;code&gt;onClick&lt;/code&gt; prop that handled it and pausing when it ran. I was a kid in a candy store, an entire toolbox of amazing time travel APIs at my fingertips. I was having a &lt;em&gt;blast&lt;/em&gt;. I was building incredible tools &lt;em&gt;now&lt;/em&gt;, but surely these were just the foundation for what we&#39;d get to build on top 10 years from now.&lt;/p&gt;

&lt;p&gt;But, turns out that just building the world&#39;s most amazing tech doesn&#39;t automatically bring in sales. We struggled. and in summer 2024, we pivoted.&lt;/p&gt;

&lt;p&gt;The pivot was a brutal blow. I never saw it coming. And not only were we throwing away the dream of time travel debugging, the dream that I&#39;d &lt;em&gt;believed&lt;/em&gt; in, the dream I wanted to spend the rest of my career building...&lt;/p&gt;

&lt;p&gt;we were pivoting to &lt;em&gt;AI&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In that moment I felt, quite literally and physically, like I&#39;d been punched in the gut.&lt;/p&gt;

&lt;p&gt;And I had the most &lt;em&gt;visceral&lt;/em&gt; gut reaction I can ever remember:&lt;/p&gt;

&lt;p&gt;&amp;quot;&lt;em&gt;HELL NO!&lt;/em&gt; I will &lt;em&gt;never&lt;/em&gt; work on &lt;em&gt;anything&lt;/em&gt; AI related!&amp;quot;&lt;/p&gt;

&lt;h3 id=&#34;the-wilderness&#34;&gt;The Wilderness&lt;/h3&gt;

&lt;p&gt;Post-pivot, Replay regrouped and tried to figure out what we could do. I busied myself working on our React analysis layer. Outside work, I spent a few months working on RTK Query&#39;s infinite query support.&lt;/p&gt;

&lt;p&gt;But at least those tasks were things I could do &lt;em&gt;by hand&lt;/em&gt;. With my own brain. &lt;em&gt;I&lt;/em&gt; dug through the ReactDOM artifacts and found the relevant functions to instrument. &lt;em&gt;I&lt;/em&gt; looked at the instrumented minified bundles and found the places where we were inserting callbacks the wrong way. &lt;em&gt;I&lt;/em&gt; went through the source for TanStack Query, Apollo, SWR, and built an understanding of infinite queries as a problem domain. &lt;em&gt;I&lt;/em&gt; took the contributed first draft implementation PR, tested it, worked out what pieces were missing, listed out the test cases we needed to handle. &lt;em&gt;I&lt;/em&gt; did the dozens of hours of grunt work to build the missing pieces, handle the edge cases, wrote the docs. &lt;em&gt;I&lt;/em&gt; shipped the new features.&lt;/p&gt;

&lt;p&gt;Me. My brain. My understanding.&lt;/p&gt;

&lt;p&gt;and it also kept me away from both &lt;em&gt;using&lt;/em&gt; AI to generate code, and from having to build &lt;em&gt;systems&lt;/em&gt; that wrapped AI. I didn&#39;t want to do &amp;quot;prompt engineering&amp;quot;. Didn&#39;t want to have to cajole an AI into &lt;em&gt;maybe&lt;/em&gt; producing valid output, or telling it &amp;quot;you&#39;re the world&#39;s greatest expert in $TOPIC&amp;quot;, or add &amp;quot;make no mistakes&amp;quot; to every instruction, or whatever stupid and ridiculous techniques of the week were getting thrown around on Twitter and HN. And I definitely didn&#39;t want to waste time writing AI infrastructure and plumbing. No SDKs, no API calls, &lt;em&gt;no AI app whatsoever&lt;/em&gt;.&lt;/p&gt;

&lt;h3 id=&#34;the-tidal-wave&#34;&gt;The Tidal Wave&lt;/h3&gt;

&lt;p&gt;But the onslaught of &amp;quot;AI!&amp;quot; everywhere was inescapable. And my reading habits didn&#39;t help.&lt;/p&gt;

&lt;p&gt;I know I&#39;m too addicted to social media. Lifelong information junkie. I &lt;em&gt;need&lt;/em&gt; to read. &lt;em&gt;Need&lt;/em&gt; to learn, to understand what&#39;s going on. I read anything that looks potentially relevant. I see technologies and concepts, label them, file them away in the back of my brain, and then months or years later I pattern-match and slap some relevant blocks together to build a solution that fits.&lt;/p&gt;

&lt;p&gt;And unfortunately that meant reading Twitter and HN. And every other article was about AI, LLMs, codegen, prompt engineering.&lt;/p&gt;

&lt;p&gt;By this time there was a constant drumbeat of articles insisting that &amp;quot;WRITING CODE WITH AI IS THE ONLY POSSIBLE FUTURE! YOU &lt;em&gt;MUST&lt;/em&gt; ADOPT THIS NOW! IF YOU AREN&#39;T LEARNING AND DOING THIS AND 10XING YOUR OUTPUT, YOU &lt;em&gt;WILL&lt;/em&gt; FALL BEHIND! EVEN IF YOU&#39;RE A SENIOR ENGINEER! YOU&#39;LL BE ECLIPSED BY JUNIORS! NO ONE WILL HIRE YOU! YOUR ENTIRE LIFE&#39;S WORK WILL BE A &lt;em&gt;WASTE&lt;/em&gt;! GET WITH THE PROGRAM &lt;em&gt;NOW&lt;/em&gt; OR YOU&#39;RE &lt;em&gt;DOOOOOOOMED&lt;/em&gt;!&amp;quot;&lt;/p&gt;

&lt;p&gt;Needless to say, this was &lt;em&gt;not&lt;/em&gt; good for my psyche.&lt;/p&gt;

&lt;p&gt;And it was worse when it came from authors who I could tell just from reading &lt;em&gt;were&lt;/em&gt; experienced engineers. It&#39;s one thing to look at a random Medium post and dismiss it three paragraphs in with &amp;quot;oh that person clearly has no clue what they&#39;re talking about&amp;quot;. But seeing apparently clueful senior engineers drinking the koolaid and screaming &amp;quot;ADAPT AND USE AI &lt;em&gt;OR DIE&lt;/em&gt;!&amp;quot; just made the spiral worse.&lt;/p&gt;

&lt;p&gt;I read plenty of counter-arguments. I bookmarked numerous posts from other senior engineers who, like myself, mourned the loss of their craft. That our whole way of life was being shredded, ripped away. I read them, saved them, felt the loss with my whole heart.&lt;/p&gt;

&lt;p&gt;And the drumbeats and onslaught just kept coming.&lt;/p&gt;

&lt;h3 id=&#34;p-doom&#34;&gt;P(doom)&lt;/h3&gt;

&lt;p&gt;By early 2025 I could feel this toxic deluge of info poisoning the thoughts in my brain. I had half-formed thoughts swirling around in the back of my head. I knew they were there. I knew what they were about. I just hadn&#39;t fully articulated them.&lt;/p&gt;

&lt;p&gt;And there was a lot of other things going on as well. Family concerns. Questions about work. Politics. The General State Of The World (&lt;em&gt;gestures wildly&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;And in March 2025, while chatting with a friend, I finally wrote out a whole bunch of bullet points describing my concerns about AI and what it was doing to the world and the software industry and my career.&lt;/p&gt;

&lt;p&gt;And then I stopped. I re-read what I&#39;d just written. Horrified.&lt;/p&gt;

&lt;p&gt;I feared what AI would do to the quality of the code we were collectively writing. How can you trust the output of a tool that randomly hallucinates? How can you build an understanding of a system when everyone&#39;s generating code, and no one&#39;s reading it? Software&#39;s already held together with duct tape and baling wire. Our shiny desktop apps and SAAS sites are badly architected and bug-ridden even in the best run team and project. If we use AI, won&#39;t it all fall apart and collapse? And am I going to have to spend all my time carefully scrutinizing every line of code just to make sure hallucinations and logic errors don&#39;t sneak through?&lt;/p&gt;

&lt;p&gt;I built my career on craftsmanship, on understanding, on careful work. I always felt like I never quite lived up to the ideals, that my code was always more slapped-together than it &lt;em&gt;ought&lt;/em&gt; to be. But at least I&#39;d taken the time to make it run, to figure out the solution, and to find the rough spots and sand them down. AI couldn&#39;t possibly match that understanding.&lt;/p&gt;

&lt;p&gt;I definitely didn&#39;t want to &lt;em&gt;use&lt;/em&gt; AI to write code. I &lt;em&gt;loved programming&lt;/em&gt;! That&#39;s the fun part! I&#39;d already switched back from being a team tech lead to just being an IC, because I had been reduced to only 50% coding time from being stuck in meetings, and that was &lt;em&gt;awful&lt;/em&gt;. I wanted to code! I feared using AI would turn me into some kind of weird PM / code reviewer hybrid, that all my time would be spent mindlessly clicking &amp;quot;LGTM&amp;quot; on my agent&#39;s output, that I wouldn&#39;t get to use my brain, that I wouldn&#39;t &lt;em&gt;learn&lt;/em&gt; anything, that my skills would atrophy. If I wanted to spend all my time managing I&#39;d have become a manager! Don&#39;t take away the task that I &lt;em&gt;love doing&lt;/em&gt;!&lt;/p&gt;

&lt;p&gt;I still didn&#39;t want to work on any kind of AI-related project. If I moved on and looked for a new job, would I even be able to find something that &lt;em&gt;wasn&#39;t&lt;/em&gt; AI? Every single opening and &amp;quot;we&#39;re hiring&amp;quot; post I saw was AI, AI, AI. I didn&#39;t think I could stomach &lt;em&gt;talking&lt;/em&gt; to a company that did AI-based products, much less deal with expectations for &lt;em&gt;using&lt;/em&gt; AI to write code.&lt;/p&gt;

&lt;p&gt;And what happens to the thousands of hours of work I&#39;ve put in building my craft? So many other fields of work were radically transformed by technology. Entire fields and industries changed overnight. Typists and secretaries disappeared with the PC. Lots of other examples. Was my own career about to become obsoleted? What does that mean for this industry? What about &lt;em&gt;my&lt;/em&gt; future jobs?&lt;/p&gt;

&lt;p&gt;And I feared for the rest of the industry as a whole. I had so many unique opportunities I was given in my career, from mentors and people who believed in me. I was given those opportunities because I&#39;d already demonstrated my efforts and skills, and was able to take advantage of them because I put in the work. Would AI destroy the pathway for juniors to build a career? Would it prevent them from even being able to build the core skills they &lt;em&gt;actually&lt;/em&gt; needed? Thinking, understanding, learning, reading code, building that mental model of a system.&lt;/p&gt;

&lt;p&gt;And then even further, what happens to our entire society? We&#39;ve seen ripple effects from everyone having phones at all times, social media overloading our brains with context collapse, teens sliding into depression from electronic bullying, students no longer learning to think and just throwing assignments into ChatGPT. What&#39;s the long-term prognosis of this on our whole &lt;em&gt;world&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;I wasn&#39;t worried about Skynet, or AGI, or gray goo wiping out humanity. I &lt;em&gt;was&lt;/em&gt; worried about AI&#39;s effects on society, industry, and my own career.&lt;/p&gt;

&lt;p&gt;And something in my brain snapped.&lt;/p&gt;

&lt;h3 id=&#34;depression&#34;&gt;Depression&lt;/h3&gt;

&lt;p&gt;I am a very mentally stable person. It&#39;s kind of ironic to write that. 3 years ago I would have written it and meant that there was &lt;em&gt;nothing&lt;/em&gt; wrong with me, at all, 100% completely perfectly mentally healthy. Then I had an &amp;quot;emotional awakening&amp;quot; thanks to a good friend asking pointed questions, realized I &lt;em&gt;did&lt;/em&gt; have a lot to work on, and dove head-first into therapy. It&#39;s been wonderful. I&#39;ve spent a massive amount of effort understanding myself, my feelings, my thoughts, my personal quirks, aspects of my brain and personality that caused me problems, building better relationships with those around me. And I&#39;m a much healthier and happier person now than I was earlier.&lt;/p&gt;

&lt;p&gt;But even before that, I&#39;ve always had a very stable emotional baseline. On a +-10 scale, I&#39;m generally 0 to +3 maybe? Very hard to get me upset. I snap back to a baseline &amp;quot;yup, things are fine&amp;quot; quickly. Between realist and optimist outlook. Never had to deal with &amp;quot;true&amp;quot; mental health issues.&lt;/p&gt;

&lt;p&gt;But staring at those bullet points, I suddenly questioned how I was doing. I remember explicitly thinking &amp;quot;Wait. I&#39;ve been &lt;em&gt;saying&lt;/em&gt; &#39;I&#39;m okay, there&#39;s just a lot going on around me right now&#39;. But... &lt;em&gt;am&lt;/em&gt; I &#39;okay&#39;? Have I been fooling myself? And... &lt;em&gt;oh&lt;/em&gt;. I&#39;m also dealing with family concerns, and other stuff going on in the world... oh no. Maybe I&#39;m &lt;em&gt;not&lt;/em&gt; &#39;okay&#39; after all.&amp;quot;&lt;/p&gt;

&lt;p&gt;And I suddenly found myself in this bizarre mini-depressive state. Something I&#39;ve &lt;em&gt;never&lt;/em&gt; experienced before.&lt;/p&gt;

&lt;p&gt;I don&#39;t want to make comparisons to other people&#39;s mental health struggles. I can only speak for myself here. For me, it was like my emotional outlook on life had suddenly gotten dropped to... like a -3 on that +-10 scale? I was functional. I wasn&#39;t curled up in a ball. But instead of going around just focused on life and work, or being excited about things, I was telling myself &amp;quot;I&#39;m.... &lt;em&gt;struggling&lt;/em&gt; right now. I&#39;m &lt;em&gt;trying&lt;/em&gt; to hang in there. Things are not good. They&#39;re &lt;em&gt;bad&lt;/em&gt;. It&#39;s all out of my control. We&#39;re all careening out of control. I&#39;m just trying to make it through atm. Trying to manage.&amp;quot;&lt;/p&gt;

&lt;p&gt;It was &lt;em&gt;not&lt;/em&gt; fun.&lt;/p&gt;

&lt;p&gt;I know many folks deal with much worse. All I can say is this was something I&#39;d never experienced before. And it was essentially all due to these fears about AI.&lt;/p&gt;

&lt;p&gt;And nothing I could do could change the fate of the world.&lt;/p&gt;

&lt;h2 id=&#34;part-3-reverse-engineering&#34;&gt;Part 3: Reverse Engineering&lt;/h2&gt;

&lt;h3 id=&#34;miami-sunshine&#34;&gt;Miami Sunshine&lt;/h3&gt;

&lt;p&gt;React Miami has always been one of my favorite conferences. Michelle, Rebecca, and Gabe have done an amazing job putting on a conf that is both a non-stop party, an incredible social event, and a great source of technical info.&lt;/p&gt;

&lt;p&gt;Over the last several years, confs have become my own major social outlet. I&#39;ve met so many wonderful people. I get to see other amazing speakers, teachers, and maintainers in the React ecosystem. I&#39;ve built lifelong friendships. I get to meet tons of people from so many industries and walks of life. I get to travel the world, see places I&#39;ve never been, have deep conversations about tech and life and so much more. I look forward to every conf I go to.&lt;/p&gt;

&lt;p&gt;And in early April 2025, I feared going to React Miami.&lt;/p&gt;

&lt;p&gt;I&#39;d just burned a ton of emotional energy early in the year with the effort to kill Create React App. There&#39;d been numerous intense debates over how to handle that and how to update the React docs. I&#39;d had public and private discussions, given feedback, posted PRs, written and thrown away posts. I was already mentally exhausted from that, &lt;em&gt;before&lt;/em&gt; this AI depression hit.&lt;/p&gt;

&lt;p&gt;Now that I was wandering around in a &amp;quot;I&#39;m just struggling to survive&amp;quot; mental daze, I didn&#39;t know if I&#39;d even &lt;em&gt;enjoy&lt;/em&gt; myself at React Miami. Had I burned bridges? Would I have any brain capacity left to think about the talks? Would I have any social energy to be able to be around people? I was genuinely questioning if I should even go.&lt;/p&gt;

&lt;p&gt;I went.&lt;/p&gt;

&lt;p&gt;And I&#39;m thankful I did :)&lt;/p&gt;

&lt;p&gt;React Miami Day 1 was pretty good. Lot of discussions and hangout time. Definitely felt low energy and &amp;quot;lousy&amp;quot;. But I&#39;d socialized, been around people, gotten through the day.&lt;/p&gt;

&lt;p&gt;Day 2, though. Wow.&lt;/p&gt;

&lt;p&gt;I&#39;d gotten enough sleep to have some energy. And Day 2 was nothing but non-stop conversations. So many great conversations.&lt;/p&gt;

&lt;p&gt;I&#39;ve learned to manage my social battery over the years. Usually by 8:30-9:00 I know it&#39;s hitting 0% and I need to go back to my room and chill. This time, I was talking until almost midnight. I was worn out, but it &lt;em&gt;felt good&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I got back to my room and was journaling. And as I was journaling that night, I realized I was tired of being stuck in this semi-depressive &amp;quot;struggling / doom and gloom&amp;quot; state. It sucked! It wasn&#39;t fun! I noted I wasn&#39;t making any forward progress, that I was just going in circles... and I &lt;em&gt;hate&lt;/em&gt; going in circles for anything. Stop &lt;em&gt;talking&lt;/em&gt; about Doing The Thing. Just &lt;em&gt;Do The Thing&lt;/em&gt; and get something done!&lt;/p&gt;

&lt;p&gt;So I decided I was done with whatever the hell this was. Let&#39;s move on.&lt;/p&gt;

&lt;p&gt;And somehow, with essentially a snap of my fingers, I snapped myself out of that semi-depressive mindset.&lt;/p&gt;

&lt;h3 id=&#34;flipping-the-bit&#34;&gt;Flipping The Bit&lt;/h3&gt;

&lt;p&gt;I honestly have no answer for this! I can&#39;t tell you how I did it. I&#39;ve told friends and they&#39;ve said &amp;quot;how &lt;em&gt;did&lt;/em&gt; you do that?&amp;quot; and I can&#39;t explain it.&lt;/p&gt;

&lt;p&gt;It&#39;s some combination of having done therapy, realizing I &lt;em&gt;could&lt;/em&gt; change my attitudes and how I feel about things, not wanting to be permanently stuck in a negative situation, and being ready to get back to moving ahead with life.&lt;/p&gt;

&lt;p&gt;I also realized that yes, there&#39;s an absurd number of things that are out of my control. Weather, politics, tech advancement, society, even many aspects of my job. If I spend all my time thinking about things I can&#39;t control, then no, of &lt;em&gt;course&lt;/em&gt; I&#39;m going to be worried, but also I literally &lt;em&gt;can&#39;t do anything about it&lt;/em&gt;! So, why not refocus back on the things I &lt;em&gt;can&lt;/em&gt; control. My brain, my life, my family, my friends, my hobbies, my career.&lt;/p&gt;

&lt;p&gt;And somehow I just hit the reset button and went right back to my standard emotional baseline and have been there ever since :)&lt;/p&gt;

&lt;p&gt;This didn&#39;t change any of the concerns I had. AI was still destroying the software industry. The world was still chaotic. I still didn&#39;t want to work on any AI project. And I sure absolutely &lt;em&gt;would not ever&lt;/em&gt; use AI to write code for me. Period. Red line. Uncrossable. Ain&#39;t gonna happen.&lt;/p&gt;

&lt;p&gt;I just didn&#39;t want to spend all my time walking around panicking about those things and the impending end of the world. So I didn&#39;t.&lt;/p&gt;

&lt;h2 id=&#34;part-4-taming-the-beast&#34;&gt;Part 4: Taming the Beast&lt;/h2&gt;

&lt;h3 id=&#34;architectural-research&#34;&gt;Architectural Research&lt;/h3&gt;

&lt;p&gt;I&#39;d spent the first few months of 2025 working on Replay&#39;s sophisticated React analysis instrumentation layer, enabling it to successfully instrument React 19 and extract timing data. Around May, I was tasked with refactoring a complex portion of our backend, which managed a tree of forked processes for executing and replaying the program being debugged. I had a decent grasp of the &lt;em&gt;rough&lt;/em&gt; shape of how our time travel processing worked, and had touched &lt;em&gt;some&lt;/em&gt; parts of the system, but not this section.&lt;/p&gt;

&lt;p&gt;The general task was to replace a bunch of module-scoped variables that made this a singleton with equivalent classes so that we could instantiate multiple analysis processes in parallel. Doable, but you definitely need to, yes, &lt;em&gt;understand the system&lt;/em&gt; to make the changes. So that would take time.&lt;/p&gt;

&lt;p&gt;I remember a teammate had actually tried to do some of this refactor via AI and put up a draft PR that was broken. I skimmed it, and saw that a large chunk of the actual code changes were really just threading OpenTelemetry &lt;code&gt;cx&lt;/code&gt; context objects through one function after another to enable proper traces. That was clearly a very mechanical set of refactoring. Maybe it was something I could just start doing myself, mindlessly, and start to learn this section of the codebase.&lt;/p&gt;

&lt;p&gt;I started doing a lot of that context refactoring myself. And that did teach me a lot about the files and the methods and their connections. More importantly, it got my brain woken up and engaged in the &amp;quot;writing code and focused&amp;quot; part of the work.&lt;/p&gt;

&lt;p&gt;I don&#39;t remember exactly when this happened, but somewhere around here, I took a big mental step:&lt;/p&gt;

&lt;p&gt;I decided I could at least &lt;em&gt;try&lt;/em&gt; using AI, to &lt;em&gt;explain&lt;/em&gt; some of this code to me.&lt;/p&gt;

&lt;p&gt;I was very cautious about it. I didn&#39;t want to install a CLI/TUI agent. I wanted to stay in VS Code. I&#39;d seen the KiloCode extension mentioned a few times on HN by its founder, so I decided to give it a shot.&lt;/p&gt;

&lt;p&gt;So I installed KiloCode (probably Sonnet 3.5 or 4.0 at the time), pointed it at our codebase, and asked it to generate some architectural walkthroughs of this section.&lt;/p&gt;

&lt;p&gt;.... and it did? and... they were actually kinda useful? and didn&#39;t have &lt;em&gt;blatantly&lt;/em&gt; obvious hallucinations? and they actually helped build my own mental diagram of how the pieces fit together?&lt;/p&gt;

&lt;p&gt;Huh.&lt;/p&gt;

&lt;p&gt;Okay. I guess this is something I could keep using. But for explanations only. I still gotta write the code. Just me. Hard red line that I will &lt;em&gt;never&lt;/em&gt; cross.&lt;/p&gt;

&lt;h3 id=&#34;mind-blown&#34;&gt;Mind. Blown.&lt;/h3&gt;

&lt;p&gt;August 26, 2025. Tuesday afternoon.&lt;/p&gt;

&lt;p&gt;I&#39;d originally planned to spend time with family, but plans got canceled. Could have gotten day job work done, but I was in a mood to do some Redux maintenance.&lt;/p&gt;

&lt;p&gt;I was trying to optimize some RTK Query internals. Unfortunately I also realized that we didn&#39;t have any &lt;em&gt;tests&lt;/em&gt; that covered the specific bits of logic I was fiddling with. Tests are important, especially for libraries. I knew I &lt;em&gt;needed&lt;/em&gt; to add tests before I made changes, so I could capture the existing behavior.&lt;/p&gt;

&lt;p&gt;But my brain was tired. Tests are code. I didn&#39;t &lt;em&gt;wanna&lt;/em&gt; write tests. That was more effort.&lt;/p&gt;

&lt;p&gt;And so my brain said &amp;quot;uh... what if we had KiloCode + Claude write those tests for us?&amp;quot;&lt;/p&gt;

&lt;p&gt;I pulled up KiloCode. I described the section of the RTK code I was working on. I said &amp;quot;I need a couple unit tests that cover these cases&amp;quot;. I dictated the logic, the setup, the conditions, and what file they should go into.&lt;/p&gt;

&lt;p&gt;And for the first time, I said &amp;quot;Go write those&amp;quot;, and hit Enter.&lt;/p&gt;

&lt;p&gt;.......... and a few seconds later it spit out 75 lines of test code.&lt;/p&gt;

&lt;p&gt;And I read those tests. Carefully. Every line. Every condition. It was exactly what I asked for.&lt;/p&gt;

&lt;p&gt;And I held my face in my hands and &lt;em&gt;wept&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Okay okay it wasn&#39;t &lt;em&gt;quite&lt;/em&gt; that bad :) But I was, truly and genuinely, shocked and mind-blown.&lt;/p&gt;

&lt;p&gt;Absolutely I had just crossed the line that I swore I&#39;d never cross. I&#39;d used an AI to generate code for me! I even wrote in my journal that &amp;quot;I feel a lot of concern over blurring my own ethical boundaries. but also I just got a bunch of work done I wouldn&#39;t have had the brainpower to do today otherwise. and making progress on RTK maintenance &lt;em&gt;is&lt;/em&gt; good for my psyche.&amp;quot;&lt;/p&gt;

&lt;p&gt;Rubicon. Crossed.&lt;/p&gt;

&lt;p&gt;And then it got worse? better? shocking-er? the next two days.&lt;/p&gt;

&lt;p&gt;Our backend depended on &lt;code&gt;node-lz4&lt;/code&gt; to compress artifacts for S3. Unfortunately that lib was long out of date and unmaintained, and also the only thing keeping us from upgrading to newer Node versions. I&#39;d repeatedly looked for alternatives, always found a rust-based &lt;code&gt;lz4-napi&lt;/code&gt; package, but &lt;code&gt;lz4-napi&lt;/code&gt; didn&#39;t have Node streaming support and we relied on that. Repeated this cycle every few months.&lt;/p&gt;

&lt;p&gt;Wednesday I looked at it and said: &amp;quot;could.... could &lt;em&gt;AI&lt;/em&gt; implement that streaming feature?&amp;quot;&lt;/p&gt;

&lt;p&gt;I cloned &lt;code&gt;node-lz4&lt;/code&gt; and &lt;code&gt;lz4-napi&lt;/code&gt;. Pointed KiloCode + Claude at the two repos. Fed in the previous issues and discussion. Asked. And it claimed &amp;quot;sure, that&#39;s doable&amp;quot;.&lt;/p&gt;

&lt;p&gt;I made it write out some kind of plan, starting with upgrading some Rust deps, and then building the Rust streaming internals before doing the JS wrappers.&lt;/p&gt;

&lt;p&gt;I hit Enter.&lt;/p&gt;

&lt;p&gt;......... aaaaand I watched with my jaw dropped open as it cranked away on upgrading Rust deps, built, tested, and then started cranking out the streaming code.&lt;/p&gt;

&lt;p&gt;you&#39;ve &lt;em&gt;got&lt;/em&gt; to be kidding me.&lt;/p&gt;

&lt;p&gt;I walked KiloCode through doing some cross-compat tests and other bits. and within a few hours, it had seemingly built the entire missing feature I&#39;d been waiting for. Unreal.&lt;/p&gt;

&lt;p&gt;It would later turn out the &amp;quot;streaming&amp;quot; part didn&#39;t work right, and the &lt;code&gt;lz4-napi&lt;/code&gt; maintainer had to turn down the PR. Totally fair.&lt;/p&gt;

&lt;p&gt;But... I didn&#39;t even &lt;em&gt;know&lt;/em&gt; Rust! I couldn&#39;t have even &lt;em&gt;tried&lt;/em&gt; to do this myself! And here was a (seemingly) working implementation! Just by prompting!&lt;/p&gt;

&lt;p&gt;And sure, I&#39;d &lt;em&gt;read&lt;/em&gt; dozens of articles about people running umpteen agents, and having agents do all this work for you automatically. I &lt;em&gt;thought&lt;/em&gt; I understood the concept. I thought I got it.&lt;/p&gt;

&lt;p&gt;But &lt;em&gt;seeing&lt;/em&gt; an agent just happily talking its way through making dozens of code edits, one after the other? Wow.&lt;/p&gt;

&lt;p&gt;Thursday. I had to add a new lint rule to our own internal custom TS-based linting system to check for invalid &lt;code&gt;data-testid&lt;/code&gt; uses. I understand all these concepts. ASTs, nodes, parsers. TS program loading, visitors. Babel traversals, &lt;code&gt;ts-morph&lt;/code&gt;. I know these ideas already. Okay, fine, I haven&#39;t worked on &lt;em&gt;our&lt;/em&gt; custom linting system, so I don&#39;t know the exact nuances of the AST libs we need to use here, but this is clearly something I &lt;em&gt;can&lt;/em&gt; do, I just gotta take the time to figure out what moving pieces we have available and how they fit together.&lt;/p&gt;

&lt;p&gt;...... or could I have AI do it for me?&lt;/p&gt;

&lt;p&gt;So I had KiloCode generate an architectural doc describing our custom linting setup: where it lived, moving pieces.&lt;/p&gt;

&lt;p&gt;Then I had it generate an empty lint rule skeleton and integrate it into the existing system.&lt;/p&gt;

&lt;p&gt;Then I had it add some checks for JSX syntax patterns and set up some tests. Then I had it add checks for some known internal component types, and some more edge cases and tests.&lt;/p&gt;

&lt;p&gt;And. It. &lt;em&gt;Worked&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Drat&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I&#39;d gotten more done in an hour and a half, with AI, then I could have possibly accomplished by myself. I&#39;d &lt;em&gt;maybe&lt;/em&gt; have found the relevant files and set up the initial scaffolding. Instead here I had an actually working first pass on the lint rule, with tests.&lt;/p&gt;

&lt;p&gt;Mind. Blown.&lt;/p&gt;

&lt;p&gt;So I regret to inform you that this AI code gen thing is, apparently, &lt;em&gt;useful&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Now&lt;/em&gt; what am I supposed to do with my entire worldview?&lt;/p&gt;

&lt;h2 id=&#34;part-5-diving-in&#34;&gt;Part 5: Diving In&lt;/h2&gt;

&lt;h3 id=&#34;ramping-up&#34;&gt;Ramping Up&lt;/h3&gt;

&lt;p&gt;Programmers love to build systems and tools. We build systems to build systems to build systems. Ask a programmer to write a blog post, and they&#39;ll spent a month building a blogging CMS from scratch before they write the first article. We customize our shell aliases, our IDEs, our toolsets, our workflows.&lt;/p&gt;

&lt;p&gt;I&#39;ve been down that rabbit hole. I know that feeling. I didn&#39;t want to go down that rabbit hole &lt;em&gt;here&lt;/em&gt;. Not yet.&lt;/p&gt;

&lt;p&gt;This blog is still on the same version of Hugo 0.17 that I chose when I started this blog in October 2016. It&#39;s simple. It works. It&#39;s fast. I have entirely too many demands on my time, too many things on my todo list, more things than I will ever get done. The last thing I need is to waste hours and days customizing my blog setup. So I&#39;ve tweaked the templates over the years, but intentionally never let myself get sucked into changing the build setup.&lt;/p&gt;

&lt;p&gt;I tried to apply that principle here. I was seeing dozens of &amp;quot;HOW TO AWESOMEMAXX YOUR AGENT BY FOLLOWING THESE 11 SUPERPROMPTS AND L33T SKILLZ!&amp;quot; articles every day. I was even bookmarking some of them! But I held off on actually &lt;em&gt;changing&lt;/em&gt; anything.&lt;/p&gt;

&lt;p&gt;I stayed with KiloCode and Claude (which I&#39;ll abbreviate as &amp;quot;KCC&amp;quot;). I did not try to mega-optimize my workflow. I allowed it to be inefficient. I needed to &lt;em&gt;discover&lt;/em&gt; how &lt;em&gt;I&lt;/em&gt; wanted to use AI.&lt;/p&gt;

&lt;h3 id=&#34;immer&#34;&gt;Immer&lt;/h3&gt;

&lt;p&gt;By pure coincidence, early September is when I started trying to optimize performance for the Immer immutable update library.&lt;/p&gt;

&lt;p&gt;And again I regret to inform you that AI was &lt;em&gt;really&lt;/em&gt; helpful here.&lt;/p&gt;

&lt;p&gt;I spent over 110 hours of my own free time in Sep-Oct working on Immer perf, and I used AI extensively through that process.&lt;/p&gt;

&lt;p&gt;I&#39;d used Immer since it came out. My first RTK prototypes were built around Immer since day 1. I&#39;m even quoted in the docs saying how much I love it. I knew the principles of how it worked. I&#39;d &lt;em&gt;glanced&lt;/em&gt; at the code once or twice. I definitely didn&#39;t &lt;em&gt;understand&lt;/em&gt; the code, at all.&lt;/p&gt;

&lt;p&gt;I downloaded the repos for Immer, Mutative, Limu, and Structura. I had KCC scan the READMEs and documentation and write up summaries describing what each library &lt;em&gt;claimed&lt;/em&gt; it was good and and how the alternatives compared themselves to Immer. I had it analyze the internal architecture of each library and write architecture docs describing implementation details, and highlighting places where the alternates took different approaches.&lt;/p&gt;

&lt;p&gt;I knew how to do perf profiling, but I&#39;d already had previous issues trying to find good ways to get properly sourcemapped perf traces for Node scripts. After figuring out I couldn&#39;t just have my perf benchmarks script import artifacts directly due to &lt;code&gt;process.env.NODE_ENV&lt;/code&gt; skewing results, I had to pre-bundle my benchmark script, but that made it hard to read results. KiloCode generated scripts for me that would post-process my perf traces and re-combine with sourcemaps.&lt;/p&gt;

&lt;p&gt;Those initial scripts at least told me which functions were hottest. I pointed KCC at those functions and it identified low-hanging fruit that could be optimized: some simple cachine, some bailouts.&lt;/p&gt;

&lt;p&gt;My next big task was porting Mutative&#39;s &amp;quot;notification callback&amp;quot; cleanup approach to Immer to replace its recursive finalization logic. I had KCC try that. It failed, three separate times. Just got lost in the changes. So I did it myself. By now I&#39;d at least started to internalize the structure and logic of Immer&#39;s codebase, so I was gaining understanding of the code.&lt;/p&gt;

&lt;p&gt;I got the notification architecture port changes in place, but a large chunk of the unit tests were failing. And here I did something else I had sworn I wouldn&#39;t ever do:&lt;/p&gt;

&lt;p&gt;I turned my brain off.&lt;/p&gt;

&lt;p&gt;I had KCC add a few dozen log lines to Immer&#39;s internals. Then I&#39;d run one test at a time, copy 500 lines of log spew from the console, paste into KCC, and beg &amp;quot;tell me what went wrong here and how do we fix it&amp;quot;.&lt;/p&gt;

&lt;p&gt;Frankly it went against everything I&#39;d always believed in! But this was also in the middle of a bunch of conference travel. And I just wanted to make forward progress, and get to the point where the tests &lt;em&gt;passed&lt;/em&gt;, and then I could see if this architectural change actually improved performance or not.&lt;/p&gt;

&lt;p&gt;So I did. And eventually the tests passed. And it worked! Not as big a perf improvement as I&#39;d hoped, but meaningful.&lt;/p&gt;

&lt;p&gt;And so I turned my brain back on. I looked at the outstanding diffs from the KCC fixes. And I either traced through to understand what the point was for that change, or in some cases, asked KCC to explain the rationale to me. I filled in the gaps in my understanding, completed my mental model of the system.&lt;/p&gt;

&lt;p&gt;After cleaning up a bunch of debug code, I moved on to analyzing why proxied array methods were horribly slow. Turns out even a &lt;code&gt;draft.filter()&lt;/code&gt; requires iterating and that hits all the &lt;code&gt;get&lt;/code&gt; traps, creating new proxies and requiring cleanup even if all you did was read from them. KCC helped port some of the array / patch generation logic from Mutative. It did get stuck a few times, did hallucinate a few fixes. I kept redirecting it, kept it on track, and eventually we got that working too.&lt;/p&gt;

&lt;p&gt;I filed the Immer PRs. Michel Weststrate released them. AI was instrumental in helping me do that.&lt;/p&gt;

&lt;p&gt;By the time I was done, I &lt;em&gt;had&lt;/em&gt; built a full understanding of Immer&#39;s codebase. I&#39;d say I&#39;m probably the second best expert on Immer&#39;s architecture and functionality, after Michel (and in some ways better now that I pushed all those changes).&lt;/p&gt;

&lt;h3 id=&#34;nerd-sniped&#34;&gt;Nerd-Sniped&lt;/h3&gt;

&lt;p&gt;During 2025, Replay was working on Replay Builder, an AI-powered app builder. I&#39;d looked at some of the RTK code we were generating, and it wasn&#39;t good :) I remember one app that had five separate data fetching files, with five separate patterns for managing the requests. There shouldn&#39;t have been &lt;em&gt;any&lt;/em&gt; of that, because it all should have been using RTK Query for the data fetching :)&lt;/p&gt;

&lt;p&gt;So I looked at that, and thought &amp;quot;wait, I can make it write better RTK code.&amp;quot;&lt;/p&gt;

&lt;p&gt;And I nerd-sniped myself &lt;em&gt;hard&lt;/em&gt; :)&lt;/p&gt;

&lt;p&gt;I spent the next few months building out an entire 100% deterministic custom codegen system. DB tables -&amp;gt; Hono routes -&amp;gt; RTKQ endpoints. Fully type-safe and comprehensive. Modified a couple example apps to prove out the patterns we needed. Built the codegen system. Updated the prebuilt blocks used by the app builder. And I did all that work with AI. Absolutely would have taken 3-5x as much time if I&#39;d had to do it by hand.&lt;/p&gt;

&lt;p&gt;But, uh... at some point you have to hook this up to the LLM so it knows how to use the new system.&lt;/p&gt;

&lt;p&gt;And I had previously sworn that I would &lt;em&gt;never&lt;/em&gt;, ever, spend time working on anything like &amp;quot;prompt engineering&amp;quot;. Or &amp;quot;AI SDK plumbing&amp;quot;.&lt;/p&gt;

&lt;p&gt;Then again, I&#39;d also sworn I would never use AI to generate code :) and here I was now using AI, so clearly &lt;em&gt;that&lt;/em&gt; line had vanished.&lt;/p&gt;

&lt;p&gt;So yeah, by the time I got around to the last phase of the project, I &lt;em&gt;was&lt;/em&gt; actually excited about hooking up the codegen system to the actual LLM. Updating the prompts, getting the tooling right. I wanted to see it all work together.&lt;/p&gt;

&lt;p&gt;I guess I just needed the right motivation, and a concrete example that wasn&#39;t abstract and wasn&#39;t something I feared.&lt;/p&gt;

&lt;h3 id=&#34;self-reflection&#34;&gt;Self-Reflection&lt;/h3&gt;

&lt;p&gt;I have a strong need to keep records about my life and what&#39;s going on. I&#39;ve journaled a lot over the years. Kept a daily work journal for over a decade. Lots of personal journaling the last few years. Blogging. Various other communications.&lt;/p&gt;

&lt;p&gt;In early December I was going back to re-read some of my old work journal entries to remind myself about some earlier projects. Got the idea that I could use LLMs to help auto-summarize some of the entries to roll up details on what I worked on and accomplished. That turned into a larger project. Had it generate some vertical summaries of things I worked on, growth as an engineer, where I succeeded, where I struggled.&lt;/p&gt;

&lt;p&gt;And then I had it pull together some &amp;quot;insights about myself&amp;quot;. And &lt;em&gt;that&lt;/em&gt; was a &lt;em&gt;fascinating&lt;/em&gt; document.&lt;/p&gt;

&lt;p&gt;I&#39;ve read plenty of articles about AI psychosis. People going crazy, thinking they&#39;ve unlocked the Great Secrets of the Universe. I value my mind. I refuse to fall into that trap.&lt;/p&gt;

&lt;p&gt;LLMs are, hand-waving, Statistical Word Generating Machines. I know, I know, that&#39;s a drastic over-simplification, the tech is far past that, I get it. My post. Work with me here.&lt;/p&gt;

&lt;p&gt;An LLM has no soul. It&#39;s not a person. No matter how many pronouns or personalities or &lt;code&gt;SOUL.md&lt;/code&gt; files you give it, &amp;quot;it&amp;quot; isn&#39;t actually intelligent. A set of words generated by an LLM carries no thought, no intent, no &lt;em&gt;purpose&lt;/em&gt; behind it. We attribute intelligence where there isn&#39;t any.&lt;/p&gt;

&lt;p&gt;And yet. Sometimes we look up, and we see a cloud, or the stars, and the shape has enough recognition that it means something to us.&lt;/p&gt;

&lt;p&gt;And so an LLM generated a bunch of words, about me. Who I am. How I think. My struggles. My quirks. My flaws. My strengths.&lt;/p&gt;

&lt;p&gt;And sometimes just seeing recognition and words &lt;em&gt;about&lt;/em&gt; ourselves, from outside our own brain, helps us realize something about who we are.&lt;/p&gt;

&lt;p&gt;This doc had a lot of very personal insights about myself. The specifics are important, and they&#39;re private. But with some of the ways I&#39;ve grown, and challenges I&#39;ve faced... I actually needed to read those. And yeah, I was bawling that night :)&lt;/p&gt;

&lt;p&gt;Not gonna claim this works for everyone, or even that it&#39;s a good idea. But yeah, throwing a bunch of my writing into a blender and pulling out summaries and insights &lt;em&gt;was&lt;/em&gt; useful for me.&lt;/p&gt;

&lt;h2 id=&#34;part-6-liftoff&#34;&gt;Part 6: Liftoff&lt;/h2&gt;

&lt;h3 id=&#34;trust-factor&#34;&gt;Trust Factor&lt;/h3&gt;

&lt;p&gt;You know the step change that happened in late 2025. Opus 4.5 was really the turning point. Even Sonnet 4.5 was a distinct improvement over earlier models.&lt;/p&gt;

&lt;p&gt;I still very carefully drove all the sessions (and I still do today). But more and more, the code I saw getting generated was... well, &lt;em&gt;valid&lt;/em&gt; at least. Maybe not always &lt;em&gt;good&lt;/em&gt;. Certainly not how &lt;em&gt;I&#39;d&lt;/em&gt; write it. But if I told it to build $THING with $APPROACH... it&#39;d pretty much do that. And sure, I&#39;d have to course-correct some. But not nearly as much as before. And the mistakes were more about intent or details. At some point I realized I wasn&#39;t even thinking about hallucinations any more.&lt;/p&gt;

&lt;p&gt;I&#39;d also been using Claude.ai for some personal Q&amp;amp;A sessions. Still cautiously. Then it occurred to me that because I was starting to trust the &lt;em&gt;code&lt;/em&gt; output of the models, I was also starting to trust the models in &lt;em&gt;other&lt;/em&gt; domains too.&lt;/p&gt;

&lt;p&gt;In a way it seemed like the opposite of the Gell-Mann Amnesia effect. We read news stories about our own domain, realize the reporter and news source have &lt;em&gt;no&lt;/em&gt; clue what they&#39;re talking about for our area of expertise, but still trust for other areas unthinkingly.&lt;/p&gt;

&lt;p&gt;Here... I didn&#39;t trust &lt;em&gt;any&lt;/em&gt; of it. And then I found myself starting to trust the code. Maybe it wasn&#39;t &lt;em&gt;good&lt;/em&gt;, but it &lt;em&gt;worked&lt;/em&gt; and did what I wanted. .... so did I trust model output for &lt;em&gt;other&lt;/em&gt; areas too? More and more, the answer was yes.&lt;/p&gt;

&lt;h3 id=&#34;gearing-up&#34;&gt;Gearing Up&lt;/h3&gt;

&lt;p&gt;By Christmas 2025, I was finally ready to go customize my workflow and setup. I&#39;d accumulated a few months of experience, figured out how &lt;em&gt;I&lt;/em&gt; wanted to use AI, and found a workflow pattern that worked for me. Now it was time to slap on all the bells and whistles and make this thing &lt;em&gt;scream&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I tried Claude Code. For about a day, tops. The VSC extension didn&#39;t work at all. Tried the TUI, and bounced off it &lt;em&gt;hard&lt;/em&gt;. Why would anyone want to use something stuck in a terminal?&lt;/p&gt;

&lt;p&gt;Tried OpenCode. Also tried the TUI. Pretty much the same result. Don&#39;t get me wrong, I spend a lot of time in terminals, but I&#39;d much rather do my work in a GUI. Nicer fonts, actual copy-paste handling.&lt;/p&gt;

&lt;p&gt;But, OpenCode had a lot more flexibility. I&#39;m a Windows user, but I also do my day job work in WSL. I found a third-party OpenCode web UI called CodeNomad. Figured out I could run the CodeNomad + OpenCode processes inside of WSL, load up the web UI on the Windows side, and not deal with cross-platform filesystem issues.&lt;/p&gt;

&lt;p&gt;I&#39;d bookmarked hundreds of potentially useful AI tools, techniques, approaches. I scoured the list, found several tools that looked like a good fit. I used OpenCode + Claude (henceforth OCC) to start customizing my own OpenCode config. I had it cross-compare plugins and tools. I started generating my own OpenCode plugins to fit my needs. I customized the &lt;code&gt;AGENTS.md&lt;/code&gt; and skill files. I generated custom scripts to deterministically handle parts of my workflow and eliminate steps the agent would have had to do via tool calls.&lt;/p&gt;

&lt;p&gt;By the end of the break, I had a fully loaded new OCC setup, ready to work the way &lt;em&gt;I&lt;/em&gt; wanted to work.&lt;/p&gt;

&lt;h3 id=&#34;the-re-pivot&#34;&gt;The Re-Pivot&lt;/h3&gt;

&lt;p&gt;In late January, Replay re-found our direction.&lt;/p&gt;

&lt;p&gt;We put together &lt;a href=&#34;https://docs.replay.io/basics/replay-mcp/overview&#34;&gt;Replay MCP&lt;/a&gt;, allowing agents to do the hard work of investigating a Replay recording. I identified some existing pieces of infrastructure we&#39;d previously built that we could tie together to form a new product line for automatically debugging failed E2E tests, and that this was a highly promising business direction for us to focus on.&lt;/p&gt;

&lt;p&gt;We went all in.&lt;/p&gt;

&lt;p&gt;Time travel debugging was always the promise, the potential, the future. We&#39;d struggled to sell the vision and the use case, and ran into friction with humans trying to adopt the tools. Now, with agentic development 100Xing PR rates, Replay could fit into the automated QA story in ways no other tool could solve. And, Replay MCP gives agents the same time travel superpowers that humans always had with the Replay DevTools UI.&lt;/p&gt;

&lt;p&gt;So now I&#39;ve got an agent workflow, a product direction, and a license to go build Awesome Time Travel Superpowers again. This is going to change the world and fulfill the vision.&lt;/p&gt;

&lt;p&gt;Let&#39;s &lt;em&gt;rock&lt;/em&gt;.&lt;/p&gt;

&lt;h2 id=&#34;part-7-warp-speed&#34;&gt;Part 7: Warp Speed&lt;/h2&gt;

&lt;h3 id=&#34;pulling-it-all-together&#34;&gt;Pulling It All Together&lt;/h3&gt;

&lt;p&gt;A few days later, I had an incredible brainstorm.&lt;/p&gt;

&lt;p&gt;In summer 2023, I&#39;d played with a Replay time-travel-based perf analysis tool for React and Redux. There are tools out there to capture React perf, but they&#39;re limited. They mostly only work against dev React builds, the numbers are only useful in relative terms (&amp;quot;CompA is 3x as slow as CompB&amp;quot;), and they don&#39;t tell you anything about how Redux dispatches fit into the render. There&#39;s nothing out there that can break down a dispatch into separate times for reducer, subscriber callbacks, selectors, and ensuing React render time.&lt;/p&gt;

&lt;p&gt;I had whipped up a hacky POC to extract those perf numbers, by digging into the guts of React and instrumenting key points in React itself, and similarly in Redux. It worked! But it was too slow. Took way too long to collect the data. Wasn&#39;t a priority, so we never shipped it or pushed it forward.&lt;/p&gt;

&lt;p&gt;We spent 2024-25 building out a sophisticated React analysis layer, so that we could create an async dependency graph: &amp;quot;DOM update caused by React render caused by setState caused by promise resolve caused by network request caused by useEffect&amp;quot;, etc. I&#39;d done much of that analysis work.&lt;/p&gt;

&lt;p&gt;I suddenly realized that the analysis layer we&#39;d built &lt;em&gt;was&lt;/em&gt; the system I&#39;d tried to build a few years earlier! Or rather, it was a vastly better implementation of the data extraction, and it covered &lt;em&gt;React&lt;/em&gt;. Now all I had to do was repeat the same instrumentation patterns for Redux, and I could recreate the same perf analysis insights!&lt;/p&gt;

&lt;p&gt;So I did! Had my agent read up on the React instrumentation approach, identify the key lines in Redux, look at my previous POC, and crank out the implementation. Bam. And within a couple days, I had the Redux + React perf insights coming together. Even better, I could extract those perf insights from &lt;em&gt;production React apps&lt;/em&gt;, something no other tool could do!&lt;/p&gt;

&lt;p&gt;I went kinda crazy with this newfound power :) I started generating a bunch of React and Redux insight reports, trying to see what I could pull together with the data we had available.&lt;/p&gt;

&lt;h3 id=&#34;pattern-matching&#34;&gt;Pattern Matching&lt;/h3&gt;

&lt;p&gt;I&#39;d spent most of Fall 2024 and Spring 2025 working on that analysis layer. It was painstaking work.&lt;/p&gt;

&lt;p&gt;A former Replay teammate had insisted there was no possible way we could actually instrument the guts of React. It would be impossible to maintain it. React changed too much over time. We&#39;d be eternally trying to keep up with the React team.&lt;/p&gt;

&lt;p&gt;He was right.&lt;/p&gt;

&lt;p&gt;I made it work anyway :)&lt;/p&gt;

&lt;p&gt;The original version had looked for specific source fragments in the one experimental React build from Feb 2024 that we happened to be using in our own DevTools codebase. To make it work with React 18, I&#39;d had to spend weeks carefully looking through different ReactDOM dev and prod artifacts to find the equivalent methods and copy the exact fragments from React 18 so our analysis layer could insert the right callbacks. Then I had to do the same thing for React 19, and that was a &lt;em&gt;massive&lt;/em&gt; headache due to the drastic internal changes in React&#39;s implementation between 18 and 19. Functions had been moved, renamed, migrated. The Closure Compiler had inlined some functions that we cared about.&lt;/p&gt;

&lt;p&gt;My first couple passes at this were intentionally ugly and unmaintainable. I didn&#39;t care about how the code was organized. I just needed it to &lt;em&gt;work&lt;/em&gt;. Once I verified the output, &lt;em&gt;then&lt;/em&gt; I could look for the right abstractions and common patterns, and try to organize that logic properly.&lt;/p&gt;

&lt;p&gt;Our instrumentation layer looks for 40+ unique locations in the React bundle. &lt;code&gt;createElement&lt;/code&gt;, &lt;code&gt;renderWithHooks&lt;/code&gt;, effect creation and execution, and many more. I settled on a factory function pattern. Every single location that we cared about, I created a factory function that accepted a &lt;code&gt;reactVersion&lt;/code&gt; object with details on the major and minor version, dev or prod or experimental, and other distinguishing factors. Then I wrote simple &lt;code&gt;if/else&lt;/code&gt; logic based on the versions to decide which fragments and variables and snippets we cared about that for that version.&lt;/p&gt;

&lt;p&gt;It was ugly. It was verbose.&lt;/p&gt;

&lt;p&gt;It was &lt;em&gt;straightforward&lt;/em&gt;. It encapsulated the complexity.&lt;/p&gt;

&lt;p&gt;It &lt;em&gt;worked&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I later went through and hardened it. I replaced literal copy-pasted source code strings with &lt;code&gt;ast-grep&lt;/code&gt; pattern matching, to ignore whitespace and garbage compiler output variable names and focus on the &lt;em&gt;structure&lt;/em&gt; of the code.&lt;/p&gt;

&lt;p&gt;That sucked up &lt;em&gt;months&lt;/em&gt; in 2024-25. We didn&#39;t even care about React 19 at the time - our app builder specifically used React 18. But React 19 had just come out. And if we ever &lt;em&gt;were&lt;/em&gt; going to make this a production reality in the future, I knew it would &lt;em&gt;have&lt;/em&gt; to handle React 19, and who knows when the React team might start shipping 19.x minors. So better to take the time to do that &lt;em&gt;now&lt;/em&gt;. Really only looked for React artifacts as they&#39;d appear in a simple SPA like Vite, intentionally &lt;em&gt;didn&#39;t&lt;/em&gt; handle Next.js and complexity like the App vs Pages Router or canary builds. But I felt confident I&#39;d put the right foundation in place.&lt;/p&gt;

&lt;p&gt;Fast-forward to Feb 2026. I&#39;m back in the analysis layer. Suddenly we&#39;re trying to analyze recordings that aren&#39;t just our own app builder, but real apps in the wild. Next.js 14/15/16, Webpack/Turbopack, some other weird experimental React 19+++ builds with feature flags turned on.&lt;/p&gt;

&lt;p&gt;And I &lt;em&gt;already had the right architecture and patterns and encapsulation in place&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It was &lt;em&gt;dumb&lt;/em&gt; code. &lt;em&gt;ugly&lt;/em&gt; code. &lt;em&gt;Predictable&lt;/em&gt; code.&lt;/p&gt;

&lt;p&gt;And you know what &lt;em&gt;looooooves&lt;/em&gt; dumb, predictable, &lt;em&gt;repetitive&lt;/em&gt; code?&lt;/p&gt;

&lt;p&gt;LLMs :)&lt;/p&gt;

&lt;p&gt;For the first time, I tried telling my agent about the React instrumentation layer and what we needed to add to expand it for these cases. It read the React fragment files and the rest of the instrumentation layer. It slurped up the various ReactDOM bundles I&#39;d collected. And so help me it started comparing 19.0 and 19.1 and 19.2 and Next 19.random.canary and whatever other weird versions I was looking at, and within a few minutes it could tell me where the relevant functions and fragments had migrated between versions and how they&#39;d changed and what we needed to update in the fragment factories to handle those.&lt;/p&gt;

&lt;p&gt;I think I actually literally screamed at one point?&lt;/p&gt;

&lt;p&gt;I mean, I spent &lt;em&gt;months&lt;/em&gt; on this! I was so deep in the weeds and trying to understand what each fragment meant and why it mattered and how our analysis layer turned these points into a graph and what the actual variables were and how to insert the callbacks correctly without breaking the instrumented bundle.&lt;/p&gt;

&lt;p&gt;And now I just say &amp;quot;here&#39;s the pattern and the current task, go figure out the next changes we need to add&amp;quot;, and it just... &lt;em&gt;does it&lt;/em&gt;? Correctly? &lt;em&gt;Faster than I could have done&lt;/em&gt;?!?!?!? ARE YOU &lt;em&gt;KIDDING ME&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;But here&#39;s the thing. An LLM could never have come up with this from scratch. Even if I were rebuilding this from nothing today, &lt;em&gt;I&lt;/em&gt; would have to tell it what I wanted it to accomplish. Even if it came up with the methods, &lt;em&gt;I&lt;/em&gt; would have to provide the intent.&lt;/p&gt;

&lt;p&gt;Looking back, I am &lt;em&gt;so proud&lt;/em&gt; of 2025-me. I was upset, and angsting, and confused. But I still took the time to understand, to investigate. I built the right foundation, the hard way. I built the mental model in my head, I got the fragments working, I decided on the factory function encapsulations and the &lt;code&gt;ast-grep&lt;/code&gt; usage and the file structures.&lt;/p&gt;

&lt;p&gt;Because &lt;em&gt;I&lt;/em&gt; did the hard work the first time, it paid off in 2026. When we needed to update that analysis layer for React 19.x, and handle Next.js variations and React canaries, the foundation was in place. I just had to build on top of it. A couple weeks of expansion, instead of months of building from scratch.&lt;/p&gt;

&lt;p&gt;And with the foundation and those patterns were in place, &lt;em&gt;now&lt;/em&gt; I could just point my agent at it and say &amp;quot;here&#39;s the right patterns, here&#39;s the goal, here&#39;s what we&#39;re adding. Read, learn, compare, &lt;em&gt;do it&lt;/em&gt;&amp;quot;.&lt;/p&gt;

&lt;h3 id=&#34;shipping-for-agents&#34;&gt;Shipping for Agents&lt;/h3&gt;

&lt;p&gt;The &lt;a href=&#34;https://docs.replay.io/basics/replay-devtools/overview&#34;&gt;Replay DevTools UI&lt;/a&gt; had started as a fork of the Firefox DevTools. We&#39;d added time travel abilities, and rewritten the whole codebase in the process. That let me as a human investigate Replay recordings and do time-travel debugging, with my own eyes and knowledge.&lt;/p&gt;

&lt;p&gt;Now, we had an MCP. That meant &lt;em&gt;agents&lt;/em&gt; were doing the hard work. And they don&#39;t get tired :) Confused, maybe. Still very easily misled. But they&#39;ll happily just keep going indefinitely.&lt;/p&gt;

&lt;p&gt;I had a few specific examples I was using as personal benchmarks. In one case, I&#39;d pushed a PR to update the Replay DevTools UI to React 19. When I pushed the branch, half our Playwright E2E tests failed. Usually means you broke something badly. We already had our own repo set up to do Replay recordings of all tests, so I just popped open one failing test recording. Scrolled down the list of console messages, and sure enough, last message was an error: &lt;code&gt;findDOMNode is not a function&lt;/code&gt;, from React Transition Group. Yup, sure, need to bump that too or tweak usage. 30s, done.&lt;/p&gt;

&lt;p&gt;But could an &lt;em&gt;agent&lt;/em&gt; find the answer that fast?&lt;/p&gt;

&lt;p&gt;I tried feeding the recording to an agent, and it bumbled around for 10-15min. Didn&#39;t help the &lt;code&gt;ConsoleMessages&lt;/code&gt; tool was broken and didn&#39;t report the error :) Eventually I &amp;quot;suggested&amp;quot; it use the &lt;code&gt;Screenshot&lt;/code&gt; tool. It saw the error overlay, dove into the root error boundary component, added a logpoint, exfiltrated the error, got the right result.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I&lt;/em&gt; found the answer in the recording in 30s. Could I give an &lt;em&gt;agent&lt;/em&gt; that ability?&lt;/p&gt;

&lt;p&gt;So I started rewriting and expanding all our Replay MCP tools. I built a &lt;code&gt;RecordingOverview&lt;/code&gt; tool that surfaced React version, Playwright test results and errors, console or React error boundary errors, React renders, Redux / Zustand / TanStack Query state results, network requests. I built a &lt;code&gt;ReactRenders&lt;/code&gt; tool that lets an agent drill down into render details. A &lt;code&gt;ReduxActions&lt;/code&gt; tool that provides drill down into Redux actions and state, and similar tools for Zustand and TanStack Query.&lt;/p&gt;

&lt;p&gt;By the time I was done, I did see my agent find that same bug in &amp;lt;1min.&lt;/p&gt;

&lt;p&gt;I also tried recreating other cases, like a React bug that Dan Abramov had reported, and my agent found that same bug in &amp;lt;10 min (faster or shorter depending on prompt quality).&lt;/p&gt;

&lt;p&gt;Guess what. Turns out that surfacing deterministic info deterministically and providing more details and the ability to drill down and dive deep, helps people &lt;em&gt;and&lt;/em&gt; agents. And now that I had all this time-travel info at my fingertips, I can build the tools that make solving impossible problems possible.&lt;/p&gt;

&lt;p&gt;So apparently now I&#39;m back to building UI. But for agents more than humans.&lt;/p&gt;

&lt;h2 id=&#34;part-8-so-what-do-i-think-today-anyway&#34;&gt;Part 8: So What Do I Think Today, Anyway?&lt;/h2&gt;

&lt;p&gt;So that&#39;s my story as of today.&lt;/p&gt;

&lt;p&gt;If you&#39;ve gotten this far, congratulations. Thanks for sticking with me. It&#39;s a lot of words (even for me!), and a lot of personal details. I know. And there&#39;s more to go.&lt;/p&gt;

&lt;p&gt;So what do &lt;em&gt;I&lt;/em&gt; think about all this? About agents, and using AI to write code? All the fears and concerns that I wrote about so vividly earlier?&lt;/p&gt;

&lt;p&gt;Well, I do have opinions and thoughts. &lt;em&gt;You&lt;/em&gt; didn&#39;t ask, probably. But some people have. And it&#39;s my blog, and I&#39;m writing this one for me. And as always I hope &lt;em&gt;some&lt;/em&gt; people get value out of this. So slap an MIT license on these thoughts - up for grabs, do what you want with this, not implied for any particular use, not my fault if this doesn&#39;t work for you.&lt;/p&gt;

&lt;h3 id=&#34;most-of-my-fears-are-still-valid-and-so-are-you&#34;&gt;Most Of My Fears Are Still Valid, And So Are You&lt;/h3&gt;

&lt;p&gt;I wrote a whole laundry list of fears up top.&lt;/p&gt;

&lt;p&gt;Some of them turned out to be non-factors.&lt;/p&gt;

&lt;p&gt;I thought I would essentially erase my existence if I ever stooped to asking an AI to write code for me. Well, I did it. I&#39;m still here. I&#39;m still me. So I was wrong on that one.&lt;/p&gt;

&lt;p&gt;I thought I&#39;d utterly hate being a &amp;quot;pseudo-PM/code reviewer&amp;quot; all the time. Uh. Well. Guess what. I&#39;m kinda mostly a pseudo-PM/code reviewer. And it... doesn&#39;t suck? We&#39;ll get back to that in a minute.&lt;/p&gt;

&lt;p&gt;Clearly the generated code quality is &lt;em&gt;better&lt;/em&gt; than it used to be. Not necessarily great! It&#39;s not elegant. AI will happily keep slapping on more layers, not extracting abstractions. But we&#39;re long past the hallucination stage.&lt;/p&gt;

&lt;p&gt;But most of the rest of my fears and concerns are still there. Especially the larger societal ones.&lt;/p&gt;

&lt;p&gt;I know, I know. Every generation worries about &amp;quot;The Kids These Days&amp;quot;. There&#39;s quotes from ancient Rome about how the kids are lazy and don&#39;t do anything. We&#39;ve survived the last few thousand years. Society&#39;s still here. Human condition.&lt;/p&gt;

&lt;p&gt;I do seriously worry about the large-scale impacts of AI on our collective thinking processes. It was hard enough to teach critical thinking skills in school when we had to do the work ourselves. We relied on artifacts like essays and projects as both forcing functions to make people learn the material, and social proof that they &lt;em&gt;had&lt;/em&gt; learned the material and done the work. Now that anyone can copy-paste an assignment into their LLM of choice and paste the results back into a grading system in about 30s, there&#39;s no need to do the learning or thinking, and the artifact is no longer proof of the learning and the work. What happens to our world in the next 20-30 years, when we&#39;ve Wall-e style obliterated our ability to think or learn or do?&lt;/p&gt;

&lt;p&gt;We rely on photographs and voice recordings and trust that these things are proof that something actually happened. We&#39;ve already seen those can be mimicked and forged instantly. How can we trust any news source or report or proof, and verify that things actually happened as described?&lt;/p&gt;

&lt;p&gt;I&#39;m towards the tail end of my career. I already felt out of touch with what today&#39;s junior devs must be going through. My own career arc has been unique - no one could replicate the specific opportunities I had at the times I had them. I have no idea what it&#39;s like to have to grind l33tcode or algos/DSAs, or go through a bootcamp and try to stand out amongst a sea of otherwise identical FE devs with no experience. What happens to people trying to get into the industry? What does their pathway look like? How do they build a career, gain experience?&lt;/p&gt;

&lt;p&gt;I have no answers. Not that anyone would care if I did anyway :) I worry for the future in a lot of ways. But it&#39;s not mine to build.&lt;/p&gt;

&lt;p&gt;I&#39;ve talked to plenty of people who still refuse to use LLMs in any way shape or form. Who fear for the future of the industry, mourn the loss of their craft.&lt;/p&gt;

&lt;p&gt;I understand. I agree. I was there. I&#39;m &lt;em&gt;still&lt;/em&gt; there. Please don&#39;t take my own change of heart and current excitement as any kind of statement that your own feelings are wrong. You are entirely justified to feel that way, because Feelings Are Valid and Real. I hope you can find mental peace and safety in the midst of this insanity.&lt;/p&gt;

&lt;h3 id=&#34;the-tiger-is-out&#34;&gt;The Tiger Is Out&lt;/h3&gt;

&lt;p&gt;There&#39;s a beautiful little poem apparently written by a 6yo kid a few years ago:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The tiger&lt;br /&gt;
He destroyed his cage&lt;br /&gt;
Yes&lt;br /&gt;
YES&lt;br /&gt;
The tiger is out&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Well, guess what. The LLM is out. And it&#39;s not going away.&lt;/p&gt;

&lt;p&gt;I&#39;ve read a lot of the &amp;quot;THEY CAN&#39;T &lt;em&gt;POSSIBLY&lt;/em&gt; KEEP GETTING AWAY WITH THIS! IT&#39;S A HOUSE OF CARDS! FINANCIAL RACKETEERING! CIRCULAR MONEY LAUNDERING! UNSUSTAINABLE PACE OF GROWTH! FAKE DEALS! NONE OF THESE DATA CENTERS ACTUALLY EXIST!&amp;quot; articles. I think there&#39;s a lot of truth to all that! It&#39;s entirely possible that a few years from now the entire AI ecosystem could collapse because of financial shenanigans, and that it could take down the US and world economies with them.&lt;/p&gt;

&lt;p&gt;But LLMs as a technology exist. The genie is out of the bottle. Pandora&#39;s box is open. Pick your metaphor here.&lt;/p&gt;

&lt;p&gt;And even if we stopped development on LLM model tech &lt;em&gt;right this second&lt;/em&gt;, and we never had a single improvement in quality or memory usage or token speed for the rest of time... what we have &lt;em&gt;now&lt;/em&gt; is already enough to upend many aspects of society as we&#39;ve known it.&lt;/p&gt;

&lt;p&gt;There will be positives from this! I&#39;m not sitting here saying anything involving LLMs is inherently bad. Remember, I&#39;m actually quite happy having LLMs crank out code for me at this point. I&#39;ve talked to friends who are seeing potential medical benefits, and there&#39;s a lot more.&lt;/p&gt;

&lt;p&gt;But I do mean that we have unleashed a technology that will continue to change our society in ways we can and can&#39;t predict going forward. Just the predictions I &lt;em&gt;can&lt;/em&gt; see are concerning, and I&#39;ve got a pretty limited imagination.&lt;/p&gt;

&lt;p&gt;I don&#39;t know what the reality is on any of the ecological aspects (power and water usage). No idea on the big ethical / moral &amp;quot;WHERE DID THEY GET ALL THE TRAINING DATA? CAN ANY OUTPUT FROM AN LLM BE VALID WHEN IT&#39;S ALL JUST COPYRIGHTED INPUT?&amp;quot; questions. And to be frank at this point it&#39;s kind of irrelevant.&lt;/p&gt;

&lt;p&gt;Is this the future I &lt;em&gt;want&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;No, not particularly.&lt;/p&gt;

&lt;p&gt;Do I think everyone should jump wholeheartedly into AI and use it everywhere for everything? Of course not and I hope you see that distinction in my explanations here.&lt;/p&gt;

&lt;p&gt;What does this mean &lt;em&gt;outside&lt;/em&gt; the software engineering industry? I have &lt;em&gt;no idea&lt;/em&gt;. I see lots of discussion on AI eating writing and art and music. That seems wrong, in a different way. I dislike AI writing tone, and I detect written slop a mile away, and yet I&#39;ve also used AI to generate summaries of text for myself and for work because there&#39;s still &lt;em&gt;some&lt;/em&gt; value in the content as ugly as it is.&lt;/p&gt;

&lt;p&gt;I suspect LLMs do better at code than in other domains, but I have no experience or knowledge what LLM use looks like in law or physics or finance. Wouldn&#39;t surprise me if there&#39;s a big difference in results, but man, I can&#39;t even keep up with &lt;em&gt;our&lt;/em&gt; industry or even just the React ecosystem, don&#39;t ask me to keep up with other industries too :)&lt;/p&gt;

&lt;p&gt;As you&#39;ve seen, I &lt;em&gt;am&lt;/em&gt; excited about what I personally can do with AI. I also see every day that it&#39;s causing problems directly and indirectly. So, no, I&#39;m not blind to the damage that AI is doing, and that&#39;s the aspects that concern me. But given that it exists, now the question becomes how I&#39;m going to react and use this myself, same as every other technology that has come out in my lifetime.&lt;/p&gt;

&lt;p&gt;I&#39;m a firm believer in dealing with reality the way it is. Not the way I &lt;em&gt;want&lt;/em&gt; it to be. Sure, I&#39;ll gripe and complain and push if something isn&#39;t the way I want. I don&#39;t blindly accept it or act like things &lt;em&gt;can&#39;t&lt;/em&gt; change.&lt;/p&gt;

&lt;p&gt;But you&#39;ve got to deal with the world as it actually exists. Good, bad, and ugly. And in this case, LLM tech exists, and it&#39;s already this powerful, and this easy to use. It&#39;s now part of our reality. Acknowledge that fact, and plan accordingly.&lt;/p&gt;

&lt;h3 id=&#34;gotta-go-fast&#34;&gt;Gotta Go Fast&lt;/h3&gt;

&lt;p&gt;For software engineering especially: we built our processes around &lt;em&gt;people&lt;/em&gt;. The Agile Manifesto, Scrum, standups, PR reviews, issue trackers, Git commit messages. It took time to plan. Writing code was expensive and time-consuming. We had to make sure we were writing the correct code in the first place. Can&#39;t waste time on irrelevant experiments.&lt;/p&gt;

&lt;p&gt;AI broke that constraint.&lt;/p&gt;

&lt;p&gt;With AI, we can crank out infinite amounts of code, essentially for free, and essentially immediately.&lt;/p&gt;

&lt;p&gt;None of our processes were designed for that.&lt;/p&gt;

&lt;p&gt;I spent a lot of time at AI Engineer and React Miami in April. I had dozens of conversations. And a lot of them were different forms of the same question: &amp;quot;how do we scale our review / test / QA / deploy / planning processes to keep up with the amount of code we&#39;re generating?&amp;quot;.&lt;/p&gt;

&lt;p&gt;I have a &lt;em&gt;sort of&lt;/em&gt; answer to that. And a lot of you aren&#39;t going to like it :)&lt;/p&gt;

&lt;p&gt;On the one hand, having an infinite codegen at your fingertips &lt;em&gt;does&lt;/em&gt; change our processes for how we do things. Why make a napkin-styled wireframe of a UI to sketch out the layout, when you can just prompt it into existence in 30s? Why waste a couple weeks on building one prototype, when you can crank out 10 prototypes simultaneously and compare the results? Why spend time going back and forth with handoffs between designers in Figma and ensuring a dev has the right design tokens in place, when you can just have them both landing updates at the same time? This is legitimately possible, and does actually change so many of our assumptions for building apps.&lt;/p&gt;

&lt;p&gt;But as my mother told us all the time growing up: &amp;quot;humans will take everything to the extreme&amp;quot;.&lt;/p&gt;

&lt;p&gt;Many of us have already experienced or seen AI psychosis. When you start writing code with &lt;em&gt;one&lt;/em&gt; agent, it can edit files faster than you can. We&#39;re programmers - we already know that computers can execute our desires faster than we can do them manually. Write one line of code. Put it in a loop, it runs many times, automatically. Throw in a thread pool, now they&#39;re in parallel. Distribute the system. Scale. GPUs. Cores. Optimize.&lt;/p&gt;

&lt;p&gt;Okay, what happens if I run &lt;em&gt;two&lt;/em&gt; agent sessions at once? Can I ping-pong between tabs? It takes a couple minutes for Agent 1 to do its work, surely I can switch and tell Agent 2 to do some work in the meantime. It&#39;s the XKCD &amp;quot;COMPILING!&amp;quot;, except now instead of sword fights in the hallway, we&#39;re just task switching. Context switching. Having to keep multiple tasks in our brain at once.&lt;/p&gt;

&lt;p&gt;Over the years I&#39;ve found that social media already ruined my ability to focus. I used to be able to intently focus on a single task for hours. Now I kick off a command that takes 30s, and my brain wants to go check Twitter and Bluesky and Reddit and HN just in case there were any new posts in the last 5 minutes. It&#39;s &lt;em&gt;bad&lt;/em&gt;. I hate it.&lt;/p&gt;

&lt;p&gt;Well, guess what. Running 2-3 agent sessions at once is just as bad. And that&#39;s just the starting point.&lt;/p&gt;

&lt;p&gt;Okay, if we can run a couple sessions at once, but we&#39;re &amp;quot;manually&amp;quot; driving our agents... what happens if we remove the brakes? Why should I have to tell the agent what to do, or approve the permissions checks? SCALE THE SYSTEM BABY! YOLO MODE FOR LIFE! Why not run 5 agents? 10 agents? 100? 1000? Build a custom multi-pane dashboard just to track all my agents. Don&#39;t need to know what they&#39;re doing or how, just that they&#39;re all busy at the same time and not blocking the merge queue. Markdown&#39;s outdated, too many markdown files. Throw some gas rigs and mayors and polecats in there. We&#39;re tokenmaxxing, there&#39;s a leaderboard, burn more tokens or you&#39;re fired. Build a dark factory. No human ever looks at the code. It&#39;s Steve Ballmer&#39;s &amp;quot;DEVELOPERS! DEVELOPERS! DEVELOPERS!&amp;quot;, except now it&#39;s &amp;quot;AGENTS! AGENTS! AGENTS!&amp;quot;&lt;/p&gt;

&lt;p&gt;The goal is unlimited speed.&lt;/p&gt;

&lt;p&gt;And what happens when you go too fast?&lt;/p&gt;

&lt;p&gt;You crash.&lt;/p&gt;

&lt;h3 id=&#34;oops-it-s-capitalism&#34;&gt;Oops It&#39;s Capitalism&lt;/h3&gt;

&lt;p&gt;This is a pretty ironic section for me to write. I come from a conservative background. My own views and opinions have evolved significantly over time, but I&#39;m hardly what you&#39;d call an activist.&lt;/p&gt;

&lt;p&gt;So here&#39;s my late-night, actual, no-kidding opinion:&lt;/p&gt;

&lt;p&gt;We, as an industry, need to collectively accept that &lt;strong&gt;humans and processes and even agents &lt;em&gt;have limits&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And sooner or later we&#39;re &lt;em&gt;all&lt;/em&gt; going to have to take a step back and figure out what our safe, reasonable, and &lt;em&gt;maintainable&lt;/em&gt; limits are. Because we&#39;re all about to learn those lessons the hard way.&lt;/p&gt;

&lt;p&gt;They&#39;ll vary by company and team. Some teams will set up better automated processes. Maybe we&#39;ll democratize it, whatever the QA / CI version of k8s is so that we can all benefit from auto-scaling systems. But &lt;em&gt;there will fundamentally be limits to how fast we can build and ship code&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Maybe it&#39;s 3x current / historical speed. Maybe it&#39;s 10x. I dunno.&lt;/p&gt;

&lt;p&gt;But right now it seems like &lt;strong&gt;the entire industry is assuming there &lt;em&gt;isn&#39;t&lt;/em&gt; a limit. And that if it &lt;em&gt;is&lt;/em&gt; possible to go faster, then we &lt;em&gt;must&lt;/em&gt; go faster.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Everyone&#39;s scared of how fast everyone else might go. Everyone&#39;s jumping on AI to get ahead of the curve, to try to beat their competition to the punch. Can&#39;t just naturally let adoption happen, have to mandate it top-down. Slap those sparkle icons in every single toolbar and panel, shove those &amp;quot;NOW WITH AI&amp;quot; features down everyone&#39;s throats whether they like it or not.&lt;/p&gt;

&lt;p&gt;Wait, why are we going faster? To ship features? To beat our competitors to market? To deliver shareholder value?&lt;/p&gt;

&lt;p&gt;Oops. It&#39;s Capitalism.&lt;/p&gt;

&lt;p&gt;Don&#39;t get me wrong. I&#39;m the last person who should be delivering a critique of our economic system here :) But as someone who&#39;s read too many online rants... well, that seems to be the final answer for all of this. We Go Faster so that we can Deliver Value in service of the System.&lt;/p&gt;

&lt;p&gt;This is not sustainable.&lt;/p&gt;

&lt;h3 id=&#34;maintainability-is-the-mindset&#34;&gt;Maintainability is the Mindset&lt;/h3&gt;

&lt;p&gt;I personally learned years ago that even in a great job, with a comfortable pace of work, and managers who actually care about you as a person, and tasks that I personally find fascinating and interesting and challenging... &lt;strong&gt;you still have to set boundaries&lt;/strong&gt;. There&#39;s always more work to do. Always another fire to fight, another bug to fix, another feature to get out the door. No one else is going to tell you &amp;quot;you&#39;ve done too much work, throttle back&amp;quot;. You have to enforce that yourself.&lt;/p&gt;

&lt;p&gt;It can wait.&lt;/p&gt;

&lt;p&gt;I love work. I love being productive. I view the world in terms of checkboxes and getting things done, which I&#39;m very well aware is not the healthiest mindset and trust me my therapist knows all about this trait :)&lt;/p&gt;

&lt;p&gt;But &amp;quot;go faster, at all costs&amp;quot;, should not be the goal.&lt;/p&gt;

&lt;p&gt;Michelle Bakels has given an amazing talk on developer health, and one of the key lines was how &lt;strong&gt;&amp;quot;rest isn&#39;t &lt;em&gt;earned&lt;/em&gt;. It&#39;s a critical part of performing at our best.&amp;quot;&lt;/strong&gt; Everyone should watch that and take that mindset to heart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The goal should be a healthy, consistent, &lt;em&gt;sustainable&lt;/em&gt;, &lt;em&gt;maintainable&lt;/em&gt; pace of development and shipping&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I&#39;m not the world&#39;s best poster child for this. I push myself hard, always feeling like I &lt;em&gt;could&lt;/em&gt; and &lt;em&gt;ought&lt;/em&gt; to be doing more than I am. I&#39;m trying :) Work in progress. Do as I say, not always as I do myself.&lt;/p&gt;

&lt;p&gt;Maybe that&#39;s 10x for you, and 3x for me. Whatever. That&#39;s fine.&lt;/p&gt;

&lt;p&gt;But the sooner we all intentionally acknowledge that and adjust our plans and expectations accordingly, the better.&lt;/p&gt;

&lt;h3 id=&#34;but-non-determinism&#34;&gt;But Non-Determinism?&lt;/h3&gt;

&lt;p&gt;I wrote so much at the start of this post about how bad non-determinism is. I &lt;em&gt;want&lt;/em&gt; predictability. I &lt;em&gt;want&lt;/em&gt; to re-run my code and know that it&#39;s going to execute the same way every time given the same inputs. It&#39;s literally the core of how Replay time-travel works.&lt;/p&gt;

&lt;p&gt;I&#39;ve seen folks online hammer on this point. LLMs are inherently non-deterministic. How can you possibly rely on that? Forget even hallucinations, how can you build apps when you can&#39;t guarantee what the output is?&lt;/p&gt;

&lt;p&gt;I&#39;ve also read comparisons to how this is all just virtual slot machines and gambling. In the same way that social media gives us dopamine hits - &amp;quot;ooh look, 3 new posts since I last refreshed, maybe one of these will be interesting!&amp;quot; Gimme something new, something different, &lt;em&gt;maybe&lt;/em&gt; it&#39;s useful. Same thing with LLMs and code. Give it instructions, pull the lever, watch the &lt;del&gt;dials spin&lt;/del&gt; messages and diffs, and then inspect the results and &lt;em&gt;hope&lt;/em&gt; it does what you want.&lt;/p&gt;

&lt;p&gt;There&#39;s a lot of truth to it. I feel it all the time.&lt;/p&gt;

&lt;p&gt;But we&#39;ve always built guardrails and tools to keep the work on track. We use code formatters to make the code style consistent and eliminate the arguments over tabs vs spaces. We write unit and integration and E2E tests to verify the whole system works as intended. We typecheck and lint and squiggle-ify in our editors and in CI.&lt;/p&gt;

&lt;p&gt;Non-determinism &lt;em&gt;can&lt;/em&gt; be made &lt;em&gt;sufficiently&lt;/em&gt; deterministic.&lt;/p&gt;

&lt;p&gt;It takes work. It&#39;s a different &lt;em&gt;kind&lt;/em&gt; of work. The results aren&#39;t always what you want. But with enough boundaries in place, the non-deterministic output &lt;em&gt;should&lt;/em&gt; be close enough to fulfill the intended goal, and can be tweaked if needed. Provide the right context, the right prompts, the right skill files. Don&#39;t cut an agent loose autonomously, review the plan and make sure it&#39;s actually what &lt;em&gt;you&lt;/em&gt; want done. Agents love to type-check. Give them the lint errors, enforce the commit rules, throw all the static analysis in there. Add the AI-powered code review, ralph loop it if you have to until the agent and the judge are both happy.&lt;/p&gt;

&lt;p&gt;I still believe in making as much of the system as deterministic as possible. Redux reducers. 100% deterministic codegen. Turn patterns and routines into scripts, encode the knowledge. Minimize how much work the LLM actually has to do. Make it &lt;em&gt;code&lt;/em&gt; anywhere you can. And then you can use an LLM to help with the automation.&lt;/p&gt;

&lt;p&gt;There&#39;s a lot of variation in how people use AI. Agents, harnesses, workflows, models, prompts, plugins, skills. I see some complaints and think &amp;quot;well &lt;em&gt;I&#39;ve&lt;/em&gt; never had that problem myself&amp;quot;, and I don&#39;t know if it is the codebase and domain I&#39;m working in, or the models I&#39;m using, or the prompts and context engineering, or just the whims of the RNG. No guarantees, no promises, this is just me saying what I&#39;ve found works for me.&lt;/p&gt;

&lt;h3 id=&#34;is-this-actually-better&#34;&gt;Is This Actually &lt;em&gt;Better&lt;/em&gt;?&lt;/h3&gt;

&lt;p&gt;.... maybe? Sort of? Partly?&lt;/p&gt;

&lt;p&gt;I&#39;ve seen people throw around stats for how actually writing code is only N% of the work we do, and so even if AI writes code 3-5x faster, it&#39;s only a partial speedup. Lot of truth to that.&lt;/p&gt;

&lt;p&gt;We&#39;re still pretty early in the adoption/hype curve. At some point you have to actually &lt;em&gt;maintain&lt;/em&gt; codebases that were built with The New Shiny Toy, and then we all realize the horrible mistakes we made during the early hype period. Redux is a classic example of that :) During 2015-2016, people put Redux in &lt;em&gt;sooo many places it should never have been used&lt;/em&gt; (hello controlled forms!), and then by 2017 there was a collective &amp;quot;Oops What Have We Done To Ourselves&amp;quot;.&lt;/p&gt;

&lt;p&gt;My own perspective is limited here. I&#39;ve at least used AI to work on a decent variety of codebases at this point: Replay&#39;s backend and frontend, Redux libraries, some one-off side projects, a couple larger side projects. I&#39;ve found value in all of them. But it&#39;s also only been ~6 months for me, maybe a year for most of us. We&#39;re just seeing the start of the ripple effects.&lt;/p&gt;

&lt;p&gt;I&#39;ve used agents to do a bunch of tasks much faster than I &lt;em&gt;know&lt;/em&gt; I would have done it myself. I&#39;ve seen the agent happily implement individual sub-features I&#39;d had it plan out in a side project, and it wrote each of the files individually matching the listed spec, and &lt;em&gt;none of them got hooked up together at all&lt;/em&gt;, and I didn&#39;t even catch that until it had &amp;quot;finished&amp;quot; all the issues for that feature. I&#39;ve been able to think higher-level, and I&#39;ve had to burn time trying to keep the agent on track. I&#39;ve seen the agent expand my brief thoughts into plans that cover edge cases I never would have considered, and I&#39;ve seen it happily proclaim &amp;quot;clean, no issues&amp;quot; after cranking out a bunch of code and yet missed the blindingly obvious problems.&lt;/p&gt;

&lt;p&gt;But it does seem that &lt;code&gt;while (true) { goodEnough() }&lt;/code&gt; has a value of its own.&lt;/p&gt;

&lt;p&gt;I&#39;ve seen plenty of debates about how AI is going to kill OSS. Maintainers are getting flooded with spammy contributions that look plausible enough. I fully believe that flood is happening. We haven&#39;t had to deal with it as much in the Redux repos, but I&#39;ve certainly seen plenty of examples across the ecosystem. I&#39;ve also seen maintainers say they&#39;re finally working through the issue backlogs and making headway.&lt;/p&gt;

&lt;p&gt;I can tell you it sure feels a lot better &lt;em&gt;mentally&lt;/em&gt; to have found a way to use AI for my work and be happy with the results, than it did when I was spending all my time angsting and fearing for both the industry and my own career. I&#39;m not saying my own mental peace is the only factor to consider here :) but honestly it&#39;s a pretty &lt;em&gt;big&lt;/em&gt; factor personally.&lt;/p&gt;

&lt;p&gt;So I don&#39;t know. I&#39;m using it because I myself have seen evidence it can help me finish my tasks faster and augment my ability to understand code (even if that understanding now takes different forms of effort). I &lt;em&gt;think&lt;/em&gt; that&#39;s a good thing. I see plenty of other people saying similar things. But I fully acknowledge there&#39;s tons of competing pros and cons here, for myself and the industry.&lt;/p&gt;

&lt;h3 id=&#34;what-about-the-craft&#34;&gt;What About the Craft?&lt;/h3&gt;

&lt;p&gt;I talked a lot about the craft of programming earlier. Also kind of ironic. I believed in it, and yet I never felt like my own work ever quite measured up to that ideal. Especially in recent years, I found myself gravitating more towards prototyping, especially with time travel debugging, where my focus was just trying to figure out and prove &amp;quot;is this even &lt;em&gt;possible&lt;/em&gt;?&amp;quot; rather than fully productionize features - and goodness knows &lt;em&gt;that&lt;/em&gt; didn&#39;t involve a lot of &amp;quot;craft&amp;quot; :) (you should see how often &lt;code&gt;// HACK&lt;/code&gt; showed up in parts of my code.)&lt;/p&gt;

&lt;p&gt;So what now? Is there any semblance of a &amp;quot;craft of programming&amp;quot; now that we&#39;re all relying on agents? Soulless Statistical Word Generating Machines, just generating tokens endlessly?&lt;/p&gt;

&lt;p&gt;In some ways, no. That world is gone and it probably isn&#39;t coming back.&lt;/p&gt;

&lt;p&gt;Pick your historical precedent. Cars eliminated horses, etc.&lt;/p&gt;

&lt;p&gt;I talked to a genius-level senior engineer recently. He&#39;s built a reputation as someone who has incredibly deep knowledge and has pulled off some amazing feats. He&#39;s considering leaving the industry soon. He compared it to woodworking. Someone can hand-make a wood table, careful crafting, lots of attention. In some cases, they can command a higher price for a hand-crafted item.&lt;/p&gt;

&lt;p&gt;No one&#39;s going to pay extra just so a human can hand-craft a &lt;code&gt;for&lt;/code&gt; loop.&lt;/p&gt;

&lt;p&gt;This saddens me. I wish it weren&#39;t the case. Please see previous section on Capitalism.&lt;/p&gt;

&lt;p&gt;And yet.&lt;/p&gt;

&lt;p&gt;I personally have found that I am able to use AI tools successfully, &lt;em&gt;because&lt;/em&gt; of my deep experience and knowledge.&lt;/p&gt;

&lt;p&gt;AI has been able to &lt;em&gt;amplify&lt;/em&gt; my intent. It&#39;s a force multiplier. I use it to research portions of a codebase, write up a doc, draw diagrams, help me understand how something works. I feed it several paragraphs of an idea for a feature or a task, it reads a few dozen files and pulls in examples, and it spits out a much more detailed plan that covers a bunch of edge cases I never even would have considered. I modify the plan, I make some adjustments based on my own knowledge, I tell it &amp;quot;implement&amp;quot;, and it cranks out the changes I want far faster than I could have made the edits. I&#39;ve seen drastically different results depending on the quality of the context and the prompt. There is &lt;em&gt;skill&lt;/em&gt; in providing the right context, and yes, &lt;code&gt;SKILL.md&lt;/code&gt; files. It is literally a skill issue :)&lt;/p&gt;

&lt;p&gt;It&#39;s certainly not perfect. Even with today&#39;s models there&#39;s mistakes. But it&#39;s more often mistakes of &lt;em&gt;intent&lt;/em&gt; than syntax or hallucinations.&lt;/p&gt;

&lt;p&gt;And &lt;em&gt;I&#39;m&lt;/em&gt; the one in charge. &lt;em&gt;I&#39;m&lt;/em&gt; driving. I provide the vision, the intent, the directions. And I heavily leverage my expertise to keep the AI on the right track, redirecting when it goes off the rails, asking &amp;quot;wait have we considered this approach?&amp;quot;, insisting that we do things the way &lt;em&gt;I&lt;/em&gt; want.&lt;/p&gt;

&lt;p&gt;I&#39;ve read a bunch of articles lately saying that AI has exposed a split in programmers. There&#39;s people who were in it &lt;em&gt;for the craft itself&lt;/em&gt;, and then there&#39;s people who were in it for the &lt;em&gt;results&lt;/em&gt;, the output, the end product.&lt;/p&gt;

&lt;p&gt;I thought I was in it for both. I got so much joy from saying &amp;quot;this &lt;em&gt;didn&#39;t&lt;/em&gt; exist, and then I thought and I worked, and now it &lt;em&gt;does&lt;/em&gt; exist&amp;quot;. Creation ex nihilo. But also nothing made me happier than those 6-hour uninterrupted deep flow music thumping mind on autopilot deep in the code sessions.&lt;/p&gt;

&lt;p&gt;I still care about the craft. I want to build apps the right way.&lt;/p&gt;

&lt;p&gt;But maybe it was a bit &lt;em&gt;more&lt;/em&gt; about the final result than I thought.&lt;/p&gt;

&lt;p&gt;I really hadn&#39;t worked on any side projects in the last 10 years since I started maintaining Redux. My todo list is perpetually overflowing, there&#39;s always more self-imposed priorities and responsibilities than I can ever get around to. I didn&#39;t have time or brain space or priority to work on code &amp;quot;for fun&amp;quot;. Day job, second unpaid job as maintainer, trying to have a life, can&#39;t fit anything else in there.&lt;/p&gt;

&lt;p&gt;In the last few months I&#39;ve actually whipped up a few side projects! There were ideas that popped into my head. And normally I&#39;d have dismissed them and said &amp;quot;I don&#39;t even have brain space to think about these, much less time to write the code&amp;quot;. But now... if I could spare 30+ minutes to spin it up, I could get an agent session fleshing out a project plan, and then maybe babysit a session while I&#39;m on the couch in the evening. Still &lt;em&gt;some&lt;/em&gt; time and mental overhead, but a far lower barrier to entry than before. So yeah, I actually have built several small projects I never would have even &lt;em&gt;tried&lt;/em&gt; to do otherwise. And it&#39;s been fun and exciting to see those random ideas come to life.&lt;/p&gt;

&lt;p&gt;And to my surprise, I&#39;ve actually re-found the joy and fairly deep flow in those long coding sessions where I&#39;m &lt;em&gt;driving agents&lt;/em&gt;! Yeah, I&#39;m shocked too. Never would have predicted this. Maybe it&#39;s not always &lt;em&gt;quite&lt;/em&gt; as deep. Certainly the actual work is different. But with my own hands-on human-in-the-loop agent dev workflow, my brain is &lt;em&gt;engaged&lt;/em&gt;. I&#39;m thinking through implementation approaches, having the agent flesh out my ideas, reviewing the output, deciding what to change and what&#39;s next and when this subtask session is done and it&#39;s time to move on. And I truly have had numerous coding sessions where I found myself deep in that same flow, and woke up at the end thrilled and excited with what I had just built, via an agent. My brain isn&#39;t off. I&#39;m not just mindlessly stamping &amp;quot;LGTM&amp;quot;. I&#39;m &lt;em&gt;thinking&lt;/em&gt;. I&#39;m &lt;em&gt;creating&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So maybe I&#39;m not writing the actual lines of code now. Not crafting the perfect elegant algorithm.&lt;/p&gt;

&lt;p&gt;But I &lt;em&gt;am&lt;/em&gt; still &amp;quot;crafting&amp;quot; the software, in a way. I&#39;m applying my taste, my judgment, my expertise. Not just in &amp;quot;here&#39;s the next ticket in my queue&amp;quot;, but very intentionally deciding what and &lt;em&gt;how&lt;/em&gt; to build the solutions, and what the right results are. I&#39;m supplying the context, figuring out the right prompts, building the guardrails, and providing the vision.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I&lt;/em&gt; can do that, because I have an entire career&#39;s worth of experience and knowledge. I don&#39;t know how juniors today are supposed to build that expertise.&lt;/p&gt;

&lt;p&gt;But hey. That was always the job.&lt;/p&gt;

&lt;h2 id=&#34;final-thoughts&#34;&gt;Final Thoughts&lt;/h2&gt;

&lt;p&gt;Well. That was long. (Audience: &amp;quot;YES MARK WE &lt;em&gt;KNOW&lt;/em&gt;!&amp;quot;)&lt;/p&gt;

&lt;p&gt;Not sure what&#39;s worse - you sitting here through this whole thing, or me having written ~12K words in one single Saturday :)&lt;/p&gt;

&lt;p&gt;Like I said, I have fears. I don&#39;t have answers to a lot of big questions. It&#39;s always been a big scary world, now it seems like things really are accelerating out of control.&lt;/p&gt;

&lt;p&gt;But I never could control the rest of the world. I can only control me, and my thoughts, and my actions.&lt;/p&gt;

&lt;p&gt;I&#39;m sure some of you disagree with some of the opinions I&#39;ve stated here. That&#39;s fine. I&#39;m not trying to convince anyone. (Well okay maybe the &amp;quot;3x limits&amp;quot; and &amp;quot;rest is core, not earned&amp;quot; things.) Go do whatever works for you.&lt;/p&gt;

&lt;p&gt;A friend pointed out that this is probably just a really long rendition of the &amp;quot;stages of grief&amp;quot;. Haven&#39;t tried to map them to what I wrote, but sure, I buy that.&lt;/p&gt;

&lt;p&gt;Writing this was kinda cathartic :) I knew I had thoughts and opinions. Not sure I knew I had &lt;em&gt;this&lt;/em&gt; many just sitting there waiting to come to life :)&lt;/p&gt;

&lt;p&gt;Usually I fill my posts with dozens of links and cross-references and citations, backing up my arguments. Not gonna bother with that here. This post is about my thoughts, feelings, experiences, and opinions. You can find examples of everything I described in about every other HN and Twitter post. (I mean if you &lt;em&gt;desperately&lt;/em&gt; want actual examples email me and I&#39;ll dump a laundry list of links or something :) )&lt;/p&gt;

&lt;p&gt;If you found any of this useful at all, lemme know. I honestly have no idea how anyone&#39;s going to respond to this post. I &lt;em&gt;suspect&lt;/em&gt; it could strike a chord. We&#39;ll see.&lt;/p&gt;

&lt;p&gt;And now that we&#39;ve gone through all that, on to the part some of you were &lt;em&gt;really&lt;/em&gt; asking about :)&lt;/p&gt;

&lt;p&gt;Pop on over to &lt;a href=&#34;https://blog.isquaredsoftware.com/2026/05/ai-thoughts-part-2-agent-workflow-tools/&#34;&gt;the next post to see details on my own personal OpenCode agent setup and coding workflow&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks, y&#39;all!&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>