<?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: Alfred Emmanuel</title>
    <description>The latest articles on DEV Community by Alfred Emmanuel (@pycomet).</description>
    <link>https://dev.to/pycomet</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2657955%2F3aff35cc-1959-4eb4-8688-3181800a498a.jpeg</url>
      <title>DEV Community: Alfred Emmanuel</title>
      <link>https://dev.to/pycomet</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pycomet"/>
    <language>en</language>
    <item>
      <title>I audited a month of my AI coding setup — 87% of it was dead weight</title>
      <dc:creator>Alfred Emmanuel</dc:creator>
      <pubDate>Wed, 22 Jul 2026 04:34:31 +0000</pubDate>
      <link>https://dev.to/pycomet/i-audited-a-month-of-my-ai-coding-setup-87-of-it-was-dead-weight-pkp</link>
      <guid>https://dev.to/pycomet/i-audited-a-month-of-my-ai-coding-setup-87-of-it-was-dead-weight-pkp</guid>
      <description>&lt;p&gt;Like most people using AI coding tools daily, I'd spent months installing things into Claude Code: skills, subagents, MCP servers, hooks, plugins. Every one of them felt essential at install time. None of them ever got reviewed again.&lt;/p&gt;

&lt;p&gt;Then I mapped it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwo4vwvt8lrwrmnrv2fe6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwo4vwvt8lrwrmnrv2fe6.jpg" alt="Agent Atlas map of my real setup — 103 capabilities clustered by purpose, sized by usage, grey = never fired" width="799" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's my actual setup: &lt;strong&gt;103 installed capabilities, and 90 of them never fired once in the last 30 days.&lt;/strong&gt; The grey swarm around the ENGINEERING hub is months of "this looks useful" with zero follow-through.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three questions nobody can answer about their own setup
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;What is my setup actually tuned for?&lt;/strong&gt; More engineering than writing? Any research capability at all?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What am I paying for but never using?&lt;/strong&gt; Installed skills and MCP servers load context into every session whether you use them or not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where are the overlaps and gaps?&lt;/strong&gt; Two things doing the same job; whole capability areas with nothing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can't answer these by reading config files, because half the answer lives somewhere else: your session transcripts — what &lt;em&gt;actually fired&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  So I built Agent Atlas
&lt;/h2&gt;

&lt;p&gt;One command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx agent-atlas-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It runs a four-stage pipeline, entirely on your machine: the &lt;strong&gt;scanner&lt;/strong&gt; inventories ~/.claude (skills, subagents, MCP servers, hooks — read-only); the &lt;strong&gt;usage miner&lt;/strong&gt; streams your local session transcripts and counts what fired in the last 30 days; the &lt;strong&gt;classifier&lt;/strong&gt; scores every item across five capability axes — engineering, writing, research, design, ops — with one cheap Haiku call (or a fully-offline keyword mode if you don't set an API key); and the &lt;strong&gt;renderer&lt;/strong&gt; writes a single self-contained HTML file: a force-directed map where node size = usage and grey = never used, a "tuning bar" summarizing your whole stack, and a diagnostics panel.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it found on my machine
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Dead weight with a price tag.&lt;/strong&gt; A skill I'd installed and forgotten was loading ~150 tokens of description into the context of &lt;em&gt;every session&lt;/em&gt;. Across 72 sessions in a month: &lt;strong&gt;~11,000 tokens spent on something I never used once.&lt;/strong&gt; The diagnostics panel lists every case like this, worst first. (The token figures are deliberately labeled as lower bounds — real MCP tool schemas can't be measured without connecting to the servers, and I'd rather under-claim.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;25 pairs of literally identical skills.&lt;/strong&gt; The same plugin was cached under two different marketplace names, so every one of its skills existed twice. Invisible in any config file; obvious on a map when two nodes claim the same job and one has 31 uses while its twin has zero.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The installed-vs-used gap.&lt;/strong&gt; My tuning bar says I &lt;em&gt;installed&lt;/em&gt; a 43%-engineering stack but &lt;em&gt;use&lt;/em&gt; a 36%-engineering one — the toggle between "installed" and "used" turns out to be the most honest single view of the whole thing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fscdllx1koyq3llrdnci9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fscdllx1koyq3llrdnci9.png" alt="The exported share card — headline stats, tuning bar, map snapshot" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I care most about: privacy
&lt;/h2&gt;

&lt;p&gt;A tool that reads your AI config and transcripts had better be paranoid about where that data goes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Read-only, local-only.&lt;/strong&gt; No server, no accounts, no telemetry. The output is one offline HTML file.&lt;/li&gt;
&lt;li&gt;The optional classification call sends &lt;strong&gt;item names and descriptions only&lt;/strong&gt; — never transcripts, never code. Hook commands never leave the machine at all.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--rough&lt;/code&gt; mode skips the API entirely: nothing leaves your machine, period.&lt;/li&gt;
&lt;li&gt;It's MIT-licensed and small enough to read in an afternoon: &lt;a href="https://github.com/Pycomet/agent-atlas" rel="noopener noreferrer"&gt;https://github.com/Pycomet/agent-atlas&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How it was built (briefly)
&lt;/h2&gt;

&lt;p&gt;Spec first, then four strict milestones — scanner+miner, classifier, renderer, diagnostics — each test-driven against a fake ~/.claude fixture tree, each verified against my real machine before merging. Before publishing I had the implementation adversarially reviewed; all six findings were confirmed and fixed (one of them was the plugin-cache bug that would have produced false dead-weight claims — the exact failure mode that kills trust in a tool like this). Built with Claude Code, npm-published via OIDC trusted publishing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it on your own setup
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx agent-atlas-cli          &lt;span class="c"&gt;# scan, classify, open the map&lt;/span&gt;
npx agent-atlas-cli &lt;span class="nt"&gt;--rough&lt;/span&gt;  &lt;span class="c"&gt;# fully offline, no API key needed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Works with Claude Code today. The scanner sits behind a small adapter interface, so Codex CLI / Cursor / Gemini CLI adapters are the obvious next step — contributions very welcome.&lt;/p&gt;

&lt;p&gt;I'd genuinely like to see what your map looks like — there's a "Share card" button in the page for exactly that.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>cli</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Hey Devs! Ever found a way to clear out all unfinished projects?</title>
      <dc:creator>Alfred Emmanuel</dc:creator>
      <pubDate>Thu, 25 Dec 2025 04:36:59 +0000</pubDate>
      <link>https://dev.to/pycomet/hey-devs-ever-found-a-way-to-clear-out-all-unfinished-projects-1b80</link>
      <guid>https://dev.to/pycomet/hey-devs-ever-found-a-way-to-clear-out-all-unfinished-projects-1b80</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/pycomet" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2657955%2F3aff35cc-1959-4eb4-8688-3181800a498a.jpeg" alt="pycomet"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/pycomet/the-graveyard-of-my-unfinished-projects-led-me-to-build-this-mj4" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;The Graveyard of My Unfinished Projects Led Me to Build This&lt;/h2&gt;
      &lt;h3&gt;Alfred Emmanuel ・ Nov 30&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The Graveyard of My Unfinished Projects (And the Ruthless Tool That Finally Made Me Finish)</title>
      <dc:creator>Alfred Emmanuel</dc:creator>
      <pubDate>Sun, 30 Nov 2025 12:43:42 +0000</pubDate>
      <link>https://dev.to/pycomet/the-graveyard-of-my-unfinished-projects-led-me-to-build-this-mj4</link>
      <guid>https://dev.to/pycomet/the-graveyard-of-my-unfinished-projects-led-me-to-build-this-mj4</guid>
      <description>&lt;p&gt;&lt;em&gt;October 15th, 2024. 11:47 PM.&lt;/em&gt;&lt;br&gt;
I’m staring at my GitHub profile. Forty-seven repositories. I start counting the dead ones:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI-crypto-trader: 3 commits. Last touched: March 2023
VisionBoard-Pro: 7 commits. Last touched: January 2024
nasa-agi: 1 commit. “Initial commit.” That’s it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(Dummy names here, but you get my point)&lt;/p&gt;

&lt;p&gt;Forty-three corpses. Forty-three times I told myself “This is the one.”&lt;br&gt;
Each project started the same way: late-night energy, new repository, perfect folder structure, README.md with ambitious roadmaps. That first-commit high.&lt;br&gt;
Each one died the same way: quietly. Somewhere between the exciting architecture decisions and the boring implementation details.&lt;/p&gt;

&lt;p&gt;I had become something I despised: a builder who doesn’t build. An engineer who only engineers excuses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Quick Translation&lt;/strong&gt;&lt;br&gt;
You don’t need to be an engineer to understand this.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maybe your graveyard isn’t code.&lt;/li&gt;
&lt;li&gt;Maybe it’s abandoned gym plans, half-read books, forgotten online courses, dusty business ideas, or that side hustle you keep restarting every January.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Different tools, same graveyard.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Cost Calculation&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Let me do the math that hurts:&lt;br&gt;
Average time per abandoned project: ~20 hours&lt;/p&gt;

&lt;p&gt;43 projects × 20 hours = 860 hours&lt;br&gt;
That’s 107 eight-hour workdays&lt;br&gt;
Or 21.5 work weeks&lt;br&gt;
Or 5.4 months of full-time work&lt;/p&gt;

&lt;p&gt;Thrown away. For what? For the dopamine hit of typing git init.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Moment&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;That night, after completing a client project — actually finishing something someone paid me to do — I felt empty. After work, I was doing nothing creative. Just exercising, watching YouTube, scrolling. I could feel myself drifting further from the 1% I claimed I wanted to join.&lt;/p&gt;

&lt;p&gt;The worst part? I was about to start another project. I could feel it. That familiar itch. “Maybe a new task management app…” my brain whispered.&lt;/p&gt;

&lt;p&gt;No. Not this time.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Comfortable Lies We Tell&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here’s what we don’t admit at standup meetings or in our Twitter threads:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We’re not “exploring ideas.” We’re avoiding execution.&lt;/li&gt;
&lt;li&gt;We’re not “pivoting.” We’re running from complexity.&lt;/li&gt;
&lt;li&gt;We’re not “learning new stacks.” We’re procrastinating on the hard parts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And every productivity app enables us. They’re built by people like us, for people like us. They give us what we want: gentle reminders, inspirational quotes, fresh starts every Monday.&lt;/p&gt;

&lt;p&gt;“You didn’t complete your tasks today? No worries! Tomorrow is a new beginning!”&lt;/p&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;You failed. You made a commitment to yourself and broke it. Again. And tomorrow you’ll do the same thing unless something changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Pattern&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Week 1: “I’ll write for 2 hours daily.”&lt;/li&gt;
&lt;li&gt;Week 2: “1 hour is more realistic.”&lt;/li&gt;
&lt;li&gt;Week 3: “30 minutes is still progress.”&lt;/li&gt;
&lt;li&gt;Week 4: “I’ll start fresh next month.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every app lets you adjust your goals downward. They call it “being realistic.” I call it negotiating with failure.&lt;/p&gt;

&lt;p&gt;I realized I didn't need another gentle reminder. I didn't need an app that would pat my head when I pushed a deadline. I needed something that knew my patterns and refused to accept my bullshit.&lt;/p&gt;

&lt;p&gt;So, I opened my IDE one more time. Not for the dopamine hit, but out of desperation. I was going to build one last thing, and its only job was to stop me from creating corpse number forty-eight.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Where It All Turned&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;That night, something snapped. Not in the cinematic, inspirational way. More like the dull crack you hear when a cheap plastic hanger gives up. I realized I’d become addicted to beginnings, allergic to endings, and dangerously skilled at convincing myself it was fine.&lt;/p&gt;

&lt;p&gt;It wasn’t fine.&lt;/p&gt;

&lt;p&gt;So I built something that didn’t let me negotiate with myself. No dopamine hits. No shiny dashboards. No “gentle nudge” nonsense. Just a tool that knows exactly when I’m slipping and calls me out before another project gets dragged into the cemetery.&lt;/p&gt;

&lt;p&gt;That tool became &lt;a href="https://grindproof.co" rel="noopener noreferrer"&gt;Grindrpoof&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What Grindproof Actually Does&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;It doesn’t care about your mood. It doesn’t care about your excuses. It watches your behavior the way your IDE watches for missing semicolons.&lt;/p&gt;

&lt;p&gt;If you commit less this week than last week, it notices.&lt;br&gt;
If your goal slips from “build feature” to “rename folder,” it notices.&lt;br&gt;
If you start a shiny new repo while your current project is starving in the corner, it absolutely notices.&lt;/p&gt;

&lt;p&gt;And instead of patting your head, it tells you the truth:&lt;br&gt;
You’re self-sabotaging again.&lt;/p&gt;

&lt;p&gt;I didn’t build Grindproof for productivity nerds. I built it for people like me. People with graveyards. People who can architect a distributed system but somehow can’t finish a weekend project. People who are tired of being inspired and ready to be held accountable.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;If You’re Reading This... Try It&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If any of this felt uncomfortably familiar, then good. It means you recognize the pattern, the graveyard, the excuses. Grindproof was built exactly for people who build fast and quit faster.&lt;/p&gt;

&lt;p&gt;So here’s the deal: it’s live at &lt;a href="https://grindproof.co" rel="noopener noreferrer"&gt;grindproof.co&lt;/a&gt;. Try it. Break it. Tell me where it punches too softly or too hard. I’m shaping this thing with real builders, not productivity influencers who wake up at 4 AM to drink lemon water.&lt;/p&gt;

&lt;p&gt;If you want to see what else I’ve been up to, you can check out more of my work at &lt;a href="https://www.codefred.dev" rel="noopener noreferrer"&gt;codefred.dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Your feedback will help me turn it into something genuinely useful for all of us who want to finish more than we start.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
