<?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: Kage</title>
    <description>The latest articles on DEV Community by Kage (@kage18).</description>
    <link>https://dev.to/kage18</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%2F3970406%2F242f6b87-9b69-455f-a3cd-0e37fded1805.jpeg</url>
      <title>DEV Community: Kage</title>
      <link>https://dev.to/kage18</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kage18"/>
    <language>en</language>
    <item>
      <title>Your coding agent's memory should have to prove itself</title>
      <dc:creator>Kage</dc:creator>
      <pubDate>Fri, 12 Jun 2026 18:00:09 +0000</pubDate>
      <link>https://dev.to/kage18/your-coding-agents-memory-should-have-to-prove-itself-2m80</link>
      <guid>https://dev.to/kage18/your-coding-agents-memory-should-have-to-prove-itself-2m80</guid>
      <description>&lt;p&gt;An agent acting on wrong memory is worse than one with none.&lt;/p&gt;

&lt;p&gt;Every memory tool for coding agents has the same quiet failure mode: knowledge written weeks ago keeps getting recalled after the code it describes was refactored away. The store only grows, nothing re-checks it, and the agent confidently acts on stale facts.&lt;/p&gt;

&lt;p&gt;We built Kage around one rule: &lt;strong&gt;memory has to prove itself.&lt;/strong&gt; Every memory cites the files it's about, and it's checked against your repo three times:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;On write&lt;/strong&gt; - a memory citing a file that doesn't exist is refused. Hallucinated knowledge never enters storage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On recall&lt;/strong&gt; - if the cited code changed or was deleted, the memory is withheld and flagged instead of served.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On your diff&lt;/strong&gt; - &lt;code&gt;kage pr check&lt;/code&gt; warns when a change you're about to merge invalidates something the team knows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The loop runs itself: sessions that captured nothing get auto-distilled into drafts you review (a signal gate keeps junk out), every session opens with a "previously..." digest, and each recall prints a receipt - tokens and dollars saved, measured per memory.&lt;/p&gt;

&lt;p&gt;Memory lives as plain JSON in your repo, reviewed in the same PR as the code. Personal memory syncs over a private git remote you own. No account, no API key, no database.&lt;/p&gt;

&lt;p&gt;One command wires Claude Code, Codex, Cursor, Windsurf - anything MCP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; @kage-core/kage-graph-mcp &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See what your own repo is hiding (read-only, ~1 min): &lt;code&gt;npx -y @kage-core/kage-graph-mcp scan --project .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Site: &lt;a href="https://kage-core.com" rel="noopener noreferrer"&gt;https://kage-core.com&lt;/a&gt;&lt;br&gt;
Repo (GPL-3.0): &lt;a href="https://github.com/kage-core/Kage" rel="noopener noreferrer"&gt;https://github.com/kage-core/Kage&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Teams: we're running live 30-minute demos on your repo&lt;/strong&gt; - the Truth Report, a stale-catch on a real diff, and the savings receipt at the end. Book one: &lt;a href="https://kage-core.com/demo.html" rel="noopener noreferrer"&gt;https://kage-core.com/demo.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love hard questions - especially from anyone who's watched an agent confidently act on stale knowledge.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>We ran one command on Express.js. Its repo is hiding 7 knowledge voids.</title>
      <dc:creator>Kage</dc:creator>
      <pubDate>Thu, 11 Jun 2026 21:14:17 +0000</pubDate>
      <link>https://dev.to/kage18/we-ran-one-command-on-expressjs-its-repo-is-hiding-7-knowledge-voids-3bbg</link>
      <guid>https://dev.to/kage18/we-ran-one-command-on-expressjs-its-repo-is-hiding-7-knowledge-voids-3bbg</guid>
      <description>&lt;p&gt;No signup, no config. We pointed one command at a fresh clone of Express.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; @kage-core/kage-graph-mcp scan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;0.3 seconds of analysis later (142 files, 3,160 symbols, full git history), it printed this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Kage Truth Report - express
  0 duplicate clusters - 0 ghost exports - 0 bus-factor-1 hot files - 7 knowledge voids

KNOWLEDGE VOID - high churn, zero memory
  lib/response.js - 390 commits of accumulated decisions,
  149 graph edges depending on it - and zero memory packets
  or doc mentions. Agents and new hires fly blind here.

  lib/application.js - 179 commits, 77 edges. Same story.
  lib/request.js - 175 commits, 58 edges. Same story.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What is a knowledge void?
&lt;/h2&gt;

&lt;p&gt;Take every file in a repo and ask two questions: how often has it changed (churn), and how much depends on it (centrality in the import/call graph)? Now ask a third: where is the accumulated knowledge about it written down?&lt;/p&gt;

&lt;p&gt;For lib/response.js the answers are: 390 commits of decisions, 149 dependents, and... nowhere. Not the README, not the docs, not any structured memory. Every one of those 390 commits had a reason. The reasons live in the heads of whoever wrote them.&lt;/p&gt;

&lt;p&gt;That is fine until an AI agent (or a new teammate) touches that file. They fly blind - and on high-centrality files, blind edits are how regressions are born.&lt;/p&gt;

&lt;h2&gt;
  
  
  What else the scan checks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Duplicate implementations&lt;/strong&gt; - same-name, same-signature functions in different packages, flagged when they appeared recently (the AI-era copy-paste signature)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ghost exports&lt;/strong&gt; - exported symbols with zero call edges, verified against raw source so CommonJS property-requires don't false-positive&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bus factor 1&lt;/strong&gt; - hot files only one person has ever committed to, ranked by graph centrality&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Doc lies&lt;/strong&gt; - README claims checked against the code graph: paths that don't exist, npm scripts that aren't in package.json, CLI flags that appear nowhere&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every finding comes with file:line evidence. Nothing is a vibe.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works under the hood
&lt;/h2&gt;

&lt;p&gt;The scan is built on a local code graph: TypeScript compiler AST for TS/JS, tree-sitter (pure WASM, no native deps) for Python/Go/Rust/Java/Ruby, import-aware call resolution so a call edge means the import actually resolves there - plus one pass over git history for churn and authorship. All local, nothing leaves your machine.&lt;/p&gt;

&lt;p&gt;The same engine powers the rest of Kage: verified memory for coding agents. Memory that cites a file that doesn't exist is rejected at write. Memory whose cited code changed is withheld from recall and flagged at the exact moment your diff invalidates it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your changes invalidated 1 team memory:
  - Payment validation rule - cites src/payments.ts
    (content changed since this memory was verified)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And it prints receipts, because tools should show their value instead of asserting it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This week Kage saved you ~845K tokens (~$12.67),
blocked 0 stale memories, answered 5 recalls.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Try it on your repo
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; @kage-core/kage-graph-mcp scan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it finds nothing interesting, you have an unusually well-documented repo - genuinely, congratulations. If it finds a void on your most-depended-on file, that is the file your next agent session will touch blind.&lt;/p&gt;

&lt;p&gt;Open source (GPL-3.0), works with Claude Code, Codex, Cursor, Windsurf, any MCP client: &lt;a href="https://github.com/kage-core/Kage" rel="noopener noreferrer"&gt;https://github.com/kage-core/Kage&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would love to know what the scan finds on YOUR repo - drop the weirdest finding in the comments.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>devtools</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Shared memory for developers and their coding agents — so the team stops rediscovering its own codebase</title>
      <dc:creator>Kage</dc:creator>
      <pubDate>Sat, 06 Jun 2026 07:28:16 +0000</pubDate>
      <link>https://dev.to/kage18/code-grounded-memory-for-coding-agents-so-they-stop-re-learning-your-repo-18in</link>
      <guid>https://dev.to/kage18/code-grounded-memory-for-coding-agents-so-they-stop-re-learning-your-repo-18in</guid>
      <description>&lt;p&gt;Every team keeps rediscovering its own codebase. Someone already chased down this exact bug last month. The reason that module is shaped the way it is got decided in a thread nobody can find. A new teammate — or a fresh agent session — hits the same wall and re-derives it from scratch.&lt;/p&gt;

&lt;p&gt;The knowledge exists. It's just trapped: in people's heads, in closed PRs, in one-off chat sessions that evaporate when the window closes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/kage-core/Kage" rel="noopener noreferrer"&gt;Kage&lt;/a&gt;&lt;/strong&gt; is a &lt;strong&gt;shared memory layer for developers and their coding agents&lt;/strong&gt;. Capture a learning once — a bug's root cause, a decision, a gotcha — and the whole team, and every agent (Claude Code, Codex, Cursor, Windsurf, anything that speaks MCP), recalls it the next time it's relevant. The team stops rediscovering the same things.&lt;/p&gt;

&lt;p&gt;And it's &lt;strong&gt;grounded in your actual code&lt;/strong&gt; and lives in your repo — so shared memory is reviewed in PRs like everything else, and stays accurate as the code changes.&lt;/p&gt;

&lt;p&gt;See it on a throwaway repo in 30 seconds:&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.amazonaws.com%2Fuploads%2Farticles%2Fnuend6w5qw3h50e6jji2.gif" 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.amazonaws.com%2Fuploads%2Farticles%2Fnuend6w5qw3h50e6jji2.gif" alt="Kage demo: a learning captured, grounded to code, and recalled — with stale or unfounded notes kept out" width="772" height="512"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; @kage-core/kage-graph-mcp demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Shared, like the rest of your codebase
&lt;/h2&gt;

&lt;p&gt;Memory in Kage is a team artifact, not a personal scratchpad:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✍️ &lt;strong&gt;Anyone (or their agent) captures&lt;/strong&gt; a learning as they work — tied to the files it's about.&lt;/li&gt;
&lt;li&gt;🔎 &lt;strong&gt;The next person to touch that code&lt;/strong&gt; has their agent recall it automatically — no re-deriving it.&lt;/li&gt;
&lt;li&gt;🔁 &lt;strong&gt;It's git-native&lt;/strong&gt; — plain JSON in the repo, reviewed in the same PR, shared with everyone on merge. New hires and fresh agent sessions inherit the team's accumulated context on day one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No vector DB, no API key, no separate service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stays accurate as the code moves
&lt;/h2&gt;

&lt;p&gt;Because each note is tied to the files it describes, shared memory doesn't rot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a note that cites a file which doesn't exist won't be stored;&lt;/li&gt;
&lt;li&gt;when code a note depends on is deleted or refactored, that note is held back and flagged to update;&lt;/li&gt;
&lt;li&gt;nothing drifts silently — it's grounded in, and reviewed with, the code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(You can even measure how grounded your repo's memory is with &lt;code&gt;kage benchmark --trust&lt;/code&gt; — a health check, not the headline.)&lt;/p&gt;

&lt;h2&gt;
  
  
  See what the team remembers
&lt;/h2&gt;

&lt;p&gt;Kage ships a viewer — a shared dashboard of your repo's memory: what the team and its agents have learned, every note wired to the code it's tied to, and what's actually been recalled.&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.amazonaws.com%2Fuploads%2Farticles%2Fjasg2eyomsyqtthjg6pv.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.amazonaws.com%2Fuploads%2Farticles%2Fjasg2eyomsyqtthjg6pv.png" alt="Kage viewer overview: memory health, recall stats, and notes that need a look" width="800" height="500"&gt;&lt;/a&gt;&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.amazonaws.com%2Fuploads%2Farticles%2F9qmn1gmq5jq1llenhw0e.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.amazonaws.com%2Fuploads%2Farticles%2F9qmn1gmq5jq1llenhw0e.png" alt="Kage memory map: an interactive graph linking memory notes to the files they're grounded in" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try the live one (nothing to install): &lt;strong&gt;&lt;a href="https://kage-core.com/viewer" rel="noopener noreferrer"&gt;https://kage-core.com/viewer&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; @kage-core/kage-graph-mcp demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open source (GPL-3.0). If your team could stop rediscovering its own codebase, a ⭐ on &lt;a href="https://github.com/kage-core/Kage" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; helps a lot — and I'd love your feedback.&lt;/p&gt;

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