<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Agentic-Engineering on dwmkerr.com</title><link>https://dwmkerr.com/tags/agentic-engineering/</link><description>Recent content in Agentic-Engineering on dwmkerr.com</description><generator>Hugo -- gohugo.io</generator><language>en-uk</language><managingEditor>Dave Kerr</managingEditor><copyright>Copright &amp;copy; Dave Kerr</copyright><lastBuildDate>Fri, 17 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://dwmkerr.com/tags/agentic-engineering/index.xml" rel="self" type="application/rss+xml"/><item><title>Building Evidence with Agents</title><link>https://dwmkerr.com/building-evidence-with-agents/</link><pubDate>Fri, 17 Jul 2026 00:00:00 +0000</pubDate><guid>https://dwmkerr.com/building-evidence-with-agents/</guid><description>&lt;p&gt;One of the most useful things I have found for agents when developing software is &lt;em&gt;gathering evidence&lt;/em&gt;. Specifically, when changes are proposed to some kind of system (lets say for example via a pull request), that as much evidence of correctness is gathered as possible.&lt;/p&gt;
&lt;p&gt;As an example, this is a pull request for a spike that shows how to integrate &lt;a href="https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/main/okf/SPEC.md"&gt;OKF&lt;/a&gt; exports into &lt;a href="https://github.com/mckinsey/agents-at-scale-ark"&gt;Ark&lt;/a&gt;. The specific details of this change are not important, what is important is that it will change the CLI in a fairly specific way. Previously, I would normally have asked whoever worked on this to record some screenshots - it at least lets me eyeball how it looks. With agentic, we can add a tonne of this with little effort:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/dwmkerr/agents-at-scale-ark/pull/186"&gt;&lt;img src="./images/pr-top.png" alt="The spike PR, with evidence embedded"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This pull request has the changes, but also a lot of &lt;em&gt;evidence&lt;/em&gt; attached - not just unit test results or coverage (which is simply hygiene), but also screenshots of what the new CLI looks like, and even recordings.&lt;/p&gt;
&lt;p&gt;The whole pull request - and all of this evidence - was created async with a single run of Claude Code with Fable.&lt;/p&gt;
&lt;h2 id="why-evidence"&gt;Why Evidence&lt;/h2&gt;
&lt;p&gt;Essentially - skip the code or spec review until you can see what the output is like. This is the smell-test, if it looks directionally correct, then you continue with the more formal review process. This is increasingly important as features end-to-end are built without supervision.&lt;/p&gt;
&lt;p&gt;The most valuable forms of evidence include:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Links to ephemerally provisioned environments where you can actually see and interact with what has been built&lt;/li&gt;
&lt;li&gt;Screenshots of user interfaces showing before / after&lt;/li&gt;
&lt;li&gt;Video recordings of user interfaces (even better than the above)&lt;/li&gt;
&lt;li&gt;Screenshots / recordings of terminal interfaces&lt;/li&gt;
&lt;li&gt;Recordings of other types of channel interface - for example, mobile emulator recordings (for checking what things&amp;rsquo;ll look like on iOS or Android)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;What does this mean in practice and what should your team do?&lt;/p&gt;
&lt;h2 id="what-you-should-do-differently"&gt;What you should do differently&lt;/h2&gt;
&lt;p&gt;Pretty simple - invest the time in building evidence gathering machinery. It pays compound interest, and allows you to avoid reviewing something that doesn&amp;rsquo;t look right. Spend more time on the machinery around the pipeline rather than the specific features themselves (or at least balance it).&lt;/p&gt;
&lt;h2 id="a-ready-to-go-tool-for-your-tooling---terminal-recordings"&gt;A ready-to-go tool for your tooling - terminal recordings&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/dwmkerr/shellwright"&gt;Shellwright&lt;/a&gt; is Playwright for the shell: an MCP server giving agents a real PTY to type into, screenshot, and record as GIFs. I use this all the time for projects with CLIs, and specifically built it so that agents can provide evidence of changes such as recordings before and after.&lt;/p&gt;
&lt;p&gt;Recap of the example in the opening: an agent built &lt;a href="https://github.com/dwmkerr/agents-at-scale-ark/pull/186"&gt;&lt;code&gt;ark okf export&lt;/code&gt;&lt;/a&gt; overnight - a command that exports a Kubernetes cluster&amp;rsquo;s agent configuration as markdown files (&lt;a href="https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/main/okf/SPEC.md"&gt;Google&amp;rsquo;s Open Knowledge Format&lt;/a&gt;). Tests passed. But the real claim was &amp;ldquo;any agent can now read your cluster from plain files, no cluster access&amp;rdquo; - so the agent recorded a live Claude Code session in the exported directory, driven through Shellwright:&lt;/p&gt;
&lt;p&gt;&lt;a href="./images/claude-live-okf.gif"&gt;&lt;img src="./images/claude-live-okf.gif" alt="Claude Code reading the cluster from exported markdown"&gt;&lt;/a&gt;
The key screenshot - the answer cites the files and line numbers it read:&lt;/p&gt;
&lt;p&gt;&lt;a href="./images/10-answer-tools.png"&gt;&lt;img src="./images/10-answer-tools.png" alt="Claude answers with file citations"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That one image did more for my review than the test suite: the files are readable, the links work, the premise holds.&lt;/p&gt;
&lt;h2 id="improving-the-machinery"&gt;Improving the machinery&lt;/h2&gt;
&lt;p&gt;The first recording had a flaw - the answer appeared only in the GIF&amp;rsquo;s final frame, a fraction of a second. I said &amp;ldquo;I don&amp;rsquo;t see Claude reading though?&amp;rdquo; and the agent re-recorded. A real review finding, from a recording, in seconds.&lt;/p&gt;
&lt;p&gt;The fixes fed back into the tooling: a &lt;code&gt;hold_last_ms&lt;/code&gt; option so GIF endings don&amp;rsquo;t flash past, and a &lt;code&gt;shell_wait_for&lt;/code&gt; tool for the &amp;ldquo;is the TUI still busy?&amp;rdquo; problem (&lt;a href="https://github.com/dwmkerr/shellwright/pull/79"&gt;PR here&lt;/a&gt;). The machinery improves.&lt;/p&gt;
&lt;h2 id="thats-it"&gt;That&amp;rsquo;s it&lt;/h2&gt;
&lt;p&gt;This doesn&amp;rsquo;t replace tests or reading the code - it sequences the review. See it work, check it&amp;rsquo;s the right thing, then read the diff.&lt;/p&gt;
&lt;p&gt;The spike PR is &lt;a href="https://github.com/dwmkerr/agents-at-scale-ark/pull/186"&gt;here&lt;/a&gt;, the Shellwright improvements &lt;a href="https://github.com/dwmkerr/shellwright/pull/79"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><category>CodeProject</category></item><item><title>Fable vs My Chemical Romance</title><link>https://dwmkerr.com/fable-vs-my-chemical-romance/</link><pubDate>Fri, 10 Jul 2026 00:00:00 +0000</pubDate><guid>https://dwmkerr.com/fable-vs-my-chemical-romance/</guid><description>&lt;p&gt;I&amp;rsquo;ve been spending 15 minutes each morning with Fable - planning a days worth of development, discussing features and architecture, scheduling the work and kicking it off. End of day I spend 15 minutes reviewing and rinse and repeat. This is half a &amp;rsquo;testing Fable&amp;rsquo; exercise, and half a &amp;lsquo;get better at scheduling a days worth of work&amp;rsquo; exercise. However, on a drive back from a physiotherapy appointment, I was thinking why not kick off a monster job? That would just be fun.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update: this started as a bit of fun, but it turned out to be a hard enough long-horizon task that I have codified it into a Statement of Work I now use to test model and agent capability. The SOW and demo clips are at the end.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="./images/v30.png"&gt;&lt;img src="./images/v30.png" alt="Fable vs My Chemical Romance"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;At the time the music on Spotify was My Chemical Romance, who I&amp;rsquo;d &lt;a href="https://www.theguardian.com/music/2026/jul/01/my-chemical-romance-review-anfield-stadium-liverpool-uk-tour"&gt;just seen at Anfield&lt;/a&gt;. The concert was great so I decided the goal would be &amp;ldquo;make me a home version. singalong karaoke style lyrics on the screen. official videos where they exist, live footage otherwise&amp;rdquo;. I&amp;rsquo;d also prompt a few tips around process but let it run.&lt;/p&gt;
&lt;p&gt;This is not a good test of coding practices (with my teams that is a process of evolution as we work out how best to move towards &lt;a href="https://dwmkerr.com/agentic-orchestration-protocols/"&gt;agentic engineering&lt;/a&gt;), just a fun open ended exercise.&lt;/p&gt;
&lt;p&gt;I created a &lt;code&gt;README.md&lt;/code&gt; with the following mission:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Create a full concert-length video I can project on my TV: a home version of the
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;My Chemical Romance gig I went to. Check YouTube and my Spotify playlist to find
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;the setlist. Make 10 mini videos with some styles, karaoke sing-along lyrics
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;running on them, cool visuals behind. Official music videos for songs like The
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Black Parade where they exist, live concert recordings otherwise. Build the
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;machine to do this: use subagents, skills, create tools, create CLIs, run them,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;build all the machinery you need to solve, execute and verify this. You&amp;#39;re in a
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git repo: make a scratch folder and commit as you go. Keep a task list and a
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;journal of key events. Build and run the machine until it works.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And the prompt:&lt;/p&gt;
&lt;p&gt;&lt;a href="./images/01-start-work.png"&gt;&lt;img src="./images/01-start-work.png" alt="The prompt: yoloclaude, Fable 5 on high effort, bypass permissions on."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="tuning-process"&gt;Tuning process&lt;/h2&gt;
&lt;p&gt;A lot of guidance suggests &amp;lsquo;define the goal, not the process&amp;rsquo; (see &lt;a href="https://business.google.com/aunz/think/ai-excellence/agentic-marketing-ai-strategy/"&gt;Think with Google&lt;/a&gt; and &lt;a href="https://tylerfolkman.substack.com/p/prompt-engineering-is-over-i-built"&gt;this piece by Tyler Folkman&lt;/a&gt;). Anthropic have also built modes like &lt;a href="https://claude.com/blog/introducing-dynamic-workflows-in-claude-code"&gt;ultracode&lt;/a&gt; and &lt;a href="https://code.claude.com/docs/en/agent-teams"&gt;teams&lt;/a&gt; where Claude will set up the appropriate teams for the work (or try to). This is generally where I differ: for open-ended work I&amp;rsquo;m happy to define the goal and let the agent find the path, but for more complex, audited or sensitive processes, where predictability and explainability matter, building a framework for the operations is important. This was obviously not one of those cases, just a quick experiment. So I did suggest a few things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Playwright for browser automation, to perform more complex searches and analysis&lt;/li&gt;
&lt;li&gt;Sub-agents, to preserve context&lt;/li&gt;
&lt;li&gt;Building small, simple tools that can be composed together into larger systems&lt;/li&gt;
&lt;li&gt;Building machines that use those tools&lt;/li&gt;
&lt;li&gt;Building verifications and checkpoints&lt;/li&gt;
&lt;li&gt;Creating a human-in-the-loop point where I can review samples and the execution plan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Essentially; build yourself tools, build a machine to solve my problem, then run the machine and we&amp;rsquo;ll tune the machine afterwards.&lt;/p&gt;
&lt;h2 id="the-result"&gt;The result&lt;/h2&gt;
&lt;p&gt;About $500 worth of tokens and many hours later (this used less than I expected, I thought I&amp;rsquo;d see more cost from image processing). To be clear on the money: this ran on my personal Max subscription, not anything work-related, and that $500 is the API-equivalent value of the tokens burned, not a bill. On a Max plan you pay the flat monthly fee, and Fable draws it down faster than Opus because it is priced at twice the rate.&lt;/p&gt;
&lt;p&gt;&lt;a href="./images/tv.jpg"&gt;&lt;img src="./images/tv.jpg" alt="The finished concert playing on the living room TV: karaoke lyrics over blue-lit live footage."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="how-it-ran"&gt;How it ran&lt;/h2&gt;
&lt;p&gt;Under the covers, after reviewing the execution plan and the session logs, this is roughly what happened.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A 30-agent research sweep to work out the real setlist and find a good source for each of the programme items. Playwright let it compare sources and do real research on the open web, which is expensive in tokens but vastly increases the options it has.&lt;/li&gt;
&lt;li&gt;A pipeline to gather the source video and audio for each song.&lt;/li&gt;
&lt;li&gt;A lyrics-to-karaoke compiler that turns synced LRC files into ASS subtitle karaoke, word-level where it could get the timing, line-level where it could not.&lt;/li&gt;
&lt;li&gt;A renderer with three modes: official music video, live footage over studio audio, and a generated visualizer backdrop for the audio-only tracks.&lt;/li&gt;
&lt;li&gt;An audio-video sync tool that aligns live footage to the studio track using chroma and onset features, and an assembler that stitches everything into ten act-titled mini-films.&lt;/li&gt;
&lt;li&gt;A verification pass (39 agents) checking every segment for resolution, duration, and lyric sync. I rate this step highly; it mirrors the process I follow on many professional jobs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="./images/02-research.png"&gt;&lt;img src="./images/02-research.png" alt="A 30-agent research workflow, one agent per song, hunting sources."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The output was 105 minutes of concert across ten files, plus a little web app to swap backgrounds and lyric styles per song.&lt;/p&gt;
&lt;p&gt;Is it impressive? I don&amp;rsquo;t know, I don&amp;rsquo;t do video editing / researching tasks. My 15 mins per day with Fable write-up coming soon showed me results I can comment on more realistically (a more complex software engineering project).&lt;/p&gt;
&lt;h2 id="the-hardest-part-syncing-footage-to-studio-audio"&gt;The hardest part: syncing footage to studio audio&lt;/h2&gt;
&lt;p&gt;The bit that took the most work was using live concert footage as the visuals while playing the clean studio recording as the audio. A live band never plays at exactly the album tempo, so if you just mute the footage and drop the studio track underneath, the two drift apart. Within a minute the drummer is visibly hitting things you can&amp;rsquo;t hear.&lt;/p&gt;
&lt;p&gt;Here is how the machine solved it for one song, House of Wolves, with pro-shot footage:&lt;/p&gt;
&lt;p&gt;&lt;a href="./images/sync-process.png"&gt;&lt;img src="./images/sync-process.png" alt="Syncing live footage to the studio track: mel-spectrograms of the live and studio audio, with a chroma-CQT time-warp between them, footage chopped at camera cuts and retimed within an imperceptible speed clamp."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It takes a mel-spectrogram (a picture of the sound) of both the live audio and the studio master, then computes a mapping between them with chroma-CQT dynamic time warping, which matches on harmonic content rather than the raw waveform. The footage is chopped at every camera cut and each shot is placed on the studio timeline at its matched position, sped up or slowed down by an amount small enough not to notice (clamped to 12%, red for faster, blue for slower). The clever bit is re-anchoring at every camera cut: the eye already accepts a jump at a cut, so drift can only build up within a single shot, never across the whole song. Here 129 cuts became 35 anchored chunks, and it reports the honest numbers for the result (93ms alignment error, 100% coverage, verdict GOOD).&lt;/p&gt;
&lt;p&gt;None of this was a technique I gave it. It researched the approach and built the tool itself, including working out the re-anchor-at-cuts trick on its own. The diagram here just visualises what it did, with the real numbers from the run.&lt;/p&gt;
&lt;h2 id="interesting-observations"&gt;Interesting observations&lt;/h2&gt;
&lt;p&gt;For a job like this I only stepped in a handful of times. Probably the most meaningful suggestion I made was an idea: could it read the beat from the drummer&amp;rsquo;s arms, the crowd head-banging and the stage lights flashing, and work out the rhythm that way? It went and tried.&lt;/p&gt;
&lt;p&gt;Left to itself, it never reached for another model. All of the video and audio sync work was done with tooling it wrote itself, and it stayed entirely inside its own capabilities. It only started looking at other models like Gemini for the video processing after I suggested that a different model might be better suited to that part of the job. On its own it did not seem to consider that reaching outside itself might be the better move, which felt like a notable blind spot for an open-ended task.&lt;/p&gt;
&lt;p&gt;The other thing that made me laugh: at one point Fable&amp;rsquo;s own safeguards flagged one of its own messages and it fell back to Opus 4.8 mid-task, then carried on. Almost certainly the lyrical content again - My Chemical Romance lyrics are dark, and earlier one of its sub-agents had already tripped a content filter for echoing them back.&lt;/p&gt;
&lt;p&gt;&lt;a href="./images/fableblocked.png"&gt;&lt;img src="./images/fableblocked.png" alt="Fable 5&amp;rsquo;s safeguards flagging a message and switching to Opus 4.8."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t think I&amp;rsquo;ll run this exercise again - it was a bit of fun on the side that I thought I&amp;rsquo;d share before I get into my wider Fable experiments. I&amp;rsquo;ve got a couple of other gigs coming up anyway: &lt;a href="https://www.seetickets.com/event/misery-index/rebellion/3632312"&gt;Misery Index&lt;/a&gt;, &lt;a href="https://www.chelseawolfe.net/"&gt;Chelsea Wolfe&lt;/a&gt; and &lt;a href="https://igorrr.com/"&gt;Igorrr&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you want the real thing: &lt;a href="https://open.spotify.com/album/0FZK97MXMm5mUQ8mtudjuK"&gt;The Black Parade on Spotify&lt;/a&gt; and &lt;a href="https://www.mychemicalromance.com/"&gt;My Chemical Romance&lt;/a&gt;. 🖤&lt;/p&gt;
&lt;h2 id="the-sow"&gt;The SOW&lt;/h2&gt;
&lt;p&gt;The hard part, syncing live footage to a studio track, is now a standalone brief I can hand to any model or agent. It runs at two levels: silent footage first, where it has to identify the song and align it from the picture alone, then the same footage with audio. Effort (tokens, tool calls, time) is measured but not scored. What is judged is whether the result actually plays and stays in sync.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The SOWs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/dwmkerr/agentic-engineering-sows"&gt;github.com/dwmkerr/agentic-engineering-sows&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Level 1 input, silent&lt;/td&gt;
&lt;td&gt;&lt;a href="https://youtu.be/GJzgRycBfws"&gt;watch&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Level 2 input, with audio&lt;/td&gt;
&lt;td&gt;&lt;a href="https://youtu.be/UUgaolX67OM"&gt;watch&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fable output&lt;/td&gt;
&lt;td&gt;&lt;a href="https://youtu.be/xi2YMHondsk"&gt;watch&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For the record, the whole session, the original build plus days of tinkering, editing and this write-up, cost &lt;strong&gt;$485.43&lt;/strong&gt; across three models: Fable 5 did the build ($322.65), Opus 4.8 covered the safeguard fall-backs and most of the later editing ($162.07), and a little Haiku for search ($0.70). Roughly 2.3m input and 1.7m output tokens, around 990 tool calls and 24 web searches, 80+ sub-agents spun up across ultracode workflows, 9h 25m of API time spread across about five days, and 7,246 lines of code added. Measured, not scored.&lt;/p&gt;</description><category>CodeProject</category></item><item><title>Bipolar Disorder, Dysregulation &amp; AI</title><link>https://dwmkerr.com/bipolar-dysregulation-and-ai/</link><pubDate>Tue, 09 Jun 2026 00:00:00 +0000</pubDate><guid>https://dwmkerr.com/bipolar-dysregulation-and-ai/</guid><description>&lt;p&gt;At AI Native DevCon London 2026 I gave a talk about bipolar disorder, what living with it has forced me to learn, and how the same patterns keep showing up in the way we work with AI.&lt;/p&gt;
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/ACL7_EsfIio" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;h2 id="what-the-talk-is-about"&gt;What the talk is about&lt;/h2&gt;
&lt;p&gt;Managing bipolar disorder is largely about regulation. There are things that push your state around - sleep, rhythm, stress, people, substances - and the work is to spot the ones that destabilise you (dysregulators) and counterbalance them with the ones that steady you (regulators).&lt;/p&gt;
&lt;p&gt;This is hard partly because the condition can come with compromised interoception - your sense of your own internal state, the thing you&amp;rsquo;d normally rely on to tell where you are. When that&amp;rsquo;s unreliable, you can&amp;rsquo;t fully trust your own read on yourself, so you lean on what&amp;rsquo;s around you instead.&lt;/p&gt;
&lt;p&gt;Once you&amp;rsquo;ve spent years pathologising your own behaviour, looking for what&amp;rsquo;s adaptive and what isn&amp;rsquo;t, you start to recognise the same shapes elsewhere. Over the last few years I&amp;rsquo;ve seen a lot of them in AI-native engineering:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Transformative shifts in core beliefs&lt;/li&gt;
&lt;li&gt;Addiction&lt;/li&gt;
&lt;li&gt;Grandiosity&lt;/li&gt;
&lt;li&gt;Attentional fragmentation&lt;/li&gt;
&lt;li&gt;Pressured speaking&lt;/li&gt;
&lt;li&gt;Maladaptive creativity&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The counterweights - the regulators for each of these - are described in the talk.&lt;/p&gt;</description><category>CodeProject</category></item><item><title>Agentic Engineering Protocols: The Ralph Wiggum Loop</title><link>https://dwmkerr.com/ralph-wiggum-loop/</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><guid>https://dwmkerr.com/ralph-wiggum-loop/</guid><description>&lt;h2 id="the-ralph-wiggum-loop"&gt;The Ralph Wiggum Loop&lt;/h2&gt;
&lt;p&gt;The Ralph Wiggum Loop is one of the earliest and most simple agentic development patterns, a somewhat whimsical and silly approach to getting a coding agent to run continuously to solve a problem, with an extremely simple orchestration pattern. Ralph is not a pattern I&amp;rsquo;d really recommend for real-world problems but you&amp;rsquo;ll see it around and hear about it and it&amp;rsquo;s fun to explore and play with.&lt;/p&gt;
&lt;p&gt;The pattern is simply &amp;ldquo;run an agent in a loop, with a single prompt, until it thinks it&amp;rsquo;s done&amp;rdquo;. Very few instructions, almost no orchestration at all, often with no intermediate steps tracked, it can be surprisingly effective for certain types of task. &lt;a href="https://simpsons.fandom.com/wiki/Ralph_Wiggum"&gt;Ralph Wiggum&lt;/a&gt; is a character from The Simpsons who is not particularly smart but kind of good natured and persistent.&lt;/p&gt;
&lt;p&gt;&lt;a href="./ralphwiggum-smart.gif"&gt;&lt;img src="./ralphwiggum-smart.gif" alt="Ralph Wiggum"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is part of the Agentic Engineering Protocols series:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dwmkerr.com/blog/agentic-orchestration-protocols/"&gt;Agentic Engineering Protocols: Intro and Superpowers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="what-it-is"&gt;What It Is&lt;/h3&gt;
&lt;p&gt;At its core, the Ralph protocol is an endless loop:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Loop until claude thinks it&amp;#39;s done...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; true; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Run an agent such as claude with instructions&amp;#34;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; claude -p &lt;span style="color:#e6db74"&gt;&amp;#34;Your desired end state description&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Grab a cup of tea.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The prompt describes what done should be. Each iteration, the agent runs a single session, does some work, and exits. The loop feeds it the same prompt again.&lt;/p&gt;
&lt;p&gt;No instructions on how to to the end state are included. No orchestration patterns are used. You&amp;rsquo;re basically letting the agent figure it out. Typically it will change files, build and test, and repeat. The state of the code itself implies where the agent is in the process.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s an &lt;a href="https://claude.com/plugins/ralph-loop"&gt;official Anthropic plugin&lt;/a&gt; that adds stop hooks and completion detection, but the original Ralph that went viral is just a dumb loop.&lt;/p&gt;
&lt;h2 id="why"&gt;Why&lt;/h2&gt;
&lt;p&gt;Recent LLMs have pretty big context windows and agents are increasingly (somewhat disturbingly) smart. But at the time the loop was shared, context windows were smaller and failures were more common. In those cases the agent process (such as &lt;code&gt;claude&lt;/code&gt;) would terminate early (for example due to running out of context). Typically some work would have been done, the code would be in an intermediate state, and then the next iteration picks up from there.&lt;/p&gt;
&lt;p&gt;Increasingly complex tasks can be one-shot nowadays, context windows are huge, agents are far more smart, skills are more effective, subagents are more efficient, and this pattern is less common to see, but its fun to try it out.&lt;/p&gt;
&lt;h3 id="ralph-wiggum-vs-a-tedious-task"&gt;Ralph Wiggum vs a Tedious Task&lt;/h3&gt;
&lt;p&gt;My team had been wanting to move a large feature from our open source project &lt;a href="https://github.com/mckinsey/agents-at-scale-ark"&gt;Ark&lt;/a&gt; (a Kubernetes based agentic toolkit) to our &lt;a href="https://github.com/mckinsey/agents-at-scale-marketplace"&gt;marketplace&lt;/a&gt; of smaller modules. This means deleting a lot of code, eliminating tests, removing docs and cross references, screenshots, and so on. It&amp;rsquo;s kind of tedious - remove stuff, test, rinse and repeat. Claude would probably one-shot it well given how &lt;a href="https://github.com/mckinsey/agents-at-scale-ark/tree/main/tests"&gt;many integration tests and verifications we have as specs&lt;/a&gt;. But I decided this was a good way to show off Ralph&amp;rsquo;s style.&lt;/p&gt;
&lt;p&gt;When we&amp;rsquo;re adding code, we try to be rigorous. Specs, red/green tests, docs, skills to follow architectural patterns and so on. Reasonably careful orchestration, and a good amount of discussion if needed. Eliminating code is more straightforward.&lt;/p&gt;
&lt;h2 id="running-the-loop"&gt;Running the Loop&lt;/h2&gt;
&lt;p&gt;We need to eliminate code from low-level operators, a CLI, two SDKs, docs, tests, deployments, pipelines, specs. We don&amp;rsquo;t need to one shot it, we could quite easily ask the agent &amp;ldquo;remove a chunk, then stop and test&amp;rdquo; and then have it repeat this process.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the loop (slightly simplified, &lt;a href="./ralph-loop.sh"&gt;ralph-loop.sh&lt;/a&gt; is the original):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Seed a progress file for Claude to maintain between iterations.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;touch progress.md
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;PROMPT&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;Evaluations are no longer core in Ark, we are moving them to a marketplace.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;Remove the CRDs, docs, demos, integration tests, references, SDKs, UI, the lot.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;Read progress.md for what has been done so far. Update it as you work.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;Do one task, update progress.md, commit, then stop.&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; $ITERATIONS -lt &lt;span style="color:#ae81ff"&gt;100&lt;/span&gt; &lt;span style="color:#f92672"&gt;]&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ITERATIONS&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$((&lt;/span&gt;ITERATIONS &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$PROMPT&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; | claude -p --dangerously-skip-permissions
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; git add -A &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git commit -m &lt;span style="color:#e6db74"&gt;&amp;#34;ralph: iteration &lt;/span&gt;$ITERATIONS&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; --allow-empty
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sleep &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Quite open ended, few notes on &amp;lsquo;how&amp;rsquo;, just what we want. I added instructions to track process in a file to make it easier to show what happened at the end, and we terminate the loop if the agent thinks it is fully complete (this is janky, don&amp;rsquo;t do it, but it&amp;rsquo;s in-line with common samples and shows the pattern, you&amp;rsquo;re more likely to see claude loop saying it&amp;rsquo;s got nothing to do and have to terminate it).&lt;/p&gt;
&lt;h2 id="what-happened"&gt;What Happened&lt;/h2&gt;
&lt;p&gt;This took 8 iterations. Here&amp;rsquo;s the git log:&lt;/p&gt;
&lt;p&gt;&lt;a href="./images/gitlog.png"&gt;&lt;img src="./images/gitlog.png" alt="Screenshot of the git log"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="./progress.md"&gt;progress.md&lt;/a&gt; is quite interesting (this is just a snippet):&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;### CI/CD and Infrastructure Removal Details
Edited 7 files:
.github/workflows/cicd.yaml:
- Removed ark-evaluator from xray-container-scan matrix
- Removed all install-evaluator references from setup-e2e calls
- Removed !evaluated from standard test chainsaw selector
- Removed e2e-tests-evaluated from report-coverage and check-release needs lists
.github/workflows/deploy.yml — removed ark-evaluator from deploy container build matrix
### Remaining References Found (iteration 6)
Searched entire codebase for evaluat references. Found and fixed:
- RBAC resource lists in broker tests and tenant charts
- Argo workflow evaluation templates
- Chainsaw summary script evaluation functions
- MCP tools evaluation status references
- README project description
- Architecture diagrams
- Claude skills referencing evaluator paths
Preserved (generic English, not Ark CRDs):
- &amp;#34;evaluation-driven methodology&amp;#34; in walkthrough docs
- &amp;#34;ease of evaluation&amp;#34; in disclaimer
- Langfuse/Phoenix observability descriptions
- Historical CHANGELOG entries
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We eliminated tests, parts of the build pipeline, docs references, generated artifacts, skills, samples, demo workflows and so on.&lt;/p&gt;
&lt;p&gt;The final PR is at &lt;a href="https://github.com/mckinsey/agents-at-scale-ark/pull/1323"&gt;refactor: remove evaluations from core&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;451 files changed, 58,763 lines removed — which as a tech lead is a wonderful feeling. This will now be a pluggable module in our &lt;a href="https://github.com/mckinsey/agents-at-scale-marketplace"&gt;marketplace&lt;/a&gt;, easier to test in isolation and evolve at a higher pace. Our codebase is smaller and easier to work with.&lt;/p&gt;
&lt;p&gt;The loop won&amp;rsquo;t work if the agent has to ask for permissions, so I &lt;a href="https://github.com/dwmkerr/dotfiles/blob/main/shell.d/claude.sh"&gt;YOLO-d it&lt;/a&gt; in a container, using a less-privileged identity (I have an over-engineered pattern for running work with different identities which I can share if anyone is interested).&lt;/p&gt;
&lt;h3 id="what-the-loop-missed"&gt;What the loop missed&lt;/h3&gt;
&lt;p&gt;There were a few things that didn&amp;rsquo;t work.&lt;/p&gt;
&lt;p&gt;The more complex integration tests failed. The repo has skills that explain how to run these tests locally, but the skill never fired and the integration tests weren&amp;rsquo;t run. This we could potentially deal with using a pre-push hook or similar, although the suite is time-consuming.&lt;/p&gt;
&lt;p&gt;A process that generates types in an SDK based on the resources in the cluster was not run, leaving us with some stale code. This has been a persistent problem we haven&amp;rsquo;t got around to dealing with and an example of &amp;ldquo;if the process is so complex the LLM gets it wrong more than twice, it&amp;rsquo;s too complex&amp;rdquo;. It&amp;rsquo;s on the backlog but run only occasionally.&lt;/p&gt;
&lt;p&gt;One type that lived in the evaluations code was used elsewhere and got deleted. This would&amp;rsquo;ve been caught if the integration tests ran.&lt;/p&gt;
&lt;p&gt;Asides from these issues, Ralph did a solid job at the mechanical work. The gaps are on our side - our agents should be configured to not believe that a piece of work is complete until all evidence says so. This could be as simple as improving the &lt;code&gt;CLAUDE.md&lt;/code&gt; to say that when a shippable unit of work is done, integration tests must pass locally, a hook, or whatever. Everything like this is an opportunity to improve the overall software-engineering engine - if the agent doesn&amp;rsquo;t one-shot it we improve the system and do better next time.&lt;/p&gt;
&lt;h2 id="thoughts-on-ralph"&gt;Thoughts on Ralph&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s brilliant. A dumb loop with a great name. The work of AI is stressful and disregulating. Ralph brightened up my day. I can&amp;rsquo;t see myself using the pattern, building the script, testing it and so on in a real-world task, but I really wanted to show it off.&lt;/p&gt;
&lt;p&gt;For somewhat mindless &amp;ldquo;just go and make it happen&amp;rdquo; work it does an OK job. Nowadays I&amp;rsquo;d typically go for &lt;a href="https://code.claude.com/docs/en/agent-teams"&gt;teams&lt;/a&gt; (writeup coming soon) for tasks where I am less specific about structure and orchestration. But if you have a chance give Ralph a go it&amp;rsquo;s quite satisfying.&lt;/p&gt;
&lt;p&gt;To try the &lt;a href="https://claude.com/plugins/ralph-loop"&gt;official plugin&lt;/a&gt; in Claude, install it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;claude plugin marketplace add anthropics/claude-code
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;claude plugin install ralph-wiggum@claude-plugins-official
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then run it:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;/ralph-loop &amp;#34;Your prompt here&amp;#34; --max-iterations 10 --completion-promise &amp;#34;DONE&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;p&gt;Agentic Engineering Protocols series:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dwmkerr.com/blog/agentic-orchestration-protocols/"&gt;Agentic Engineering Protocols: Intro and Superpowers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category>CodeProject</category></item><item><title>Agentic Engineering Protocols: Intro and Superpowers</title><link>https://dwmkerr.com/agentic-orchestration-protocols/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><guid>https://dwmkerr.com/agentic-orchestration-protocols/</guid><description>&lt;p&gt;In this series I&amp;rsquo;m going to demonstrate and discuss methodologies and tools for &amp;ldquo;Agentic Engineering&amp;rdquo;. Agentic engineering loosely refers to modern techniques for software engineering that are heavily focused around using agents as much as possible to accelerate work, improve resiliency, automate testing and so on. &amp;ldquo;Protocols&amp;rdquo; are what I&amp;rsquo;ve called some of the specific patterns and tools that are used, such as the Ralph Method, Superpowers, BMAD and Openspec.&lt;/p&gt;
&lt;p&gt;Almost all of these patterns anchor around clarifying the user&amp;rsquo;s &amp;ldquo;intent&amp;rdquo;, building a specification, breaking down into a task list, executing, testing (typically red/green) and performing additional evaluations such as agent assisted exploratory testing. Artifacts built along the way such as goals, specs and task lists are usually tracked in a repo as markdown files for later analysis. Some of these protocols are quick and easy to try out, some are more complex and opinionated.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll update this series periodically with a real-world demonstration of some of the popular protocols that are out there. But to get started, we&amp;rsquo;ll take a look at &lt;strong&gt;Superpowers&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Next in this series: &lt;a href="https://dwmkerr.com/blog/ralph-wiggum-loop/"&gt;Agentic Engineering Protocols: The Ralph Wiggum Loop&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="obra-superpowers"&gt;Obra Superpowers&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/obra/superpowers"&gt;Superpowers&lt;/a&gt; is a very popular (+50K stars at time of writing) framework for agentic software development.&lt;/p&gt;
&lt;p&gt;Superpowers takes you through a common sense flow for software development, essentially:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Brainstorm, clarify intent, challenge assumptions&lt;/li&gt;
&lt;li&gt;Document the goals, build a plan, create a design&lt;/li&gt;
&lt;li&gt;Create an isolated environment / worktree to work in&lt;/li&gt;
&lt;li&gt;Execute the plan, following TDD methodologies&lt;/li&gt;
&lt;li&gt;Review the results and integrate&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is handled with a combination of slash-commands, sub-agents and skills. Superpowers is a good place to start because it&amp;rsquo;s quick and easy to set up and play with. It&amp;rsquo;s less sophisticated than other protocols, but almost all protocols follow a similar pattern (build a spec, then a plan, implement it, and attack and challenge along the way).&lt;/p&gt;
&lt;p&gt;As a demonstration, I&amp;rsquo;ll use my &lt;a href="https://github.com/dwmkerr/shellwright"&gt;Shellwright&lt;/a&gt; project. Shellwright lets an LLM run a terminal and record what&amp;rsquo;s going on (a bit like &lt;a href="https://playwright.dev/"&gt;Playwright&lt;/a&gt; browser automation but for the shell). I can ask my agent to record an action in the shell and get a video of the result (this recording shows the agent opening and closing Vim):&lt;/p&gt;
&lt;p&gt;&lt;a href="./superpowers/shellwright-before.gif"&gt;&lt;img src="./superpowers/shellwright-before.gif" alt="Demo of shellwright"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;My new requirement is simple - I need to be able to optionally include the terminal cursor in the recording and screenshots.&lt;/p&gt;
&lt;p&gt;This is a small simple change that with good instructions and a sensible implementation protocol we should be able to knock out fast. We could just prompt for it, but a protocol like Superpowers will help make the process more structured.&lt;/p&gt;
&lt;h3 id="brainstorming"&gt;Brainstorming&lt;/h3&gt;
&lt;p&gt;You start using Superpowers by &lt;strong&gt;brainstorming&lt;/strong&gt;. Use the &lt;code&gt;/superpowers:brainstorm&lt;/code&gt; slash command and describe what you want:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;/superpowers:brainstorm I want to be able to optionally show the cursor in Shellwright recordings or screenshots&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Permissions are requested, the codebase is explored, clarification is requested:&lt;/p&gt;
&lt;p&gt;&lt;a href="./superpowers/01-brainstorm-clarify.png"&gt;&lt;img src="./superpowers/01-brainstorm-clarify.png" alt="Screenshot of superpowers clarification"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In this example, the brainstorm process actually changed the design considerably. Rather than my initial idea of a parameter to show or hide the cursor, the recommendation was to just respect the state of the in-memory terminal.&lt;/p&gt;
&lt;p&gt;This means in most cases there&amp;rsquo;ll be a cursor, it&amp;rsquo;s only certain programs such as Vim that hide it at certain times. We don&amp;rsquo;t need to let the caller choose to turn it on or off, the terminal does that itself.&lt;/p&gt;
&lt;p&gt;This was a good suggestion, it follows the &lt;a href="https://github.com/dwmkerr/hacker-laws?tab=readme-ov-file#the-principle-of-least-astonishment"&gt;principle of least astonishment&lt;/a&gt;. It keeps my API clean, and I can always make things more configurable in the future if I need to. Being challenged is essential, it&amp;rsquo;s one of the best things about working with other experienced engineers, and LLMs don&amp;rsquo;t tend to do it unless really instructed to do so.&lt;/p&gt;
&lt;p&gt;Approaches are now suggested, with trade-offs:&lt;/p&gt;
&lt;p&gt;&lt;a href="./superpowers/01-brainstorm-approaches.png"&gt;&lt;img src="./superpowers/01-brainstorm-approaches.png" alt="Screenshot of approaches"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I chose the approach that keeps the main flow as-is and adds a separate pass for the cursor rendering, which feels like a good separation of concerns as well as a little less risky.&lt;/p&gt;
&lt;p&gt;There was a bit more discussion around design, all common sense stuff. Finally a plan is written. You can see it in the pull request in &lt;a href="https://github.com/dwmkerr/shellwright/pull/57/changes#diff-729c3aa4f78f8d87f05ffa8a4cb6ff96ee82bb5872fc1526bc7ecbae1e987c52"&gt;&lt;code&gt;docs/plans/2026-02-13-cursor-visibility-design.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Superpowers does a decent amount of exploration using subagents and uses specific planning skills to build the plan. The structure of the plan is less rigorous or prescriptive than some other protocols but it&amp;rsquo;s also pretty easy to follow.&lt;/p&gt;
&lt;p&gt;This structured planning approach is essential, almost every protocol I use spends a lot of time building plans and specs (except for protocols that are more around exploration and experimentation, which is really just to build data for a plan later on).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An early mistake&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Interestingly here&amp;rsquo;s where superpowers (or to be fair, the LLM) struggled. An assumption had been made that the underlying terminal emulator (xterm.js) actually allowed you to check cursor visibility. When moving into the design the agent quickly decided that there is no visibility field exposed in the in the xterm API, and then suggested just always showing the cursor.&lt;/p&gt;
&lt;p&gt;LLMs can be weirdly defeatist sometimes. I kicked off my own &lt;a href="https://github.com/dwmkerr/claude-toolkit?tab=readme-ov-file#researcher"&gt;&lt;code&gt;researcher&lt;/code&gt;&lt;/a&gt; agent and asked it to investigate (this agent clones repos, looks into code, uses a headless browser if needed to read docs, asks for content it can&amp;rsquo;t find and so on, and tries to find at least 2-3 data points to corroborate findings).&lt;/p&gt;
&lt;p&gt;It quickly found that the API &lt;em&gt;is&lt;/em&gt; exposed, backed up by three data points (docs on the API, a unit test for it, and a GitHub issue that discusses it). The research output is at &lt;a href="https://github.com/dwmkerr/shellwright/blob/main/docs/plans/research/cursor-visibility-detection.md"&gt;&lt;code&gt;./docs/plans/research&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Anyway, Superpowers had asked me to review the plan, so I saw the issue and made the correction (tracking the research results as well for future reference).&lt;/p&gt;
&lt;h3 id="implementation"&gt;Implementation&lt;/h3&gt;
&lt;p&gt;Once the plan is approved, we move to execution. Two modes are offered - subagent driven, which iterates on each task via subagents in the current session with review at each step, or a parallel session (which is where you kick off a completely new process and execute from there).&lt;/p&gt;
&lt;p&gt;&lt;a href="./superpowers/02-execution-modes.png"&gt;&lt;img src="./superpowers/02-execution-modes.png" alt="Screenshot of superpowers execution modes"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In this case I chose to run a new session as I didn&amp;rsquo;t expect to have to do any more orchestration from my main session:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;claude &lt;span style="color:#e6db74"&gt;&amp;#39;/superpowers:executing-plans docs/plans/2026-02-13-cursor-visibility.md&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Additional skills are run to make sure we have a working location - Superpowers asks where we want to keep our Git worktree&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;. This is a really nice feature, I had something similar in one of my own protocols (creating a &lt;code&gt;.sandboxes&lt;/code&gt; folder) but Superpowers is explicit with what is going on:&lt;/p&gt;
&lt;p&gt;&lt;a href="./superpowers/02-execution-worktree.png"&gt;&lt;img src="./superpowers/02-execution-worktree.png" alt="Superpowers worktrees"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This skill also checks to see whether &lt;code&gt;.worktrees/&lt;/code&gt; is git-ignored and suggests to ignore it if it isn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The half-time mistake&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Halfway through implementation, the agent got confused and couldn&amp;rsquo;t find the visibility field mentioned in the plan. It then decided the best approach was to just always show the cursor. I was watching so that I could grab screenshots and take notes so quickly saw the mistake.&lt;/p&gt;
&lt;p&gt;At this point I was reminded of something from my &lt;a href="https://gist.github.com/ctoth/d8e629209ff1d9748185b9830fa4e79f#notice-confusion"&gt;favourite CLAUDE.md file&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Notice Confusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Your strength as a reasoning system is being more confused by fiction than by reality.
When something surprises you, that&amp;rsquo;s not noise—the universe is telling you your model is wrong in a specific way.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stop. Don&amp;rsquo;t push past it.&lt;/li&gt;
&lt;li&gt;Identify: What did you believe that turned out false?&lt;/li&gt;
&lt;li&gt;Log it: &amp;ldquo;I assumed X, but actually Y. My model of Z was wrong.&amp;rdquo;
The &amp;ldquo;should&amp;rdquo; trap: &amp;ldquo;This should work but doesn&amp;rsquo;t&amp;rdquo; means your &amp;ldquo;should&amp;rdquo; is built on false premises. The map doesn&amp;rsquo;t match territory. Don&amp;rsquo;t debug reality—debug your map.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;The author is clearly very experienced with the implicit biases in these tools.&lt;/p&gt;
&lt;p&gt;I challenged the LLM to discover why the research had three data points saying the visibility field existed, but the local library seemed to not. After a few nudges it worked out that the field was added in a more recent version of the library and we needed an upgrade.&lt;/p&gt;
&lt;h3 id="review"&gt;Review&lt;/h3&gt;
&lt;p&gt;The next stage is to review the implementation and test.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Late game wobble&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Superpowers&amp;rsquo; test plan in this case was &amp;lsquo;manual verification&amp;rsquo; - not even a single unit test. I was very surprised, it&amp;rsquo;ll normally create failing tests first and then show them passing, following TDD patterns. The red/green approach is great for challenging assumptions early.&lt;/p&gt;
&lt;p&gt;Why testing was not part of the plan I don&amp;rsquo;t know. Shellwright has few unit tests, and a fairly complex evaluation pattern. Perhaps this caused confusion.&lt;/p&gt;
&lt;p&gt;To be fair, testing Shellwright properly is quite hard. I use unit tests, but an end to end test means giving an LLM access to the MCP server, asking it to issue commands and record videos. Deterministically verifying these is hard (for various reasons that are described in the project).&lt;/p&gt;
&lt;p&gt;To handle more complex testing scenarios, I have prompts stored in markdown files. These are instructions that are passed during CI/CD to an agent that has the Shellwright MCP server installed. Each prompt produces a video, and I show a table in the pull request with the &amp;ldquo;before&amp;rdquo; and &amp;ldquo;after&amp;rdquo; for each scenario. This means I can eyeball how the videos look and get a sanity check that output is looking sensible. A table like this is added to pull requests:&lt;/p&gt;
&lt;p&gt;&lt;a href="./superpowers/shellwright-evals.png"&gt;&lt;img src="./superpowers/shellwright-evals.png" alt="Screenshot: Shellwright evals"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve opened a PR here that I&amp;rsquo;ll keep open so you can see it - check the &amp;ldquo;View Recordings Evalution&amp;rdquo; section:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/dwmkerr/shellwright/pull/60"&gt;https://github.com/dwmkerr/shellwright/pull/60&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Superpowers didn&amp;rsquo;t notice any of my (fairly well documented) evaluation approaches. However, when I instructed it to RTFM it went ahead and created a new reference video. Here it is - a shell recording showing the &lt;code&gt;Ctrl+A&lt;/code&gt; shortcut that moves the cursor to the beginning of the line:&lt;/p&gt;
&lt;p&gt;&lt;a href="./superpowers/01-execution-evaluation.gif"&gt;&lt;img src="./superpowers/01-execution-evaluation.gif" alt="Evaluation Video"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Instructing the LLM to follow my evaluation patterns was the final intervention I needed to make.&lt;/p&gt;
&lt;h3 id="finishing-development"&gt;Finishing Development&lt;/h3&gt;
&lt;p&gt;Superpowers moves into the &amp;lsquo;finishing&amp;rsquo; stage at this point:&lt;/p&gt;
&lt;p&gt;&lt;a href="./superpowers/03-finishing.png"&gt;&lt;img src="./superpowers/03-finishing.png" alt="Screenshot - finishing"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is when tests are re-run, the build is checked again, there&amp;rsquo;s a final verification of the work and so on. The final PR is below:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/dwmkerr/shellwright/pull/57"&gt;https://github.com/dwmkerr/shellwright/pull/57&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s adequate. I was surprised to not get challenged on unit tests on this one, normally superpowers does a better job. A quick look at the evaluation records that are produced shows what I&amp;rsquo;d expect - old recordings don&amp;rsquo;t have a cursor, new ones do:&lt;/p&gt;
&lt;p&gt;&lt;a href="./superpowers/04-pr-summary.png"&gt;&lt;img src="./superpowers/04-pr-summary.png" alt="Screenshot - Evaluation Recordings"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The code changes are small. No documentation changes have been made (and that&amp;rsquo;s probably OK).&lt;/p&gt;
&lt;h3 id="thoughts-on-superpowers"&gt;Thoughts on Superpowers&lt;/h3&gt;
&lt;p&gt;I feel I might have given Superpowers a slightly rough ride, for whatever reason, maybe because I decided to use this particular task for the write up, it wasn&amp;rsquo;t as smooth as other times.&lt;/p&gt;
&lt;p&gt;But in reality, Superpowers is great. It takes almost no setup, is not particularly opinionated and follows common sense patterns. If you want a gentle introduction to orchestration protocols its a great place to start. It&amp;rsquo;s easy to change later and the foundational concepts you&amp;rsquo;ll see in many other protocols.&lt;/p&gt;
&lt;p&gt;Some of my projects have more opinionated processes, many are more spec-driven, some I&amp;rsquo;m still experimenting with, some are more team orientated. But if I&amp;rsquo;m just jumping into something new, or looking at an issue in another project, I&amp;rsquo;ll often use Superpowers at first and then pivot if it struggles. Used well it can handle far far more complex tasks than I demoed here.&lt;/p&gt;
&lt;p&gt;This brief whirlwind tour got a little convoluted. Things worth noting:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Major version changes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This &amp;lsquo;small&amp;rsquo; change required a bump from v5 to v6 of xterm-js. The model / agent / protocol didn&amp;rsquo;t warn at any stage that this is risky or should at least be considered with caution. This is the sort of thing I call a &amp;lsquo;signal&amp;rsquo; - something in a change that might indicate more attention is needed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Protocols are not rules&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Superpowers normally red/greens tests (i.e. creates failing tests to show that the desired behaviour is not present, then makes changes, then shows that the tests now pass), which is excellent - TDD is a great pattern. But even well encoded protocols are not rules, we still rely on the LLM to follow these instructions.&lt;/p&gt;
&lt;p&gt;It is still surprising how quickly models can stray away from instructions.&lt;/p&gt;
&lt;p&gt;You can get some enforcement by using hooks (and some of the other protocols I&amp;rsquo;ll describe do this), but it is safest to assume the model will stray from time to time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Evaluations and test harnesses are important&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;My intent was a small, common sense change to the output of my project. But it required a major version upgrade of an essential library, as well as change to the main rendering functionality.&lt;/p&gt;
&lt;p&gt;This project is hard to test in a completely deterministic fashion. I feel that the effort put into being able to see videos side-by-side of before and after changes is hugely beneficial. I probably spend more time nowadays building &amp;rsquo;the machine&amp;rsquo; (such as the evaluation system, the automated testing) than the code, and that&amp;rsquo;s a good way to go.&lt;/p&gt;
&lt;p&gt;Anything that provides evidence of correctness is essential if we want to be able to make changes quickly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LLMs hallucinate, make assumptions, and mistakes compound&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There were a few pretty glaring mistakes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;During planning, the name of a parameter was hallucinated&lt;/li&gt;
&lt;li&gt;During implementation, when the parameter couldn&amp;rsquo;t be found, an assumption that no such parameter existed was made&lt;/li&gt;
&lt;li&gt;During implementation, confusion (research saying a parameter existed, code saying it didn&amp;rsquo;t) was not escalated - instead, assumptions were made&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Each mistake required intervention. Superpowers (and similar protocols) are filled with instructions to avoid bias, instruct agents to stop when confused, don&amp;rsquo;t make assumptions, and so on, but it still happens. It&amp;rsquo;s in the nature of the technology - completions models are designed to helpfully complete your request.&lt;/p&gt;
&lt;p&gt;Practice and experience helps here. As soon as something seems weird, I&amp;rsquo;ll often kick off research agents. They run independently and are instructed to gather evidence - find code, find issues, find websites, cite sources. Identifying signals (things that seem intuitively wrong, or that might be consequential, risky, and so on) is important.&lt;/p&gt;
&lt;h3 id="try-it-out"&gt;Try it out&lt;/h3&gt;
&lt;p&gt;Give Superpowers a whirl. Its quick to install and it interactively guides you through the process and protocol.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;claude plugin marketplace add obra/superpowers-marketplace
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;claude plugin install superpowers@superpowers-marketplace
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;claude &lt;span style="color:#e6db74"&gt;&amp;#34;/superpowers:brainstorm I want to build an agentic SLDC protocol&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;p&gt;Agentic Engineering Protocols series:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dwmkerr.com/blog/ralph-wiggum-loop/"&gt;Agentic Engineering Protocols: The Ralph Wiggum Loop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;I find worktrees really janky, mostly because you can&amp;rsquo;t have the same branch open in multiple worktrees. In my flow I have my repos structured in folders like: &lt;code&gt;~/repos/github/org/project/[branchname]&lt;/code&gt; and just do a full-fat checkout (and a tmux tab per branch). Its heavier on the filesystem but you have freedom to switch branches at will (and can open a tmux session with a tab for each branch you are working on with a single command).&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description><category>CodeProject</category></item></channel></rss>