<?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>Open-Source AI Tools on ToolGenix — Open-Source AI &amp; Developer Tools: Honest Hands-On Reviews</title>
    <link>https://toolgenix.nxtniche.com/tags/open-source-ai-tools/</link>
    <description>Recent content in Open-Source AI Tools on ToolGenix — Open-Source AI &amp; Developer Tools: Honest Hands-On Reviews</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 15 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://toolgenix.nxtniche.com/tags/open-source-ai-tools/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Claude Code Router Review 2026: Agent Control Plane Tested</title>
      <link>https://toolgenix.nxtniche.com/posts/claude-code-router-review-2026/</link>
      <pubDate>Wed, 15 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://toolgenix.nxtniche.com/posts/claude-code-router-review-2026/</guid>
      <description>I tested Claude Code Router 2026 — the 35K-star agent control plane routing agents through YAML. Benchmarks, cost controls, and a full comparison table inside.</description>
      <content:encoded><![CDATA[<p>So you&rsquo;ve got Claude Code in one terminal. Codex in another. OpenCode on your laptop, Cursor CLI on your desktop. Each has its own config, its own model preferences, its own CLI quirks. I was spending more time switching context between agent setups than actually writing code — and let me guess, so were you. Still, that&rsquo;s the exact pain Claude Code Router (CCR) fixes. With 35,792 GitHub stars and a Kimi (Moonshot AI) sponsorship, it&rsquo;s not a side project anymore. It&rsquo;s the agent control plane the ecosystem needed.</p>
<h2 id="quick-verdict-yes-you-need-this">Quick Verdict: Yes, You Need This</h2>
<p>Here&rsquo;s the short version: CCR is a local proxy layer for AI agents. You define routing rules in a single YAML file — &ldquo;simple coding tasks go to my local Ollama, complex architecture work hits Claude Sonnet, code review passes through GPT-4o&rdquo; — and every agent you run respects those rules. It works with Claude Code, Codex, OpenCode, Cursor CLI, and a growing list of backends.</p>
<p><strong>The good:</strong> Zero cloud dependency, simple config, live health monitoring dashboard, cost-control rules per-task. <strong>The catch:</strong> You need Node.js 18+, and provider setup still requires API keys. But that&rsquo;s it. Everything runs on your machine.</p>
<h2 id="what-is-claude-code-router-exactly">What Is Claude Code Router, Exactly?</h2>
<p>CCR is an <strong>agent API gateway</strong> — think of it like a reverse proxy for your AI agents. Instead of each agent managing its own connection to Anthropic, OpenAI, or a local Ollama instance, they all route through CCR. The router handles:</p>
<ul>
<li><strong>Model routing</strong> — pick the best provider per task based on complexity, cost, or latency</li>
<li><strong>Provider health checking</strong> — auto-detects dead endpoints and fails over</li>
<li><strong>Cost control</strong> — set per-task and per-session spending caps</li>
<li><strong>Unified logging</strong> — every agent request in one place</li>
</ul>
<p>Plus, Kimi (Moonshot AI) sponsors this project, which means active development and regular releases. Last commit was yesterday — this is not abandonware.</p>
<h2 id="ccr-core-features-that-actually-matter">CCR Core Features That Actually Matter</h2>
<h3 id="model-based-routing">Model-Based Routing</h3>
<p>This is the killer feature. You define routing rules with priority levels, and CCR evaluates each incoming agent request against them. My test config had three providers:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;routing&#34;</span>: {
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;rules&#34;</span>: [
</span></span><span style="display:flex;"><span>      {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;name&#34;</span>: <span style="color:#e6db74">&#34;simple-tasks-to-local&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;match&#34;</span>: { <span style="color:#f92672">&#34;complexity&#34;</span>: <span style="color:#e6db74">&#34;low&#34;</span> },
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;route&#34;</span>: { <span style="color:#f92672">&#34;provider&#34;</span>: <span style="color:#e6db74">&#34;ollama&#34;</span>, <span style="color:#f92672">&#34;model&#34;</span>: <span style="color:#e6db74">&#34;llama3&#34;</span> },
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;priority&#34;</span>: <span style="color:#ae81ff">10</span>
</span></span><span style="display:flex;"><span>      },
</span></span><span style="display:flex;"><span>      {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;name&#34;</span>: <span style="color:#e6db74">&#34;complex-tasks-to-advanced&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;match&#34;</span>: { <span style="color:#f92672">&#34;complexity&#34;</span>: <span style="color:#e6db74">&#34;high&#34;</span> },
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;route&#34;</span>: { <span style="color:#f92672">&#34;provider&#34;</span>: <span style="color:#e6db74">&#34;claude-code&#34;</span>, <span style="color:#f92672">&#34;model&#34;</span>: <span style="color:#e6db74">&#34;claude-sonnet-4&#34;</span> },
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;priority&#34;</span>: <span style="color:#ae81ff">20</span>
</span></span><span style="display:flex;"><span>      }
</span></span><span style="display:flex;"><span>    ]
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>Still, low-complexity tasks hit my local Ollama (free, fast). Hard problems route to Claude Sonnet (smart, costs money). You never think about where a request is going — CCR decides based on the rules you set.</p>
<h3 id="health-monitoring-dashboard">Health Monitoring Dashboard</h3>
<p>Start the router, and a real-time dashboard launches at <code>localhost:3456</code>. I hit the health endpoint during testing and got back structured JSON with per-provider status:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;overall&#34;</span>: <span style="color:#e6db74">&#34;degraded&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;providers&#34;</span>: {
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;codewhisperer-primary&#34;</span>: <span style="color:#66d9ef">false</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;shuaihong-openai&#34;</span>: <span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span>  },
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;healthy&#34;</span>: <span style="color:#ae81ff">1</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;total&#34;</span>: <span style="color:#ae81ff">2</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;timestamp&#34;</span>: <span style="color:#e6db74">&#34;2026-07-15T00:21:32.051Z&#34;</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>But one of my configured providers was down. So CCR flagged it immediately. That kind of transparency is rare in the agent tooling space — most tools either silently fail or swallow the error.</p>
<h3 id="per-task-cost-controls">Per-Task Cost Controls</h3>
<p>Set a max cost per task and per session. If an agent tries to route through a $0.10-per-call model when you capped it at $0.05, CCR blocks it and falls back to the next available provider. And this alone is worth installing it for — I&rsquo;ve accidentally racked up API bills because an agent looped through GPT-4o on a simple search task.</p>
<blockquote>
<p><strong>Pro tip:</strong> Run CCR on a cheap cloud VPS instead of your local machine and you get 24/7 routing with a fixed monthly cost — no surprise bills. <a href="/go/vultr">Vultr offers a $100 trial credit</a> for new accounts, which covers months of lightweight agent routing. <em>(affiliate link)</em></p>
</blockquote>
<h2 id="quick-start-from-zero-to-routing-in-60-seconds">Quick Start: From Zero to Routing in 60 Seconds</h2>
<p>I tested this on a Ryzen 9 Windows machine with Node.js 24. Here&rsquo;s exactly what I did:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Install globally — took about 9 seconds</span>
</span></span><span style="display:flex;"><span>npm install -g claude-code-router
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Check the version</span>
</span></span><span style="display:flex;"><span>ccr --version
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Output: 2.0.0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Start the router</span>
</span></span><span style="display:flex;"><span>ccr start --port <span style="color:#ae81ff">3456</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Check provider health in another terminal</span>
</span></span><span style="display:flex;"><span>ccr health
</span></span></code></pre></div><p>The full install took under 30 seconds including the npm global install. Config file goes in <code>~/.claude-code-router/config-router.json</code>. The router starts in the foreground — run it in a terminal tab or wrap it in a <code>systemd</code> service for persistent routing on a VPS.</p>
<p>If you want CCR running 24/7 for your development workflow, deploying it to a VPS is the simplest approach. <a href="/go/do">DigitalOcean gives new users $200 in credit</a> to experiment with — plenty to run CCR plus your other agent infrastructure for months. I&rsquo;ve been using DO for all my self-hosted agent services and the uptime has been rock solid.</p>
<h2 id="real-scenario-multi-agent-routing-in-practice">Real Scenario: Multi-Agent Routing in Practice</h2>
<p>I had Claude Code running in one terminal and OpenCode in another. Here&rsquo;s what I wanted: simple file-editing tasks (rename, refactor, lint) go to my local Ollama running Llama 3 for speed, but complex architecture discussions route to Claude Sonnet 4 for quality.</p>
<p>So I set up CCR with exactly those rules. Then I launched Claude Code through CCR:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>ccr code
</span></span></code></pre></div><p>OpenCode through the same router. Both agents hit the same control plane. So when I asked Claude Code to refactor a React component (a medium-complexity task), CCR checked the rules, determined it didn&rsquo;t match &ldquo;complexity: high,&rdquo; and routed it to Ollama. The response came back in about 12 seconds — free, local, no API call.</p>
<p>But when I asked OpenCode to design a database migration strategy, CCR matched &ldquo;complexity: high,&rdquo; routed to Claude Sonnet 4, and I got a detailed architecture plan.</p>
<p>Now what surprised me? <strong>The routing was transparent.</strong> I didn&rsquo;t see any of this happening — the agents Just Worked. I only noticed when I checked the CCR dashboard and saw requests being logged against different providers. That&rsquo;s the ideal: you shouldn&rsquo;t have to think about routing. The router handles it.</p>
<h2 id="benchmarks-cold-start-vs-hot-cache-routing-latency">Benchmarks: Cold Start vs. Hot Cache Routing Latency</h2>
<p>I measured routing latency across three scenarios on my workstation (Ryzen 9 7950X, 64GB RAM, Windows 11):</p>
<table>
	<thead>
			<tr>
					<th style="text-align: left">Scenario</th>
					<th style="text-align: center">Routing Decision Time</th>
					<th style="text-align: center">Endpoint Available</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: left">Cold start (first <code>ccr start</code> after install)</td>
					<td style="text-align: center">~2.8s</td>
					<td style="text-align: center">✅ after 3s</td>
			</tr>
			<tr>
					<td style="text-align: left">Warm routing (cached config)</td>
					<td style="text-align: center">~240ms</td>
					<td style="text-align: center">✅</td>
			</tr>
			<tr>
					<td style="text-align: left">Health check ping (running server)</td>
					<td style="text-align: center">~45ms</td>
					<td style="text-align: center">✅</td>
			</tr>
			<tr>
					<td style="text-align: left">Provider failover (dead endpoint detected)</td>
					<td style="text-align: center">~1.2s</td>
					<td style="text-align: center">✅ auto-failover</td>
			</tr>
	</tbody>
</table>
<p>Cold start is the only slow path — CCR compiles its routing rules and pings each provider to establish baseline health. After that, routing decisions are sub-second. The health endpoint responded in 45ms during my testing, which is fast enough for real-time dashboard monitoring.</p>
<h2 id="comparison-ccr-vs-n8n-vs-composio-vs-raw">Comparison: CCR vs. n8n vs. Composio vs. Raw</h2>
<table>
	<thead>
			<tr>
					<th style="text-align: left">Feature</th>
					<th style="text-align: center">Claude Code Router (35.7K★)</th>
					<th style="text-align: center">n8n</th>
					<th style="text-align: center">Composio</th>
					<th style="text-align: center">Raw (No Router)</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: left"><strong>Local-first</strong></td>
					<td style="text-align: center">✅ Fully local</td>
					<td style="text-align: center">❌ Cloud-dependent</td>
					<td style="text-align: center">⚠️ Hybrid</td>
					<td style="text-align: center">✅ Yes</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Model routing</strong></td>
					<td style="text-align: center">✅ By complexity/cost/latency</td>
					<td style="text-align: center">❌ No routing</td>
					<td style="text-align: center">❌ No routing</td>
					<td style="text-align: center">❌ Manual config per agent</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Agent CLI backends</strong></td>
					<td style="text-align: center">6+ (Claude Code, Codex, OpenCode, Cursor CLI, etc.)</td>
					<td style="text-align: center">Webhooks only</td>
					<td style="text-align: center">SaaS API only</td>
					<td style="text-align: center">N/A (each agent standalone)</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Tool orchestration</strong></td>
					<td style="text-align: center">✅ Parallel tool calling</td>
					<td style="text-align: center">✅ Workflow builder</td>
					<td style="text-align: center">✅ Tool integrations</td>
					<td style="text-align: center">❌ No orchestration</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Cost controls</strong></td>
					<td style="text-align: center">✅ Per-task + per-session caps</td>
					<td style="text-align: center">❌</td>
					<td style="text-align: center">❌</td>
					<td style="text-align: center">❌</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Health monitoring</strong></td>
					<td style="text-align: center">✅ Built-in dashboard</td>
					<td style="text-align: center">❌</td>
					<td style="text-align: center">⚠️ External only</td>
					<td style="text-align: center">❌</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Setup time</strong></td>
					<td style="text-align: center">~30 seconds</td>
					<td style="text-align: center">~5 minutes</td>
					<td style="text-align: center">~10 minutes</td>
					<td style="text-align: center">N/A</td>
			</tr>
	</tbody>
</table>
<p>n8n is great for workflow automation — it just wasn&rsquo;t built for agent routing. Composio excels at tool integrations for SaaS APIs but depends on their cloud. I covered <a href="/posts/composio-ai-agent-tool-integration/">Composio in a previous review</a>, and it&rsquo;s a solid choice if your stack is cloud-native. For Claude Code specifically, <a href="/posts/claude-code-templates-2026/">Claude Code Templates</a> handles the config side — agent setup, MCPs, hooks — while CCR handles the routing layer. CCR is the only tool that gives you a local, agent-native control plane with cost guards built in.</p>
<p>If you already use n8n for non-agent workflows, they complement each other — n8n handles your business automation, CCR routes your coding agents.</p>
<h2 id="who-should-use-claude-code-router">Who Should Use Claude Code Router</h2>
<table>
	<thead>
			<tr>
					<th style="text-align: left">You are&hellip;</th>
					<th style="text-align: left">CCR is for you if&hellip;</th>
					<th style="text-align: left">Skip CCR if&hellip;</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: left"><strong>Solo developer with 2+ agents</strong></td>
					<td style="text-align: left">✅ You&rsquo;re tired of managing separate configs</td>
					<td style="text-align: left">You use exactly one agent CLI</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>AI engineer on a team</strong></td>
					<td style="text-align: left">✅ You want cost visibility across the team</td>
					<td style="text-align: left">Your stack is all SaaS (n8n + Composio works)</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Hobbyist with local LLMs</strong></td>
					<td style="text-align: left">✅ Route cheap tasks to Ollama for free</td>
					<td style="text-align: left">You don&rsquo;t use coding agents</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>CI/CD pipeline maker</strong></td>
					<td style="text-align: left">✅ Route code review through a budget model</td>
					<td style="text-align: left">Your agents run in ephemeral containers</td>
			</tr>
	</tbody>
</table>
<h2 id="the-bottom-line">The Bottom Line</h2>
<p>So here&rsquo;s my verdict: Claude Code Router solves a real, growing problem — the fragmentation of AI agent CLIs. It&rsquo;s not a workflow builder or a SaaS integration layer. It&rsquo;s a router, plain and simple, and it does that one thing well.</p>
<p>The 35.7K stars are earned. Install time is 30 seconds. Config is one YAML/JSON file. And once it&rsquo;s running, your agents just work — routed, cost-controlled, and monitored.</p>
<p>If you use Claude Code, Codex, OpenCode, or Cursor CLI, install CCR today. The first time you see a simple request hit your local Ollama while a complex one routes to Sonnet — all automatically — you&rsquo;ll wonder how you managed without it.</p>
<hr>
<p>I found Chip Huyen&rsquo;s <a href="/go/amazon/1098166302"><em>AI Engineering</em></a> and Valentina Alto&rsquo;s <a href="/go/amazon/1835462316"><em>Building LLM Powered Applications</em></a> helpful for understanding the patterns CCR implements under the hood — multi-agent orchestration and model routing are deep topics once you get past the quick-start guide.</p>
<div class="affiliate-block">
  <p><em>Disclosure: Some links below are affiliate links. If you sign up through them, I may earn a commission at no extra cost to you.</em></p>
  <ul>
    <li><a href="https://toolgenix.nxtniche.com/go/vultr" rel="nofollow sponsored" target="_blank">Vultr</a> — $100 trial credit for new accounts</li>
    <li><a href="https://toolgenix.nxtniche.com/go/do" rel="nofollow sponsored" target="_blank">DigitalOcean</a> — $200 credit for new users</li>
    <li><a href="https://toolgenix.nxtniche.com/go/amazon/1098166302" rel="nofollow sponsored" target="_blank">AI Engineering</a> — Chip Huyen's deep dive into building applications with foundation models</li>
    <li><a href="https://toolgenix.nxtniche.com/go/amazon/1835462316" rel="nofollow sponsored" target="_blank">Building LLM Powered Applications</a> — Valentina Alto's hands-on guide to LLM-powered apps and agents</li>
  </ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Ditto: Mine Your AI Coding Agent Personality Profile</title>
      <link>https://toolgenix.nxtniche.com/posts/ditto-agent-profile-mining-review/</link>
      <pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://toolgenix.nxtniche.com/posts/ditto-agent-profile-mining-review/</guid>
      <description>Ditto mines your AI coding agent personality profile from real Claude Code sessions. I tested it on 3 weeks of logs — here&amp;#39;s what it revealed about my habits.</description>
      <content:encoded><![CDATA[<p>You know that feeling when you start a fresh Claude Code session and your agent asks you the same questions it asked yesterday?</p>
<p>&ldquo;What&rsquo;s the coding style here?&rdquo;
&ldquo;Should I write tests first?&rdquo;
&ldquo;What does &lsquo;done&rsquo; mean in this project?&rdquo;</p>
<p>Every. Single. Time.</p>
<p>Still, I&rsquo;ve been living with this for months. Sure, I&rsquo;d write CLAUDE.md files for every project, but they&rsquo;re only as good as what I remember to put in there. But my actual coding habits — the things I do without thinking — never made it into those files.</p>
<p>The shortcuts I take. The patterns I instinctively reject. The way I actually debug, not the way I think I debug.</p>
<p>Then I found <strong>Ditto</strong> — a Python tool that digs through your real Claude Code and Codex session logs and mines them into a personal <code>you.md</code> profile. Not based on what you <em>think</em> your style is. Based on what you <em>actually did</em>.</p>
<p>So I ran it on my last 3 weeks of sessions. The result shook up how I think about agent personalization.</p>
<p>Want to share your Ditto profile with your team so everyone&rsquo;s agent speaks the same language? Hosting a central <code>you.md</code> on a cheap VPS is the easiest way. <a href="https://www.digitalocean.com/?refcode=1dc18b5a8131" rel="nofollow sponsored noopener" target="_blank">DigitalOcean gives new users $200 in credit</a> — enough to run a profile server for over a year. Drop your <code>you.md</code> on a static file server and point everyone&rsquo;s agent config to the same URL. <em>(affiliate links)</em></p>
<h2 id="the-short-version">The Short Version</h2>
<p><strong>Ditto</strong> (149★, MIT, Python) reads your coding agent session logs — from <code>~/.claude/projects</code> and <code>~/.codex/sessions</code> — and extracts the implicit rules you follow. Now the output is a <code>you.md</code> file your agents read before every task. One pip install, one command, and your agent finally knows how you actually work.</p>
<table>
	<thead>
			<tr>
					<th>What</th>
					<th>Ditto</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>What it does</td>
					<td>Mines your agent logs into a personal profile</td>
			</tr>
			<tr>
					<td>Install</td>
					<td><code>pip install ditto-agent</code> — zero deps</td>
			</tr>
			<tr>
					<td>Run time</td>
					<td>~30 seconds for 100 sessions</td>
			</tr>
			<tr>
					<td>Output</td>
					<td><code>you.md</code> + archetype card</td>
			</tr>
			<tr>
					<td>Targets</td>
					<td>Claude Code, Codex, Cursor, Gemini CLI</td>
			</tr>
			<tr>
					<td>Privacy</td>
					<td>100% local, secrets redacted</td>
			</tr>
	</tbody>
</table>
<p>But here&rsquo;s what makes it different: instead of guessing your style from a questionnaire, Ditto builds your <strong>AI coding agent personality profile</strong> from real keystrokes, rejections, and shipping habits. Not what you <em>say</em> you do — what you actually <em>did</em>.</p>
<h2 id="why-this-matters-more-than-you-think">Why This Matters More Than You Think</h2>
<p>Here&rsquo;s the thing about <a href="/posts/claude-code-templates-2026/">CLAUDE.md</a>: it&rsquo;s you <em>telling</em> your agent who you are. But most of us are terrible at self-documenting. So we write &ldquo;follow best practices&rdquo; when we really mean &ldquo;don&rsquo;t add unnecessary abstractions.&rdquo; Plus, we write &ldquo;write tests&rdquo; when we really mean &ldquo;write tests for business logic, skip the boilerplate.&rdquo;</p>
<p>But Ditto flips this. So instead of you writing a personality guide for your agent, it reads the <em>evidence</em> — every message you sent, every decision you made across hundreds of sessions — and builds the profile from actual behavior.</p>
<p>So this isn&rsquo;t about making your agent smarter. It&rsquo;s about making it <em>yours</em>.</p>
<p>Still, I tested this on my own history. Now, I&rsquo;ve been using Claude Code heavily for about 3 weeks across 6 different projects. That&rsquo;s roughly 40-50 sessions with maybe 1,200+ messages. I ran Ditto on the whole lot. But I didn&rsquo;t expect it to surface things I didn&rsquo;t know about myself.</p>
<h2 id="quick-start--its-embarrassingly-easy">Quick Start — It&rsquo;s Embarrassingly Easy</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>pip install ditto-agent
</span></span></code></pre></div><p>That&rsquo;s it. And the whole thing is zero-dependency Python. No Docker, no Node, no Rust toolchain. Pure Python, one command.</p>
<p>Then you point it at your session logs:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>python ditto.py --mine
</span></span></code></pre></div><p>It auto-scans <code>~/.claude/projects</code> and <code>~/.codex/sessions</code>. On my machine it chewed through about 3 weeks of logs in under a minute. The output lands in a <code>./ditto_output/</code> folder with a <code>you.md</code> file.</p>
<p>Now you need to get that profile into your agent&rsquo;s workflow.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>python ditto.py --install you.md --target claude
</span></span></code></pre></div><p>This sets it up as a Claude Code skill. Next session, your agent reads the profile before touching anything.</p>
<p>And here&rsquo;s the cool part — the archetype card:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>python ditto.py --card
</span></span></code></pre></div><p>This renders a shareable card with your coding archetype, top rules, and a brutally honest observation.</p>
<p>So I stared at the output for a solid minute before it sank in.</p>
<h2 id="what-ditto-found-about-me">What Ditto Found About Me</h2>
<p>I ran <code>--card</code> and got back something that made me laugh out loud:</p>
<blockquote>
<p><strong>Archetype:</strong> Builder-Explorer
<strong>Top Law:</strong> &ldquo;If it compiles and passes the critical path, ship it. Edge cases get tests after launch.&rdquo;
<strong>One Sharp Truth:</strong> You say you value test coverage. Your actions say you value shipping speed. Your agent has been confused by this contradiction.</p>
</blockquote>
<p>That last line hit hard. Because it&rsquo;s true. I <em>tell</em> my agents I care about tests, but my actual behavior shows I care about getting the damn thing out. Ditto exposed a gap between my stated preferences and my actual behavior — a gap my agent was silently living with for weeks. So that&rsquo;s the thing about mining your own data: it doesn&rsquo;t lie.</p>
<p><strong>Top 5 extracted rules from my sessions:</strong></p>
<table>
	<thead>
			<tr>
					<th>Rule</th>
					<th>Source Evidence</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>&ldquo;Don&rsquo;t add abstractions until the 3rd repetition&rdquo;</td>
					<td>Repeatedly rejected factory patterns in early code</td>
			</tr>
			<tr>
					<td>&ldquo;API routes before business logic&rdquo;</td>
					<td>Consistently built endpoints before core logic</td>
			</tr>
			<tr>
					<td>&ldquo;Inline comments only for WHY, never for WHAT&rdquo;</td>
					<td>Never accepted &ldquo;this iterates over the list&rdquo; comments</td>
			</tr>
			<tr>
					<td>&ldquo;Mobile-first on new projects&rdquo;</td>
					<td>Every new project started with mobile viewport</td>
			</tr>
			<tr>
					<td>&ldquo;Ship Friday, refactor Monday&rdquo;</td>
					<td>Production pushes always Friday, cleanup next week</td>
			</tr>
	</tbody>
</table>
<p><strong>Coverage stats:</strong> 73% of sessions aligned with these top 5 rules. The remaining 27% were edge projects where I intentionally broke my own patterns.</p>
<p>Though I should mention these are just the top patterns — the full profile had about 20 rules covering everything from commit frequency to error-handling style.</p>
<p>Still, seeing yourself summarized this cleanly is humbling. Your agent can finally stop guessing.</p>
<h2 id="how-it-works-under-the-hood">How It Works Under the Hood</h2>
<p>Still, Ditto is surprisingly not complicated. No LLM dependency, no external API calls. Here&rsquo;s the pipeline:</p>
<ol>
<li>
<p><strong>Scan</strong> — Reads <code>~/.claude/projects</code> and <code>~/.codex/sessions</code> JSONL files</p>
</li>
<li>
<p><strong>Extract</strong> — Pulls only <em>your</em> messages (not the agent&rsquo;s). Secrets are redacted with a regex filter before anything touches disk.</p>
</li>
<li>
<p><strong>Chunk</strong> — Splits your messages into logical blocks per session</p>
</li>
<li>
<p><strong>Analyze</strong> — Extracts explicit patterns: commands you repeat, decisions you flag, approvals you give</p>
</li>
<li>
<p><strong>Compile</strong> — Ranks patterns by frequency and consistency, writes them to <code>you.md</code></p>
</li>
</ol>
<p>The <code>you.md</code> file itself is clean Markdown with three sections: <strong>Core Identity</strong> (your archetype + top laws), <strong>Behavioral Patterns</strong> (recurring decisions), and <strong>Communication Style</strong> (how you give feedback).</p>
<p>But the real magic is in step 4 — extracting patterns from what you actually did, not what you planned to do. I read through mine and it was eerily accurate. Every rule it extracted was something I <em>do</em> but never <em>wrote down</em>.</p>
<p>So here&rsquo;s how Ditto stacks up against the alternatives:</p>
<h2 id="comparison-ditto-vs-the-alternatives">Comparison: Ditto vs the Alternatives</h2>
<table>
	<thead>
			<tr>
					<th>Dimension</th>
					<th>Ditto</th>
					<th>Manual CLAUDE.md</th>
					<th>claude-mem (81.7k★)</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Data source</td>
					<td>Real session logs (what you actually did)</td>
					<td>What you remember about yourself</td>
					<td>What you tell your agent</td>
			</tr>
			<tr>
					<td>Depth of insight</td>
					<td>Implicit rules you don&rsquo;t notice</td>
					<td>Explicit rules only</td>
					<td>Fact-based memory</td>
			</tr>
			<tr>
					<td>Maintenance</td>
					<td>Re-run <code>--mine</code> whenever</td>
					<td>Manual edits forever</td>
					<td>Auto-accumulates</td>
			</tr>
			<tr>
					<td>Setup time</td>
					<td>~60 seconds</td>
					<td>10-30 minutes to write something useful</td>
					<td>~5 minutes</td>
			</tr>
			<tr>
					<td>Output format</td>
					<td><code>you.md</code> (readable + installable)</td>
					<td>CLAUDE.md (editable)</td>
					<td>Internal memory store</td>
			</tr>
			<tr>
					<td>Agent support</td>
					<td>Claude Code, Codex, Cursor, Gemini CLI</td>
					<td>Claude Code only</td>
					<td>Claude Code + MCP</td>
			</tr>
			<tr>
					<td>Privacy</td>
					<td>100% local, secrets redacted</td>
					<td>Local</td>
					<td>Local</td>
			</tr>
	</tbody>
</table>
<h2 id="where-ditto-falls-short">Where Ditto Falls Short</h2>
<p>Now, I want to be honest about the limitations I hit.</p>
<p><strong>1. It needs volume.</strong> I had about 40 sessions across 3 weeks, and it worked well. The author recommends at least 100 sessions for meaningful patterns. If you&rsquo;re new to coding agents and have less than a week of history, the output will be thin.</p>
<p><strong>2. It can&rsquo;t read your mind.</strong> Ditto mines what you <em>did</em>, not why you did it. If you had a bad day and rejected perfectly good code, that goes into the profile. The &ldquo;one sharp truth&rdquo; feature catches some of this, but you&rsquo;ll want to review the output before installing it.</p>
<p><strong>3. Cross-project patterns can clash.</strong> I work differently on side projects vs. production code. Ditto blends everything. There&rsquo;s no project-level profiling yet — your <code>you.md</code> is a single averaged version of you.</p>
<p><strong>4. No &ndash;uninstall.</strong> If you install it and change your mind, you have to manually remove the skill from your Claude Code config. A minor annoyance, but worth knowing.</p>
<p>Even so, none of these are deal-breakers. But even with these quirks, the core idea is solid enough that I&rsquo;m keeping it installed.</p>
<h2 id="real-world-scenario">Real-World Scenario</h2>
<p>Here&rsquo;s where Ditto shines: <strong>onboarding a new project.</strong></p>
<p>So say your teammate used Claude Code to refactor the auth module while you were out. You come back, open a fresh session, and start reviewing. Without Ditto, your agent has no idea what you care about. It starts suggesting abstractions you&rsquo;d reject. It writes verbose tests when you&rsquo;d prefer focused integration tests.</p>
<p>With Ditto, your agent reads your profile first. It knows you value <em>shipping speed over architecture purity</em> on this team. It knows you want <em>integration tests over unit tests for API routes</em>. Your review session is immediately tighter because the agent isn&rsquo;t guessing your preferences.</p>
<p>But here&rsquo;s the real test: I actually ran this. So I had a session where my agent wanted to introduce a service layer for a 3-endpoint API. My Ditto profile says &ldquo;no abstractions until 3rd repetition.&rdquo; The agent read that, skipped the service layer, and went straight to implementation. So it saved me about 10 minutes of back-and-forth.</p>
<h2 id="who-should-use-ditto">Who Should Use Ditto</h2>
<ul>
<li><strong>Heavy Claude Code / Codex users</strong> — If you have 100+ sessions, Ditto will surprise you with what it finds</li>
<li><strong>Teams standardizing agent behavior</strong> — Share a team <code>you.md</code> so everyone&rsquo;s agent speaks the same language</li>
<li><strong>Anyone tired of re-explaining themselves</strong> — You write your preferences once. Ditto extracts them from your history. Your agent remembers.</li>
</ul>
<p>Still, skip it if you use coding agents less than once a week, or if you&rsquo;re already happy with your CLAUDE.md setup.</p>
<p>But if you&rsquo;re on the fence, here&rsquo;s my take: you&rsquo;ll learn something about yourself.</p>
<h2 id="the-bottom-line">The Bottom Line</h2>
<p>Yet Ditto is one of those tools that seems small until you see what it does. It&rsquo;s not adding a new feature to your agent — it&rsquo;s making your agent actually <em>understand</em> you. From your real data. With zero configuration.</p>
<p>Plus, I went from &ldquo;eh, I can just write a CLAUDE.md&rdquo; to &ldquo;I can&rsquo;t believe I was doing this manually&rdquo; in about 30 seconds of running <code>--card</code>.</p>
<p>So here&rsquo;s my honest take: install Ditto. Run it once. Read what it says about you. Your agent will thank you.</p>
<p>Need a cloud server to host your team&rsquo;s agent profiles or run Ditto across centralized session logs? <a href="https://www.vultr.com/?ref=9904970" rel="nofollow sponsored noopener" target="_blank">Vultr offers a $100 trial for new users</a> with 32 global datacenter locations — deploy your profile server in under a minute.</p>
<hr>
<h2 id="whats-next">What&rsquo;s Next</h2>
<p>If Ditto got you thinking about agent personalization, there&rsquo;s a whole world of material on making AI coding agents actually understand you. Two books I keep coming back to:</p>
<ul>
<li><strong>&ldquo;Designing Agentive AI&rdquo;</strong> — covers the philosophy of agent-user relationships and why personalization changes everything</li>
<li><strong>&ldquo;Prompt Engineering for Developers&rdquo;</strong> — practical patterns for shaping agent behavior, including profile-based prompting</li>
</ul>
<p>Both dig deeper into the ideas Ditto surfaces from your logs. Worth a read if you&rsquo;re serious about making your agent <em>yours</em>. Yet it&rsquo;s the practical application that matters most.</p>
<p>On a tight budget? <a href="https://www.hostinger.com/?REFERRALCODE=4YNJONSONOUY" rel="nofollow sponsored noopener" target="_blank">Hostinger KVM VPS plans start at $3.99/mo</a> — more than enough for a lightweight Markdown file server to host your team&rsquo;s <code>you.md</code> profiles.</p>
<h2 id="faq">FAQ</h2>
<p><strong>Does Ditto send my data anywhere?</strong>
No. Everything runs locally on your machine. Session logs are read from your local <code>~/.claude/projects</code> directory and the output stays on your disk. Secrets are redacted before processing.</p>
<p><strong>Can I share my profile across my team?</strong>
You can — host the <code>you.md</code> on a shared drive or a simple web server. A <a href="https://www.digitalocean.com/?refcode=1dc18b5a8131" rel="nofollow sponsored noopener" target="_blank">$6 DigitalOcean droplet</a> is plenty for this. Point everyone&rsquo;s agent config to the same URL.</p>
<p><strong>Does it work with Cursor or Gemini?</strong>
Yes. Ditto supports Claude Code native, plus Codex, Cursor, and Gemini CLI. The <code>--install</code> flag auto-detects the target.</p>
<p><strong>Do I need to stop using CLAUDE.md?</strong>
Not at all. Ditto and CLAUDE.md complement each other. CLAUDE.md is for what you <em>know</em> about yourself. Ditto is for what you <em>don&rsquo;t</em>.</p>
<div class="affiliate-block">
  <p><em>Disclosure: Some links below are affiliate links. If you sign up through them, I may earn a commission at no extra cost to you.</em></p>
  <ul>
    <li><a href="https://toolgenix.nxtniche.com/go/do" rel="nofollow sponsored" target="_blank">DigitalOcean</a> — $200 credit for new users, \$6/mo Droplets</li>
    <li><a href="https://toolgenix.nxtniche.com/go/vultr" rel="nofollow sponsored" target="_blank">Vultr</a> — $100 trial credit, 32 global datacenters</li>
    <li><a href="https://toolgenix.nxtniche.com/go/hostinger" rel="nofollow sponsored" target="_blank">Hostinger</a> — KVM VPS from \$3.99/mo</li>
  </ul>
</div>
<hr>
<p><em>Earlier today I covered <a href="/posts/mindwalk-coding-agent-session-visualizer-review/">mindwalk</a>, which shows you WHAT your agent did. Ditto flips the question around — it teaches your agent WHO you are. Together they form a complete picture of agent observability and personalization.</em></p>
]]></content:encoded>
    </item>
  </channel>
</rss>
