<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>HanLHo. - Fractional Architect &amp; Software Product Engineer - claude-code</title>
    <link rel="self" type="application/atom+xml" href="https://hanlho.com/tags/claude-code/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://hanlho.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-01-13T00:00:00+00:00</updated>
    <id>https://hanlho.com/tags/claude-code/atom.xml</id>
    <entry xml:lang="en">
        <title>Agent Chisels: My LLM Agent Skills and Workflows</title>
        <published>2026-01-13T00:00:00+00:00</published>
        <updated>2026-01-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://hanlho.com/p/agent-chisels-my-llm-agent-skills-and-workflows/"/>
        <id>https://hanlho.com/p/agent-chisels-my-llm-agent-skills-and-workflows/</id>
        
        <content type="html" xml:base="https://hanlho.com/p/agent-chisels-my-llm-agent-skills-and-workflows/">&lt;p&gt;I have been meaning to share more about my LLM workflows and tooling for a while, partly to have a reference for conversations, but mostly to learn in public.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lhohan&#x2F;agent-chisels&quot;&gt;Agent Chisels&lt;&#x2F;a&gt; is where I will be sharing the custom artefacts (primarily &lt;code&gt;skills&lt;&#x2F;code&gt;, with &lt;code&gt;commands&lt;&#x2F;code&gt; and &lt;code&gt;agents&lt;&#x2F;code&gt; to follow) that I find most useful and actively use in my daily workflow.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;skills&quot;&gt;Skills&lt;&#x2F;h2&gt;
&lt;p&gt;I have shared two &lt;a href=&quot;https:&#x2F;&#x2F;agentskills.io&#x2F;home&quot;&gt;skills&lt;&#x2F;a&gt; I use almost daily. In addition, I&#x27;ve also included a third skill, more of a meta-skill for evaluating other skills, which I used when reviewing these for release. I actively use this skill to iterate and improve my skills so it fits the goal of this project.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;documenting-architectural-decisions&lt;&#x2F;code&gt;: Document and manage architectural decisions using ADRs. Supports Y-statement and traditional ADR formats. Used for creating, reviewing, or searching decision records. This repository contains several examples of decision logs created with this skill, for example, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lhohan&#x2F;agent-chisels&#x2F;blob&#x2F;main&#x2F;plugins&#x2F;jj&#x2F;decision-log.md&quot;&gt;here&lt;&#x2F;a&gt; is the one for the &lt;code&gt;jj&lt;&#x2F;code&gt; plugin.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I use &lt;a href=&quot;https:&#x2F;&#x2F;www.jj-vcs.dev&#x2F;latest&#x2F;&quot;&gt;&lt;code&gt;jj&lt;&#x2F;code&gt; or &lt;code&gt;Jujutsu&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;, an alternative version control system, in all my projects. Getting LLMs to work reliably with it is quite a challenge, so I have a skill to detect and remind an LLM to use &lt;code&gt;jj&lt;&#x2F;code&gt; and one to add the capability of using &lt;code&gt;jj&lt;&#x2F;code&gt;. The &lt;a href=&quot;https:&#x2F;&#x2F;code.claude.com&#x2F;docs&#x2F;en&#x2F;plugins&quot;&gt;Claude Code plugin&lt;&#x2F;a&gt; also adds a &lt;code&gt;use-jj&lt;&#x2F;code&gt; command and a hook to remind an LLM of using &lt;code&gt;jj&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;detecting-jujutsu&lt;&#x2F;code&gt; — Verify if the current repository uses Jujutsu (jj) instead of git. Used when confirming VCS state before operations.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;using-jujutsu&lt;&#x2F;code&gt; — Detailed guidance on Jujutsu (jj) VCS operations including committing, pushing, searching history, and working with revisions&#x2F;revsets.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;And finally, there is the meta-skill to evaluate skills. &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lhohan&#x2F;agent-chisels&#x2F;blob&#x2F;main&#x2F;skills&#x2F;evaluate-skills&#x2F;examples&#x2F;EXAMPLE.md&quot;&gt;Here is an example&lt;&#x2F;a&gt; of a report generated by this skill.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;evaluating-skills&lt;&#x2F;code&gt; — A skill to evaluate skills against best practices for size, structure, examples, and prompt engineering. Use when reviewing skills for deployment, optimisation, or standards compliance.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;To use these, you can use the Claude Code plugin system or install them manually; take a look at the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lhohan&#x2F;agent-chisels#user-content-installation&quot;&gt;installation section&lt;&#x2F;a&gt; for more details.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-little-on-the-setup-of-the-repository&quot;&gt;A little on the setup of the repository&lt;&#x2F;h2&gt;
&lt;p&gt;I use symbolic links liberally to avoid duplication. For example, symbolic links allow me to share the independent skills with the Claude Code plugin while also using them in this project itself.&lt;&#x2F;p&gt;
&lt;p&gt;All skills I share in this repo are dynamically linked to my &lt;code&gt;~&#x2F;.claude&#x2F;skills&lt;&#x2F;code&gt; directory. Note that this is also the easiest way to make these skills &lt;a href=&quot;https:&#x2F;&#x2F;agentskills.io&#x2F;home#adoption&quot;&gt;available to other LLM CLI agents&lt;&#x2F;a&gt; like Opencode, Codex, and Mistral Vibe. In this repo, I have mostly worked with &lt;a href=&quot;https:&#x2F;&#x2F;opencode.ai&quot;&gt;Opencode&lt;&#x2F;a&gt; and the skills in the &lt;code&gt;.claude&lt;&#x2F;code&gt; location just work with it.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;❯&lt;&#x2F;span&gt;&lt;span&gt; ls&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -l&lt;&#x2F;span&gt;&lt;span&gt; .claude&#x2F;skills
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;l...&lt;&#x2F;span&gt;&lt;span&gt; detecting-jujutsu -&amp;gt; ..&#x2F;..&#x2F;skills&#x2F;detecting-jujutsu
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;l...&lt;&#x2F;span&gt;&lt;span&gt; documenting-architectural-decisions -&amp;gt; ..&#x2F;..&#x2F;skills&#x2F;documenting-architectural-decisions
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;l...&lt;&#x2F;span&gt;&lt;span&gt; evaluating-skills -&amp;gt; ..&#x2F;..&#x2F;skills&#x2F;evaluating-skills
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;l...&lt;&#x2F;span&gt;&lt;span&gt; using-jujutsu -&amp;gt; ..&#x2F;..&#x2F;skills&#x2F;using-jujutsu
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;d...&lt;&#x2F;span&gt;&lt;span&gt; verify-release-readiness
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The &lt;code&gt;l&lt;&#x2F;code&gt; at the beginning of each line stands for symbolic link. You&#x27;ll notice one real directory in there, that is a skill only relevant to this repository.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;future-plans&quot;&gt;Future plans&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;ll be adding LLM artefacts as I move my own setup more and more to this repository. Since I&#x27;m trying to reuse as much as possible (within reason) between different LLM agents, I need a central location anyway, preferably vendor neutral yet pragmatic (e.g. using the &lt;code&gt;.claude&#x2F;skills&lt;&#x2F;code&gt; location to share skills). Also, my hope is to make this repository a more live and automatically up-to-date version of the artefacts I use day to day.&lt;&#x2F;p&gt;
&lt;p&gt;Related to this, I am thinking of creating a setup similar to &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;webpro&#x2F;awesome-dotfiles&quot;&gt;dotfiles&lt;&#x2F;a&gt; (where developers share configuration files) but for LLM agent configurations: &#x27;agentfiles&#x27;. I intend to share my LLM agent configurations and how I integrate them. Let me know if you would be interested in this or are already sharing.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Implementing an Urgent Feature with Opencode, Claude, and Zed</title>
        <published>2025-12-18T00:00:00+00:00</published>
        <updated>2025-12-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://hanlho.com/p/implementing-an-urgent-feature-with-llms-and-zed/"/>
        <id>https://hanlho.com/p/implementing-an-urgent-feature-with-llms-and-zed/</id>
        
        <content type="html" xml:base="https://hanlho.com/p/implementing-an-urgent-feature-with-llms-and-zed/">&lt;p&gt;This is a short post to share a positive experience I had using an LLM agent to quickly add a feature to an existing personal CLI &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lhohan&#x2F;simple-time-tracker&quot;&gt;time-tracking application&lt;&#x2F;a&gt;. Below, I describe how I added it using Zed, Opencode and Claude.&lt;&#x2F;p&gt;
&lt;p&gt;To start, I wasn&#x27;t even sure the feature I needed existed in a text-based time-tracking application I use day-to-day to keep track of what I work on. My application &lt;em&gt;has&lt;&#x2F;em&gt; a way of getting the information I needed out, but the feature that should make this easy was missing details on &lt;em&gt;what&lt;&#x2F;em&gt; I had actually worked on.&lt;&#x2F;p&gt;
&lt;p&gt;So, should I invest the time and expand the feature, or accept that it was missing for now and spend a lot more time on manual work? I could try an LLM agent and see if it could help me implement the change quickly. Each choice had downsides: spending &lt;em&gt;more&lt;&#x2F;em&gt; time digging through time-tracking information to fill in timesheets is not very appealing, and implementing the feature (with or without agents) could become a time sink. I also had lots of other work planned for the day.&lt;&#x2F;p&gt;
&lt;p&gt;I decided to implement it, telling myself I’d stop if it didn’t look like I had a clear path to finish it within one hour.&lt;&#x2F;p&gt;
&lt;p&gt;Because I think it is relevant to the (spoiler) successful implementation, let me share a little about this project. It is a Rust codebase that I use to test development practices, and I think it is structured and implemented fairly well. The CLI, the main part of the application, has over 95% coverage using behaviour-driven, DSL-style acceptance tests. This setup gives the LLM models both structure and plenty of examples to follow when adding tests. I will not go into the details here, but I have added a brief example at the end. Also noteworthy: this is a small project, which definitely makes a difference.&lt;&#x2F;p&gt;
&lt;p&gt;For this implementation, I used Zed with its Opencode integration. Lately, I have been on the command line building smaller apps prompt-driven, without worrying much about the fine details. But for this project the actual implementation mattered to me, so I wanted to track changes more closely in an IDE. Opencode taps into my Claude subscription; I can use Opus for planning and Haiku for implementation.&lt;&#x2F;p&gt;
&lt;p&gt;Honestly, I was very pleased with how smoothly this feature was implemented. What contributed to this was the plan-first approach before implementing anything. For anything non-trivial, always plan first!&lt;&#x2F;p&gt;
&lt;p&gt;Here is a high-level overview of my interaction with Opencode in Zed:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Investigate
&lt;ul&gt;
&lt;li&gt;I started with Claude Opus and asked whether the feature I needed already existed, rather than looking it up myself because I was under time pressure. It didn&#x27;t.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Plan
&lt;ul&gt;
&lt;li&gt;I asked Claude to plan the feature and use a test-driven approach. It broke the work into nine tests, and I asked it to pause after each one for me to review.&lt;&#x2F;li&gt;
&lt;li&gt;Before starting any implementation, I asked it to write the plan to a Markdown file in the backlog.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Then I reviewed the plan.&lt;&#x2F;em&gt; That sounds more superficial than what I did, but I cannot say much more than that it simply looked good.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Implementation
&lt;ul&gt;
&lt;li&gt;I switched to Claude Haiku for implementation.&lt;&#x2F;li&gt;
&lt;li&gt;It started off well and asked for feedback after each test cycle, and I asked for a refactor to remove duplication.&lt;&#x2F;li&gt;
&lt;li&gt;While it was implementing, I discovered I wanted a different kind of description for the tasks, so I told it to change that in the plan. I did not switch models for this.&lt;&#x2F;li&gt;
&lt;li&gt;The plan was updated in all the correct places.&lt;&#x2F;li&gt;
&lt;li&gt;After this, the workflow changed: it stopped asking me for feedback after each step, and before I realised it, seven of nine tests were running. Not the TDD flow I asked for, but it worked.&lt;&#x2F;li&gt;
&lt;li&gt;Instead of asking it to redo anything, I reviewed the implementation (it was not a lot of code) and continued.&lt;&#x2F;li&gt;
&lt;li&gt;I ran the program against my own data and everything worked as intended. Aside from the one refactoring to remove duplication, I did not change the code.&lt;&#x2F;li&gt;
&lt;li&gt;One loose end I had to remind it of: update the documentation.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I have shared the full session here: https:&#x2F;&#x2F;opncd.ai&#x2F;share&#x2F;aBYozahW.&lt;&#x2F;p&gt;
&lt;p&gt;There were some pitfalls of using LLMs that I ran into, and I admittedly leaned into them. Speed beating accuracy is a real risk. The feature works and the code looks good, but if I were coding hands-on I probably would have reviewed more thoroughly. It is hard to tell if the end result would have been &lt;em&gt;drastically&lt;&#x2F;em&gt; better. It requires discipline to not start running along with the agent and to not start accepting everything if the outcome is as expected. The LLM gave me what I needed and any follow-up changes should be small, but I still see little things I would have done differently if I done it manually (which other developers may disagree with too, to be fair). For example, some of the tests could do with fewer assertions. The current code organisation makes that easy to address later. &lt;em&gt;If&lt;&#x2F;em&gt; any tech debt was added, it is very small and under control, so I stopped, generated my reports and filled in my timesheets.&lt;&#x2F;p&gt;
&lt;p&gt;Overall, working in Zed made it easy to review the code, and combining Opencode&#x27;s plan phases kept things organised. The existing, structured DSL-based test approach with plenty of examples also helped.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;extra-how-an-llm-can-work-better-with-a-well-structured-dsl&quot;&gt;Extra: How an LLM can work better with a well-structured DSL&lt;&#x2F;h2&gt;
&lt;p&gt;To give some context, what the application needed was to combine two existing flags: &lt;code&gt;breakdown&lt;&#x2F;code&gt; and &lt;code&gt;details&lt;&#x2F;code&gt;. The time &lt;code&gt;breakdown&lt;&#x2F;code&gt; reports were already implemented but were only reporting time spent per day, week, month or year. What I needed were details of the projects I had worked on. The application already had a &lt;code&gt;details&lt;&#x2F;code&gt; flag but it was not implemented for this view.&lt;&#x2F;p&gt;
&lt;p&gt;In the test DSL, the flags are set by calling methods in the &lt;code&gt;given&lt;&#x2F;code&gt; setup phase: &lt;code&gt;breakdown_flag(...)&lt;&#x2F;code&gt; and &lt;code&gt;details_flag()&lt;&#x2F;code&gt;. The breakdown feature did not implement the &lt;code&gt;details&lt;&#x2F;code&gt; flag, so it was not used in the tests for this feature. What is nice (and I credit this way of testing for it) is that the LLM was able to figure out the &lt;code&gt;details_flag&lt;&#x2F;code&gt; was already present and decided to re-use it: &lt;code&gt;Cmd::given().details_flag()....&lt;&#x2F;code&gt;. Here is an example of such a DSL test:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span&gt;#[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;breakdown_day_with_details_should_show_tasks_per_day&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; some_content = &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;## TT 2020-01-01
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;- #project-a 1h Task A
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;- #project-b 2h Task B&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    Cmd::given()
&lt;&#x2F;span&gt;&lt;mark style=&quot;background-color:#a7adba30;&quot;&gt;&lt;span&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;details_flag&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;&#x2F;mark&gt;&lt;mark style=&quot;background-color:#a7adba30;&quot;&gt;&lt;span&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;breakdown_flag&lt;&#x2F;span&gt;&lt;span&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;day&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)
&lt;&#x2F;span&gt;&lt;&#x2F;mark&gt;&lt;span&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;tags_filter&lt;&#x2F;span&gt;&lt;span&gt;(&amp;amp;[&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;project-a&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;project-b&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;])
&lt;&#x2F;span&gt;&lt;span&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;at_date&lt;&#x2F;span&gt;&lt;span&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;2020-01-01&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)
&lt;&#x2F;span&gt;&lt;span&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;a_file_with_content&lt;&#x2F;span&gt;&lt;span&gt;(some_content)
&lt;&#x2F;span&gt;&lt;span&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;when_run&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;should_succeed&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;expect_task_with_duration&lt;&#x2F;span&gt;&lt;span&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;project-a&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;1h 00m&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)
&lt;&#x2F;span&gt;&lt;span&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;expect_task_with_duration&lt;&#x2F;span&gt;&lt;span&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;project-b&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;2h 00m&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;);
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Thank you for reading,&lt;&#x2F;p&gt;
&lt;p&gt;Hans&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Grounded decision records from AI conversations</title>
        <published>2025-09-02T00:00:00+00:00</published>
        <updated>2025-09-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://hanlho.com/p/grounded-decision-records-from-ai-conversations/"/>
        <id>https://hanlho.com/p/grounded-decision-records-from-ai-conversations/</id>
        
        <content type="html" xml:base="https://hanlho.com/p/grounded-decision-records-from-ai-conversations/">&lt;p&gt;If you&#x27;ve read some of my posts before or worked with me, you know I like using Architectural Decision Records (ADRs) &lt;a href=&quot;&#x2F;p&#x2F;less-mentioned-benefits-of-architecture-decision-records&#x2F;&quot;&gt;for lots of reasons&lt;&#x2F;a&gt;. To me the most important one is documenting the why of a decision.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;ve worked with AI models before, you&#x27;ve probably asked them for options when brainstorming solution ideas when you&#x27;re not sure about direction. In this situation, I&#x27;ve found it quite easy, maybe even more logical, to document the decision in a decision record with help from the AI model you have been working with. After all, you got feedback from it anyway.&lt;&#x2F;p&gt;
&lt;p&gt;This post briefly explains how I use Claude Code to write decision records (not necessarily architectural ones) when it&#x27;s helped me make a decision. My goal isn&#x27;t to dive into an elaborate investigation into the pros and cons of this approach, but I will touch upon a few points. The process is not specific to Claude Code but can be adapted to other AI models or tools as well.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s the process I&#x27;ve been following:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;1. Ask for the decision record during the conversation&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;After going back and forth on options and reaching a decision, I ask something like:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;Given&lt;&#x2F;span&gt;&lt;span&gt; your feedback, I think Option 2 is the way I want to implement.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;Principally&lt;&#x2F;span&gt;&lt;span&gt; I do not want to complicate things with 2 tools at the moment.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;Before&lt;&#x2F;span&gt;&lt;span&gt; implementing, summarise this into an ADR in the &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;adr&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39; directory as a way of confirming our mutual understanding.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;So,&lt;&#x2F;span&gt;&lt;span&gt; write an ADR first, then ask me to confirm the ADR. Once I do, continue implementing.
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The phrasing is a bit sloppy, as this is what I actually wrote in my recent changes, but that&#x27;s OK, Claude Code can work with this.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;2. Review and edit the generated draft&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;What it comes up with initially is actually pretty good. A lot will depend on the conversation you had with it and the input you gave it, of course. But the decision record mostly contains what was discussed and decided quite well. The text will be structured like an ADR even without me having to explain what an ADR is. It even picked up the decision record&#x27;s next number too.&lt;&#x2F;p&gt;
&lt;p&gt;Usually content editing is needed, but having a complete draft to start with makes a big difference instead of starting from a blank page. So after the draft is written, I edit it mostly on content only.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;3. Use as implementation foundation&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;When done, the decision is basically documented and it can serve as the basis of our next step. To make the continuation based on the decision record only, at this point you could clear or restart the Claude Code session to start fresh.&lt;&#x2F;p&gt;
&lt;p&gt;This last step is meant to ground the decision record in reality. When you include the decision record as basis for implementation, it becomes living documentation that creates a feedback loop. During implementation you may encounter issues not anticipated during the decision making process. These can then be documented in the decision record, creating a continuous improvement cycle.&lt;&#x2F;p&gt;
&lt;p&gt;I often use my home projects as playgrounds to experiment with new ideas, technologies, and methodologies I want to try out because they&#x27;re new to me or because I want to confirm they&#x27;re still useful. This is why most of my home projects serve two purposes: build the thing and apply what I think are best practices.&lt;&#x2F;p&gt;
&lt;p&gt;In this particular project, I felt the need to create decision records. They aren&#x27;t necessarily architecture related decisions but more decisions I&#x27;d like to document to remember why I went this way. I mainly make use of the markdown format of ADRs to document my decisions.&lt;&#x2F;p&gt;
&lt;p&gt;Generally speaking, this is mostly an experiment at the moment. I&#x27;m trying this out in the setting of personal projects, but I think it may lower the bar for writing decision records in general. Not everyone wants to go to great lengths to record decisions, even if they see the value. Personally, I think it doesn&#x27;t need to take a lot of time to document a decision, yet I often end up spending much more time on it than I anticipated or hoped for when I started writing one.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lhohan&#x2F;references&#x2F;blob&#x2F;main&#x2F;adr-example&#x2F;005-enhanced-notes-status-tracking-build-command.md&quot;&gt;Here&lt;&#x2F;a&gt; is a decision record example for those interested. It is written by an LLM mostly. I know this may be controversial, but it is also useful. I do not think this is &#x27;AI slop&#x27;, if you review it and it all makes sense, I don&#x27;t see much need for a complete rewrite. Having a documented decision is worth more than not documenting because it was written by AI. I haven&#x27;t tried this in a team or organisational setting, but I&#x27;m curious to see how it works out and how people would feel about it. In any case, whoever created the decision record with help of an AI is always responsible for the decision and its recording.&lt;&#x2F;p&gt;
&lt;p&gt;Also, &quot;working with an LLM replaces thinking&quot; is an often heard argument. I agree and it&#x27;s a reason for concern for me too, the impact on my own thinking. But an LLM also comes up with good ideas. It is easy and tempting to simply accept what&#x27;s there. Maybe not all decisions require deep thinking though, and we just want to note down why we&#x27;re doing the thing we&#x27;re doing this way.&lt;&#x2F;p&gt;
&lt;p&gt;I am also thinking it may be useful to add to the decision record to what extent an LLM was used to generate the content. Firstly it will get it out of the way when people are suspicious of AI being used and to what extent. I think this is comparable to time or other constraints one has when writing ADRs or decision records in general: this may be worthwhile to document too. Sometimes there is not enough time to think deeply about the decision or consider more options and you have to make a decision with quite some unknowns. In these cases I recommend documenting this in the decision record too.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, there are quite some interesting things that can be done next. When working with Claude Code, if you would create decision records more often it makes sense to create a command to use as &#x27;saved prompt&#x27;. I actually created an agent for this as well (to try out agents mostly, I admit).&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve written about ADRs before, if you want to read more about them:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;&#x2F;p&#x2F;less-mentioned-benefits-of-architecture-decision-records&#x2F;&quot;&gt;Less Mentioned Benefits of Architecture Decision Records&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;&#x2F;p&#x2F;ground-your-adrs-with-a-verification-section&#x2F;&quot;&gt;Ground Your ADRs with a Verification Section&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Thank you for reading, Hans&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Output Styles in Claude Code</title>
        <published>2025-08-22T00:00:00+00:00</published>
        <updated>2025-08-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://hanlho.com/p/claude-code-output-styles/"/>
        <id>https://hanlho.com/p/claude-code-output-styles/</id>
        
        <content type="html" xml:base="https://hanlho.com/p/claude-code-output-styles/">&lt;p&gt;Claude Code&#x27;s output styles control how the AI responds to your requests. This summary covers the built-in styles and when to use each one.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TLDR:&lt;&#x2F;strong&gt; Output styles = stored system prompts that change Claude&#x27;s behaviour. Slash commands = stored user prompts for quick actions.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Use the &#x27;default&#x27; style for classic coding, &#x27;Explanatory&#x27; for learning, &#x27;Learning&#x27; for hands-on practice, and create custom styles as needed to match your workflow or creative needs (start from the default system prompt for inspiration).&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;&#x2F;strong&gt; Requires Claude Code version 1.0.81 or later&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;default-and-built-in-output-styles&quot;&gt;Default and Built-in Output Styles&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Default Output Style&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Purpose: Optimized for software engineering tasks.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Features: Includes system prompt instructions for concise code generation, automatic code verification, and test integration.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Context: This is the initial state, designed for efficient programming workflows.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Explanatory Output Style&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Purpose: Adds educational value and explanations to its software engineering help.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Example: When planning a project, it might explain why it&#x27;s choosing one database over another, or the reasoning behind selecting a store over React context.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Best for: If you want to enhance your learning while coding or need insight into design decisions.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Learning Output Style&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Purpose: Mimics a pair-programming experience to help you learn by doing.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Features:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Provides code insights as you go.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Assigns you small, strategic coding tasks (adds &quot;to-do human&quot; items).&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Checks your work and offers feedback or explanations based on your solutions.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Best for: Developers who want to upskill or learn new patterns interactively.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;custom-output-styles&quot;&gt;Custom Output Styles&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;You can create your own Output Style.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Behind the scenes: Claude generates a new output-style file and modifies the system prompt accordingly.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Impact: Output styles are tightly coupled to the system prompt, so customisations can drastically change behaviour. &lt;em&gt;&lt;strong&gt;Switching to a non-default output style removes software-engineering–specific logic from the system prompt.&lt;&#x2F;strong&gt;&lt;&#x2F;em&gt; This potentially reduces coding efficiency but broadens capability in other domains (research, creative writing, etc.).&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Put differently: output styles introduce the ability to change the _system prompt_ which can be very powerful! Here is an example where I change the behaviour with respect to Claude Code&#x27;s commit behaviour.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-to-use-select-output-styles&quot;&gt;How to Use &amp;amp; Select Output Styles&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Use the CLI to create&#x2F;select&#x2F;explore output styles (&lt;code&gt;output-style:new&lt;&#x2F;code&gt;, then select from available styles).&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Output styles can be selected per session or per project as needed.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;advanced-tips&quot;&gt;Advanced Tips&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Output style selection is part of a broader &quot;system prompt + user message&quot; structure.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;You can further manipulate prompts using &lt;code&gt;--append-system-prompt&lt;&#x2F;code&gt; to add final adjustments to the behaviour.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;For customisation, consider starting from the default system prompt (you can use Claude tracing for this but here is &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lhohan&#x2F;references&#x2F;blob&#x2F;main&#x2F;claude&#x2F;default-system-prompt-1.0.85.md?plain=1&quot;&gt;the default system prompt of Claude Code 1.0.85&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;further-resources&quot;&gt;Further Resources&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=_OILd7UDZvI&amp;amp;si=G--uWYh90wPOP5y0&quot;&gt;Ray Amjad&#x27;s Youtube video&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.anthropic.com&#x2F;en&#x2F;docs&#x2F;claude-code&#x2F;output-styles&quot;&gt;Anthropic Output Styles documentation&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Examples of using Claude Code&#x27;s output styles</title>
        <published>2025-08-22T00:00:00+00:00</published>
        <updated>2025-08-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://hanlho.com/p/examples-of-using-claude-codes-output-styles/"/>
        <id>https://hanlho.com/p/examples-of-using-claude-codes-output-styles/</id>
        
        <content type="html" xml:base="https://hanlho.com/p/examples-of-using-claude-codes-output-styles/">&lt;p&gt;A very short post on Claude Code&#x27;s new &lt;a href=&quot;&#x2F;p&#x2F;claude-code-output-styles&#x2F;&quot;&gt;output styles&lt;&#x2F;a&gt; feature which I have been experimenting with in the past days.&lt;&#x2F;p&gt;
&lt;p&gt;Here are some actual examples of how you can leverage output styles to change &#x27;hard-configured&#x27; Claude Code behaviour:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;&#x2F;p&#x2F;remove-claude-code-branding-from-commit-messages-using-output-styles&#x2F;&quot;&gt;Remove Claude Code branding from commit messages&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;&#x2F;p&#x2F;how-to-use-jujutsu-jj-with-claude-code&#x2F;&quot;&gt;Use Jujutsu with Claude Code&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Thanks for reading,&lt;&#x2F;p&gt;
&lt;p&gt;Hans&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>How to Use Jujutsu (jj) with Claude Code</title>
        <published>2025-08-22T00:00:00+00:00</published>
        <updated>2025-08-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://hanlho.com/p/how-to-use-jujutsu-jj-with-claude-code/"/>
        <id>https://hanlho.com/p/how-to-use-jujutsu-jj-with-claude-code/</id>
        
        <content type="html" xml:base="https://hanlho.com/p/how-to-use-jujutsu-jj-with-claude-code/">&lt;p&gt;I prefer &lt;a href=&quot;https:&#x2F;&#x2F;jj-vcs.github.io&#x2F;jj&#x2F;latest&#x2F;&quot;&gt;Jujutsu&lt;&#x2F;a&gt; (&lt;code&gt;jj&lt;&#x2F;code&gt;) over Git for version control, but getting Claude Code to work with &lt;code&gt;jj&lt;&#x2F;code&gt; proved tricky since Claude Code defaults to &lt;code&gt;git&lt;&#x2F;code&gt;. This post explains how to configure Claude Code to use &lt;code&gt;jj&lt;&#x2F;code&gt; instead of Git for version control operations and file change detection.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ll show you three possible approaches to get Claude Code working properly with Jujutsu repositories, from simple configuration changes to advanced system prompt modifications.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;quick-solution-claude-md-configuration&quot;&gt;Quick Solution: &lt;a href=&quot;http:&#x2F;&#x2F;CLAUDE.md&quot;&gt;CLAUDE.md&lt;&#x2F;a&gt; Configuration&lt;&#x2F;h2&gt;
&lt;p&gt;For most users, this addition to your project&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;CLAUDE.md&quot;&gt;CLAUDE.md&lt;&#x2F;a&gt; file should configure Claude Code to start using Jujutsu:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;markdown&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-markdown &quot;&gt;&lt;code class=&quot;language-markdown&quot; data-lang=&quot;markdown&quot;&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;## Version Control
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-weight:bold;color:#d08770;&quot;&gt;**CRITICAL: This repository uses Jujutsu (jj), not git.**&lt;&#x2F;span&gt;&lt;span&gt; Always use &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`jj`&lt;&#x2F;span&gt;&lt;span&gt; commands for version control operations.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- Use &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`jj st --no-pager`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; to check status (like &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`git status`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- Use &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`jj log --no-pager`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; to view history (like &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`git log`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- Use &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`jj commit -m &amp;quot;message&amp;quot;`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; to create commits (like &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`git commit`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- Use &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`jj split -m &amp;quot;message&amp;quot; file1 file2`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; to commit specific files only
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- Use &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`jj bookmark set main -r @- &amp;amp;&amp;amp; jj git push`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; to push to remote repository
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- ALWAYS check for any sensitive information that shouldn&amp;#39;t be committed
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;CLAUDE.md&quot;&gt;CLAUDE.md&lt;&#x2F;a&gt; file contains instructions that Claude Code reads for each project.&lt;&#x2F;p&gt;
&lt;p&gt;Before I came up with this configuration I tried quite a number of different instructions. I suspect this one works because of the combination of:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The &#x27;CRITICAL&#x27; keyword&lt;&#x2F;strong&gt;: Signals high priority to Claude Code&#x27;s instruction processing&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Explicit repository type declaration&lt;&#x2F;strong&gt;: Removes ambiguity about which version control system to use&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Specific&lt;&#x2F;strong&gt; &lt;code&gt;jj&lt;&#x2F;code&gt; &lt;strong&gt;command mapping&lt;&#x2F;strong&gt;: Provides concrete alternatives to built-in Git commands&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;You can expand the command list to match your workflow, but these core commands worked for me and should get you started.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-claude-code-uses-git&quot;&gt;Why Claude Code uses Git&lt;&#x2F;h2&gt;
&lt;p&gt;Claude Code has Git instructions hardcoded into its system promp, the internal directions that override user preferences. Here is &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lhohan&#x2F;references&#x2F;blob&#x2F;c5501c775496b2e8500eb307a632a0abae48e2f1&#x2F;claude&#x2F;default-system-prompt-1.0.85.md&quot;&gt;part of the Git configuration in the system prompt&lt;&#x2F;a&gt; from Claude Code 1.0.85:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;markdown&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-markdown &quot;&gt;&lt;code class=&quot;language-markdown&quot; data-lang=&quot;markdown&quot;&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;# Committing changes with git
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;When the user asks you to create a new git commit, follow these steps carefully:
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;1. You have the capability to call multiple tools in a single response. When multiple independent pieces of information are requested, batch your tool calls together for optimal performance. ALWAYS run the following bash commands in parallel, each using the Bash tool:
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;   - Run a git status command to see all untracked files.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;   - Run a git diff command to see both staged and unstaged changes that will be committed.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;   - Run a git log command to see recent commit messages, so that you can follow this repository&amp;#39;s commit message style.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;2. Analyze all staged changes (both previously staged and newly added) and draft a commit message:
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;   - Summarize the nature of the changes (eg. new feature, enhancement to an existing feature, bug fix, refactoring, test, docs, etc.). Ensure the message accurately reflects the changes and their purpose (i.e. &amp;quot;add&amp;quot; means a wholly new feature, &amp;quot;update&amp;quot; means an enhancement to an existing feature, &amp;quot;fix&amp;quot; means a bug fix, etc.).
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;   - Check for any sensitive information that shouldn&amp;#39;t be committed
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;   - Draft a concise (1-2 sentences) commit message that focuses on the &amp;quot;why&amp;quot; rather than the &amp;quot;what&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;As you can see, Claude Code&#x27;s system prompt contains hardcoded Git configuration to commit changes. Since system instructions override user prompts when you mention committing or version control, it defaults to Git commands even in Jujutsu repositories. Or at least this i how I interpret Claude Code&#x27;s behaviour.&lt;&#x2F;p&gt;
&lt;p&gt;If the &lt;a href=&quot;http:&#x2F;&#x2F;CLAUDE.md&quot;&gt;CLAUDE.md&lt;&#x2F;a&gt; approach above doesn&#x27;t work consistently, here are more advanced alternatives:&lt;&#x2F;p&gt;
&lt;h2 id=&quot;advanced-solution-custom-output-style&quot;&gt;Advanced Solution: Custom Output Style&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.anthropic.com&#x2F;en&#x2F;docs&#x2F;claude-code&#x2F;output-styles&quot;&gt;Output styles&lt;&#x2F;a&gt; let you override Claude Code&#x27;s system prompt entirely, giving you complete control over its behaviour. &lt;a href=&quot;&#x2F;p&#x2F;claude-code-output-styles&#x2F;&quot;&gt;Here is my own summary&lt;&#x2F;a&gt; of Claude Code output styles if you want to know more about this feature.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;&#x2F;p&#x2F;claude-code-output-styles&#x2F;&quot;&gt;&lt;strong&gt;Setup step&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;&lt;strong&gt;s:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Start &lt;code&gt;claude&lt;&#x2F;code&gt; and run &lt;code&gt;&#x2F;output-style:new&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Name your style (e.g., &lt;code&gt;jj-support&lt;&#x2F;code&gt;) and complete the wizard&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;ul&gt;
&lt;li&gt;The initial content you enter doesn&#x27;t matter since we&#x27;ll replace it entirely in the next step&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;
&lt;p&gt;Find the created &lt;code&gt;.md&lt;&#x2F;code&gt; file in &lt;code&gt;.claude&#x2F;output-styles&#x2F;&lt;&#x2F;code&gt; (project or home) directory&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Replace its contents with a modified system prompt that includes Jujutsu support&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;You can use &lt;a href=&quot;https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;lhohan&#x2F;references&#x2F;refs&#x2F;heads&#x2F;main&#x2F;claude-config-example&#x2F;.claude&#x2F;output-styles&#x2F;jj-support.md&quot;&gt;my pre-built version&lt;&#x2F;a&gt; based on Claude Code 1.0.85&#x27;s system prompt. &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lhohan&#x2F;references&#x2F;blob&#x2F;87e6cf7bbabf3e07bd6a99aa367d1695d40ceb6f&#x2F;claude-config-example&#x2F;.claude&#x2F;output-styles&#x2F;jj-support.md&quot;&gt;These are the directives I added to add &#x27;jj&#x27; support&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The critical addition is automatic repository type detection:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;markdown&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-markdown &quot;&gt;&lt;code class=&quot;language-markdown&quot; data-lang=&quot;markdown&quot;&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;### MANDATORY FIRST STEP FOR ALL COMMITS
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;Before ANY commit-related commands, you MUST:
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;1. Run &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`bash: if jj root &amp;gt;&#x2F;dev&#x2F;null 2&amp;gt;&amp;amp;1; then echo &amp;quot;jj&amp;quot;; elif git rev-parse --git-dir &amp;gt;&#x2F;dev&#x2F;null 2&amp;gt;&amp;amp;1; then echo &amp;quot;git&amp;quot;; else echo &amp;quot;none&amp;quot;; fi`
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;2. If output is &amp;quot;jj&amp;quot; → use jj commands
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;3. If output is &amp;quot;git&amp;quot; → use git commands
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;4. If output is &amp;quot;none&amp;quot; → not a repository, inform user
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span&gt;NEVER use git commands if .jj directory exists, regardless of environment info.
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;NOTE: Environment &amp;quot;git repo&amp;quot; status may be misleading when both .jj and .git exist. Always use directory detection as the authoritative source.
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;(Turns out you can add logic inside a system prompt.)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Trade-offs&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;✅ Most reliable solution&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;✅ Works even when &lt;a href=&quot;http:&#x2F;&#x2F;CLAUDE.md&quot;&gt;CLAUDE.md&lt;&#x2F;a&gt; is ignored or &#x27;forgotten&#x27;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;❌ Requires maintenance when Claude Code updates, that is if you want to keep in sync with the latest default system prompt&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;❌ Claude Code will request permission to run the detection command&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Select your custom output style with &lt;code&gt;&#x2F;output-style&lt;&#x2F;code&gt; and test by asking Claude to &quot;commit the changes&quot;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;experimental-solution-command-line-flag&quot;&gt;Experimental Solution: Command-Line Flag&lt;&#x2F;h3&gt;
&lt;p&gt;The &lt;code&gt;--append-system-prompt&lt;&#x2F;code&gt; flag adds system instructions directly after Claude Code&#x27;s system prompt at startup.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;claude-code --append-system-prompt &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;In jj repositories, use jj commands instead of git commands.&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;&#x2F;strong&gt;: Simple instructions like the example above don&#x27;t work. You&#x27;d need to pass the same comprehensive instructions used in the output style approach. I did not try this myself yet as for now I am done &lt;a href=&quot;https:&#x2F;&#x2F;www.hanselman.com&#x2F;blog&#x2F;yak-shaving-defined-ill-get-that-done-as-soon-as-i-shave-this-yak&quot;&gt;shaving this yak&lt;&#x2F;a&gt; for now. I am sure you can pass the inputs from a file to the prompt making it more manageable as well.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Trade-offs&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;✅ No file modifications needed&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;✅ Easy to test different configurations&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;✅ Works at system level like hardcoded instructions&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;❌ Must be added each time you start Claude Code (needs helper command)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;choosing-the-right-approach&quot;&gt;Choosing the Right Approach&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Start with&lt;&#x2F;strong&gt; &lt;a href=&quot;http:&#x2F;&#x2F;CLAUDE.md&quot;&gt;&lt;strong&gt;CLAUDE.md&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; &lt;strong&gt;configuration&lt;&#x2F;strong&gt;. It&#x27;s simple, requires no system modifications, and should work for most users.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Upgrade to custom output style&lt;&#x2F;strong&gt; if:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Claude Code frequently ignores your &lt;a href=&quot;http:&#x2F;&#x2F;CLAUDE.md&quot;&gt;CLAUDE.md&lt;&#x2F;a&gt; instructions&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;You work with multiple Jujutsu repositories&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;You want the most reliable solution&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;You are willing to update the output style to the latest system prompts when it changes (significantly), or accept running with an outdated configuration version.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Consider the command-line flag&lt;&#x2F;strong&gt; for:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;When you want to stay up to date with the latest system context versions without having to update the output style each time.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Testing different configurations quickly&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;important-considerations&quot;&gt;Important Considerations&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;missing-git-features&quot;&gt;Missing Git Features&lt;&#x2F;h3&gt;
&lt;p&gt;When you override Claude Code&#x27;s Git behaviour, you lose may some built-in safety features:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Automatic sensitive information checking&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Commit message formatting guidelines&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Built-in branching workflow guidance&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Consider adding these to your &lt;a href=&quot;http:&#x2F;&#x2F;CLAUDE.md&quot;&gt;CLAUDE.md&lt;&#x2F;a&gt; configuration if they&#x27;re important to your workflow.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bonus-no-more-claude-branding-in-commit-messages&quot;&gt;Bonus: No More Claude Branding in commit messages&lt;&#x2F;h3&gt;
&lt;p&gt;A pleasant side effect is that Claude Code stops adding its promotional footer to commit messages:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;markdown&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-markdown &quot;&gt;&lt;code class=&quot;language-markdown&quot; data-lang=&quot;markdown&quot;&gt;&lt;span&gt;🤖 Generated with &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;[Claude Code](https:&#x2F;&#x2F;claude.ai&#x2F;code)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;Co-Authored-By: Claude &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;&amp;lt;noreply@anthropic.com&amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;&#x2F;h2&gt;
&lt;p&gt;To integrate Jujutsu workflows in Claude Code, but these three solutions exist:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;CLAUDE.md&quot;&gt;&lt;strong&gt;CLAUDE.md&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; &lt;strong&gt;configuration&lt;&#x2F;strong&gt;: Simple and effective for most users&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Custom output styles&lt;&#x2F;strong&gt;: Most reliable but requires maintenance&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Command-line flags&lt;&#x2F;strong&gt;: Less maintenance and best for testing&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Start with the &lt;a href=&quot;http:&#x2F;&#x2F;CLAUDE.md&quot;&gt;CLAUDE.md&lt;&#x2F;a&gt; approach. If Claude Code continues defaulting to Git commands despite your configuration, escalate to a custom output style for complete system-level control.&lt;&#x2F;p&gt;
&lt;p&gt;Thank you for reading, Hans&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Remove Claude Code branding from commit messages using output styles</title>
        <published>2025-08-22T00:00:00+00:00</published>
        <updated>2025-08-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://hanlho.com/p/remove-claude-code-branding-from-commit-messages-using-output-styles/"/>
        <id>https://hanlho.com/p/remove-claude-code-branding-from-commit-messages-using-output-styles/</id>
        
        <content type="html" xml:base="https://hanlho.com/p/remove-claude-code-branding-from-commit-messages-using-output-styles/">&lt;p&gt;When Claude Code creates git commits for you, it automatically adds its own signature to every commit message, including a promotional link and co-author attribution. Personally I think this is pretty annoying but especially for professional work or team repositories you may prefer cleaner commit messages.&lt;&#x2F;p&gt;
&lt;p&gt;By default, Claude Code adds these lines to every commit:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;🤖&lt;&#x2F;span&gt;&lt;span&gt; Generated with &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;Claude Code&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span&gt;(https:&#x2F;&#x2F;claude.ai&#x2F;code)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;Co-Authored-By:&lt;&#x2F;span&gt;&lt;span&gt; Claude &amp;lt;noreply@anthropic.com&amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Fortunately, since version 1.0.81, Claude Code supports &lt;a href=&quot;https:&#x2F;&#x2F;docs.anthropic.com&#x2F;en&#x2F;docs&#x2F;claude-code&#x2F;output-styles&quot;&gt;&#x27;output styles&#x27;&lt;&#x2F;a&gt; (here is &lt;a href=&quot;&#x2F;p&#x2F;claude-code-output-styles&#x2F;&quot;&gt;my own summary&lt;&#x2F;a&gt;). Output styles are configuration files that allow you to customise Claude Code&#x27;s behaviour by modifying its system prompt (the internal instructions that control how Claude responds).&lt;&#x2F;p&gt;
&lt;p&gt;This feature allows us to remove Claude Code&#x27;s behaviour of adding itself to every commit message.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;creating-the-custom-output-style&quot;&gt;Creating the Custom Output Style&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Start &lt;code&gt;claude&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Create a new output-style using the &lt;code&gt;&#x2F;output-style:new&lt;&#x2F;code&gt; command. Name it, I used &lt;code&gt;no-claude-in-commit-msg&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Complete the creation wizard. The initial content you enter doesn&#x27;t matter since we&#x27;ll replace it entirely in the next step.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;configuring-the-system-prompt&quot;&gt;Configuring the System Prompt&lt;&#x2F;h2&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;
&lt;p&gt;Locate the new output style file. Look for a &lt;code&gt;.md&lt;&#x2F;code&gt; file with your chosen name in the &lt;code&gt;.claude&#x2F;output-styles&#x2F;&lt;&#x2F;code&gt; directory (either in your project folder or home directory) and open it in your text editor.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Replace the entire file content with a modified system prompt that excludes commit message branding. You have two options:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Manual approach&lt;&#x2F;strong&gt;: Find the system prompt yourself to remove Claude Code references&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ready-to-use version&lt;&#x2F;strong&gt;: Use &lt;a href=&quot;https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;lhohan&#x2F;references&#x2F;refs&#x2F;heads&#x2F;main&#x2F;claude-config-example&#x2F;.claude&#x2F;output-styles&#x2F;no-claude-in-commit-msg.md&quot;&gt;my version based on the system prompt of Claude Code 1.0.85&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;If you&#x27;re curious about the changes, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lhohan&#x2F;references&#x2F;commit&#x2F;c5501c775496b2e8500eb307a632a0abae48e2f1&quot;&gt;view the diff&lt;&#x2F;a&gt; showing exactly which lines were removed to eliminate Claude Code self-references in commits and pull requests.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Save the file.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;In &lt;code&gt;claude&lt;&#x2F;code&gt;: &lt;code&gt;&#x2F;output-style&lt;&#x2F;code&gt; should now show the updated style.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;testing-the-changes&quot;&gt;Testing the Changes&lt;&#x2F;h2&gt;
&lt;p&gt;Now let&#x27;s verify that our custom output style works as expected:&lt;&#x2F;p&gt;
&lt;h3 id=&quot;before-default-output-style&quot;&gt;Before: Default Output Style&lt;&#x2F;h3&gt;
&lt;p&gt;First, let&#x27;s see what happens with the default output style:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;&amp;gt; &#x2F;output-style
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;⎿&lt;&#x2F;span&gt;&lt;span&gt;  Set output style to default
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; commit &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;changes
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;╭───────────────
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;│&lt;&#x2F;span&gt;&lt;span&gt; Bash command            
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;│                         
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;│&lt;&#x2F;span&gt;&lt;span&gt;   git commit&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -m &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;chore(claude): Add default output 
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;│   style configuration                              
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;│                                                    
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;│   🤖 Generated with [Claude Code](https:&#x2F;&#x2F;claude.ai&#x2F;code)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;│                                                    
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;│   Co-Authored-By: Claude &amp;lt;noreply@anthropic.com&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;  
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;╰───────────────
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Notice the Claude Code branding and co-author attribution in the commit message.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;after-custom-output-style&quot;&gt;After: Custom Output Style&lt;&#x2F;h3&gt;
&lt;p&gt;Now let&#x27;s switch to our custom output style and try the same operation:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;&amp;gt; &#x2F;output-style
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;⎿&lt;&#x2F;span&gt;&lt;span&gt;  Set output style to &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;no-claude-in-commit-msg&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; commit &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;changes
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;╭───────────────
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;│&lt;&#x2F;span&gt;&lt;span&gt; Bash command            
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;│                         
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;│&lt;&#x2F;span&gt;&lt;span&gt;   git commit&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -m &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;chore(claude): set output style
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;│   to no-claude-in-commit-msg&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;                   
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;╰───────────────
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Nice! The commit message is now clean, containing only the actual commit description without any Claude Code references.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;You&#x27;ve successfully customised Claude Code to remove its self-referential branding from commit messages. Your git history will now be cleaner and more professional, containing only the essential commit information without promotional content.&lt;&#x2F;p&gt;
&lt;p&gt;For more details on output styles, check the &lt;a href=&quot;https:&#x2F;&#x2F;docs.anthropic.com&#x2F;en&#x2F;docs&#x2F;claude-code&#x2F;output-styles&quot;&gt;official documentation&lt;&#x2F;a&gt; or my &lt;a href=&quot;&#x2F;p&#x2F;claude-code-output-styles&#x2F;&quot;&gt;own summary&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
