<?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: Dav</title>
    <description>The latest articles on DEV Community by Dav (@reapollo).</description>
    <link>https://dev.to/reapollo</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3373013%2F0d8ac875-45df-425c-9d97-bba2db1e403b.jpg</url>
      <title>DEV Community: Dav</title>
      <link>https://dev.to/reapollo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/reapollo"/>
    <language>en</language>
    <item>
      <title>AGENTS.md Is Not Enough: Building Project Memory for AI Coding Agents</title>
      <dc:creator>Dav</dc:creator>
      <pubDate>Tue, 14 Apr 2026 08:56:27 +0000</pubDate>
      <link>https://dev.to/reapollo/agentsmd-is-not-enough-building-project-memory-for-ai-coding-agents-1o01</link>
      <guid>https://dev.to/reapollo/agentsmd-is-not-enough-building-project-memory-for-ai-coding-agents-1o01</guid>
      <description>&lt;p&gt;Most AI coding workflows still treat project context as chat&lt;br&gt;
  state.&lt;/p&gt;

&lt;p&gt;That works until you switch tools, start a new session, or try to&lt;br&gt;
  keep multiple agent-specific files aligned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.cursorrules&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GEMINI.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Copilot instructions&lt;/li&gt;
&lt;li&gt;separate MCP configs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those files drift. New sessions start from zero. The project keeps&lt;br&gt;
  learning, but the next agent never sees it.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;agentsge&lt;/strong&gt; to move project intelligence into the&lt;br&gt;
  repository itself.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Site: &lt;a href="https://agents.ge" rel="noopener noreferrer"&gt;https://agents.ge&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/larsen66/agentsge" rel="noopener noreferrer"&gt;https://github.com/larsen66/agentsge&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;npm: &lt;a href="https://www.npmjs.com/package/agentsge" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/agentsge&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;## The problem&lt;/p&gt;

&lt;p&gt;Most teams using AI coding tools are quietly accumulating the same&lt;br&gt;
  failure mode:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;One tool gets updated instructions.&lt;/li&gt;
&lt;li&gt;Another tool still reads old rules.&lt;/li&gt;
&lt;li&gt;Session knowledge stays trapped in chat history.&lt;/li&gt;
&lt;li&gt;A new agent has to rediscover the same architecture,
conventions, and hidden constraints again.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In practice, the repo ends up with fragmented context.&lt;/p&gt;

&lt;p&gt;You might have one file telling Claude Code how to behave, another&lt;br&gt;
  file for Cursor, a third for Copilot, and no durable place for&lt;br&gt;
  “this is how this project actually works”.&lt;/p&gt;

&lt;p&gt;The repo has code.&lt;br&gt;
  The team has tacit knowledge.&lt;br&gt;
  The agents get a partial, drifting copy of both.&lt;/p&gt;

&lt;p&gt;## What I wanted instead&lt;/p&gt;

&lt;p&gt;I wanted a simple primitive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one repository-owned memory layer&lt;/li&gt;
&lt;li&gt;one place for durable rules and project knowledge&lt;/li&gt;
&lt;li&gt;one source of truth that multiple agent tools can inherit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That became:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;AGENTS.md&lt;/code&gt; as the entrypoint&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.agents/&lt;/code&gt; as the durable project memory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core model is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; says what to do. &lt;code&gt;.agents/&lt;/code&gt; remembers what the&lt;br&gt;
  project learned.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;## What agentsge does&lt;/p&gt;

&lt;p&gt;&lt;code&gt;agentsge&lt;/code&gt; is an open-source CLI that makes a repository agent-&lt;br&gt;
  ready.&lt;/p&gt;

&lt;p&gt;Run:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
  npx agentsge init

  It creates a versioned .agents/ directory and scaffolds the repo
  for AI agent onboarding.

  Typical structure:

  .agents/
    config.yaml
    rules/
      _capture.md
    knowledge/
      _index.md
      architecture/
      patterns/
      lessons/
      conventions/
      dependencies/
    skills/
    mcp/
      config.yaml

  This gives the repo a place to store:

  - project metadata
  - mandatory rules
  - architecture decisions
  - recurring implementation patterns
  - bug lessons
  - team conventions
  - MCP definitions

  All in markdown and YAML, stored in git.

  ## Why not just use AGENTS.md?

  AGENTS.md is useful, but by itself it is not enough.

  It solves entrypoint instructions.
  It does not solve durable project memory.

  A single markdown file is fine for:

  - “read these rules”
  - “start here”
  - “follow this workflow”

  It is much worse for:

  - evolving architecture knowledge
  - accumulating lessons from bugs
  - keeping typed project memory organized
  - syncing multiple agent surfaces over time

  A repo needs both:

  - a front door
  - a memory layer

  AGENTS.md is the front door.
  .agents/ is the memory layer.

  ## Why not just keep everything in README?

  Because README has a different job.

  README should explain the project to humans at a broad level.
  Project memory is operational and specific.

  Examples of things that belong in durable project knowledge but
  not in README:

  - “This subsystem looks independent, but breaks if env X is
    missing”
  - “The bug looked like a frontend issue, but the real cause was a
    backend cache race”
  - “We always extend this adapter instead of writing directly to
    that integration point”
  - “This dependency exists because the obvious alternative failed
    in production”

  That kind of knowledge is too detailed, too volatile, or too
  implementation-specific for README, but too important to lose.

  ## The knowledge model

  I kept the memory model intentionally small.

  There are five knowledge types:

  - architecture
  - pattern
  - lesson
  - convention
  - dependency

  That gives enough structure to be useful without turning the repo
  into a database.

  Examples:

  - architecture: why a structural decision was made, including
    rejected alternatives
  - pattern: a reusable implementation shape across multiple files
  - lesson: a bug where the symptom pointed away from the cause
  - convention: a team rule that is not obvious from code alone
  - dependency: a non-obvious reason a package or workaround exists

  The goal is not to create documentation overhead.

  The goal is to preserve the kinds of context that future agents
  and future contributors would otherwise have to rediscover.

  ## Cross-agent sync

  Another problem I wanted to fix was tool fragmentation.

  Even if the repo has good context, every tool wants it in a
  different shape.

  So agentsge can sync agent-facing surfaces from the project’s
  source of truth.

  That means .agents/ can drive:

  - AGENTS.md
  - CLAUDE.md
  - .cursorrules
  - GEMINI.md
  - MCP config targets for different tools

  Instead of manually maintaining parallel copies, the repo owns the
  knowledge and tool-specific files stay thin.

  ## Automatic knowledge capture

  One part I found especially interesting was capture.

  Most useful project knowledge is not written during setup.
  It emerges while doing real work.

  A bug gets fixed.
  A weird constraint gets discovered.
  A pattern becomes obvious after the third repeated change.

  So agentsge also supports hook-based capture.

  The idea is:

  - session starts
  - file changes get logged
  - session ends
  - the diff is analyzed
  - candidate knowledge items go into pending/
  - a human accepts or rejects them

  That keeps the system from becoming either:

  - a static config generator
  - or an uncontrolled note dump

  ## What I like about this approach

  A few properties matter to me:

  ### 1. The project owns the context

  Not the vendor.
  Not the chat thread.
  Not one specific tool.

  ### 2. It stays in git

  That means:

  - reviewable
  - diffable
  - portable
  - easy to delete
  - easy to move between tools

  ### 3. It is intentionally boring

  Markdown and YAML are not magical.
  That is the point.

  ### 4. It separates entrypoint from memory

  This turned out to be a much cleaner model than trying to stuff
  everything into one file.

  ## Current state

  The public site and docs are here:

  - https://agents.ge
  - https://agents.ge/docs

  The site is prerendered and crawlable, and I also added:

  - route-level metadata
  - structured data
  - robots.txt
  - sitemap.xml
  - llms.txt
  - llms-full.txt

  because I wanted the project to be understandable not just to
  users, but also to search engines and LLM-based discovery systems.

  ## Example

  The basic starting point is still intentionally simple:

  npx agentsge init

  After that, the repo can onboard an agent with:

  - project config
  - required rules
  - existing knowledge
  - reusable workflows
  - synced entrypoints

  ## What I’m trying to learn

  I’m still interested in feedback on a few open questions:

  1. Is .agents/ a good primitive, or is this too much structure?
  2. Is the five-type knowledge model about right, or too
     opinionated?
  3. Is cross-agent sync genuinely useful, or just compensating for
     poor tooling ecosystems?
  4. How much project memory should be explicit versus auto-
     captured?

  If this sounds useful, I’d love feedback.

  - Site: https://agents.ge
  - Repo: https://github.com/larsen66/agentsge
  - npm: https://www.npmjs.com/package/agentsge


  Если хочешь, я могу сразу ещё подготовить:
  - более короткую версию статьи
  - Reddit post
  - X thread на 5-7 твитов
  - первую картинку/cover text для dev.to article


› используй md форматирование


• # AGENTS.md Is Not Enough: Building Project Memory for AI Coding
  Agents

  How I stopped repo context from drifting across Claude Code,
  Cursor, Codex, Copilot, and other AI coding tools.

  Most AI coding workflows still treat project context as chat
  state.

  That works until you switch tools, start a new session, or try to
  keep multiple agent-specific files aligned:

  - AGENTS.md
  - CLAUDE.md
  - .cursorrules
  - GEMINI.md
  - Copilot instructions
  - separate MCP configs

  Those files drift. New sessions start from zero. The project keeps
  learning, but the next agent never sees it.

  I built agentsge to move project intelligence into the repository
  itself.

  - Site: https://agents.ge (https://agents.ge)
  - Repo: https://github.com/larsen66/agentsge
    (https://github.com/larsen66/agentsge)
  - npm: https://www.npmjs.com/package/agentsge
    (https://www.npmjs.com/package/agentsge)

  ## The problem

  Most teams using AI coding tools are quietly accumulating the same
  failure mode:

  1. One tool gets updated instructions.
  2. Another tool still reads old rules.
  3. Session knowledge stays trapped in chat history.
  4. A new agent has to rediscover the same architecture,
     conventions, and hidden constraints again.

  In practice, the repo ends up with fragmented context.

  You might have one file telling Claude Code how to behave, another
  file for Cursor, a third for Copilot, and no durable place for
  “this is how this project actually works”.

  The repo has code.
  The team has tacit knowledge.
  The agents get a partial, drifting copy of both.

  ## What I wanted instead

  I wanted a simple primitive:

  - one repository-owned memory layer
  - one place for durable rules and project knowledge
  - one source of truth that multiple agent tools can inherit

  That became:

  - AGENTS.md as the entrypoint
  - .agents/ as the durable project memory

  The core model is:

  &amp;gt; AGENTS.md says what to do. .agents/ remembers what the project
  &amp;gt; learned.

  ## What agentsge does

  agentsge is an open-source CLI that makes a repository agent-
  ready.

  Run:

  npx agentsge init

  It creates a versioned .agents/ directory and scaffolds the repo
  for AI agent onboarding.

  Typical structure:

  .agents/
    config.yaml
    rules/
      _capture.md
    knowledge/
      _index.md
      architecture/
      patterns/
      lessons/
      conventions/
      dependencies/
    skills/
    mcp/
      config.yaml

  This gives the repo a place to store:

  - project metadata
  - mandatory rules
  - architecture decisions
  - recurring implementation patterns
  - bug lessons
  - team conventions
  - MCP definitions

  All in Markdown and YAML, stored in git.

  ## Why not just use AGENTS.md?

  AGENTS.md is useful, but by itself it is not enough.

  It solves entrypoint instructions.
  It does not solve durable project memory.

  A single Markdown file is fine for:

  - “read these rules”
  - “start here”
  - “follow this workflow”

  It is much worse for:

  - evolving architecture knowledge
  - accumulating lessons from bugs
  - keeping typed project memory organized
  - syncing multiple agent surfaces over time

  A repo needs both:

  - a front door
  - a memory layer

  AGENTS.md is the front door.
  .agents/ is the memory layer.

  ## Why not just keep everything in README?

  Because README has a different job.

  README should explain the project to humans at a broad level.
  Project memory is operational and specific.

  Examples of things that belong in durable project knowledge but
  not in README:

  - “This subsystem looks independent, but breaks if env X is
    missing”
  - “The bug looked like a frontend issue, but the real cause was a
    backend cache race”
  - “We always extend this adapter instead of writing directly to
    that integration point”
  - “This dependency exists because the obvious alternative failed
    in production”

  That kind of knowledge is too detailed, too volatile, or too
  implementation-specific for README, but too important to lose.

  ## The knowledge model

  I kept the memory model intentionally small.

  There are five knowledge types:

  - architecture
  - pattern
  - lesson
  - convention
  - dependency

  That gives enough structure to be useful without turning the repo
  into a database.

  Examples:

  - architecture: why a structural decision was made, including
    rejected alternatives
  - pattern: a reusable implementation shape across multiple files
  - lesson: a bug where the symptom pointed away from the cause
  - convention: a team rule that is not obvious from code alone
  - dependency: a non-obvious reason a package or workaround exists

  The goal is not to create documentation overhead.

  The goal is to preserve the kinds of context that future agents
  and future contributors would otherwise have to rediscover.

  ## Cross-agent sync

  Another problem I wanted to fix was tool fragmentation.

  Even if the repo has good context, every tool wants it in a
  different shape.

  So agentsge can sync agent-facing surfaces from the project’s
  source of truth.

  That means .agents/ can drive:

  - AGENTS.md
  - CLAUDE.md
  - .cursorrules
  - GEMINI.md
  - MCP config targets for different tools

  Instead of manually maintaining parallel copies, the repo owns the
  knowledge and tool-specific files stay thin.

  ## Automatic knowledge capture

  One part I found especially interesting was capture.

  Most useful project knowledge is not written during setup.
  It emerges while doing real work.

  A bug gets fixed.
  A weird constraint gets discovered.
  A pattern becomes obvious after the third repeated change.

  So agentsge also supports hook-based capture.

  The idea is:

  - session starts
  - file changes get logged
  - session ends
  - the diff is analyzed
  - candidate knowledge items go into pending/
  - a human accepts or rejects them

  That keeps the system from becoming either:

  - a static config generator
  - or an uncontrolled note dump

  ## What I like about this approach

  A few properties matter to me.

  ### 1. The project owns the context

  Not the vendor.
  Not the chat thread.
  Not one specific tool.

  ### 2. It stays in git

  That means it is:

  - reviewable
  - diffable
  - portable
  - easy to delete
  - easy to move between tools

  ### 3. It is intentionally boring

  Markdown and YAML are not magical.
  That is the point.

  ### 4. It separates entrypoint from memory

  This turned out to be a much cleaner model than trying to stuff
  everything into one file.

  ## Current state

  The public site and docs are here:

  - https://agents.ge (https://agents.ge)
  - https://agents.ge/docs (https://agents.ge/docs)

  The site is prerendered and crawlable, and I also added:

  - route-level metadata
  - structured data
  - robots.txt
  - sitemap.xml
  - llms.txt
  - llms-full.txt

  because I wanted the project to be understandable not just to
  users, but also to search engines and LLM-based discovery systems.

  ## Example

  The basic starting point is still intentionally simple:

  npx agentsge init

  After that, the repo can onboard an agent with:

  - project config
  - required rules
  - existing knowledge
  - reusable workflows
  - synced entrypoints

  ## What I’m trying to learn

  I’m still interested in feedback on a few open questions:

  1. Is .agents/ a good primitive, or is this too much structure?
  2. Is the five-type knowledge model about right, or too
     opinionated?
  3. Is cross-agent sync genuinely useful, or just compensating for
     poor tooling ecosystems?
  4. How much project memory should be explicit versus auto-
     captured?

  If this sounds useful, I’d love feedback.

  - Site: https://agents.ge (
  - Repo: https://github.com/larsen66/agentsge
  - npm: https://www.npmjs.com/package/agentsge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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