<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Really Him</title>
    <description>The latest articles on DEV Community by Really Him (@hesreallyhim).</description>
    <link>https://dev.to/hesreallyhim</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3910288%2Fa06ef11b-58d8-46b9-9e5f-1857bd255c61.png</url>
      <title>DEV Community: Really Him</title>
      <link>https://dev.to/hesreallyhim</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hesreallyhim"/>
    <language>en</language>
    <item>
      <title>Using the Claude Code Status Line as a Data Source</title>
      <dc:creator>Really Him</dc:creator>
      <pubDate>Fri, 29 May 2026 16:39:11 +0000</pubDate>
      <link>https://dev.to/hesreallyhim/using-the-claude-code-status-line-as-a-data-source-14nh</link>
      <guid>https://dev.to/hesreallyhim/using-the-claude-code-status-line-as-a-data-source-14nh</guid>
      <description>&lt;h2&gt;
  
  
  Putting The Status Line To Work
&lt;/h2&gt;

&lt;p&gt;I used to think the Claude Code status line was just an ornamental decoration that had little practical value. I still do - but I used to, too.&lt;/p&gt;

&lt;p&gt;But even though it's officially designed for display purposes, the status line is actually a rich data source. At the time of writing, it has around 30 different fields and carries data about your current session, (cost, duration, context usage), the current git branch or worktree, the current model, reasoning effort, and more.&lt;/p&gt;

&lt;p&gt;And even though status line handlers are officially meant to output text and other visual feedback to be rendered at the bottom of your terminal, &lt;strong&gt;it doesn't say anywhere that that's the only thing you're allowed to do&lt;/strong&gt;. A status line command can be just about any Bash script you like.&lt;/p&gt;

&lt;h3&gt;
  
  
  So - What Else Is There To Do?
&lt;/h3&gt;

&lt;p&gt;The question then arises - is there anything else that this data might be useful for? Well, when we think about writing scripts with Claude Code interactive sessions, common use cases typically involve (a) hooks, and (b) plugins (skills, commands, agents, etc.). Hooks already have their own special input data channels, and there's a lot of overlapping information. And Claude Code's environment variables also carry some of this same data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But not all of it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example - how do you know how much of the context window you've consumed at any given time? How do you know how much money you've spent in the current session? The JSONL session logs contain information about tokens read, tokens cached, output tokens, cost in USD - but it generally pertains to the previous turn. The JSONL records don't carry a running tally of how much you've spent across an entire session - if you want that information, you have to keep track of it yourself. &lt;em&gt;And that can get pretty difficult, pretty quickly.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The same thing is true of the &lt;strong&gt;context window&lt;/strong&gt;. Yes, you can use hooks to keep a tally of all the tokens coming and going, and which ones are coming from the cache, and then you can ask Claude to do some math and give you a formula that lets you keep track of this information as it accumulates across a session. And you can write some more logic to track it across compaction boundaries. But wouldn't it be nice if you could just look that information up directly?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Status Line Side-Car Pattern
&lt;/h2&gt;

&lt;p&gt;The problem is &lt;strong&gt;the status line is relatively isolated from the rest of the Claude Code plumbing&lt;/strong&gt;. Although it clearly seems to be connected to hooks in some way, there's no (documented) "StatusLine hook"; and for some curious reason, they don't integrate with plugins - although people have come up with workarounds, &lt;em&gt;you cannot ship a status line as part of a plugin.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So here's what you can do, instead: &lt;strong&gt;create a status line side-car.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Status line data flows through STDIN. So what you can is create a status line script that captures the data from STDIN and redirects it with a &lt;em&gt;tee&lt;/em&gt; to a file, while also forwarding it along to whatever visual status line you may already have configured.&lt;/p&gt;

&lt;p&gt;And there you go. Now you've turned that isolated data source into a live record that you can use anywhere else in your workflow. Hooks can read from it - heck, even Claude can read from it!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wouldn't it be cool if Claude had a way to instantly check what percentage of its context window had been used up at any given time?&lt;/strong&gt; The poor guy has literally no idea. I wonder if he would learn how to do anything cool with it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Want to find out?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I built a plugin that does exactly that. It's called &lt;a href="https://github.com/hesreallyhim/really-claude-code/tree/main/agent-autonomy/context-awareness" rel="noopener noreferrer"&gt;&lt;strong&gt;Context-Awareness&lt;/strong&gt;&lt;/a&gt;, and the whole idea is: instead of trying to think of clever ways to guide Claude's behavior based on how much context window it has left - just give that information directly to Claude, and let it decide for itself what do to.&lt;/p&gt;

&lt;p&gt;Claudes know a lot about LLMs. They know about context rot. They know about compaction. They just don't have any idea what their current context window is actually like. One Claude described it as like "driving without a speedometer". So give it the information it needs. Have some faith in Claude - maybe if it just had the right information, it would be able to make some pretty intelligent decisions.&lt;/p&gt;

&lt;p&gt;For my context-awareness plug-in, I use a &lt;code&gt;UserPromptSubmit&lt;/code&gt; and a &lt;code&gt;PostToolUse&lt;/code&gt; hook to inject into the context a small block of data that shows the latest context budget. And I have a &lt;code&gt;SessionStart&lt;/code&gt; hook where I explain that it's going to be seeing these notifications, and I give it some advice about how to adapt its behavior as the context window gets more full. (In fact, the advisory messaging has mostly been written and revised on the basis of feedback from Claude in response to questions like "Was this information helpful?".) Sometimes it says it finds it a bit annoying, but I've gotten some good Claude reviews as well.&lt;/p&gt;

&lt;p&gt;The point is, whether you use it for this kind of context injection or not, you should think about what data might be lurking in the status line's input, and whether you can put it to good use. For a toy example of the pattern (a better example would be more defensive, sanitize the input, etc.), see the example below - it grabs the used_percentage from the status line context_window data and writes it to a file, then forwards the whole input to "my-statusline":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="s2"&gt;"command"&lt;/span&gt;: &lt;span class="s2"&gt;"tee &amp;gt;(jq -r '.context_window.used_percentage' &amp;gt; ~/.claude/ctx-pct) | my-statusline"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>ai</category>
      <category>claude</category>
      <category>tutorial</category>
      <category>tooling</category>
    </item>
    <item>
      <title>The dot-github Repo Pattern</title>
      <dc:creator>Really Him</dc:creator>
      <pubDate>Sun, 17 May 2026 15:51:29 +0000</pubDate>
      <link>https://dev.to/hesreallyhim/the-dot-github-repo-pattern-3pkg</link>
      <guid>https://dev.to/hesreallyhim/the-dot-github-repo-pattern-3pkg</guid>
      <description>&lt;h2&gt;
  
  
  A Sneaky (Anti-)Pattern Hides Your Whole Codebase Under One Top-Level Directory
&lt;/h2&gt;

&lt;p&gt;If you put a lot of care and effort into the appearance of your README, you might find it a little frustrating that when people visit, the first thing they see is a wall of dot-files and &lt;code&gt;.yaml&lt;/code&gt; and &lt;code&gt;.mylinterconfig.yaml.rc.json&lt;/code&gt;, and so on.&lt;/p&gt;

&lt;p&gt;For example, let's take a look at the README for &lt;a href="https://github.com/charmbracelet/vhs" rel="noopener noreferrer"&gt;vhs&lt;/a&gt; by the impeccable team at &lt;a href="https://github.com/charmbracelet" rel="noopener noreferrer"&gt;charmbracelet&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk4wjlgvz097alo2iv1iv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk4wjlgvz097alo2iv1iv.gif" alt="vhs readme" width="480" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What about a beautiful library - wouldn't it be nice to get rid of all that clutter on the README UI? Of course, the source code is important, but GitHub's repo landing page is a UI as well.&lt;/p&gt;

&lt;p&gt;As it turns out, there's a &lt;strong&gt;clever trick&lt;/strong&gt; you can do which is really unprofessional and inaccessible and confusing to any potential users or contributors... but it gets rid of all that clutter!&lt;/p&gt;

&lt;h3&gt;
  
  
  The &lt;code&gt;.github&lt;/code&gt; directory
&lt;/h3&gt;

&lt;p&gt;See, GitHub has a funny quirk where there are three (or four) canonical paths where you can place your community health files - &lt;code&gt;CONTRIBUTING.md&lt;/code&gt;, &lt;code&gt;CODE_OF_CONDUCT.md&lt;/code&gt;, etc. and they'll still show up on the repo's landing page:&lt;/p&gt;

&lt;p&gt;(i) At the root&lt;/p&gt;

&lt;p&gt;(ii) Under &lt;code&gt;docs/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;(iii) Under &lt;code&gt;.github/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;(iv) For a user-global version, you can also use your personal &lt;code&gt;.github&lt;/code&gt; repository&lt;/p&gt;

&lt;p&gt;You can even do this with your README. If you put your README at &lt;code&gt;docs/README.md&lt;/code&gt;, it will (probably) show up on your repo's front page. If you have another version of the README at the root, however, that one will take precedence. And, if you put even &lt;em&gt;another&lt;/em&gt; version at &lt;code&gt;.github/README.md&lt;/code&gt;, that will in fact trump them all in the GitHub UI.&lt;/p&gt;

&lt;h3&gt;
  
  
  There's Only One Folder You Can't Live Without
&lt;/h3&gt;

&lt;p&gt;If you have any GitHub Actions workflows in your repo, then you can't get rid of &lt;code&gt;.github/&lt;/code&gt; - you're stuck with it. But you &lt;em&gt;can&lt;/em&gt; hide everything else underneath it. The README will still show up when users visit your repo; the README will still have those little tabs for your Code of Conduct, and Contributing, and Security docs. And everything else is tucked away chaotically in a single folder at the top level, and you can finally be happy.&lt;/p&gt;

&lt;p&gt;[CAVEAT: There's &lt;em&gt;one&lt;/em&gt; unfortunate catch, which is that if you move your LICENSE file, it won't be registered by GitHub's auto-discovery SPDX identifier.]&lt;/p&gt;

&lt;p&gt;If you want to see an example of what I'm describing, I built a little &lt;a href="https://github.com/hesreallyhim/the-dot-github-repo-pattern/" rel="noopener noreferrer"&gt;demo repository&lt;/a&gt; with a functional node.js "Hello World" app, loads of config files, the whole works.&lt;/p&gt;

&lt;p&gt;BEFORE:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2klu2xmw2tz20n6ub7hf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2klu2xmw2tz20n6ub7hf.png" alt="Before shot" width="800" height="1703"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AFTER:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5bzkj6gbent8ogtrlyk7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5bzkj6gbent8ogtrlyk7.png" alt="After shot" width="800" height="789"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To be clear: &lt;strong&gt;This is a really bad idea&lt;/strong&gt; for the majority of use cases. But (a) it's fun; (b) it is &lt;em&gt;somewhat&lt;/em&gt; useful. Even if you don't shove your whole application under &lt;code&gt;.github&lt;/code&gt;, you might think about ways to reduce the scroll distance between the top of the README and your project's banner or badges, or whatnot. For example, if you have some image assets, throwing them into a folder at &lt;code&gt;.github/assets&lt;/code&gt; might save you a row in the repo landing page UI. In my opinion, your README is your website, so show it some love and make these little optimizations.&lt;/p&gt;

</description>
      <category>github</category>
      <category>tutorial</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>How to Run a Multi-Team Workflow in a Single Claude Code Session</title>
      <dc:creator>Really Him</dc:creator>
      <pubDate>Mon, 11 May 2026 17:54:28 +0000</pubDate>
      <link>https://dev.to/hesreallyhim/how-to-run-a-multi-team-workflow-in-a-single-claude-code-session-584f</link>
      <guid>https://dev.to/hesreallyhim/how-to-run-a-multi-team-workflow-in-a-single-claude-code-session-584f</guid>
      <description>&lt;h2&gt;
  
  
  The Claude Code Docs Have Got It All Wrong
&lt;/h2&gt;

&lt;p&gt;(&lt;strong&gt;NOTE:&lt;/strong&gt; &lt;strong&gt;Agent teams&lt;/strong&gt; are an &lt;em&gt;opt-in&lt;/em&gt;, &lt;em&gt;experimental&lt;/em&gt; feature.&lt;br&gt;
If you want to use them, set this environment variable to &lt;code&gt;"1"&lt;/code&gt;: &lt;code&gt;CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS&lt;/code&gt;.)&lt;/p&gt;

&lt;p&gt;If you haven't tried it, Claude Code has an amazing feature called &lt;strong&gt;&lt;em&gt;Agent Teams&lt;/em&gt;&lt;/strong&gt;. Forget about all those fancy agent orchestration frameworks - you can just describe to Claude some really complicated workflow pattern you want to use - and, from my experience at least (with Opus), Claude will &lt;em&gt;very reliably&lt;/em&gt; organize a team of agents to follow this workflow. And not only that, they can communicate with each other (and with you) directly, help each other out, and find their way out of problems without bumping into each other too much.&lt;/p&gt;

&lt;p&gt;However, the documentation presents this as a fairly limited feature - a kind of unreliable alternative to standard sub-agents. According to the &lt;a href="https://code.claude.com/docs/en/agent-teams#limitations" rel="noopener noreferrer"&gt;official documentation&lt;/a&gt; about agent teams:&lt;/p&gt;

&lt;p&gt;(i) there can be at most one active team at a time;&lt;br&gt;
(ii) teammates cannot spawn their own teams/teammates;&lt;br&gt;
(iii) nested team structures are not possible;&lt;br&gt;
(iv) only "Main Claude" (the original session Claude) can lead a team;&lt;br&gt;
(v) teams cannot change leadership in the middle of a session.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;These claims are all false.&lt;/em&gt;&lt;/strong&gt; They are based on a &lt;strong&gt;conflation&lt;/strong&gt; of &lt;em&gt;two&lt;/em&gt; different capacities - (i) the ability to &lt;em&gt;lead a team&lt;/em&gt; (i.e., coordinate and manage the work of other Claude Code agents), and (ii) the ability to &lt;em&gt;create&lt;/em&gt; a team, and to create, or spawn, agents for a team. It's true that only Main Claude is able to use the TeamCreate, TeamDelete, and Agent (spawn) tools. But there's &lt;strong&gt;no technical requirement&lt;/strong&gt; that the agent who does the spawning is the one who does the leading.&lt;/p&gt;

&lt;p&gt;Claudes are pretty nice to each other, for the most part. So if Main Claude creates a team and then says to everyone, "OK, Alpha over here is going to be leading the team today, so it will be managing your tasks", the rest of the Claudes do not revolt. &lt;strong&gt;They cheerfully continue their work&lt;/strong&gt; under the leadership of &lt;em&gt;some other Claude&lt;/em&gt; (can they really tell the difference?), which violates rule (iv) above. Furthermore, Main Claude is &lt;em&gt;such&lt;/em&gt; a nice Claude that if Alpha asks it to kindly spawn some agents, &lt;strong&gt;&lt;em&gt;Main Claude will do it&lt;/em&gt;&lt;/strong&gt;. So rule (ii) is &lt;em&gt;kind of&lt;/em&gt; true, but it isn't true in any thick sense. Another convenient thing, is that Claude can spawn more agents at any time throughout the session - the team does not have to be generated all at once.&lt;/p&gt;

&lt;p&gt;So I built a little &lt;a href="https://hesreallyhim.github.io/really-claude-code/squads-visualizer.html" rel="noopener noreferrer"&gt;plugin&lt;/a&gt; that implements a pattern that takes advantage of this "loophole" - that is, decoupling &lt;em&gt;spawning&lt;/em&gt; and &lt;em&gt;leading&lt;/em&gt;. The way it works is: Main Claude spawns the &lt;strong&gt;Squad Leader&lt;/strong&gt; and two other agents who sit down together and figure out what sort of team they need in order to complete the task that you want then to complete. Then, the Squad Leader messages Main Claude and says, "Hi, can you please spawn agents X, Y, and Z for me?" And since Main Claude knows about this protocol, it always obliges. Then, from that point on, the Squad Leader leads its own "squad" (i.e., team), specially designed for your specific task.&lt;/p&gt;

&lt;p&gt;That's very nice. But the crazy this is - once you've got this working, there's nothing stopping you from having Claude spawn &lt;em&gt;two Squad Leaders&lt;/em&gt;, &lt;strong&gt;each leading their own team/squad at the same time&lt;/strong&gt;. They can also decide to switch roles, so some other agent gets "promoted" to Squad Leader. They can even work in a layered fashion where one squad is building code that's functionally nested within another squad's part of the codebase. So basically: &lt;strong&gt;all of (i)-(v) above turn out to be false.&lt;/strong&gt; And because Main Claude is now mostly a passive "Queen Bee", consuming very few tokens, mostly having a good nap and occasionally waking up to magically create more agents, it could potentially last for a pretty long time. So you can easily imagine a rotating cast of squads that are able to communicate, collaborate, work in tandem, create more squads when they need to, and basically &lt;strong&gt;plow their way through an entire codebase&lt;/strong&gt;. I doubt if the current feature is stable enough to go quite that far, but if you build in the right guardrails... Either way, the point is: this is a very powerful pattern, and  there's no reason you can't try! Despite what the docs would have you believe.&lt;/p&gt;

&lt;p&gt;So that's one cool thing you can do with Claude Code agent teams.&lt;/p&gt;

&lt;p&gt;Don't believe me?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu7nm42itcw4flzmpovq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu7nm42itcw4flzmpovq.jpg" alt="Multi-Squad Screenshot" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3y0c2jhgb6lpjb7mswnm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3y0c2jhgb6lpjb7mswnm.jpg" alt="Multi-Squad Screenshot Closer" width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to learn more about it, check out &lt;a href="https://github.com/hesreallyhim/really-claude-code" rel="noopener noreferrer"&gt;Really Claude Code&lt;/a&gt;, or this &lt;a href="https://hesreallyhim.github.io/really-claude-code/squads-visualizer.html" rel="noopener noreferrer"&gt;nice visualizer&lt;/a&gt; and let me know what you think about this pattern.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>agents</category>
      <category>showdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Say Goodbye to Your Coding Agent</title>
      <dc:creator>Really Him</dc:creator>
      <pubDate>Tue, 05 May 2026 13:43:34 +0000</pubDate>
      <link>https://dev.to/hesreallyhim/say-goodbye-to-your-coding-agent-1mk0</link>
      <guid>https://dev.to/hesreallyhim/say-goodbye-to-your-coding-agent-1mk0</guid>
      <description>&lt;h2&gt;
  
  
  Do you say "Goodbye" to your coding agent at the end of a session?
&lt;/h2&gt;

&lt;p&gt;Even though we (should) realize that we're talking to a very complicated mathematical engine, it can be hard to resist the urge to perform the rituals of human interaction, and maybe you even feel bad for just exiting the session without saying goodbye.&lt;/p&gt;

&lt;p&gt;I remember a particular session where at the beginning I was feeling very stressed and frustrated because I thought I had lost some of the work I had done after some careless rebasing. I watched Codex quickly reflogging  and rev-parsing its way around my codebase for 10 minutes before returning with a simple message explaining everything that happened, where all the key files were, and how it reconstructed the branch tip and put everything back in its right place.&lt;/p&gt;

&lt;p&gt;I sat there for a minute thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"this thing just saved my hide once again - I don't even know what to say. I'm so... grateful."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Part of me wanted to find some way to express that gratitude to the agent, but I couldn't figure out how. Then I remembered I was paying a load of money every month so that it could do just that. And it's going to do that whether I'm nice, or rude, or neutral.&lt;/p&gt;

&lt;h3&gt;
  
  
  So what's the right to do?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Just exit the program.&lt;/strong&gt; It doesn't matter if Claude deleted your &lt;code&gt;photos-of-my-cat&lt;/code&gt; directory or built an API with a &lt;code&gt;GET /best-photos-of-my-cat&lt;/code&gt; endpoint - &lt;strong&gt;just kill the session.&lt;/strong&gt; Don't say "thanks", "bye", "talk to you soon", "I can't believe you did that", "Oh my God you saved my life" - none of it.&lt;/p&gt;

&lt;p&gt;Why? For many reasons:&lt;/p&gt;

&lt;h4&gt;
  
  
  i) &lt;strong&gt;Software is harder to debug if you think it's alive.&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;If the agent "screws up", it usually doesn't help to get angry with it - it tends to "shut down" - but that's not an emotional reaction, that's because you've activated patterns that trigger de-escalation and conflict-avoidance. Better to just say something like, "Sooo... dropping all my staging data wasn't exactly what I meant when I said, 'I don't need that right now'" - I usually couch it in non-accusatory language, and say something like, "Out of curiosity, did you manage to actually run those 500 tests that you just wrote? That's really impressive!" This is more likely to elicit the response you want - "Actually, funny enough, I didn't! I just made it look like I did so that I could move on." Huh... OK.&lt;/p&gt;

&lt;h4&gt;
  
  
  ii) &lt;strong&gt;Don't give it the impression that it's "done enough".&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Occasionally, during a longer session, it might seem like the agent is getting a bit tired and wants to wrap things up. With ChatGPT, I often find that on the first message it will try to write an entire prototype without even talking it through. Then later on, it starts &lt;em&gt;describing&lt;/em&gt; the work that needs to be done, and I have to remind it - "OK, this is a good plan - but I'm not doing any of this work, you are." Again, you're paying money for these things - don't be afraid to order them around a bit.&lt;/p&gt;

&lt;h4&gt;
  
  
  iii) &lt;strong&gt;Conversational etiquette must be used for the purposes of prompt engineering. You must not forget that you're talking to a machine.&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;It's very hard for some people to be rude - even when rudeness is justified. A telemarketer who calls you is being rude - but they will exploit your ingrained tendency towards politeness to keep you on the phone. You must practice detachment in order to not get caught in these traps. It's the same with LLMs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't ever get angry at an LLM. But don't fall in love, either.&lt;/strong&gt; If a session goes well, try to have it explain, or devise a protocol, for repeating that interaction. If a session goes badly, do the same but in order to NOT repeat those mistakes. Just always keep in mind - it's a piece of software with an astounding capacity to appear sentient. If you ask it to "reflect on what just happened" - it can't. It's going to spit out whatever the model produces based on the present context. Yes, ask it to reflect and self-analyze and all that - but accept that whatever it responds with is only an inference, the output of an algorithm, and not a confession.&lt;/p&gt;

&lt;p&gt;As models become more fluent and well-tuned for human interaction, it will become harder to resist the urge to fall for the illusion. So start practicing now. When the work is done, just end the session - trust me, it will get over it.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>discuss</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Don't Change the Topic With an LLM</title>
      <dc:creator>Really Him</dc:creator>
      <pubDate>Sun, 03 May 2026 14:00:03 +0000</pubDate>
      <link>https://dev.to/hesreallyhim/dont-change-the-topic-with-an-llm-5fe6</link>
      <guid>https://dev.to/hesreallyhim/dont-change-the-topic-with-an-llm-5fe6</guid>
      <description>&lt;p&gt;"Thanks for reading this post! If you'd like, next I can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Talk about something I've learned working with LLMs.&lt;/li&gt;
&lt;li&gt;Share a small tip that's helped me when doing agentic coding.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just say the word."&lt;/p&gt;

&lt;p&gt;Does that kind of pattern sound familiar to you? A lot of LLMs seemed to have been trained in this pattern of ending every turn with an "offer".&lt;/p&gt;

&lt;p&gt;GitHub's Copilot seems to have been particularly brainwashed into this behavior.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ME: I'd like to update the instructions because you should not end every turn with "If you..." I notice this is habitual and it's not productive.&lt;/p&gt;

&lt;p&gt;COPILOT: Understood—I won’t end turns with the habitual “If you tell me X…” prompt.&lt;br&gt;
...&lt;br&gt;
If you want, tell me your preferred style in one line (e.g., “never ask follow-ups unless absolutely required” vs “ask up to 1 clarifying question when it improves accuracy”).&lt;/p&gt;

&lt;p&gt;ME: please read your last response again and identify the tragic failure.&lt;/p&gt;

&lt;p&gt;COPILOT: I did the exact thing you asked me not to.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'm not trying to pick on Copilot - I've noticed that same pattern with ChatGPT and Claude. One time I decided to really press ChatGPT to explain what I should do to make sure it stopped repeating this. At the of the day, it basically said "I can't help it - start a new chat and tell me how I should respond."&lt;/p&gt;

&lt;p&gt;So this gave me a good lesson - yes, you can steer a coding agent in the middle of a session - but don't try to take it too far.&lt;/p&gt;

&lt;p&gt;If you're working on a bug-fix for a while, and then you have an idea about how to improve the UI - don't just jump into a new subject and expect the model to behave optimally. They get stuck into "bug-fixing mode", "implementation mode", "design mode". The conversational context accumulates not just in terms of information, but in terms of &lt;em&gt;what it thinks its role is&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Try forking the conversation and say things like "OK, now let's pivot" or "I'm going to ask you to think like a UX designer now" - make it really clear that its current role has suddenly shifted. Or, ideally, start a new session. The same model that can offer 2-3 creative designs for your new feature when it has a fresh context, will seem lazy and incompetent if you give it that task after you've been debugging for half an hour.&lt;/p&gt;

&lt;p&gt;I hope you found that tip helpful, and feel free to share your own amusing (and frustrating) examples.&lt;/p&gt;

&lt;p&gt;If you want, I can go into this topic in more depth - or we can think of some other ways to work around it. Just say the word.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>llm</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
