<?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: Thomas Knee</title>
    <description>The latest articles on DEV Community by Thomas Knee (@tom-at-align).</description>
    <link>https://dev.to/tom-at-align</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%2F4241379%2Fb6a64e23-f441-4ea1-a812-ab4e851515d3.png</url>
      <title>DEV Community: Thomas Knee</title>
      <link>https://dev.to/tom-at-align</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tom-at-align"/>
    <language>en</language>
    <item>
      <title>My coding agent kept undoing things we'd already decided</title>
      <dc:creator>Thomas Knee</dc:creator>
      <pubDate>Thu, 12 Nov 2026 15:35:11 +0000</pubDate>
      <link>https://dev.to/tom-at-align/my-coding-agent-kept-undoing-things-wed-already-decided-1od5</link>
      <guid>https://dev.to/tom-at-align/my-coding-agent-kept-undoing-things-wed-already-decided-1od5</guid>
      <description>&lt;p&gt;Coding agents are good at reading code. They're bad at knowing why the code is like that.&lt;/p&gt;

&lt;p&gt;The why is usually somewhere else. A ticket where someone explained the edge case. A PR comment saying "we tried this, it broke billing". A Slack thread where the team picked Postgres over Mongo. The agent never sees any of it, so it "simplifies" the weird condition, or brings back the library you removed last month.&lt;/p&gt;

&lt;p&gt;This isn't a hunch. Oliver Zehentleitner ran 20 fresh agent sessions on the same codebase with the same request: simplify a retry wrapper. With no recorded reason, 7 of 10 suggested the change that had already been rejected. With one written-down reason in the repo, none did. (&lt;a href="https://blog.technopathy.club/what-happens-when-a-coding-agent-forgets-why-a-change-was-rejected" rel="noopener noreferrer"&gt;his write-up&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;CLAUDE.md and AGENTS.md help, but they're a file the model can choose to skip, and nobody keeps them current.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;align-cli is a free, open-source CLI. It pulls the decisions out of where they already live (git history, ADRs, CLAUDE.md and AGENTS.md, PRs, and if you connect them, Jira, Linear, Notion, Slack and others) into a graph on your machine. Then, before your agent edits a file, it checks the change against those decisions. If the edit rewrites lines a decision wrote, it stops and asks you.&lt;/p&gt;

&lt;p&gt;Try it in a few seconds, nothing installed, no account, no API key:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx @aligndottech/cli demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;On your own repo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g @aligndottech/cli
align
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;It plugs into Claude Code, Codex and Cursor, or runs as its own agent with your key or a local model. The graph is one SQLite file in &lt;code&gt;~/.align&lt;/code&gt;. Imports are read-only.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it falls short today
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Telling "this decision replaced that one" from "these two conflict" needs an AI key. Without one, related decisions just show up as related.&lt;/li&gt;
&lt;li&gt;The edit check is most battle-tested in Claude Code.&lt;/li&gt;
&lt;li&gt;It can't know a decision is out of date until someone makes the newer one. A lot of the devs I've talked to this week are fighting that same problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's MIT and on GitHub: &lt;a href="https://github.com/aligndottech/align-cli" rel="noopener noreferrer"&gt;https://github.com/aligndottech/align-cli&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try it and tell me what breaks. I read every issue.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>opensource</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
