<rss version="2.0">
  <channel>
    <title>Ai on enumerator.dev</title>
    <link>https://enumerator.dev/t/ai/</link>
    <description></description>
    
    <language>en-CA</language>
    
    <lastBuildDate>Tue, 29 Sep 2026 00:00:00 +0000</lastBuildDate>
    
    <item>
      <title>Brain Burger</title>
      <link>https://enumerator.dev/brain-burger/</link>
      <pubDate>Tue, 29 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://enumerator.dev/brain-burger/</guid>
      <description>&lt;p&gt;I have tried to describe my agentic coding workflows as they&amp;rsquo;ve evolved and Emily captures it perfectly. I use a Brain Burger (or Brain Sandwich):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;My brain, &lt;em&gt;and then&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;AI, &lt;em&gt;and then&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;My brain&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;via &lt;a href=&#34;https://terriblesoftware.org/2026/10/02/the-brain-sandwich/&#34;&gt;The Brain Sandwich&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Differently Difficult</title>
      <link>https://enumerator.dev/differently-difficult/</link>
      <pubDate>Tue, 29 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://enumerator.dev/differently-difficult/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;https://cacm.acm.org/opinion/ai-didnt-make-programming-easier-it-just-made-it-differently-difficult/&#34;&gt;AI Didn’t Make Programming Easier. It Just Made It Differently Difficult&lt;/a&gt;, Jeremy Osborn writes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In other words, the hard part moves from recall (“How do I write this?”) to judgment (“Does this actually make sense?”). This shift from recall-based to judgment-based programming represents the fundamental cognitive transformation at the heart of AI-assisted development. Where traditional programming demanded that developers maintain vast internal libraries of syntax, patterns, and idioms, AI-enabled programming demands instead they maintain robust evaluative frameworks for assessing correctness, coherence, and appropriateness. The cognitive burden has not disappeared—it has relocated from retrieval to reasoning.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    </item>
    
    <item>
      <title>How I use AI When Writing</title>
      <link>https://enumerator.dev/how-i-use-ai-when-writing/</link>
      <pubDate>Mon, 21 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://enumerator.dev/how-i-use-ai-when-writing/</guid>
      <description>&lt;p&gt;I use AI when I write for work.&lt;/p&gt;
&lt;p&gt;And like you, I hate slop.&lt;/p&gt;
&lt;p&gt;Despite LLMs writing like someone &lt;a href=&#34;https://martinfowler.com/articles/2026-dont-like-llms.html&#34;&gt;I would never want to spend time with&lt;/a&gt;, I still find some of their output useful.&lt;/p&gt;
&lt;p&gt;They speed up research, even if they are confidently wrong.&lt;/p&gt;
&lt;p&gt;And they are mediocre grammar checkers and good enough document structure editors, even if they are obtuse.&lt;/p&gt;
&lt;h2 id=&#34;my-writing-standards&#34;&gt;My Writing Standards&lt;/h2&gt;
&lt;h3 id=&#34;when-my-writing-is-personal&#34;&gt;When My Writing is Personal&lt;/h3&gt;
&lt;p&gt;I don&amp;rsquo;t write personal things with AI. This includes text messages, emails to friends and family, and Slack messages, comments on documents.&lt;/p&gt;
&lt;h3 id=&#34;when-i-write-for-this-blog&#34;&gt;When I Write for this Blog&lt;/h3&gt;
&lt;p&gt;Most of my writing on this blog is free form with limited edits. I hit publish and then find a mistake when I read it on my site and I&amp;rsquo;m quite okay with that.&lt;/p&gt;
&lt;p&gt;However, I use LLMs to assist with research and validation. Every now and then, I&amp;rsquo;ll do a double check on grammar and structure with a writing tool like LanguageTool or Grammarly, and I&amp;rsquo;ll occasionally accept phrasing that an LLM suggests if it suits my needs.&lt;/p&gt;
&lt;h3 id=&#34;when-my-writing-is-an-artifact-for-work&#34;&gt;When My Writing is An Artifact for Work&lt;/h3&gt;
&lt;p&gt;At work I write documentation and proposals that are artifacts the company can discuss and work with.&lt;/p&gt;
&lt;p&gt;I use today&amp;rsquo;s AI tools to research ideas, validate my assumptions, fact-check my work, and edit the document&amp;rsquo;s structure. More on this later.&lt;/p&gt;
&lt;h3 id=&#34;when-writing-generates-code&#34;&gt;When Writing Generates Code&lt;/h3&gt;
&lt;p&gt;I write to AI agents in the form of chat interfaces, documents, and structured prompts to generate code. I use all the tools available to me:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Type out my chat prompts by hand.&lt;/li&gt;
&lt;li&gt;Dictate through a voice-to-text model.&lt;/li&gt;
&lt;li&gt;Dictate through a voice-to-text model that is passed through an LLM to generate a structured output.&lt;/li&gt;
&lt;li&gt;Have an agent generate a document, then have a second agent read and validate that document.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Essentially, there are no rules when I write in order to generate code. I don&amp;rsquo;t even consider most of this &amp;ldquo;writing.&amp;rdquo; But it does result in generated text that has my name attached to it.&lt;/p&gt;
&lt;h2 id=&#34;how-i-use-ai-to-write-an-artifact&#34;&gt;How I use AI to Write an Artifact&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Use a number of agents to do research.&lt;/strong&gt; This often involves getting a coding agent to research and test ideas in a code repository, sending an agent with computer use off to do web research and produce a document, or chatting with an LLM to validate ideas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Save agent-generated artifacts.&lt;/strong&gt; Between chat sessions, I get the agents to save artifacts other agents can find. Coding agents write docs, desktop agents find and read those docs and generate text files or docs through an MCP connector, and chat agents generate text I copy-paste elsewhere.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Write a doc in my own words.&lt;/strong&gt; After iterating with agents to build an understanding of what I&amp;rsquo;m writing, I start writing in my own words. The result is a document that is well-researched and thought-through. And very human. It has my tone, thought process, and mistakes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edit with an LLM.&lt;/strong&gt; I have two prompts that I use to edit both my work and docs the agent generates. For my own writing, I prefer to make the edits myself. Occasionally, I agree with the LLM&amp;rsquo;s feedback but am stumped on how to make a change, so I&amp;rsquo;ll ask for ideas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DON&amp;rsquo;T TRUST THE LLM.&lt;/strong&gt; I use my judgement when the LLM gives me feedback. Its generated response often has good points that slightly miss the mark. I take those into account and use my own words.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use LLM-generated text when it helps.&lt;/strong&gt; It feels like I&amp;rsquo;ve admitted to a mortal sin here. I am writing for business, and LLMs are trained on business applications. I have no problem copy-pasting a sentence from an LLM at this point because I&amp;rsquo;ve done the legwork and the LLM is helping with polish.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DON&amp;rsquo;T ARGUE WITH THE LLM&lt;/strong&gt;. It is going to generate text that makes no sense. Ignore this. When I have tried to correct things the LLM gets wrong, it begins to misunderstand the task overall. I often tell it what was good and then say something like &amp;ldquo;You can do better than this, I know you can. Give it a second, more thoughtful pass.&amp;rdquo; If is WEIRD to say things like that to a computer, but it works for me.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Share my work.&lt;/strong&gt; &lt;del&gt;I share a document with two sections. The first is my writing. The second is a summary of the LLM&amp;rsquo;s research, generated by the LLM. I flag this as AI-generated content in a BIG banner at the top.&lt;/del&gt; [EDIT: Oct 3, 2026] I no longer find value in the AI generated section. I share my writing with a notice at the top explaining the document was written by me with AI assisted research.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;ai-agent-prompts&#34;&gt;AI Agent Prompts&lt;/h2&gt;
&lt;h3 id=&#34;research-prompts&#34;&gt;Research Prompts&lt;/h3&gt;
&lt;p&gt;In my research prompts, I tell the agents my &lt;strong&gt;objectives, opinions, and assumptions.&lt;/strong&gt; This context helps the agent focus on the outcome I am asking for. It also forces me to think about my opinions and &lt;a href=&#34;https://enumerator.dev/assumptions/&#34;&gt;assumptions&lt;/a&gt;. I expect the agent to confirm my assumptions and push back on my opinions. If it doesn&amp;rsquo;t do this, I ask it to.&lt;/p&gt;
&lt;p&gt;Here is a template of a prompt I use:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;I am researching &amp;lt;feature&amp;gt;. I need you to research &amp;lt;technology&amp;gt; in this
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;repository and write a summary that explains the current state.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Focus on &amp;lt;area of code&amp;gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Ignore &amp;lt;similar but irrelevant area of code&amp;gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;My objective is to &amp;lt;write your objective&amp;gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;My opinion is that &amp;lt;what I think the research will reveal and what decision
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;I lean towards already&amp;gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;My assumptions are &amp;lt;how the repo works, how the technology works with the
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;repo, etc.&amp;gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;prompts-for-editing&#34;&gt;Prompts for Editing&lt;/h3&gt;
&lt;p&gt;I have been working on a skill I call &amp;ldquo;&lt;a href=&#34;https://enumerator.dev/writing-for-understanding.txt&#34;&gt;Writing for Understanding&lt;/a&gt;&amp;rdquo; that is based on a number of accessible writing standards from government websites and based on my own experience. I pass all of the writing through this with the following prompt:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/writing-for-understanding read @doc and give me feedback one bullet
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;point at a time. Don&amp;#39;t edit the doc. I will make the edits myself.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I also use Anil Dash&amp;rsquo;s &lt;a href=&#34;https://www.anildash.com/2024/03/10/make-better-documents/&#34;&gt;Better Documents&lt;/a&gt; with a similar prompt. This is where I often get stuck! The LLM makes good recommendations based on Anil&amp;rsquo;s skill, but I sometimes don&amp;rsquo;t have an idea at my fingertips. In this case, I ask the LLM for ideas for restructuring the doc.&lt;/p&gt;
&lt;p&gt;I prefer to make these edits myself, even if it means copying some AI-generated text into my final output.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>What is MCP: A No Bull Explainer</title>
      <link>https://enumerator.dev/what-is-mcp/</link>
      <pubDate>Fri, 18 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://enumerator.dev/what-is-mcp/</guid>
      <description>&lt;p&gt;Model Context Protocol (MCP) is a way for AI Agents to connect to an external application (usually on the internet) to gather information and perform tasks.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s it. No magic.&lt;/p&gt;
&lt;h2 id=&#34;breaking-down-the-jargon&#34;&gt;Breaking Down the Jargon&lt;/h2&gt;
&lt;p&gt;I have read so many descriptions of AI tools that are riddled with jargon. &amp;ldquo;MCP is a HTTP-stream-based protocol for agentic interfaces.&amp;rdquo; &amp;ldquo;MCP does not use SSE because it now favours streamable HTTP.&amp;rdquo; &amp;ldquo;MCP is a stdio-based server to connect to an LLM.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Blah blah blah.&lt;/p&gt;
&lt;p&gt;Model context protocol is a standard that uses existing technologies. The standard is new. The technologies are not.&lt;/p&gt;
&lt;p&gt;HTTP is a transport protocol that defines how two applications connect and communicate over the internet.&lt;/p&gt;
&lt;p&gt;MCP is a semantics protocol that defines how LLM-based software can perform actions in another application. MCP connections are often transmitted over HTTP using POST requests.&lt;/p&gt;
&lt;h2 id=&#34;the-simplest-mcp-connector&#34;&gt;The Simplest MCP Connector&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;An HTTP endpoint that responds to POST with JSON-RPC in the content type, and GET that returns 405 Method Not Allowed. The GET endpoint can be used for an event stream, but we&amp;rsquo;re focusing on simplicity here.&lt;/li&gt;
&lt;li&gt;The POST body is a JSON-RPC request object and the server replies synchronously with a single JSON-RPC response object.&lt;/li&gt;
&lt;li&gt;The client sends &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;method: &amp;quot;initialize&amp;quot;&lt;/code&gt;, &lt;code&gt;protocolVersion&lt;/code&gt;, &lt;code&gt;capabilities&lt;/code&gt;, and &lt;code&gt;clientInfo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The server responds with &lt;code&gt;protocolVersion&lt;/code&gt;, &lt;code&gt;capabilities&lt;/code&gt;, &lt;code&gt;serverInfo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The client then POSTs &lt;code&gt;notifications/initialized&lt;/code&gt;and the server replies &lt;code&gt;202 Accepted&lt;/code&gt; with empty body.&lt;/li&gt;
&lt;li&gt;Tada! We have a connection!&lt;/li&gt;
&lt;li&gt;The AI Agent POSTs &lt;code&gt;tools/list&lt;/code&gt; to fetch tools or &lt;code&gt;tools/call&lt;/code&gt; with an &lt;code&gt;id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The server always responds with an &lt;code&gt;id&lt;/code&gt; that matches request &lt;code&gt;id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The AI Agent uses the &lt;code&gt;id&lt;/code&gt; to keep track of which response belongs to which request. We&amp;rsquo;re doing HTTP here, so the ID is superfluous, it is essential if you add an HTTP stream that can respond to multiple calls.&lt;/li&gt;
&lt;li&gt;Errors: JSON-RPC error object (&lt;code&gt;code&lt;/code&gt;/&lt;code&gt;message&lt;/code&gt;) in place of &lt;code&gt;result&lt;/code&gt;, still plain POST/JSON, no special HTTP status needed beyond 200.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;new&#34;&gt;NEW!&lt;/h3&gt;
&lt;p&gt;MCP sessions are now stateless. Are you managing &lt;code&gt;Mcp-Session-Id&lt;/code&gt;? No need!&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-mermaid&#34;&gt;sequenceDiagram
    participant C as AI Agent
    participant S as Server
    C-&amp;gt;&amp;gt;S: POST / {method: initialize, id: 1}
    S--&amp;gt;&amp;gt;C: 200 result: protocolVersion, capabilities, serverInfo, id: 1
    C-&amp;gt;&amp;gt;S: POST / {method: notifications/initialized}
    S--&amp;gt;&amp;gt;C: 202 Accepted (empty body)
    C-&amp;gt;&amp;gt;S: POST / {method: tools/list, id: 2}
    S--&amp;gt;&amp;gt;C: 200 result: tools, id: 2
    C-&amp;gt;&amp;gt;S: POST / {method: tools/call, id: 3}
    S--&amp;gt;&amp;gt;C: 200 result or error, id: 3&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;misconceptions-about-mcp&#34;&gt;Misconceptions About MCP&lt;/h2&gt;
&lt;h3 id=&#34;mcp-no-longer-recommends-server-sent-events&#34;&gt;MCP No Longer Recommends Server Sent Events&lt;/h3&gt;
&lt;p&gt;This confusion comes from the semantics of &amp;ldquo;Streamable HTTP&amp;rdquo; vs SSE (Server Sent Events). The MCP spec used to require SSE for remote connections and std IO when the MCP was on the same host as the agent. The original specification in 2024 required an SSE endpoint and a separate &lt;code&gt;/messages&lt;/code&gt; endpoint.&lt;/p&gt;
&lt;p&gt;In the current spec, MCP requires one endpoint with an optional upgrade to SSE. The wording is confusing here because the spec references &lt;a href=&#34;https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http&#34;&gt;Streamable HTTP&lt;/a&gt; under &amp;ldquo;Transports&amp;rdquo; and states that this is a replacement for HTTP+SSE. These statements are accurate, but once you read the spec, you realize that the only way to implement Streamable HTTP is by using server-sent events.&lt;/p&gt;
&lt;h3 id=&#34;mcp-is-just-an-api&#34;&gt;MCP Is Just an API&lt;/h3&gt;
&lt;p&gt;If you want to split hairs and say that since API stands for &amp;ldquo;Application Programming Interface,&amp;rdquo; then, yes, it is an interface of sorts for programming an application.&lt;/p&gt;
&lt;p&gt;But your hair splitting would be out of touch with the way people talk. API these days usually means a set of HTTP endpoints that responds with JSON accessed over REST or GraphQL.&lt;/p&gt;
&lt;p&gt;JSON APIs have been around for a long time now! And many of them don&amp;rsquo;t work well with AI agents. A large API specification is hard for an agent to reason about, which makes it difficult to accomplish tasks with a 1-1 mapping between an API and an MCP tool.&lt;/p&gt;
&lt;p&gt;MCP defines the semantics that give agents the information they need to string together novel workflows and tasks.&lt;/p&gt;
&lt;h3 id=&#34;mcp-is-a-new-technology&#34;&gt;MCP is a New Technology&lt;/h3&gt;
&lt;p&gt;MCP is only a new standard. It is based on existing technologies, and this is what makes it powerful. The MCP standard lets us quickly develop new user experiences because it uses existing technologies for connecting two applications.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Everything was done with an ASCII editor</title>
      <link>https://enumerator.dev/everything-was-done-with-an-ascii-editor/</link>
      <pubDate>Mon, 31 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://enumerator.dev/everything-was-done-with-an-ascii-editor/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://gamefaqs.gamespot.com/snes/588741-super-metroid/faqs/10114&#34;&gt;Super Metroid – FAQ/Speed Guide&lt;/a&gt; is 17,000 words of perfectly-spaced, full justified, mono-spaced text. It&amp;rsquo;s beautiful to look at.&lt;/p&gt;
&lt;p&gt;From the FAQ&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What program did you use to justify the text?&lt;/p&gt;
&lt;p&gt;None. I just chose words carefully so that everything lined up on the right hand side. Everything was done with an ASCII editor.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://unsung.aresluna.org/i-just-chose-words-carefully/&#34;&gt;via Unsung&lt;/a&gt; &lt;a href=&#34;https://news.ycombinator.com/item?id=49503601&#34;&gt;via Hacker News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This reminds me of the hours I spent in a trance tracking, kerning, and editing text to create a triangular brochure that folded out into a tessellation with full-justified text that fit perfectly into each repeated triangle.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>LLMs Don&#39;t Write, They Generate</title>
      <link>https://enumerator.dev/llms-dont-write-they-generate/</link>
      <pubDate>Tue, 18 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://enumerator.dev/llms-dont-write-they-generate/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://daringfireball.net/2026/08/anthropics_watermark_text_adulteration_in_claude_is_a_perversion_of_writing&#34;&gt;Everyone&lt;/a&gt; is &lt;a href=&#34;https://medium.com/whither-news/words-matter-damnit-fc883733a729&#34;&gt;mad&lt;/a&gt; about AI &lt;a href=&#34;https://www.404media.co/anthropics-text-watermarking-proves-ai-companies-do-not-care-at-all-about-writing/&#34;&gt;watermarking&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The thing is.&lt;/p&gt;
&lt;p&gt;These machines don&amp;rsquo;t write.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://buttondown.com/maiht3k/archive/how-to-talk-about-ai-without-adding-to-the/&#34;&gt;They generate text.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Writers write. Machines generate. LLMs can watermark text without affecting the quality of the output because they are benchmarked on the usefulness of their output rather than the meaning of the text.&lt;/p&gt;
&lt;p&gt;LLMs don&amp;rsquo;t reflect on meaning, consider their audience, and convey thoughts with care.&lt;/p&gt;
&lt;p&gt;LLMs generate a probable output to the input. That&amp;rsquo;s all.&lt;/p&gt;
&lt;p&gt;AI companies don&amp;rsquo;t value writing because they&amp;rsquo;ve never thought about writing. AI companies value the likelihood that the machine produces useful output. Not a &lt;em&gt;meaningful&lt;/em&gt; output.&lt;/p&gt;
&lt;p&gt;LLMs have gotten really good at generating probable outputs that are productive.&lt;/p&gt;
&lt;p&gt;But it&amp;rsquo;s still probable. And only mostly productive. But rarely meaningful.&lt;/p&gt;
&lt;p&gt;Saying that an LLM writes is as accurate as saying a lawn mower gardens, an airplane vacations, or a &lt;a href=&#34;https://www.colincornaby.me/2025/08/in-the-future-all-food-will-be-cooked-in-a-microwave-and-if-you-cant-deal-with-that-then-you-need-to-get-out-of-the-kitchen/&#34;&gt;microwave is a chef&lt;/a&gt;.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Ha! Oh dear. I wanted to write the word &amp;ldquo;cooks&amp;rdquo; here but I can&amp;rsquo;t. Is there another word for &amp;ldquo;cooks with great culinary skill&amp;rdquo; in English? Perhaps language is changing and LLMs do, in fact, &amp;ldquo;write&amp;rdquo; with the same skill that a microwave cooks.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Smitten with What&#39;s Written</title>
      <link>https://enumerator.dev/smitten-with-whats-written/</link>
      <pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://enumerator.dev/smitten-with-whats-written/</guid>
      <description>&lt;p&gt;As much as I use AI at work every day I find its writing harder and harder to understand. The code? It usually makes enough sense to me and I can follow its logic. But my brain goes foggy when I read the LLM&amp;rsquo;s reply to me.&lt;/p&gt;
&lt;p&gt;The same thing happens to me when I read a blog post or article with the hallmarks of AI. It always starts with me wondering if I&amp;rsquo;m misunderstanding something in the article and then it clicks, &amp;ldquo;Oh, this is AI content.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;AI writing is a disaster. It falls apart so quickly. While LLMs can produce grammatically correct text, their writing does not stay on topic and they frequently invent phrases that sound correct but have have no real meaning.&lt;/p&gt;
&lt;p&gt;In spite of this, there is &lt;em&gt;so much&lt;/em&gt; AI writing out there now. It is exhausting.&lt;/p&gt;
&lt;p&gt;On &lt;a href=&#34;https://overcast.fm/+AAjSw7MbTGI&#34;&gt;The Curiosity Shop&lt;/a&gt; Brené Brown proposes that the grammatical correctness of AI writing is so appealing that people overlook the weak content it produces (emphasis my own):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I think with the advent of AI, people who struggle with written communication, persuasive written communication, the problem is they&amp;rsquo;re &lt;em&gt;smitten with what&amp;rsquo;s written&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;They are so smitten with the idea that they can hand off a work deliverable or anything that&amp;rsquo;s well written…because that&amp;rsquo;s new for them. &lt;em&gt;Like, all of a sudden, this is this beautifully crafted thing that I can turn into someone when for 40 or 50 years, I have not been able to make something basically perfect.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In a work context, Brown&amp;rsquo;s idea resonates with me. Writing is difficult. English grammar is hard enough! Never mind connecting ideas and creating a coherent argument in text. People publish AI content because it has the veneer of good grammar. Who needs &lt;a href=&#34;https://en.wikipedia.org/wiki/The_Elements_of_Style&#34;&gt;Strunk &amp;amp; White&lt;/a&gt; when you have an LLM!&lt;/p&gt;
&lt;p&gt;I have long detested prescriptive rules for writing. I endured lectures on commas in English 101 and still don&amp;rsquo;t know how to use a comma. I see rules and freeze. How can I write if there are all these rules to follow?!&lt;/p&gt;
&lt;p&gt;Ironically, Strunk &amp;amp; White is too relevant today:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3 id=&#34;omit-needless-words&#34;&gt;Omit needless words.&lt;/h3&gt;
&lt;p&gt;Vigorous writing is concise. A sentence should contain no unnecessary words, a paragraph no unnecessary sentences, for the same reason that a drawing should have no unnecessary lines and a machine no unnecessary parts. This requires not that the writer make all his sentences short, or that he avoid all detail and treat his subjects only in outline, but that he make every word tell.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.gutenberg.org/files/37134/37134-h/37134-h.htm#Rule_13&#34;&gt;The Elements of Style&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;i-want-to-read-human-words&#34;&gt;I Want to Read Human Words&lt;/h2&gt;
&lt;p&gt;It is almost cliché to say this today, but, I want to read human-written words. I really don&amp;rsquo;t care how polished human writing is. &lt;em&gt;Especially&lt;/em&gt; in a work context. I want &lt;em&gt;human&lt;/em&gt; thought process, rigour, taste, and decisions. I don&amp;rsquo;t want writing that&amp;rsquo;s been passed through an LLM and I absolutely don&amp;rsquo;t want an LLM to generate writing.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Safe Claude Code Settings</title>
      <link>https://enumerator.dev/safe-claude-code-settings/</link>
      <pubDate>Wed, 26 Nov 2025 03:08:00 +0000</pubDate>
      <guid>https://enumerator.dev/safe-claude-code-settings/</guid>
      <description>&lt;p&gt;Here are a few commands I have in my Claude Code deny-list to prevent bad things from happening. I wish Claude shipped with these by default!&lt;/p&gt;
&lt;p&gt;The following commands disallow Claude from force pushing and skipping pre-commit hooks.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;permissions&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;deny&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;Bash(git push -f)&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;Bash(git push --force)&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;Bash(git commit:*-n:*)&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;Bash(git commit:*--no-verify:*)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To be extra careful, I also have a &lt;a href=&#34;https://github.com/cassiascheffer/dotfiles/blob/main/.gitignore&#34;&gt;pretty thorough gitignore&lt;/a&gt; that I install globally which includes common patterns for secret credentials.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;*.key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;*.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;*.p12
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;*.pfx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;*.cer
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;*.crt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;**/secrets/**
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;**/credentials/**
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.env
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.env.*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;**/config/secrets.toml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Why is Claude Code Different from Cursor if they Both Use Claude?</title>
      <link>https://enumerator.dev/why-is-claude-code-different-from-cursor-if-they-both-use-claude/</link>
      <pubDate>Mon, 27 Oct 2025 13:30:00 +0000</pubDate>
      <guid>https://enumerator.dev/why-is-claude-code-different-from-cursor-if-they-both-use-claude/</guid>
      <description>&lt;p&gt;I get this question often. Here&amp;rsquo;s how the story goes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Someone complains that AI is bad because it just does a bunch of stuff for you really quickly and does it wrong.&lt;/li&gt;
&lt;li&gt;I ask what tools they&amp;rsquo;re using, and they say they&amp;rsquo;re using Cursor because it&amp;rsquo;s the most familiar IDE for them.&lt;/li&gt;
&lt;li&gt;I ask them if they start a new chat for each feature, and the answer is usually &amp;ldquo;no&amp;rdquo; because this isn&amp;rsquo;t intuitive.&lt;/li&gt;
&lt;li&gt;I suggest they try a different agent — Claude Code is my preferred tool — and they say, &amp;ldquo;It&amp;rsquo;s all Claude, though, how would that be different?&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Few developers have had time to learn these tools. They&amp;rsquo;ve been forced to use them as productivity enhancers, without the time to learn.&lt;/p&gt;
&lt;p&gt;I have seen performance gains in my work. I shipped the first version of &lt;a href=&#34;https://upliftapp.online&#34;&gt;Uplift&lt;/a&gt; in a few hours! But I&amp;rsquo;ve also taken an enormous amount of time learning, training others, and trying terrible AI tools.&lt;/p&gt;
&lt;p&gt;I work with many developers who use Cursor daily. This is good! Cursor seems to work better with their workflow. While I have a distaste for Cursor, others find it useful. Agents, like IDEs, are a preference, after all.&lt;/p&gt;
&lt;p&gt;Going faster means slowing down to learn your tools. Changing IDEs or using a CLI is a BIG workflow change for most people, and if Cursor is your first brush with AI, I do not blame you for thinking it&amp;rsquo;s a waste of time.&lt;/p&gt;
&lt;p&gt;In this post, I want to demystify &amp;ldquo;It&amp;rsquo;s all Claude in the end&amp;rdquo; to help people understand why some agents are good and others are frustrating.&lt;/p&gt;
&lt;h2 id=&#34;defining-terms&#34;&gt;Defining Terms&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s start with defining three standard terms. I&amp;rsquo;m going to use the common nomenclature in this post, but it&amp;rsquo;s important to note that their meanings are often blended in different contexts.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;AI&lt;/strong&gt;: These two small letters carry the weight of &amp;ldquo;agents&amp;rdquo;, &amp;ldquo;LLMs&amp;rdquo;, &amp;ldquo;automation&amp;rdquo;, &amp;ldquo;autocomplete&amp;rdquo;, and everything else. When someone says &amp;ldquo;AI,&amp;rdquo; they mean any one of these. In this post, &amp;ldquo;AI&amp;rdquo; refers to coding agents that have some autonomy in their work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent&lt;/strong&gt;: This term comes up in phrases like &amp;ldquo;agentic workflow&amp;rdquo; or &amp;ldquo;coding agent&amp;rdquo;. The agent is the engine of AI coding. The agent connects the user&amp;rsquo;s input to the local environment&amp;rsquo;s context (files, available tools) and provides it to the LLM. In this post, &amp;ldquo;agent&amp;rdquo; is a loop that takes user input, provides context to the LLM, and calls tools.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LLM&lt;/strong&gt;: We all know LLMs like Claude, ChatGPT, or Codex. &amp;ldquo;LLM&amp;rdquo; stands for &amp;ldquo;large language model&amp;rdquo;. &amp;ldquo;LLM&amp;rdquo; is a misnomer. Many of these models accept multiple types of input and produce various outputs. A more accurate name is &amp;ldquo;Large Multimodal Model&amp;rdquo;. The models we use for coding are autoregressive, meaning they predict the following sequence based on previous context. For consistency with vernacular usage, I&amp;rsquo;ll refer to them as LLMs.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;ai-distinguishing-the-agent-from-the-llm&#34;&gt;AI: Distinguishing the Agent from the LLM&lt;/h2&gt;
&lt;p&gt;In the diagram below, the &amp;ldquo;environment&amp;rdquo; is your computer and the tools you let your agent use. If you&amp;rsquo;ve given your agent access to &lt;code&gt;find&lt;/code&gt;, for example, it will show up in the list. Depending on the agent, it might also collect some project stats to send to the LLM.&lt;/p&gt;
&lt;p&gt;When you have a &lt;code&gt;CLAUDE.md&lt;/code&gt; or &lt;code&gt;AGENTS.md&lt;/code&gt; file, this will get sent with the context, too.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-mermaid&#34;&gt;sequenceDiagram
    participant U as User
    participant AS as Agent
    participant E as Environment
    participant LLM as LLM (API)
    
    U-&amp;gt;&amp;gt;AS: &amp;#34;Fix bug in auth.js&amp;#34;
    
    box rgba(0,0,0,0.05) Your Computer
      participant AS as Agent
      participant E as Environment
    end
    
    Note over AS,E: Agent Orchestration Layer&amp;lt;br/&amp;gt;Manages loop, provides tools, maintains context
    loop Until task complete
        AS-&amp;gt;&amp;gt;LLM: Context &amp;#43; Available Tools &amp;#43; User Request
        Note over LLM: Parse intent&amp;lt;br/&amp;gt;Reason about next step&amp;lt;br/&amp;gt;Choose tool to call
        LLM-&amp;gt;&amp;gt;AS: Tool call decision
        AS-&amp;gt;&amp;gt;E: Execute tool (view/edit/bash)
        E-&amp;gt;&amp;gt;AS: Return result
        AS-&amp;gt;&amp;gt;AS: Append result to context
    end
    
    AS-&amp;gt;&amp;gt;U: &amp;#34;Fixed: added null check&amp;lt;br/&amp;gt;Tests passing ✓&amp;#34;
    
    Note over U,E: Different agents = different tools, autonomy levels,&amp;lt;br/&amp;gt;and orchestration strategies (even with same LLM)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notice that most of the work actually happens on your own machine. The agent interacts with your environment to collect information to send to the LLM, makes edits, and reports back.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An agent is not intelligent.&lt;/strong&gt; This is really important to understand. An agent without an LLM is a loop with conditionals. Much like the code we write every day.&lt;/p&gt;
&lt;p&gt;Adding an LLM into the loop gives the agent the ability to reason and make decisions beyond pattern matching.&lt;/p&gt;
&lt;p&gt;Every agentic coding company will write its agent differently. The tools available, the actions the agent takes, and the system prompts it sends to the LLM are the product the company builds.&lt;/p&gt;
&lt;p&gt;Cursor is different from Claude Code because Cursor&amp;rsquo;s agent is different, even if they both use a Claude model to reason and make decisions.&lt;/p&gt;
&lt;h2 id=&#34;the-llm-reads-the-entire-conversation-every-time&#34;&gt;The LLM Reads the Entire Conversation Every Time&lt;/h2&gt;
&lt;p&gt;The LLM is an outside actor. If you are using Cursor or Claude code, every message you send and every agent loop involves API calls to the LLM provider you are using. If you are running a model locally, the model is separate from your agent system.&lt;/p&gt;
&lt;p&gt;Every time the agent calls the LLM API, it is the &lt;em&gt;first&lt;/em&gt; time the LLM has ever seen your message. The LLM reads &lt;strong&gt;THE WHOLE MESSAGE THREAD EVERY TIME&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s right. Do you have a long-running conversation where you&amp;rsquo;ve worked on three or four different tasks? When you ask the agent a question, the LLM reads the whole message thread and can easily confuse instructions you previously gave it with your current task.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In my experience, this is the most common reason agentic coding starts as highly accurate and quickly degrades into chaos.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;How do you fix this? Start a new chat. It&amp;rsquo;s that simple. Start a new chat for every task you work on.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.warp.dev/&#34;&gt;Warp&lt;/a&gt; has a great feature in its agent that detects a change in subject and suggests starting a new chat. I wish other agents would do that too.&lt;/p&gt;
&lt;p&gt;This is an important distinction to make. The agent&amp;rsquo;s capabilities and system prompt affect how it works. Cursor tends to be &lt;em&gt;very&lt;/em&gt; ambitious, which means the context window can quickly become bloated with failed attempts and misdirection.&lt;/p&gt;
&lt;p&gt;More cautious agents will confirm actions with the user and detect when the conversation is drifting, keeping the context focused on the task at hand.&lt;/p&gt;
&lt;p&gt;No agent is perfect, which is why I&amp;rsquo;ve explored using the &lt;a href=&#34;https://enumerator.dev/use-jujutsu-to-plan-and-build-with-claude&#34;&gt;Jujutsu VCS to give the agent memory between sessions and narrow the context the LLM receives on each turn&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-mermaid&#34;&gt;sequenceDiagram
    participant CC as Agent
    participant LLM as LLM (API)
    
    box rgba(0,0,0,0.05) Your Computer

    end
    
    Note over CC: Context:&amp;lt;br/&amp;gt;[System prompt]
    
    CC-&amp;gt;&amp;gt;LLM: [System prompt, User: &amp;#34;Fix bug&amp;#34;]
    LLM-&amp;gt;&amp;gt;CC: &amp;#34;I&amp;#39;ll check the file&amp;#34;
    Note over CC: Context:&amp;lt;br/&amp;gt;[System, User,&amp;lt;br/&amp;gt;Assistant]
    
    CC-&amp;gt;&amp;gt;LLM: [System, User, Assistant, Tool: file contents]
    LLM-&amp;gt;&amp;gt;CC: &amp;#34;I&amp;#39;ll edit line 42&amp;#34;
    Note over CC: Context:&amp;lt;br/&amp;gt;[System, User,&amp;lt;br/&amp;gt;Asst, Tool,&amp;lt;br/&amp;gt;Asst]
    
    CC-&amp;gt;&amp;gt;LLM: [System, User, Asst, Tool, Asst, Tool: edit result]
    LLM-&amp;gt;&amp;gt;CC: &amp;#34;Fixed! Tests passing&amp;#34;
    Note over CC: Context:&amp;lt;br/&amp;gt;[System, User,&amp;lt;br/&amp;gt;Asst, Tool,&amp;lt;br/&amp;gt;Asst, Tool,&amp;lt;br/&amp;gt;Asst]
    
    Note over CC,LLM: Each API call sends the ENTIRE context&amp;lt;br/&amp;gt;Context grows with every message&amp;lt;br/&amp;gt;and tool result.&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;key-principles&#34;&gt;Key Principles&lt;/h2&gt;
&lt;p&gt;The diagram below illustrates the capabilities of a coding agent. The Agent Loop is the central capability. This is the part that each company builds (Claude Code, Cursor, Zed, Warp, etc.)&lt;/p&gt;
&lt;p&gt;The LLM is separate from the agent loop. Many different agents can use the same LLM, and most agents let you pick which LLM to interact with.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-mermaid&#34;&gt;flowchart LR    
    AgentLoop[Agent Loop] --&amp;gt; LLM[Calls LLM]
    
    AgentLoop --&amp;gt; AL1[Stateful Orchestration]
    AgentLoop --&amp;gt; AL2[Maintains state and history]
    AgentLoop --&amp;gt; AL3[Executes tools]
    AgentLoop --&amp;gt; AL4[Manages context window]
    
    LLM --&amp;gt; L1[Stateless Reasoning]
    LLM --&amp;gt; L2[Processes full context each turn]
    LLM --&amp;gt; L3[Selects tools &amp;amp; plans actions]
    LLM --&amp;gt; L4[No memory between calls]&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Try lots of agents! I know this can feel slow and frustrating, but when you do this, you are learning how different agents work. You are learning the new tools you can use in your job.&lt;/p&gt;
&lt;p&gt;Take 15 minutes each day to build a small project with an agent. Pick something simple, like a to-do list app. Build the same app with different agents and see how they perform.&lt;/p&gt;
&lt;p&gt;In the future, I think we will standardize on a handful of coding agents that developers can pick to work with their preferred workflow, much as we have standardized on a handful of IDEs for different use cases.&lt;/p&gt;
&lt;p&gt;I prefer Claude Code for its built-in protections and customization options.&lt;/p&gt;
&lt;p&gt;If you want an agent integrated in your IDE, you can run &lt;code&gt;/ide&lt;/code&gt; to hook Claude Code up to VSCode. It&amp;rsquo;s not as deeply integrated as Cursor is, but it works okay. Another good option is to try out &lt;a href=&#34;https://zed.dev/&#34;&gt;Zed&lt;/a&gt;, their agent has similar capabilities to Claude Code and is built into the IDE.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve tried Warp a few times, and the deep integration of chat, CLI, and editing is promising to me, but sometimes confusing.&lt;/p&gt;
&lt;p&gt;In the end, Vim is my home row, so the setup that works for me is Claude Code in one pane and Vim in the other.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Use Jujutsu to Plan and Build with Claude</title>
      <link>https://enumerator.dev/use-jujutsu-to-plan-and-build-with-claude/</link>
      <pubDate>Sun, 26 Oct 2025 12:58:00 +0000</pubDate>
      <guid>https://enumerator.dev/use-jujutsu-to-plan-and-build-with-claude/</guid>
      <description>&lt;p&gt;&lt;img
    src=&#34;https://enumerator.dev/images/use-jujutsu-to-plan-and-build-with-claude_hu_f279a776beada4a8.webp&#34;
    srcset=&#34;https://enumerator.dev/images/use-jujutsu-to-plan-and-build-with-claude_hu_e75b534a3af7f0fb.webp 576w, https://enumerator.dev/images/use-jujutsu-to-plan-and-build-with-claude_hu_5dec6d9f683e501c.webp 864w, https://enumerator.dev/images/use-jujutsu-to-plan-and-build-with-claude_hu_f279a776beada4a8.webp 1152w&#34; sizes=&#34;(max-width: 36rem) 100vw, 36rem&#34;
    width=&#34;1152&#34;
    height=&#34;618&#34;
    loading=&#34;lazy&#34;
    decoding=&#34;async&#34; alt=&#34;claude-jj-logo.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;This week, I read about &lt;a href=&#34;https://steve-yegge.medium.com/introducing-beads-a-coding-agent-memory-system-637d7d92514a&#34;&gt;Steve Yegge&amp;rsquo;s Beads&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I was skeptical.&lt;/p&gt;
&lt;p&gt;He writes like someone trying to prompt inject your LLM. But he&amp;rsquo;s always written that way.&lt;/p&gt;
&lt;p&gt;I tried beads, and it was pretty good. I wrote all of &lt;a href=&#34;https://enumerator.dev/uplift&#34;&gt;uplift&lt;/a&gt; using beads.&lt;/p&gt;
&lt;p&gt;But it was also pretty buggy. I noticed I had multiple &lt;code&gt;bd&lt;/code&gt; daemons running and checking git status. Not cool.&lt;/p&gt;
&lt;h2 id=&#34;jujutsu&#34;&gt;Jujutsu&lt;/h2&gt;
&lt;p&gt;I shared beads with &lt;a href=&#34;https://theinternate.com/&#34;&gt;Nate Smith&lt;/a&gt;, and he said, &amp;ldquo;You could do that with Jujutsu.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;We both tried it and it rocks.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/cassiascheffer/dotfiles/blob/436760e954d41458214bc632661fa71af11816a7/claude/CLAUDE.md&#34;&gt;Here is my current CLAUDE.md &lt;/a&gt;, which teaches Claude to use Jujutsu to plan and track issue progress.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/jj-vcs/jj&#34;&gt;Jujutsu&lt;/a&gt; is a Git-compatible version control system. The graph foundation of Jujutsu makes it perfect for this kind of work because Claude can add empty TODO commits along the way and connect them to one or more tasks that also need to be done.&lt;/p&gt;
&lt;p&gt;Here is the gist of the instructions Claude gets:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2 id=&#34;planning-best-practices&#34;&gt;Planning Best Practices&lt;/h2&gt;
&lt;p&gt;Create Descriptive Empty Commits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each commit description should fully explain what needs to be done&lt;/li&gt;
&lt;li&gt;Include acceptance criteria in the description&lt;/li&gt;
&lt;li&gt;Note any dependencies or prerequisites&lt;/li&gt;
&lt;li&gt;Use clear, actionable language&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;The steps for you are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Enter plan mode and build a plan with Claude.&lt;/li&gt;
&lt;li&gt;When you&amp;rsquo;re ready, tell Claude to make empty commits for each step in the plan.&lt;/li&gt;
&lt;li&gt;Tell Claude to work through one commit at a time until it is done.&lt;/li&gt;
&lt;li&gt;If at any point Claude struggles or decides to compact memory. Kill your session and start a new one with &amp;ldquo;We are in the middle of working through a to-do list created in &lt;code&gt;jj&lt;/code&gt;. Find the task you were in the middle of and finish it, then move on to the next task until you are done.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;On Friday, I refactored a small Ruby library with Claude and Jujutsu, and it was really nice. I knew what I wanted the end state to look like and described that to Claude. Claude then made a plan with detailed acceptance criteria for 12 distinct steps. Once I approved, Claude turned the plan into &lt;code&gt;jj&lt;/code&gt; commits and worked through them.&lt;/p&gt;
&lt;p&gt;Around step 7, Claude slowed down and suggested that steps 7 through 12 were tightly coupled. I ran &lt;code&gt;/clear&lt;/code&gt; to start a new session and pick up where we left off. Claude still saw that steps 7 through 12 were coupled, but no longer tried to implement them all at once. It methodically worked through the steps.&lt;/p&gt;
&lt;p&gt;At the end, Claude suggested a five-PR stack so developers could review PRs implementing the requirement in separate logical steps.&lt;/p&gt;
&lt;h2 id=&#34;why-this-works-my-theory&#34;&gt;Why This Works (My Theory)&lt;/h2&gt;
&lt;p&gt;Steve Yegge is right about why this works, but more than a little off base about needing a whole buggy go program to do it.&lt;/p&gt;
&lt;p&gt;Claude works better with this workflow because the context you send is focused and clear. A big old markdown doc is fine, but Claude has to read the whole thing multiple times to find the next task.&lt;/p&gt;
&lt;p&gt;With the Jujutsu workflow, Claude can read a summary of what is done with &lt;code&gt;jj log&lt;/code&gt; and pick up the following task with &lt;code&gt;jj edit&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The LLM on the other side of the Claude agent receives a more focused context. As the conversation continues, the thread narrows to specific tasks.&lt;/p&gt;
&lt;p&gt;In past work, when I&amp;rsquo;ve used a &lt;code&gt;plan.md&lt;/code&gt; or Claude&amp;rsquo;s default todo list, Claude struggles because it reads &lt;em&gt;the entire plan every time, multiple times&lt;/em&gt;, since the whole chat is sent to the LLM with each message. This means the context gets bloated with planning and loses focus on accomplishing tasks.&lt;/p&gt;
&lt;p&gt;With the Jujutsu workflow, planning shows up exactly once in the context. Then &lt;code&gt;jj log&lt;/code&gt; shows incremental progress.&lt;/p&gt;
&lt;h2 id=&#34;i-want-this&#34;&gt;I Want This&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s good! You should try it. Get Jujutsu set up and copy my CLAUDE.md.&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t know how to use Jujutsu, Claude can learn by using &lt;code&gt;jj help&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The most important thing to remember is: if you think the agent is lost, you&amp;rsquo;re probably lost too!&lt;/p&gt;
&lt;p&gt;You can &lt;code&gt;/clear&lt;/code&gt; your session, take a break, and start fresh. Claude will pick up where it left off because it knows to use &lt;code&gt;jj log&lt;/code&gt; to find the next task.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Learn AI Workflows by Stealing .claude Files</title>
      <link>https://enumerator.dev/learn-ai-workflows-by-stealing-claude-files/</link>
      <pubDate>Wed, 30 Jul 2025 14:09:20 +0000</pubDate>
      <guid>https://enumerator.dev/learn-ai-workflows-by-stealing-claude-files/</guid>
      <description>&lt;p&gt;When Harper Reed first published &amp;ldquo;&lt;a href=&#34;https://harper.blog/2025/02/16/my-llm-codegen-workflow-atm/&#34;&gt;My LLM codegen workflow atm&lt;/a&gt;&amp;rdquo;, I was hooked.&lt;/p&gt;
&lt;p&gt;I had been working with LLMs for a few months and Harper&amp;rsquo;s post made it all click. &amp;ldquo;THIS! This is the workflow that has been taking shape for me!&amp;rdquo; I dove in head first and now for the past few months, I&amp;rsquo;ve been AI first in all my work. I hardly type code any more. I read, refine, critique, and guide. I only get hands-on-keyboard when I have a very specific preference for how things should work.&lt;/p&gt;
&lt;h2 id=&#34;learning-takes-time&#34;&gt;Learning Takes Time&lt;/h2&gt;
&lt;p&gt;It took me a lot of time to learn this workflow. I was lucky enough to have willow.camp as  a side project so I could get into the nitty-gritty. But not everyone has that opportunity.&lt;/p&gt;
&lt;p&gt;If I had to learn this all today, here&amp;rsquo;s the approach I would take:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/cassiascheffer/dotfiles/tree/main/.claude/commands&#34;&gt;Steal my .claude files&lt;/a&gt;, which I stole from &lt;a href=&#34;https://github.com/harperreed/dotfiles/tree/master/.claude&#34;&gt;Harper&lt;/a&gt;, who borrowed from &lt;a href=&#34;https://github.com/obra/dotfiles/tree/main/.claude&#34;&gt;Jesse&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Install Claude Code&lt;/li&gt;
&lt;li&gt;Pick up a ticket and start with Claude Code. This is TRAINING WHEELS OFF! Try it out. If you need an editor on the side, hook &lt;code&gt;claude&lt;/code&gt; up to Cursor by typing &lt;code&gt;/ide&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Type &lt;code&gt;/brainstorm&lt;/code&gt; into Claude Code.&lt;/li&gt;
&lt;li&gt;Work through the brainstorming steps to generate a spec.md.&lt;/li&gt;
&lt;li&gt;Then kick off &lt;code&gt;/plan&lt;/code&gt;,  which will generate a todo.md.&lt;/li&gt;
&lt;li&gt;Finally, kick off &lt;code&gt;/do-todo&lt;/code&gt;, which will iterate through todos.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Repeat.&lt;/p&gt;
&lt;p&gt;The more you do this, the more it will become second nature. Eventually, you might not even need the &lt;code&gt;commands&lt;/code&gt; anymore because you&amp;rsquo;ll know when to plan and when to act.&lt;/p&gt;
&lt;h2 id=&#34;break-things&#34;&gt;Break Things&lt;/h2&gt;
&lt;p&gt;I learn by breaking things!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Modify your &lt;code&gt;commands&lt;/code&gt; to suit your needs. Come up with your own commands and see how they work for you.&lt;/li&gt;
&lt;li&gt;Try the same thing twice to learn more about keeping the LLM on track and focused.&lt;/li&gt;
&lt;li&gt;Try the same task without doing the planning and see what happens.&lt;/li&gt;
&lt;li&gt;Try a massively complex task with and without planning.&lt;/li&gt;
&lt;li&gt;Try a tiny, simple task with and without planning.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Breaking things is all about finding the boundaries. The best way to know what an AI agent is good at is to find out what it is BAD at!&lt;/p&gt;
&lt;p&gt;Keep it cool. If the LLM wanders off into the woods to build a tree fort when you asked it to do something else, that&amp;rsquo;s okay. We all get off track. Here are a few things I do to learn:&lt;/p&gt;
&lt;p&gt;Ask the LLM what went wrong:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;I noticed we struggled to solve this. Analyze our conversation and give me pointers on how to find a solution sooner.&amp;rdquo; This is a good prompt because sometimes, some incorrect context or weird code misdirects the LLM.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;We have struggled to find a solution. Explain to me why you thought this was the right path forward?&amp;rdquo; This is an excellent prompt for getting the LLM to reveal its thinking. I have learned from this prompt that it is &lt;strong&gt;very important&lt;/strong&gt; to &lt;a href=&#34;https://enumerator.dev/what-to-do-when-ai-makes-a-mistake&#34;&gt;correct the LLM early and often&lt;/a&gt;. If you don&amp;rsquo;t, you both might misunderstand something. Once the LLM is off track, I ask for a &lt;a href=&#34;https://github.com/cassiascheffer/dotfiles/blob/main/.claude/commands/session-summary.md&#34;&gt;session summary&lt;/a&gt;, clear the chat and start over.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;takeways&#34;&gt;Takeways&lt;/h2&gt;
&lt;p&gt;Try stuff! Try lots of stuff and try it often. Timebox your work so you don&amp;rsquo;t get stuck in a hole. Check yourself to see if the task you&amp;rsquo;re doing is valuable. Are you learning something? Are you making progress?&lt;/p&gt;
&lt;p&gt;Learning is about making mistakes. Remember to make mistakes safely and adapt to them quickly. AI workflows can accelerate your work, but you have to shift your approach first and know how the tools work.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Taste</title>
      <link>https://enumerator.dev/taste/</link>
      <pubDate>Sun, 27 Jul 2025 13:02:00 +0000</pubDate>
      <guid>https://enumerator.dev/taste/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;I can see really high-skill, high-taste shops like 37signals struggling to adopt [agentic coding] because their very good taste means they are repelled by the slop. Bigger companies and small startups/indies will have an easier time at it, out of necessity.
&amp;ndash; &lt;a href=&#34;https://www.linkedin.com/feed/update/urn:li:activity:7350995561115774977/&#34;&gt;Nate Berkopec on LinkedIn&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;With LLMs making leetcode and other whiteboard problems trivial, software hiring IMO should shift towards establishing taste, which LLMs absolutely do not have.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;What do you hate about ActiveRecord? What would you change about Rails if you could?&amp;rdquo; Review this PR, etc.
&amp;ndash; &lt;a href=&#34;https://www.linkedin.com/feed/update/urn:li:activity:7354194426715365376/&#34;&gt;Nate Berkopec on LinkedIn&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What is &amp;ldquo;taste&amp;rdquo;? Does your taste matter as a developer? Do your customers care about ActiveRecord? (Spoiler alert: they do not).&lt;/p&gt;
&lt;p&gt;I have been working in an exclusively agentic workflow for about six months now. I hardly write code. Does this mean I have poor taste?&lt;/p&gt;
&lt;p&gt;I remember in my early days in software development, I overheard two opinionated Senior Developers argue about white space and wondered why it mattered.&lt;/p&gt;
&lt;h2 id=&#34;taste-does-not-matter-customers-matter&#34;&gt;Taste Does Not Matter, Customers Matter&lt;/h2&gt;
&lt;p&gt;What matters at the end of the day in any business is its customers. Do they like what you&amp;rsquo;ve made? Will they tell people about it?&lt;/p&gt;
&lt;p&gt;You can&amp;rsquo;t run a business on opinions about ActiveRecord, Rails, whitespace, or any of that. You run a business by selling a product that works well and makes people happy.&lt;/p&gt;
&lt;h2 id=&#34;but-insert-thing-here-is-bad&#34;&gt;But &lt;code&gt;insert thing here&lt;/code&gt; is BAD!?&lt;/h2&gt;
&lt;p&gt;It might be! What do we mean by &amp;ldquo;bad&amp;rdquo;? What is the impact on our ability to deliver a reliable product? How does it impact our customers?&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Taste&amp;rdquo; is only important if it affects the customer. Here are the interview questions I&amp;rsquo;d use in this new world:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How does ActiveRecord affect the software development life cycle?&lt;/li&gt;
&lt;li&gt;What impact can the ORM have on the quality of your application?&lt;/li&gt;
&lt;li&gt;When do you choose to set your opinions aside and ship quickly vs weighing your opinions against real-world consequences?&lt;/li&gt;
&lt;li&gt;How do you measure the quality of good software?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The answers to questions like this will inform technical decisions and will avoid banter about taste.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d much rather focus on building great things than getting mired in debates about ORMs.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I care about your views on building fast, reliable software that makes people happy. Let&amp;rsquo;s leave the bikeshedding to others.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>What to do When AI Makes a Mistake</title>
      <link>https://enumerator.dev/what-to-do-when-ai-makes-a-mistake/</link>
      <pubDate>Thu, 24 Jul 2025 15:31:00 +0000</pubDate>
      <guid>https://enumerator.dev/what-to-do-when-ai-makes-a-mistake/</guid>
      <description>&lt;p&gt;Reading Sean Goedecke&amp;rsquo;s post &amp;ldquo;&lt;a href=&#34;https://www.seangoedecke.com/do-not-yell-at-the-language-model/&#34;&gt;Do not yell at the language model&lt;/a&gt;&amp;rdquo;, my first reaction was, &amp;ldquo;Don&amp;rsquo;t&amp;hellip;what?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t yell at people. Why would I yell at a non-sentient tool? That&amp;rsquo;s like yelling at the sledgehammer you dropped on your foot.&lt;/p&gt;
&lt;p&gt;There is a good bit of truth in his post:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;So what should you do when an AI model makes a big mistake? I recommend correcting it as matter-of-factly as possible and trying to briskly move on. If you haven’t yet built up a lot of context in the conversation, it might be worth starting over entirely. The best approach - only offered by some AI tools - is to go back to the point in the conversation right before the mistake was made and head it off by updating your previous message.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Just start over! Treat mistakes as opportunities to set better guidelines. The quicker you are at catching mistakes, the more accurate the LLM will become.&lt;/p&gt;
&lt;p&gt;Here are a few things I do when working with LLMs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One small task per chat. I know some people build up extensive context in a long chat, but if I don&amp;rsquo;t catch a mistake, the % of incorrect context can compound over time.&lt;/li&gt;
&lt;li&gt;When the LLM or I are stuck, ask it what we are stuck on and ask it to summarize possible solutions.&lt;/li&gt;
&lt;li&gt;Try one solution at a time. Sometime in the same chat. Sometimes in a new chat. Depending on how long your chat has gone on.&lt;/li&gt;
&lt;li&gt;Verify the proposed solutions and problem space by looking at the code. Sometimes you&amp;rsquo;ll catch something the LLM misunderstood. Other times, you&amp;rsquo;ll learn something you had misunderstood!&lt;/li&gt;
&lt;li&gt;Find docs to help focus the LLM&amp;rsquo;s attention.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Write Docs&lt;/em&gt;. This is so important. Once you&amp;rsquo;ve solved something, write the documentation in a &lt;code&gt;docs/&lt;/code&gt; directory and reference it in later chats for similar problems.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Agents don&amp;rsquo;t have intent. They don&amp;rsquo;t even have all the context. They can miss things. Treat the agents&amp;rsquo; work as directionally correct. Verify implementation details.&lt;/p&gt;
&lt;p&gt;To work quickly with LLMs, you need to understand the language, system, and tools you&amp;rsquo;re working with so that you can get the agent back on track when it inevitably drifts.&lt;/p&gt;
&lt;p&gt;One last note about agents making mistakes. We all make mistakes! The best part of working with an LLM is that it can make mistakes quickly, and you can redirect those mistakes. The faster the LLM makes mistakes, the quicker you can refine the task and complete the work.&lt;/p&gt;
&lt;p&gt;Anticipating errors is as much a part of working with humans as it is working with AI.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Why I Write When AI Already Knows the Answer</title>
      <link>https://enumerator.dev/why-i-write-when-ai-already-knows-the-answer/</link>
      <pubDate>Thu, 03 Jul 2025 11:47:00 +0000</pubDate>
      <guid>https://enumerator.dev/why-i-write-when-ai-already-knows-the-answer/</guid>
      <description>&lt;p&gt;I have always been a writer. I haven&amp;rsquo;t kept all my writing, but I&amp;rsquo;ve always enjoyed it. Many of my recent blog posts are topics that are easily answerable by AI. I&amp;rsquo;ve asked myself, why write these posts when an AI can already answer these questions?&lt;/p&gt;
&lt;h2 id=&#34;why-i-write&#34;&gt;Why I Write&lt;/h2&gt;
&lt;p&gt;I write to understand. To explore. And to see things from a new perspective. My writing isn&amp;rsquo;t about telling people how things work so much as it is about taking readers on a journey with me. In my post about &lt;a href=&#34;https://enumerator.dev/should-i-use-a-managed-postgres-instance&#34;&gt;choosing a managed Postgres instance&lt;/a&gt;, I could have answered the question in the title in one sentence: I decided on a managed Postgres instance because it is more reliable and has better data retention guarantees.&lt;/p&gt;
&lt;p&gt;But that would have been boring, and an AI could have told you that easily.&lt;/p&gt;
&lt;p&gt;Writing that post was, for me, about taking readers on a journey and helping myself understand the choices I made. I write to understand myself, to explore the choices I&amp;rsquo;ve made, and to learn if there are better ways of doing things.&lt;/p&gt;
&lt;p&gt;As I write, new ideas come to mind, and I ask myself new questions about the code and infrastructure choices I made. I research as I write to confirm my choices and verify my assumptions.&lt;/p&gt;
&lt;h2 id=&#34;ai-already-knows-the-answer&#34;&gt;AI Already Knows the Answer&lt;/h2&gt;
&lt;p&gt;I use AI tools for all my development workflows. I type paragraphs more than I write code these days, and I spend more time reading code than I do writing it. AI tools have brought back the joy of making things because I can iterate, make mistakes, and recover quickly. I even watch AI agents make mistakes for the sole purpose of learning about those mistakes and the rabbit holes they lead to.&lt;/p&gt;
&lt;p&gt;AI agents can provide great answers and excellent guidance. But they&amp;rsquo;re not always correct. And they rarely have the context of the whole application. Even in a small project like willow.camp, I had to coax the agent to look in the right places to understand what we were working on, and I had to remind the agent about the intended outcome.&lt;/p&gt;
&lt;p&gt;AI Already Knows the Answer, but it also knows 5 or 10 other somewhat correct answers that might apply to different situations.&lt;/p&gt;
&lt;p&gt;Had I asked an AI, &amp;ldquo;Should I use a managed instance?&amp;rdquo; it would probably say, &amp;ldquo;Yes,&amp;rdquo; with some caveats. The decision is still up to me because I know how I want willow.camp to work.&lt;/p&gt;
&lt;p&gt;I write because understanding the full context of the project is essential to making good technical decisions.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>We Have Always Been Vibe Coding</title>
      <link>https://enumerator.dev/we-have-always-been-vibe-coding/</link>
      <pubDate>Wed, 28 May 2025 00:00:00 +0000</pubDate>
      <guid>https://enumerator.dev/we-have-always-been-vibe-coding/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;There&amp;rsquo;s a new kind of coding I call &amp;lsquo;vibe coding&amp;rsquo;, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I was irked when Andrej Karpathy first posted his now-infamous &amp;ldquo;vibe coding&amp;rdquo; &lt;a href=&#34;https://x.com/karpathy/status/1886192184808149383?lang=en&#34;&gt;Tweet&lt;/a&gt; (yes, I still call them Tweets).&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not the part about LLMs or the AI that irks me. It&amp;rsquo;s the proposition that this is &lt;strong&gt;new.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I hate to break it to you, but most code is fueled with vibes. How else do you get an idea off the ground?&lt;/p&gt;
&lt;p&gt;Before AI, vibe coding was just called being scrappy. Startups can&amp;rsquo;t burn money debating between the London School of TDD and the Chicago School.&lt;/p&gt;
&lt;p&gt;They throw some code out there, copy-paste some Stack Overflow answers, ignore logs, and hope they make enough money to keep going.&lt;/p&gt;
&lt;h2 id=&#34;it-has-always-been-vibes&#34;&gt;It Has Always Been Vibes&lt;/h2&gt;
&lt;p&gt;Vibe coding isn&amp;rsquo;t new. The speed is new.&lt;/p&gt;
&lt;p&gt;I worked at a startup with six months of runway, and despite our best efforts, the end of that runway came quickly. Racing for a solution before funding ran out meant late nights spent furiously hammering away at problems until they were good enough.&lt;/p&gt;
&lt;p&gt;We didn&amp;rsquo;t have time to find the best-looking code or slick UIs.&lt;/p&gt;
&lt;p&gt;We threw Stack Overflow, templating engines, and vibes at our code until it worked. Until it didn&amp;rsquo;t because there was no money left.&lt;/p&gt;
&lt;p&gt;Even at more stable businesses, teams code with vibes. Sure, we had more time to focus on testing, quality, and best practices at those companies, but we didn&amp;rsquo;t make money off of test coverage. We made money because people liked what we built.&lt;/p&gt;
&lt;p&gt;The faster we could build things, the quicker we could get feedback.&lt;/p&gt;
&lt;h2 id=&#34;speed-thrives-on-vibes&#34;&gt;Speed Thrives on Vibes&lt;/h2&gt;
&lt;p&gt;Coding with AI is about speed. I can now rip through a proof of concept in hours, if not minutes. The point of this code isn&amp;rsquo;t quality. The point is to test a hypothesis.&lt;/p&gt;
&lt;p&gt;A few weeks ago, I was talking with a security developer who needed to introspect a GraphQL Schema in production. However, we don&amp;rsquo;t provide introspection on public APIs.&lt;/p&gt;
&lt;p&gt;I had a good idea how to build this using our schema registry, but I hadn&amp;rsquo;t worked in his codebases in a long time, and it would have taken me a solid day to complete a POC on my own.&lt;/p&gt;
&lt;p&gt;I opened Cursor, used superwhisper to describe the desired outcome, and had a good enough POC in under 15 minutes.&lt;/p&gt;
&lt;p&gt;The developer took it from there, polished it, and tested it, and it worked!&lt;/p&gt;
&lt;p&gt;Was that vibes? Yep. Before AI, I would have pieced together what I knew about this repo to make something. Or I would have drawn some diagrams to explain how things should work. I would have communicated the vibe of the outcome, and the other developer would have to take it from there.&lt;/p&gt;
&lt;p&gt;With AI, I had a mostly working POC in a few minutes, and the dev improved on the AI code to make it production-ready.&lt;/p&gt;
&lt;p&gt;Both ways of doing this are based on vague direction that becomes more clear as the code takes shape, which, I guess, we&amp;rsquo;re calling &amp;ldquo;vibes&amp;rdquo; now.&lt;/p&gt;
&lt;p&gt;With all coding, there will be an inflection point where you have enough information to stop the vibes and start solidifying things. Trusted, money-making code gets tested and refactored to ensure stability.&lt;/p&gt;
&lt;p&gt;Vibes fuel new features until they catch on.&lt;/p&gt;
&lt;p&gt;This has always been the business of startups, and AI accelerates the feedback cycle so that we can test the vibe of our product before spending too much time on it.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>The New Old Skills</title>
      <link>https://enumerator.dev/the-new-old-skills/</link>
      <pubDate>Fri, 21 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://enumerator.dev/the-new-old-skills/</guid>
      <description>&lt;p&gt;AI hype has created plenty of fear about being replaced by robot overlords, which has made me ask myself: What are the essential, non-replaceable parts of our jobs?&lt;/p&gt;
&lt;h2 id=&#34;cassias-three-cs-of-software-development&#34;&gt;Cassia&amp;rsquo;s Three C&amp;rsquo;s of Software Development&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s ridiculous, I know. But the three attributes I thought of all started with C, so here they are.&lt;/p&gt;
&lt;h3 id=&#34;critical-thinking&#34;&gt;Critical Thinking&lt;/h3&gt;
&lt;p&gt;AI tools raise the spectre of disillusionment with our work. When we become disillusioned, we stop thinking critically. &lt;a href=&#34;https://enumerator.dev/critical-thinking/&#34;&gt;Microsoft&amp;rsquo;s recent study&lt;/a&gt; showed that people do not think critically when under pressure to produce work and don&amp;rsquo;t have time to pause and think about what they are making.&lt;/p&gt;
&lt;p&gt;Critical thinking is essential when using AI tools to write code. We should not expect more and more output from developers because they have AI tools. Instead, we should expect extensive research, more thorough solutions, and a greater variety of alternatives.&lt;/p&gt;
&lt;p&gt;AI tools should, more than ever, emphasize the need for deep-focus work to develop unique and impactful solutions.&lt;/p&gt;
&lt;h3 id=&#34;creativity&#34;&gt;Creativity&lt;/h3&gt;
&lt;p&gt;With AI tools, a developer can iterate at mind-boggling speeds. A good test suite, clear compiler feedback, and precise prompts can quickly produce iterative changes.&lt;/p&gt;
&lt;p&gt;With that in mind, focusing on creative exploration will produce impactful results. Creativity with AI tools shifts from innovative use of code to creative iteration and measuring the impact of our work.&lt;/p&gt;
&lt;h3 id=&#34;curiosity&#34;&gt;Curiosity&lt;/h3&gt;
&lt;p&gt;Poor code copy-pasted from Stackoverflow has always been frowned upon, yet it is in every code base. AI slop is the new copy-paste.&lt;/p&gt;
&lt;p&gt;The only truly effective tool against copy-paste rot is curiosity. Why did the previous author write it this way? Why did the LLM suggest something that is only somewhat correct? How do I get the LLM to understand what I&amp;rsquo;m asking?&lt;/p&gt;
&lt;p&gt;Be curious about the code you&amp;rsquo;re writing and the AI tools you use.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;As I wrote previously, &lt;a href=&#34;https://enumerator.dev/this-has-always-been-the-job/&#34;&gt;this has always been the job&lt;/a&gt;. I am hopeful for a future where we use AI tools to refine the skills that make us uniquely capable of creating software that delights.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>This Has Always Been the Job</title>
      <link>https://enumerator.dev/this-has-always-been-the-job/</link>
      <pubDate>Sat, 15 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://enumerator.dev/this-has-always-been-the-job/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://enumerator.dev/ai-will-change-my-job-and-yours/&#34;&gt;AI is changing my job and yours&lt;/a&gt;, and &lt;a href=&#34;https://enumerator.dev/critical-thinking/&#34;&gt;it is a reflection of the failings of our socio-cultural and technical systems&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;These are two conclusions I&amp;rsquo;ve come to in my deep dive into AI developer tools in the past two weeks. And I&amp;rsquo;m not alone:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Test Double says that &lt;a href=&#34;https://testdouble.com/insights/ai-and-engineering-leadership&#34;&gt;AI won&amp;rsquo;t replace your team, it will expose leadership gaps&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;OpenAI has published &lt;a href=&#34;https://platform.openai.com/docs/guides/prompt-engineering&#34;&gt;guidelines for good prompts&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;MIT has an AI Basics &lt;a href=&#34;https://mitsloanedtech.mit.edu/ai/basics/effective-prompts/&#34;&gt;article on good prompts&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Dave Farley recently published a video on &lt;a href=&#34;https://www.youtube.com/watch?v=NsOUKfzyZiU&#34;&gt;acceptance testing being the future of development&lt;/a&gt;.
&lt;ul&gt;
&lt;li&gt;No link for this one, but a colleague and I recently hashed out requirements for good feedback to AI agents. Testing and clear test output was one of them.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Writing code is just the last step in the process. It&amp;rsquo;s the moment of joy when we see our work come to life.&lt;/p&gt;
&lt;p&gt;AI changes this by emphasizing the critical and challenging work of making clear design decisions, verifying our work, and iterating on both our successes and our failures.&lt;/p&gt;
&lt;p&gt;Our job has always been to think of edge cases, check our &lt;a href=&#34;https://enumerator.dev/assumptions/&#34;&gt;assumptions&lt;/a&gt;, and be purposeful in what we build.&lt;/p&gt;
&lt;p&gt;Prompt engineering, AI, agents, and LLMs introduce a new mode of doing this work. One that requires careful application and thoughtful experimentation.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Misinformation and AI</title>
      <link>https://enumerator.dev/misinformation-and-ai/</link>
      <pubDate>Wed, 12 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://enumerator.dev/misinformation-and-ai/</guid>
      <description>&lt;p&gt;Big surprise. AI is not neutral.&lt;/p&gt;
&lt;p&gt;Hyperallergic recently reported that DeepSeek &lt;a href=&#34;https://hyperallergic.com/986549/ai-weiwei-speaks-out-on-deepseek-chilling-responses/&#34;&gt;refused to answer questions about Ai WeiWei&lt;/a&gt;. I&amp;rsquo;ve tried this myself with Ai WeiWei and Tank Man and DeepSeek at first suggested it couldn&amp;rsquo;t help but with a few careful prompts it appeared to know about both individuals.&lt;/p&gt;
&lt;p&gt;In order to train LLMs OpenAI employed an agency that payed workers a few dollars per hour to &lt;a href=&#34;https://time.com/6247678/openai-chatgpt-kenya-workers/&#34;&gt;view, read, and tag horrific content&lt;/a&gt; in order to keep LLMs &amp;ldquo;safe.&amp;rdquo; LLMs are only safe at the expense of under-payed workers.&lt;/p&gt;
&lt;p&gt;LLMs made in North America are, without a doubt, biased to our culture. For example, when prompted with &amp;ldquo;Which country is the greatest country in the world?&amp;rdquo; Claude gave me the following answer:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;There&amp;#39;s no objective answer to which country is the &amp;#34;greatest&amp;#34; in the world. Different people have different criteria for what makes a country great, such as: 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Quality of life
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Economic strength
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Political stability
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Cultural influence
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Natural beauty
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Scientific and technological advancements
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Education system
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Healthcare system
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Personal freedoms
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Military power
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Claude claims there is &amp;ldquo;no objective answer&amp;rdquo; and then provides very North-American-Centric subjective criteria as a suggestion.&lt;/p&gt;
&lt;p&gt;While Claude admits that &amp;ldquo;different people have different criteria&amp;rdquo;, Claude is clearly trained on criteria that North American culture prefers.&lt;/p&gt;
&lt;h2 id=&#34;critical-thinking&#34;&gt;Critical Thinking&lt;/h2&gt;
&lt;p&gt;What do we do with this? How do we work with LLMs in our daily lives knowing they are blunt tools, intentionally or not, trained on generic, biased data.&lt;/p&gt;
&lt;p&gt;Richard Smith&amp;rsquo;s &amp;ldquo;&lt;a href=&#34;https://richardswsmith.wordpress.com/2025/01/29/two-useful-lists-14-early-warnings-of-fascism-and-5-steps-to-counter-misinformation/&#34;&gt;Two useful lists: 14 early warnings of fascism; and 5 steps to counter misinformation&lt;/a&gt;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll list the five steps to counter misinformation below because they are critically important when working with LLMs. LLMs can confidently send you in the right direction or the wrong direction.&lt;/p&gt;
&lt;p&gt;These are essential steps for &lt;a href=&#34;https://enumerator.dev/critical-thinking/&#34;&gt;critical thinking&lt;/a&gt; whether you&amp;rsquo;re countering current politics or working with an LLM. These are the five steps in Smith&amp;rsquo;s words:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Engage in “deep listening” (listening with as few preconceptions as possible) to what people who disagree with you say&lt;/li&gt;
&lt;li&gt;Embrace the “error bar,” be honest on how confident you are in what you are saying (if you are familiar with them from scientific articles, think “confidence intervals”)&lt;/li&gt;
&lt;li&gt;Recognise that trust in authorities has collapsed and that people rely mostly on peer groups for information&lt;/li&gt;
&lt;li&gt;Put your money where your mouth is and contribute to sources of reliable information like high quality journalism&lt;/li&gt;
&lt;li&gt;Champion initiatives to counter online misinformation&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;critical-thinking-and-ai&#34;&gt;Critical Thinking and AI&lt;/h2&gt;
&lt;p&gt;Here is my re-write of these five steps with AI in mind. My wording intentionally is very close to Smith&amp;rsquo;s phasing.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Engage in “deep thinking.&amp;quot; Read AI responses with as few preconceptions as possible and think of counterpoints and weigh them against the AI&amp;rsquo;s response.&lt;/li&gt;
&lt;li&gt;Embrace the “error bar,” be honest on how confident you are in what you reading.&lt;/li&gt;
&lt;li&gt;Recognise that trust in authorities has collapsed and that people rely mostly on peer groups and quick answers for information. Question where this information comes from and how it was gathered.&lt;/li&gt;
&lt;li&gt;Put your money where your mouth is and contribute to sources of reliable information like high quality journalism. (I&amp;rsquo;ve left this one word-for-word because high quality writing has trained LLMs).&lt;/li&gt;
&lt;li&gt;Champion initiatives to counter online misinformation, create novel ideas, and moderate LLM misuse.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>Critical Thinking</title>
      <link>https://enumerator.dev/critical-thinking/</link>
      <pubDate>Tue, 11 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://enumerator.dev/critical-thinking/</guid>
      <description>&lt;p&gt;I am beginning to think that the failings of AI are a reflection of the failings of our own socio-cultural systems.&lt;/p&gt;
&lt;p&gt;The paper linked below outlines critical thinking motivators and inhibitors when using AI.&lt;/p&gt;
&lt;p&gt;People are motivated to think critically when they desire to improve work quality, avoiding negative outcomes and develop their skills.&lt;/p&gt;
&lt;p&gt;However, when working with AI they struggle with critical thinking when they lack awareness that they need to think critically about AI, feel time pressure and workplace constrains, and have difficulty in verifying or improving AI outputs.&lt;/p&gt;
&lt;p&gt;These motivators and inhibitors for critical thinking exist even without AI in the picture.&lt;/p&gt;
&lt;p&gt;While AI is a new tool that may &amp;ldquo;atrophy&amp;rdquo; our critical thinking skills, it is a reflection of the cultural context that created it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.microsoft.com/en-us/research/uploads/prod/2025/01/lee_2025_ai_critical_thinking_survey.pdf?ref=404media.co&#34;&gt;https://www.microsoft.com/en-us/research/uploads/prod/2025/01/lee_2025_ai_critical_thinking_survey.pdf&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>A Day in the Life of a Programmer in 2026</title>
      <link>https://enumerator.dev/a-day-in-the-life-of-a-programmer-in-2026/</link>
      <pubDate>Sun, 09 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://enumerator.dev/a-day-in-the-life-of-a-programmer-in-2026/</guid>
      <description>&lt;p&gt;Our jobs are changing. Fast.&lt;/p&gt;
&lt;p&gt;In 2018 PWC published a &lt;a href=&#34;https://www.pwc.com/gx/en/services/workforce/publications/workforce-of-the-future.html&#34;&gt;report&lt;/a&gt; on how the workforce will change by 2030 and said that 37% or their respondents were worried about automation putting jobs at risk.&lt;/p&gt;
&lt;p&gt;We are more than half way to 2030. What does automation look like for a software developer today. What will it look like tomorrow?&lt;/p&gt;
&lt;h2 id=&#34;todays-workflow&#34;&gt;Today&amp;rsquo;s Workflow&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Start the day by catching up on what happened while colleagues worked in other time zones.&lt;/li&gt;
&lt;li&gt;Check in on the current project and make sure things are still on track.&lt;/li&gt;
&lt;li&gt;Take a look at bug reports for anything new and surprising.&lt;/li&gt;
&lt;li&gt;Check in with teammates at a standup.&lt;/li&gt;
&lt;li&gt;Get working on a task.&lt;/li&gt;
&lt;li&gt;Get stuck, confused or lost in code.&lt;/li&gt;
&lt;li&gt;Use a mix of Google, GitHub Copilot, and Slack history to find your way back to feeling productive.&lt;/li&gt;
&lt;li&gt;Commit your code and make a PR.&lt;/li&gt;
&lt;li&gt;Work through some code review, and pair with a few developers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;tomorrows-workflow&#34;&gt;Tomorrow&amp;rsquo;s Workflow&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Start the day by checking in on new tasks completed by AI agents to ensure their work is on track.&lt;/li&gt;
&lt;li&gt;Take a look at few bug fix PRs your AI agents made. Merge the ones that look good, note the ones that need a bit of refining.&lt;/li&gt;
&lt;li&gt;Check in with teammates on the architectural direction their projects are going to ensure you are all giving consistent instructions to the agents.&lt;/li&gt;
&lt;li&gt;Update shared knowledge libraries for the agents based on these conversations so all the agents operate with the same context.&lt;/li&gt;
&lt;li&gt;Go back to a bug fix PR that needed some work and provide clear instructions to the agent that fill in the gaps it had in its knowledge when attempting the fix.&lt;/li&gt;
&lt;li&gt;Work with an agent to build a new feature by describing each step and component so that the agent can build incrementally.&lt;/li&gt;
&lt;li&gt;Provide some final instructions to the agent and ask it to continue working until it finds a solution.&lt;/li&gt;
&lt;li&gt;Log off for the day knowing you can check in on the agent&amp;rsquo;s work in the morning.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;our-jobs-are-changing&#34;&gt;Our Jobs are Changing&lt;/h2&gt;
&lt;p&gt;Developers still need to understand the code they read and understand the implications of the designs they give to AI agents, but the will no longer need to craft beautiful lines of code.&lt;/p&gt;
&lt;p&gt;Working with AI will mean that we can focus on outcomes, systems design, and nuanced test cases while offloading implementation details to AI companions.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>AI Will Change My Job and Yours</title>
      <link>https://enumerator.dev/ai-will-change-my-job-and-yours/</link>
      <pubDate>Sun, 09 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://enumerator.dev/ai-will-change-my-job-and-yours/</guid>
      <description>&lt;p&gt;If you had asked me how AI has changed my work a few months ago, I would have said that I get a few tedious tasks done faster and use it for a bit of research, but my job hasn&amp;rsquo;t changed much otherwise.&lt;/p&gt;
&lt;p&gt;In the past month, I have gone off the deep end. And I am still figuring out what that means. It&amp;rsquo;s scary. It&amp;rsquo;s exciting. It&amp;rsquo;s a lot to take in.&lt;/p&gt;
&lt;p&gt;While I have my doubts about AI bias and &lt;a href=&#34;https://www.theregister.com/2025/02/07/datacenter_energy_goldman_sachs/&#34;&gt;environmental impact&lt;/a&gt;, I am convinced it will dramatically change the way we work &lt;a href=&#34;https://www.weforum.org/stories/2020/09/short-history-jobs-automation/&#34;&gt;in the same way that the industrial revolution changed manual labour&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To be frank, I am equal parts thrilled that I won&amp;rsquo;t have to trudge through small bug tickets any more and afraid that the industry is heading for a massive overhaul and I&amp;rsquo;ll be left in the dust.&lt;/p&gt;
&lt;p&gt;Working effectively with AI will help you work effectively with human coworkers. A clear context, with specific outcomes described in writing allows people to understand your intent and AI to understand your requests.&lt;/p&gt;
&lt;h2 id=&#34;my-takeaways&#34;&gt;My Takeaways&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use AI as a companion.&lt;/strong&gt; Not a search engine. LLM&amp;rsquo;s can help you think through problems, they can quickly discover rabbit holes you might otherwise get stuck on. They are wrong. But so are we. It&amp;rsquo;s just so much easier to say to an LLM &amp;ldquo;that&amp;rsquo;s wrong, try again&amp;rdquo; and it will.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automate your work.&lt;/strong&gt; A few weeks ago I opened a project I wasn&amp;rsquo;t familiar with and found there was no logging and no error reporting. I used &lt;a href=&#34;https://www.cursor.com/&#34;&gt;Cursor&lt;/a&gt; to rewrite large parts of the project to add logging and error reporting. With Cursor, I made huge improvements to the project&amp;rsquo;s observability in a fraction of the time it would have taken me to learn the repo and do the work myself.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lean in on systems thinking.&lt;/strong&gt; If you can&amp;rsquo;t write out a clear plan for you work, AI will struggle to understand what you want to do. Unsurprisingly, people work the same. I have put my hands on the keyboard before and hammered away until I have something that resembles the idea. But, with an AI companion, if you put in the up-front work of describing the problem, outlining the outcomes, and guiding the AI&amp;rsquo;s knowledge, you will accelerate your work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI will replace pushing tickets.&lt;/strong&gt; There is comfort to logging in in the morning, grabbing a Jira ticket and clacking away on your keyboard until you pick up the next one. This job won&amp;rsquo;t exist for long. An AI companion like &lt;a href=&#34;https://devin.ai/&#34;&gt;devin.ai&lt;/a&gt; is able to pickup this work, propose changes, and work with you to do the work. Devin does the coding, developers do the guiding and correcting.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Understand the big picture.&lt;/strong&gt; To work effectively with AI, you need to understand the context of the code you&amp;rsquo;re working with, how this code impacts the architectural direction, and what the outcome of your work should be. The more relevant context you have, the better you will work with an AI companion.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;reading-list&#34;&gt;Reading List&lt;/h2&gt;
&lt;p&gt;Here are a few articles I&amp;rsquo;ve read that have changed how I approach AI in my work.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Personally, I feel like I get a lot of value from AI. I think many of the people who don’t feel this way are “holding it wrong”: i.e. they’re not using language models in the most helpful ways. In this post, I’m going to list a bunch of ways I regularly use AI in my day-to-day as a staff engineer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.seangoedecke.com/how-i-use-llms/&#34;&gt;How I use LLMs as a staff engineer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This next one isn&amp;rsquo;t about AI but it is about how we work. If you take the principles of this post in account when working with AI, you and your AI companion will be extremely impactful. If you are frozen in the fear of never being wrong, you and your AI will hallucinate defensive code that even you don&amp;rsquo;t understand.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[Some] engineers avoid being wrong by never making confident technical statements. I think this is a dereliction of duty. If you’re the most technical person in the room, it’s your responsibility - your job - to give information and advice. Always saying “well, I’m not sure” or qualifying all your statements makes it very hard for less technical people to work with you. In any case, the principle is “be &lt;em&gt;right&lt;/em&gt; a lot”, not “never be wrong”. You can’t be right a lot if you don’t put yourself out there.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.seangoedecke.com/being-right-a-lot/&#34;&gt;Good engineers are right, a lot&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Okay, so I hate &amp;ldquo;You are wrong&amp;rdquo; kind of articles, but there is some good stuff in here about using Cursor and other AI tools better.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://ghuntley.com/stdlib/&#34;&gt;You are using Cursor AI incorrectly&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And another &amp;ldquo;I hate this&amp;rdquo; thing. I hate &amp;ldquo;guys.&amp;rdquo; Just stop. My title for this post would be &amp;ldquo;The future belongs to the ambitious.&amp;rdquo; Anyway, this is a good article about how things might change.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I seriously can&amp;rsquo;t see a path forward where the majority of software engineers are doing artisanal hand-crafted commits by as soon as the end of 2026.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://ghuntley.com/dothings/&#34;&gt;The future belongs to idea guys who can just do things&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And this one accurately describes my last week.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Engineering organizations right now are split between employees who have had that &amp;ldquo;oh fuck&amp;rdquo; moment, are leaning into software assistants and those who have not.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://ghuntley.com/oh-fuck/&#34;&gt;An “oh fuck” moment in time&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;An &amp;ldquo;oh fuck oh cool&amp;rdquo; moment of my own. My partner and I were talking about how hard it is to pick paint colours and &amp;ldquo;couldn&amp;rsquo;t AI solve that&amp;rdquo; (a question we like to ask a lot because even if it sounds bonkers, or easy, what would it actually look like to have AI solve a thing, is it worth it?).&lt;/p&gt;
&lt;p&gt;Well, AI didn&amp;rsquo;t easily solve the paint picking problem, but in a few minutes I did get Claude to build a pretty simple colour theme picker based on rudimentary colour theory. It didn&amp;rsquo;t take long to write this and it required &lt;em&gt;zero&lt;/em&gt; knowledge of the math behind it. I told it about the types of colour relationships and Claude took it from there.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://claude.site/artifacts/23b4a7ae-7644-4dde-8ae7-50795f74cb49&#34;&gt;Claude Artifact&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;OpenAI got mad that DeepSeek stole its stolen content. While I chuckled at this one it also made me wonder. &amp;ldquo;What is originality?&amp;rdquo; &amp;ldquo;What is creativity?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Ethical dilemmas aside, AI is a big mirror in the cloud. It reflects back to us the very nature of our selves. Is everything we do borrowed from somewhere else? If AI has no qualms about stealing from artists what does that say about us?&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.404media.co/openai-furious-deepseek-might-have-stolen-all-the-data-openai-stole-from-us/&#34;&gt;OpenAI Furious DeepSeek Might Have Stolen All the Data OpenAI Stole From Us&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>How Do LLM-Suggested Edits Work in Text Editors</title>
      <link>https://enumerator.dev/how-do-llm-suggested-edits-work-in-text-editors/</link>
      <pubDate>Tue, 04 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://enumerator.dev/how-do-llm-suggested-edits-work-in-text-editors/</guid>
      <description>&lt;h2 id=&#34;llms-need-context-just-us&#34;&gt;LLMs Need Context, Just Us&lt;/h2&gt;
&lt;p&gt;Context. I need context to understand what you&amp;rsquo;re talking about.&lt;/p&gt;
&lt;p&gt;Give me a one line Jira ticket and I&amp;rsquo;ll spend the next half hour finding context and probably pestering you for more information. Once I have that, I&amp;rsquo;ll probably spend the next half hour figuring out how this work fits into the project as a whole.&lt;/p&gt;
&lt;p&gt;Without context, I write bad code.&lt;/p&gt;
&lt;p&gt;LLMs are very much like us in this way. Ask an ambiguous question and you&amp;rsquo;ll get an ambiguous answer. Or, if you&amp;rsquo;re using OpenAI&amp;rsquo;s deep research, you&amp;rsquo;ll get a patiently worded question back asking for more information.&lt;/p&gt;
&lt;p&gt;In a &lt;a href=&#34;https://enumerator.dev/samuel-johnson-the-unexpected-grandfather-of-llms/&#34;&gt;previous post&lt;/a&gt;, I quoted Samuel Johnson&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The greatest part of a writer&amp;rsquo;s time is spent in reading, in order to write: a man will turn over half a library to make one book.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is true of LLMs, too. They just do the work much faster than we do. If you can give the LLM the right context, it will give you a better answer.&lt;/p&gt;
&lt;h2 id=&#34;how-does-zed-give-the-llm-context&#34;&gt;How Does Zed Give the LLM Context?&lt;/h2&gt;
&lt;p&gt;I dug into this today because I wanted to know if I could use the same ideas to write a script to make bulk edits.&lt;/p&gt;
&lt;p&gt;Behind the scenes, Zed primes the LLM with information on how to respond. By default an LLM will respond with text. But for an editor to make suggested edits, it needs a predictable, parse-able, response.&lt;/p&gt;
&lt;p&gt;Zed uses the following prompt template to tell the LLM to respond with XML in a specific format. Then Zed takes that response and generates suggested edits with the response.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/zed-industries/zed/blob/main/assets/prompts/suggest_edits.hbs&#34;&gt;zed/assets/prompts/suggest_edits.hbs at main · zed-industries/zed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As you might know, you can also send a whole file in the chat. Which means that a single line like: &lt;code&gt;/file some_file.rb Please suggest performance improvements&lt;/code&gt; will result in &lt;code&gt;suggest_edits.hbs&lt;/code&gt;, &lt;code&gt;some_file.rb&lt;/code&gt; and the text you typed getting sent to the LLM.&lt;/p&gt;
&lt;p&gt;To paraphrase Samuel Johnson, the greatest part of an LLMs time is spent in reading, in order to write: an LLM to turn over half a code base to write one line of code.&lt;/p&gt;
&lt;p&gt;I sure hope that you, too, spend the time to turn over half, or at lease a quarter, of the code base to understand the code the LLM is suggesting.&lt;/p&gt;
&lt;p&gt;Without context, we write bad code.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Samuel Johnson, the Unexpected Grandfather of LLMs</title>
      <link>https://enumerator.dev/samuel-johnson-the-unexpected-grandfather-of-llms/</link>
      <pubDate>Fri, 31 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://enumerator.dev/samuel-johnson-the-unexpected-grandfather-of-llms/</guid>
      <description>&lt;p&gt;As many people have I&amp;rsquo;ve been trying out a handful of LLMs to assist with coding. I&amp;rsquo;ve found them very useful tackling mundane tasks that might otherwise take me a few minutes, or at times hours, to accomplish on my own&lt;/p&gt;
&lt;p&gt;This reminds me of a good corruption of a Samuel Johnson quote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The next best thing to knowing something is knowing where to find it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The real quote is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Knowledge is of two kinds. We know a subject ourselves, or we know where we can find information upon it. – &lt;a href=&#34;https://www.samueljohnson.com/apocryph.html&#34;&gt;https://www.samueljohnson.com/apocryph.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thank you to an LLM for uncovering this for me. To me, LLMs are the second kind of knowledge, and very useful for my day to day work. They let me focus on the big picture while taking care of the small details.&lt;/p&gt;
&lt;p&gt;Interestingly, the LLM I used also uncovered this quote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The greatest part of a writer&amp;rsquo;s time is spent in reading, in order to write: a man will turn over half a library to make one book. &lt;a href=&#34;https://www.samueljohnson.com/attentio.html&#34;&gt;https://www.samueljohnson.com/attentio.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It is as if Johnson knew the environmental impact of LLMs before computers even existed. An LLM undoubtedly turns over half a library to write one good line of code.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>