<?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: Abraham Smith</title>
    <description>The latest articles on DEV Community by Abraham Smith (@alpheonsolutions).</description>
    <link>https://dev.to/alpheonsolutions</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%2F4032481%2Fe4180ae6-752c-4917-9ed8-133167372899.png</url>
      <title>DEV Community: Abraham Smith</title>
      <link>https://dev.to/alpheonsolutions</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alpheonsolutions"/>
    <language>en</language>
    <item>
      <title>I Kept Losing the "Why" Behind My Code Every Time I Closed an AI Chat, So I Built a Tiny Tool to Save It</title>
      <dc:creator>Abraham Smith</dc:creator>
      <pubDate>Thu, 16 Jul 2026 18:47:09 +0000</pubDate>
      <link>https://dev.to/alpheonsolutions/i-kept-losing-the-why-behind-my-code-every-time-i-closed-an-ai-chat-so-i-built-a-tiny-tool-to-49mg</link>
      <guid>https://dev.to/alpheonsolutions/i-kept-losing-the-why-behind-my-code-every-time-i-closed-an-ai-chat-so-i-built-a-tiny-tool-to-49mg</guid>
      <description>&lt;p&gt;Last Tuesday I was deep in a session with an AI assistant, rewriting a caching layer that had been quietly leaking memory in production. We tried Redis first. It worked. Then I looked at the actual data volume (about 50MB, tops) and killed the idea, because spinning up a whole service to cache 50MB felt absurd. We landed on sqlite instead. Good call, I still think.&lt;/p&gt;

&lt;p&gt;Two days later a teammate opened the branch, saw &lt;code&gt;cache_sqlite.py&lt;/code&gt; sitting next to a deleted &lt;code&gt;cache_memory.py&lt;/code&gt;, and asked why we weren't just using Redis like the rest of our stack. I didn't have a good answer ready. The reasoning had lived entirely inside a chat session that was long gone by then. I remembered making the decision. I could not reconstruct it convincingly, and "trust me, we talked about it" is not a great answer to give a teammate, or future me, three months from now.&lt;/p&gt;

&lt;p&gt;If you've ever lost the reasoning behind your own code, Alpheon is free and open source (MIT). If it resonates, a star on GitHub genuinely helps me know it's worth building further: &lt;a href="https://github.com/BravoAlphaSix/alpheon" rel="noopener noreferrer"&gt;https://github.com/BravoAlphaSix/alpheon&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's the part most tooling misses with AI-assisted coding. The code survives. The diff survives. A wave of AI memory tools is racing to store more of what the code &lt;em&gt;does&lt;/em&gt;, and a few (Selvedge, presence) are starting to chase the &lt;em&gt;why&lt;/em&gt; too, which tells me the pain is real. But almost all of them are MCP servers you have to wire into a specific agent, with a database sitting beside your repo. What I wanted was dumber and more portable: the reasoning, and the approaches I tried and threw out, written in plain text I can read, next to the code, no matter which editor or agent produced it. Because that reasoning lives in a chat window, and chat windows end. You switch from Claude Code to Cursor, or you just close the laptop, and it's gone. The facts stay. The judgment behind them evaporates.&lt;/p&gt;

&lt;p&gt;This didn't feel like a hard problem, so I built a small thing called &lt;a href="https://github.com/BravoAlphaSix/alpheon" rel="noopener noreferrer"&gt;Alpheon&lt;/a&gt; to fix it for myself, the simplest possible version: &lt;strong&gt;one Python file, no server, no database&lt;/strong&gt;, works off git so it doesn't care what editor or agent you use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Facts vs. reasoning
&lt;/h2&gt;

&lt;p&gt;Here's the distinction that clicked for me. A fact is "cache.py was modified, cache_sqlite.py was added, cache_memory.py was deleted." Any tool can pull that from a diff. Reasoning is "we needed the cache to survive restarts, tried Redis, decided it was overkill for the data volume, and picked sqlite instead." Your repo doesn't capture that second part unless you write it down, and most people don't, because the reasoning feels obvious in the moment. It stops feeling obvious about a week later.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Alpheon actually does
&lt;/h2&gt;

&lt;p&gt;It's a CLI that reads your git diff and drafts a Handoff Note: a short markdown block covering what changed, why, what you tried and rejected, and what's left open. You review the draft, edit it if you want, and &lt;strong&gt;only then&lt;/strong&gt; does it get appended to &lt;code&gt;HANDOFF.md&lt;/code&gt;, a file that lives in your repo and gets committed like any other file.&lt;/p&gt;

&lt;p&gt;For that caching example above, the note it would generate looks like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## Handoff Note (2026-07-14 22:41)

### What changed
- modified: cache.py
- added: cache_sqlite.py
- deleted: cache_memory.py

### Why
Needed the cache to survive process restarts, the in-memory dict was losing
all entries on every deploy, causing a cold-cache stampede. Sqlite gives us
persistence with zero infra to run.

### What was tried &amp;amp; rejected
Tried Redis first. Worked, but added a whole service to deploy, monitor, and
pay for just to cache ~50MB of data. Way too heavy for what we actually need.
Dropped it in favor of a single sqlite file that ships with the app.

### What's next / open questions
Need a TTL/eviction policy, right now the sqlite file just grows. Also
should benchmark read latency under load before trusting this in prod.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The "what changed" section comes straight from git: diff stat, changed files, recent commit messages. The "why" and "rejected" sections are where you (or your AI session, prompted at the right moment) actually explain yourself, while the explanation is still fresh. You can also just pass it in directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python alpheon.py &lt;span class="nt"&gt;--note&lt;/span&gt; &lt;span class="s2"&gt;"tried Redis, too heavy for 50MB of data, switched to sqlite"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Six months from now, that note is sitting in &lt;code&gt;HANDOFF.md&lt;/code&gt; in plain text, versioned right next to the code it describes. No separate app, no login.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to try it
&lt;/h2&gt;

&lt;p&gt;There's nothing to install beyond Python and git, both of which you already have.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/BravoAlphaSix/alpheon.git
&lt;span class="nb"&gt;cd &lt;/span&gt;your-project
python /path/to/alpheon.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It prints the draft note first. &lt;strong&gt;Nothing touches &lt;code&gt;HANDOFF.md&lt;/code&gt; until you type yes&lt;/strong&gt;. If you want to skip the confirmation for a pre-commit hook or similar, there's a &lt;code&gt;--yes&lt;/code&gt; flag, but the default is review-then-approve, on purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it deliberately doesn't do
&lt;/h2&gt;

&lt;p&gt;No account, no cloud, no vector database, no background syncing. It's one Python file with zero dependencies, and I'd like to keep it that way for as long as possible. The bigger reason for the confirm-before-save step isn't friction for its own sake: an AI-generated "why" that gets silently saved as fact is arguably worse than no note at all, because now you have false confidence sitting in your repo. Making a human confirm it before it's written keeps the tool honest about what it actually knows (the diff) versus what it's guessing (your reasoning).&lt;/p&gt;

&lt;p&gt;This is genuinely early. I built it because I kept hitting this wall in my own projects, not because I think handoff notes are a market. It's MIT licensed, and I'd rather hear "this is missing X" than silence.&lt;/p&gt;

&lt;p&gt;So: &lt;strong&gt;how do you currently keep track of the why&lt;/strong&gt; behind a decision once the chat session that produced it is gone? Comments in the PR, a wiki nobody updates, just relying on memory? I'd genuinely like to know what's working for people, because "nothing" was what was working for me until a few weeks ago.&lt;/p&gt;

&lt;p&gt;Repo's here if you want to poke at it: &lt;a href="https://github.com/BravoAlphaSix/alpheon" rel="noopener noreferrer"&gt;https://github.com/BravoAlphaSix/alpheon&lt;/a&gt;&lt;/p&gt;

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