<rss version="2.0">
  <channel>
    <title>Claude on enumerator.dev</title>
    <link>https://enumerator.dev/t/claude/</link>
    <description></description>
    
    <language>en-CA</language>
    
    <lastBuildDate>Wed, 26 Nov 2025 03:08:00 +0000</lastBuildDate>
    
    <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>Planning, Building, Reviewing: Why The JJ Workflow Works Better Than Git</title>
      <link>https://enumerator.dev/planning-building-reviewing-why-the-jj-workflow-works-better-than-git/</link>
      <pubDate>Sat, 08 Nov 2025 14:04:00 +0000</pubDate>
      <guid>https://enumerator.dev/planning-building-reviewing-why-the-jj-workflow-works-better-than-git/</guid>
      <description>&lt;p&gt;&lt;img
    src=&#34;https://enumerator.dev/images/planning-building-reviewing-why-the-jj-workflow-works-better-than-git_hu_5333e9ea5f796d95.webp&#34;
    srcset=&#34;https://enumerator.dev/images/planning-building-reviewing-why-the-jj-workflow-works-better-than-git_hu_6c3ed591a1a22c88.webp 576w, https://enumerator.dev/images/planning-building-reviewing-why-the-jj-workflow-works-better-than-git_hu_c2695f8909b39288.webp 864w, https://enumerator.dev/images/planning-building-reviewing-why-the-jj-workflow-works-better-than-git_hu_5333e9ea5f796d95.webp 1152w&#34; sizes=&#34;(max-width: 36rem) 100vw, 36rem&#34;
    width=&#34;1152&#34;
    height=&#34;576&#34;
    loading=&#34;lazy&#34;
    decoding=&#34;async&#34; alt=&#34;Photo by Lucas Kepner on Unsplash&#34;&gt;&lt;/p&gt;
&lt;p&gt;After a week of experimenting with using &lt;a href=&#34;https://enumerator.dev/use-git-to-plan-and-build-with-claude&#34;&gt;git&lt;/a&gt; and &lt;a href=&#34;https://enumerator.dev/use-jujutsu-to-plan-and-build-with-claude&#34;&gt;jj&lt;/a&gt; to plan and build, I&amp;rsquo;ve landed on &lt;code&gt;jj&lt;/code&gt; as the winner.&lt;/p&gt;
&lt;h2 id=&#34;rebasing-kills-the-git-workflow&#34;&gt;Rebasing Kills the Git Workflow&lt;/h2&gt;
&lt;p&gt;Automatic rebases are the winning feature here. When I tell Claude to update a change, it will automatically rebase all its descendants. This is a MASSIVE time saver for both me and Claude.&lt;/p&gt;
&lt;p&gt;When I use empty commits in git, Claude performs the same until it has to start editing code. Then things get messy.&lt;/p&gt;
&lt;p&gt;Rebasing in &lt;code&gt;git&lt;/code&gt; is almost always painful. Claude can clunk through the rebase workflow faster than I can, but it still gets lost at times.&lt;/p&gt;
&lt;h2 id=&#34;my-current-workflow&#34;&gt;My Current Workflow&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/cassiascheffer/dotfiles/blob/700f901c3cfedc2ae05866c33cc0a99aabed237b/claude/CLAUDE.md&#34;&gt;Here is the CLAUDE.md that&amp;rsquo;s been working well for me lately&lt;/a&gt;. It teaches Claude how to use the &lt;code&gt;jj&lt;/code&gt; workflow.&lt;/p&gt;
&lt;h3 id=&#34;1-start-plan-mode&#34;&gt;1. Start plan mode&lt;/h3&gt;
&lt;p&gt;I start a new session in plan mode and give Claude Code all the information I can think of. I describe what I need, reference files, and explain the outcome.&lt;/p&gt;
&lt;h3 id=&#34;2-iterate-on-the-plan&#34;&gt;2. Iterate on the Plan&lt;/h3&gt;
&lt;p&gt;I almost always refine the plan with Claude. I verify the code samples it provides and verify that the implementation meets my expectations.&lt;/p&gt;
&lt;h3 id=&#34;3-turn-the-plan-into-commits&#34;&gt;3. Turn the plan into commits&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m still in plan mode, and I ask Claude to break the plan down into empty &lt;code&gt;jj&lt;/code&gt; changes.&lt;/p&gt;
&lt;h3 id=&#34;4-review-the-jj-plan&#34;&gt;4. Review the &lt;code&gt;jj&lt;/code&gt; Plan&lt;/h3&gt;
&lt;p&gt;This is key. I am still in plan mode here, and I need to ensure the steps Claude has planned make sense and have no gotchas. Iterate on this step.&lt;/p&gt;
&lt;h3 id=&#34;5-auto-accept-edits&#34;&gt;5. &lt;strong&gt;Auto-accept edits&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Finally, I let Claude rip. Once the plan looks good, I auto-accept edits and allow Claude to use &lt;code&gt;jj&lt;/code&gt; commands as needed.&lt;/p&gt;
&lt;h3 id=&#34;6-do-something-else&#34;&gt;6. Do Something Else&lt;/h3&gt;
&lt;p&gt;While I refined this workflow, I watched Claude work to keep it on track and assess whether we had come up with a good enough plan. But I&amp;rsquo;ve found that with a focused plan, Claude can work away just fine.&lt;/p&gt;
&lt;h3 id=&#34;7-code-review-with-claude&#34;&gt;7. Code review with Claude&lt;/h3&gt;
&lt;p&gt;I use a &lt;a href=&#34;https://github.com/cassiascheffer/dotfiles/blob/7478e2b382376be7972840e3043882073adfad33/claude/commands/code-review.md&#34;&gt;code-review command&lt;/a&gt; to kick off code review with Claude. We walk through one change at a time. I sometimes make manual edits, other times I get Claude to refactor things.&lt;/p&gt;
&lt;h3 id=&#34;8-use-gh-to-create-prs&#34;&gt;8. Use &lt;code&gt;gh&lt;/code&gt; to create PRs&lt;/h3&gt;
&lt;p&gt;Depending on the scope of the change, I&amp;rsquo;ll make a PR stack and ask Claude to manage the stack for me, or I&amp;rsquo;ll create a single PR with a linear history.&lt;/p&gt;
&lt;h3 id=&#34;9-code-review-again&#34;&gt;9. Code Review Again&lt;/h3&gt;
&lt;p&gt;Yes, I do code review again. The code is mine, after all. I go through the GitHub UI and review the code myself. If I want Claude to make a change, I ask it to edit the &lt;code&gt;jj&lt;/code&gt; change set where the code was introduced.&lt;/p&gt;
&lt;p&gt;The result is a clean commit history that implements a feature one change set at a time.&lt;/p&gt;
&lt;h2 id=&#34;why-jj-works-so-well&#34;&gt;Why JJ Works So Well&lt;/h2&gt;
&lt;p&gt;In steps 7 and 9 above, I review code and often want to make changes to specific change sets. In &lt;code&gt;git&lt;/code&gt;, this would involve &lt;code&gt;git rebase -i&lt;/code&gt;, picking the commits to edit, making the edits, then &lt;code&gt;git rebase --continue&lt;/code&gt;. In &lt;code&gt;jj&lt;/code&gt;, all that is done for you.&lt;/p&gt;
&lt;h2 id=&#34;two-takeaways&#34;&gt;Two Takeaways&lt;/h2&gt;
&lt;p&gt;Agent or not. These two things are true in software development. &lt;strong&gt;Planning and reviewing are the most critical steps.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;plan-plan-plan-again&#34;&gt;Plan, Plan, Plan Again&lt;/h3&gt;
&lt;p&gt;Working with an AI agent emphasizes the importance of planning. Planning your work has always been essential for successful feature development. Now with agents, we have really fast researchers who can help us refine a plan.&lt;/p&gt;
&lt;p&gt;The more time you put into planning, the more successful your work will be, regardless of whether you&amp;rsquo;re using an agent.&lt;/p&gt;
&lt;h3 id=&#34;review-review-review-again&#34;&gt;Review, Review, Review Again&lt;/h3&gt;
&lt;p&gt;Like planning, reviewing your work ensures it is accurate, bug-free, and performant. This is YOUR work after all. Even if an agent wrote it, you own the code.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Use Git to Plan and Build With Claude</title>
      <link>https://enumerator.dev/use-git-to-plan-and-build-with-claude/</link>
      <pubDate>Sat, 01 Nov 2025 12:57:00 +0000</pubDate>
      <guid>https://enumerator.dev/use-git-to-plan-and-build-with-claude/</guid>
      <description>&lt;p&gt;&lt;img
    src=&#34;https://enumerator.dev/images/use-git-to-plan-and-build-with-claude_hu_fdd681fba2212ff.webp&#34;
    srcset=&#34;https://enumerator.dev/images/use-git-to-plan-and-build-with-claude_hu_55a14073b6302be7.webp 576w, https://enumerator.dev/images/use-git-to-plan-and-build-with-claude_hu_d0dc0b4b4ba97c98.webp 864w, https://enumerator.dev/images/use-git-to-plan-and-build-with-claude_hu_fdd681fba2212ff.webp 1152w&#34; sizes=&#34;(max-width: 36rem) 100vw, 36rem&#34;
    width=&#34;1152&#34;
    height=&#34;576&#34;
    loading=&#34;lazy&#34;
    decoding=&#34;async&#34; alt=&#34;Git-Icon-1788C.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;When I shared &lt;a href=&#34;https://enumerator.dev/use-jujutsu-to-plan-and-build-with-claude&#34;&gt;my new JJ and Claude workflow last week&lt;/a&gt;, I wondered whether JJ was too much friction for developers. It requires learning a new version-control tool in addition to learning to use Claude. I had an idea in the back of my mind to use plain git for this.&lt;/p&gt;
&lt;p&gt;And then Claude did it for me!&lt;/p&gt;
&lt;p&gt;Towards the end of the week, I was working in a codebase where I hadn&amp;rsquo;t initialized JJ yet. Claude tried to use the JJ workflow, saw that JJ wasn&amp;rsquo;t initialized, and started implementing the same workflow using plain old git. We were working on a relatively simple feature, and Claude created planning commits and implemented it.&lt;/p&gt;
&lt;h2 id=&#34;you-dont-need-to-learn-a-new-tool&#34;&gt;You Don&amp;rsquo;t Need to Learn a New Tool&lt;/h2&gt;
&lt;p&gt;JJ is a good workflow if you need a graph of related features. I find this happens most often when I&amp;rsquo;m building a new feature or working in an old codebase where I find bugs.&lt;/p&gt;
&lt;p&gt;Most day-to-day work can be done in linear branches. Plus, everyone knows git already.&lt;/p&gt;
&lt;p&gt;This morning, I worked with Claude to &lt;a href=&#34;https://github.com/cassiascheffer/dotfiles/blob/3d068ff7413f1b114b035f04f4a194d90cf86656/claude/CLAUDE.md&#34;&gt;refine a CLAUDE.md that uses plain old git to plan and build features&lt;/a&gt;. This looks really promising so far.&lt;/p&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>
    
  </channel>
</rss>