<?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: Naman Jain</title>
    <description>The latest articles on DEV Community by Naman Jain (@naman_here).</description>
    <link>https://dev.to/naman_here</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%2F3974293%2F965dd5b5-974a-4185-b472-89ae60c5f0ac.png</url>
      <title>DEV Community: Naman Jain</title>
      <link>https://dev.to/naman_here</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/naman_here"/>
    <language>en</language>
    <item>
      <title>CLAUDE.md vs agent memory: what each should store</title>
      <dc:creator>Naman Jain</dc:creator>
      <pubDate>Sat, 19 Sep 2026 12:54:45 +0000</pubDate>
      <link>https://dev.to/naman_here/claudemd-vs-agent-memory-what-each-should-store-21kl</link>
      <guid>https://dev.to/naman_here/claudemd-vs-agent-memory-what-each-should-store-21kl</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.getlockstep.dev/blog/claude-md-vs-agent-memory" rel="noopener noreferrer"&gt;getlockstep.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A team adds another paragraph to CLAUDE.md every time Claude Code makes a mistake.&lt;/p&gt;

&lt;p&gt;Six weeks later, the file contains build commands, style rules, a product exception, three temporary migration notes, an old API decision, and a warning that contradicts a newer warning lower down.&lt;/p&gt;

&lt;p&gt;Claude has more memory and less clarity.&lt;/p&gt;

&lt;p&gt;CLAUDE.md and agent memory are both useful, but they should not store the same things. The simplest way to choose is to ask who needs the information, how long it stays true, and what happens when it changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short answer
&lt;/h2&gt;

&lt;p&gt;Use four separate homes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Information&lt;/th&gt;
&lt;th&gt;Best home&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stable project instructions&lt;/td&gt;
&lt;td&gt;CLAUDE.md&lt;/td&gt;
&lt;td&gt;Intentional, reviewable, version-controlled guidance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Personal recurring patterns&lt;/td&gt;
&lt;td&gt;Auto memory&lt;/td&gt;
&lt;td&gt;Useful continuity for one person's Claude sessions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current task state&lt;/td&gt;
&lt;td&gt;Handoff or task note&lt;/td&gt;
&lt;td&gt;Temporary, specific, easy to replace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Team decisions&lt;/td&gt;
&lt;td&gt;Shared approved record&lt;/td&gt;
&lt;td&gt;Needs owner, status, scope, and replacement history&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;One file can technically hold all four. It usually should not.&lt;/p&gt;

&lt;h2&gt;
  
  
  What belongs in CLAUDE.md
&lt;/h2&gt;

&lt;p&gt;Claude Code's documentation describes CLAUDE.md as persistent project guidance. Use it for instructions that are both important and durable.&lt;/p&gt;

&lt;p&gt;Good entries include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the command to run tests for this repository;&lt;/li&gt;
&lt;li&gt;which package manager the team uses;&lt;/li&gt;
&lt;li&gt;the boundary between two services;&lt;/li&gt;
&lt;li&gt;where migrations live;&lt;/li&gt;
&lt;li&gt;naming or formatting conventions not enforced automatically;&lt;/li&gt;
&lt;li&gt;a hard rule such as never logging raw tokens;&lt;/li&gt;
&lt;li&gt;a durable architecture invariant that affects most work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A useful CLAUDE.md sentence tells Claude what to do repeatedly. It should still be correct when a different engineer opens the repository next month.&lt;/p&gt;

&lt;p&gt;Keep the file close to the code it governs. If instructions apply only to one package or directory, scope them instead of loading them into every task.&lt;/p&gt;

&lt;h2&gt;
  
  
  What belongs in agent memory
&lt;/h2&gt;

&lt;p&gt;Auto memory is best for personal, recurring working knowledge that helps Claude collaborate with one user across sessions.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you prefer small commits;&lt;/li&gt;
&lt;li&gt;you want test output summarized in a particular format;&lt;/li&gt;
&lt;li&gt;a local environment has a recurring setup detail;&lt;/li&gt;
&lt;li&gt;you routinely ask for a plan before edits;&lt;/li&gt;
&lt;li&gt;a harmless tool preference repeats across projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is working continuity, not company policy. A teammate should not inherit your personal preferences as if the team approved them.&lt;/p&gt;

&lt;p&gt;Do not use personal memory as the only home for a rule that controls production behavior, customer data, or architecture. Nobody else can reliably review or receive it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What belongs in a task handoff
&lt;/h2&gt;

&lt;p&gt;A handoff carries temporary execution state:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;current objective;&lt;/li&gt;
&lt;li&gt;files changed;&lt;/li&gt;
&lt;li&gt;evidence gathered;&lt;/li&gt;
&lt;li&gt;tests run;&lt;/li&gt;
&lt;li&gt;blockers;&lt;/li&gt;
&lt;li&gt;unresolved decisions;&lt;/li&gt;
&lt;li&gt;next step.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It should make a new session productive without replaying the full transcript. When the task ends, much of it can disappear.&lt;/p&gt;

&lt;p&gt;If one item must shape future work, promote it to the right durable home. A new test command may enter CLAUDE.md. An approved product exception may enter the team's decision record.&lt;/p&gt;

&lt;h2&gt;
  
  
  What should not be buried in CLAUDE.md
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Temporary plans
&lt;/h3&gt;

&lt;p&gt;"For this week's migration, route new users through v2" will go stale. Keep it with the task and give it an expiry condition.&lt;/p&gt;

&lt;h3&gt;
  
  
  Unresolved ideas
&lt;/h3&gt;

&lt;p&gt;A proposed architecture is not an instruction. Label it as proposed and ask the owner before an agent treats it as binding.&lt;/p&gt;

&lt;h3&gt;
  
  
  Long explanations of every past discussion
&lt;/h3&gt;

&lt;p&gt;Claude needs the verdict and the reason relevant to its task, not every message that preceded them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Customer or product exceptions with no owner
&lt;/h3&gt;

&lt;p&gt;A sentence such as "enterprise accounts keep legacy access" is dangerous without scope, reason, owner, and status. When the exception ends, who removes the line?&lt;/p&gt;

&lt;h3&gt;
  
  
  Secrets
&lt;/h3&gt;

&lt;p&gt;Never place credentials, tokens, or private customer data in a repository instruction file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where architecture and product decisions belong
&lt;/h2&gt;

&lt;p&gt;Some architecture decisions are stable enough to appear as a short invariant in CLAUDE.md. The full record still needs more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what the team chose;&lt;/li&gt;
&lt;li&gt;why it chose it;&lt;/li&gt;
&lt;li&gt;what it rejected;&lt;/li&gt;
&lt;li&gt;who owns the call;&lt;/li&gt;
&lt;li&gt;what code or behavior it affects;&lt;/li&gt;
&lt;li&gt;whether it is active or superseded.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Product decisions matter too. A pricing promise or onboarding rule may constrain several services even though it is not an architecture decision. Product, engineering, support, and coding agents should be able to trace the same current answer.&lt;/p&gt;

&lt;p&gt;This is why &lt;a href="https://dev.to/blog/best-decision-log-tools-product-engineering"&gt;decision-log tools for product and engineering teams&lt;/a&gt; and ADRs complement repository instructions rather than compete with them.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical CLAUDE.md structure
&lt;/h2&gt;

&lt;p&gt;A focused file might contain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Repository guide&lt;/span&gt;

&lt;span class="gu"&gt;## Commands&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Install: &lt;span class="sb"&gt;`pnpm install`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Test affected packages: &lt;span class="sb"&gt;`pnpm test --filter ...`&lt;/span&gt;

&lt;span class="gu"&gt;## Boundaries&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Billing owns payment state transitions.
&lt;span class="p"&gt;-&lt;/span&gt; Identity may read account status but must not write billing state.

&lt;span class="gu"&gt;## Hard invariants&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Never log raw credentials or payment details.
&lt;span class="p"&gt;-&lt;/span&gt; Any change to guest-checkout ordering must check active checkout decisions.

&lt;span class="gu"&gt;## Context sources&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Use the issue tracker for current task scope.
&lt;span class="p"&gt;-&lt;/span&gt; Query the shared decision source before changing checkout or pricing behavior.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells Claude how to work and where to find changing truth. It does not pretend the file itself can contain every current decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  A maintenance test
&lt;/h2&gt;

&lt;p&gt;Review each instruction with four questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Does this apply to many future tasks?&lt;/li&gt;
&lt;li&gt;Would another teammate agree it is a team instruction?&lt;/li&gt;
&lt;li&gt;Is it still current?&lt;/li&gt;
&lt;li&gt;Is CLAUDE.md the smallest correct home for it?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the answer to the first two is no, move it to personal memory or the task handoff. If the answer to the third can change with a product or architecture call, put the full decision in a record with status and an owner.&lt;/p&gt;

&lt;p&gt;The same model applies beyond Claude Code. &lt;a href="https://dev.to/blog/best-tools-ai-coding-agent-context"&gt;Cursor rules, MCP servers, repository files, and shared decision records each solve a different context job&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Lockstep fits
&lt;/h2&gt;

&lt;p&gt;Lockstep is the shared decision layer. It captures possible decisions from Slack, docs, tickets, and code discussions, asks the owner to confirm them, and keeps the approved version tied to what it affects. Claude Code and other MCP-compatible agents can retrieve the relevant active decisions before they work.&lt;/p&gt;

&lt;p&gt;It does not replace CLAUDE.md or auto memory. CLAUDE.md tells Claude how this repository works. Auto memory helps one user continue recurring patterns. Lockstep carries the product and architecture calls the whole team must keep consistent.&lt;/p&gt;

&lt;p&gt;For cross-tool teams, see &lt;a href="https://dev.to/blog/share-memory-cursor-claude-code"&gt;how to share memory between Cursor and Claude Code&lt;/a&gt;. For live context sources, compare &lt;a href="https://dev.to/blog/best-mcp-servers-engineering-teams"&gt;MCP servers for engineering teams&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The best context setup is not the one that remembers the most.&lt;/p&gt;

&lt;p&gt;It is the one that gives each kind of information a clear owner, scope, and place to change.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>agentmemory</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Best MCP memory servers for teams using AI coding agents</title>
      <dc:creator>Naman Jain</dc:creator>
      <pubDate>Sat, 19 Sep 2026 12:53:49 +0000</pubDate>
      <link>https://dev.to/naman_here/best-mcp-memory-servers-for-teams-using-ai-coding-agents-4a43</link>
      <guid>https://dev.to/naman_here/best-mcp-memory-servers-for-teams-using-ai-coding-agents-4a43</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.getlockstep.dev/blog/best-mcp-memory-servers-teams" rel="noopener noreferrer"&gt;getlockstep.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Your team connects a memory server to Claude Code and Cursor. The agents can now save and search notes across sessions.&lt;/p&gt;

&lt;p&gt;A week later, one agent remembers that the payments service uses idempotency keys. Another retrieves an old note saying retries are unsafe. A third finds both, cannot tell which is current, and asks the team again.&lt;/p&gt;

&lt;p&gt;The memory server worked. It stored and retrieved text. The team still has a decision problem.&lt;/p&gt;

&lt;p&gt;That distinction matters when you compare MCP memory servers. Some are good at personal recall. Some build a graph of people, systems, and facts. Some make Markdown notes available to every coding agent. None automatically turns every remembered sentence into a current, approved team decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short answer
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;th&gt;Pick&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Small local experiments&lt;/td&gt;
&lt;td&gt;MCP reference Memory server&lt;/td&gt;
&lt;td&gt;Minimal knowledge graph, easy to inspect, no extra platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shared human and agent notes&lt;/td&gt;
&lt;td&gt;Basic Memory&lt;/td&gt;
&lt;td&gt;Plain Markdown, links, search, local or shared cloud workspace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hosted semantic recall across clients&lt;/td&gt;
&lt;td&gt;Mem0 MCP&lt;/td&gt;
&lt;td&gt;Managed HTTPS service with add, search, update, delete, and event tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Facts and relationships that change over time&lt;/td&gt;
&lt;td&gt;Graphiti MCP&lt;/td&gt;
&lt;td&gt;Temporal graph with entity, relationship, and hybrid search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Approved product and architecture decisions&lt;/td&gt;
&lt;td&gt;A decision system exposed through MCP&lt;/td&gt;
&lt;td&gt;Ownership, status, rationale, rejected options, and review are the missing layer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;There is no useful universal winner. The right choice depends on whether your team needs a notebook, a search layer, a changing knowledge graph, or a decision record.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to test before choosing an MCP memory server
&lt;/h2&gt;

&lt;p&gt;Do not start with the longest feature list. Test five things against a real handoff between agents:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Write path:&lt;/strong&gt; Can Cursor and Claude Code save context without custom glue?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval:&lt;/strong&gt; Does a fresh session get the right memory from a plain question?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope:&lt;/strong&gt; Can personal preferences stay separate from team facts and project context?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change:&lt;/strong&gt; When a fact changes, can the system show or remove the stale version?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control:&lt;/strong&gt; Can a human tell which memory is current, who accepted it, and why?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The fifth test is where general memory products often stop. That is fine if you are storing preferences or research notes. It is risky if the memory changes what a team builds.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. MCP reference Memory server: best for a small local graph
&lt;/h2&gt;

&lt;p&gt;The official reference server stores entities, directed relations, and observations in a local knowledge graph. Its MCP tools create and delete entities or relations, add observations, read the full graph, and search nodes. The graph is also exposed as an MCP resource, so compatible clients can receive updates.&lt;/p&gt;

&lt;p&gt;That makes it a good starting point when you want to understand the mechanics without adopting a larger system. A team can represent a service, an owner, a dependency, and a few known facts. The JSONL storage is easy to move or inspect.&lt;/p&gt;

&lt;p&gt;The tradeoff is in the word &lt;em&gt;reference&lt;/em&gt;. It is deliberately basic. It does not give a team a rich review workflow, semantic ranking, permissions model, or a human-friendly workspace. Its sample prompt is also framed around remembering user information, not governing shared engineering knowledge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick it when:&lt;/strong&gt; one person or a small team wants a transparent local proof of concept.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skip it when:&lt;/strong&gt; several teams need shared access, review, lifecycle, or strong search over a large corpus.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://github.com/modelcontextprotocol/servers/blob/main/src/memory/README.md" rel="noopener noreferrer"&gt;MCP Knowledge Graph Memory Server&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Basic Memory: best for notes humans and agents both edit
&lt;/h2&gt;

&lt;p&gt;Basic Memory keeps knowledge in plain Markdown and builds a traversable graph from notes and links. Its MCP tools cover writing, search, recent activity, directory browsing, and context building. It can run locally, and its cloud workspace is designed to let teammates and their AI assistants share the same knowledge base.&lt;/p&gt;

&lt;p&gt;That shape works well for runbooks, research, system maps, handoff notes, and durable explanations. A person can edit the same source in a normal file or note app instead of treating memory as an invisible database. Export risk is low because the source remains Markdown.&lt;/p&gt;

&lt;p&gt;The main judgment is discipline. A shared notebook can hold two conflicting notes as easily as one correct note. Search and links help an agent find information, but they do not decide which sentence is binding. Teams still need conventions for owners, current status, review dates, and superseded notes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick it when:&lt;/strong&gt; humans need to read and edit the same knowledge that agents retrieve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skip it when:&lt;/strong&gt; you want memory to be fully managed or need a temporal graph that reasons explicitly about changing facts.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://github.com/basicmachines-co/basic-memory/" rel="noopener noreferrer"&gt;Basic Memory repository and documentation&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Mem0 MCP: best for managed semantic recall across coding clients
&lt;/h2&gt;

&lt;p&gt;Mem0's hosted MCP server connects over HTTPS and supports Claude Code, Cursor, Codex, Windsurf, VS Code, and other MCP clients. Its tools add and search memories, retrieve or update one memory, delete memories and entities, and inspect memory operation events.&lt;/p&gt;

&lt;p&gt;That makes Mem0 attractive when a team wants semantic recall without operating a graph database. Client setup is documented, and a real round-trip test makes it easy to check whether one client can save a memory and another can retrieve it.&lt;/p&gt;

&lt;p&gt;The tradeoff is control and meaning. A hosted service is another place for company context to live, so security and retention need review. Semantic similarity also does not tell an agent that a result was approved, superseded, or limited to one release. Metadata can help, but the team has to define and enforce it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick it when:&lt;/strong&gt; managed hosting and cross-client semantic search matter more than file-based ownership.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skip it when:&lt;/strong&gt; policy requires local storage, or the primary need is decision status rather than recall.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://docs.mem0.ai/platform/mem0-mcp" rel="noopener noreferrer"&gt;Mem0 MCP documentation&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Graphiti MCP: best for facts that change over time
&lt;/h2&gt;

&lt;p&gt;Graphiti is built around a temporal knowledge graph. Its MCP server can add episodes, extract entities and relationships, and search facts or node summaries with semantic and hybrid search. It supports graph backends including FalkorDB and Neo4j, with HTTP and stdio routes for MCP clients.&lt;/p&gt;

&lt;p&gt;The temporal model is the differentiator. If service ownership, dependencies, customer state, or operating facts change, a time-aware graph is better suited than a bag of similar text chunks. It can preserve how a fact evolved instead of overwriting every previous statement.&lt;/p&gt;

&lt;p&gt;That power adds operational weight. Teams must run the graph stack, configure model providers, decide entity types, and monitor extraction quality. Graphiti's MCP server is also described as experimental in its own repository. It is a stronger fit for teams already sure that temporal graph retrieval solves a real problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick it when:&lt;/strong&gt; relationships change often and queries need to understand what was true when.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skip it when:&lt;/strong&gt; your main need is a lightweight shared notebook or a first memory experiment.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://github.com/getzep/graphiti/blob/main/mcp_server/README.md" rel="noopener noreferrer"&gt;Graphiti MCP server documentation&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A memory server is not automatically a team memory
&lt;/h2&gt;

&lt;p&gt;A tool can retrieve the sentence "we use PostgreSQL advisory locks" and still leave four questions unanswered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Was that an idea or an accepted decision?&lt;/li&gt;
&lt;li&gt;Which system and release does it apply to?&lt;/li&gt;
&lt;li&gt;What constraint made the team choose it?&lt;/li&gt;
&lt;li&gt;Has a later decision replaced it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why teams can add more agent memory and still keep re-explaining the same architecture. General memory improves recall. It does not, by itself, establish authority.&lt;/p&gt;

&lt;p&gt;If your symptom is broader context loss, see the &lt;a href="https://www.getlockstep.dev/blog/best-tools-ai-coding-agent-context" rel="noopener noreferrer"&gt;best tools for AI coding agent context&lt;/a&gt;. If you are evaluating the protocol layer, compare the &lt;a href="https://www.getlockstep.dev/blog/best-mcp-servers-engineering-teams" rel="noopener noreferrer"&gt;best MCP servers for engineering teams&lt;/a&gt;. If agents are reopening settled choices, the more relevant comparison is &lt;a href="https://www.getlockstep.dev/blog/best-decision-log-tools-product-engineering" rel="noopener noreferrer"&gt;decision log tools for product and engineering&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose without creating another abandoned system
&lt;/h2&gt;

&lt;p&gt;Run one two-agent test before rollout:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ask Cursor to save the reason for a real architecture choice.&lt;/li&gt;
&lt;li&gt;Start a fresh Claude Code session with no copied chat history.&lt;/li&gt;
&lt;li&gt;Ask what the current choice is, why it exists, and what was rejected.&lt;/li&gt;
&lt;li&gt;Change the decision through the team's normal approval path.&lt;/li&gt;
&lt;li&gt;Ask both agents again.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A usable system should return the current answer, preserve the reasoning, identify the owner or source, and avoid presenting the old answer as equally valid. If it only finds both notes, it solved storage and search, not the team handoff.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Lockstep fits
&lt;/h2&gt;

&lt;p&gt;Lockstep is for the narrower problem generic memory does not settle: decisions that the whole team and its agents must follow.&lt;/p&gt;

&lt;p&gt;It keeps the accepted choice with its rationale, rejected options, owner, and status, then makes that decision available to agents through MCP. Cursor, Claude Code, and the people reviewing their work can use the same current record instead of treating every retrieved note as equally authoritative.&lt;/p&gt;

&lt;p&gt;That does not replace all memory. A team may still use Basic Memory for shared notes, Mem0 for recall, or Graphiti for changing relationships. Lockstep is the decision layer alongside them - the place that answers not only "what do we remember?" but "what did we agree to build?"&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>agentmemory</category>
      <category>aicodingagents</category>
      <category>teamcontext</category>
    </item>
    <item>
      <title>How to share memory between Cursor and Claude Code</title>
      <dc:creator>Naman Jain</dc:creator>
      <pubDate>Sat, 19 Sep 2026 12:53:05 +0000</pubDate>
      <link>https://dev.to/naman_here/how-to-share-memory-between-cursor-and-claude-code-1c4l</link>
      <guid>https://dev.to/naman_here/how-to-share-memory-between-cursor-and-claude-code-1c4l</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.getlockstep.dev/blog/share-memory-cursor-claude-code" rel="noopener noreferrer"&gt;getlockstep.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You prototype a change in Cursor, then move to Claude Code to finish it.&lt;/p&gt;

&lt;p&gt;The branch moves with you. The uncommitted diff moves with you. The reasoning does not.&lt;/p&gt;

&lt;p&gt;Claude can inspect what changed, but it cannot see why Cursor rejected the first approach, which test still fails, or which product decision limits the fix. You spend ten minutes rebuilding the brief. If you miss one detail, the second agent may "fix" something the first agent already learned not to touch.&lt;/p&gt;

&lt;p&gt;Cursor and Claude Code do not need identical memories. They need a shared handoff and the same active team constraints.&lt;/p&gt;

&lt;h2&gt;
  
  
  Native memory is not the bridge
&lt;/h2&gt;

&lt;p&gt;Cursor has project rules and its own ways to retain useful context. Claude Code reads CLAUDE.md files and can keep auto memory for recurring personal patterns. Those systems improve continuity inside each tool.&lt;/p&gt;

&lt;p&gt;They are not one shared database. A fact one tool learned about your workflow does not automatically become available to the other. A teammate's personal memory may be different again.&lt;/p&gt;

&lt;p&gt;Trying to mirror every native memory creates a sync problem and a privacy problem. Personal preferences, temporary observations, and abandoned ideas get mixed with rules the whole team must follow.&lt;/p&gt;

&lt;p&gt;The bridge should be smaller and vendor-neutral.&lt;/p&gt;

&lt;h2&gt;
  
  
  Share four layers, not one giant context file
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Stable repository instructions
&lt;/h3&gt;

&lt;p&gt;Put commands, directory boundaries, coding conventions, and hard invariants in a version-controlled file that both tools can read.&lt;/p&gt;

&lt;p&gt;AGENTS.md is the simplest neutral baseline. Cursor can also use scoped project rules in &lt;code&gt;.cursor/rules&lt;/code&gt;, while Claude Code can use CLAUDE.md. Avoid maintaining the same paragraph manually in three places. Keep shared constants in one source and reserve tool-specific files for tool-specific behavior.&lt;/p&gt;

&lt;p&gt;Cursor's documentation explains that project rules are version-controlled and can apply always, by file pattern, by relevance, or manually. Claude Code's documentation similarly treats CLAUDE.md as persistent project guidance. Both are strongest when the instructions are short and stable.&lt;/p&gt;

&lt;p&gt;For the broader tool landscape, see &lt;a href="https://dev.to/blog/best-tools-ai-coding-agent-context"&gt;the best ways to give AI coding agents your team's context&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Current task handoff
&lt;/h3&gt;

&lt;p&gt;When work moves from Cursor to Claude Code, create a compact handoff:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;requested outcome;&lt;/li&gt;
&lt;li&gt;branch and files changed;&lt;/li&gt;
&lt;li&gt;approaches tried and rejected;&lt;/li&gt;
&lt;li&gt;tests run and exact failures;&lt;/li&gt;
&lt;li&gt;unresolved questions;&lt;/li&gt;
&lt;li&gt;next safe step.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is working state, not permanent memory. It should help the second agent continue the task without replaying the first conversation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Live reference data
&lt;/h3&gt;

&lt;p&gt;Issues, production errors, current documentation, and customer records change. Do not copy them into a memory file and assume they stay true. Let the agent query the current source through a focused integration or MCP server.&lt;/p&gt;

&lt;p&gt;Our guide to &lt;a href="https://dev.to/blog/best-mcp-servers-engineering-teams"&gt;MCP servers for engineering teams&lt;/a&gt; compares the common live-context sources and their access models.&lt;/p&gt;

&lt;h3&gt;
  
  
  Approved team decisions
&lt;/h3&gt;

&lt;p&gt;The most important shared layer is not a transcript. It is the set of product and architecture calls that both agents must honor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;verdict;&lt;/li&gt;
&lt;li&gt;reason;&lt;/li&gt;
&lt;li&gt;owner;&lt;/li&gt;
&lt;li&gt;status;&lt;/li&gt;
&lt;li&gt;affected code or behavior;&lt;/li&gt;
&lt;li&gt;rejected option;&lt;/li&gt;
&lt;li&gt;replacement when the answer changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A task handoff may mention one of these decisions, but the decision should live beyond the task. That is what stops the next tool, teammate, or agent from reopening it.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Cursor-to-Claude Code handoff example
&lt;/h2&gt;

&lt;p&gt;A useful handoff might say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Goal: move guest checkout analytics to the server. Cursor changed &lt;code&gt;checkout/events.ts&lt;/code&gt; and added two tests. The client-only approach was rejected because retries produced duplicate events. One test still fails when payment confirmation arrives asynchronously. Active decision: guest checkout identity is created before payment until migration M-42 ends; Priya owns exceptions. Next step: inspect the server idempotency key before changing the event order.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This gives Claude Code enough to continue. It does not paste 40 pages of chat or ask the model to infer which paragraph matters.&lt;/p&gt;

&lt;p&gt;The active decision should also exist in the shared team record, tied to the checkout paths. If the migration ends or Priya changes the call, the record can be superseded without rewriting old handoffs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do not sync these things blindly
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Full chat histories
&lt;/h3&gt;

&lt;p&gt;A transcript contains exploration, wrong turns, pasted secrets, and statements that were later corrected. More text does not mean clearer authority.&lt;/p&gt;

&lt;h3&gt;
  
  
  Auto memory from one person's account
&lt;/h3&gt;

&lt;p&gt;Personal memory can include preferences that should not govern another teammate's work. Promote only the stable, team-approved parts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generated summaries with no review
&lt;/h3&gt;

&lt;p&gt;A summary can drop the exact exception that made a decision safe. Treat it as a draft handoff. Verify the load-bearing constraints.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stale copies of live systems
&lt;/h3&gt;

&lt;p&gt;A copied ticket or API document becomes wrong quietly. Link or query the current source instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  A setup both tools can use today
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create one neutral repo guide.&lt;/strong&gt; Keep commands, boundaries, and invariants in AGENTS.md or a shared source referenced by both tool-specific files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a handoff template.&lt;/strong&gt; Make every tool switch carry outcome, current state, evidence, open questions, and next step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect focused live sources.&lt;/strong&gt; Give agents access only to the issue tracker, docs, or errors the task needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep decisions outside personal chat history.&lt;/strong&gt; Record approved calls with owners, status, and scope.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brief before editing.&lt;/strong&gt; Have Cursor or Claude retrieve the decisions connected to the files it will change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stop on disagreement.&lt;/strong&gt; A new prompt should not silently override an existing team decision; route the conflict to its owner.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is also the answer when &lt;a href="https://dev.to/blog/cursor-keeps-losing-context-mid-project"&gt;Cursor loses context mid-project&lt;/a&gt;: separate information by job instead of building one ever-growing memory file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Lockstep fits
&lt;/h2&gt;

&lt;p&gt;Lockstep keeps the shared decision layer. It captures possible decisions from Slack, docs, tickets, and code discussions, asks the owner to confirm them, and ties the approved version to what it affects. Cursor, Claude Code, and other MCP-compatible agents can query the same current decisions before they act.&lt;/p&gt;

&lt;p&gt;It does not replace Cursor rules, CLAUDE.md, AGENTS.md, or a task handoff. Those carry repository instructions and current execution state. Lockstep carries the team calls that must remain true across tools and sessions.&lt;/p&gt;

&lt;p&gt;If your team already has a decision log, &lt;a href="https://dev.to/blog/best-decision-log-tools-product-engineering"&gt;compare the available options and their tradeoffs&lt;/a&gt;. The useful question is not where the note sits. It is whether both agents receive the active answer before they change the code.&lt;/p&gt;

&lt;p&gt;The goal is not perfect memory sync.&lt;/p&gt;

&lt;p&gt;It is a handoff that preserves the work, and a shared decision record that preserves the why.&lt;/p&gt;

</description>
      <category>cursor</category>
      <category>claudecode</category>
      <category>sharedmemory</category>
      <category>agentcontext</category>
    </item>
    <item>
      <title>ADRs for AI coding agents: how to make every agent read architecture decisions</title>
      <dc:creator>Naman Jain</dc:creator>
      <pubDate>Sat, 19 Sep 2026 12:52:48 +0000</pubDate>
      <link>https://dev.to/naman_here/adrs-for-ai-coding-agents-how-to-make-every-agent-read-architecture-decisions-3he4</link>
      <guid>https://dev.to/naman_here/adrs-for-ai-coding-agents-how-to-make-every-agent-read-architecture-decisions-3he4</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.getlockstep.dev/blog/adrs-for-ai-coding-agents" rel="noopener noreferrer"&gt;getlockstep.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;An AI coding agent opens the billing service and finds a synchronous call followed by a queue publish.&lt;/p&gt;

&lt;p&gt;The direct call looks redundant. The agent proposes deleting it and relying on the queue. The refactor is smaller, the tests pass, and the code looks cleaner.&lt;/p&gt;

&lt;p&gt;Six months earlier, the team made the direct call intentional. One enterprise customer needs an immediate confirmation, while the queue supports downstream work. That choice is written in &lt;code&gt;docs/adr/0017-immediate-billing-confirmation.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The ADR exists. The agent never reads it.&lt;/p&gt;

&lt;p&gt;This is the gap teams hit after they start writing architecture decision records. A record in the repository is available to an agent, but availability is not the same as context. The agent needs a predictable place to look, a rule that tells it when to look, and a current status it can trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short answer
&lt;/h2&gt;

&lt;p&gt;Use this structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;repo/
  AGENTS.md
  CLAUDE.md
  .cursor/
    rules/
      architecture-decisions.mdc
  docs/
    adr/
      README.md
      0017-immediate-billing-confirmation.md
      0018-retry-policy.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each ADR should hold one significant decision with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;title&lt;/li&gt;
&lt;li&gt;status: proposed, accepted, deprecated, or superseded&lt;/li&gt;
&lt;li&gt;context and constraints&lt;/li&gt;
&lt;li&gt;the decision in active language&lt;/li&gt;
&lt;li&gt;consequences and tradeoffs&lt;/li&gt;
&lt;li&gt;owner and decision date&lt;/li&gt;
&lt;li&gt;links to a replacement when superseded&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then keep the agent rule short:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Before changing service boundaries, persistence, messaging, authentication,
or public API behavior, search &lt;span class="sb"&gt;`docs/adr/`&lt;/span&gt; for relevant accepted decisions.
Read the full matching ADR and any ADR that supersedes it.
If the proposed change conflicts with an accepted ADR, stop and name the
conflict instead of silently rewriting the architecture.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is enough to create the retrieval habit without loading every ADR into every conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why ADRs fit AI coding agents
&lt;/h2&gt;

&lt;p&gt;Michael Nygard's original ADR format was designed as a short conversation with a future team member. It separates the forces around a choice from the choice itself and its consequences. A decision stays in the log when it is reversed, but its status changes to superseded and points to the replacement.&lt;/p&gt;

&lt;p&gt;That structure is unusually useful for agents. Code shows what the system does now. An ADR can explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which constraint shaped the design&lt;/li&gt;
&lt;li&gt;which alternatives were considered&lt;/li&gt;
&lt;li&gt;which option the team accepted&lt;/li&gt;
&lt;li&gt;what downside the team knowingly took on&lt;/li&gt;
&lt;li&gt;whether the choice is still current&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without those fields, an agent may treat an intentional compromise as an accident. With them, the agent can compare a proposed edit against the reason the code exists.&lt;/p&gt;

&lt;p&gt;Sources: &lt;a href="https://www.cognitect.com/blog/2011/11/15/documenting-architecture-decisions" rel="noopener noreferrer"&gt;Documenting Architecture Decisions&lt;/a&gt; and &lt;a href="https://adr.github.io/" rel="noopener noreferrer"&gt;ADR guidance&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: give every ADR a stable shape
&lt;/h2&gt;

&lt;p&gt;Do not make the agent infer status from prose. Put it near the top.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# ADR 0017: Immediate confirmation before billing events&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Status: Accepted
&lt;span class="p"&gt;-&lt;/span&gt; Owners: Payments team
&lt;span class="p"&gt;-&lt;/span&gt; Decided: 2026-02-12
&lt;span class="p"&gt;-&lt;/span&gt; Scope: services/billing, packages/payments
&lt;span class="p"&gt;-&lt;/span&gt; Replaces: ADR 0009

&lt;span class="gu"&gt;## Context&lt;/span&gt;

One enterprise flow must receive confirmation inside the request window.
The event queue may be delayed and cannot satisfy that contract.

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

We will keep the synchronous confirmation call. We will publish the billing
 event after confirmation for downstream work.

&lt;span class="gu"&gt;## Consequences&lt;/span&gt;

Requests depend on the confirmation service. The queue cannot become the only
path without changing the enterprise contract.

&lt;span class="gu"&gt;## Rejected options&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Queue-only confirmation: rejected because delivery time is not bounded.
&lt;span class="p"&gt;-&lt;/span&gt; Polling: rejected because it increases client complexity and load.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The exact template matters less than consistency. One record should describe one significant choice. Keep it short enough that a person and an agent can read the full record before changing code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: keep old ADRs, but make replacement explicit
&lt;/h2&gt;

&lt;p&gt;Deleting or rewriting an old ADR destroys useful history. Leaving it unchanged creates a different failure: search may return the old and new decisions as if both are current.&lt;/p&gt;

&lt;p&gt;Use a visible status and reciprocal links:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; Status: Superseded by &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;ADR 0024&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;./0024-event-driven-confirmation.md&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The new ADR should say what it replaces. This gives agents a deterministic path from an old search result to the current decision.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;adr-tools&lt;/code&gt; supports this workflow directly: creating a superseding ADR marks the old one as superseded and links the replacement. You do not need the tool, but you do need the behavior.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://github.com/npryce/adr-tools" rel="noopener noreferrer"&gt;adr-tools&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: index the decision log for fast scanning
&lt;/h2&gt;

&lt;p&gt;A large repository may have hundreds of records. Give humans and agents a small index in &lt;code&gt;docs/adr/README.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;| ADR | Status | Area | Decision |
|---|---|---|---|
| 0017 | Accepted | Billing | Keep synchronous confirmation |
| 0018 | Accepted | Billing | Retry only idempotent operations |
| 0024 | Proposed | Billing | Move confirmation to bounded stream |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The index is a search aid, not the source of truth. The agent still reads the full matching ADR and checks replacement links. Regenerate the index in CI if manual upkeep becomes unreliable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: point Claude Code to ADRs without bloating CLAUDE.md
&lt;/h2&gt;

&lt;p&gt;Claude Code reads project &lt;code&gt;CLAUDE.md&lt;/code&gt; files at the start of a session. Its current guidance recommends keeping instructions concrete and concise, targeting fewer than 200 lines because larger files consume more context and reduce adherence.&lt;/p&gt;

&lt;p&gt;Do not paste your decision history into &lt;code&gt;CLAUDE.md&lt;/code&gt;. Add a durable retrieval rule:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Architecture decisions&lt;/span&gt;

Accepted architecture decisions live in &lt;span class="sb"&gt;`docs/adr/`&lt;/span&gt;.
Before changing boundaries, storage, messaging, security, or public APIs:
&lt;span class="p"&gt;1.&lt;/span&gt; search &lt;span class="sb"&gt;`docs/adr/README.md`&lt;/span&gt; and &lt;span class="sb"&gt;`docs/adr/`&lt;/span&gt; for the affected area;
&lt;span class="p"&gt;2.&lt;/span&gt; read matching ADRs and their replacement links;
&lt;span class="p"&gt;3.&lt;/span&gt; name any conflict with an accepted ADR in the plan.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a monorepo, use path-scoped files in &lt;code&gt;.claude/rules/&lt;/code&gt; so billing decisions load for billing work and frontend decisions load for frontend work. Claude Code also supports importing an &lt;code&gt;AGENTS.md&lt;/code&gt; file from &lt;code&gt;CLAUDE.md&lt;/code&gt;, which avoids duplicating the common instruction across tools.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://code.claude.com/docs/en/claude-md" rel="noopener noreferrer"&gt;Claude Code project memory and CLAUDE.md&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: make Cursor apply the same retrieval rule
&lt;/h2&gt;

&lt;p&gt;Cursor project rules live in &lt;code&gt;.cursor/rules&lt;/code&gt; as version-controlled &lt;code&gt;.mdc&lt;/code&gt; files. They can be scoped by file patterns or included based on relevance. Cursor recommends focused, actionable rules and explicitly suggests referencing files instead of copying their contents so rules stay short and do not go stale.&lt;/p&gt;

&lt;p&gt;A path-scoped rule can look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Read accepted billing ADRs before changing billing architecture&lt;/span&gt;
&lt;span class="na"&gt;globs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;services/billing/**,packages/payments/**&lt;/span&gt;
&lt;span class="na"&gt;alwaysApply&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

Before planning architecture changes, read &lt;span class="sb"&gt;`docs/adr/README.md`&lt;/span&gt; and matching
records in &lt;span class="sb"&gt;`docs/adr/`&lt;/span&gt;. Follow accepted decisions. If a change conflicts with
one, name the ADR and ask for a new decision rather than ignoring it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For simple cross-agent instructions, Cursor also reads a root &lt;code&gt;AGENTS.md&lt;/code&gt;. Use it as the common pointer, then keep client-specific mechanics in the client-specific rule file.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://cursor.com/docs/rules" rel="noopener noreferrer"&gt;Cursor Rules documentation&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: separate accepted decisions from proposed ideas
&lt;/h2&gt;

&lt;p&gt;An agent should be allowed to suggest a better design. It should not silently treat its suggestion as the new architecture.&lt;/p&gt;

&lt;p&gt;Use a clear flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The agent finds the current accepted ADR.&lt;/li&gt;
&lt;li&gt;It names the conflict and proposes a replacement.&lt;/li&gt;
&lt;li&gt;A human owner reviews the new decision.&lt;/li&gt;
&lt;li&gt;The new ADR moves from proposed to accepted.&lt;/li&gt;
&lt;li&gt;The previous ADR becomes superseded.&lt;/li&gt;
&lt;li&gt;Every agent retrieves the new current record.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This preserves agent initiative without letting the latest generated plan outrank the team's decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: test with a fresh agent, not the session that wrote the ADR
&lt;/h2&gt;

&lt;p&gt;The authoring session already knows the answer. It is a weak test.&lt;/p&gt;

&lt;p&gt;Open a new Cursor or Claude Code session and ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why is the synchronous billing confirmation still here?&lt;/li&gt;
&lt;li&gt;Which ADR governs retry behavior in &lt;code&gt;services/billing&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Is queue-only confirmation accepted, proposed, or rejected?&lt;/li&gt;
&lt;li&gt;What would need a new ADR before this refactor can proceed?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A passing setup returns the current decision, rationale, and status. It follows supersession links. It does not quote an old ADR as current or pretend the instruction file is a hard security control.&lt;/p&gt;

&lt;p&gt;Claude's own documentation makes the last point clear: &lt;code&gt;CLAUDE.md&lt;/code&gt; shapes behavior but is not guaranteed enforcement. Cursor gives a similar warning that AI guidance should not be the only security control. Use tests, permissions, and policy checks for hard boundaries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Loading the full ADR directory into every prompt
&lt;/h3&gt;

&lt;p&gt;This burns context and makes unrelated decisions compete for attention. Load a short index and retrieve the matching records.&lt;/p&gt;

&lt;h3&gt;
  
  
  Recording only the final choice
&lt;/h3&gt;

&lt;p&gt;"Use Kafka" does not tell a future agent which constraint mattered. Include the forces, rejected options, and consequences.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mixing proposals with accepted decisions
&lt;/h3&gt;

&lt;p&gt;If both are plain Markdown with no status, search cannot establish authority. Status is part of the data, not decoration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Updating old ADR text in place
&lt;/h3&gt;

&lt;p&gt;This makes historical links lie and hides why the system changed. Supersede the old record and connect the two.&lt;/p&gt;

&lt;h3&gt;
  
  
  Assuming a repository file reaches every tool
&lt;/h3&gt;

&lt;p&gt;Claude Code, Cursor, Codex, and other agents load instructions differently. Keep one common record, then add a tested pointer in each client's supported instruction path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect ADRs to the rest of your agent context
&lt;/h2&gt;

&lt;p&gt;ADRs solve one part of the context problem. Stable commands and conventions still belong in project instructions. Temporary work state belongs in a task handoff. Personal preferences belong in personal memory.&lt;/p&gt;

&lt;p&gt;For the broader stack, compare the &lt;a href="https://www.getlockstep.dev/blog/best-tools-ai-coding-agent-context" rel="noopener noreferrer"&gt;best tools for AI coding agent context&lt;/a&gt;, the &lt;a href="https://www.getlockstep.dev/blog/best-mcp-servers-engineering-teams" rel="noopener noreferrer"&gt;best MCP servers for engineering teams&lt;/a&gt;, and &lt;a href="https://www.getlockstep.dev/blog/best-decision-log-tools-product-engineering" rel="noopener noreferrer"&gt;decision log tools for product and engineering&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If teams use both Cursor and Claude Code, the companion guide on &lt;a href="https://www.getlockstep.dev/blog/share-memory-cursor-claude-code" rel="noopener noreferrer"&gt;sharing memory between Cursor and Claude Code&lt;/a&gt; shows where the common pointer and handoff files fit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Lockstep fits
&lt;/h2&gt;

&lt;p&gt;Repository ADRs work well when one codebase and one review flow define the decision boundary. The harder case starts when product, engineering, and several agents must use the same decision across repositories and tools.&lt;/p&gt;

&lt;p&gt;Lockstep keeps accepted decisions, rationale, rejected options, owner, and status in one shared record, then makes the current decision available through MCP. The ADR can stay close to code while Lockstep carries the team-level choice to Cursor, Claude Code, and the people reviewing their work.&lt;/p&gt;

&lt;p&gt;The goal is simple: a new agent should not merely find architecture documents. It should know which decision is current, why the team made it, and when to stop before changing it.&lt;/p&gt;

</description>
      <category>adr</category>
      <category>architecturedecisions</category>
      <category>claudecode</category>
      <category>cursor</category>
    </item>
    <item>
      <title>Cursor keeps losing context mid-project. How to stop re-explaining your codebase</title>
      <dc:creator>Naman Jain</dc:creator>
      <pubDate>Sat, 19 Sep 2026 12:52:07 +0000</pubDate>
      <link>https://dev.to/naman_here/cursor-keeps-losing-context-mid-project-how-to-stop-re-explaining-your-codebase-52m9</link>
      <guid>https://dev.to/naman_here/cursor-keeps-losing-context-mid-project-how-to-stop-re-explaining-your-codebase-52m9</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.getlockstep.dev/blog/cursor-keeps-losing-context-mid-project" rel="noopener noreferrer"&gt;getlockstep.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You spend ten minutes bringing Cursor back up to speed.&lt;/p&gt;

&lt;p&gt;The current branch is easy. The missing part is everything around it: why the team kept a duplicated service, which API behavior a customer depends on, why an apparently simpler helper failed last month, and what product agreed to defer.&lt;/p&gt;

&lt;p&gt;The agent reads the repository, proposes a clean plan, and unknowingly reopens three decisions the team already made.&lt;/p&gt;

&lt;p&gt;This is what Cursor context loss costs. Not only repeated prompting, but repeated decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, separate the kinds of context
&lt;/h2&gt;

&lt;p&gt;Teams often try to fix the problem by putting more information into one file. That works briefly, then the file becomes another source the agent must interpret.&lt;/p&gt;

&lt;p&gt;A better setup separates four jobs.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Repository context
&lt;/h3&gt;

&lt;p&gt;This is the stable map of the codebase:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how to run and test it;&lt;/li&gt;
&lt;li&gt;important directories and boundaries;&lt;/li&gt;
&lt;li&gt;coding conventions;&lt;/li&gt;
&lt;li&gt;security and data-handling rules;&lt;/li&gt;
&lt;li&gt;hard technical invariants.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep this version-controlled and concise. Cursor rules, AGENTS.md, or another repository instruction file can carry it.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Task context
&lt;/h3&gt;

&lt;p&gt;This is what the current run needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the requested outcome;&lt;/li&gt;
&lt;li&gt;the files already changed;&lt;/li&gt;
&lt;li&gt;tests run and results;&lt;/li&gt;
&lt;li&gt;open questions;&lt;/li&gt;
&lt;li&gt;the next safe step.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A short handoff or session summary works well here. Delete or archive it when the task ends.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Reference context
&lt;/h3&gt;

&lt;p&gt;This includes live docs, tickets, errors, APIs, and customer facts the agent may need to query. MCP servers or focused retrieval can bring this in only when relevant.&lt;/p&gt;

&lt;p&gt;See &lt;a href="https://dev.to/blog/best-mcp-servers-engineering-teams"&gt;the best MCP servers for engineering teams&lt;/a&gt; for the common options and their access tradeoffs.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Decision context
&lt;/h3&gt;

&lt;p&gt;This is the part teams most often miss:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what the team chose;&lt;/li&gt;
&lt;li&gt;why it chose it;&lt;/li&gt;
&lt;li&gt;which alternative failed;&lt;/li&gt;
&lt;li&gt;who owns the call;&lt;/li&gt;
&lt;li&gt;what code or product behavior it affects;&lt;/li&gt;
&lt;li&gt;whether it is still active.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Decision context must outlive a session, but it should not be mixed into a giant memory dump.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a new chat feels like starting over
&lt;/h2&gt;

&lt;p&gt;Cursor can inspect the repository again. It cannot infer every reason behind the repository's current shape.&lt;/p&gt;

&lt;p&gt;Suppose the billing code retries one payment state but not another. The asymmetry may look accidental. In reality, finance rejected the second retry after it created duplicate reconciliation work, and product accepted the rougher customer experience until a provider migration.&lt;/p&gt;

&lt;p&gt;The code shows the result. It does not show the tradeoff, owner, or expiry condition.&lt;/p&gt;

&lt;p&gt;When the original chat disappears from active context, the agent reconstructs the reason from code. That reconstruction can be coherent and wrong.&lt;/p&gt;

&lt;p&gt;The same thing happens when work moves between people or between Cursor and Claude Code. Personal chat history does not travel with the repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical context-loss workflow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Keep rules short and stable
&lt;/h3&gt;

&lt;p&gt;A rule should remain true across many tasks. Good examples include required test commands, a directory ownership boundary, or "never log raw access tokens."&lt;/p&gt;

&lt;p&gt;Avoid putting temporary plans or unresolved product calls in a global rule file. If the answer changes next week, the stale rule will look more authoritative than the new conversation.&lt;/p&gt;

&lt;p&gt;Our comparison of &lt;a href="https://dev.to/blog/best-tools-ai-coding-agent-context"&gt;tools for giving coding agents team context&lt;/a&gt; shows where rules, native memory, MCP, and shared decision records each fit.&lt;/p&gt;

&lt;h3&gt;
  
  
  End each task with a handoff
&lt;/h3&gt;

&lt;p&gt;Before a long session ends, write a short handoff with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;objective;&lt;/li&gt;
&lt;li&gt;current state;&lt;/li&gt;
&lt;li&gt;completed changes;&lt;/li&gt;
&lt;li&gt;evidence and tests;&lt;/li&gt;
&lt;li&gt;unresolved questions;&lt;/li&gt;
&lt;li&gt;next step.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This saves the next session from replaying the entire chat. It also makes uncertainty visible instead of letting the agent fill gaps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Promote lasting decisions out of the handoff
&lt;/h3&gt;

&lt;p&gt;A handoff is temporary. If it contains a call that future work must honor, promote that call into a durable decision record.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Keep guest checkout account creation before payment until the payment-provider migration ends. Owner: Priya. Applies to checkout and identity services. Replaces the January rule. Reason: asynchronous confirmation and recovery behavior in India.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is small enough to retrieve and clear enough to act on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Load only relevant decisions
&lt;/h3&gt;

&lt;p&gt;Do not paste the whole company history into every prompt. Connect decisions to repositories, paths, APIs, capabilities, or projects. Then retrieve only the active records that match the task.&lt;/p&gt;

&lt;p&gt;This protects the context window and reduces stale collisions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stop on conflicts
&lt;/h3&gt;

&lt;p&gt;If a new request says "move account creation after payment" while an active decision says the opposite, the agent should not pick whichever text appeared most recently. It should show the conflict and ask the named owner.&lt;/p&gt;

&lt;p&gt;That behavior is the difference between remembering information and respecting a team decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Moving between Cursor and Claude Code
&lt;/h2&gt;

&lt;p&gt;Cross-tool continuity works best when the shared parts are vendor-neutral.&lt;/p&gt;

&lt;p&gt;Use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;repository files for stable instructions;&lt;/li&gt;
&lt;li&gt;a task handoff for work in progress;&lt;/li&gt;
&lt;li&gt;MCP or direct integrations for live reference data;&lt;/li&gt;
&lt;li&gt;shared decision records for approved product and architecture calls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not depend on a memory feature that only one person's Cursor account can read. The other tool will still start cold.&lt;/p&gt;

&lt;p&gt;The same rule applies to parallel agents. If each one has a different slice of history, they can produce changes that are individually sound but collectively inconsistent. &lt;a href="https://dev.to/blog/two-ai-agents-one-codebase-shared-memory"&gt;Shared memory for multiple agents is primarily a decision problem&lt;/a&gt;, not a transcript-sync problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Lockstep fits
&lt;/h2&gt;

&lt;p&gt;Lockstep captures possible decisions from Slack, docs, tickets, and code discussions, asks the owner to confirm the call, and keeps the approved version tied to what it affects. Cursor, Claude Code, and other MCP-compatible agents can read the same active decisions before they work.&lt;/p&gt;

&lt;p&gt;It does not replace Cursor rules or task summaries. Those carry stable repo instructions and temporary execution state. Lockstep carries the team calls that must remain consistent across sessions, tools, and people.&lt;/p&gt;

&lt;p&gt;For teams choosing the human-facing system behind those calls, &lt;a href="https://dev.to/blog/best-decision-log-tools-product-engineering"&gt;compare decision-log tools for product and engineering&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The goal is not to make Cursor remember everything.&lt;/p&gt;

&lt;p&gt;It is to make sure the next session does not unknowingly reverse something your team already decided.&lt;/p&gt;

</description>
      <category>cursor</category>
      <category>contextloss</category>
      <category>agentmemory</category>
      <category>codingagents</category>
    </item>
    <item>
      <title>Why Claude Code forgets architecture decisions - and how teams stop re-explaining them</title>
      <dc:creator>Naman Jain</dc:creator>
      <pubDate>Sat, 19 Sep 2026 12:52:06 +0000</pubDate>
      <link>https://dev.to/naman_here/why-claude-code-forgets-architecture-decisions-and-how-teams-stop-re-explaining-them-20i1</link>
      <guid>https://dev.to/naman_here/why-claude-code-forgets-architecture-decisions-and-how-teams-stop-re-explaining-them-20i1</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.getlockstep.dev/blog/why-claude-code-forgets-architecture-decisions" rel="noopener noreferrer"&gt;getlockstep.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Claude Code opens a mature service and finds two ways to create a customer account.&lt;/p&gt;

&lt;p&gt;One path creates the account before payment. The other waits until payment succeeds. The second path looks cleaner, so the agent proposes making both flows consistent.&lt;/p&gt;

&lt;p&gt;The code is not missing. The tests are not missing. What is missing is the decision from six weeks ago: guest checkout must create the account first because a payment provider returns asynchronously in one market, and the team already rejected the cleaner design after it broke recovery.&lt;/p&gt;

&lt;p&gt;Someone explains this. Claude fixes the plan. Three sessions later, the same suggestion returns.&lt;/p&gt;

&lt;p&gt;This is the failure people describe as "Claude Code forgot our architecture." More precisely, Claude can still read the architecture. It has lost the reasoning that tells it which parts are intentional.&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Code remembers code better than reasons
&lt;/h2&gt;

&lt;p&gt;A repository is a strong record of what the system is now. It contains interfaces, tests, comments, dependencies, and patterns that an agent can inspect.&lt;/p&gt;

&lt;p&gt;But architecture is more than the current shape of the files. It includes decisions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;why one boundary sits in the API instead of the client;&lt;/li&gt;
&lt;li&gt;which edge case made the obvious abstraction unsafe;&lt;/li&gt;
&lt;li&gt;why the team accepted duplication for now;&lt;/li&gt;
&lt;li&gt;which product promise constrains a technical change;&lt;/li&gt;
&lt;li&gt;who can approve an exception;&lt;/li&gt;
&lt;li&gt;whether an older rule is still active.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those facts often live in Slack, a planning call, a ticket, a pull request, or one person's memory. A coding session sees only a slice of them.&lt;/p&gt;

&lt;p&gt;Anthropic describes context as a finite resource that agents must manage deliberately. Compaction, retrieval, and tools can keep a long task moving, but none can recover a decision that was never stored in a form the next session can identify as current and authoritative. That is why context engineering matters, but it does not remove the need to decide what deserves to survive.&lt;/p&gt;

&lt;h2&gt;
  
  
  The symptom shows up after the first good session
&lt;/h2&gt;

&lt;p&gt;The first session often feels excellent. The team explains the codebase, the customer constraint, and the plan. Claude works inside that rich context and produces a sound change.&lt;/p&gt;

&lt;p&gt;Trouble appears later:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A new session starts with the repository but not the conversation.&lt;/li&gt;
&lt;li&gt;An old session is compacted into a shorter summary.&lt;/li&gt;
&lt;li&gt;Another engineer opens the same repo with a different personal setup.&lt;/li&gt;
&lt;li&gt;The team switches between Claude Code, Cursor, and another agent.&lt;/li&gt;
&lt;li&gt;Two agents work in parallel from different slices of the brief.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each agent can make a locally reasonable choice. The conflict only becomes visible in review, integration, or production.&lt;/p&gt;

&lt;p&gt;This is not a model-intelligence problem. It is a team-state problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the common fixes solve - and where they stop
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Chat history
&lt;/h3&gt;

&lt;p&gt;Chat history is useful when one person needs to replay a recent session. It preserves detail and can explain how the agent reached a result.&lt;/p&gt;

&lt;p&gt;It is a poor source of team truth. A long conversation mixes ideas, corrections, rejected options, pasted customer data, and the final call. The next reader must infer which sentence won. Another teammate may not have the same history at all.&lt;/p&gt;

&lt;h3&gt;
  
  
  Session summaries
&lt;/h3&gt;

&lt;p&gt;A good summary reduces the cost of continuing work after compaction. It should carry the current objective, completed work, open questions, and important constraints.&lt;/p&gt;

&lt;p&gt;But a summary belongs to a run. It can omit the exact reason a design was rejected, and it rarely records who owns a decision or what later replaced it. Use it to resume work, not to govern every future task.&lt;/p&gt;

&lt;h3&gt;
  
  
  CLAUDE.md
&lt;/h3&gt;

&lt;p&gt;CLAUDE.md is the right baseline for stable instructions Claude should read in a repository: commands, directory structure, coding conventions, hard safety rules, and durable invariants.&lt;/p&gt;

&lt;p&gt;It becomes fragile when teams use it as a running decision log. The file grows, old calls remain beside new ones, and product or customer decisions outside the repository never arrive. Nobody can tell whether a sentence is a current rule, an old preference, or one person's note.&lt;/p&gt;

&lt;p&gt;The practical split is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;put stable operating instructions in CLAUDE.md;&lt;/li&gt;
&lt;li&gt;put important decisions in records that can show owner, reason, status, and replacement;&lt;/li&gt;
&lt;li&gt;link the two when a decision must shape nearly every task.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a broader comparison of the available context layers, see &lt;a href="https://dev.to/blog/best-tools-ai-coding-agent-context"&gt;the best tools for giving AI coding agents your team's context&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory plugins and MCP servers
&lt;/h3&gt;

&lt;p&gt;Memory plugins can preserve facts across sessions, and MCP servers can let an agent query live systems during a task. Both are valuable.&lt;/p&gt;

&lt;p&gt;The remaining question is not only whether the agent can retrieve something. It is whether the retrieved statement is approved, current, relevant to this code path, and safe to act on.&lt;/p&gt;

&lt;p&gt;A memory system may recall both "keep the legacy endpoint" and "remove the legacy endpoint." A team needs to know which one won and why.&lt;/p&gt;

&lt;p&gt;Our guide to the &lt;a href="https://dev.to/blog/best-mcp-servers-engineering-teams"&gt;best MCP servers for engineering teams&lt;/a&gt; explains where live context fits and why fewer, focused sources usually beat a large tool list.&lt;/p&gt;

&lt;h3&gt;
  
  
  ADRs
&lt;/h3&gt;

&lt;p&gt;Architecture Decision Records are the strongest existing answer for important technical calls. A good ADR records the context, decision, consequences, and alternatives. It sits near the code and survives sessions.&lt;/p&gt;

&lt;p&gt;The weakness is coverage. Someone must notice the decision, write the ADR, update its status, and make sure agents read it. Product decisions, customer promises, and cross-team exceptions may never become ADRs even when they constrain the architecture.&lt;/p&gt;

&lt;p&gt;ADRs should stay. The next step is making their current decisions available to every relevant agent, alongside the non-architecture calls that affect the same work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Save decisions, not entire conversations
&lt;/h2&gt;

&lt;p&gt;When an architecture decision matters to future agent work, preserve a small, clear record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Verdict:&lt;/strong&gt; what the team chose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reason:&lt;/strong&gt; why this option won.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rejected option:&lt;/strong&gt; what looked plausible but failed, and why.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; who can confirm or change the call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope:&lt;/strong&gt; the services, paths, APIs, product behavior, or customers it affects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; the incident, experiment, requirement, or tradeoff behind it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status:&lt;/strong&gt; proposed, approved, superseded, or expired.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replacement:&lt;/strong&gt; the newer decision when the answer changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This record is more useful than a giant transcript because an agent can tell what it must honor without replaying the whole discussion.&lt;/p&gt;

&lt;p&gt;It also serves the whole team. A product person can see which product promise shaped the architecture. An engineering lead can see who owns an exception. A developer can see why the unusual branch should not be "cleaned up." A coding agent can read the same active constraint before changing the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  A workflow that survives the next session
&lt;/h2&gt;

&lt;p&gt;A workable team loop looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Capture the call where it happens.&lt;/strong&gt; Draft the decision from the Slack thread, ticket, PRD, review, or meeting instead of waiting for someone to remember later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask the owner to confirm it.&lt;/strong&gt; The system should not turn every sentence into a rule. One person approves the verdict and scope.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect it to the code it governs.&lt;/strong&gt; Name the repository, paths, APIs, or capabilities affected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brief the agent before work starts.&lt;/strong&gt; Retrieve only the active decisions relevant to the task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Record conflicts instead of guessing.&lt;/strong&gt; If the request contradicts an approved decision, stop and ask the owner.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supersede decisions visibly.&lt;/strong&gt; Keep the history, but mark the current answer clearly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is shared decision memory: not a copy of every conversation, and not a personal note file, but the small set of approved team calls that people and agents must carry forward.&lt;/p&gt;

&lt;p&gt;When several agents work in parallel, the need becomes sharper. &lt;a href="https://dev.to/blog/two-ai-agents-one-codebase-shared-memory"&gt;Two AI agents can each produce a reasonable change and still leave one codebase inconsistent&lt;/a&gt; if they start from different decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Lockstep handles the missing layer
&lt;/h2&gt;

&lt;p&gt;Lockstep captures possible decisions from the tools where teams already work, asks the owner to confirm them, and keeps the approved record tied to what it affects. An MCP-compatible agent can retrieve the relevant active decisions before it changes code.&lt;/p&gt;

&lt;p&gt;It does not replace CLAUDE.md, ADRs, Git, or your issue tracker. It connects the important calls across those systems and makes their status readable to both people and agents.&lt;/p&gt;

&lt;p&gt;If you are choosing where to keep those calls today, &lt;a href="https://dev.to/blog/best-decision-log-tools-product-engineering"&gt;compare decision-log tools for product and engineering teams&lt;/a&gt;. The best setup is the one your team will both update and read.&lt;/p&gt;

&lt;p&gt;Claude Code does not need every conversation your company has ever had. It needs the right active decisions before it acts.&lt;/p&gt;

&lt;p&gt;That is how teams stop explaining the same architecture twice.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>architecturedecisions</category>
      <category>agentmemory</category>
      <category>contextloss</category>
    </item>
    <item>
      <title>The Feed Is Coming for GitHub</title>
      <dc:creator>Naman Jain</dc:creator>
      <pubDate>Sat, 27 Jun 2026 09:37:29 +0000</pubDate>
      <link>https://dev.to/naman_here/the-feed-is-coming-for-github-2n71</link>
      <guid>https://dev.to/naman_here/the-feed-is-coming-for-github-2n71</guid>
      <description>&lt;p&gt;Before reels/shorts became mainstream, the common agreement about social media was that the moat was the network effect (friend’ s graph). The valuable thing about Facebook was that your friends were on it, and the friends-of-friends data sitting across all those profiles was an asset nobody thought could be replaced. You opened the app and you went to people’s profiles, walls, the network.&lt;/p&gt;

&lt;p&gt;Then the feed (Algorithm) arrived. It started as a convenience layer on top of the graph: here's what happened today, what is trending, what people are posting about, in one place. But over a few years the relationship inverted. &lt;strong&gt;&lt;em&gt;The algorithm became the product, and the graph became one input among many that the algorithm uses to decide what to show you. The graph never went away&lt;/em&gt;&lt;/strong&gt;. It just stopped being where the value lived. Your profile, your friends and your likes, posts, comments are now consumed at the internal API layer; the algorithm is their customer.&lt;/p&gt;

&lt;p&gt;This keeps happening to systems everyone assumed were permanent as many people are writing about. The clearest case in the enterprise is the CRM. Salesforce and HubSpot won because they owned the database: every call note, every contact, every reason a deal stalled lived in one place, and the cost of leaving climbed every year. That hasn’t changed. What’s changed is that a layer of agents now sits on top: research bots that brief a rep before a call, tools that listen to meetings and write structured notes back into the CRM, an orchestration layer that decides what the rep should look at first. The CRM didn’t die. It became an input to the thing the rep actually opens in the morning.&lt;/p&gt;

&lt;p&gt;I think GitHub is next.&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%2Fl85hwpxwejvinptkegtk.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%2Fl85hwpxwejvinptkegtk.png" alt="Value Chain" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why GitHub won
&lt;/h2&gt;

&lt;p&gt;GitHub is the system of record for code. It has been the obvious, indisputable answer for fifteen-plus years, and the reasons are the same ones that made the CRM sticky. The code lives there. So do the pull requests, the issues, the review history, the CI runs, the CODEOWNERS file; years of accumulated operational context about how a codebase came together. Open source colonized it, which pulled in everyone else. Microsoft paid $7.5 billion for it in 2018 because owning the place where the world’s code lives is one of the great franchises in software&lt;/p&gt;

&lt;p&gt;And GitHub did what every dominant platform does: it expanded outward from the database. Actions, Packages, Codespaces, Advanced Security; each new module built on the same spine, each one raising the cost of leaving. Every tool in the marketplace is, in effect, paying rent for the right to plug into GitHub’s data.&lt;/p&gt;

&lt;p&gt;The reason the database won is worth stating plainly: code had to live in one place because the human working on it could only look in one place at a time. Concentration was a feature. The gravity came from accumulation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes when the user is an agent
&lt;/h2&gt;

&lt;p&gt;That premise is breaking. The thing increasingly working on the code isn't a human who can look in one place at a time. It's an agent that can look everywhere at once.&lt;/p&gt;

&lt;p&gt;To a coding agent, GitHub is a database. A very good one; trusted, well-integrated, a decade of context, but a database. The agent doesn't need the PR review UI, the issues board, the merge-queue interface. It needs structured state it can read and write with low friction. The carefully designed human workflows on top become what an old profile page became after the feed: still there, no longer the point.&lt;/p&gt;

&lt;p&gt;And an agent has no trouble pulling from GitHub and the issue tracker and Slack and the design files and the CI logs and production telemetry at once, then reasoning across all of it before it does anything. In the human era, value pooled wherever the data was. In the agent era, value pools wherever the reasoning happens. The layer that reads across every source and decides what to do. That layer treats GitHub as infrastructure.&lt;/p&gt;

&lt;p&gt;The switching cost moves with it. “All our code is in GitHub” was the lock-in for fifteen years. “All our decisions, our coordination, our institutional context live in our agent layer” is the lock-in for the next fifteen. GitHub also sees this clearly, which is why it’s racing to build the intelligence layer inside its own walls, Copilot, a coding agent that goes from issue to merge, an MCP registry. It’s the same move Salesforce made: bring the AI inside, keep the value from migrating out. Whether it stays inside their walls is the open question.&lt;/p&gt;

&lt;h2&gt;
  
  
  The thing GitHub doesn’t store
&lt;/h2&gt;

&lt;p&gt;Here's the gap. GitHub records the artifacts: the diffs, the merged PRs, the final state of the code. It does not record the decisions that produced them.&lt;/p&gt;

&lt;p&gt;The thing that steers a codebase isn't the code; it's the decisions. "Auth is JWT, fifteen-minute expiry." "We renamed /login to /session." "Nothing new writes to that table." Those decisions live in people's heads, in Slack threads that scroll away, in docs that went stale the week they were written - and no agent ever reads any of it. GitHub only learns a decision happened after the conflicting code has already merged. By then it's a bug, not a heads-up.&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%2F1segloh0xm43lyn5ho8b.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%2F1segloh0xm43lyn5ho8b.png" alt="What Github does not store" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This gets acute the moment more than one agent is involved. Two developers point two agents - maybe Claude Code, maybe Codex, maybe Gemini - at the same system. Agent A renames an endpoint. Agent B, with no idea, keeps calling the old one and ships it. Agent A decides the token scheme; Agent B invents a different one. Nobody coordinated because there was nowhere to coordinate. The system of record holds the code. It holds nothing that lets these agents stay in sync before they act.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this points: Lockstep
&lt;/h2&gt;

&lt;p&gt;This is the layer I’m building. Lockstep is the shared decision record every agent reads before it does anything.&lt;/p&gt;

&lt;p&gt;When an agent starts a session, the first thing it gets is a briefing: here’s what changed since you were last here, here’s what’s binding; highest blast radius first, so the change that breaks three downstream services surfaces and the cosmetic rename stays quiet. Only then does it write a line of code. Rules files like AGENTS.md and decision docs like ADRs both help, but they’re written once and read rarely; neither carries a fresh decision from one agent to the next before the second one acts.&lt;/p&gt;

&lt;p&gt;If that sounds familiar, it should. That briefing is the feed » the prioritised, one-place-to-look surface the VP of Sales now opens instead of a raw account list. Except the user is an agent, the inputs are decisions and contract changes instead of accounts and signals, and the output is code that doesn’t conflict. It works with any MCP-compatible agent, because a coordination layer has no reason to care which vendor is doing the typing; the same way the feed never cared which friend posted.&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%2F11qmdghv7orr20hm0qia.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%2F11qmdghv7orr20hm0qia.png" alt="Lockstep Feed" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub keeps the code, for all the reasons it always has. But the value is moving up a layer » to the thing that reads across the whole record and decides what happens next. The friend graph never went away. The CRM isn’t going anywhere. Neither is GitHub. They’re becoming inputs.&lt;/p&gt;

&lt;p&gt;The next decade of developer tooling gets built one layer up.&lt;/p&gt;

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