<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Biró, Csaba Attila</title>
    <description>The latest articles on DEV Community by Biró, Csaba Attila (@q-soriarty).</description>
    <link>https://dev.to/q-soriarty</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3846809%2F204cb26f-629d-4450-9afa-5d794ab57674.png</url>
      <title>DEV Community: Biró, Csaba Attila</title>
      <link>https://dev.to/q-soriarty</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/q-soriarty"/>
    <language>en</language>
    <item>
      <title>One Markdown file that teaches Claude Code to enforce Gitflow, conventional commits, issue-driven branching, semantic versioning, and 14 forbidden operations. Zero dependencies, MIT licensed.</title>
      <dc:creator>Biró, Csaba Attila</dc:creator>
      <pubDate>Fri, 27 Mar 2026 23:51:05 +0000</pubDate>
      <link>https://dev.to/q-soriarty/one-markdown-file-that-teaches-claude-code-to-enforce-gitflow-conventional-commits-issue-driven-4lma</link>
      <guid>https://dev.to/q-soriarty/one-markdown-file-that-teaches-claude-code-to-enforce-gitflow-conventional-commits-issue-driven-4lma</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/q-soriarty/i-taught-claude-code-to-enforce-gitflow-heres-the-skill-i-built-4fa9" class="crayons-story__hidden-navigation-link"&gt;I Taught Claude Code to Enforce Gitflow — Here's the Skill I Built&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/q-soriarty" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3846809%2F204cb26f-629d-4450-9afa-5d794ab57674.png" alt="q-soriarty profile" class="crayons-avatar__image" width="612" height="612"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/q-soriarty" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Biró, Csaba Attila
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Biró, Csaba Attila
                
              
              &lt;div id="story-author-preview-content-3417336" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/q-soriarty" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3846809%2F204cb26f-629d-4450-9afa-5d794ab57674.png" class="crayons-avatar__image" alt="" width="612" height="612"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Biró, Csaba Attila&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/q-soriarty/i-taught-claude-code-to-enforce-gitflow-heres-the-skill-i-built-4fa9" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 27&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/q-soriarty/i-taught-claude-code-to-enforce-gitflow-heres-the-skill-i-built-4fa9" id="article-link-3417336"&gt;
          I Taught Claude Code to Enforce Gitflow — Here's the Skill I Built
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/git"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;git&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/q-soriarty/i-taught-claude-code-to-enforce-gitflow-heres-the-skill-i-built-4fa9#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>git</category>
      <category>ai</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Taught Claude Code to Enforce Gitflow — Here's the Skill I Built</title>
      <dc:creator>Biró, Csaba Attila</dc:creator>
      <pubDate>Fri, 27 Mar 2026 23:48:36 +0000</pubDate>
      <link>https://dev.to/q-soriarty/i-taught-claude-code-to-enforce-gitflow-heres-the-skill-i-built-4fa9</link>
      <guid>https://dev.to/q-soriarty/i-taught-claude-code-to-enforce-gitflow-heres-the-skill-i-built-4fa9</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;AI coding assistants are great at writing code, but they're terrible at git discipline. Ask Claude Code to commit your changes and you'll get whatever commit message it feels like. Ask it to create a branch and it'll pick a random name. There's no structure, no traceability, no workflow.&lt;/p&gt;

&lt;p&gt;For teams that care about clean git history, this is a dealbreaker.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: A Claude Code Skill
&lt;/h2&gt;

&lt;p&gt;Claude Code has a feature called &lt;strong&gt;skills&lt;/strong&gt; — Markdown files that teach it specific behaviors. I built one that enforces a complete Gitflow workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;~/.claude/skills/git-workflow/SKILL.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One file. No dependencies. Just drop it in and Claude Code starts following the rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Enforces
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rule&lt;/th&gt;
&lt;th&gt;What Claude Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gitflow branching&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Creates &lt;code&gt;feature/*&lt;/code&gt;, &lt;code&gt;fix/*&lt;/code&gt;, &lt;code&gt;hotfix/*&lt;/code&gt;, &lt;code&gt;release/*&lt;/code&gt; from the correct base&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Conventional Commits&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;feat:&lt;/code&gt;, &lt;code&gt;fix:&lt;/code&gt;, &lt;code&gt;docs:&lt;/code&gt;, &lt;code&gt;chore:&lt;/code&gt; — always imperative, always lowercase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Issue-driven workflow&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Every branch traces back to a GitHub Issue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Semantic Versioning&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Proper &lt;code&gt;MAJOR.MINOR.PATCH&lt;/code&gt; bumps based on commit types&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;--no-ff&lt;/code&gt; merges&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Preserves branch topology in the git graph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;No AI signatures&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No "Co-Authored-By: Claude" cluttering your history&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How It Works in Practice
&lt;/h2&gt;

&lt;p&gt;Say you tell Claude: &lt;em&gt;"I need to fix the broken login flow, there's an issue for it"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Claude will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check the GitHub issue (e.g., #42)&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;git checkout develop &amp;amp;&amp;amp; git pull origin develop&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create &lt;code&gt;fix/42-broken-login&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Make atomic commits: &lt;code&gt;fix(auth): resolve login redirect loop&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Open a PR with title &lt;code&gt;fix(auth): resolve login redirect loop (#42)&lt;/code&gt; and &lt;code&gt;Closes #42&lt;/code&gt; in the body&lt;/li&gt;
&lt;li&gt;After merge, clean up the branch&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No prompting gymnastics. No reminding it every time. The skill handles it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation (30 seconds)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/qubernetic/git-workflow-agent-skill.git
&lt;span class="nb"&gt;cd &lt;/span&gt;git-workflow-agent-skill
./scripts/install_linux.sh   &lt;span class="c"&gt;# or install_macos.sh / install_windows.ps1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The install script creates a symlink, so the skill auto-updates when you &lt;code&gt;git pull&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Inside
&lt;/h2&gt;

&lt;p&gt;The skill is a single 670-line Markdown file that covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Branch model&lt;/strong&gt; — 6 branch types with naming conventions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commit format&lt;/strong&gt; — 11 Conventional Commit types with semver impact&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Release process&lt;/strong&gt; — Standard and hotfix flows with CHANGELOG and tagging&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10 troubleshooting scenarios&lt;/strong&gt; — "I accidentally committed to main", "I force-pushed a shared branch", etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decision guides&lt;/strong&gt; — Quick-reference tables for "which branch?", "which commit type?", "do I bump the version?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forbidden operations&lt;/strong&gt; — 14 things Claude will refuse to do (direct commits to main, squash merges, skipping version bumps)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Repo Also Includes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automated linter&lt;/strong&gt; (&lt;code&gt;scripts/lint.sh&lt;/code&gt;) — validates SKILL.md structure and version consistency&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD&lt;/strong&gt; — lint runs on every PR via GitHub Actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-close workflow&lt;/strong&gt; — closes issues when PRs merge to non-default branches (solves a real GitHub limitation with Gitflow)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-platform install scripts&lt;/strong&gt; — Linux, macOS, Windows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration guide&lt;/strong&gt; — commitlint + husky configs that match the skill's rules&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Not Just Use commitlint/husky?
&lt;/h2&gt;

&lt;p&gt;Those tools validate commit messages mechanically. This skill operates at a higher level:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It knows &lt;em&gt;which branch to create from which base&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;It knows &lt;em&gt;when to bump versions and by how much&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;It traces &lt;em&gt;issues to branches to PRs to changelogs&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;It handles the &lt;em&gt;entire release ceremony&lt;/em&gt; (branch, bump, changelog, tag, GitHub Release, back-merge)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best setup is both: the skill for workflow intelligence, commitlint/husky for mechanical safety nets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built With Its Own Rules
&lt;/h2&gt;

&lt;p&gt;The repo itself follows the exact workflow the skill defines. Every commit is conventional, every branch is issue-driven, every merge is &lt;code&gt;--no-ff&lt;/code&gt;. Check the git history — it's the proof that the system works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/qubernetic/git-workflow-agent-skill" rel="noopener noreferrer"&gt;qubernetic/git-workflow-agent-skill&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MIT licensed. Zero dependencies. Works with any project that uses git.&lt;/p&gt;

&lt;p&gt;If you've been frustrated by AI assistants that treat git like an afterthought, give it a shot. And if you find an edge case the skill doesn't handle — open an issue. That's how the troubleshooting section got to 10 scenarios.&lt;/p&gt;

</description>
      <category>git</category>
      <category>ai</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
