<?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: Artem Dolobanko</title>
    <description>The latest articles on DEV Community by Artem Dolobanko (@artem_dolobanko_7d887b223).</description>
    <link>https://dev.to/artem_dolobanko_7d887b223</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%2F3845023%2F29483fd1-0745-41f4-8969-0e6c9d0b0d4e.jpg</url>
      <title>DEV Community: Artem Dolobanko</title>
      <link>https://dev.to/artem_dolobanko_7d887b223</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/artem_dolobanko_7d887b223"/>
    <language>en</language>
    <item>
      <title>We built git blame for AI agents - here's how it works</title>
      <dc:creator>Artem Dolobanko</dc:creator>
      <pubDate>Thu, 26 Mar 2026 16:51:19 +0000</pubDate>
      <link>https://dev.to/artem_dolobanko_7d887b223/we-built-git-blame-for-ai-agents-heres-how-it-works-5bpm</link>
      <guid>https://dev.to/artem_dolobanko_7d887b223/we-built-git-blame-for-ai-agents-heres-how-it-works-5bpm</guid>
      <description>&lt;p&gt;Your team uses Claude Code, Cursor, or Gemini to write code. 60-80% of new commits are AI-generated.&lt;/p&gt;

&lt;p&gt;But when a bug appears - can you answer: which AI wrote this line?&lt;/p&gt;

&lt;p&gt;We built Origin to solve this. Here's how it works under the hood.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Traditional git blame shows who committed code. But when your whole team uses AI agents, "who committed" is always the developer — even when Claude wrote 90% of the file.&lt;/p&gt;

&lt;p&gt;You lose:&lt;/p&gt;

&lt;p&gt;• which agent generated the code&lt;br&gt;
• what prompt produced it&lt;br&gt;
• what model was used&lt;br&gt;
• what it cost&lt;/p&gt;
&lt;h2&gt;
  
  
  How Origin tracks it
&lt;/h2&gt;

&lt;p&gt;Every time an AI agent starts a session, Origin hooks fire:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Claude Code hooks (auto-installed via origin init)
origin hooks claude-code session-start
origin hooks claude-code user-prompt-submit
origin hooks claude-code stop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a commit happens, Origin writes session data to git notes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;git notes show HEAD
&lt;/span&gt;&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Origin-Session: abc123
&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Agent: claude-code
&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Model: claude-opus-4-6
&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Cost: &lt;span class="nv"&gt;$2&lt;/span&gt;.40
&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Prompts: 12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  AI Blame
&lt;/h2&gt;

&lt;p&gt;Now you can see who wrote every line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;origin blame src/api.ts

Line  Tag  Model              Content
────────────────────────────────────────
1     [HU]                   import express from 'express'
2     [AI] claude-opus-4-6   const app = express()
3     [AI] claude-opus-4-6   app.use(express.json())
4     [HU]                   // my custom middleware
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Retroactive attribution
&lt;/h2&gt;

&lt;p&gt;Already have a repo with months of AI commits but no tracking?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;origin backfill &lt;span class="nt"&gt;--apply&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Origin analyzes commit message patterns, author emails, and code style to detect which commits were AI-generated — even without hooks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Policy enforcement
&lt;/h2&gt;

&lt;p&gt;Origin also enforces rules before commits land:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Block commits containing secrets&lt;/span&gt;
&lt;span class="c1"&gt;# Block commits to restricted files&lt;/span&gt;
&lt;span class="c1"&gt;# Enforce budget limits per agent&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pre-commit hook fetches active policies from your Origin dashboard and blocks violations before they hit the repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; https://getorigin.io/cli/origin-cli-latest.tgz
origin init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Works with Claude Code, Cursor, Gemini CLI, Codex. Data stored in git notes — no server required for standalone mode.&lt;/p&gt;

&lt;p&gt;Open source CLI: &lt;a href="https://github.com/dolobanko/origin-cli" rel="noopener noreferrer"&gt;https://github.com/dolobanko/origin-cli&lt;/a&gt;&lt;br&gt;
Team dashboard: &lt;a href="https://getorigin.io" rel="noopener noreferrer"&gt;https://getorigin.io&lt;/a&gt;&lt;/p&gt;

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