<?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: ooocooc</title>
    <description>The latest articles on DEV Community by ooocooc (@ooocooc).</description>
    <link>https://dev.to/ooocooc</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%2F4101146%2F1dc73eb8-1c4e-4489-b54f-cfe8b844618b.png</url>
      <title>DEV Community: ooocooc</title>
      <link>https://dev.to/ooocooc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ooocooc"/>
    <language>en</language>
    <item>
      <title>How to Audit AGENTS.md and CLAUDE.md for Stale Instructions — Without Deleting Anything</title>
      <dc:creator>ooocooc</dc:creator>
      <pubDate>Sun, 30 Aug 2026 08:22:35 +0000</pubDate>
      <link>https://dev.to/ooocooc/how-to-audit-agentsmd-and-claudemd-for-stale-instructions-without-deleting-anything-2npb</link>
      <guid>https://dev.to/ooocooc/how-to-audit-agentsmd-and-claudemd-for-stale-instructions-without-deleting-anything-2npb</guid>
      <description>&lt;p&gt;AI coding agents keep improving. Their instruction files usually move in only one direction: they grow.&lt;/p&gt;

&lt;p&gt;A new workaround goes into &lt;code&gt;AGENTS.md&lt;/code&gt;. A tool-specific rule lands in &lt;code&gt;CLAUDE.md&lt;/code&gt;. A Skill is copied for a second setup. Months later, paths move, tools disappear, two rules disagree, and nobody is sure which instruction can be removed safely.&lt;/p&gt;

&lt;p&gt;The obvious answer is “clean up the file.” The dangerous part is deciding what &lt;em&gt;clean up&lt;/em&gt; means.&lt;/p&gt;

&lt;p&gt;Anthropic's own guidance now recommends keeping &lt;code&gt;CLAUDE.md&lt;/code&gt; short and periodically removing stale content. That is sensible. But a newer model, a newer runtime, or an old timestamp is not evidence that a specific rule is obsolete.&lt;/p&gt;

&lt;p&gt;I wanted an audit that could say:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;this reference is definitely broken;&lt;/li&gt;
&lt;li&gt;these two generic Skills are byte-identical complete bundles;&lt;/li&gt;
&lt;li&gt;this large entry file may belong behind progressive disclosure;&lt;/li&gt;
&lt;li&gt;this rule &lt;em&gt;might&lt;/em&gt; be unnecessary, but it needs a controlled test;&lt;/li&gt;
&lt;li&gt;this domain rule or authorization gate is outside automatic retirement.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why I built &lt;a href="https://github.com/ooocooc/open-skill-sunset" rel="noopener noreferrer"&gt;Skill Sunset&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The key distinction: evidence versus hypothesis
&lt;/h2&gt;

&lt;p&gt;Skill Sunset uses five conservative outcomes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Verdict&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MERGE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exact duplication or a conflicting same-name generic Skill needs review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UPDATE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A path, reference, tool assumption, or version-coupled instruction is stale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DEMOTE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Useful detail should probably move out of always-loaded context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RETIRE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A complete, same-name, byte-identical generic Skill bundle is a recoverable retirement candidate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TEST&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The rule may be obsolete, but behavior must be compared before removal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;TEST&lt;/code&gt; is intentionally not &lt;code&gt;RETIRE&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For example, “always use this tool” may create context or latency overhead. It may also encode a real reliability requirement. Wording alone cannot decide which one is true.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run a local, read-only audit
&lt;/h2&gt;

&lt;p&gt;No global installation is required:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skill-sunset@latest audit &lt;span class="nt"&gt;--codex&lt;/span&gt; &lt;span class="nt"&gt;--open&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Claude Code configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skill-sunset@latest audit &lt;span class="nt"&gt;--claude&lt;/span&gt; &lt;span class="nt"&gt;--open&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or audit any bounded directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skill-sunset@latest audit /path/to/setup &lt;span class="nt"&gt;--open&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The audit is local and read-only. The core does not call an AI API, consume model quota, or read provider credentials. It writes an advisory report bundle to the output directory.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a real fixture produces
&lt;/h2&gt;

&lt;p&gt;The repository includes a public test fixture with five files. The current &lt;code&gt;0.2.0&lt;/code&gt; CLI reports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5 files scanned;&lt;/li&gt;
&lt;li&gt;11 findings;&lt;/li&gt;
&lt;li&gt;2 &lt;code&gt;UPDATE&lt;/code&gt; findings;&lt;/li&gt;
&lt;li&gt;1 &lt;code&gt;DEMOTE&lt;/code&gt; finding;&lt;/li&gt;
&lt;li&gt;1 conservative &lt;code&gt;RETIRE&lt;/code&gt; candidate;&lt;/li&gt;
&lt;li&gt;7 &lt;code&gt;TEST&lt;/code&gt; hypotheses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The deterministic findings include a broken local Markdown reference and a complete duplicate generic Skill bundle. The hypotheses include unconditional tool use, mandatory subagent routing, and a legacy reasoning scaffold.&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%2Fyfzwhgptyv3wdwfajmmu.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%2Fyfzwhgptyv3wdwfajmmu.png" alt="Skill Sunset report showing 5 scanned files and 11 audit findings" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This split matters. A missing file can be checked directly. Whether removing a reasoning scaffold changes task quality cannot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validation before deletion
&lt;/h2&gt;

&lt;p&gt;For a &lt;code&gt;TEST&lt;/code&gt; finding, Skill Sunset generates an experiment template. Validation is the default:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skill-sunset@latest &lt;span class="nb"&gt;test&lt;/span&gt; .skill-sunset/experiment-template.json &lt;span class="nt"&gt;--root&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commands do not run unless &lt;code&gt;--run&lt;/code&gt; is explicit. Full environment inheritance requires a second explicit flag, &lt;code&gt;--inherit-env&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Even a passing experiment proves only the acceptance criteria encoded in that experiment. It does not prove that a rule is universally useless.&lt;/p&gt;

&lt;p&gt;The safe lifecycle is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;discover → inspect evidence → test if needed → human approval
→ recoverable archive or edit → re-audit → project tests → keep history
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No generated finding authorizes deletion.&lt;/p&gt;

&lt;h2&gt;
  
  
  External command-safety integration
&lt;/h2&gt;

&lt;p&gt;The Skill Sunset audit surface is also recognized by HOL Guard, an open-source runtime safety project for AI agents.&lt;/p&gt;

&lt;p&gt;The integration was reviewed and merged through &lt;a href="https://github.com/hashgraph-online/hol-guard/pull/2611" rel="noopener noreferrer"&gt;HOL Guard PR #2611&lt;/a&gt;, then included in &lt;a href="https://github.com/hashgraph-online/hol-guard/releases/tag/v3.0.18" rel="noopener noreferrer"&gt;HOL Guard v3.0.18&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;HOL Guard's integration deliberately covers the installed &lt;code&gt;skill-sunset audit&lt;/code&gt; command while leaving experiment execution and npm/npx launcher policy to their existing controls. That limited scope is useful evidence: safety boundaries are clearer when each tool owns one well-defined surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I want to learn next
&lt;/h2&gt;

&lt;p&gt;The tool is deliberately conservative, so false positives and missed cases matter more than a large feature list.&lt;/p&gt;

&lt;p&gt;Try it on a bounded directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skill-sunset@latest audit /path/to/setup &lt;span class="nt"&gt;--open&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it catches a real stale rule—or gets one wrong—please share a redacted example in &lt;a href="https://github.com/ooocooc/open-skill-sunset/issues" rel="noopener noreferrer"&gt;GitHub Issues&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If it saves you one risky cleanup pass, you can &lt;a href="https://github.com/ooocooc/open-skill-sunset" rel="noopener noreferrer"&gt;star the repository&lt;/a&gt;. If not, a concrete counterexample is more useful than a star.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ooocooc/open-skill-sunset" rel="noopener noreferrer"&gt;Skill Sunset on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.npmjs.com/package/skill-sunset" rel="noopener noreferrer"&gt;npm package&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hashgraph-online/hol-guard/pull/2611" rel="noopener noreferrer"&gt;HOL Guard integration PR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.claude.com/en/articles/14553240-give-claude-context-claude-md-and-better-prompts" rel="noopener noreferrer"&gt;Anthropic guidance on maintaining CLAUDE.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
