<?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: Sergei Strebulaev</title>
    <description>The latest articles on DEV Community by Sergei Strebulaev (@sergemso).</description>
    <link>https://dev.to/sergemso</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%2F4108460%2Faa705442-1138-48c8-b4e4-4b45a3098896.png</url>
      <title>DEV Community: Sergei Strebulaev</title>
      <link>https://dev.to/sergemso</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sergemso"/>
    <language>en</language>
    <item>
      <title>My AI Keeps Forgetting What We Already Decided</title>
      <dc:creator>Sergei Strebulaev</dc:creator>
      <pubDate>Thu, 03 Sep 2026 22:41:57 +0000</pubDate>
      <link>https://dev.to/sergemso/my-ai-keeps-forgetting-what-we-already-decided-4okd</link>
      <guid>https://dev.to/sergemso/my-ai-keeps-forgetting-what-we-already-decided-4okd</guid>
      <description>&lt;p&gt;Every week I re-explain the same architecture choices to my AI coding&lt;br&gt;
agent. New session, zero memory — like we never talked. That's not a&lt;br&gt;
prompting problem, it's a memory problem, and I fixed it with a&lt;br&gt;
git-based knowledge system that lives right next to the code. Here's&lt;br&gt;
the actual walkthrough, the schema it writes, and where it falls&lt;br&gt;
short — not just the pitch.&lt;/p&gt;
&lt;h2&gt;
  
  
  The problem in one sentence
&lt;/h2&gt;

&lt;p&gt;I plan a feature with Claude Code on Tuesday. Wednesday, fresh&lt;br&gt;
session: &lt;em&gt;"Where did we leave off?"&lt;/em&gt; No idea. I re-explain everything.&lt;br&gt;
By Thursday I've explained it a third time to a different agent. Each&lt;br&gt;
one asks good questions, gets a good answer, and forgets it the moment&lt;br&gt;
the session ends. The plan was never the problem — nothing durable&lt;br&gt;
ever got written down, so there was nothing for the next session to&lt;br&gt;
read.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I built: kms
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;kms&lt;/code&gt; is a Claude Code plugin that captures decisions, facts, and&lt;br&gt;
guardrails as plain markdown files, version-controlled right alongside&lt;br&gt;
your code. Any agent that reads the repo reads the knowledge base&lt;br&gt;
first, before it asks you anything.&lt;/p&gt;

&lt;p&gt;Install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace add vivantel/kms
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;kms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Four artifact types, each with one job:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Answers&lt;/th&gt;
&lt;th&gt;Lives in&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fact&lt;/td&gt;
&lt;td&gt;What's true right now&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docs/facts/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Decision&lt;/td&gt;
&lt;td&gt;What you're committing to, and why&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docs/decisions/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Guardrail&lt;/td&gt;
&lt;td&gt;What must (or must not) happen, derived from a decision&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docs/guardrails/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill&lt;/td&gt;
&lt;td&gt;How to act on all of the above&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docs/skills/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Walkthrough: capturing your first decision
&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 plaintext"&gt;&lt;code&gt;/kms:quickstart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If &lt;code&gt;docs/{facts,decisions,guardrails,skills}/&lt;/code&gt; doesn't exist yet,&lt;br&gt;
quickstart sets it up first. Then it asks one direct question:&lt;br&gt;
&lt;em&gt;"What decision or plan is currently live for you right now?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Say you're picking an auth provider. Quickstart interviews you — what&lt;br&gt;
you're choosing, why, what would make this wrong — then writes the&lt;br&gt;
result to &lt;code&gt;docs/decisions/0001-auth-provider-choice.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0001-auth-provider-choice&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Use Auth0 for user authentication&lt;/span&gt;
&lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;accepted&lt;/span&gt;
&lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026-09-03&lt;/span&gt;
&lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;auth&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;infra&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;track&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;product&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="c1"&gt;## Decision&lt;/span&gt;

&lt;span class="s"&gt;Auth0 for all user-facing auth. Rejected rolling our own — team of&lt;/span&gt;
&lt;span class="s"&gt;two, no time to own session security. Rejected Firebase Auth — we're&lt;/span&gt;
&lt;span class="s"&gt;not on the rest of the Firebase stack and didn't want the lock-in.&lt;/span&gt;

&lt;span class="c1"&gt;## Rationale&lt;/span&gt;

&lt;span class="nn"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nothing gets summarized or paraphrased away — that's your call,&lt;br&gt;
captured once, in your own words. The session closes by naming what to&lt;br&gt;
run next, not leaving you to guess: &lt;code&gt;query&lt;/code&gt; to pull this decision back&lt;br&gt;
up later with a citation, &lt;code&gt;capture&lt;/code&gt; after the next session that&lt;br&gt;
touches it.&lt;/p&gt;

&lt;p&gt;From that point on, Claude Code&lt;br&gt;
reads that file the next time it opens the repo and knows exactly&lt;br&gt;
what was decided. Codex reads the same skill set through its own&lt;br&gt;
plugin manifest. Kilo Code CLI reads it too, once &lt;code&gt;kilo.jsonc&lt;/code&gt; points&lt;br&gt;
at the published skills manifest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond decisions
&lt;/h2&gt;

&lt;p&gt;Facts and guardrails link back to why they exist, not just what they&lt;br&gt;
say. Say you decide Medium posts close with an install CTA, Dev.to&lt;br&gt;
posts close with a GitHub-stars ask. That's a decision. The guardrail&lt;br&gt;
that enforces it on every article cites that decision by id. A skill&lt;br&gt;
that tells you how to adapt a draft per platform references the&lt;br&gt;
guardrail. Change the decision later, and &lt;code&gt;capture&lt;/code&gt;/&lt;code&gt;lint&lt;/code&gt; catch the&lt;br&gt;
guardrail and skill silently drifting out of sync with it — instead&lt;br&gt;
of you finding out three articles later.&lt;/p&gt;

&lt;p&gt;Commands worth knowing once you've got a knowledge base going:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;query&lt;/code&gt; — retrieve a past decision with a citation, instead of
re-explaining it.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;capture&lt;/code&gt; — log what a work session changed, after the fact; flags
contradictions it finds along the way.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lint&lt;/code&gt; — validate the whole knowledge base on demand: dangling
references, missing fields, stale derived artifacts.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;brainstorm&lt;/code&gt; — generate fresh approaches with no anchor to past
decisions, for exploring before anything's locked in.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;onboard&lt;/code&gt; — a role-tailored, 5-day ramp-up plan for a new teammate,
built from the existing knowledge base.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;conform&lt;/code&gt; — check whether a pending change respects the guardrails
before it lands.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What this doesn't solve
&lt;/h2&gt;

&lt;p&gt;It's not magic memory — you still write the interview answers&lt;br&gt;
yourself; quickstart just makes sure they get written down instead of&lt;br&gt;
staying in your head. It doesn't replace tests, code review, or&lt;br&gt;
actual documentation for end users. And it only helps if the habit&lt;br&gt;
sticks — a knowledge base nobody updates after month one is just a&lt;br&gt;
&lt;code&gt;docs/&lt;/code&gt; folder with extra steps. The parts that make that less likely&lt;br&gt;
are &lt;code&gt;capture&lt;/code&gt; (so updating it is a five-minute pass after a session,&lt;br&gt;
not a separate chore) and &lt;code&gt;lint&lt;/code&gt; (so drift gets caught instead of&lt;br&gt;
silently rotting).&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this beats a context file you paste in
&lt;/h2&gt;

&lt;p&gt;I've tried system prompts, paste-in context files, separate&lt;br&gt;
note-taking apps I'd open in another window. They all fail the same&lt;br&gt;
way: they live outside the repo, so they don't survive a fresh&lt;br&gt;
session, and they rely on you remembering to open them, paste them in,&lt;br&gt;
and keep them updated. This is different because it's part of the&lt;br&gt;
repository — every decision is version-controlled, every fact is&lt;br&gt;
verified, and a guardrail is derived from a real commitment instead of&lt;br&gt;
vibes. When the project changes, the knowledge base changes with it,&lt;br&gt;
in the same commit history as the code.&lt;/p&gt;

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

&lt;p&gt;If this is useful to you, a star helps other developers find it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⭐ &lt;a href="https://github.com/vivantel/kms" rel="noopener noreferrer"&gt;Star vivantel/kms on GitHub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then install the plugin and run &lt;code&gt;/kms:quickstart&lt;/code&gt; on one real decision&lt;br&gt;
that's been living in your head. You'll never explain it twice.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Contributions welcome&lt;/em&gt; — see&lt;br&gt;
&lt;a href="https://github.com/vivantel/kms/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt;&lt;br&gt;
for how to propose new skills or improve existing ones.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>coding</category>
      <category>git</category>
    </item>
  </channel>
</rss>
