{
  "version": "https://jsonfeed.org/version/1",
  "title": "Jj on enumerator.dev",
  "icon": "<no value>",
  "home_page_url": "https://enumerator.dev/",
  "feed_url": "https://enumerator.dev/feed.json",
  "items": [
      {
        "id": "https://enumerator.dev/planning-building-reviewing-why-the-jj-workflow-works-better-than-git/",
        "title": "Planning, Building, Reviewing: Why The JJ Workflow Works Better Than Git",
        "content_html": "<p><img src=\"/images/planning-building-reviewing-why-the-jj-workflow-works-better-than-git.jpg\" alt=\"Photo by Lucas Kepner on Unsplash\"></p>\n<p>After a week of experimenting with using <a href=\"/use-git-to-plan-and-build-with-claude\">git</a> and <a href=\"/use-jujutsu-to-plan-and-build-with-claude\">jj</a> to plan and build, I&rsquo;ve landed on <code>jj</code> as the winner.</p>\n<h2 id=\"rebasing-kills-the-git-workflow\">Rebasing Kills the Git Workflow</h2>\n<p>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.</p>\n<p>When I use empty commits in git, Claude performs the same until it has to start editing code. Then things get messy.</p>\n<p>Rebasing in <code>git</code> is almost always painful. Claude can clunk through the rebase workflow faster than I can, but it still gets lost at times.</p>\n<h2 id=\"my-current-workflow\">My Current Workflow</h2>\n<p><a href=\"https://github.com/cassiascheffer/dotfiles/blob/700f901c3cfedc2ae05866c33cc0a99aabed237b/claude/CLAUDE.md\">Here is the CLAUDE.md that&rsquo;s been working well for me lately</a>. It teaches Claude how to use the <code>jj</code> workflow.</p>\n<h3 id=\"1-start-plan-mode\">1. Start plan mode</h3>\n<p>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.</p>\n<h3 id=\"2-iterate-on-the-plan\">2. Iterate on the Plan</h3>\n<p>I almost always refine the plan with Claude. I verify the code samples it provides and verify that the implementation meets my expectations.</p>\n<h3 id=\"3-turn-the-plan-into-commits\">3. Turn the plan into commits</h3>\n<p>I&rsquo;m still in plan mode, and I ask Claude to break the plan down into empty <code>jj</code> changes.</p>\n<h3 id=\"4-review-the-jj-plan\">4. Review the <code>jj</code> Plan</h3>\n<p>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.</p>\n<h3 id=\"5-auto-accept-edits\">5. <strong>Auto-accept edits</strong></h3>\n<p>Finally, I let Claude rip. Once the plan looks good, I auto-accept edits and allow Claude to use <code>jj</code> commands as needed.</p>\n<h3 id=\"6-do-something-else\">6. Do Something Else</h3>\n<p>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&rsquo;ve found that with a focused plan, Claude can work away just fine.</p>\n<h3 id=\"7-code-review-with-claude\">7. Code review with Claude</h3>\n<p>I use a <a href=\"https://github.com/cassiascheffer/dotfiles/blob/7478e2b382376be7972840e3043882073adfad33/claude/commands/code-review.md\">code-review command</a> 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.</p>\n<h3 id=\"8-use-gh-to-create-prs\">8. Use <code>gh</code> to create PRs</h3>\n<p>Depending on the scope of the change, I&rsquo;ll make a PR stack and ask Claude to manage the stack for me, or I&rsquo;ll create a single PR with a linear history.</p>\n<h3 id=\"9-code-review-again\">9. Code Review Again</h3>\n<p>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 <code>jj</code> change set where the code was introduced.</p>\n<p>The result is a clean commit history that implements a feature one change set at a time.</p>\n<h2 id=\"why-jj-works-so-well\">Why JJ Works So Well</h2>\n<p>In steps 7 and 9 above, I review code and often want to make changes to specific change sets. In <code>git</code>, this would involve <code>git rebase -i</code>, picking the commits to edit, making the edits, then <code>git rebase --continue</code>. In <code>jj</code>, all that is done for you.</p>\n<h2 id=\"two-takeaways\">Two Takeaways</h2>\n<p>Agent or not. These two things are true in software development. <strong>Planning and reviewing are the most critical steps.</strong></p>\n<h3 id=\"plan-plan-plan-again\">Plan, Plan, Plan Again</h3>\n<p>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.</p>\n<p>The more time you put into planning, the more successful your work will be, regardless of whether you&rsquo;re using an agent.</p>\n<h3 id=\"review-review-review-again\">Review, Review, Review Again</h3>\n<p>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.</p>\n",
        "date_published": "2025-11-08T14:04:00+00:00",
        "url": "https://enumerator.dev/planning-building-reviewing-why-the-jj-workflow-works-better-than-git/",
        "tags": ["jj","claude"]
      },
      {
        "id": "https://enumerator.dev/use-jujutsu-to-plan-and-build-with-claude/",
        "title": "Use Jujutsu to Plan and Build with Claude",
        "content_html": "<p><img src=\"/images/use-jujutsu-to-plan-and-build-with-claude.png\" alt=\"claude-jj-logo.png\"></p>\n<p>This week, I read about <a href=\"https://steve-yegge.medium.com/introducing-beads-a-coding-agent-memory-system-637d7d92514a\">Steve Yegge&rsquo;s Beads</a>.</p>\n<p>I was skeptical.</p>\n<p>He writes like someone trying to prompt inject your LLM. But he&rsquo;s always written that way.</p>\n<p>I tried beads, and it was pretty good. I wrote all of <a href=\"/uplift\">uplift</a> using beads.</p>\n<p>But it was also pretty buggy. I noticed I had multiple <code>bd</code> daemons running and checking git status. Not cool.</p>\n<h2 id=\"jujutsu\">Jujutsu</h2>\n<p>I shared beads with <a href=\"https://theinternate.com/\">Nate Smith</a>, and he said, &ldquo;You could do that with Jujutsu.&rdquo;</p>\n<p>We both tried it and it rocks.</p>\n<p><a href=\"https://github.com/cassiascheffer/dotfiles/blob/436760e954d41458214bc632661fa71af11816a7/claude/CLAUDE.md\">Here is my current CLAUDE.md </a>, which teaches Claude to use Jujutsu to plan and track issue progress.</p>\n<p><a href=\"https://github.com/jj-vcs/jj\">Jujutsu</a> 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.</p>\n<p>Here is the gist of the instructions Claude gets:</p>\n<blockquote>\n<h2 id=\"planning-best-practices\">Planning Best Practices</h2>\n<p>Create Descriptive Empty Commits:</p>\n<ul>\n<li>Each commit description should fully explain what needs to be done</li>\n<li>Include acceptance criteria in the description</li>\n<li>Note any dependencies or prerequisites</li>\n<li>Use clear, actionable language</li>\n</ul>\n</blockquote>\n<p>The steps for you are:</p>\n<ol>\n<li>Enter plan mode and build a plan with Claude.</li>\n<li>When you&rsquo;re ready, tell Claude to make empty commits for each step in the plan.</li>\n<li>Tell Claude to work through one commit at a time until it is done.</li>\n<li>If at any point Claude struggles or decides to compact memory. Kill your session and start a new one with &ldquo;We are in the middle of working through a to-do list created in <code>jj</code>. Find the task you were in the middle of and finish it, then move on to the next task until you are done.</li>\n</ol>\n<p>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 <code>jj</code> commits and worked through them.</p>\n<p>Around step 7, Claude slowed down and suggested that steps 7 through 12 were tightly coupled. I ran <code>/clear</code> 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.</p>\n<p>At the end, Claude suggested a five-PR stack so developers could review PRs implementing the requirement in separate logical steps.</p>\n<h2 id=\"why-this-works-my-theory\">Why This Works (My Theory)</h2>\n<p>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.</p>\n<p>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.</p>\n<p>With the Jujutsu workflow, Claude can read a summary of what is done with <code>jj log</code> and pick up the following task with <code>jj edit</code></p>\n<p>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.</p>\n<p>In past work, when I&rsquo;ve used a <code>plan.md</code> or Claude&rsquo;s default todo list, Claude struggles because it reads <em>the entire plan every time, multiple times</em>, 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.</p>\n<p>With the Jujutsu workflow, planning shows up exactly once in the context. Then <code>jj log</code> shows incremental progress.</p>\n<h2 id=\"i-want-this\">I Want This</h2>\n<p>It&rsquo;s good! You should try it. Get Jujutsu set up and copy my CLAUDE.md.</p>\n<p>If you don&rsquo;t know how to use Jujutsu, Claude can learn by using <code>jj help</code>.</p>\n<p>The most important thing to remember is: if you think the agent is lost, you&rsquo;re probably lost too!</p>\n<p>You can <code>/clear</code> your session, take a break, and start fresh. Claude will pick up where it left off because it knows to use <code>jj log</code> to find the next task.</p>\n",
        "date_published": "2025-10-26T12:58:00+00:00",
        "url": "https://enumerator.dev/use-jujutsu-to-plan-and-build-with-claude/",
        "tags": ["ai","jj","claude"]
      }
  ]
}
