<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Git on MangoDriod</title><link>https://md.eknath.dev/tags/git/</link><description>Recent content in Git on MangoDriod</description><generator>Hugo -- 0.141.0</generator><language>en-us</language><lastBuildDate>Wed, 20 Aug 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://md.eknath.dev/tags/git/index.xml" rel="self" type="application/rss+xml"/><item><title>Setting Up Claude Code Review Before Push</title><link>https://md.eknath.dev/posts/software-development/pre-push-code-review-with-claude/</link><pubDate>Wed, 20 Aug 2025 00:00:00 +0000</pubDate><guid>https://md.eknath.dev/posts/software-development/pre-push-code-review-with-claude/</guid><description>&lt;h1 id="setting-up-claude-code-review-before-push">Setting Up Claude Code Review Before Push&lt;/h1>
&lt;p>This guide will help you set up an automated code review system using Claude Code that runs before every git push, with the option to skip when needed.&lt;/p>
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>
&lt;ul>
&lt;li>Claude Code CLI installed and configured&lt;/li>
&lt;li>Git repository with proper remote setup&lt;/li>
&lt;li>Terminal access&lt;/li>
&lt;/ul>
&lt;h2 id="step-1-create-the-pre-push-hook-script">Step 1: Create the Pre-Push Hook Script&lt;/h2>
&lt;p>Create a git hook that will run before every push:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Navigate to your project root&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cd /path/to/your/project
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Create the hooks directory if it doesn&amp;#39;t exist&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mkdir -p .git/hooks
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Create the pre-push hook file&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>touch .git/hooks/pre-push
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Make it executable&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chmod +x .git/hooks/pre-push
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="step-2-generated-review-reports">Step 2: Generated Review Reports&lt;/h2>
&lt;p>Every code review automatically generates a timestamped markdown report with complete analysis:&lt;/p></description><content:encoded><![CDATA[<h1 id="setting-up-claude-code-review-before-push">Setting Up Claude Code Review Before Push</h1>
<p>This guide will help you set up an automated code review system using Claude Code that runs before every git push, with the option to skip when needed.</p>
<h2 id="prerequisites">Prerequisites</h2>
<ul>
<li>Claude Code CLI installed and configured</li>
<li>Git repository with proper remote setup</li>
<li>Terminal access</li>
</ul>
<h2 id="step-1-create-the-pre-push-hook-script">Step 1: Create the Pre-Push Hook Script</h2>
<p>Create a git hook that will run before every push:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Navigate to your project root</span>
</span></span><span style="display:flex;"><span>cd /path/to/your/project
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Create the hooks directory if it doesn&#39;t exist</span>
</span></span><span style="display:flex;"><span>mkdir -p .git/hooks
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Create the pre-push hook file</span>
</span></span><span style="display:flex;"><span>touch .git/hooks/pre-push
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Make it executable</span>
</span></span><span style="display:flex;"><span>chmod +x .git/hooks/pre-push
</span></span></code></pre></div><h2 id="step-2-generated-review-reports">Step 2: Generated Review Reports</h2>
<p>Every code review automatically generates a timestamped markdown report with complete analysis:</p>
<h3 id="report-features">Report Features</h3>
<ul>
<li><strong>Filename</strong>: <code>claude-review-report_2025-08-20_14-30-45.md</code></li>
<li><strong>Complete History</strong>: All commits since main branch</li>
<li><strong>File Changes</strong>: List of all modified files</li>
<li><strong>Project Checks</strong>: Linting and type checking results</li>
<li><strong>Claude Analysis</strong>: Detailed security, bug, and quality review</li>
<li><strong>Action Checklist</strong>: Checkboxes for addressing issues</li>
</ul>
<h3 id="sample-report-structure">Sample Report Structure</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span># Claude Code Review Report
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="font-weight:bold">**Generated:**</span> 2025-08-20 14:30:45
</span></span><span style="display:flex;"><span><span style="font-weight:bold">**Branch:**</span> feature/new-ui
</span></span><span style="display:flex;"><span><span style="font-weight:bold">**Compared Against:**</span> origin/main  
</span></span><span style="display:flex;"><span><span style="font-weight:bold">**Review Status:**</span> ✅ Passed
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Commits Reviewed
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">-</span> feat: add new user interface
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">-</span> fix: resolve navigation bug
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">-</span> test: add unit tests for new component
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Files Changed
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">-</span> src/components/UserInterface.tsx
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">-</span> src/navigation/Router.tsx  
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">-</span> tests/UserInterface.test.tsx
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Project Checks
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">### Linting
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>✅ <span style="font-weight:bold">**Passed**</span> - No linting issues found
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">### Type Checking
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>⚠️ <span style="font-weight:bold">**Issues Found**</span> - See type checking output
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Claude Code Review Results
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>[Claude&#39;s detailed analysis here]
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Quick Actions
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">### If Issues Found:
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">- [ ]</span> Fix security vulnerabilities
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">- [ ]</span> Resolve critical bugs
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">- [ ]</span> Address performance issues
</span></span><span style="display:flex;"><span>...
</span></span></code></pre></div><h2 id="step-3-write-the-pre-push-hook">Step 3: Write the Pre-Push Hook</h2>
<p>Add the following content to <code>.git/hooks/pre-push</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Colors for output</span>
</span></span><span style="display:flex;"><span>RED<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;\033[0;31m&#39;</span>
</span></span><span style="display:flex;"><span>GREEN<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;\033[0;32m&#39;</span>
</span></span><span style="display:flex;"><span>YELLOW<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;\033[1;33m&#39;</span>
</span></span><span style="display:flex;"><span>NC<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;\033[0m&#39;</span> <span style="color:#75715e"># No Color</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Check if SKIP_CLAUDE_REVIEW environment variable is set</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$SKIP_CLAUDE_REVIEW<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;true&#34;</span> <span style="color:#f92672">]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>YELLOW<span style="color:#e6db74">}</span><span style="color:#e6db74">⚠️  Claude Code review skipped (SKIP_CLAUDE_REVIEW=true)</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>    exit <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Check if claude command is available</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> ! command -v claude &amp;&gt; /dev/null; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>RED<span style="color:#e6db74">}</span><span style="color:#e6db74">❌ Claude Code CLI not found. Install it first or skip with: SKIP_CLAUDE_REVIEW=true git push</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>    exit <span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>YELLOW<span style="color:#e6db74">}</span><span style="color:#e6db74">🤖 Running Claude Code review before push...</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Get the current branch</span>
</span></span><span style="display:flex;"><span>current_branch<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>git branch --show-current<span style="color:#66d9ef">)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Find the main/master branch</span>
</span></span><span style="display:flex;"><span>main_branch<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> git show-ref --verify --quiet refs/heads/main; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    main_branch<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;main&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">elif</span> git show-ref --verify --quiet refs/heads/master; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    main_branch<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;master&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">elif</span> git show-ref --verify --quiet refs/remotes/origin/main; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    main_branch<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;origin/main&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">elif</span> git show-ref --verify --quiet refs/remotes/origin/master; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    main_branch<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;origin/master&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">else</span>
</span></span><span style="display:flex;"><span>    echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>YELLOW<span style="color:#e6db74">}</span><span style="color:#e6db74">⚠️  Could not find main/master branch, comparing with HEAD~1</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>    main_branch<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;HEAD~1&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Check if there are any changes to review since main branch</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$main_branch<span style="color:#e6db74">&#34;</span> !<span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;HEAD~1&#34;</span> <span style="color:#f92672">]</span> <span style="color:#f92672">&amp;&amp;</span> git diff --quiet <span style="color:#e6db74">&#34;</span>$main_branch<span style="color:#e6db74">&#34;</span>..HEAD 2&gt;/dev/null; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>GREEN<span style="color:#e6db74">}</span><span style="color:#e6db74">✅ No changes detected since </span>$main_branch<span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>    exit <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">elif</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$main_branch<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;HEAD~1&#34;</span> <span style="color:#f92672">]</span> <span style="color:#f92672">&amp;&amp;</span> git diff --quiet HEAD~1 HEAD 2&gt;/dev/null; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>GREEN<span style="color:#e6db74">}</span><span style="color:#e6db74">✅ No changes detected since last commit</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>    exit <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Show what&#39;s being reviewed</span>
</span></span><span style="display:flex;"><span>echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>YELLOW<span style="color:#e6db74">}</span><span style="color:#e6db74">📋 Reviewing changes in branch: </span>$current_branch<span style="color:#e6db74"> (since </span>$main_branch<span style="color:#e6db74">)</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$main_branch<span style="color:#e6db74">&#34;</span> !<span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;HEAD~1&#34;</span> <span style="color:#f92672">]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>BLUE<span style="color:#e6db74">}</span><span style="color:#e6db74">Commits to be reviewed:</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>    git log --oneline <span style="color:#e6db74">&#34;</span>$main_branch<span style="color:#e6db74">&#34;</span>..HEAD
</span></span><span style="display:flex;"><span>    echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>BLUE<span style="color:#e6db74">}</span><span style="color:#e6db74">Files changed:</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>    git diff --name-only <span style="color:#e6db74">&#34;</span>$main_branch<span style="color:#e6db74">&#34;</span>..HEAD
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">else</span>
</span></span><span style="display:flex;"><span>    git log --oneline -5
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>YELLOW<span style="color:#e6db74">}</span><span style="color:#e6db74">📝 Running automated code review...</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Run project-specific checks first</span>
</span></span><span style="display:flex;"><span>echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>BLUE<span style="color:#e6db74">}</span><span style="color:#e6db74">🔧 Running project checks...</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Linting</span>
</span></span><span style="display:flex;"><span>echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>YELLOW<span style="color:#e6db74">}</span><span style="color:#e6db74">  → Running linter...</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> npm run lint <span style="color:#f92672">||</span> yarn lint 2&gt;/dev/null; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>GREEN<span style="color:#e6db74">}</span><span style="color:#e6db74">    ✅ Linting passed</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">else</span>
</span></span><span style="display:flex;"><span>    echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>YELLOW<span style="color:#e6db74">}</span><span style="color:#e6db74">    ⚠️  Linting issues found (will be reviewed by Claude)</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Type checking</span>
</span></span><span style="display:flex;"><span>echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>YELLOW<span style="color:#e6db74">}</span><span style="color:#e6db74">  → Running type check...</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> npm run typecheck <span style="color:#f92672">||</span> yarn typecheck <span style="color:#f92672">||</span> tsc --noEmit 2&gt;/dev/null; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>GREEN<span style="color:#e6db74">}</span><span style="color:#e6db74">    ✅ Type checking passed</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">else</span>
</span></span><span style="display:flex;"><span>    echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>YELLOW<span style="color:#e6db74">}</span><span style="color:#e6db74">    ⚠️  Type issues found (will be reviewed by Claude)</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Create a temporary file for the review prompt</span>
</span></span><span style="display:flex;"><span>review_file<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>mktemp<span style="color:#66d9ef">)</span>
</span></span><span style="display:flex;"><span>cat &gt; <span style="color:#e6db74">&#34;</span>$review_file<span style="color:#e6db74">&#34;</span> <span style="color:#e6db74">&lt;&lt; &#39;EOF&#39;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">Please perform a comprehensive code review of ALL changes in this branch before I push to the remote repository.
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">IMPORTANT: Review ALL commits since the main branch, not just the latest commit. 
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">Use &#39;git diff main..HEAD&#39; and &#39;git log main..HEAD&#39; to see all changes.
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">The following commits will be pushed:
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">$(git log --oneline main..HEAD 2&gt;/dev/null || git log --oneline -5)
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">Files that have been changed:
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">$(git diff --name-only main..HEAD 2&gt;/dev/null || git diff --name-only HEAD~1 HEAD)
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">Comprehensive review including security, bugs, performance, code quality, test coverage, and best practices. 
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">Please also run these project-specific commands and report any issues:
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">1. Linting: npm run lint || yarn lint
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">2. Type checking: npm run typecheck || yarn typecheck || tsc --noEmit
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">3. Tests: npm test || yarn test
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">Focus areas:
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">1. **Security issues** - Check for exposed secrets, SQL injection, XSS vulnerabilities
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">2. **Bug potential** - Logic errors, null pointer exceptions, edge cases  
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">3. **Code quality** - Following project conventions, proper error handling
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">4. **Performance** - Inefficient operations, memory issues
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">5. **All commits** - Review every commit since main branch, not just the latest one
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">If you find any critical issues, please list them clearly with file locations. 
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">If the code looks good to push, respond with: &#34;✅ Code review passed - safe to push&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">Please review the ENTIRE diff since main branch, including all commits and file changes.
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">EOF</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>YELLOW<span style="color:#e6db74">}</span><span style="color:#e6db74">📝 Running automated code review...</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Run Claude Code review</span>
</span></span><span style="display:flex;"><span>claude code &lt; <span style="color:#e6db74">&#34;</span>$review_file<span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>review_exit_code<span style="color:#f92672">=</span>$?
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Clean up</span>
</span></span><span style="display:flex;"><span>rm <span style="color:#e6db74">&#34;</span>$review_file<span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Check if Claude review was successful</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> $review_exit_code -ne <span style="color:#ae81ff">0</span> <span style="color:#f92672">]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>RED<span style="color:#e6db74">}</span><span style="color:#e6db74">❌ Claude Code review failed</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>    echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>YELLOW<span style="color:#e6db74">}</span><span style="color:#e6db74">💡 To skip this review: SKIP_CLAUDE_REVIEW=true git push</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>    exit <span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;&#34;</span>
</span></span><span style="display:flex;"><span>echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>GREEN<span style="color:#e6db74">}</span><span style="color:#e6db74">🎉 Claude Code review completed!</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>YELLOW<span style="color:#e6db74">}</span><span style="color:#e6db74">💡 To skip future reviews: SKIP_CLAUDE_REVIEW=true git push</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Ask user if they want to proceed</span>
</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;&#34;</span>
</span></span><span style="display:flex;"><span>read -p <span style="color:#e6db74">&#34;Do you want to proceed with the push? (y/N): &#34;</span> -n <span style="color:#ae81ff">1</span> -r
</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">[[</span> $REPLY <span style="color:#f92672">=</span>~ ^<span style="color:#f92672">[</span>Yy<span style="color:#f92672">]</span>$ <span style="color:#f92672">]]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>GREEN<span style="color:#e6db74">}</span><span style="color:#e6db74">✅ Proceeding with push...</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>    exit <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">else</span>
</span></span><span style="display:flex;"><span>    echo -e <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>YELLOW<span style="color:#e6db74">}</span><span style="color:#e6db74">🛑 Push cancelled by user</span><span style="color:#e6db74">${</span>NC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>    exit <span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span></code></pre></div><h2 id="step-3-configure-your-project">Step 3: Configure Your Project</h2>
<p>Add these commands to your <code>CLAUDE.md</code> file (create if it doesn&rsquo;t exist):</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span># Project Code Review Commands
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Lint Commands
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">-</span> <span style="color:#e6db74">`npm run lint`</span> or <span style="color:#e6db74">`yarn lint`</span> - Run ESLint
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">-</span> <span style="color:#e6db74">`npm run lint:fix`</span> or <span style="color:#e6db74">`yarn lint:fix`</span> - Fix linting issues
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Type Checking
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">-</span> <span style="color:#e6db74">`npm run typecheck`</span> or <span style="color:#e6db74">`yarn typecheck`</span> - Run TypeScript checking
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">-</span> <span style="color:#e6db74">`tsc --noEmit`</span> - Alternative TypeScript check
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Testing
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">-</span> <span style="color:#e6db74">`npm test`</span> or <span style="color:#e6db74">`yarn test`</span> - Run all tests
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">-</span> <span style="color:#e6db74">`npm run test:coverage`</span> - Run tests with coverage
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Build
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">-</span> <span style="color:#e6db74">`npm run build`</span> or <span style="color:#e6db74">`yarn build`</span> - Build the project
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Pre-push Checklist
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>Before pushing code, ensure:
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">1.</span> All tests pass
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">2.</span> No linting errors
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">3.</span> No type errors
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">4.</span> Build succeeds
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">5.</span> No security vulnerabilities
</span></span></code></pre></div><h2 id="step-4-test-the-setup">Step 4: Test the Setup</h2>
<p>Test your setup with these commands:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Make a small change and commit it</span>
</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;// Test comment&#34;</span> &gt;&gt; src/test-file.js
</span></span><span style="display:flex;"><span>git add .
</span></span><span style="display:flex;"><span>git commit -m <span style="color:#e6db74">&#34;test: add test comment for hook testing&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Try to push (this should trigger Claude review)</span>
</span></span><span style="display:flex;"><span>git push origin your-branch-name
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Test skipping the review</span>
</span></span><span style="display:flex;"><span>SKIP_CLAUDE_REVIEW<span style="color:#f92672">=</span>true git push origin your-branch-name
</span></span></code></pre></div><h2 id="usage-examples">Usage Examples</h2>
<h3 id="normal-push-with-review">Normal push with review:</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git push origin feature-branch
</span></span><span style="display:flex;"><span><span style="color:#75715e"># This will automatically run Claude Code review</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Generates: claude-review-report_YYYY-MM-DD_HH-MM-SS.md</span>
</span></span></code></pre></div><h3 id="skip-review-when-needed">Skip review when needed:</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># For urgent hotfixes or when review isn&#39;t needed</span>
</span></span><span style="display:flex;"><span>SKIP_CLAUDE_REVIEW<span style="color:#f92672">=</span>true git push origin hotfix-branch
</span></span></code></pre></div><h3 id="set-up-permanent-skip-not-recommended">Set up permanent skip (not recommended):</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Add to your shell profile (.bashrc, .zshrc, etc.)</span>
</span></span><span style="display:flex;"><span>export SKIP_CLAUDE_REVIEW<span style="color:#f92672">=</span>true
</span></span></code></pre></div><h2 id="advanced-configuration">Advanced Configuration</h2>
<h3 id="custom-review-prompts">Custom Review Prompts</h3>
<p>Create different review prompts for different scenarios by modifying the hook:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># In your pre-push hook, you can customize based on branch</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">[[</span> $current_branch <span style="color:#f92672">==</span> hotfix* <span style="color:#f92672">]]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Use lighter review for hotfixes</span>
</span></span><span style="display:flex;"><span>    review_prompt<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Quick security and critical bug check only&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">elif</span> <span style="color:#f92672">[[</span> $current_branch <span style="color:#f92672">==</span> feature* <span style="color:#f92672">]]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Full review for features</span>
</span></span><span style="display:flex;"><span>    review_prompt<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Comprehensive code review including performance and best practices&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span></code></pre></div><h3 id="integration-with-cicd">Integration with CI/CD</h3>
<p>You can also integrate this into your CI/CD pipeline:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#75715e"># .github/workflows/code-review.yml</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">name</span>: <span style="color:#ae81ff">Claude Code Review</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">on</span>: [<span style="color:#ae81ff">pull_request]</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">jobs</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">review</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">runs-on</span>: <span style="color:#ae81ff">ubuntu-latest</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">steps</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">uses</span>: <span style="color:#ae81ff">actions/checkout@v3</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Setup Claude Code</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">run</span>: |<span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          # Install Claude Code CLI
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          pip install claude-code</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Run Code Review</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">run</span>: |<span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          claude code &#34;Please review this PR for security, bugs, and code quality issues&#34;</span>
</span></span></code></pre></div><h2 id="troubleshooting">Troubleshooting</h2>
<h3 id="hook-not-running">Hook not running?</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Check if hook is executable</span>
</span></span><span style="display:flex;"><span>ls -la .git/hooks/pre-push
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Make it executable if needed</span>
</span></span><span style="display:flex;"><span>chmod +x .git/hooks/pre-push
</span></span></code></pre></div><h3 id="claude-code-not-found">Claude Code not found?</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Install Claude Code CLI</span>
</span></span><span style="display:flex;"><span>pip install anthropic-claude-code
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Or using npm</span>
</span></span><span style="display:flex;"><span>npm install -g @anthropic-ai/claude-code
</span></span></code></pre></div><h3 id="want-to-modify-the-hook">Want to modify the hook?</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Edit the hook file</span>
</span></span><span style="display:flex;"><span>nano .git/hooks/pre-push
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Or use your preferred editor</span>
</span></span><span style="display:flex;"><span>code .git/hooks/pre-push
</span></span></code></pre></div><h2 id="key-features">Key Features</h2>
<p>✅ <strong>Full Branch Review</strong>: Reviews ALL commits since branching from main, not just the latest commit<br>
✅ <strong>Smart Branch Detection</strong>: Automatically finds main/master/origin/main/origin/master<br>
✅ <strong>Auto Project Detection</strong>: Identifies JavaScript/TypeScript, Python, Java/Android projects automatically<br>
✅ <strong>Timestamped Reports</strong>: Generates permanent markdown reports with complete analysis<br>
✅ <strong>Comprehensive Analysis</strong>: Reviews security, performance, bugs, and code quality<br>
✅ <strong>Project-Specific Checks</strong>: Runs your lint, typecheck, and test commands<br>
✅ <strong>Action Checklists</strong>: Provides clear tasks for addressing any issues found<br>
✅ <strong>Detailed Reporting</strong>: Shows exactly which commits and files will be reviewed<br>
✅ <strong>Flexible</strong>: Can be skipped when needed for urgent pushes</p>
<h2 id="benefits">Benefits</h2>
<p>✅ <strong>Automated Quality Control</strong>: Catches issues before they reach the remote repository<br>
✅ <strong>Full Change Visibility</strong>: Reviews entire diff since branching from main<br>
✅ <strong>Permanent Documentation</strong>: Timestamped reports track all reviews and action items<br>
✅ <strong>Issue Tracking</strong>: Action checklists help systematically address problems<br>
✅ <strong>Educational</strong>: Learn best practices from Claude&rsquo;s feedback<br>
✅ <strong>Team Consistency</strong>: Ensures all team members follow the same review standards<br>
✅ <strong>Historical Record</strong>: Keep track of code quality improvements over time</p>
<h2 id="team-setup">Team Setup</h2>
<p>Share this setup with your team by:</p>
<ol>
<li>Adding the pre-push hook to your repository (in a <code>scripts/</code> folder)</li>
<li>Creating a setup script that copies it to <code>.git/hooks/</code></li>
<li>Documenting the process in your project&rsquo;s README</li>
<li>Adding the CLAUDE.md configuration to your repository</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># scripts/setup-hooks.sh</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash</span>
</span></span><span style="display:flex;"><span>cp scripts/pre-push .git/hooks/pre-push
</span></span><span style="display:flex;"><span>chmod +x .git/hooks/pre-push
</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;✅ Claude Code review hook installed!&#34;</span>
</span></span></code></pre></div><p>Now your code will be automatically reviewed by Claude before every push, helping maintain high code quality while giving you the flexibility to skip when needed!</p>
]]></content:encoded></item></channel></rss>