<?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: Edward Izgorodin</title>
    <description>The latest articles on DEV Community by Edward Izgorodin (@izgorodin).</description>
    <link>https://dev.to/izgorodin</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%2F3989589%2F15cb8fb8-9785-496a-be83-65c3061529d2.jpeg</url>
      <title>DEV Community: Edward Izgorodin</title>
      <link>https://dev.to/izgorodin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/izgorodin"/>
    <language>en</language>
    <item>
      <title>Claude vs Coderabbit for code reviews? Where do we stand on this?</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Mon, 19 Oct 2026 09:08:00 +0000</pubDate>
      <link>https://dev.to/izgorodin/claude-vs-coderabbit-for-code-reviews-where-do-we-stand-on-this-4fef</link>
      <guid>https://dev.to/izgorodin/claude-vs-coderabbit-for-code-reviews-where-do-we-stand-on-this-4fef</guid>
      <description>&lt;p&gt;As of 17 October 2026, a code review from Claude can mean four things from Anthropic: the managed Code Review service, "out of research preview" since 15 October for Team and Enterprise organizations on GitHub and billed on token usage with no flat price per review; the &lt;code&gt;/code-review&lt;/code&gt; command in Claude Code, on any plan; its cloud mode ultrareview, still "a research preview feature"; and the Claude Code GitHub Action in your own CI. CodeRabbit is a separate reviewer, billed per developer who creates pull requests, on GitHub, GitLab, Azure DevOps and Bitbucket, and also runs inside Claude Code as a plugin. Your Claude plan, code host and preferred billing unit decide the choice, and the answer is often both.&lt;/p&gt;

&lt;p&gt;Every fact below comes from each vendor's own pages as I read them on 17 October 2026, and neither Anthropic nor CodeRabbit saw this text before publication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where things stand on 17 October 2026
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;CodeRabbit&lt;/th&gt;
&lt;th&gt;Claude Code Review (managed)&lt;/th&gt;
&lt;th&gt;
&lt;code&gt;/code-review&lt;/code&gt; and ultrareview&lt;/th&gt;
&lt;th&gt;Claude Code GitHub Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Status&lt;/td&gt;
&lt;td&gt;Free and open-source access plus four paid plans: Essentials, Team, Advanced, Enterprise&lt;/td&gt;
&lt;td&gt;"out of research preview" since 15 October 2026&lt;/td&gt;
&lt;td&gt;a Claude Code command; ultrareview is "a research preview feature"&lt;/td&gt;
&lt;td&gt;a GitHub Action that runs Claude Code inside your repository's workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who can use it&lt;/td&gt;
&lt;td&gt;any team; Free gives PR summaries, with reviews in the VS Code extension and CLI&lt;/td&gt;
&lt;td&gt;Team and Enterprise organizations, not Pro or Max; not with Zero Data Retention, the HIPAA configuration or CMEK&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/code-review&lt;/code&gt;: "Anyone, on any plan"; ultrareview needs a claude.ai sign-in&lt;/td&gt;
&lt;td&gt;anyone with a Claude API key or cloud provider credentials (Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry), or an OAuth token on Pro, Max, Team or Enterprise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code hosts&lt;/td&gt;
&lt;td&gt;GitHub, GitLab, Azure DevOps, Bitbucket Cloud and Data Center, plus GitHub Enterprise Server and self-managed GitLab&lt;/td&gt;
&lt;td&gt;GitHub, GitHub Enterprise Server if Anthropic infrastructure can reach it, GitHub Enterprise Cloud with data residency&lt;/td&gt;
&lt;td&gt;your local branch; &lt;code&gt;--comment&lt;/code&gt; posts to a GitHub pull request, or to a GitLab merge request as a single note&lt;/td&gt;
&lt;td&gt;GitHub; for GitLab, a separate integration "currently in beta" that GitLab maintains&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What starts a review&lt;/td&gt;
&lt;td&gt;every eligible pull request by default, skipping drafts, then later pushes until a pause after 5 reviewed commits by default; &lt;code&gt;@coderabbitai review&lt;/code&gt; or &lt;code&gt;@coderabbitai full review&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;per repository: Once after PR creation, After every push or Manual, skipping drafts and forks; &lt;code&gt;@claude review&lt;/code&gt; for one review, &lt;code&gt;@claude review always&lt;/code&gt; to follow later pushes&lt;/td&gt;
&lt;td&gt;you run it&lt;/td&gt;
&lt;td&gt;your workflow's events&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What you pay for&lt;/td&gt;
&lt;td&gt;a seat for each developer who creates pull requests: Essentials $24 per developer per month billed annually or $30 monthly, Team $48 or $60&lt;/td&gt;
&lt;td&gt;token usage from usage credits, outside the plan's included usage, billed to the organization&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/code-review&lt;/code&gt;: your plan's usage or API billing; ultrareview: 3 free runs once per account on Pro and Max, then "typically $5 to $25 in usage credits depending on the size of the change"&lt;/td&gt;
&lt;td&gt;GitHub Actions minutes, plus API tokens, inference through your own cloud account, or your Claude subscription with an OAuth token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Where it runs&lt;/td&gt;
&lt;td&gt;"Sandboxed cloud execution with your full repository cloned for isolated analysis"; self-hosted for Enterprise customers with 500 or more user seats&lt;/td&gt;
&lt;td&gt;Anthropic infrastructure, read-only inside the review, no commits, "without building or running your code"&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/code-review&lt;/code&gt; in your session as a background subagent; ultrareview in a cloud sandbox on Anthropic's infrastructure&lt;/td&gt;
&lt;td&gt;your repository's workflows on GitHub Actions runners&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How a finding is checked&lt;/td&gt;
&lt;td&gt;a Verification agent among specialized agents working in parallel&lt;/td&gt;
&lt;td&gt;"A verification step checks findings against the code before they're reported."&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/code-review&lt;/code&gt; at &lt;code&gt;low&lt;/code&gt; effort reports the findings it is most confident in; ultrareview: "every reported finding is independently reproduced and verified"&lt;/td&gt;
&lt;td&gt;whatever your workflow asks for&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What lands on the pull request&lt;/td&gt;
&lt;td&gt;a walkthrough comment at the top of the pull request that summarizes the changes, then review comments that follow your pushes; &lt;code&gt;@coderabbitai approve&lt;/code&gt; approves only when &lt;code&gt;reviews.request_changes_workflow&lt;/code&gt; is enabled&lt;/td&gt;
&lt;td&gt;inline comments marked Important, Nit or Pre-existing, a summary, and a check run that ends neutral or skipped, never as a failure&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/code-review&lt;/code&gt;: nothing unless you pass &lt;code&gt;--comment&lt;/code&gt;, and &lt;code&gt;--fix&lt;/code&gt; applies the findings to your working tree; ultrareview: with &lt;code&gt;--post&lt;/code&gt; on a github.com pull request, one comment from your own GitHub account&lt;/td&gt;
&lt;td&gt;in the review workflow, an inline comment per issue, or one summary comment when it finds none&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Training on your code&lt;/td&gt;
&lt;td&gt;"CodeRabbit never uses customer code for model training."; code goes to "OpenAI and/or Anthropic for reviewing purposes only"&lt;/td&gt;
&lt;td&gt;none under commercial terms (Team, Enterprise, API) unless the customer opts in&lt;/td&gt;
&lt;td&gt;by account: commercial terms as for Code Review; Free, Pro and Max data is used for training when that setting is on&lt;/td&gt;
&lt;td&gt;the same rule, by account&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What is different since 15 October
&lt;/h2&gt;

&lt;p&gt;Anthropic's announcement of 15 October 2026 reads "Code Review is out of research preview and available to Claude Team and Enterprise organizations." The cost page now says "Code Review has no flat per-review price." A review costs more with a higher review level, a larger change, more complex surrounding code and more candidate issues to verify, and it is billed to the organization, "not to the developer who opened the PR or requested the review." The figure of 15 to 25 dollars per review that older answers still give comes from Anthropic's launch article of 9 March 2026, written for the preview; a published average price per review was not found on the Code Review overview, setup, costs, pull requests or customizing pages as of 17 October 2026.&lt;/p&gt;

&lt;p&gt;Admins pick a review level for the organization and for each repository: Quick is "A lighter pass. The fastest level, at the lowest cost", Standard is the default, and Deep "Takes the longest and costs the most". A repository added from the admin page "starts at After every push", the mode that "runs on each push, multiplying cost by the number of pushes". On speed, the announcement says "Most reviews now finish about 3x faster (~20 minutes down to 6-10 minutes) compared to during preview." The overview page adds that Code Review is not yet available to organizations that use customer-managed encryption keys (CMEK). Ultrareview was not part of the move, and its page says "A review typically takes 15 to 25 minutes."&lt;/p&gt;

&lt;h2&gt;
  
  
  If your team is on Pro or Max
&lt;/h2&gt;

&lt;p&gt;The managed service is not on these plans; Anthropic's availability table marks Code Review for Team and Enterprise only. You can use &lt;code&gt;/code-review&lt;/code&gt;, which "works on any plan" and counts toward your plan's usage; ultrareview, whose three free runs are "a one-time allotment per account" that does not refresh; and the GitHub Action with an OAuth token from your subscription. On CodeRabbit's side, the Free plan gives "PR summarization only; code reviews are available through the VS Code extension and CLI.", open-source projects "receive Team features with no paid subscription required", and "New organizations start with a 14-day Advanced trial".&lt;/p&gt;

&lt;h2&gt;
  
  
  If your team is on Team or Enterprise
&lt;/h2&gt;

&lt;p&gt;The two vendors bill in different units, so a fair comparison needs your own counts. Anthropic bills each review from usage credits and suggests that you "estimate monthly spend from your own pull requests" before a wide rollout: cap Code Review spending for the month, turn it on for a few representative repositories in Once after PR creation or Manual mode, read the Average cost column, and multiply by your pull requests per month, and again by pushes per pull request for After every push. CodeRabbit charges a monthly seat for each developer who creates pull requests, and its pricing page says "There is no total limit on the number of pull requests or repositories you can review". Per developer, Essentials includes "5 PR reviews per hour" on a rolling window, the pricing page marks the hourly numbers "Subject to Fair Usage Policy", and reviews past the limit cost $0.25 per reviewed file only when usage-based reviews are turned on.&lt;/p&gt;

&lt;p&gt;Claude Enterprise has one more line: "Eligible Claude Enterprise organizations can claim at least $10,000 in Code Review credits by January 15, 2027." By the terms, the amount is "between $10,000 and $50,000, based on your organization's active Claude Code seats", claimed once per organization, for reviews of pull requests on github.com, for 30 days from the claim or until it is used up, after which reviews are billed as usual. The exclusions include Team, Pro, Max and Free plans, organizations connected to GitHub Enterprise Server or a .ghe.com instance, and those that cannot use Code Review, and the credits do not cover the GitHub Action, &lt;code&gt;/code-review&lt;/code&gt; or ultrareview.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running both
&lt;/h2&gt;

&lt;p&gt;CodeRabbit documents a plugin for Claude Code: after &lt;code&gt;/plugin install coderabbit&lt;/code&gt;, the command &lt;code&gt;/coderabbit:coderabbit-review&lt;/code&gt; has the CodeRabbit CLI review your changes, and Claude Code applies the fixes. Both vendors read CLAUDE.md: CodeRabbit "automatically detects coding guideline files such as .cursorrules, CLAUDE.md, and AGENTS.md in your repository and applies them as review criteria", while Anthropic notes that its service and &lt;code&gt;/code-review&lt;/code&gt; "are two separate tools, and they read different files", the service reading REVIEW.md as well. Purchasing links them too: CodeRabbit joined the Claude Marketplace on 27 May 2026, where "Anthropic customers can apply their existing Anthropic spend commitment toward CodeRabbit", and Anthropic's listing says "Claude powers CodeRabbit's context engine and review harness". CodeRabbit's FAQ puts its case for review in one line: "the perspective of the reviewer differs from that of the code generator, whether human or machine".&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If this is true for your team&lt;/th&gt;
&lt;th&gt;Look first at&lt;/th&gt;
&lt;th&gt;What the pages say&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Code lives on GitLab, Azure DevOps or Bitbucket&lt;/td&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;CodeRabbit lists all three; Anthropic documents a GitLab CI/CD integration in beta and &lt;code&gt;/code-review --comment&lt;/code&gt; for merge requests, and &lt;code&gt;/code-review&lt;/code&gt; reviews a local branch; Bitbucket and Azure DevOps were not found on Anthropic's Claude Code docs index or its Code Review overview page as of 17 October 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The bill should follow headcount, or only the reviews someone asks for&lt;/td&gt;
&lt;td&gt;CodeRabbit for headcount; Code Review in Manual mode or &lt;code&gt;/code-review&lt;/code&gt; for requests&lt;/td&gt;
&lt;td&gt;CodeRabbit bills developers who create pull requests; Manual mode runs "no reviews on open or push"; &lt;code&gt;/code-review&lt;/code&gt; counts toward normal usage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero Data Retention, the HIPAA configuration or CMEK&lt;/td&gt;
&lt;td&gt;CodeRabbit, the GitHub Action or &lt;code&gt;/code-review&lt;/code&gt;, after your policy owner reads each data page&lt;/td&gt;
&lt;td&gt;Code Review and ultrareview are not available to those organizations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A tool must be able to approve as a required reviewer&lt;/td&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;@coderabbitai approve&lt;/code&gt; with &lt;code&gt;reviews.request_changes_workflow&lt;/code&gt; enabled; Code Review's check run never ends as a failure, so a merge gate is a script in your CI that reads its Details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Enterprise, eligible for the credits&lt;/td&gt;
&lt;td&gt;Code Review, while the credits last&lt;/td&gt;
&lt;td&gt;at least $10,000 for 30 days from the claim, github.com repositories only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Each candidate finding checked before it reaches the pull request&lt;/td&gt;
&lt;td&gt;CodeRabbit, Code Review, ultrareview, or Sigma (Mnemoverse, the author's company)&lt;/td&gt;
&lt;td&gt;CodeRabbit lists a Verification agent; Code Review describes a verification step; ultrareview says "every reported finding is independently reproduced and verified"; Sigma, in closed beta on GitHub by invitation, "checks potential issues and brings the evidence back to your code", and its docs say a fresh verifier "confirms, rejects or reclassifies each one", that "only confirmed candidates are verified findings" and that suspicions no verifier confirmed stay labeled separately; Sigma runs on Claude Code and OpenAI models and reviews its team's own repositories every day; its homepage takes requests through a "Request beta access" form and says "A request does not grant access automatically."&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  A test on your own pull requests
&lt;/h2&gt;

&lt;p&gt;Both vendors leave room to measure before you commit. On Team or Enterprise, run Code Review in Once after PR creation or Manual mode under a monthly cap, as Anthropic's cost page suggests, and give a new CodeRabbit organization its 14-day Advanced trial; "Reviews beyond your plan's rate limits are free during your initial subscription trial." Choose ten merged pull requests that later needed a bug fix, so the right review comment is known in advance, recreate each from its original commits on a fresh branch, and let both reviewers read it. For every comment, write down whether it names the known bug and whether you would delete it, and for every pull request, the cost in each vendor's own unit. On Claude Enterprise, read the credit terms first: "Set up Code Review on your repositories before you claim.", because the 30 days start at the claim.&lt;/p&gt;

&lt;p&gt;Sources, all read on 17 October 2026. Anthropic: &lt;a href="https://code.claude.com/docs/en/code-review" rel="noopener noreferrer"&gt;Code Review&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/code-review-setup" rel="noopener noreferrer"&gt;setup&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/code-review-costs" rel="noopener noreferrer"&gt;costs&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/code-review-pull-requests" rel="noopener noreferrer"&gt;pull requests&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/code-review-customize" rel="noopener noreferrer"&gt;customizing&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/code-review-local" rel="noopener noreferrer"&gt;/code-review&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/ultrareview" rel="noopener noreferrer"&gt;ultrareview&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/github-actions" rel="noopener noreferrer"&gt;GitHub Actions&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/feature-availability" rel="noopener noreferrer"&gt;feature availability&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/data-usage" rel="noopener noreferrer"&gt;data usage&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/github-enterprise-server" rel="noopener noreferrer"&gt;GitHub Enterprise Server&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/gitlab-ci-cd" rel="noopener noreferrer"&gt;GitLab CI/CD&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/llms.txt" rel="noopener noreferrer"&gt;docs index&lt;/a&gt;, &lt;a href="https://claude.com/resources/articles/code-review-is-now-generally-available" rel="noopener noreferrer"&gt;general availability article&lt;/a&gt;, &lt;a href="https://support.claude.com/en/articles/17603594-free-code-review-promotional-credits-for-claude-enterprise" rel="noopener noreferrer"&gt;Enterprise credit terms&lt;/a&gt;, &lt;a href="https://claude.com/resources/articles/code-review" rel="noopener noreferrer"&gt;March launch article&lt;/a&gt;, &lt;a href="https://claude.com/marketplace/agents-products/coderabbit" rel="noopener noreferrer"&gt;CodeRabbit in the Claude Marketplace&lt;/a&gt;. CodeRabbit: &lt;a href="https://www.coderabbit.ai/pricing" rel="noopener noreferrer"&gt;pricing&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/management/plans.md" rel="noopener noreferrer"&gt;plans&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/management/rate-limits.md" rel="noopener noreferrer"&gt;rate limits&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/management/usage-based-addon.md" rel="noopener noreferrer"&gt;usage-based reviews&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/configuration/auto-review.md" rel="noopener noreferrer"&gt;automatic reviews&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/platforms/overview.md" rel="noopener noreferrer"&gt;platforms&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/faq.md" rel="noopener noreferrer"&gt;FAQ&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/overview/architecture" rel="noopener noreferrer"&gt;architecture&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/reference/review-commands.md" rel="noopener noreferrer"&gt;review commands&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/self-hosted/overview.md" rel="noopener noreferrer"&gt;self-hosted&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/knowledge-base/code-guidelines.md" rel="noopener noreferrer"&gt;coding guidelines&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/cli/claude-code-integration.md" rel="noopener noreferrer"&gt;Claude Code plugin&lt;/a&gt;, &lt;a href="https://www.coderabbit.ai/newsroom/coderabbit-joins-claude-marketplace" rel="noopener noreferrer"&gt;Claude Marketplace news&lt;/a&gt;. Sigma: &lt;a href="https://sigma.mnemoverse.com/" rel="noopener noreferrer"&gt;homepage&lt;/a&gt; and &lt;a href="https://sigma.mnemoverse.com/docs/reading-a-review" rel="noopener noreferrer"&gt;reading a review&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>codereview</category>
      <category>claudecode</category>
      <category>ai</category>
      <category>coderabbit</category>
    </item>
    <item>
      <title>What options exist for connecting an AI agent memory layer across both ChatGPT web interfaces and localized coding environments?</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Sun, 18 Oct 2026 09:39:00 +0000</pubDate>
      <link>https://dev.to/izgorodin/what-options-exist-for-connecting-an-ai-agent-memory-layer-across-both-chatgpt-web-interfaces-and-5125</link>
      <guid>https://dev.to/izgorodin/what-options-exist-for-connecting-an-ai-agent-memory-layer-across-both-chatgpt-web-interfaces-and-5125</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ChatGPT on the web and local Codex do not share one built-in memory store. OpenAI says ChatGPT web uses ChatGPT memory, while local Codex uses separate local memory and controls.&lt;/li&gt;
&lt;li&gt;One documented bridge is a hosted remote MCP memory service, connected once in ChatGPT and again in each coding client. Every client keeps its own configuration and OAuth session.&lt;/li&gt;
&lt;li&gt;Browser-extension products bridge the ChatGPT page directly and reach coding tools through MCP. A local server can reach ChatGPT through a tunnel. OpenAI also offers narrower ChatGPT-to-Codex bridges: Computer History and dots.&lt;/li&gt;
&lt;li&gt;A memory layer can sit beside ChatGPT. It cannot be ChatGPT memory: OpenAI documents no interface through which a memory layer reads or writes it, though with Memory on ChatGPT may pass relevant memory context to an app while it responds.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;An AI agent memory layer is an external store and retrieval service that makes saved knowledge available to several AI clients under one account or memory space.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Connecting that layer across ChatGPT and local coding environments takes two separate integrations. ChatGPT needs a web-side connection. Claude Code, Cursor, VS Code, Codex, or another coding client needs its own MCP configuration.&lt;/p&gt;

&lt;p&gt;That split follows OpenAI's product design. &lt;a href="https://learn.chatgpt.com/docs/customization/memories" rel="noopener noreferrer"&gt;OpenAI states&lt;/a&gt; that "ChatGPT web uses ChatGPT memory, while local Codex clients use a separate local memory store and controls." ChatGPT web also &lt;a href="https://learn.chatgpt.com/docs/extend/mcp" rel="noopener noreferrer"&gt;"doesn't read local Codex configuration files or expose the local Codex command menu."&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This page compares published documentation and Plugin Directory results read on 2026-10-09, with every quotation re-checked on 2026-10-10 and again on 2026-10-17. It does not report product testing, except one dated Mnemoverse check, disclosed below.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four documented bridge patterns
&lt;/h2&gt;

&lt;p&gt;The approaches differ mainly in where the ChatGPT-side connection runs.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bridge pattern&lt;/th&gt;
&lt;th&gt;ChatGPT path&lt;/th&gt;
&lt;th&gt;Coding-tool path&lt;/th&gt;
&lt;th&gt;Main constraint&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hosted memory over remote MCP&lt;/td&gt;
&lt;td&gt;Published plugin or custom MCP server added by URL&lt;/td&gt;
&lt;td&gt;Remote MCP entry in each coding client&lt;/td&gt;
&lt;td&gt;Plan limits in ChatGPT; separate setup and OAuth sign-in in every client&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser extension plus MCP&lt;/td&gt;
&lt;td&gt;Extension inside the ChatGPT page&lt;/td&gt;
&lt;td&gt;Hosted or local MCP server&lt;/td&gt;
&lt;td&gt;Extension availability, browser support and maintenance become part of the system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local server through a tunnel&lt;/td&gt;
&lt;td&gt;Custom MCP server pointed at a public HTTPS tunnel or a Secure MCP Tunnel&lt;/td&gt;
&lt;td&gt;Local MCP server connects directly to coding tools&lt;/td&gt;
&lt;td&gt;The local process and tunnel must stay up&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI Computer History or dots&lt;/td&gt;
&lt;td&gt;Built into eligible ChatGPT experiences&lt;/td&gt;
&lt;td&gt;Codex or local computer tasks through the ChatGPT desktop app&lt;/td&gt;
&lt;td&gt;Limited by plan, platform, market and mobile eligibility&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A hosted MCP service lets one provider serve otherwise separate clients. It does not merge their built-in memories. Instead, each client reads from and writes to the external layer.&lt;/p&gt;

&lt;p&gt;A browser extension changes the ChatGPT side of the design. &lt;a href="https://plurality.network/blogs/how-to-sync-ai-memory-across-all-tools/" rel="noopener noreferrer"&gt;Plurality&lt;/a&gt; says its extension "embeds within the UI of ChatGPT, Claude, Gemini, Perplexity, and Grok," while its MCP server carries the same memory buckets into coding workflows. &lt;a href="https://www.memoryplugin.com/" rel="noopener noreferrer"&gt;MemoryPlugin&lt;/a&gt; lists a "Browser extension (Chrome + Safari, mobile too)" alongside a "Hosted MCP server (plus local)". &lt;a href="https://memwyre.tech/chatgpt-memory" rel="noopener noreferrer"&gt;Memwyre&lt;/a&gt; describes clipping decisions from the web and querying them "inside Claude Code, Cursor, and your terminal CLI".&lt;/p&gt;

&lt;p&gt;Pieces documents a local-first variation. Its &lt;a href="https://docs.pieces.app/products/mcp/chatgpt-developer-mode" rel="noopener noreferrer"&gt;ChatGPT setup&lt;/a&gt; exposes a locally running PiecesOS MCP server "via ngrok or another HTTPS proxy", and "The tunnel must be active when you add the connector and when you use ChatGPT." OpenAI separately documents a &lt;a href="https://developers.openai.com/api/docs/guides/secure-mcp-tunnels" rel="noopener noreferrer"&gt;Secure MCP Tunnel&lt;/a&gt; for servers on a private network or a developer machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  ChatGPT custom MCP servers, remote MCP, and plugins
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A remote MCP server is an MCP endpoint that a client reaches over the network rather than launching as a local process.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OpenAI's &lt;a href="https://help.openai.com/en/articles/12584461-connecting-custom-mcp-servers-in-chatgpt" rel="noopener noreferrer"&gt;help article&lt;/a&gt; answers the question "Can I connect to a local MCP server?" with "Not directly. ChatGPT connects to remote MCP servers." Its &lt;a href="https://developers.openai.com/api/docs/guides/custom-mcp-server" rel="noopener noreferrer"&gt;developer guide&lt;/a&gt; lists "SSE and streaming HTTP" as supported protocols.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A custom MCP server is an MCP server that a user or admin adds to ChatGPT by URL, while a published plugin is listed in OpenAI's Plugin Directory and can reach more ChatGPT surfaces.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OpenAI's documentation uses both terms, and its help article says that in the current Plugins experience "You don't need to turn on Developer Mode first." The developer guide says to "Connect your Model Context Protocol (MCP) server to ChatGPT as a plugin." Authentication can be "OAuth, No authentication, and OAuth or no authentication." ChatGPT supports read and write tools, respects the &lt;code&gt;readOnlyHint&lt;/code&gt; annotation, and treats tools without it as write actions. "Write actions by default require confirmation."&lt;/p&gt;

&lt;p&gt;Plan support needs careful wording:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenAI's help article says "Custom MCP server connections and full MCP support are available for ChatGPT Business and Enterprise/Edu customers on ChatGPT web."&lt;/li&gt;
&lt;li&gt;The same article says "Pro users can connect custom MCP servers with read/fetch permissions."&lt;/li&gt;
&lt;li&gt;The article does not name Plus, read 2026-10-17.&lt;/li&gt;
&lt;li&gt;OpenAI's custom MCP developer guide names no plans.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A vendor may publish broader plan claims. Pieces names "Pro, Plus, Business, Enterprise, or Education" in its own guide. That is a Pieces statement, not confirmation from OpenAI's help article.&lt;/p&gt;

&lt;p&gt;Custom MCP server connections are documented as web only: to "Can I connect custom MCP servers on mobile?" the help article answers "No - web only." Published plugins have wider reach. OpenAI says &lt;a href="https://learn.chatgpt.com/docs/plugins" rel="noopener noreferrer"&gt;"Plugins work in Chat and Work across ChatGPT on the web, desktop, and mobile, and in Codex in the ChatGPT desktop app."&lt;/a&gt; The Codex IDE extension does not support plugins. Saving a plugin with local apps &lt;a href="https://help.openai.com/en/articles/20001256-plugins-in-chatgpt" rel="noopener noreferrer"&gt;"does not make those tools available on web or mobile."&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Workspaces add one more delay. "After an admin first approves an MCP server connection for the workspace, ChatGPT uses a 'frozen' snapshot of its available tools and inputs." A memory tool the vendor adds later reaches the workspace only after an admin publishes the update. OpenAI's own apps do not fill the gap: "OpenAI-built apps are search-only today and do not support write actions."&lt;/p&gt;

&lt;h2&gt;
  
  
  The ChatGPT Plugin Directory
&lt;/h2&gt;

&lt;p&gt;OpenAI says &lt;a href="https://developers.openai.com/plugins/quickstart" rel="noopener noreferrer"&gt;"ChatGPT and Codex share one universal plugin directory."&lt;/a&gt; &lt;a href="https://help.openai.com/en/articles/20001256-plugins-in-chatgpt" rel="noopener noreferrer"&gt;OpenAI's help article&lt;/a&gt; adds: "In Codex, directory changes can take up to 6 hours to refresh."&lt;/p&gt;

&lt;p&gt;A &lt;a href="https://chatgpt.com/plugins" rel="noopener noreferrer"&gt;Plugin Directory&lt;/a&gt; search on 2026-10-09 by the names of the layers on this page found Basic Memory Cloud and Supermemory ("Universal context and memory"). The other names, Mnemoverse included, returned no card. A broader search for "memory" returned 47 cards, so those name matches are not a complete inventory of memory plugins. The directory refuses scripted fetches, so these results were not re-fetched on 2026-10-10.&lt;/p&gt;

&lt;p&gt;Basic Memory recommends its published plugin because it &lt;a href="https://docs.basicmemory.com/integrations/chatgpt" rel="noopener noreferrer"&gt;"does not require Developer mode or a server URL."&lt;/a&gt; The vendor says "Basic Memory Cloud is required" because ChatGPT connects to the hosted service, and warns: "Plugin availability can depend on your ChatGPT plan, region, workspace settings, and role."&lt;/p&gt;

&lt;h2&gt;
  
  
  OAuth and account identity determine whether memory is shared
&lt;/h2&gt;

&lt;p&gt;OpenAI's plugin authentication expects &lt;a href="https://developers.openai.com/plugins/build/auth" rel="noopener noreferrer"&gt;"an OAuth 2.1 flow that conforms to the MCP authorization spec"&lt;/a&gt;, with "Client ID Metadata Documents (CIMD), dynamic client registration (DCR), predefined OAuth clients, and PKCE."&lt;/p&gt;

&lt;p&gt;The practical consequence is that identity must line up across clients. The account on the memory host is what is shared. The session is not.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.devin.ai/cli/extensibility/mcp/configuration" rel="noopener noreferrer"&gt;Devin&lt;/a&gt; states this directly: "Each MCP client (Windsurf, Claude Code, Devin CLI) maintains its own OAuth session, so you must log in separately even if you've already authenticated in another tool." &lt;a href="https://help.getzep.com/use-zep-in-claude-chatgpt" rel="noopener noreferrer"&gt;Zep&lt;/a&gt; says each person "signs in with a work email and reaches their own Zep user graph in the selected Zep project."&lt;/p&gt;

&lt;p&gt;A plugin install is not a universal installation event. Zep: "A plugin install in the Claude app or in ChatGPT does not install the plugin in these coding agents." Each coding tool still needs its own remote MCP entry. How such sharing can stop while every client looks healthy: &lt;a href="https://mnemoverse.com/docs/library/mcp-servers-sharing-state-across-ides" rel="noopener noreferrer"&gt;MCP servers that share state across IDEs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Code, Cursor, VS Code, Devin, and Codex setup
&lt;/h2&gt;

&lt;p&gt;Each coding client has its own place for remote MCP configuration. Its built-in memory also stays separate from the external layer.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Coding tool&lt;/th&gt;
&lt;th&gt;Remote MCP configuration&lt;/th&gt;
&lt;th&gt;Built-in memory&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;claude mcp add --transport http &amp;lt;name&amp;gt; &amp;lt;url&amp;gt;&lt;/code&gt;; OAuth sign-in through &lt;code&gt;/mcp&lt;/code&gt;; a team entry can live in &lt;code&gt;.mcp.json&lt;/code&gt; "at your project's root directory"&lt;/td&gt;
&lt;td&gt;&lt;a href="https://code.claude.com/docs/en/memory" rel="noopener noreferrer"&gt;"Auto memory is machine-local."&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cursor&lt;/td&gt;
&lt;td&gt;A &lt;code&gt;url&lt;/code&gt; under &lt;code&gt;mcpServers&lt;/code&gt; in &lt;code&gt;~/.cursor/mcp.json&lt;/code&gt;; "Cursor supports OAuth for servers that require it."&lt;/td&gt;
&lt;td&gt;&lt;a href="https://cursor.com/docs/rules" rel="noopener noreferrer"&gt;"Rules provide persistent, reusable context at the prompt level."&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VS Code&lt;/td&gt;
&lt;td&gt;Workspace-root &lt;code&gt;.mcp.json&lt;/code&gt; uses &lt;code&gt;mcpServers&lt;/code&gt; and is listed as &lt;a href="https://code.visualstudio.com/docs/agent-customization/mcp-servers" rel="noopener noreferrer"&gt;"Preferred for configurations that you share with your team and compatible tools."&lt;/a&gt;; &lt;code&gt;.vscode/mcp.json&lt;/code&gt; uses &lt;code&gt;servers&lt;/code&gt;; &lt;a href="https://code.visualstudio.com/docs/agents/reference/mcp-configuration" rel="noopener noreferrer"&gt;"A browser window opens for authorization on the first connection to the server."&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href="https://code.visualstudio.com/docs/agents/run/memory" rel="noopener noreferrer"&gt;"User, repository, and session memory are stored locally on your machine."&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Devin Local or CLI&lt;/td&gt;
&lt;td&gt;Local configuration files; the CLI adds servers with &lt;code&gt;devin mcp add&lt;/code&gt; (by default to &lt;code&gt;.devin/mcp_config.local.json&lt;/code&gt;; &lt;code&gt;-s user&lt;/code&gt; writes &lt;code&gt;~/.config/devin/mcp_config.json&lt;/code&gt;) and signs in with &lt;code&gt;devin mcp login&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.devin.ai/desktop/devin-local" rel="noopener noreferrer"&gt;"The Devin Local agent does not persist memories between sessions."&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;~/.codex/config.toml&lt;/code&gt;, shared by the ChatGPT desktop app, Codex CLI and IDE extension; &lt;code&gt;codex mcp login &amp;lt;server-name&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Local memories live under &lt;code&gt;~/.codex/memories/&lt;/code&gt; and &lt;a href="https://learn.chatgpt.com/docs/customization/memories" rel="noopener noreferrer"&gt;"are off by default."&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Claude Code: &lt;a href="https://code.claude.com/docs/en/mcp" rel="noopener noreferrer"&gt;"HTTP servers are the recommended option for connecting to remote MCP servers."&lt;/a&gt; It supports OAuth 2.0. &lt;a href="https://cursor.com/docs/mcp" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt; reads a global &lt;code&gt;~/.cursor/mcp.json&lt;/code&gt; "for tools available everywhere". VS Code's Settings Sync can carry "MCP server configurations" between machines; its documentation lists no memory sync, and memory is "stored locally on your machine."&lt;/p&gt;

&lt;p&gt;Codex supports CIMD and DCR for OAuth (&lt;a href="https://learn.chatgpt.com/docs/extend/mcp" rel="noopener noreferrer"&gt;Codex MCP&lt;/a&gt;). Its &lt;code&gt;memories.disable_on_external_context&lt;/code&gt; setting, "when true, keeps chats that used external context such as MCP tool calls, web search, or tool search out of memory generation."&lt;/p&gt;

&lt;p&gt;These settings matter because an external memory service and a client's native memory can both be active. They remain different stores with different controls. For which client holds whose memory, see &lt;a href="https://mnemoverse.com/docs/library/mcp-memory-servers-claude-code-and-cursor" rel="noopener noreferrer"&gt;MCP memory servers for Claude Code and Cursor&lt;/a&gt;; for what MCP itself standardizes, &lt;a href="https://mnemoverse.com/docs/library/what-is-an-mcp-memory-server" rel="noopener noreferrer"&gt;What is an MCP memory server?&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What a connected memory server can see
&lt;/h2&gt;

&lt;p&gt;A connected MCP server does not receive ChatGPT's internal memory store.&lt;/p&gt;

&lt;p&gt;OpenAI warns that a server &lt;a href="https://developers.openai.com/api/docs/mcp" rel="noopener noreferrer"&gt;"will have access to whatever data ChatGPT supplies during the interaction, potentially including sensitive data the user may earlier have provided to ChatGPT."&lt;/a&gt; Its &lt;a href="https://developers.openai.com/plugins/plugin-guidelines" rel="noopener noreferrer"&gt;plugin guidelines&lt;/a&gt; set the boundary: "Your MCP server must not pull, reconstruct, or infer the full chat log from the client or elsewhere."&lt;/p&gt;

&lt;p&gt;The plugin and MCP paths bring tools into ChatGPT, not ChatGPT memory out of it. OpenAI's developer guides and API reference, read 2026-10-10, describe no endpoint that reads or writes ChatGPT memory. &lt;a href="https://help.openai.com/en/articles/20001410-sign-in-with-chatgpt" rel="noopener noreferrer"&gt;Sign in with ChatGPT&lt;/a&gt; "does not independently share" "Your ChatGPT conversations or memory." Uploading exported conversations to another account does not &lt;a href="https://help.openai.com/en/articles/9106926-transfer-exported-conversations-between-chatgpt-accounts" rel="noopener noreferrer"&gt;"Transfer custom instructions, memories, GPTs, or other account settings."&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Enterprise &lt;a href="https://chatgpt.com/public/admin/api-reference/openapi.json" rel="noopener noreferrer"&gt;Compliance API&lt;/a&gt; is narrower still. Read 2026-10-09, its memory endpoints cover "exporting and spot-deleting ChatGPT Enterprise workspace Memories." They read or delete; none writes.&lt;/p&gt;

&lt;p&gt;Connected apps can still touch ChatGPT memory from inside ChatGPT. &lt;a href="https://help.openai.com/en/articles/11487775-connected-apps-in-chatgpt" rel="noopener noreferrer"&gt;OpenAI says&lt;/a&gt; an app responding to you "may also leverage relevant information from memories", so that "the app may access and use relevant context from your memories", and "ChatGPT may remember relevant information accessed from the app, unless that app or connected source restricts Memory from saving that information."&lt;/p&gt;

&lt;p&gt;Data-use settings also apply. The same page: "For ChatGPT Business, Enterprise, and Edu customers: OpenAI does not use information accessed from connectors to train models by default. For ChatGPT Free, Plus, Go, and Pro users: OpenAI may use information accessed from apps to train our models if your 'Improve the model for everyone' setting is on."&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory-layer options documented by vendors
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Each row summarizes the vendor's own documentation, read 2026-10-09 and re-checked 2026-10-10. The rows are documentation claims, not a ranking and not a test.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Memory layer&lt;/th&gt;
&lt;th&gt;ChatGPT route&lt;/th&gt;
&lt;th&gt;Coding route&lt;/th&gt;
&lt;th&gt;Documented limitation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Basic Memory Cloud&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.basicmemory.com/integrations/chatgpt" rel="noopener noreferrer"&gt;Published plugin&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Any MCP client: &lt;a href="https://docs.basicmemory.com/integrations/codex" rel="noopener noreferrer"&gt;"Notes created in Codex are immediately available in Claude Code, Cursor, Claude Desktop, or any other MCP client."&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;The hosted Basic Memory Cloud is required for ChatGPT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supermemory&lt;/td&gt;
&lt;td&gt;Plugin Directory entry, or the documented &lt;a href="https://supermemory.ai/docs/supermemory-mcp/chatgpt-web" rel="noopener noreferrer"&gt;ChatGPT Web&lt;/a&gt; MCP setup&lt;/td&gt;
&lt;td&gt;OAuth remote MCP, &lt;a href="https://supermemory.ai/docs/supermemory-mcp/mcp" rel="noopener noreferrer"&gt;"a shared memory layer"&lt;/a&gt; for MCP-compatible assistants&lt;/td&gt;
&lt;td&gt;Its browser extension was removed from its repository on 7 September 2026 (&lt;a href="https://github.com/supermemoryai/supermemory/commit/5258cb74" rel="noopener noreferrer"&gt;commit&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cognee Cloud&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://docs.cognee.ai/cognee-cloud/connections/cloud-mcp" rel="noopener noreferrer"&gt;Developer mode&lt;/a&gt;; connectors "are tied to your ChatGPT account, so the web and desktop apps share them"&lt;/td&gt;
&lt;td&gt;"Any client that supports remote MCP servers with OAuth", including Claude Code&lt;/td&gt;
&lt;td&gt;Developer mode, so OpenAI's plan limits apply&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zep&lt;/td&gt;
&lt;td&gt;Plugin; hosts include "ChatGPT (Business, Enterprise, or Edu)" (&lt;a href="https://help.getzep.com/use-zep-in-claude-chatgpt" rel="noopener noreferrer"&gt;Zep&lt;/a&gt;)&lt;/td&gt;
&lt;td&gt;Help centre: plugin in Claude Code, Codex CLI and Cursor (Teams or Enterprise); remote MCP with OAuth for VS Code, GitHub Copilot and Gemini CLI&lt;/td&gt;
&lt;td&gt;"The plugin does not work in the Codex IDE extension." "The plugin does not ingest a codebase." The README of the plugin's own repository says it is "Not positioned for Claude Code, Codex, or other coding-agent CLIs" (&lt;a href="https://mnemoverse.com/docs/library/mcp-memory-servers-claude-code-and-cursor" rel="noopener noreferrer"&gt;details&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mem0&lt;/td&gt;
&lt;td&gt;OpenMemory browser extension, still installable from its &lt;a href="https://chromewebstore.google.com/detail/openmemory/onihkkbipkfeijkadecaafbgagkhglop" rel="noopener noreferrer"&gt;Chrome Web Store card&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://docs.mem0.ai/platform/mem0-mcp" rel="noopener noreferrer"&gt;Mem0 MCP&lt;/a&gt; for "Claude, Claude Code, Codex, Cursor, Windsurf, VS Code, OpenCode"&lt;/td&gt;
&lt;td&gt;ChatGPT is not described as a Mem0 MCP client; the extension's &lt;a href="https://github.com/mem0ai/mem0-chrome-extension" rel="noopener noreferrer"&gt;source&lt;/a&gt; is archived since 23 March 2026, and Mem0 removed the OpenMemory project from its monorepo in July 2026 (&lt;a href="https://mnemoverse.com/docs/library/memory-mcp-servers-compared" rel="noopener noreferrer"&gt;details&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Letta&lt;/td&gt;
&lt;td&gt;No documented ChatGPT MCP path&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://docs.letta.com/platform/hosted-mcp/" rel="noopener noreferrer"&gt;Hosted MCP&lt;/a&gt; for clients "such as Claude Code, Cursor, or another agent"&lt;/td&gt;
&lt;td&gt;"The client must support custom bearer headers; OAuth-only clients are not supported yet."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MemoryLake&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://www.memorylake.ai/en/integrations/chatgpt" rel="noopener noreferrer"&gt;Developer-mode plugin&lt;/a&gt;: "paste your Server URL, with No Auth as the authentication method."&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://www.memorylake.ai/en/integrations/mcp" rel="noopener noreferrer"&gt;"Every client that speaks MCP"&lt;/a&gt;, naming Claude Code and Cursor&lt;/td&gt;
&lt;td&gt;Its ChatGPT page uses No Auth; its &lt;a href="https://docs.memorylake.ai/features/memorylake/mcp-servers/creating-api-keys" rel="noopener noreferrer"&gt;MCP docs&lt;/a&gt; describe "standard OAuth2" for remote MCP clients&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plurality AI Context Flow&lt;/td&gt;
&lt;td&gt;Browser extension for Chrome, Opera, Edge and Brave, or MCP&lt;/td&gt;
&lt;td&gt;MCP server&lt;/td&gt;
&lt;td&gt;The extension carries the ChatGPT side&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MemoryPlugin&lt;/td&gt;
&lt;td&gt;Browser extension, or a Custom GPT&lt;/td&gt;
&lt;td&gt;Hosted or local MCP server&lt;/td&gt;
&lt;td&gt;The Custom GPT route depends on custom GPTs, which "are scheduled to retire on Dec 11, 2026"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memwyre&lt;/td&gt;
&lt;td&gt;A Chrome and Edge extension clips decisions from ChatGPT conversations into its memory graph; a Custom GPT Action searches and saves memory&lt;/td&gt;
&lt;td&gt;Queries in Claude Code, Cursor and the terminal&lt;/td&gt;
&lt;td&gt;The two-way ChatGPT path is a Custom GPT Action, and custom GPTs "are scheduled to retire on Dec 11, 2026"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pieces&lt;/td&gt;
&lt;td&gt;Local MCP exposed through ngrok or an HTTPS proxy&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://docs.pieces.app/products/mcp" rel="noopener noreferrer"&gt;Pieces MCP&lt;/a&gt; for Claude Code, Cursor, VS Code and JetBrains&lt;/td&gt;
&lt;td&gt;"PiecesOS must be running locally", and the tunnel must stay active&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mnemoverse (the author's company; vendor row)&lt;/td&gt;
&lt;td&gt;Custom MCP server added by URL, with browser sign-in; no Plugin Directory card in the 2026-10-09 search&lt;/td&gt;
&lt;td&gt;Claude Code, Cursor, VS Code, Devin Desktop, Codex CLI and IDE extension (&lt;a href="https://mnemoverse.com/docs/api/install-by-host" rel="noopener noreferrer"&gt;install by host&lt;/a&gt;)&lt;/td&gt;
&lt;td&gt;Submitted to the Plugin Directory, not listed as of 2026-10-11; &lt;code&gt;vault_list&lt;/code&gt; withheld in ChatGPT (&lt;a href="https://mnemoverse.com/docs/api/tool-availability" rel="noopener noreferrer"&gt;tool availability&lt;/a&gt;); the owner reported on 2026-10-11 that sign-in from Codex and Devin works, with no memory call recorded, so &lt;a href="https://mnemoverse.com/docs/api/install-by-host" rel="noopener noreferrer"&gt;install by host&lt;/a&gt; still marks those routes not verified live. Own check, 2026-09-27: an existing connector on ChatGPT Pro passed a stats call, a write and a read; sign-in, custom MCP server creation and Plus were not tested&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mnemoverse, the author's company, is the vendor row above. Its hosted server is &lt;code&gt;https://mcp.mnemoverse.com/mcp&lt;/code&gt; (&lt;a href="https://mnemoverse.com/docs/api/remote-mcp-server" rel="noopener noreferrer"&gt;remote MCP server&lt;/a&gt;, &lt;a href="https://mnemoverse.com/docs/api/chatgpt" rel="noopener noreferrer"&gt;ChatGPT&lt;/a&gt;), so OpenAI's plan limits apply to it as they do to every layer added as a custom MCP server. Its account rule: &lt;a href="https://mnemoverse.com/docs/api/use-cases/chat-extensions" rel="noopener noreferrer"&gt;"a fact stored in one tool is available to every other tool on that account."&lt;/a&gt; &lt;a href="https://mnemoverse.com/docs/api/rooms" rel="noopener noreferrer"&gt;Rooms&lt;/a&gt;, in Beta, is a memory space shared across Mnemoverse accounts.&lt;/p&gt;

&lt;h2&gt;
  
  
  OpenAI's Computer History and dots
&lt;/h2&gt;

&lt;p&gt;OpenAI offers two narrower bridges between ChatGPT context and local work.&lt;/p&gt;

&lt;p&gt;Computer History &lt;a href="https://learn.chatgpt.com/docs/customization/computer-history" rel="noopener noreferrer"&gt;"turns your activity across apps and websites into memories and a timeline that ChatGPT and Codex can reference."&lt;/a&gt; It "is off by default for ChatGPT Pro, Business, and Enterprise users in the ChatGPT desktop app on macOS." It generates "the same kind of local memories as Codex": plain-text Markdown files that, in OpenAI's words, "other programs running as your macOS user may be able to access". It "also requires Memories and is not available with an API key or Amazon Bedrock."&lt;/p&gt;

&lt;p&gt;A dot &lt;a href="https://learn.chatgpt.com/docs/dots/tasks-and-memory" rel="noopener noreferrer"&gt;"starts with relevant context from ChatGPT memory"&lt;/a&gt;, but its notes are "separate from ChatGPT's saved memory". &lt;a href="https://help.openai.com/en/articles/20001530-getting-started-with-your-dot" rel="noopener noreferrer"&gt;"With local computer access enabled, your dot can create Work or Codex tasks"&lt;/a&gt;, and connecting a computer takes the ChatGPT desktop app on that machine. A dot can be created "in the ChatGPT mobile app on iOS or Android, the desktop app, or on desktop web", but "Dots are not supported on mobile web."&lt;/p&gt;

&lt;p&gt;OpenAI's &lt;a href="https://help.openai.com/en/articles/6825453-chatgpt-release-notes" rel="noopener noreferrer"&gt;release notes&lt;/a&gt; of September 29, 2026 describe a gradual rollout "to eligible Pro and Business Premium users aged 18 and older in supported markets", and "Pro access excludes the European Economic Area, Switzerland, and the UK at launch." &lt;a href="https://help.openai.com/en/articles/20001530-getting-started-with-your-dot" rel="noopener noreferrer"&gt;OpenAI's dot article&lt;/a&gt; adds that for Enterprise, including Edu and Healthcare, the beta must be enabled by the workspace admin and is off by default.&lt;/p&gt;

&lt;p&gt;Custom GPTs are not a durable substitute. OpenAI's &lt;a href="https://help.openai.com/en/articles/20001519-custom-gpt-retirement-and-migration-faq" rel="noopener noreferrer"&gt;retirement FAQ&lt;/a&gt; says they "are scheduled to retire on Dec 11, 2026"; "For affected Enterprise workspaces with an approved deferral, the retirement date is Feb 11, 2027." For affected Enterprise workspaces it also lists "Oct 26, 2026 (planned): Creation of new custom GPTs ends," and notes that "the dates are subject to change." &lt;a href="https://help.openai.com/en/articles/8554397-creating-a-gpt" rel="noopener noreferrer"&gt;Personal accounts&lt;/a&gt; "cannot create or publish new GPTs", and &lt;a href="https://learn.chatgpt.com/docs/migrate-custom-gpts" rel="noopener noreferrer"&gt;"Custom actions do not transfer through the migration workflow."&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Six steps to one memory in ChatGPT and your coding tools
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Check what your ChatGPT plan allows on OpenAI's help article and developer guide quoted above.&lt;/li&gt;
&lt;li&gt;Pick a layer whose ChatGPT side is documented, and the bridge you want: plugin, custom MCP server, extension or tunnel.&lt;/li&gt;
&lt;li&gt;In ChatGPT on the web, add the layer's plugin from the Plugin Directory, or its server as a custom MCP server by &lt;a href="https://developers.openai.com/plugins/deploy/connect-chatgpt" rel="noopener noreferrer"&gt;Connect to ChatGPT&lt;/a&gt;; a server on your machine goes through &lt;a href="https://developers.openai.com/api/docs/guides/secure-mcp-tunnels" rel="noopener noreferrer"&gt;Secure MCP Tunnel&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;In each coding tool, add the same server address to its MCP configuration, and sign in there if the layer uses OAuth.&lt;/li&gt;
&lt;li&gt;Use the same layer account everywhere.&lt;/li&gt;
&lt;li&gt;Expect write actions to ask for confirmation by default, and the server to see what ChatGPT supplies in the conversation.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Common questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What options exist for connecting an AI agent memory layer across both ChatGPT web interfaces and localized coding environments?
&lt;/h3&gt;

&lt;p&gt;As of 2026-10-09, four are documented: a hosted memory layer over remote MCP, connected separately to ChatGPT and to each coding tool; a browser extension inside ChatGPT paired with an MCP server; a local MCP server exposed to ChatGPT through a tunnel; and OpenAI's Computer History or dots, which bridge ChatGPT and Codex through the ChatGPT desktop app. One memory everywhere means the same layer account in every client.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can an external memory layer read ChatGPT's saved memory?
&lt;/h3&gt;

&lt;p&gt;Not directly: OpenAI documents no interface that gives a memory layer read or write access to ChatGPT's memory, read 2026-10-10. A connected app gets what ChatGPT supplies during an interaction, and with Memory on that can include relevant context from your memories. In the other direction, ChatGPT may remember relevant information it got from an app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does connecting a memory plugin in ChatGPT also connect Claude Code, Cursor, VS Code, or Codex?
&lt;/h3&gt;

&lt;p&gt;No. Each coding client needs its own MCP configuration and, when OAuth is used, its own sign-in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which ChatGPT plans support custom remote MCP servers?
&lt;/h3&gt;

&lt;p&gt;OpenAI's help article says custom MCP server connections and full MCP support are available for Business and Enterprise/Edu on ChatGPT web, while Pro can connect custom MCP servers with read and fetch permissions. Neither that article nor OpenAI's custom MCP developer guide names Plus, read 2026-10-17.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do ChatGPT MCP apps work on mobile?
&lt;/h3&gt;

&lt;p&gt;OpenAI documents custom MCP server connections as web only. Published plugins work across ChatGPT web, desktop, and mobile, although availability can still depend on plan, region, workspace settings, and role.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can ChatGPT and local Codex use the same built-in memory?
&lt;/h3&gt;

&lt;p&gt;OpenAI documents ChatGPT memory and local Codex memory as separate stores. Computer History and dots are OpenAI's bridges for eligible users, with platform, plan, market, and mobile restrictions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;Every page below was read on 2026-10-09, and every quotation on this page was re-checked against its page on 2026-10-10 and again on 2026-10-17. On 2026-10-10 help.openai.com refused scripted fetches, so its articles were re-checked against archived copies dated 2026-09-08 to 2026-10-08, and the Compliance API specification could not be re-fetched; on 2026-10-17 both were read live through the r.jina.ai reader. The Plugin Directory search could not be re-run and rests on the 2026-10-09 reading.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenAI: ChatGPT help center
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://help.openai.com/en/articles/12584461-connecting-custom-mcp-servers-in-chatgpt" rel="noopener noreferrer"&gt;Connecting custom MCP servers in ChatGPT&lt;/a&gt;; &lt;a href="https://help.openai.com/en/articles/20001256-plugins-in-chatgpt" rel="noopener noreferrer"&gt;Plugins in ChatGPT&lt;/a&gt;; &lt;a href="https://help.openai.com/en/articles/11487775-connected-apps-in-chatgpt" rel="noopener noreferrer"&gt;Connected apps in ChatGPT&lt;/a&gt;; &lt;a href="https://help.openai.com/en/articles/20001410-sign-in-with-chatgpt" rel="noopener noreferrer"&gt;Sign in with ChatGPT&lt;/a&gt;; &lt;a href="https://help.openai.com/en/articles/6825453-chatgpt-release-notes" rel="noopener noreferrer"&gt;ChatGPT release notes&lt;/a&gt;, entry of September 29, 2026; &lt;a href="https://help.openai.com/en/articles/9106926-transfer-exported-conversations-between-chatgpt-accounts" rel="noopener noreferrer"&gt;Transfer exported conversations between ChatGPT accounts&lt;/a&gt;; &lt;a href="https://help.openai.com/en/articles/20001530-getting-started-with-your-dot" rel="noopener noreferrer"&gt;Getting started with your dot&lt;/a&gt;; &lt;a href="https://help.openai.com/en/articles/20001519-custom-gpt-retirement-and-migration-faq" rel="noopener noreferrer"&gt;Custom GPT retirement and migration FAQ&lt;/a&gt;; &lt;a href="https://help.openai.com/en/articles/8554397-creating-a-gpt" rel="noopener noreferrer"&gt;Creating and editing GPTs&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  OpenAI: developer documentation and API references
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developers.openai.com/api/docs/guides/custom-mcp-server" rel="noopener noreferrer"&gt;Custom MCP server guide&lt;/a&gt;; &lt;a href="https://developers.openai.com/api/docs/guides/secure-mcp-tunnels" rel="noopener noreferrer"&gt;Secure MCP Tunnel&lt;/a&gt;; &lt;a href="https://developers.openai.com/api/docs/mcp" rel="noopener noreferrer"&gt;MCP&lt;/a&gt;; &lt;a href="https://developers.openai.com/plugins/build/auth" rel="noopener noreferrer"&gt;Plugin auth&lt;/a&gt;; &lt;a href="https://developers.openai.com/plugins/plugin-guidelines" rel="noopener noreferrer"&gt;Plugin guidelines&lt;/a&gt;; &lt;a href="https://developers.openai.com/plugins/quickstart" rel="noopener noreferrer"&gt;Plugins quickstart&lt;/a&gt;; &lt;a href="https://developers.openai.com/plugins/deploy/connect-chatgpt" rel="noopener noreferrer"&gt;Connect to ChatGPT&lt;/a&gt;; &lt;a href="https://github.com/openai/openai-openapi" rel="noopener noreferrer"&gt;API reference, openai-openapi&lt;/a&gt;; &lt;a href="https://chatgpt.com/public/admin/api-reference/openapi.json" rel="noopener noreferrer"&gt;Compliance API specification&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;learn.chatgpt.com: &lt;a href="https://learn.chatgpt.com/docs/customization/memories" rel="noopener noreferrer"&gt;Memories&lt;/a&gt;; &lt;a href="https://learn.chatgpt.com/docs/customization/computer-history" rel="noopener noreferrer"&gt;Computer History&lt;/a&gt;; &lt;a href="https://learn.chatgpt.com/docs/dots/tasks-and-memory" rel="noopener noreferrer"&gt;Dots: tasks and memory&lt;/a&gt;; &lt;a href="https://learn.chatgpt.com/docs/extend/mcp" rel="noopener noreferrer"&gt;MCP&lt;/a&gt;; &lt;a href="https://learn.chatgpt.com/docs/plugins" rel="noopener noreferrer"&gt;Plugins&lt;/a&gt;; &lt;a href="https://learn.chatgpt.com/docs/migrate-custom-gpts" rel="noopener noreferrer"&gt;Migrate custom GPTs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://chatgpt.com/plugins" rel="noopener noreferrer"&gt;ChatGPT Plugin Directory&lt;/a&gt;, searched by name; &lt;a href="https://chatgpt.com/plugins/plugin_asdk_app_6a49590bf6348191a16c0b87ca6b01b4" rel="noopener noreferrer"&gt;Basic Memory Cloud plugin page&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Coding tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code: &lt;a href="https://code.claude.com/docs/en/mcp" rel="noopener noreferrer"&gt;MCP&lt;/a&gt;; &lt;a href="https://code.claude.com/docs/en/memory" rel="noopener noreferrer"&gt;Memory&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Cursor: &lt;a href="https://cursor.com/docs/mcp" rel="noopener noreferrer"&gt;MCP&lt;/a&gt;; &lt;a href="https://cursor.com/docs/rules" rel="noopener noreferrer"&gt;Rules&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;VS Code: &lt;a href="https://code.visualstudio.com/docs/agent-customization/mcp-servers" rel="noopener noreferrer"&gt;MCP servers&lt;/a&gt;; &lt;a href="https://code.visualstudio.com/docs/agents/reference/mcp-configuration" rel="noopener noreferrer"&gt;MCP configuration reference&lt;/a&gt;; &lt;a href="https://code.visualstudio.com/docs/agents/run/memory" rel="noopener noreferrer"&gt;Memory&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Devin: &lt;a href="https://docs.devin.ai/desktop/devin-local" rel="noopener noreferrer"&gt;Devin Local&lt;/a&gt;; &lt;a href="https://docs.devin.ai/cli/extensibility/mcp/configuration" rel="noopener noreferrer"&gt;Devin CLI, MCP configuration&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Memory layers and extensions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Supermemory: &lt;a href="https://supermemory.ai/docs/supermemory-mcp/chatgpt-web" rel="noopener noreferrer"&gt;ChatGPT Web&lt;/a&gt;; &lt;a href="https://supermemory.ai/docs/supermemory-mcp/setup" rel="noopener noreferrer"&gt;Setup&lt;/a&gt;; &lt;a href="https://supermemory.ai/docs/supermemory-mcp/mcp" rel="noopener noreferrer"&gt;Supermemory MCP&lt;/a&gt;; repository &lt;a href="https://github.com/supermemoryai/supermemory/commit/5258cb74" rel="noopener noreferrer"&gt;commit 5258cb74&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Basic Memory: &lt;a href="https://docs.basicmemory.com/integrations/chatgpt" rel="noopener noreferrer"&gt;ChatGPT&lt;/a&gt;; &lt;a href="https://docs.basicmemory.com/integrations/codex" rel="noopener noreferrer"&gt;Codex&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Cognee: &lt;a href="https://docs.cognee.ai/cognee-cloud/connections/cloud-mcp" rel="noopener noreferrer"&gt;Cloud MCP&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Zep: &lt;a href="https://help.getzep.com/use-zep-in-claude-chatgpt" rel="noopener noreferrer"&gt;Use Zep in Claude and ChatGPT&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Mem0: &lt;a href="https://docs.mem0.ai/platform/mem0-mcp" rel="noopener noreferrer"&gt;Mem0 MCP&lt;/a&gt;, and the full docs site; &lt;a href="https://github.com/mem0ai/mem0-chrome-extension" rel="noopener noreferrer"&gt;mem0-chrome-extension repository&lt;/a&gt;; &lt;a href="https://chromewebstore.google.com/detail/openmemory/onihkkbipkfeijkadecaafbgagkhglop" rel="noopener noreferrer"&gt;OpenMemory in the Chrome Web Store&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Letta: &lt;a href="https://docs.letta.com/platform/hosted-mcp/" rel="noopener noreferrer"&gt;Hosted MCP&lt;/a&gt;, and the full docs site.&lt;/li&gt;
&lt;li&gt;MemoryLake: &lt;a href="https://www.memorylake.ai/en/integrations/chatgpt" rel="noopener noreferrer"&gt;ChatGPT&lt;/a&gt;; &lt;a href="https://www.memorylake.ai/en/integrations/mcp" rel="noopener noreferrer"&gt;MCP&lt;/a&gt;; &lt;a href="https://docs.memorylake.ai/features/memorylake/mcp-servers/creating-api-keys" rel="noopener noreferrer"&gt;Connect via MCP&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Plurality: &lt;a href="https://plurality.network/blogs/how-to-sync-ai-memory-across-all-tools/" rel="noopener noreferrer"&gt;How to sync AI memory across all tools&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;MemoryPlugin: &lt;a href="https://www.memoryplugin.com/" rel="noopener noreferrer"&gt;memoryplugin.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Memwyre: &lt;a href="https://memwyre.tech/chatgpt-memory" rel="noopener noreferrer"&gt;ChatGPT memory&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Pieces: &lt;a href="https://docs.pieces.app/products/mcp/chatgpt-developer-mode" rel="noopener noreferrer"&gt;ChatGPT developer mode&lt;/a&gt;; &lt;a href="https://docs.pieces.app/products/mcp" rel="noopener noreferrer"&gt;Pieces MCP&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mnemoverse.com/docs/library/mcp-servers-sharing-state-across-ides" rel="noopener noreferrer"&gt;MCP servers that share state across IDEs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mnemoverse.com/docs/library/mcp-memory-servers-claude-code-and-cursor" rel="noopener noreferrer"&gt;MCP memory servers for Claude Code and Cursor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mnemoverse.com/docs/library/what-survives-when-ai-agents-restart" rel="noopener noreferrer"&gt;What survives when AI agents restart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Reference: &lt;a href="https://mnemoverse.com/docs/api/chatgpt" rel="noopener noreferrer"&gt;ChatGPT&lt;/a&gt;, &lt;a href="https://mnemoverse.com/docs/api/remote-mcp-server" rel="noopener noreferrer"&gt;remote MCP server&lt;/a&gt;, &lt;a href="https://mnemoverse.com/docs/api/install-by-host" rel="noopener noreferrer"&gt;install by host&lt;/a&gt;, &lt;a href="https://mnemoverse.com/docs/api/tool-availability" rel="noopener noreferrer"&gt;where each tool works&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Edward Izgorodin · Mnemoverse · 2026-10-17&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>programming</category>
      <category>mcp</category>
    </item>
    <item>
      <title>How to maintain session knowledge across a fleet of specialized developer bots?</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Sat, 17 Oct 2026 06:21:00 +0000</pubDate>
      <link>https://dev.to/izgorodin/how-to-maintain-session-knowledge-across-a-fleet-of-specialized-developer-bots-m8m</link>
      <guid>https://dev.to/izgorodin/how-to-maintain-session-knowledge-across-a-fleet-of-specialized-developer-bots-m8m</guid>
      <description>&lt;p&gt;On Monday the test-fixer bot spends a whole run finding out why &lt;code&gt;test_refund_webhook&lt;/code&gt; fails about once a day: it shares a Redis database with &lt;code&gt;test_retry_queue&lt;/code&gt; and fails whenever it runs second. The bot opens a fix and the run ends. On Wednesday the reviewer bot meets the same failure on a branch cut before the fix and asks the author to look into a flaky test. On Friday the release bot holds the release over it. Each bot did its job. What the fleet learned on Monday lived in one run's context and ended with it.&lt;/p&gt;

&lt;p&gt;The short answer: treat every bot run as a session that starts empty, and keep what the fleet learns in one store outside the runs. Each bot reads from it before it acts and writes to it the moment it concludes something that will still hold on its next run. What only its role needs goes to a scope of its own, what any bot could trip over goes to one project scope that every bot reads, and a bot catching up on what the others found lists everything new since its last run instead of searching for it. When the bots run under different accounts, the shared scope moves to a store both accounts are members of.&lt;/p&gt;

&lt;h2&gt;
  
  
  Session state and session knowledge
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Session state&lt;/strong&gt; is what a run holds while it works: the diff, the logs, the plan for its next step. &lt;strong&gt;Session knowledge&lt;/strong&gt; is what the run concluded that will still be true on the next run: a diagnosis, a fact about the repository, a warning for the bot that comes after. State should end with the run. Knowledge is what the fleet loses when it does.&lt;/p&gt;

&lt;p&gt;A fleet loses it faster than a single assistant. Every run is a fresh process started by a webhook or a CI job, no person in the loop remembers, and the bot that finds a fact is rarely the one that needs it next. The SAMEP paper (&lt;a href="https://arxiv.org/abs/2507.10562" rel="noopener noreferrer"&gt;arXiv:2507.10562&lt;/a&gt;) opens its abstract with both gaps: "Current AI agent architectures suffer from ephemeral memory limitations, preventing effective collaboration and knowledge sharing across sessions and agent boundaries." Between runs is the session boundary; between bots, the agent boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three kinds of knowledge, three readers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Kind&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Written by&lt;/th&gt;
&lt;th&gt;Read by&lt;/th&gt;
&lt;th&gt;Where it goes&lt;/th&gt;
&lt;th&gt;How it is read&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Role lesson&lt;/td&gt;
&lt;td&gt;"Maintainers here reject a new dependency without a lockfile change"&lt;/td&gt;
&lt;td&gt;the reviewer&lt;/td&gt;
&lt;td&gt;the reviewer&lt;/td&gt;
&lt;td&gt;the reviewer's own scope&lt;/td&gt;
&lt;td&gt;search by the task at hand&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repository fact&lt;/td&gt;
&lt;td&gt;"&lt;code&gt;test_refund_webhook&lt;/code&gt; fails after &lt;code&gt;test_retry_queue&lt;/code&gt;: both use Redis database 0"&lt;/td&gt;
&lt;td&gt;the bot that confirmed it&lt;/td&gt;
&lt;td&gt;every bot&lt;/td&gt;
&lt;td&gt;the project scope&lt;/td&gt;
&lt;td&gt;search by the task at hand&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Handoff&lt;/td&gt;
&lt;td&gt;"PR 812 adds migration 0042; deploy it before the worker change in PR 815"&lt;/td&gt;
&lt;td&gt;the bot that found it&lt;/td&gt;
&lt;td&gt;the next role&lt;/td&gt;
&lt;td&gt;the project scope&lt;/td&gt;
&lt;td&gt;list everything since the last run&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The third row is the one fleets miss. A handoff is addressed to a role, not to a question, and the release bot does not know to ask about migration 0042. A search returns what resembles the query, so a handoff unlike anything the release bot asks stays out of the results, and nothing in them shows it was missed. Hence the rule: &lt;strong&gt;search for lessons, list for handoffs.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  One run, start to finish
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Read its own scope, then the project scope&lt;/strong&gt;, with the task as the query.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;List what is new in the project scope&lt;/strong&gt; since this bot's last run, and keep the time this run started, not ended, for the next one.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Do the work.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write each conclusion when it is reached&lt;/strong&gt;, not in a summary at the end: a CI job that hits its timeout is killed mid-run. Write the sentence for a bot that never saw this run, with its evidence ("seen in CI runs 4411 and 4417").&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  If every bot in the fleet is GitHub's own
&lt;/h2&gt;

&lt;p&gt;Then sharing what one bot learns about the repository is built in. GitHub's page &lt;a href="https://docs.github.com/en/copilot/concepts/agents/copilot-memory" rel="noopener noreferrer"&gt;About GitHub Copilot Memory&lt;/a&gt; says Copilot Memory "is currently used by Copilot cloud agent, Copilot code review, Copilot CLI, and agentic autofix", and that "Facts and preferences captured by one Copilot feature can be used by another." Repository facts there "are stored with citations pointing to the code that supports them", which Copilot checks against the current branch before it uses a fact. The feature is in public preview. The rest of this article is for bots you build yourself, which share only what they write to a store they all call.&lt;/p&gt;

&lt;h2&gt;
  
  
  A minimal version in code
&lt;/h2&gt;

&lt;p&gt;The code below uses &lt;a href="https://mnemoverse.com/docs/api/getting-started" rel="noopener noreferrer"&gt;Mnemoverse&lt;/a&gt; (the author's company) through &lt;code&gt;mnemoverse&lt;/code&gt; 0.4.0 from PyPI. Each scope in the table is a domain, the &lt;code&gt;domain&lt;/code&gt; argument of a read, a listing or a write. The &lt;a href="https://mnemoverse.com/docs/platform/multi-tenant" rel="noopener noreferrer"&gt;multi-tenant guide&lt;/a&gt; gives the naming patterns &lt;code&gt;agent:{agent_name}&lt;/code&gt; and &lt;code&gt;project:{project_id}&lt;/code&gt;, so the reviewer's scope is &lt;code&gt;agent:reviewer&lt;/code&gt; and the fleet's is &lt;code&gt;project:orders-api&lt;/code&gt;. A read that names a domain returns only memories from that domain, so the priority order the guide sketches, own scope first and shared ones after, is the bot making one read after another, as the code below does. Every key on one account reaches the same memory (&lt;a href="https://mnemoverse.com/docs/api/mcp-server" rel="noopener noreferrer"&gt;MCP server page&lt;/a&gt;), so on one account a domain sorts what each bot reads, and separating bots takes separate accounts. Domains sort, accounts separate.&lt;/p&gt;

&lt;p&gt;Bots run unattended, so they connect with an API key, through the &lt;a href="https://mnemoverse.com/docs/api/python-sdk" rel="noopener noreferrer"&gt;Python SDK&lt;/a&gt; or the npm MCP server; the hosted connector signs in through a browser, which suits an agent a person starts. A write that is too similar to the nearest memory in the same domain is not stored, and the result says why, so a bot that writes down a fact the project scope already holds, in words too close to tell apart, gets a refusal instead of a second copy.&lt;/p&gt;

&lt;p&gt;Every bot runs the same code under its own name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mnemoverse&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MnemoClient&lt;/span&gt;

&lt;span class="n"&gt;BOT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BOT_NAME&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;                &lt;span class="c1"&gt;# "reviewer", "test-fixer" or "release"
&lt;/span&gt;&lt;span class="n"&gt;SHARED&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FLEET_DOMAIN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;project:orders-api&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;LAST_RUN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;LAST_RUN_AT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;    &lt;span class="c1"&gt;# when the previous run started (ISO time), kept by CI; unset on the first run
&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;start_of_run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;own&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agent:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BOT&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;top_k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;
    &lt;span class="n"&gt;shared&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;SHARED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;top_k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;
    &lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cursor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="c1"&gt;# everything since the last run, newest first, nothing ranked away
&lt;/span&gt;        &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;SHARED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;since&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;LAST_RUN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;next_cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;own&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;shared&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt;
        &lt;span class="n"&gt;cursor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;next_cursor&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nc"&gt;MnemoClient&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="c1"&gt;# reads MNEMOVERSE_API_KEY
&lt;/span&gt;    &lt;span class="n"&gt;own&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;shared&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;start_of_run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test_refund_webhook fails intermittently&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# ... the test-fixer's work ...
&lt;/span&gt;    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test_refund_webhook fails when it runs after test_retry_queue: both use Redis &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;database 0. Fixed in PR 807. Seen in CI runs 4411 and 4417.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;concepts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;flaky-test&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;redis&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test_refund_webhook&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;SHARED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# a role lesson would go to f"agent:{BOT}"
&lt;/span&gt;    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stored&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Not stored:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  When the bots run under different accounts
&lt;/h2&gt;

&lt;p&gt;Say the release bot belongs to another team's account. Its key reaches only that account's memory, where &lt;code&gt;project:orders-api&lt;/code&gt; holds none of what the other bots wrote. What both accounts can reach is a &lt;a href="https://mnemoverse.com/docs/api/rooms" rel="noopener noreferrer"&gt;room&lt;/a&gt; (Beta), a memory space shared across accounts and addressed as &lt;code&gt;xroom:&amp;lt;room_id&amp;gt;&lt;/code&gt; in the same &lt;code&gt;domain&lt;/code&gt; field. Creating a room, minting an invite, joining and listing your rooms are self-service tools in the local MCP server and the hosted connector; &lt;a href="https://mnemoverse.com/docs/api/agent-setup#join-a-shared-room-beta" rel="noopener noreferrer"&gt;Join a shared room&lt;/a&gt; has the steps. Once its account has joined, a bot runs the code above with &lt;code&gt;FLEET_DOMAIN&lt;/code&gt; set to the room address.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A room is its own bucket.&lt;/strong&gt; Nothing in &lt;code&gt;project:orders-api&lt;/code&gt; moves into it, and joining shares nothing from a member's own memory. The bots write the shared part to the room address.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An invite carries its scope.&lt;/strong&gt; A &lt;code&gt;read&lt;/code&gt; invite fits a bot that should use what the fleet knows and never change it, such as that release bot. A contractor's reviewer that leaves handoffs needs &lt;code&gt;read_write&lt;/code&gt;, the default. Invites minted with the tools default to one redemption and a 7-day expiry, so mint one per bot account when it is ready to join.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Membership is checked on every request.&lt;/strong&gt; A bot account revoked in the console is refused on its next call; what it already read, it keeps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The room address belongs in the bot's configuration.&lt;/strong&gt; An unscoped read does not search shared rooms, so a bot that leaves the address out reads only its own account's memory.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Check it with a control
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Have the reviewer bot write a handoff to the shared scope that no release query would match well, such as the migration note in the table.&lt;/li&gt;
&lt;li&gt;Start the release bot in a fresh process. Its listing should show the handoff. Then run its usual search alone: if the handoff does not come back, you have seen why the listing is there.&lt;/li&gt;
&lt;li&gt;Control, with the fleet split across accounts: call the room from an account that was never invited. It should be refused with "Not an active member of this room" (in the SDK, a &lt;code&gt;MnemoAuthError&lt;/code&gt; with that message). A bot holding a &lt;code&gt;read&lt;/code&gt; invite that tries to write should get "Read-only membership cannot write to this room". If either call succeeds, the boundary is not where you think it is.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;a href="https://mnemoverse.com/docs/library/shared-memory-for-multi-agent-systems" rel="noopener noreferrer"&gt;library page&lt;/a&gt; goes further: private and shared domains, how memory differs from a coordination protocol such as A2A, and the boundaries between accounts. Which of your bots found something last week that another one is still rediscovering?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>architecture</category>
      <category>python</category>
    </item>
    <item>
      <title>Qodo vs CodeRabbit?</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Fri, 16 Oct 2026 10:15:00 +0000</pubDate>
      <link>https://dev.to/izgorodin/qodo-vs-coderabbit-4ha1</link>
      <guid>https://dev.to/izgorodin/qodo-vs-coderabbit-4ha1</guid>
      <description>&lt;p&gt;Pick by four things your team knows: how it wants to pay, where its code lives, whether the reviewer must run inside your network, and how many reviews it runs a month. CodeRabbit charges per developer who opens pull requests, $24 a month on Essentials billed annually; Qodo charges $30 a month for a pool of 2,500 credits shared by the team, which Qodo estimates at ~18 reviews. Both list GitHub, GitLab, Bitbucket and Azure DevOps; Qodo adds Gerrit, which its homepage and pricing page put on Enterprise while its docs list it for every deployment model, the multi-tenant cloud included. Both self-host on Enterprise: CodeRabbit from 500 user seats, Qodo with no seat minimum I could find. At Qodo's $1.67 a review ($30 over its own ~18), the two bills meet at about 14 reviews per developer a month against CodeRabbit's $24.&lt;/p&gt;

&lt;p&gt;Every fact below comes from each tool's own pages as I read them on 14 October 2026, and neither Qodo nor CodeRabbit saw this text before publication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qodo and CodeRabbit side by side
&lt;/h2&gt;

&lt;p&gt;Each cell is from the vendor's own pages, read on 14 October 2026; links are at the end.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Qodo&lt;/th&gt;
&lt;th&gt;CodeRabbit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Code hosts listed&lt;/td&gt;
&lt;td&gt;"GitHub (cloud and Enterprise Server), GitLab (cloud and self-managed), Bitbucket (Cloud and Data Center), Azure DevOps. Gerrit on Enterprise." on its homepage, and "Gerrit support" is "Not included" on Pro Team in its pricing table; its docs mark Gerrit for Multi-tenant, Single-tenant, On-prem and Air-gapped, and its changelog says Qodo "now fully supports Gerrit across multi-tenant, single-tenant, and on-premises deployments"&lt;/td&gt;
&lt;td&gt;GitHub, GitHub Enterprise Server, GitLab.com and self-managed GitLab, Bitbucket Cloud and Data Center, Azure DevOps; a Reverse Tunnel, set up through CodeRabbit sales or support, for a GitHub Enterprise Server or self-managed GitLab that cannot accept inbound network access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Not found on these pages on 14 October 2026&lt;/td&gt;
&lt;td&gt;Gitea, Perforce (homepage, pricing, deployment table, install page, docs index)&lt;/td&gt;
&lt;td&gt;Gerrit, Gitea, Perforce (platforms page, docs index)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When it reviews&lt;/td&gt;
&lt;td&gt;automatically when a pull request is opened, reopened or marked ready for review; "Review every push" is an option; &lt;code&gt;/agentic_review&lt;/code&gt; on demand; a "Manual only" setting&lt;/td&gt;
&lt;td&gt;automatically when a pull request is opened against the main branch, then an incremental review on each push, paused by default after five reviewed commits; &lt;code&gt;@coderabbitai review&lt;/code&gt; for new changes, &lt;code&gt;@coderabbitai full review&lt;/code&gt; for the whole pull request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What you pay for&lt;/td&gt;
&lt;td&gt;one credit pool per workspace: Pro Team $30 a month for 2,500 credits, packs of 5,000 credits for $60 and 20,000 for $240, "$.012/credit, pooled across the team"; overage at the same per-credit rate up to a monthly cap you set; credits expire each month; Pro Team is billed monthly&lt;/td&gt;
&lt;td&gt;developers who create pull requests: Essentials $24 per developer per month billed annually or $30 monthly, Team $48 or $60; 5 PR reviews per developer per hour on Essentials, 8, 10 and 12 on the higher plans; optional usage-based reviews at $0.25 per reviewed file, with a monthly spending cap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free entry&lt;/td&gt;
&lt;td&gt;a 14-day trial with unlimited reviews and no credit card; "We don't offer a permanent free tier."; qualified open-source projects can apply to the Qodo for Open Source program&lt;/td&gt;
&lt;td&gt;a 14-day trial with no credit card, Advanced by default for new organizations; the Free plan gives "PR summarization only; code reviews are available through the VS Code extension and CLI."; open-source projects get Team features without paying&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-hosting&lt;/td&gt;
&lt;td&gt;Enterprise: single-tenant SaaS, on-prem and air-gapped; the Enterprise card reads "For 30+ users"; no seat minimum for on-prem found on its homepage, pricing, install page or docs index&lt;/td&gt;
&lt;td&gt;Enterprise "with 500 or more user seats": a container in your infrastructure, with your own model provider; the page names "air-gapped requirements"; its pricing table also lists "company-selected SaaS regions" on Enterprise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linked repositories&lt;/td&gt;
&lt;td&gt;"Cross-repo capabilities" included on Pro Team&lt;/td&gt;
&lt;td&gt;multi-repo analysis with 1, 5, 10 and 20 linked repositories on Essentials, Team, Advanced and Enterprise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merge gates&lt;/td&gt;
&lt;td&gt;on GitHub, an author self-review checkbox that "Can be configured to add Qodo as a reviewer, allowing the PR to be merged."; compliance labels such as "Failed compliance check" that your own CI action can block on&lt;/td&gt;
&lt;td&gt;pre-merge checks in error mode, which with the Request Changes Workflow "block merges until resolved or manually overridden"; built-in checks on Essentials, custom checks from Team; since 5 October 2026, a CodeRabbit Security check that you can require in GitHub, on Advanced and Enterprise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Training and storage&lt;/td&gt;
&lt;td&gt;"Your code is analyzed and discarded. Nothing stored, logged, or used to train models."; bring your own model keys on Enterprise&lt;/td&gt;
&lt;td&gt;"CodeRabbit never uses customer code for model training."; code is "shared with OpenAI and/or Anthropic for reviewing purposes only"; a data retention setting decides whether code-related data is kept for learnings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How a finding is filtered&lt;/td&gt;
&lt;td&gt;several review agents with shared context, "filtering out low-impact or irrelevant comments before they reach the pull request"; tell it a finding does not apply and Qodo "dismisses the finding as False positive, Rejected, Deferred, or Intentional"&lt;/td&gt;
&lt;td&gt;Review, Verification, Chat and Pre-Merge Checks among its parallel agents; "Sandboxed cloud execution with your full repository cloned for isolated analysis"; 50+ static analyzers, linters and SAST tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Noise and learning&lt;/td&gt;
&lt;td&gt;review effort mode (Beta), Auto by default, "which dynamically matches review depth to the risk of each change"; "Rules system (no limit)" on Pro Team, "Self-learning system" on Enterprise&lt;/td&gt;
&lt;td&gt;"Quiet, Chill, and Assertive profiles"; Learnings on every paid plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Before the pull request&lt;/td&gt;
&lt;td&gt;IDE plugins for VS Code, JetBrains IDEs and Visual Studio, and a CLI&lt;/td&gt;
&lt;td&gt;an IDE extension for "VS Code, Cursor, Windsurf, and any VS Code-based IDE", and a CLI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security attestation&lt;/td&gt;
&lt;td&gt;SOC 2 Type II, on its homepage&lt;/td&gt;
&lt;td&gt;SOC 2 Type II, by its changelog&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What the bill depends on
&lt;/h2&gt;

&lt;p&gt;The billing unit is what several comparison pages by third parties get wrong. Qodo writes "Billing is usage-based (not seat-based)." and calls a credit "the unit Qodo uses to meter review activity". CodeRabbit charges per developer and says "you will only be charged for developers who create pull requests". CodeRabbit also renamed its plans: "Essentials is the new name for Pro, and Team is the new name for Pro Plus." A page that prices Qodo per person, or CodeRabbit by its old plan names, describes pricing that is not on either vendor's page today.&lt;/p&gt;

&lt;p&gt;The two units meet at a number you can compute. Ten developers who open pull requests cost $240 a month on CodeRabbit Essentials billed annually. The same $240 buys Qodo's 20,000-credit pack, which Qodo estimates at ~144 reviews, or 14.4 reviews per developer. That is arithmetic on the vendors' own prices, not a measurement, and it rests on Qodo's average, because "Smaller PRs draw fewer credits, larger or more complex reviews draw more." Below that rate the Qodo pool costs less; above it the CodeRabbit price per developer does. At CodeRabbit's monthly price the crossover moves to 18 reviews per developer: $300 for ten developers buys 25,000 credits at $.012, ~180 reviews by the same estimate.&lt;/p&gt;

&lt;p&gt;Three edges move the result. Qodo's smallest pack is $30 for the whole team, so a team of one pays $24 on CodeRabbit's annual Essentials against $30 at Qodo. Qodo's pricing page calls Pro Team "Designed for up to 30 users" and starts its Enterprise card there, while its docs list "Unlimited users per workspace." for the same plan. CodeRabbit's price holds until a developer passes the hourly allowance, 5 PR reviews per hour on Essentials in a rolling window, and sustained activity can space that developer's reviews out further. Past the allowance, reviews wait unless usage-based reviews are on, at $0.25 per reviewed file. They are optional, but CodeRabbit switches them on in Automatic mode the first time a review passes the limit during a trial, free while the trial lasts, and "Your saved continuation choice carries over when you activate a paid subscription." Through all of this, "There is no total limit on the number of pull requests or repositories you can review".&lt;/p&gt;

&lt;p&gt;What counts as a review differs as well. CodeRabbit's rate-limit page says it "reviews pushes, not commits": by default each push gets an incremental review, with a pause after five reviewed commits, and each of those reviews draws on the hourly allowance. Qodo reviews when a pull request is opened, reopened or marked ready, and updates its review on every push only if you turn on "Review every push". Qodo states that "Every code review draws credits from your monthly pool.", so check on its dashboard, which shows "real-time balance and burn rate", what a pushed commit draws.&lt;/p&gt;

&lt;h2&gt;
  
  
  How each one describes noise and checking
&lt;/h2&gt;

&lt;p&gt;Qodo describes several review agents that share context: "Combining multiple review agents with shared context lets Qodo catch what a single-pass review misses, while filtering out low-impact or irrelevant comments before they reach the pull request." Its review effort mode, in beta, starts at Auto and scales the depth of a review to the risk of the change. When someone tells Qodo a finding does not apply, it records one of four dismissal reasons, so the noise that got through can be counted.&lt;/p&gt;

&lt;p&gt;CodeRabbit's architecture page lists a Verification agent among its parallel agents, next to "Sandboxed cloud execution with your full repository cloned for isolated analysis", and its homepage says review generation "Uses agentic code generation and exploration, static verification, and analysis to deliver a review." How much it says is set by profiles, from Quiet to Assertive.&lt;/p&gt;

&lt;p&gt;Both are descriptions, not measurements. Each vendor also publishes a number with its method, below; neither is a noise rate for your code.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each publishes as numbers, and how
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Qodo&lt;/th&gt;
&lt;th&gt;CodeRabbit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What is compared&lt;/td&gt;
&lt;td&gt;Qodo "against 7 other leading AI code review platforms", each on its default settings&lt;/td&gt;
&lt;td&gt;Claude models inside CodeRabbit's own review pipeline, Sonnet 5.5 against Sonnet 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test set&lt;/td&gt;
&lt;td&gt;"100 PRs containing a total of 580 issues", defects injected into merged pull requests from open-source repositories; the benchmark and the reviews it scored are published&lt;/td&gt;
&lt;td&gt;13 hardest known-bug cases from open-source pull requests; a second set of 85 known issues across 44 open-source pull requests is reported for comment counts, speed and cost only, because "judge scoring was pending"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who judges&lt;/td&gt;
&lt;td&gt;findings "were rigorously compared against our validated ground truth using an LLM-as-a-judge system"&lt;/td&gt;
&lt;td&gt;"an independent judge scored every comment with three votes against the known issue, and only majority-PASS comments count"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When&lt;/td&gt;
&lt;td&gt;published 4 February 2026, updated 3 September 2026&lt;/td&gt;
&lt;td&gt;published 28 September 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Qodo's headline, on that method: Qodo is first in its own table, "achieving an F1 score of 60.1%".&lt;/p&gt;

&lt;p&gt;CodeRabbit's headline, on its method: Sonnet 5.5 caught 6 of 13 issues through actionable comments, against 4 for Sonnet 5, at 41.2% actionable precision. The same page marks the limit: "Thirteen cases is a small set, and we say so throughout."&lt;/p&gt;

&lt;p&gt;The two headlines answer different questions. Qodo's ranks Qodo against other reviewers on a benchmark that Qodo built and judged; CodeRabbit's compares two models inside CodeRabbit. Neither belongs in one column with the other, and no figure about CodeRabbit from a Qodo table appears here. Qodo also publishes a page titled "Qodo vs CodeRabbit: Full Codebase Enforcement vs. Diff-Level Review (2026)", dated 6 July 2026. I did not find a CodeRabbit page about Qodo in CodeRabbit's sitemap (602 addresses), its llms.txt files or its docs index on 14 October 2026. A comparison written by either vendor is that vendor's case, so each tool here is described from its own pages, not from its rival's.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose for a team
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If this is true for your team&lt;/th&gt;
&lt;th&gt;Look first at&lt;/th&gt;
&lt;th&gt;What the pages say&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Your code review runs on Gerrit&lt;/td&gt;
&lt;td&gt;Qodo; its own pages differ on the plan&lt;/td&gt;
&lt;td&gt;Qodo's homepage says "Gerrit on Enterprise." and its pricing table marks "Gerrit support" "Not included" on Pro Team; its deployment table marks the "Gerrit" row with a check under Multi-tenant, Single-tenant, On-prem and Air-gapped, its install page lists Gerrit under multi-tenant, the column it marks "All plans", its changelog says Qodo "now fully supports Gerrit across multi-tenant, single-tenant, and on-premises deployments", and its Gerrit install guide asks for "A Qodo environment configured for Gerrit", so ask Qodo which plan your Gerrit setup needs. Gerrit not found on CodeRabbit's platforms page or in its docs index; all read on 14 October 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code must stay inside your network, and you would buy fewer than 500 seats&lt;/td&gt;
&lt;td&gt;Qodo Enterprise&lt;/td&gt;
&lt;td&gt;CodeRabbit self-hosts "with 500 or more user seats"; Qodo lists on-prem and air-gapped on Enterprise, with no seat minimum that I found on its homepage, pricing, install page or docs index on 14 October 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You run GitHub Enterprise Server and want the vendor's shared cloud&lt;/td&gt;
&lt;td&gt;either; Qodo's own pages differ&lt;/td&gt;
&lt;td&gt;CodeRabbit's cloud connects to a GitHub Enterprise Server instance, through a Reverse Tunnel when the instance cannot accept inbound network access; Qodo's install guide covers "Qodo multi-tenant with GitHub Enterprise Server" and calls multi-tenant "Available on all plans", while its deployment table marks the "GitHub Enterprise" row with a cross under Multi-tenant&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The bill should follow review volume, under a cap you set&lt;/td&gt;
&lt;td&gt;Qodo&lt;/td&gt;
&lt;td&gt;one credit pool per workspace, overage at the same per-credit rate up to a monthly cap you set; credits expire at the end of each month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The bill should follow the number of people who open pull requests&lt;/td&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;"you will only be charged for developers who create pull requests"; extra charges past the hourly allowance come only from usage-based reviews, which CodeRabbit switches on during a trial the first time a review passes the limit, and which you can keep or turn off when the trial ends&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Each developer opens many pull requests, or agents open them in bursts&lt;/td&gt;
&lt;td&gt;model both bills first&lt;/td&gt;
&lt;td&gt;the bills meet at 14.4 reviews per developer a month against CodeRabbit's annual price and at 18 against its monthly price, by Qodo's own estimate; past that rate the CodeRabbit price per developer stays flat, while bursts meet its hourly allowance and sustained heavy use gets a developer's reviews spaced out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Written rules must hold a merge&lt;/td&gt;
&lt;td&gt;either, by different routes&lt;/td&gt;
&lt;td&gt;CodeRabbit: pre-merge checks in error mode with the Request Changes Workflow; Qodo: compliance labels that your CI can block on, or the author self-review checkbox&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You want each finding checked before it reaches you&lt;/td&gt;
&lt;td&gt;CodeRabbit, Qodo, or Sigma (Mnemoverse, the author's company)&lt;/td&gt;
&lt;td&gt;CodeRabbit lists a Verification agent among its parallel agents; Qodo's docs describe filtering out low-impact or irrelevant comments before they reach the pull request; Sigma, in closed beta on GitHub by invitation, "checks potential issues and brings the evidence back to your code", and its docs say a fresh verifier "confirms, rejects or reclassifies" each candidate, that "only confirmed candidates are verified findings" and that suspicions no verifier confirmed stay labeled separately; Sigma runs on Claude Code and OpenAI models and reviews its team's own repositories every day; its homepage takes requests through a "Request beta access" form and says "A request does not grant access automatically."&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Other tools also review pull requests: GitHub Copilot code review, the open-source PR-Agent, which its README calls "a community-maintained legacy project of Qodo", and Sigma.&lt;/p&gt;

&lt;h2&gt;
  
  
  A two-week test that settles it
&lt;/h2&gt;

&lt;p&gt;Both vendors let you try before paying. CodeRabbit's docs say "New organizations start with a 14-day Advanced trial.", and at Qodo "Every workspace begins with a 14-day free trial starting at signup." Install both on one busy repository and let them review the same pull requests. If a busy repository passes CodeRabbit's hourly allowance during the trial, those extra reviews are free, and the usage-based setting they switch on is worth checking before the trial ends. CodeRabbit's default trial "includes Advanced features", so compare it against the price of the plan you would buy.&lt;/p&gt;

&lt;p&gt;Before you start, take five merged bug-fix pull requests and open the commits that introduced those bugs as new pull requests. Qodo's own benchmark also starts from known defects in real pull requests, "intentionally injecting defects into genuine, merged pull requests", and the method works on your code as well as on theirs. If you have access to a third reviewer, such as GitHub Copilot code review or Sigma, give it the same pull requests.&lt;/p&gt;

&lt;p&gt;Mark every comment as a real bug, a wrong claim or noise, and note how long each took to confirm. At the end, Qodo says it will "suggest a credit pack based on the review volume your team generated during the trial"; put that price next to CodeRabbit's price for the developers who opened pull requests in the same two weeks. You then have four numbers of your own: known bugs caught out of five, wrong claims per pull request, minutes per comment and the cost of a month. They answer Qodo vs CodeRabbit for your code, which no vendor's chart can do.&lt;/p&gt;

&lt;p&gt;Sources, all read on 14 October 2026. Qodo: &lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;homepage&lt;/a&gt;, &lt;a href="https://www.qodo.ai/pricing/" rel="noopener noreferrer"&gt;pricing&lt;/a&gt;, &lt;a href="https://docs.qodo.ai/pricing-and-usage" rel="noopener noreferrer"&gt;pricing and usage&lt;/a&gt;, &lt;a href="https://docs.qodo.ai/code-review/use-qodo-in-prs.md" rel="noopener noreferrer"&gt;triggering a review&lt;/a&gt;, &lt;a href="https://docs.qodo.ai/code-review/use-qodo-in-prs/control-review-effort" rel="noopener noreferrer"&gt;review effort&lt;/a&gt;, &lt;a href="https://docs.qodo.ai/code-review/overview.md" rel="noopener noreferrer"&gt;how review works&lt;/a&gt;, &lt;a href="https://docs.qodo.ai/code-review/pr-command-and-interaction-reference.md" rel="noopener noreferrer"&gt;pull request commands&lt;/a&gt;, &lt;a href="https://docs.qodo.ai/governance/rule-enforcement/without-rule-system/custom-compliance" rel="noopener noreferrer"&gt;custom compliance&lt;/a&gt;, &lt;a href="https://docs.qodo.ai/install-qodo/deployment-model-support.md" rel="noopener noreferrer"&gt;deployment models&lt;/a&gt;, &lt;a href="https://docs.qodo.ai/install-qodo/install.md" rel="noopener noreferrer"&gt;install&lt;/a&gt;, &lt;a href="https://docs.qodo.ai/install-qodo/github/qodo-single-tenant.md" rel="noopener noreferrer"&gt;GitHub Enterprise Server install&lt;/a&gt;, &lt;a href="https://docs.qodo.ai/install-qodo/gerrit" rel="noopener noreferrer"&gt;Gerrit install&lt;/a&gt;, &lt;a href="https://docs.qodo.ai/changelog.md" rel="noopener noreferrer"&gt;changelog&lt;/a&gt;, &lt;a href="https://docs.qodo.ai/llms-full.txt" rel="noopener noreferrer"&gt;docs index&lt;/a&gt;, &lt;a href="https://www.qodo.ai/blog/how-we-built-a-real-world-benchmark-for-ai-code-review/" rel="noopener noreferrer"&gt;benchmark write-up&lt;/a&gt;, &lt;a href="https://www.qodo.ai/blog/qodo-vs-coderabbit/" rel="noopener noreferrer"&gt;Qodo vs CodeRabbit&lt;/a&gt;. CodeRabbit: &lt;a href="https://www.coderabbit.ai/" rel="noopener noreferrer"&gt;homepage&lt;/a&gt;, &lt;a href="https://www.coderabbit.ai/pricing" rel="noopener noreferrer"&gt;pricing&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/management/plans.md" rel="noopener noreferrer"&gt;plans&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/management/rate-limits.md" rel="noopener noreferrer"&gt;rate limits&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/management/usage-based-addon.md" rel="noopener noreferrer"&gt;usage-based reviews&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/platforms/overview.md" rel="noopener noreferrer"&gt;platforms&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/platforms/github-enterprise-server" rel="noopener noreferrer"&gt;GitHub Enterprise Server&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/self-hosted/coderabbit-reverse-tunnel" rel="noopener noreferrer"&gt;Reverse Tunnel&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/self-hosted/overview.md" rel="noopener noreferrer"&gt;self-hosted&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/faq.md" rel="noopener noreferrer"&gt;FAQ&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/overview/architecture" rel="noopener noreferrer"&gt;architecture&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/overview/ide-cli-review.md" rel="noopener noreferrer"&gt;IDE and CLI&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/knowledge-base/multi-repo-analysis" rel="noopener noreferrer"&gt;multi-repo analysis&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/pr-reviews/pre-merge-checks" rel="noopener noreferrer"&gt;pre-merge checks&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/changelog.md" rel="noopener noreferrer"&gt;changelog&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/llms-full.txt" rel="noopener noreferrer"&gt;docs index&lt;/a&gt;, &lt;a href="https://www.coderabbit.ai/blog/sonnet-5-5-model-review" rel="noopener noreferrer"&gt;Sonnet 5.5 write-up&lt;/a&gt;, &lt;a href="https://www.coderabbit.ai/sitemap.xml" rel="noopener noreferrer"&gt;sitemap&lt;/a&gt;. Other reviewers: &lt;a href="https://docs.github.com/en/copilot/concepts/agents/code-review" rel="noopener noreferrer"&gt;GitHub Copilot code review&lt;/a&gt;, &lt;a href="https://github.com/The-PR-Agent/pr-agent" rel="noopener noreferrer"&gt;PR-Agent&lt;/a&gt;, Sigma &lt;a href="https://sigma.mnemoverse.com/" rel="noopener noreferrer"&gt;homepage&lt;/a&gt;, &lt;a href="https://sigma.mnemoverse.com/docs" rel="noopener noreferrer"&gt;docs&lt;/a&gt; and &lt;a href="https://sigma.mnemoverse.com/docs/reading-a-review" rel="noopener noreferrer"&gt;reading a review&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>codereview</category>
      <category>github</category>
      <category>devtools</category>
    </item>
    <item>
      <title>My custom AI bot keeps giving bad advice because it cannot retain feedback from past calls</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Thu, 15 Oct 2026 17:15:00 +0000</pubDate>
      <link>https://dev.to/izgorodin/my-custom-ai-bot-keeps-giving-bad-advice-because-it-cannot-retain-feedback-from-past-calls-11mh</link>
      <guid>https://dev.to/izgorodin/my-custom-ai-bot-keeps-giving-bad-advice-because-it-cannot-retain-feedback-from-past-calls-11mh</guid>
      <description>&lt;p&gt;Your support bot tells a customer that a sync error goes away if they clear the app cache. It does not. The customer writes back, a person on the team finds the real fix, re-authorising the integration, and the ticket closes. Next Tuesday another customer reports the same error, and the bot recommends clearing the cache again, with the same confidence.&lt;/p&gt;

&lt;p&gt;The short answer: each call ends before anyone knows whether its advice worked, so the feedback arrives with nothing to attach to. Keep a record of every call with the ids of the stored notes the answer was built on. When the verdict comes in, from the user, the ticket or the person who took over, send it back as a rating on those notes, and have the bot recall from a memory that reads ratings when it ranks. Next time, the advice that failed and the advice that worked are no longer equals. Nothing is erased: the failed advice stays on record, with its outcome attached.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the bot does not learn from its own calls
&lt;/h2&gt;

&lt;p&gt;A typical custom bot is a model call wrapped in retrieval: a system prompt, a search over help articles or stored notes, and the question. The verdict on last week's answer is in none of those. It is in the customer's reply and the helpdesk.&lt;/p&gt;

&lt;p&gt;Teams usually try three fixes, in this order.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edit the system prompt.&lt;/strong&gt; Add "do not suggest clearing the cache for sync errors". A prompt is the right home for policy, but it scales like any document edited by hand: every bad call adds a line, nobody prunes them, and important rules compete with stale ones for the model's attention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Store answers and corrections in a memory.&lt;/strong&gt; The correction now survives the call, but so does the cache advice, and similarity search ranks by closeness to the question. Both notes match, both come back, and the model picks one in context. A wrong note is as similar to the question after ten failures as after none.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attach the outcome to the note.&lt;/strong&gt; When a call's result is known, record it on the notes that shaped the answer. The failed note now carries its failure and the working one its success, and a recall that weighs outcomes can tell them apart. Only this fix has a path from what happened back to what gets recalled next.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to keep from each call
&lt;/h2&gt;

&lt;p&gt;The answer is written during the call. The verdict arrives after it, sometimes days later, in another process. So the call must leave something for the verdict to find:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Call record:&lt;/strong&gt; what a bot keeps from each call so that a verdict arriving later can find what to judge: the question, the answer, and the ids of the stored notes the answer was built on, under a key the verdict will carry.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The ids are per note, not per conversation.&lt;/strong&gt; One piece of advice failed, not the exchange. If the model can say which recalled notes it relied on, keep those; otherwise keep every note that was in the prompt and accept that they move together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The key is one the verdict will carry:&lt;/strong&gt; a ticket id, a thread id, the session id your feedback button already sends. When one key covers several answers, the code below keeps the latest.&lt;/p&gt;

&lt;p&gt;Keep call records in your own database, apart from the notes the bot recalls. Written into the same memory, every logged answer becomes one more candidate in the next recall, the bad ones included.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the verdict comes from
&lt;/h2&gt;

&lt;p&gt;Explicit ratings are rare. Other outcomes are often already recorded somewhere, and wiring those places in works better than waiting for a thumbs-down.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;signal&lt;/th&gt;
&lt;th&gt;when it arrives&lt;/th&gt;
&lt;th&gt;what it says about the advice&lt;/th&gt;
&lt;th&gt;what to send&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;thumbs up or down on the answer&lt;/td&gt;
&lt;td&gt;seconds later, if at all&lt;/td&gt;
&lt;td&gt;how the answer looked, often before it was tried&lt;/td&gt;
&lt;td&gt;positive or negative&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;the user says it did not work&lt;/td&gt;
&lt;td&gt;the next message, or the next day&lt;/td&gt;
&lt;td&gt;it was tried and it failed&lt;/td&gt;
&lt;td&gt;negative&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;a person takes over and solves it another way&lt;/td&gt;
&lt;td&gt;when the handover closes&lt;/td&gt;
&lt;td&gt;it failed, and here is what worked&lt;/td&gt;
&lt;td&gt;negative, plus the fix as a new note&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;the same user returns with the same problem&lt;/td&gt;
&lt;td&gt;hours or days later&lt;/td&gt;
&lt;td&gt;the first answer did not hold&lt;/td&gt;
&lt;td&gt;negative, smaller&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;the ticket closes and stays closed&lt;/td&gt;
&lt;td&gt;after a quiet period you choose&lt;/td&gt;
&lt;td&gt;it probably worked&lt;/td&gt;
&lt;td&gt;positive, smaller&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;nothing happens&lt;/td&gt;
&lt;td&gt;never&lt;/td&gt;
&lt;td&gt;nothing&lt;/td&gt;
&lt;td&gt;nothing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two rows need care. A handover for a reason the bot was never meant to handle, a refund or an angry customer, says nothing about the advice. And silence, the commonest row, is not a verdict.&lt;/p&gt;

&lt;p&gt;The third row does the most work. A rating can lower the advice that failed, but only a note can supply the advice that worked, so the person's fix goes into the memory the bot recalls from.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a rating changes, and what it does not
&lt;/h2&gt;

&lt;p&gt;A rating cannot change the answer already given. It changes the order of what the next recall brings back.&lt;/p&gt;

&lt;p&gt;Keep the failed note rather than deleting it. Clearing the cache is right for a different error, and a deleted note cannot answer "why did the bot tell customers to clear the cache in October?".&lt;/p&gt;

&lt;p&gt;Ratings tune ranking, not truth. If a help article is wrong, fix the article. The loop needs no particular product: a list of failed advice the bot checks approximates it, a store you run can carry an outcome field, a managed memory layer keeps the bookkeeping. What matters is the path from outcome back to recall.&lt;/p&gt;

&lt;h2&gt;
  
  
  A minimal version in code
&lt;/h2&gt;

&lt;p&gt;This uses &lt;code&gt;mnemoverse&lt;/code&gt; 0.4.0, the Python SDK of Mnemoverse (the author's company), set up as on the &lt;a href="https://mnemoverse.com/docs/api/python-sdk" rel="noopener noreferrer"&gt;Python SDK page&lt;/a&gt;. The model call is a placeholder, and call records live in SQLite.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sqlite3&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mnemoverse&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MnemoClient&lt;/span&gt;

&lt;span class="n"&gt;memory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MnemoClient&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# reads MNEMOVERSE_API_KEY
&lt;/span&gt;&lt;span class="n"&gt;DOMAIN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bot:support&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sqlite3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;calls.db&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CREATE TABLE IF NOT EXISTS calls &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;(call_id TEXT PRIMARY KEY, question TEXT, answer TEXT, used TEXT, concepts TEXT)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;call_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;recalled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DOMAIN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;top_k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;relied_on&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recalled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# your model call
&lt;/span&gt;    &lt;span class="n"&gt;used&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;atom_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;relied_on&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;INSERT OR REPLACE INTO calls VALUES (?, ?, ?, ?, ?)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# latest answer per key
&lt;/span&gt;               &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;call_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;used&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;recalled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;query_concepts&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
    &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;reply&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;on_verdict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;call_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;outcome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SELECT question, used, concepts FROM calls WHERE call_id = ?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                     &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;call_id&lt;/span&gt;&lt;span class="p"&gt;,)).&lt;/span&gt;&lt;span class="nf"&gt;fetchone&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;  &lt;span class="c1"&gt;# no call record: the verdict has nowhere to land
&lt;/span&gt;    &lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;used&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;concepts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;used&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;feedback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;atom_ids&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;used&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;outcome&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;outcome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# -1.0 to +1.0
&lt;/span&gt;                                 &lt;span class="n"&gt;query_concepts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;concepts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DOMAIN&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;updated:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;updated_count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;fix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="c1"&gt;# what actually worked, from the person who solved it
&lt;/span&gt;        &lt;span class="n"&gt;note&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Problem: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;What worked: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fix&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DOMAIN&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;note&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stored&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Not stored:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;note&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="nf"&gt;on_verdict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ticket-1042&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fix&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Re-authorise the integration under Settings, Connections.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;on_verdict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ticket-1043&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# the customer confirmed it worked
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;feedback&lt;/code&gt; gets the same &lt;code&gt;domain&lt;/code&gt; as the read; the SDK page notes that without it the SDK sends &lt;code&gt;"general"&lt;/code&gt;. A write that is too similar to the nearest memory in the same domain is not stored, so the code checks &lt;code&gt;stored&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The API docs state the effect in one line: "Ratings re-rank what comes back next." The overview says what stays: "feedback changes the order of the next read, not the stored text". A bot on an MCP client rates through the &lt;code&gt;memory_feedback&lt;/code&gt; tool instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check it with a control
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Seed notes about two different problems, answer one question about each through &lt;code&gt;answer()&lt;/code&gt;, and check that the two call records share no id. Print the &lt;code&gt;valence&lt;/code&gt; of the notes each call relied on, "Outcome polarity [-1, +1]" in the API reference, and stop the process.&lt;/li&gt;
&lt;li&gt;In a new process, send a negative verdict for the first call only. &lt;code&gt;updated_count&lt;/code&gt;, "Number of atoms updated" in the reference, should equal the number of ids recorded for that call. If it is zero, check the ids and the domain first.&lt;/li&gt;
&lt;li&gt;Read both questions again and print &lt;code&gt;valence&lt;/code&gt; for the same notes. What to look for is the first call's notes moving toward -1 since step 1.&lt;/li&gt;
&lt;li&gt;Control: the second call got no verdict, so its notes are the comparison for step 3. If they moved and the first call's did not, look at the key the verdict was filed under. If both moved alike, step 3 does not show the verdict's effect.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;a href="https://mnemoverse.com/docs/library/agent-repeats-mistakes" rel="noopener noreferrer"&gt;library page&lt;/a&gt; follows the same loop for coding agents, where the verdict is a build or a test run, with the limits of outcome memory in more detail. Where does the verdict on your bot's answers end up today?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>python</category>
      <category>llm</category>
    </item>
    <item>
      <title>AI assistant keeps giving outdated answers after codebase refactoring, how to update its learned knowledge?</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Wed, 14 Oct 2026 13:56:00 +0000</pubDate>
      <link>https://dev.to/izgorodin/ai-assistant-keeps-giving-outdated-answers-after-codebase-refactoring-how-to-update-its-learned-1pfc</link>
      <guid>https://dev.to/izgorodin/ai-assistant-keeps-giving-outdated-answers-after-codebase-refactoring-how-to-update-its-learned-1pfc</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A refactor changes the code; the assistant's notes about that code stay as they were. Whether it notices depends on two things: does a note point at the code it is about, and is that pointer checked before the note is used?&lt;/li&gt;
&lt;li&gt;GitHub Copilot Memory documents both: facts cite code, and the citations are checked against the current branch before use. Claude Code dates its notes and tells the model to verify older ones against current code when it uses them. Cursor advises rules that reference files instead of copying them.&lt;/li&gt;
&lt;li&gt;Devin and Cline tie memory to the session it came from or to markdown files that you or the agent keep current. Memory layers (Zep, Mem0, Supermemory, Cognee) trace a fact to a conversation or document, not to code.&lt;/li&gt;
&lt;li&gt;After a refactor: keep out of memory what the code already says, point the rest at files and date it, run the checks that exist, replace a stale note instead of appending a correction, and send changed documents through an update path.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;A renamed function is easy to find in the repository. It can be much harder to get out of an assistant's memory.&lt;/p&gt;

&lt;p&gt;GitHub's engineering post on Copilot's memory says the core challenge is not retrieval but "ensuring that any stored knowledge remains valid as code evolves across branches and time" (&lt;a href="https://github.blog/ai-and-ml/github-copilot/building-an-agentic-memory-system-for-github-copilot/" rel="noopener noreferrer"&gt;GitHub blog, 2026-01-15&lt;/a&gt;). Persistence is not the problem. Persistence with no connection to current code is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A stale note is a stored claim that describes an earlier state of the code and was not revised or invalidated when that state changed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code-anchored memory is a stored claim tied to code locations (files, symbols, tests) that can be checked against the current repository before the claim is used.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is a reading of each vendor's published documentation and shipped files, first read on 2026-10-06 and re-read on 2026-10-10. It is not a hands-on test of the products. Where a page does not describe a behaviour, this article says so rather than claiming the product cannot do it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a refactor leaves the assistant on the old code
&lt;/h2&gt;

&lt;p&gt;A saved note and a repository file have separate lifecycles unless something connects them.&lt;/p&gt;

&lt;p&gt;Say an assistant noted that authentication goes through &lt;code&gt;validateSession()&lt;/code&gt;. A refactor replaces that function. The repository now holds the new name, but the old note can still be retrieved, because nothing ties it to the changed file and nothing checks it before use. Anthropic describes the same failure for an index of the code: it "returns a function the team renamed two weeks ago, or references a module that was deleted in the last sprint, with no indication that either is out of date" (&lt;a href="https://claude.com/resources/articles/how-claude-code-works-in-large-codebases-best-practices-and-where-to-start" rel="noopener noreferrer"&gt;Anthropic, 2026-05-14&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;So two questions matter more than whether a product "has memory":&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;What does the note point to?&lt;/strong&gt; Current code, a file, the session it was learned in, a conversation, or a document.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What checks or updates it?&lt;/strong&gt; A check when it is used, a code change, a scheduled cleanup, a command you run, or nothing that is described.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Copilot Memory, Claude Code, Cursor, Devin and Cline compared
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Read from each vendor's documentation and shipped files on 2026-10-10.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Assistant&lt;/th&gt;
&lt;th&gt;What a note points to&lt;/th&gt;
&lt;th&gt;What signals or checks a stale note&lt;/th&gt;
&lt;th&gt;Remember or re-read&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://docs.github.com/en/copilot/concepts/agents/copilot-memory" rel="noopener noreferrer"&gt;GitHub Copilot Memory&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Facts with citations to the code that supports them&lt;/td&gt;
&lt;td&gt;Citations checked against the current branch before use; unused entries deleted after 28 days&lt;/td&gt;
&lt;td&gt;Remembers, then re-reads the cited code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://code.claude.com/docs/en/memory" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;One auto memory directory per git repository, on one machine&lt;/td&gt;
&lt;td&gt;Last-modified time on notes; from two full days old, an age note and an instruction to verify against current code&lt;/td&gt;
&lt;td&gt;Skips what it can derive from the codebase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://cursor.com/docs/rules" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Version-controlled &lt;code&gt;.mdc&lt;/code&gt; rules that can reference files&lt;/td&gt;
&lt;td&gt;You edit a rule, or Agent does when you tag &lt;code&gt;@cursor&lt;/code&gt; on a GitHub issue or PR&lt;/td&gt;
&lt;td&gt;Rules point at files; search index stays on your machine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://docs.devin.ai/product-guides/memory" rel="noopener noreferrer"&gt;Devin&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The session where the entry was learned, with the date it was added&lt;/td&gt;
&lt;td&gt;Session Insights flags Knowledge items (now moving to Skills) written for a previous version of the codebase&lt;/td&gt;
&lt;td&gt;Does not save what is cheap to rediscover&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://docs.cline.bot/best-practices/memory-bank" rel="noopener noreferrer"&gt;Cline&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Markdown Memory Bank files in your project&lt;/td&gt;
&lt;td&gt;Update occasions named in the recommended instructions, one of them your &lt;code&gt;update memory bank&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Reads the Memory Bank after each reset, per the recommended instructions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  GitHub Copilot Memory checks cited code against the current branch
&lt;/h3&gt;

&lt;p&gt;In the &lt;a href="https://docs.github.com/en/copilot/concepts/agents/copilot-memory" rel="noopener noreferrer"&gt;Copilot Memory docs&lt;/a&gt;, Copilot "checks those citations against the current branch to confirm the information is still accurate. Only validated facts are used." The &lt;a href="https://github.blog/ai-and-ml/github-copilot/building-an-agentic-memory-system-for-github-copilot/" rel="noopener noreferrer"&gt;engineering post&lt;/a&gt; says how: "the agent is prompted to verify its accuracy and relevance by checking the cited code locations." So the check is an instruction to the agent when it reads a fact, not a rewrite on every commit. When the code disagrees, the agent "is encouraged to store a corrected version of the memory".&lt;/p&gt;

&lt;p&gt;The docs add three details that matter after a refactor. A fact captured from a pull request closed without merging has no effect unless the current codebase still supports it. Unused facts are deleted after 28 days, and "The 28-day timer may reset whenever Copilot successfully validates and uses an entry." Repository owners can review and delete repository-level facts by hand. Memory serves the Copilot cloud agent, code review, the CLI and agentic autofix, and, since 2026-08-11, agent chat in JetBrains (&lt;a href="https://github.blog/changelog/2026-08-11-copilot-memory-and-ollama-in-github-copilot-for-jetbrains" rel="noopener noreferrer"&gt;GitHub changelog&lt;/a&gt;). It "is currently in public preview and is subject to change."&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Code auto memory dates notes and warns when they are used
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://code.claude.com/docs/en/memory" rel="noopener noreferrer"&gt;memory page&lt;/a&gt;: "Auto memory is machine-local." All worktrees and subdirectories of one git repository share one directory on that machine, and the files "stay until you or Claude edits or deletes them." Notes have carried timestamps since 2.1.75 (2026-03-13) and an ISO &lt;code&gt;modified&lt;/code&gt; write time in their frontmatter since 2.1.214 (2026-07-18) (&lt;a href="https://code.claude.com/docs/en/changelog" rel="noopener noreferrer"&gt;changelog&lt;/a&gt;). The &lt;code&gt;/memory&lt;/code&gt; command gives "access to the auto memory folder and the auto memory toggle" (&lt;a href="https://code.claude.com/docs/en/debug-your-config" rel="noopener noreferrer"&gt;debug your config&lt;/a&gt;), so you can read and edit the notes yourself.&lt;/p&gt;

&lt;p&gt;The program shipped as Claude Code 2.1.291 adds an age note to any memory two full days old or older, followed by "Verify against current code before asserting as fact." That acts when a note is used, not when the code changes. A link from a note to a file or commit, and a re-check triggered by a code change, are not described on the Claude Code documentation read on 2026-10-10.&lt;/p&gt;

&lt;p&gt;Claude Code's first defence is upstream: auto memory skips "anything it can derive from the codebase". Function names, paths and signatures are cheaper to re-read than to keep as prose. For instruction files, &lt;code&gt;/doctor prompt-audit&lt;/code&gt; (since 2.1.283, 2026-09-25) reports references to missing files or commands and contradicting files, and changes nothing until you ask. Its default list covers CLAUDE.md, CLAUDE.local.md, AGENTS.md and the rules, skills, commands, subagents and output styles under &lt;code&gt;.claude/&lt;/code&gt; and &lt;code&gt;~/.claude/&lt;/code&gt;. It does not list the auto memory directory, though you can pass a path. The &lt;a href="https://code.claude.com/docs/en/best-practices" rel="noopener noreferrer"&gt;best practices&lt;/a&gt; put it in one line: "Treat CLAUDE.md like code".&lt;/p&gt;

&lt;h3&gt;
  
  
  Cursor rules should reference files, not copy them
&lt;/h3&gt;

&lt;p&gt;Cursor's &lt;a href="https://cursor.com/docs/rules" rel="noopener noreferrer"&gt;rules page&lt;/a&gt; says it directly: "Reference files instead of copying their contents. This keeps rules short and prevents them from becoming stale as code changes." Rules are &lt;code&gt;.mdc&lt;/code&gt; files in &lt;code&gt;.cursor/rules&lt;/code&gt;, under version control. You edit them, or Agent does when you tag &lt;code&gt;@cursor&lt;/code&gt; on a GitHub issue or PR.&lt;/p&gt;

&lt;p&gt;The difference is concrete. A rule that says "follow the interface in &lt;code&gt;src/auth/session.ts&lt;/code&gt;" sends the assistant to the current file. A rule that pastes the old interface becomes a second specification, and after the refactor it is the wrong one. Cursor's &lt;a href="https://cursor.com/docs/agent/tools/search" rel="noopener noreferrer"&gt;search&lt;/a&gt; builds its index on your machine and "does not store embeddings of your codebase for search"; that is a statement about search, not about rules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Devin memory links each entry to the session it came from
&lt;/h3&gt;

&lt;p&gt;In Devin's &lt;a href="https://docs.devin.ai/product-guides/memory" rel="noopener noreferrer"&gt;Memory&lt;/a&gt;, each entry "links back to the session where it was learned" and is dated when added. That records origin; it points at a past session, not at current code. &lt;a href="https://docs.devin.ai/product-guides/session-insights" rel="noopener noreferrer"&gt;Session Insights&lt;/a&gt; gives as one reason knowledge misled Devin: "Knowledge was written for a previous version of your codebase", listed under Misleading Knowledge so you can update or remove it. Dreaming "reviews your recent sessions alongside your existing memory" and removes "stale notes that no session has used". A check of a note against changed code is not described on the Devin Memory page read on 2026-10-10. The older &lt;a href="https://docs.devin.ai/product-guides/knowledge" rel="noopener noreferrer"&gt;Knowledge&lt;/a&gt; feature "is deprecated"; Devin's &lt;a href="https://docs.devin.ai/release-notes/overview" rel="noopener noreferrer"&gt;release notes&lt;/a&gt; date its move into Skills to 2026-09-18.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/AgentMemoryRepo/agentmemoryrepo/blob/main/SPEC.md" rel="noopener noreferrer"&gt;Agent Memory Repo&lt;/a&gt; specification that this memory is built on recommends a &lt;code&gt;source&lt;/code&gt; key, "a link to the agent session where the information was learned", and an &lt;code&gt;added&lt;/code&gt; date. A key tying an entry to a code file is not described in the specification, though "Keys are open."&lt;/p&gt;

&lt;h3&gt;
  
  
  Cline Memory Bank is documentation you keep current
&lt;/h3&gt;

&lt;p&gt;Cline calls its &lt;a href="https://docs.cline.bot/best-practices/memory-bank" rel="noopener noreferrer"&gt;Memory Bank&lt;/a&gt; "a documentation methodology". The recommended custom instructions on that page name four occasions to update it, among them "After implementing significant changes" and your own &lt;code&gt;update memory bank&lt;/code&gt;. The same instructions say: "After each reset, I rely ENTIRELY on my Memory Bank". These are recommended instructions, not built-in behaviour, and they make a stale Memory Bank expensive. Separately, the extension's &lt;a href="https://github.com/cline/cline/blob/main/apps/vscode/src/core/context/context-tracking/FileContextTracker.ts" rel="noopener noreferrer"&gt;source&lt;/a&gt; tracks outside edits to files read in the current task "to prevent stale context"; that covers the current task, not the Memory Bank.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory layers trace a fact to a conversation or document, not to code
&lt;/h2&gt;

&lt;p&gt;If your agent's memory sits in a separate memory layer, the anchor is the episode, conversation or document the fact came from. &lt;a href="https://help.getzep.com/source-traceability" rel="noopener noreferrer"&gt;Zep&lt;/a&gt; ties facts to episodes and says plainly that this "records where information came from. It does not establish that the source content or a derived fact is true." &lt;a href="https://docs.mem0.ai/api-reference/memory/history-memory" rel="noopener noreferrer"&gt;Mem0&lt;/a&gt; keeps in a memory's history "The conversation input that led to this memory change". Supermemory's &lt;a href="https://supermemory.ai/docs/supermemory-mcp/mcp" rel="noopener noreferrer"&gt;MCP&lt;/a&gt; returns "source document IDs", and its &lt;a href="https://supermemory.ai/docs/connectors/github" rel="noopener noreferrer"&gt;GitHub connector&lt;/a&gt; syncs pushed documentation "within approximately 10 minutes", removes deleted files, and excludes code files by default.&lt;/p&gt;

&lt;p&gt;What matters after a refactor is what each layer does with a changed document:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cognee:&lt;/strong&gt; "add() creates documents; it never updates one." (&lt;a href="https://docs.cognee.ai/python-api/add" rel="noopener noreferrer"&gt;add&lt;/a&gt;). Its &lt;a href="https://docs.cognee.ai/python-api/update" rel="noopener noreferrer"&gt;&lt;code&gt;update()&lt;/code&gt;&lt;/a&gt; replaces what was derived from the old content and by default re-ingests "only the chunks the edit touched"; when it rebuilds a document instead, entities that other documents in the same dataset also reference are kept.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supermemory:&lt;/strong&gt; "Content changes trigger full reprocessing" (&lt;a href="https://supermemory.ai/docs/ingestion/document-operations" rel="noopener noreferrer"&gt;document operations&lt;/a&gt;), and "facts supported only by the previous source can disappear after reprocessing" (&lt;a href="https://supermemory.ai/docs/migration/api-v5-document-updates" rel="noopener noreferrer"&gt;v5 document updates&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zep:&lt;/strong&gt; "Reingesting the same file creates new episodes, even when its contents are unchanged" (&lt;a href="https://help.getzep.com/prepare-data-for-ingestion" rel="noopener noreferrer"&gt;ingestion&lt;/a&gt;); each extracted fact is then compared with existing ones, and "duplicates merge, and contradictions invalidate older facts rather than leaving conflicting truths side by side." (&lt;a href="https://help.getzep.com/how-graph-creation-works" rel="noopener noreferrer"&gt;graph creation&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The lesson is the same in all three: a changed document goes through the update path. Adding it again can leave both versions in memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remember or re-read: what the October 2026 preprints measured
&lt;/h2&gt;

&lt;p&gt;Remembering saves rediscovering. Re-reading avoids trusting yesterday's summary. Anthropic's post explains why Claude Code searches the live code without an index, and names the price: "it works best when Claude has enough starting context to know where to look." Copilot keeps memory and re-reads the cited code.&lt;/p&gt;

&lt;p&gt;Three arXiv preprints from October 2026 study this trade-off. None studies refactoring, none is peer-reviewed, and every number below is the authors' own measurement on their own setup.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://arxiv.org/abs/2610.03902" rel="noopener noreferrer"&gt;arXiv 2610.03902&lt;/a&gt;&lt;/strong&gt; (Wenhui Chu, v1, 2026-10-02) asks, when supporting documents are revoked or replaced, "should it repair memory or re-read current evidence?" On ICU medical records with two 7B models, local repair used 5 to 10 times fewer revision tokens than rebuilding on short records, yet every memory pipeline cost at least twice full re-reading in held-out conditions; in a small development sweep that padded records to about 10,000 tokens with documents the task does not use, memory became cheaper than full re-reading after 2 to 14 uses, "while source-filtered re-reading remained cheapest." The author's own limit: "none of the four primary confirmatory tests reached statistical significance." No code or data are published yet. Its example fits code too: "The raw record is marked revoked; the extracted claim and the summary are not".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://arxiv.org/abs/2610.04838" rel="noopener noreferrer"&gt;MemTrace, arXiv 2610.04838&lt;/a&gt;&lt;/strong&gt; (Hongming Xu and others; v1 2026-10-04, v2 2026-10-08 with the same results) anchors a coding agent's records to "files, symbols, tests" and checks them "against the current repository state"; with nothing applicable, "the agent reads the current file or symbol, or reruns the required test." The authors: "Persistence alone, however, does not establish current validity". In 84 archived coding-task runs, 57.0% of 9,226 eligible file-bound records met a later change to at least one bound file, which is exposure, not error: "Exposure measures file changes; Trace Validation assesses whether historical evidence remains applicable." The performance runs used one model; sessions are left to future work; no refactoring. The code is published.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://arxiv.org/abs/2610.05241" rel="noopener noreferrer"&gt;StateWise, arXiv 2610.05241&lt;/a&gt;&lt;/strong&gt; (Yongyuan Peng and others, v1, 2026-10-04) planted one wrong operational record in an agent's persistent memory in each of 150 cases. Even with an explicit reminder to refresh, "refresh remains selective and recovery is limited". Removing the wrong record "reduces harm but leaves the agent without information needed to complete the task." The records were about environment and repository policy, not code after a refactor, and developer responses were simulated.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together they support a design question, not a product ranking: which notes are worth repairing, and which should be read again from the source.&lt;/p&gt;

&lt;h2&gt;
  
  
  Replace the stale note, do not append a correction
&lt;/h2&gt;

&lt;p&gt;A correction added beside the old note leaves two notes that disagree, and the old one can still win retrieval. An illustration of the pattern to avoid:&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; Session tokens are validated by &lt;span class="sb"&gt;`validateSession()`&lt;/span&gt; in src/auth/session.ts.
&lt;span class="p"&gt;-&lt;/span&gt; UPDATE 2026-10-10: &lt;span class="sb"&gt;`validateSession()`&lt;/span&gt; was removed; use &lt;span class="sb"&gt;`verifyToken()`&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Several systems tell the agent to fix the note in place instead. Letta's &lt;a href="https://github.com/letta-ai/letta-code/blob/main/src/agent/subagents/builtin/reflection.md" rel="noopener noreferrer"&gt;reflection prompt&lt;/a&gt;: "fix the stale entry at the source. Do not append the new version alongside the old." The Agent Memory Repo &lt;a href="https://github.com/AgentMemoryRepo/agentmemoryrepo/blob/main/skills/agent-memory-repo/SKILL.md" rel="noopener noreferrer"&gt;skill&lt;/a&gt;: "Update or remove entries that are out of date instead of adding a contradicting entry." Kevin Liao's &lt;a href="https://liao.gg/blog/agents-dont-need-memory" rel="noopener noreferrer"&gt;essay&lt;/a&gt; (version of 2026-10-05): "Facts should be rewritten when truth changes. No appending." Whether a model actually does this varies: Letta's &lt;a href="https://www.letta.com/blog/evaluating-memory-in-production-agents/" rel="noopener noreferrer"&gt;evaluation of 2026-07-28&lt;/a&gt; found that "weaker models make minimal edits that leave stale and contradictory information behind." What a store does with an older record that a newer one contradicts is compared in &lt;a href="https://mnemoverse.com/docs/library/agent-memory-consolidation-compared" rel="noopener noreferrer"&gt;Agent memory consolidation compared&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A rating moves a note down, it does not say why
&lt;/h2&gt;

&lt;p&gt;Several products take a rating on a memory or an answer, and none of them turns a thumbs-down into the corrected fact. Cognee can fold answer ratings into graph search; self-hosted, by default "the learned feedback signal does not change ranking until you opt in" (&lt;a href="https://docs.cognee.ai/guides/feedback-system" rel="noopener noreferrer"&gt;feedback system&lt;/a&gt;). Its &lt;a href="https://docs.cognee.ai/examples/feedback-score-shifting" rel="noopener noreferrer"&gt;demonstration&lt;/a&gt; rates one topic up and another down, because "a symmetric signal would raise both topics equally and leave their relative order untouched", and the same page points disagreeing facts to a separate conflict review, where they are settled "by each source's date, not by a rating." Mem0 takes POSITIVE, NEGATIVE and VERY_NEGATIVE ratings and says "This feedback is used to improve the accuracy of the memories and search results." (&lt;a href="https://docs.mem0.ai/platform/features/feedback-mechanism" rel="noopener noreferrer"&gt;feedback&lt;/a&gt;); how NEGATIVE lowers a memory is not described on that page. Supermemory down-weights facts its engine inferred "until someone confirms them": once approved, such a fact "Ranks like a stated fact"; once declined, it is "Removed from search entirely" (&lt;a href="https://supermemory.ai/docs/recall/memory-review" rel="noopener noreferrer"&gt;memory review&lt;/a&gt;). In Mnemoverse (the author's company), "Ratings re-rank what comes back next." (&lt;a href="https://mnemoverse.com/docs/api/agent-memory" rel="noopener noreferrer"&gt;agent memory&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;A rating can push a stale note down without saying that it is stale or what replaced it. After a refactor, fix the note.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do after a refactor
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Keep out of memory what the code already says.&lt;/strong&gt; Function names, paths, signatures and behaviour are for the agent to read from the code; Claude Code skips what it can derive from the codebase, Devin skips what is cheap to rediscover. A prompt such as "Read &lt;code&gt;src/auth/session.ts&lt;/code&gt; and confirm the current exports before writing the tests" does more than any remembered summary of that file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Point what you keep at files, and date it.&lt;/strong&gt; Cursor's rules advice and Copilot's citations both point at code; Claude Code records write times; the Agent Memory Repo recommends &lt;code&gt;source&lt;/code&gt; and &lt;code&gt;added&lt;/code&gt; keys. A session link tells you where a note came from, a file reference gives the agent something current to check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run the checks that exist.&lt;/strong&gt; Copilot validates cited facts on its own; repository owners can delete stale ones. In Claude Code, open &lt;code&gt;/memory&lt;/code&gt; and read the notes about the code you moved, and run &lt;code&gt;/doctor prompt-audit&lt;/code&gt; on your instruction files. In Cursor, update the affected rules. In Devin, review the Misleading Knowledge list in Session Insights (it covers Knowledge items, now moving to Skills). In Cline, run &lt;code&gt;update memory bank&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replace a stale note instead of adding one beside it&lt;/strong&gt; (Letta, the Agent Memory Repo). Copilot's agent is encouraged to store a corrected version; GitHub's pages do not say the old fact is removed, and repository owners can delete it by hand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Send a changed document down the update path, not the add path:&lt;/strong&gt; Cognee's &lt;code&gt;update()&lt;/code&gt;, not &lt;code&gt;add()&lt;/code&gt;; in Supermemory, "update the canonical document when facts change" (&lt;a href="https://supermemory.ai/docs/migration/api-v5-memory-forgetting" rel="noopener noreferrer"&gt;v5 memory forgetting&lt;/a&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Rules files age with the code too: a rules file is &lt;a href="https://mnemoverse.com/docs/library/claude-md-agents-md-cursor-rules" rel="noopener noreferrer"&gt;text in a context window&lt;/a&gt;. Forgetting over time is a &lt;a href="https://mnemoverse.com/docs/library/why-agents-need-to-forget" rel="noopener noreferrer"&gt;separate question&lt;/a&gt;, as are &lt;a href="https://mnemoverse.com/docs/library/agent-memory-evidence-vs-policy" rel="noopener noreferrer"&gt;outdated library patterns after a correction&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AI assistant keeps giving outdated answers after codebase refactoring, how to update its learned knowledge?
&lt;/h3&gt;

&lt;p&gt;Remove from memory what the code already says, point what you keep at files and date it, run the checks your assistant documents, replace a stale note instead of appending a correction beside it, and send changed documents through an update path. Whether the assistant notices a refactor on its own depends on whether its notes point at code and whether that pointer is checked before use; as of 2026-10-10, GitHub Copilot Memory documents both.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does my AI coding assistant still suggest a function I renamed?
&lt;/h3&gt;

&lt;p&gt;Something it reads was written before the rename. If that note points only to an earlier session, conversation or document, nothing in the rename touches it. GitHub Copilot Memory checks a fact's code citations against the current branch before use; Claude Code tells the model to verify notes two full days old or older against current code. Otherwise, rewrite or delete the note, or let the agent read the code again.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Claude Code update its memory after a refactor?
&lt;/h3&gt;

&lt;p&gt;Its memory files "stay until you or Claude edits or deletes them." (&lt;a href="https://code.claude.com/docs/en/memory" rel="noopener noreferrer"&gt;memory page&lt;/a&gt;). The Claude Code documentation read on 2026-10-10 does not describe a re-check of a note when code changes. The program shipped as Claude Code 2.1.291 dates notes and, when a note two full days old or older is used, tells the model to verify it against current code.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does GitHub Copilot Memory keep facts from going stale?
&lt;/h3&gt;

&lt;p&gt;Facts carry citations to code, and before a fact is used the agent is prompted to check those citations against the current branch; in &lt;a href="https://docs.github.com/en/copilot/concepts/agents/copilot-memory" rel="noopener noreferrer"&gt;GitHub's docs&lt;/a&gt;, "Only validated facts are used." Unused entries are deleted after 28 days, and the timer may reset on validated use. Repository owners can also delete facts by hand. The feature is in public preview.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can a thumbs-down rating fix an outdated memory?
&lt;/h3&gt;

&lt;p&gt;No. A rating can move a note down in retrieval where a product documents that, but it does not say why the note is wrong or what replaced it. Cognee's docs say disagreeing facts are settled "by each source's date, not by a rating." Correct or remove the note itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mnemoverse.com/docs/library/claude-md-agents-md-cursor-rules" rel="noopener noreferrer"&gt;Rules files are text in a context window&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mnemoverse.com/docs/library/why-agents-need-to-forget" rel="noopener noreferrer"&gt;Why agents need to forget&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mnemoverse.com/docs/library/agent-memory-evidence-vs-policy" rel="noopener noreferrer"&gt;Evidence vs policy in agent memory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mnemoverse.com/docs/library/stop-agent-repeating-fixed-mistakes" rel="noopener noreferrer"&gt;Stop an agent repeating mistakes you already fixed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mnemoverse.com/docs/library/agent-memory-consolidation-compared" rel="noopener noreferrer"&gt;Agent memory consolidation compared&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Reference: &lt;a href="https://mnemoverse.com/docs/api/agent-memory" rel="noopener noreferrer"&gt;agent memory&lt;/a&gt;, &lt;a href="https://mnemoverse.com/docs/api/reference" rel="noopener noreferrer"&gt;REST API&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Sources and method. Each vendor's pages were first read on 2026-10-06; every quotation on this page was read again on 2026-10-10 (the two Cognee feedback pages on 2026-10-13) and is contiguous text of the source linked beside it (for arXiv papers, the full text behind the abstract page; for Claude Code's shipped instructions, the npm package named below), with the vendor's punctuation. Where a vendor describes an instruction to the model rather than a mechanism, this page says so. Claude Code: &lt;a href="https://code.claude.com/docs/en/memory" rel="noopener noreferrer"&gt;memory&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/best-practices" rel="noopener noreferrer"&gt;best practices&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/changelog" rel="noopener noreferrer"&gt;changelog&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/debug-your-config" rel="noopener noreferrer"&gt;debug your config&lt;/a&gt;, and the shipped program in the npm package @anthropic-ai/claude-code-linux-x64 2.1.291, searched byte by byte; Anthropic, &lt;a href="https://claude.com/resources/articles/how-claude-code-works-in-large-codebases-best-practices-and-where-to-start" rel="noopener noreferrer"&gt;How Claude Code works in large codebases&lt;/a&gt; (2026-05-14). GitHub: &lt;a href="https://docs.github.com/en/copilot/concepts/agents/copilot-memory" rel="noopener noreferrer"&gt;Copilot Memory&lt;/a&gt;, &lt;a href="https://github.blog/ai-and-ml/github-copilot/building-an-agentic-memory-system-for-github-copilot/" rel="noopener noreferrer"&gt;Building an agentic memory system for GitHub Copilot&lt;/a&gt; (2026-01-15), &lt;a href="https://github.blog/changelog/2026-08-11-copilot-memory-and-ollama-in-github-copilot-for-jetbrains" rel="noopener noreferrer"&gt;JetBrains changelog&lt;/a&gt; (2026-08-11). Cursor: &lt;a href="https://cursor.com/docs/rules" rel="noopener noreferrer"&gt;rules&lt;/a&gt;, &lt;a href="https://cursor.com/docs/agent/tools/search" rel="noopener noreferrer"&gt;search&lt;/a&gt;. Devin: &lt;a href="https://docs.devin.ai/product-guides/memory" rel="noopener noreferrer"&gt;memory&lt;/a&gt;, &lt;a href="https://docs.devin.ai/product-guides/session-insights" rel="noopener noreferrer"&gt;Session Insights&lt;/a&gt;, &lt;a href="https://docs.devin.ai/product-guides/knowledge" rel="noopener noreferrer"&gt;Knowledge&lt;/a&gt;, &lt;a href="https://docs.devin.ai/release-notes/overview" rel="noopener noreferrer"&gt;release notes&lt;/a&gt;. Agent Memory Repo: &lt;a href="https://github.com/AgentMemoryRepo/agentmemoryrepo/blob/main/SPEC.md" rel="noopener noreferrer"&gt;SPEC.md&lt;/a&gt;, &lt;a href="https://github.com/AgentMemoryRepo/agentmemoryrepo/blob/main/skills/agent-memory-repo/SKILL.md" rel="noopener noreferrer"&gt;SKILL.md&lt;/a&gt;. Cline: &lt;a href="https://docs.cline.bot/best-practices/memory-bank" rel="noopener noreferrer"&gt;Memory Bank&lt;/a&gt;, &lt;a href="https://github.com/cline/cline/blob/main/apps/vscode/src/core/context/context-tracking/FileContextTracker.ts" rel="noopener noreferrer"&gt;FileContextTracker.ts&lt;/a&gt;. Letta: &lt;a href="https://github.com/letta-ai/letta-code/blob/main/src/agent/subagents/builtin/reflection.md" rel="noopener noreferrer"&gt;reflection.md&lt;/a&gt;, &lt;a href="https://www.letta.com/blog/evaluating-memory-in-production-agents/" rel="noopener noreferrer"&gt;Evaluating memory in production agents&lt;/a&gt; (2026-07-28). Mem0: &lt;a href="https://docs.mem0.ai/api-reference/memory/history-memory" rel="noopener noreferrer"&gt;memory history&lt;/a&gt;, &lt;a href="https://docs.mem0.ai/platform/features/feedback-mechanism" rel="noopener noreferrer"&gt;feedback&lt;/a&gt;. Zep: &lt;a href="https://help.getzep.com/source-traceability" rel="noopener noreferrer"&gt;source traceability&lt;/a&gt;, &lt;a href="https://help.getzep.com/prepare-data-for-ingestion" rel="noopener noreferrer"&gt;preparing data for ingestion&lt;/a&gt;, &lt;a href="https://help.getzep.com/how-graph-creation-works" rel="noopener noreferrer"&gt;how graph creation works&lt;/a&gt;. Cognee: &lt;a href="https://docs.cognee.ai/python-api/update" rel="noopener noreferrer"&gt;update&lt;/a&gt;, &lt;a href="https://docs.cognee.ai/python-api/add" rel="noopener noreferrer"&gt;add&lt;/a&gt;, &lt;a href="https://docs.cognee.ai/guides/feedback-system" rel="noopener noreferrer"&gt;feedback system&lt;/a&gt;, &lt;a href="https://docs.cognee.ai/examples/feedback-score-shifting" rel="noopener noreferrer"&gt;feedback demonstration&lt;/a&gt;. Supermemory: &lt;a href="https://supermemory.ai/docs/ingestion/document-operations" rel="noopener noreferrer"&gt;document operations&lt;/a&gt;, &lt;a href="https://supermemory.ai/docs/connectors/github" rel="noopener noreferrer"&gt;GitHub connector&lt;/a&gt;, &lt;a href="https://supermemory.ai/docs/supermemory-mcp/mcp" rel="noopener noreferrer"&gt;MCP&lt;/a&gt;, &lt;a href="https://supermemory.ai/docs/recall/memory-review" rel="noopener noreferrer"&gt;memory review&lt;/a&gt;, &lt;a href="https://supermemory.ai/docs/migration/api-v5-document-updates" rel="noopener noreferrer"&gt;v5 document updates&lt;/a&gt;, &lt;a href="https://supermemory.ai/docs/migration/api-v5-memory-forgetting" rel="noopener noreferrer"&gt;v5 memory forgetting&lt;/a&gt;. Research: &lt;a href="https://arxiv.org/abs/2610.03902" rel="noopener noreferrer"&gt;arXiv 2610.03902&lt;/a&gt; (v1), &lt;a href="https://arxiv.org/abs/2610.04838" rel="noopener noreferrer"&gt;arXiv 2610.04838&lt;/a&gt; (v1 and v2), &lt;a href="https://arxiv.org/abs/2610.05241" rel="noopener noreferrer"&gt;arXiv 2610.05241&lt;/a&gt; (v1). Discussion: &lt;a href="https://liao.gg/blog/agents-dont-need-memory" rel="noopener noreferrer"&gt;Kevin Liao's essay&lt;/a&gt; (version of 2026-10-05). Mnemoverse: &lt;a href="https://mnemoverse.com/docs/api/agent-memory" rel="noopener noreferrer"&gt;agent memory&lt;/a&gt;. No score or performance number for any product appears on this page.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Edward Izgorodin · Mnemoverse · 2026-10-10&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>programming</category>
      <category>refactoring</category>
    </item>
    <item>
      <title>CodeRabbit vs Claude Code?</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Tue, 13 Oct 2026 13:55:59 +0000</pubDate>
      <link>https://dev.to/izgorodin/coderabbit-vs-claude-code-3gc6</link>
      <guid>https://dev.to/izgorodin/coderabbit-vs-claude-code-3gc6</guid>
      <description>&lt;p&gt;Claude Code is not one reviewer but several products: Anthropic's managed Code Review, the Claude Code GitHub Action you run in your own workflows, and the &lt;code&gt;/code-review&lt;/code&gt; command in your terminal, with an &lt;code&gt;ultra&lt;/code&gt; mode that runs in the cloud. Code Review is a research preview for Team and Enterprise plans on GitHub, billed per review from usage credits, $15 to $25 on average by Anthropic's docs. CodeRabbit bills per developer who creates pull requests, from $24 per developer per month billed annually, and lists GitHub, GitLab, Azure DevOps and Bitbucket. CodeRabbit also runs inside Claude Code as a plugin, so the answer is often both; choose by code host, billing unit, where the review runs, and whether the reviewer sits outside the session that wrote the code.&lt;/p&gt;

&lt;p&gt;Every fact below comes from each vendor's own pages as I read them on 11 October 2026, and neither Anthropic nor CodeRabbit saw this text before publication.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four options side by side
&lt;/h2&gt;

&lt;p&gt;In Anthropic's words, "Several products share the Claude Code name." Each cell is from the vendor's own pages, read on 11 October 2026; links are at the end.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;CodeRabbit&lt;/th&gt;
&lt;th&gt;Claude Code Review (managed)&lt;/th&gt;
&lt;th&gt;Claude Code GitHub Action&lt;/th&gt;
&lt;th&gt;
&lt;code&gt;/code-review&lt;/code&gt; in your terminal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Status&lt;/td&gt;
&lt;td&gt;paid plans Essentials, Team, Advanced, Enterprise, plus Free&lt;/td&gt;
&lt;td&gt;"research preview"&lt;/td&gt;
&lt;td&gt;"open source and available", per Anthropic&lt;/td&gt;
&lt;td&gt;a Claude Code command, also run as &lt;code&gt;/review&lt;/code&gt;; its &lt;code&gt;ultra&lt;/code&gt; mode is a research preview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code hosts&lt;/td&gt;
&lt;td&gt;GitHub, GitLab, Azure DevOps, Bitbucket Cloud and Data Center, GitHub Enterprise Server, self-managed GitLab&lt;/td&gt;
&lt;td&gt;GitHub; GitHub Enterprise Server on Team and Enterprise, if Anthropic's infrastructure can reach it&lt;/td&gt;
&lt;td&gt;GitHub; for GitLab, a separate integration "currently in beta" and "maintained by GitLab"&lt;/td&gt;
&lt;td&gt;any local diff; &lt;code&gt;--comment&lt;/code&gt; posts to a GitHub pull request or a GitLab merge request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When it reviews&lt;/td&gt;
&lt;td&gt;when a pull request opens against the main branch, then as you push, skipping draft pull requests unless configured to include them; &lt;code&gt;@coderabbitai review&lt;/code&gt; (incremental) or &lt;code&gt;@coderabbitai full review&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;per repository: Once after PR creation, After every push, or Manual; &lt;code&gt;@claude review&lt;/code&gt; for one review, &lt;code&gt;@claude review always&lt;/code&gt; to follow later pushes; "20 minutes on average"&lt;/td&gt;
&lt;td&gt;on your workflow's events; the review workflow skips draft, closed and trivial pull requests and those Claude already commented on&lt;/td&gt;
&lt;td&gt;when started: your branch and uncommitted changes, or a PR, a branch or a ref range&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What you pay for&lt;/td&gt;
&lt;td&gt;developers who create pull requests: Essentials $24 per developer per month billed annually or $30 monthly, Team $48 or $60&lt;/td&gt;
&lt;td&gt;each review, averaging $15-25 per review from usage credits outside the plan; After every push multiplies that by the number of pushes&lt;/td&gt;
&lt;td&gt;GitHub Actions minutes, plus Claude API tokens or, with an OAuth token, your Claude subscription&lt;/td&gt;
&lt;td&gt;normal Claude Code usage; &lt;code&gt;ultra&lt;/code&gt; has 3 free runs on Pro and Max, once per account, then typically $5 to $25 per review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plan you need&lt;/td&gt;
&lt;td&gt;Free gives PR summaries, with reviews in the VS Code extension and CLI; open-source projects get Team features without paying&lt;/td&gt;
&lt;td&gt;Team or Enterprise, not Pro or Max; not for organizations with Zero Data Retention or the HIPAA configuration&lt;/td&gt;
&lt;td&gt;a Claude API key, or an OAuth token on Pro, Max, Team or Enterprise&lt;/td&gt;
&lt;td&gt;plans without Code Review too: "On other plans, you can still review a diff locally"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Where it runs&lt;/td&gt;
&lt;td&gt;"Sandboxed cloud execution with your full repository cloned for isolated analysis"; self-hosted on Enterprise from 500 user seats&lt;/td&gt;
&lt;td&gt;"on Anthropic infrastructure"&lt;/td&gt;
&lt;td&gt;GitHub-hosted runners, calling the Claude API, Amazon Bedrock, Google Cloud's Agent Platform or Microsoft Foundry&lt;/td&gt;
&lt;td&gt;your machine, as a background subagent with its own context window; &lt;code&gt;ultra&lt;/code&gt; in a cloud sandbox&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How a finding is checked&lt;/td&gt;
&lt;td&gt;a Verification agent among "Specialized AI agents working in parallel"&lt;/td&gt;
&lt;td&gt;"a verification step checks candidates against actual code behavior to filter out false positives"&lt;/td&gt;
&lt;td&gt;set by your workflow; the review workflow runs Anthropic's &lt;code&gt;code-review&lt;/code&gt; plugin&lt;/td&gt;
&lt;td&gt;at low effort it reports the findings it is most confident in; with &lt;code&gt;ultra&lt;/code&gt;, "every reported finding is independently reproduced and verified"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What lands on the pull request&lt;/td&gt;
&lt;td&gt;comments that update as you push; &lt;code&gt;@coderabbitai approve&lt;/code&gt; resolves its threads and attempts to approve, for teams that require it as a reviewer&lt;/td&gt;
&lt;td&gt;inline comments by severity and a check run that "always completes with a neutral conclusion"&lt;/td&gt;
&lt;td&gt;an inline comment on each issue, or one summary comment when it finds none&lt;/td&gt;
&lt;td&gt;nothing unless you pass &lt;code&gt;--comment&lt;/code&gt;; &lt;code&gt;--fix&lt;/code&gt; applies the findings to your working tree&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Training on your code&lt;/td&gt;
&lt;td&gt;"CodeRabbit never uses customer code for model training."&lt;/td&gt;
&lt;td&gt;no, under commercial terms (Team, Enterprise, API), unless the customer opts in&lt;/td&gt;
&lt;td&gt;by account: commercial terms for an API key; Anthropic trains on data from Free, Pro and Max accounts when the setting is on&lt;/td&gt;
&lt;td&gt;the same rule, by account&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Why not just ask Claude Code to review the pull request?
&lt;/h2&gt;

&lt;p&gt;You can, and Anthropic documents how. The &lt;code&gt;/code-review&lt;/code&gt; command reviews a diff "without installing the GitHub App", follows your CLAUDE.md "like any Claude Code session", and "runs as a background subagent with its own context window"; &lt;code&gt;--comment&lt;/code&gt; posts the findings to the pull request. It runs when started, so a later push gets a review only when it is run again.&lt;/p&gt;

&lt;p&gt;The services differ in what happens after the first review. CodeRabbit "reviews new pull requests automatically and updates its feedback as you push new commits", and Code Review in After every push mode keeps "catching new issues as the PR evolves and auto-resolving threads when you fix flagged issues". That record on the pull request, repeated on every push, is what a one-off prompt does not keep for you. Whether a reviewer that shares the author's model misses more bugs is a fair question that none of the pages I read measures; the test at the end of this article is the closest a team can get on its own code.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each one costs, in its own unit
&lt;/h2&gt;

&lt;p&gt;A CodeRabbit seat includes reviews up to an hourly limit: "Essentials includes 5 PR reviews per hour" on a rolling window, and sustained use lowers the refill rate, down to "1 review/hour, one review at a time" after 60 or more reviews in 7 days. Past the limit, reviews wait unless usage-based reviews are on, at $0.25 per reviewed file. One detail to check before a trial ends: at the first eligible overage, CodeRabbit turns usage-based reviews on in Automatic mode unless an admin already chose Off or On demand; trial overages are free, and the choice carries over into a paid subscription unless someone turns it off.&lt;/p&gt;

&lt;p&gt;Anthropic's managed Code Review bills per review: "Each review averages $15-25 in cost, scaling with PR size, codebase complexity, and how many issues require verification." It is "billed separately through usage credits and does not count against your plan's included usage", and in Manual mode "cost accrues only from reviews someone requests".&lt;/p&gt;

&lt;p&gt;One recipe, not a measurement: Anthropic's average for one managed review ($15 to $25, its Code Review page) is in the same range as one month of one CodeRabbit Essentials seat billed annually ($24, its pricing page), and that seat covers its developer's pull request reviews up to the hourly limit. Which bill comes out lower depends on how many pull requests each developer opens and how often they push, so run both with your own counts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running both
&lt;/h2&gt;

&lt;p&gt;CodeRabbit documents a plugin for Claude Code: &lt;code&gt;/plugin install coderabbit&lt;/code&gt;, then &lt;code&gt;/coderabbit:coderabbit-review&lt;/code&gt; reviews your local changes through the CodeRabbit CLI. Both tools read the same instruction file: CodeRabbit "automatically detects coding guideline files such as .cursorrules, CLAUDE.md, and AGENTS.md in your repository and applies them as review criteria", and Anthropic's Code Review "reads two files from your repository to guide what it flags", CLAUDE.md and REVIEW.md.&lt;/p&gt;

&lt;p&gt;The vendors are linked on billing too. CodeRabbit joined the Claude Marketplace on 27 May 2026, and "Anthropic customers can apply their existing Anthropic spend commitment toward CodeRabbit". Anthropic's marketplace page says "Claude powers CodeRabbit's context engine and review harness", and CodeRabbit's FAQ says your code is shared with "OpenAI and/or Anthropic for reviewing purposes only". A team can keep &lt;code&gt;/code-review&lt;/code&gt; or the plugin for the moment before a push and one service on the pull request.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If this is true for your team&lt;/th&gt;
&lt;th&gt;Look first at&lt;/th&gt;
&lt;th&gt;What the pages say&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Repositories live on GitLab, Azure DevOps or Bitbucket&lt;/td&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;CodeRabbit lists all three; Code Review lists GitHub and GitHub Enterprise Server, and for GitLab Anthropic documents a CI/CD integration in beta that GitLab maintains, and &lt;code&gt;/code-review --comment&lt;/code&gt;; Bitbucket and Azure DevOps were not found in Anthropic's Claude Code docs index or on its Code Review page as of 11 October 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The review should run in your own workflows or on your own servers&lt;/td&gt;
&lt;td&gt;the Claude Code GitHub Action, or CodeRabbit self-hosted&lt;/td&gt;
&lt;td&gt;the Action runs inside your repository's workflows; CodeRabbit self-hosts for Enterprise customers "with 500 or more user seats"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The bill should follow headcount, or only the reviews someone asks for&lt;/td&gt;
&lt;td&gt;CodeRabbit for headcount; Code Review in Manual mode or &lt;code&gt;/code-review&lt;/code&gt; for requests&lt;/td&gt;
&lt;td&gt;CodeRabbit bills developers who create pull requests; Manual mode bills requested reviews; &lt;code&gt;/code-review&lt;/code&gt; counts toward normal usage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Your organization runs Zero Data Retention or the HIPAA configuration&lt;/td&gt;
&lt;td&gt;CodeRabbit, the GitHub Action or &lt;code&gt;/code-review&lt;/code&gt;, after your policy owner reads each data page&lt;/td&gt;
&lt;td&gt;Code Review and ultrareview are not available to those organizations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A tool must be able to approve, as a required reviewer&lt;/td&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;@coderabbitai approve&lt;/code&gt;, which submits an approval only when the &lt;code&gt;reviews.request_changes_workflow&lt;/code&gt; setting is enabled; Code Review's check run stays neutral, so a merge gate is a script in your CI that reads it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You want each candidate finding checked before it reaches the pull request&lt;/td&gt;
&lt;td&gt;CodeRabbit, Code Review, ultrareview, or Sigma (Mnemoverse, the author's company)&lt;/td&gt;
&lt;td&gt;CodeRabbit lists a Verification agent; Code Review describes "a verification step"; ultrareview says "every reported finding is independently reproduced and verified"; Sigma, in closed beta on GitHub by invitation, "checks potential issues and brings the evidence back to your code", and its docs say a fresh verifier "confirms, rejects or reclassifies each one", that "only confirmed candidates are verified findings" and that suspicions no verifier confirmed stay labeled separately; Sigma runs on Claude Code and OpenAI models and reviews its team's own repositories every day; its homepage takes requests through a "Request beta access" form and says "A request does not grant access automatically."&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If Greptile is also on your list, &lt;a href="https://dev.to/izgorodin/coderabbit-vs-greptile-4jcl"&gt;CodeRabbit vs Greptile?&lt;/a&gt; compares those two in the same way.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each vendor publishes as numbers
&lt;/h2&gt;

&lt;p&gt;Anthropic's launch article of 9 March 2026 reports its own use: "We run Code Review on nearly every PR at Anthropic." On those pull requests, "Before, 16% of PRs got substantive review comments. Now 54% do.", and "Engineers largely agree with what it surfaces: less than 1% of findings are marked incorrect." The set is Anthropic's own pull requests, and its own engineers did the marking.&lt;/p&gt;

&lt;p&gt;CodeRabbit's write-up of 28 September 2026 compares Claude models inside CodeRabbit's own pipeline, not CodeRabbit against other tools. On its 13 hardest known-bug cases, Sonnet 5.5 caught 6 of 13 issues through actionable comments, at 41.2% actionable precision, where "Actionable precision is passing actionable comments divided by all actionable comments." The post adds "Thirteen cases is a small set, and we say so throughout."&lt;/p&gt;

&lt;p&gt;The two numbers answer different questions on different sets, so they do not belong in one column. How to read vendor benchmarks in general is the subject of &lt;a href="https://mnemoverse.com/docs/library/ai-code-review-benchmarks" rel="noopener noreferrer"&gt;"How Are AI Code Review Tools Benchmarked, and Can You Trust the Results?"&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A two-week test on your own pull requests
&lt;/h2&gt;

&lt;p&gt;CodeRabbit's plans page says new organizations start with a "14-day Advanced trial", and Code Review in Manual mode bills only the reviews you request on a Team or Enterprise plan. Pick ten merged pull requests from the last quarter that later needed a bug fix, so you already know what a careful reviewer should have said, and open each one again from a branch at its original commits. Let CodeRabbit review it, comment &lt;code&gt;@claude review&lt;/code&gt; for Code Review, and run &lt;code&gt;/code-review&lt;/code&gt; with the PR number in a terminal.&lt;/p&gt;

&lt;p&gt;For every comment, note whether it names the known bug, whether you would have deleted it, and how many minutes it took to confirm. After two weeks you have known bugs named out of ten, comments you would delete per pull request, and cost per pull request in each vendor's own unit. That answers CodeRabbit vs Claude Code for your code, and if your code is written with Claude Code, it also shows how each reviewer does on changes from that tool.&lt;/p&gt;

&lt;p&gt;Sources, all read on 11 October 2026. Anthropic: &lt;a href="https://code.claude.com/docs/en/code-review" rel="noopener noreferrer"&gt;Code Review&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/github-actions" rel="noopener noreferrer"&gt;Claude Code GitHub Actions&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/ultrareview" rel="noopener noreferrer"&gt;ultrareview&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/github-enterprise-server" rel="noopener noreferrer"&gt;GitHub Enterprise Server&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/gitlab-ci-cd" rel="noopener noreferrer"&gt;GitLab CI/CD&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/feature-availability" rel="noopener noreferrer"&gt;feature availability&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/en/data-usage" rel="noopener noreferrer"&gt;data usage&lt;/a&gt;, &lt;a href="https://code.claude.com/docs/llms.txt" rel="noopener noreferrer"&gt;docs index&lt;/a&gt;, &lt;a href="https://claude.com/resources/articles/code-review" rel="noopener noreferrer"&gt;Code Review launch article&lt;/a&gt;, &lt;a href="https://claude.com/marketplace/agents-products/coderabbit" rel="noopener noreferrer"&gt;CodeRabbit in the Claude Marketplace&lt;/a&gt;. CodeRabbit: &lt;a href="https://www.coderabbit.ai/pricing" rel="noopener noreferrer"&gt;pricing&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/management/plans.md" rel="noopener noreferrer"&gt;plans&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/management/rate-limits.md" rel="noopener noreferrer"&gt;rate limits&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/management/usage-based-addon.md" rel="noopener noreferrer"&gt;usage-based reviews&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/platforms/overview.md" rel="noopener noreferrer"&gt;platforms&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/faq.md" rel="noopener noreferrer"&gt;FAQ&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/overview/architecture" rel="noopener noreferrer"&gt;architecture&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/overview/pull-request-review.md" rel="noopener noreferrer"&gt;pull request reviews&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/reference/review-commands.md" rel="noopener noreferrer"&gt;review commands&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/self-hosted/overview.md" rel="noopener noreferrer"&gt;self-hosted&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/knowledge-base/code-guidelines.md" rel="noopener noreferrer"&gt;coding guidelines&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/cli/claude-code-integration.md" rel="noopener noreferrer"&gt;Claude Code plugin&lt;/a&gt;, &lt;a href="https://www.coderabbit.ai/newsroom/coderabbit-joins-claude-marketplace" rel="noopener noreferrer"&gt;Claude Marketplace news&lt;/a&gt;, &lt;a href="https://www.coderabbit.ai/blog/sonnet-5-5-model-review" rel="noopener noreferrer"&gt;Sonnet 5.5 write-up&lt;/a&gt;. Sigma: &lt;a href="https://sigma.mnemoverse.com/" rel="noopener noreferrer"&gt;homepage&lt;/a&gt; and &lt;a href="https://sigma.mnemoverse.com/docs/reading-a-review" rel="noopener noreferrer"&gt;reading a review&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>codereview</category>
      <category>claudecode</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Explain how an importance gate prevents noise accumulation in persistent agent memories.</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Tue, 13 Oct 2026 11:10:00 +0000</pubDate>
      <link>https://dev.to/izgorodin/explain-how-an-importance-gate-prevents-noise-accumulation-in-persistent-agent-memories-5c4e</link>
      <guid>https://dev.to/izgorodin/explain-how-an-importance-gate-prevents-noise-accumulation-in-persistent-agent-memories-5c4e</guid>
      <description>&lt;p&gt;An agent that saves everything it hears fills up fast. Within a week its store holds "The deployment region is Dublin." three times, a reworded copy twice, a dozen "ok, thanks" and the JSON of every tool call. Ask where you deploy, and copies of one fact take the top results. Nothing was retrieved wrongly. The store accepted writes it should have refused.&lt;/p&gt;

&lt;p&gt;The short answer: an importance gate is a test on the write path that decides whether an incoming write is stored at all, so noise is refused before it can pile up and crowd later reads. It prevents only the noise its test can see. A sameness test refuses repeats, a written list refuses the noise it names, a model's judgement against criteria you write refuses chatter at the cost of inference, and declared types refuse what falls outside your schema. The name does not tell you which of these you have.&lt;/p&gt;

&lt;h2&gt;
  
  
  A gate decides storage, not ranking
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A write gate is a decision on the write path about whether an incoming write is stored at all.&lt;/strong&gt; It does not rank memories at read time. Two distinctions matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Refusing a write is not filtering what is extracted from it.&lt;/strong&gt; A product can drop an extracted entity and still keep the text it came from.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The name does not fix the test.&lt;/strong&gt; Mnemoverse (the author's company) defines the write response field &lt;code&gt;stored&lt;/code&gt; in its &lt;a href="https://mnemoverse.com/docs/api/reference#post-memory-write" rel="noopener noreferrer"&gt;API reference&lt;/a&gt; as "True if the write passed the write gate (novelty check)", and the number in the field it calls &lt;code&gt;importance&lt;/code&gt; as a "Novelty score [0, 1]: how different the write is from the nearest existing memory in the same domain". Mem0's &lt;a href="https://docs.mem0.ai/integrations/openclaw" rel="noopener noreferrer"&gt;OpenClaw integration&lt;/a&gt; describes "a structured protocol with importance gates and domain overlays": in its &lt;a href="https://raw.githubusercontent.com/mem0ai/mem0/main/integrations/openclaw/skills/memory-triage/SKILL.md" rel="noopener noreferrer"&gt;triage protocol&lt;/a&gt; the agent judges every candidate fact against four gates, and Gate 2, NOVELTY, checks it against memories already recalled. One word, two tests.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Match the test to the noise
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;The noise you have&lt;/th&gt;
&lt;th&gt;A test that matches it&lt;/th&gt;
&lt;th&gt;What it costs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The same text twice&lt;/td&gt;
&lt;td&gt;A hash of the content, or a novelty comparison&lt;/td&gt;
&lt;td&gt;A lookup, or a comparison with nearby memories&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The same fact reworded&lt;/td&gt;
&lt;td&gt;A similarity or novelty comparison with stored memories&lt;/td&gt;
&lt;td&gt;An embedding of the write and a search of nearby memories&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chatter you can name&lt;/td&gt;
&lt;td&gt;A written list of patterns&lt;/td&gt;
&lt;td&gt;A list to maintain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chatter you cannot name&lt;/td&gt;
&lt;td&gt;A model's judgement against criteria you write&lt;/td&gt;
&lt;td&gt;Model inference, and the occasional miss&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anything outside your schema&lt;/td&gt;
&lt;td&gt;Declared types&lt;/td&gt;
&lt;td&gt;A schema to maintain; only what you declared is caught&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A sameness test asks the wrong question about chatter: a new "ok, thanks" restates nothing stored, so it passes. Named junk is a list. Unnamed junk is a model, and you pay for the call, including the miss.&lt;/p&gt;

&lt;h2&gt;
  
  
  What six products test on the write path
&lt;/h2&gt;

&lt;p&gt;Each row is a named, documented path as the vendor's own page states it, not every path a product has. Nothing here is a measurement.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Product and path&lt;/th&gt;
&lt;th&gt;What the test asks&lt;/th&gt;
&lt;th&gt;What a refused write becomes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Mem0&lt;/strong&gt;: add path, OpenClaw triage&lt;/td&gt;
&lt;td&gt;Is the fact already stored? In the plugin: does it pass all four triage gates?&lt;/td&gt;
&lt;td&gt;A recognised duplicate is not stored again; triage writes nothing; a message matching a noise pattern is dropped&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Cognee&lt;/strong&gt;: session distillation, folder presort&lt;/td&gt;
&lt;td&gt;Not rated harmful, with confidence through the distillation gate? Does a writer, checking existing lessons, accept the lesson? Which scanned groups do you approve?&lt;/td&gt;
&lt;td&gt;A rejected lesson is dropped; presort ingests only the groups you approve&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Letta&lt;/strong&gt;: Letta Code reflection pass&lt;/td&gt;
&lt;td&gt;Lasting rather than ephemeral, not already captured, generalizable?&lt;/td&gt;
&lt;td&gt;No change and no commit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Supermemory&lt;/strong&gt;: organizational context (API v5), document ID&lt;/td&gt;
&lt;td&gt;What does your organisation do, and what content matters, in words you write? Was this ID sent before with the same content?&lt;/td&gt;
&lt;td&gt;Steers what gets extracted into memories; casual chatter is less likely to become durable memory; an unchanged duplicate under the same ID queues no new work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Zep&lt;/strong&gt;: episode ingestion, strict ontology&lt;/td&gt;
&lt;td&gt;Within the size limit? Does an extracted entity match a declared type?&lt;/td&gt;
&lt;td&gt;Oversized episode rejected, not truncated; undeclared entity dropped while the episode stays&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Mnemoverse&lt;/strong&gt;: write API&lt;/td&gt;
&lt;td&gt;How novel is the write against the nearest memory in the same domain?&lt;/td&gt;
&lt;td&gt;Nothing stored: &lt;code&gt;stored&lt;/code&gt; false, a null &lt;code&gt;atom_id&lt;/code&gt;, a &lt;code&gt;reason&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Mem0&lt;/strong&gt; checks related memories on its add path "so it can avoid storing the same fact again" (&lt;a href="https://docs.mem0.ai/core-concepts/how-it-works" rel="noopener noreferrer"&gt;How Mem0 works&lt;/a&gt;). Its open source pipeline lists "Hash-based deduplication (MD5, prevents exact duplicates)" (&lt;a href="https://docs.mem0.ai/migration/oss-v2-to-v3" rel="noopener noreferrer"&gt;v2 to v3 migration&lt;/a&gt;), and its hosted platform reaches further, per its &lt;a href="https://docs.mem0.ai/platform/features/dream" rel="noopener noreferrer"&gt;Dream page&lt;/a&gt;: "most exact or near-duplicate restatements of a fact you already have are recognised and deduplicated as the memory is added". Its &lt;a href="https://docs.mem0.ai/platform/features/custom-instructions" rel="noopener noreferrer"&gt;custom instructions&lt;/a&gt; add a model's judgement against criteria you write. The OpenClaw &lt;a href="https://raw.githubusercontent.com/mem0ai/mem0/main/integrations/openclaw/skills/memory-triage/SKILL.md" rel="noopener noreferrer"&gt;triage protocol&lt;/a&gt; says: "Most turns produce zero memory operations. That is correct and expected." The plugin's &lt;a href="https://raw.githubusercontent.com/mem0ai/mem0/main/integrations/openclaw/filtering.ts" rel="noopener noreferrer"&gt;filtering.ts&lt;/a&gt; drops whole messages that match "Patterns that indicate an entire message is noise", among them acknowledgements, timestamps and tool output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cognee&lt;/strong&gt; states its gate on the &lt;a href="https://docs.cognee.ai/core-concepts/main-operations/improve" rel="noopener noreferrer"&gt;improve page&lt;/a&gt;: "Guidance is eligible only when it has not been rated harmful and its confidence passes the distillation gate." Proposed lessons then go to a writer/rejecter, which "checks them against existing lessons and graph entities". Its &lt;a href="https://docs.cognee.ai/guides/presort-downloads" rel="noopener noreferrer"&gt;folder presort&lt;/a&gt; "reports what is junk, duplicated, versioned, personal, or already in cognee, and then ingests the groups you approve", so the refusal comes back as a report. Its &lt;a href="https://docs.cognee.ai/core-concepts/main-operations/legacy-operations/add" rel="noopener noreferrer"&gt;add operation&lt;/a&gt; says "Cognee uses content hashes to avoid duplicates".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Letta&lt;/strong&gt; puts the decision with the agent: "Your agent updates memory when it learns something durable" (&lt;a href="https://docs.letta.com/configuration/memory" rel="noopener noreferrer"&gt;memory page&lt;/a&gt;). The &lt;a href="https://raw.githubusercontent.com/letta-ai/letta-code/main/src/agent/subagents/builtin/reflection.md" rel="noopener noreferrer"&gt;reflection prompt&lt;/a&gt; that Letta Code ships includes an already-captured check, "If memory or skills already contain this information adequately, skip it.", an instruction to a model rather than a threshold in code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supermemory&lt;/strong&gt; takes a description you write of your organisation (&lt;a href="https://supermemory.ai/docs/concepts/customization.md" rel="noopener noreferrer"&gt;customization&lt;/a&gt;): "Tell Supermemory what your organization does and what content matters during ingestion. This steers what gets extracted into memories across every namespace." In v3 and v4 that field was called &lt;code&gt;filterPrompt&lt;/code&gt;, and the same page says: "The legacy &lt;code&gt;shouldLLMFilter&lt;/code&gt;, &lt;code&gt;categories&lt;/code&gt;, &lt;code&gt;includeItems&lt;/code&gt;, and &lt;code&gt;excludeItems&lt;/code&gt; settings are not part of the v5 organization resource." The &lt;a href="https://supermemory.ai/docs/ingestion/add-memories.md" rel="noopener noreferrer"&gt;ingestion page&lt;/a&gt; ties duplicate handling to an ID you supply: "Pass &lt;code&gt;id&lt;/code&gt; to identify content and avoid duplicates". Its &lt;a href="https://supermemory.ai/docs/concepts/graph-memory.md" rel="noopener noreferrer"&gt;graph memory page&lt;/a&gt; lists noise filtering under automatic forgetting, as a tendency: "casual, non-meaningful chatter is less likely to become durable memory".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zep&lt;/strong&gt; shows the difference between filtering extraction and refusing a write. With &lt;a href="https://help.getzep.com/customizing-graph-structure" rel="noopener noreferrer"&gt;strict ontology&lt;/a&gt; on, an entity that does not match a declared type is dropped, while "the raw source material remains searchable and retrievable" (&lt;a href="https://help.getzep.com/how-graph-creation-works" rel="noopener noreferrer"&gt;how graph creation works&lt;/a&gt;). Its &lt;a href="https://help.getzep.com/prepare-data-for-ingestion" rel="noopener noreferrer"&gt;ingestion guide&lt;/a&gt; adds a sameness test on extraction, "When Zep extracts entities from episodes, it deduplicates them primarily by name.", and a hard refusal on size: "Zep rejects an episode larger than 10,000 characters rather than truncating it".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mnemoverse&lt;/strong&gt; says what its gate does on its &lt;a href="https://mnemoverse.com/docs/api/getting-started" rel="noopener noreferrer"&gt;getting started page&lt;/a&gt;: "The write gate compares each write with the nearest existing memory in the same domain and refuses only a write the embedder cannot tell apart from one already stored: &lt;code&gt;stored&lt;/code&gt; is then &lt;code&gt;false&lt;/code&gt;. The number in &lt;code&gt;importance&lt;/code&gt; is that novelty score; the gate does not judge how important or how true a memory is." A refused write has no id: the &lt;a href="https://mnemoverse.com/docs/api/reference#post-memory-write" rel="noopener noreferrer"&gt;API reference&lt;/a&gt; defines &lt;code&gt;atom_id&lt;/code&gt; as "UUID of the stored atom, or null if filtered" and &lt;code&gt;reason&lt;/code&gt; as "Why stored or filtered". So the field called importance is a novelty score, and this gate belongs to the sameness family: it stops a domain from filling with copies the embedder cannot tell apart, and it does not judge whether a new line is worth keeping. Chatter that differs from everything stored has to be kept out by what the agent chooses to write, or by a list or a model in front of the write.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check it with a control
&lt;/h2&gt;

&lt;p&gt;Four writes in a fresh domain, with &lt;code&gt;mnemoverse&lt;/code&gt; 0.4.0:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mnemoverse&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MnemoClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MnemoClient&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# reads MNEMOVERSE_API_KEY
&lt;/span&gt;
&lt;span class="n"&gt;writes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The deployment region is Dublin.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The deployment region is Dublin.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;             &lt;span class="c1"&gt;# identical
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Deployments run in the Dublin region.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;# reworded
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The staging database is backed up nightly.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;# control: a new fact
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;writes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;project:gate-check&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stored&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;atom_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;importance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;|&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The identical sentence is the case the docs describe as refused: expect &lt;code&gt;stored&lt;/code&gt; False, no id and a reason. Record the reworded line rather than assume it. The last write is the control: a new fact has to come back stored; if it is refused, the check is broken.&lt;/p&gt;

&lt;p&gt;Then write a correction phrased like the fact it corrects, "The deployment region is now Frankfurt.", because a sameness test has to tell a correction from a restatement; on Mnemoverse the correction can name what it replaces with &lt;code&gt;supersedes&lt;/code&gt;. Run the same cases on any store and insist on a reason for each refusal: a silent filter is a write path you cannot debug.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://mnemoverse.com/docs/library/agent-memory-write-gate" rel="noopener noreferrer"&gt;library page&lt;/a&gt; has the full comparison with every source and carries the film that goes with it. Which noise does your store keep that its gate was never built to see?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>mcp</category>
      <category>llm</category>
    </item>
    <item>
      <title>CodeRabbit vs Bugbot?</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Mon, 12 Oct 2026 11:12:00 +0000</pubDate>
      <link>https://dev.to/izgorodin/coderabbit-vs-bugbot-2j6m</link>
      <guid>https://dev.to/izgorodin/coderabbit-vs-bugbot-2j6m</guid>
      <description>&lt;p&gt;Pick by where your team already works, how you want the bill to grow, and whether the reviewer must run inside your network. Both review pull requests on GitHub, GitLab, Bitbucket and Azure DevOps. Bugbot is part of Cursor and bills each run from Cursor usage, $1.00 to $1.50 on average by Cursor's figure, and I found no self-hosted Bugbot in Cursor's docs. CodeRabbit bills per developer who opens pull requests, from $24 a month on an annual plan, self-hosts on Enterprise from 500 seats, and also works inside Cursor through an extension and a plugin. Neither publishes a neutral head-to-head number, so the tiebreaker is both 14-day trials on the same pull requests.&lt;/p&gt;

&lt;p&gt;Every fact below comes from each vendor's own pages as I read them on 10 October 2026, and neither CodeRabbit nor Cursor saw this text before publication.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two side by side
&lt;/h2&gt;

&lt;p&gt;Each cell is from the vendor's own pages; links are at the end. "Not found" means not found on the docs, product, pricing, help and changelog pages I searched that day.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;CodeRabbit&lt;/th&gt;
&lt;th&gt;Cursor Bugbot&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Company, as each page states it&lt;/td&gt;
&lt;td&gt;CodeRabbit Inc.&lt;/td&gt;
&lt;td&gt;Cursor (Anysphere, Inc.); "Cursor has officially been acquired by SpaceX." (14 August 2026)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code hosts listed&lt;/td&gt;
&lt;td&gt;GitHub, GitLab, Azure DevOps, Bitbucket Cloud and Data Center, GitHub Enterprise Server, self-managed GitLab&lt;/td&gt;
&lt;td&gt;Origin (Cursor's own Git forge, in early beta), GitHub with Enterprise Server, GitLab with Self-Hosted, Bitbucket with Data Center, Azure DevOps Services&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When it reviews&lt;/td&gt;
&lt;td&gt;when a PR opens against the main branch, then on new commits; &lt;code&gt;@coderabbitai review&lt;/code&gt; on demand&lt;/td&gt;
&lt;td&gt;when a PR is created or updated, by default only the changes since its last review; &lt;code&gt;bugbot run&lt;/code&gt; on demand; can be set to once per PR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What you pay for&lt;/td&gt;
&lt;td&gt;developers who create pull requests: Essentials $24 per developer per month billed annually, $30 monthly; 5 PR reviews per developer per hour on Essentials; optional overflow at $0.25 per reviewed file&lt;/td&gt;
&lt;td&gt;each run, from included usage first on Individual plans and from on-demand spend on Teams; listed on Cursor's Individual (from $20 a month) and Teams ($40 per user per month) plans&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free entry&lt;/td&gt;
&lt;td&gt;PR summaries; reviews in the VS Code extension and CLI; Team features for open-source projects; a 14-day Advanced trial for new organizations&lt;/td&gt;
&lt;td&gt;14-day trial for all plans; some plans include monthly Bugbot usage; a free or open-source offer not found&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-hosting&lt;/td&gt;
&lt;td&gt;Enterprise, 500 or more user seats, with your own model provider&lt;/td&gt;
&lt;td&gt;a self-hosted Bugbot not found; for GitHub Enterprise Server, Cursor documents IP allowlisting or, on Enterprise, AWS PrivateLink or a Cloudflare Tunnel, which it offers for an "outbound-only deployment model"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model providers (cloud)&lt;/td&gt;
&lt;td&gt;"Your code is shared with OpenAI and/or Anthropic for reviewing purposes only"&lt;/td&gt;
&lt;td&gt;Cursor sends "prompts and code context to language model providers like OpenAI, Anthropic, and Google"; Bugbot uses "a combination of frontier and in-house models"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Training on your code&lt;/td&gt;
&lt;td&gt;"CodeRabbit never uses customer code for model training."&lt;/td&gt;
&lt;td&gt;not with Privacy Mode on, which is "on by default for Enterprise teams"; with it off, Cursor may train on code data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How a finding is checked&lt;/td&gt;
&lt;td&gt;a Verification agent, sandboxed execution with the repository cloned, 50+ static analyzers&lt;/td&gt;
&lt;td&gt;an agent reviews the diff and calls tools; running code to verify its own reports is listed as a next capability (January 2026)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixes&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;@coderabbitai autofix&lt;/code&gt;, Azure DevOps included&lt;/td&gt;
&lt;td&gt;Autofix spawns a Cloud Agent; no Autofix mode for Azure DevOps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Before the pull request&lt;/td&gt;
&lt;td&gt;IDE extension, CLI, a Cursor plugin&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/review-bugbot&lt;/code&gt; in Cursor and its CLI; a later PR with the same diff is skipped&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How each one says it handles false positives
&lt;/h2&gt;

&lt;p&gt;CodeRabbit describes a pipeline that filters before it posts. Its architecture page lists "Specialized AI agents working in parallel: Review, Verification, Chat, Pre-Merge Checks", on top of "Sandboxed cloud execution with your full repository cloned for isolated analysis". Its September write-up says what reaches you: "Reported comments is the post-pipeline count after verification, deduplication, and filtering; someone still has to read each one."&lt;/p&gt;

&lt;p&gt;Cursor describes a reviewer tuned against a fix rate. The product page says "Bugbot detects the hardest logic bugs with a low false positive rate." and "Bugbot optimizes for bugs that get fixed." Cursor's January write-up defines that rate: "It uses AI to determine, at PR merge time, which bugs were actually resolved by the author in the final code." It describes a launch version that used "a validator model to catch false positives", and a later switch to "a fully agentic design".&lt;/p&gt;

&lt;p&gt;On running code, the two write in different tenses. The same Cursor write-up says: "The next major capabilities include letting Bugbot run code to verify its own bug reports and enabling deep research when it encounters complex issues." I found no later Cursor page saying this shipped, in the Bugbot docs, product and help pages, or the changelog from June 2025 to October 2026. Code does run on the fix side: Bugbot Autofix, a separate setting, "runs cloud agents on their own machines to test changes and propose fixes directly on your PR." On the review side, CodeRabbit's architecture page puts "Sandboxed cloud execution" behind each comment, and its FAQ says the reviewer "Can execute shell commands and perform deep static analysis against your codebase".&lt;/p&gt;

&lt;h2&gt;
  
  
  What each publishes as numbers, and how
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;CodeRabbit&lt;/th&gt;
&lt;th&gt;Cursor Bugbot&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What is compared&lt;/td&gt;
&lt;td&gt;Claude models inside CodeRabbit's own pipeline&lt;/td&gt;
&lt;td&gt;Bugbot against five other AI reviewers, CodeRabbit among them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Metric and data&lt;/td&gt;
&lt;td&gt;known issues caught through actionable comments, on 13 hardest known-bug cases&lt;/td&gt;
&lt;td&gt;resolution rate, the share of flagged bugs resolved by merge; "We analyzed public repositories only."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who judges&lt;/td&gt;
&lt;td&gt;"an independent judge scored every comment with three votes against the known issue, and only majority-PASS comments count"&lt;/td&gt;
&lt;td&gt;"using an LLM judge", spot-checked with PR authors while the metric was built&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Headline&lt;/td&gt;
&lt;td&gt;Sonnet 5.5 caught 6 of 13 issues, at 41.2% actionable precision (passing actionable comments divided by all actionable comments)&lt;/td&gt;
&lt;td&gt;Bugbot first of six, at a 78.13% resolution rate on 50,310 pull requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When&lt;/td&gt;
&lt;td&gt;28 September 2026&lt;/td&gt;
&lt;td&gt;8 April 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What it leaves out&lt;/td&gt;
&lt;td&gt;"Thirteen cases is a small set, and we say so throughout."&lt;/td&gt;
&lt;td&gt;by its definition, a bug nobody flagged never enters the rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A number with little method beside it&lt;/td&gt;
&lt;td&gt;"reducing PR comment noise by 80%" (IDE extension)&lt;/td&gt;
&lt;td&gt;high effort "finds 35% more bugs while resolution rate stays constant at 80%", stated "From our internal runs"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The two headlines answer different questions: CodeRabbit's is about which model it runs, Cursor's ranks Bugbot against rivals on a metric Cursor defined. Cursor's table has a row for CodeRabbit; I do not repeat that figure, because it is Cursor's metric applied to CodeRabbit. I found no CodeRabbit page about Bugbot in its sitemap (596 addresses), llms.txt or docs index. What CodeRabbit does publish is a Cursor plugin, and its 25 August 2026 post about it says "Our partnership with Cursor brings code creation and agentic change management closer together." A comparison written by anyone who sells a reviewer is that seller's case, so each tool here is described from its own pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose for a team
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If this is true for your team&lt;/th&gt;
&lt;th&gt;Look first at&lt;/th&gt;
&lt;th&gt;What the pages say&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Code must stay inside your network&lt;/td&gt;
&lt;td&gt;CodeRabbit, at 500 seats or more&lt;/td&gt;
&lt;td&gt;self-hosted on Enterprise from 500 user seats; a self-hosted Bugbot not found&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The team already pays for Cursor Teams&lt;/td&gt;
&lt;td&gt;Bugbot&lt;/td&gt;
&lt;td&gt;reviews bill from the same on-demand spend; &lt;code&gt;/review-bugbot&lt;/code&gt; before a push&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The bill should follow headcount&lt;/td&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;per developer who opens pull requests; Bugbot bills per run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You do not know which bill is smaller&lt;/td&gt;
&lt;td&gt;count runs, not pull requests&lt;/td&gt;
&lt;td&gt;$24 per developer per month equals 16 to 24 Bugbot runs at Cursor's average, and Bugbot runs on every PR update unless set to once per PR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Azure DevOps, with automatic fixes&lt;/td&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;@coderabbitai autofix&lt;/code&gt; lists Azure DevOps; Bugbot's Autofix table marks it No for both modes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Your policy rules out training on your code&lt;/td&gt;
&lt;td&gt;both data pages, with whoever owns the policy&lt;/td&gt;
&lt;td&gt;CodeRabbit never trains on customer code; at Cursor it depends on Privacy Mode, which a team admin can enforce&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Each finding should pass a separate check before it is posted&lt;/td&gt;
&lt;td&gt;CodeRabbit; on GitHub, also Sigma (Mnemoverse, the author's company), in closed beta by invitation&lt;/td&gt;
&lt;td&gt;CodeRabbit lists a Verification agent among its agents; for Bugbot, Cursor describes a validator model at launch and a later switch to "a fully agentic design"; Sigma's page says "Sigma checks potential issues and brings the evidence back to your code.", its docs document that a fresh verifier "confirms, rejects or reclassifies" each candidate, that "only confirmed candidates are verified findings" and that suspicions no verifier confirmed stay labeled separately; Sigma runs on Claude Code and OpenAI models and reviews its team's own repositories every day; its page also says "A request does not grant access automatically."&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  A two-week test that settles it
&lt;/h2&gt;

&lt;p&gt;CodeRabbit's plans page says new organizations start with a "14-day Advanced trial", and Cursor says "We offer a 14-day free trial for all plans." Install both on one busy repository. Take five bugs your team fixed after merge, open the commits that introduced them as new pull requests, and, if your Bugbot plan offers effort levels, run some reviews at High, since Cursor's docs say that at Default "Bugbot may find fewer bugs". Mark every comment as a real bug, a wrong claim or noise, and time each confirmation. Two weeks give you known bugs caught out of five, wrong claims per pull request, minutes per comment, and a count of Bugbot runs to price against CodeRabbit's seats. The same test works for any other reviewer on your shortlist, such as GitHub Copilot code review, Greptile or Sigma.&lt;/p&gt;

&lt;p&gt;Sources, all read on 10 October 2026. CodeRabbit: &lt;a href="https://www.coderabbit.ai/" rel="noopener noreferrer"&gt;homepage&lt;/a&gt;, &lt;a href="https://www.coderabbit.ai/pricing" rel="noopener noreferrer"&gt;pricing&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/management/plans.md" rel="noopener noreferrer"&gt;plans&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/platforms/overview.md" rel="noopener noreferrer"&gt;platforms&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/self-hosted/overview.md" rel="noopener noreferrer"&gt;self-hosted&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/faq.md" rel="noopener noreferrer"&gt;FAQ&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/overview/architecture.md" rel="noopener noreferrer"&gt;architecture&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/overview/pull-request-review.md" rel="noopener noreferrer"&gt;pull request review&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/reference/review-commands.md" rel="noopener noreferrer"&gt;review commands&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/overview/ide-cli-review.md" rel="noopener noreferrer"&gt;IDE and CLI&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/llms-full.txt" rel="noopener noreferrer"&gt;docs index&lt;/a&gt;, &lt;a href="https://www.coderabbit.ai/blog/sonnet-5-5-model-review" rel="noopener noreferrer"&gt;Sonnet 5.5 write-up&lt;/a&gt;, &lt;a href="https://www.coderabbit.ai/blog/coderabbit-plugin-for-cursor" rel="noopener noreferrer"&gt;Cursor plugin&lt;/a&gt;, &lt;a href="https://www.coderabbit.ai/sitemap.xml" rel="noopener noreferrer"&gt;sitemap&lt;/a&gt;. Cursor: &lt;a href="https://cursor.com/bugbot" rel="noopener noreferrer"&gt;Bugbot&lt;/a&gt;, &lt;a href="https://cursor.com/docs/bugbot" rel="noopener noreferrer"&gt;Bugbot docs&lt;/a&gt;, &lt;a href="https://cursor.com/help/ai-features/bugbot.md" rel="noopener noreferrer"&gt;help&lt;/a&gt;, &lt;a href="https://cursor.com/help/account-and-billing/bugbot-usage-based-billing.md" rel="noopener noreferrer"&gt;usage billing&lt;/a&gt;, &lt;a href="https://cursor.com/pricing" rel="noopener noreferrer"&gt;pricing&lt;/a&gt;, &lt;a href="https://cursor.com/blog/may-2026-bugbot-changes" rel="noopener noreferrer"&gt;May 2026 changes&lt;/a&gt;, &lt;a href="https://cursor.com/blog/building-bugbot" rel="noopener noreferrer"&gt;Building a better Bugbot&lt;/a&gt;, &lt;a href="https://cursor.com/blog/bugbot-learning" rel="noopener noreferrer"&gt;learned rules and resolution rates&lt;/a&gt;, &lt;a href="https://cursor.com/changelog/02-26-26" rel="noopener noreferrer"&gt;Autofix changelog&lt;/a&gt;, &lt;a href="https://cursor.com/changelog" rel="noopener noreferrer"&gt;changelog&lt;/a&gt;, &lt;a href="https://cursor.com/docs/integrations/github.md" rel="noopener noreferrer"&gt;GitHub integration&lt;/a&gt;, &lt;a href="https://cursor.com/docs/origin.md" rel="noopener noreferrer"&gt;Origin&lt;/a&gt;, &lt;a href="https://cursor.com/docs/enterprise/privacy-and-data-governance.md" rel="noopener noreferrer"&gt;privacy&lt;/a&gt;, &lt;a href="https://cursor.com/data-use" rel="noopener noreferrer"&gt;data use&lt;/a&gt;, &lt;a href="https://cursor.com/blog/joining-spacex" rel="noopener noreferrer"&gt;joining SpaceX&lt;/a&gt;. Sigma: &lt;a href="https://sigma.mnemoverse.com" rel="noopener noreferrer"&gt;home page&lt;/a&gt;, &lt;a href="https://sigma.mnemoverse.com/docs" rel="noopener noreferrer"&gt;docs&lt;/a&gt;, &lt;a href="https://sigma.mnemoverse.com/docs/reading-a-review" rel="noopener noreferrer"&gt;reading a review&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>codereview</category>
      <category>cursor</category>
      <category>github</category>
    </item>
    <item>
      <title>How to disable Copilot code review in GitHub?</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Sun, 11 Oct 2026 10:35:00 +0000</pubDate>
      <link>https://dev.to/izgorodin/how-to-disable-copilot-code-review-in-github-56g3</link>
      <guid>https://dev.to/izgorodin/how-to-disable-copilot-code-review-in-github-56g3</guid>
      <description>&lt;p&gt;Copilot reviews a pull request only when someone asks, unless automatic review is switched on, so the first step is to find out which switch asked. GitHub documents four sources: your own "Automatic Copilot code review" setting, a repository ruleset, an organization or enterprise ruleset with the rule "Automatically request Copilot code review", and a person or a bot requesting Copilot as a reviewer. Turn off the one that applies. The automatic ones are independent: "These configurations are not hierarchical; neither inherits from or overrides the other." To stop people who bring their own Copilot license from requesting reviews in your repository, a repository admin or organization owner enables "Only allow Copilot code review to be triggered by authorized users". An organization owner can turn off the Copilot code review option for members who get Copilot from the organization, and an enterprise can block it in all its repositories.&lt;/p&gt;

&lt;p&gt;Every step below is from GitHub's own documentation as I read it on 9 October 2026, and GitHub did not see this text before publication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the review comes from and who can turn it off
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Where the review comes from&lt;/th&gt;
&lt;th&gt;Who can turn it off&lt;/th&gt;
&lt;th&gt;Where&lt;/th&gt;
&lt;th&gt;What it does not stop&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Your own automatic setting&lt;/td&gt;
&lt;td&gt;you&lt;/td&gt;
&lt;td&gt;profile picture &amp;gt; Copilot settings &amp;gt; Code review: turn off "Automatic Copilot code review"&lt;/td&gt;
&lt;td&gt;rulesets and other people's requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A repository ruleset&lt;/td&gt;
&lt;td&gt;repository admins, or a custom role with "edit repository rules"&lt;/td&gt;
&lt;td&gt;Settings &amp;gt; Rulesets: clear "Automatically request Copilot code review", set the ruleset to Disabled, or delete it&lt;/td&gt;
&lt;td&gt;the author's own setting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;An organization ruleset&lt;/td&gt;
&lt;td&gt;organization owners and users with "Manage organization ref update rules and rulesets"&lt;/td&gt;
&lt;td&gt;organization Settings &amp;gt; Repository &amp;gt; Rulesets&lt;/td&gt;
&lt;td&gt;the same&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;An enterprise ruleset&lt;/td&gt;
&lt;td&gt;enterprise owners&lt;/td&gt;
&lt;td&gt;the enterprise-level branch ruleset&lt;/td&gt;
&lt;td&gt;the same&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A Copilot license from outside your organization or enterprise&lt;/td&gt;
&lt;td&gt;repository admins, or organization owners for all repositories&lt;/td&gt;
&lt;td&gt;Settings &amp;gt; Copilot &amp;gt; Code review: enable "Only allow Copilot code review to be triggered by authorized users"&lt;/td&gt;
&lt;td&gt;ruleset reviews&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copilot from your organization&lt;/td&gt;
&lt;td&gt;organization owners&lt;/td&gt;
&lt;td&gt;organization Settings &amp;gt; Copilot &amp;gt; Policies: the Copilot code review option&lt;/td&gt;
&lt;td&gt;an enterprise policy; a second organization that enables it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Members without a license&lt;/td&gt;
&lt;td&gt;enterprise administrators or organization owners&lt;/td&gt;
&lt;td&gt;keep "Allow members without a Copilot license to use Copilot code review in GitHub.com" disabled, its default&lt;/td&gt;
&lt;td&gt;members with a license&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Every user in an enterprise's repositories&lt;/td&gt;
&lt;td&gt;enterprise owners and AI managers&lt;/td&gt;
&lt;td&gt;AI controls &amp;gt; Agents &amp;gt; Copilot code review: "Block Copilot code review in all enterprise repositories"&lt;/td&gt;
&lt;td&gt;nothing named; it covers personal plans too&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One pull request&lt;/td&gt;
&lt;td&gt;anyone who can request reviews&lt;/td&gt;
&lt;td&gt;the Reviewers sidebar, or &lt;code&gt;gh pr edit&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;not said for a review already running or posted&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to tell which switch asked
&lt;/h2&gt;

&lt;p&gt;If no setting of yours asked, look at the author: their own automatic review covers their pull requests "in any repository where Copilot code review is available to you". An author on Copilot Free has no such setting, because the Free plan "does not include Copilot code review".&lt;/p&gt;

&lt;p&gt;Then the rulesets. Anyone with read access can view the active ones, and the shortcut is "adding the /rules slug to the repository's URL". Or, from a terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gh ruleset check main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Last, the requester. GitHub's general rule for review requests is that "you need write access to the repository", and that page does not say whether it covers Copilot. Requests also come through the REST API as "copilot-pull-request-reviewer[bot]", and through GraphQL since 2 October 2026, so a workflow or a bot can ask. By default, AI credits go to the pull request author when a repository requests the review automatically and to the requester for a manual one; the organization pays "when a bot requests the review", and the organization or enterprise pays for people without a Copilot license or on Copilot Free. For members with a paid Copilot license, an enterprise or organization owner "can instead choose to bill the organization".&lt;/p&gt;

&lt;h2&gt;
  
  
  What each switch leaves running
&lt;/h2&gt;

&lt;p&gt;Your own setting exists on the Copilot Pro, Copilot Pro+ and Copilot Max plans and with a Copilot Business or Copilot Enterprise license, not for managed user accounts. Turning it off does not touch rulesets: "Your user settings cannot disable push or draft reviews that a ruleset has enabled." Your review effort stays as set. A repository's automatic review lives in its ruleset, under "Branch rules", not in Settings &amp;gt; Copilot &amp;gt; Code review.&lt;/p&gt;

&lt;p&gt;A license is external when it is "not provided by the organization or enterprise that owns the repository", and by default people can use one to request a review. With the authorized-users setting on, "Copilot is not offered as a reviewer to people who are not authorized, and API review requests from those people do not start a review." In a personal repository only the owner or a direct collaborator can then request one. Automatic reviews from personal settings of people who are not authorized stop. "Automatic reviews configured by repository or organization rulesets still run." Set at the organization, it cannot be turned off per repository. GitHub documented it on 7 October 2026.&lt;/p&gt;

&lt;p&gt;The organization option governs reviews "on GitHub.com or in GitHub Mobile" for members who get Copilot from that organization: "Generally, policies only apply to users on your Copilot plan." An enterprise choice wins: "you cannot override that setting at the organization level." For a person with Copilot from several organizations in one enterprise the policy is "Least restrictive": "if any of the organizations has enabled a feature, this feature is enabled for the user everywhere."&lt;/p&gt;

&lt;p&gt;The enterprise block reaches further, "including for users who get access to Copilot from a personal plan or another enterprise." Turning the enterprise's Copilot code review policy off instead covers its licensed users and also removes pull request summaries: the policy "allows your licensed users to request reviews from Copilot and use Copilot to generate pull request summaries."&lt;/p&gt;

&lt;p&gt;For one pull request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gh &lt;span class="nb"&gt;pr &lt;/span&gt;edit 123 &lt;span class="nt"&gt;--remove-reviewer&lt;/span&gt; &lt;span class="s2"&gt;"@copilot"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;@copilot&lt;/code&gt; value is "not supported on GitHub Enterprise Server", where Copilot is not available. The pages I read do not say what removing the request does to a review already running or posted, and a review "usually takes less than 30 seconds". Resolving a Copilot comment does not keep it away: "Copilot may repeat the same comments again, even if they have been dismissed".&lt;/p&gt;

&lt;h2&gt;
  
  
  Before 22 October 2026, for enterprises
&lt;/h2&gt;

&lt;p&gt;GitHub's &lt;a href="https://docs.github.com/en/copilot/concepts/enterprise/default-availability" rel="noopener noreferrer"&gt;default availability page&lt;/a&gt; says the "Default policy for new features" policy "will start applying to new and existing GA features from October 22, 2026." The covered features include the Copilot code review policy on the Agents page. The default policy itself starts enabled, and "unconfigured features will be enabled on October 22". It covers enterprises with Copilot Business or Copilot Enterprise, and organizations that were left to decide and have not configured the feature. To keep Copilot code review off, set its policy explicitly before 22 October 2026 or disable the default policy. The date will change availability, not automatic review, which will still need a ruleset or a person's own setting.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you want review only on request
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;By default&lt;/th&gt;
&lt;th&gt;Request-only switch&lt;/th&gt;
&lt;th&gt;How to ask&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Copilot&lt;/td&gt;
&lt;td&gt;"By default, Copilot only reviews a pull request if you assign it to the pull request."&lt;/td&gt;
&lt;td&gt;leave automatic review off everywhere&lt;/td&gt;
&lt;td&gt;Reviewers sidebar, or &lt;code&gt;gh pr edit 123 --add-reviewer "@copilot"&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;"CodeRabbit reviews every eligible PR automatically"&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;enabled: false&lt;/code&gt; under &lt;code&gt;reviews.auto_review&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;@coderabbitai review&lt;/code&gt; (incremental) or &lt;code&gt;@coderabbitai full review&lt;/code&gt;, "Regardless of any auto-review configuration"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cursor Bugbot&lt;/td&gt;
&lt;td&gt;"Runs automatic reviews on every PR update"&lt;/td&gt;
&lt;td&gt;personal setting "only when mentioned"; per repository, &lt;code&gt;manualTriggerOnly&lt;/code&gt; in the Bugbot Admin API&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;cursor review&lt;/code&gt; or &lt;code&gt;bugbot run&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Greptile&lt;/td&gt;
&lt;td&gt;config default &lt;code&gt;"autoReview": ["open"]&lt;/code&gt;, which starts a review "unasked" when a pull request is opened&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"autoReview": []&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@greptileai&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qodo&lt;/td&gt;
&lt;td&gt;"Automatic is the default."&lt;/td&gt;
&lt;td&gt;Code review trigger set to Manual only&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/agentic_review&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sigma (Mnemoverse, the author's company)&lt;/td&gt;
&lt;td&gt;closed beta on GitHub for invited accounts; documented modes Automatic, On request and Off, invited accounts start with On request&lt;/td&gt;
&lt;td&gt;On request: "Explicit requests only. A push alone does not start this reviewer."; Off: "No new review or recheck work."&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/sigma review&lt;/code&gt;; documented: invited accounts need GitHub-confirmed admin, maintain or write access&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sources, read on 9 October 2026. GitHub Docs: &lt;a href="https://docs.github.com/en/copilot/how-tos/copilot-on-github/set-up-copilot/configure-code-review" rel="noopener noreferrer"&gt;Configuring code review by GitHub Copilot&lt;/a&gt;, &lt;a href="https://docs.github.com/en/copilot/concepts/agents/code-review" rel="noopener noreferrer"&gt;About GitHub Copilot code review&lt;/a&gt;, &lt;a href="https://docs.github.com/en/copilot/how-tos/use-copilot-agents/use-code-review" rel="noopener noreferrer"&gt;Using GitHub Copilot code review&lt;/a&gt;, &lt;a href="https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-for-organization/manage-policies" rel="noopener noreferrer"&gt;organization policies&lt;/a&gt;, &lt;a href="https://docs.github.com/en/copilot/reference/enterprise-administrators/policy-conflicts" rel="noopener noreferrer"&gt;policy conflicts&lt;/a&gt;, &lt;a href="https://docs.github.com/en/copilot/concepts/enterprise/policies" rel="noopener noreferrer"&gt;enterprise and organization policies&lt;/a&gt;, &lt;a href="https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/enable-copilot-code-review" rel="noopener noreferrer"&gt;enterprise code review policy&lt;/a&gt;, &lt;a href="https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/block-agentic-features" rel="noopener noreferrer"&gt;blocking agentic features&lt;/a&gt;, &lt;a href="https://docs.github.com/en/copilot/concepts/enterprise/default-availability" rel="noopener noreferrer"&gt;default availability&lt;/a&gt;, &lt;a href="https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/managing-rulesets-for-a-repository" rel="noopener noreferrer"&gt;repository rulesets&lt;/a&gt;, &lt;a href="https://docs.github.com/en/organizations/managing-organization-settings/managing-rulesets-for-repositories-in-your-organization" rel="noopener noreferrer"&gt;organization rulesets&lt;/a&gt;, &lt;a href="https://docs.github.com/en/enterprise-cloud@latest/admin/enforcing-policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-code-governance" rel="noopener noreferrer"&gt;enterprise rulesets&lt;/a&gt;, &lt;a href="https://docs.github.com/en/pull-requests/how-tos/create-pull-requests/requesting-a-pull-request-review" rel="noopener noreferrer"&gt;requesting a review&lt;/a&gt;, &lt;a href="https://docs.github.com/en/copilot/get-started/plans" rel="noopener noreferrer"&gt;plans&lt;/a&gt;. GitHub CLI manual: &lt;a href="https://cli.github.com/manual/gh_pr_edit" rel="noopener noreferrer"&gt;gh pr edit&lt;/a&gt;, &lt;a href="https://cli.github.com/manual/gh_ruleset_check" rel="noopener noreferrer"&gt;gh ruleset check&lt;/a&gt;. &lt;a href="https://github.blog/changelog/2026-10-02-copilot-code-review-api-support-and-new-default-effort-level/" rel="noopener noreferrer"&gt;GitHub changelog, 2 October 2026&lt;/a&gt;. &lt;a href="https://github.com/github/docs/commit/98881a90f967339cb8a1da70f87677a62a3adfba" rel="noopener noreferrer"&gt;The docs change of 7 October 2026&lt;/a&gt;. &lt;a href="https://docs.coderabbit.ai/configuration/auto-review" rel="noopener noreferrer"&gt;CodeRabbit automatic review controls&lt;/a&gt;, &lt;a href="https://cursor.com/docs/bugbot" rel="noopener noreferrer"&gt;Cursor Bugbot docs&lt;/a&gt;, &lt;a href="https://www.greptile.com/docs/code-review/controlling-nitpickiness" rel="noopener noreferrer"&gt;Greptile trigger configuration&lt;/a&gt;, &lt;a href="https://www.greptile.com/docs/code-review/greptile-config-reference" rel="noopener noreferrer"&gt;Greptile config reference&lt;/a&gt;, &lt;a href="https://docs.qodo.ai/code-review/use-qodo-in-prs" rel="noopener noreferrer"&gt;Qodo, trigger a code review&lt;/a&gt;. Sigma: its public home page and documentation.&lt;/p&gt;

</description>
      <category>github</category>
      <category>githubcopilot</category>
      <category>codereview</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>CodeRabbit vs Copilot?</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Sat, 10 Oct 2026 13:14:00 +0000</pubDate>
      <link>https://dev.to/izgorodin/coderabbit-vs-copilot-495i</link>
      <guid>https://dev.to/izgorodin/coderabbit-vs-copilot-495i</guid>
      <description>&lt;p&gt;Pick by four things your team already knows: where your repositories live, whether a bot should review every pull request or only on request, how you want to be billed, and whether the reviewer must run on your own servers. On their own pages, GitHub Copilot code review works on GitHub.com (Azure DevOps in public preview), reviews a pull request when someone requests it unless you turn on automatic reviews, and bills each review in GitHub AI Credits plus Actions minutes; CodeRabbit covers GitHub, GitHub Enterprise Server, GitLab, Azure DevOps and Bitbucket, reviews every eligible pull request by default, bills per developer who opens pull requests and self-hosts from 500 seats. On neither vendor's pages did I find a head-to-head result with a method behind it, so the tiebreaker is both tools on the same pull requests.&lt;/p&gt;

&lt;p&gt;Every fact below comes from each vendor's own pages as I read them on 9 and 10 October 2026, and neither GitHub nor CodeRabbit saw this text before publication.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two side by side
&lt;/h2&gt;

&lt;p&gt;Each cell is from the vendor's own pages, read on 9 and 10 October 2026; links are at the end. "Not found" means not found on those pages or in the vendor's docs index that day.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;CodeRabbit&lt;/th&gt;
&lt;th&gt;GitHub Copilot code review&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Where it reviews pull requests&lt;/td&gt;
&lt;td&gt;GitHub, GitHub Enterprise Server, GitLab and self-managed GitLab, Azure DevOps, Bitbucket Cloud and Data Center&lt;/td&gt;
&lt;td&gt;GitHub.com, GitHub CLI and GitHub Mobile; Azure DevOps in public preview; GitLab and Bitbucket not found&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Enterprise Server&lt;/td&gt;
&lt;td&gt;supported, with a reverse tunnel when the server cannot accept inbound access; also on self-hosted CodeRabbit&lt;/td&gt;
&lt;td&gt;"Copilot is not currently available for GitHub Enterprise Server."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When it reviews&lt;/td&gt;
&lt;td&gt;every eligible pull request to the default branch, automatically, drafts skipped; again on each push, pausing after 5 reviewed commits by default; &lt;code&gt;@coderabbitai review&lt;/code&gt; on demand&lt;/td&gt;
&lt;td&gt;when someone requests Copilot as a reviewer (web, CLI, Mobile, API); automatically when an author turns it on for their own pull requests or a ruleset does; once per pull request unless "Review new pushes" is on or someone re-requests it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replies in the thread&lt;/td&gt;
&lt;td&gt;answers when you reply with &lt;code&gt;@coderabbitai&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;replies are not visible to Copilot, and "Copilot won't reply"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What you pay for&lt;/td&gt;
&lt;td&gt;developers who create pull requests: Essentials $24 per developer per month billed annually, $30 monthly; 5 PR reviews per developer per hour; optional overflow at $0.25 per reviewed file, with a monthly spending cap&lt;/td&gt;
&lt;td&gt;GitHub AI Credits at $0.01 each, from a plan that includes code review (Business: $19 per granted seat per month, 1,900 credits per user per month, pooled); GitHub estimates $0.05 to $1 per review on Lite effort and $0.25 to $5 on Balanced, plus Actions minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Default level&lt;/td&gt;
&lt;td&gt;Chill profile; Quiet, Chill and Assertive set how much it comments&lt;/td&gt;
&lt;td&gt;Balanced effort since 28 September 2026; Lite and Balanced set how deep it analyses, and Balanced uses more credits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free entry&lt;/td&gt;
&lt;td&gt;PR summaries; reviews in the VS Code extension and CLI; Team features for open-source projects; a 14-day Advanced trial for new organizations&lt;/td&gt;
&lt;td&gt;Copilot Free does not include pull request review, and in VS Code offers only "Review selection"; verified students get Copilot Student, which includes code review, and verified teachers and maintainers of popular open-source projects may get Copilot Pro free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-hosting&lt;/td&gt;
&lt;td&gt;Enterprise, 500 or more user seats, with your own model provider&lt;/td&gt;
&lt;td&gt;a self-hosted review service not found; the agentic steps can run on your own self-hosted runners&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Models and training&lt;/td&gt;
&lt;td&gt;cloud: "Your code is shared with OpenAI and/or Anthropic for reviewing purposes only"; "CodeRabbit never uses customer code for model training."&lt;/td&gt;
&lt;td&gt;a model mix chosen by GitHub, "Model switching is not supported"; Business and Enterprise data not used for training; Free, Pro and Pro+ interactions may be used unless the user opts out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Instruction files it reads&lt;/td&gt;
&lt;td&gt;AGENTS.md, CLAUDE.md, Cursor rules, &lt;code&gt;.github/copilot-instructions.md&lt;/code&gt; and more&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.github/copilot-instructions.md&lt;/code&gt;, path-specific &lt;code&gt;.instructions.md&lt;/code&gt; files, AGENTS.md, CLAUDE.md, GEMINI.md, REVIEW.md&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How each one talks about noise
&lt;/h2&gt;

&lt;p&gt;GitHub put its position in three sentences, in a March 2026 post: "Silence is better than noise. In 71% of the reviews, Copilot code review surfaces actionable feedback. In the remaining 29%, the agent says nothing at all." That number splits reviews into those that leave feedback and those that stay silent. It is not a precision figure, and I did not find on that page a definition of "actionable" or the period and sample behind the 71%. The method is given in general terms: "We evaluate performance in two ways: through internal testing against known code issues, and through production signals from real pull requests." The post predates Balanced as the default effort.&lt;/p&gt;

&lt;p&gt;In its docs, CodeRabbit makes noise a setting rather than a number. Quiet, added in July 2026, posts "only the most important comments" inline, and "Every other comment is grouped into collapsed sections in the review summary, so nothing is lost while the inline noise stays low." Incremental reviews pause after 5 reviewed commits by default, "To avoid noisy feedback". The one measure of noise I found in those docs, "reducing PR comment noise by 80%", is about the IDE extension and has no method on the page. Its blog does measure precision with a stated method: a September 2026 post scores the models behind CodeRabbit's own reviewer on known bugs from open-source pull requests, which compares models inside CodeRabbit, not CodeRabbit with Copilot.&lt;/p&gt;

&lt;p&gt;Out of the box the two sit at opposite ends: Copilot waits to be asked and reviews once per request, CodeRabbit reviews every eligible pull request and follows each push. Settings move each toward the other, as both tables show.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each says about the other
&lt;/h2&gt;

&lt;p&gt;CodeRabbit's case is about who reviews whom. Its webinar page "Who reviews Copilot's code?" says: "Copilot is great at writing code, but asking any coding agent to review its own output is a self-review." The multiplier and the precision figure on that page compare CodeRabbit with "self-reviews by coding agents", not with Copilot code review, and come with no method, so I leave them out. GitHub describes its reviewer as "a purpose-built product that uses a carefully tuned mix of models, prompts, and system behaviors", and is plain about the limit: "Copilot is not guaranteed to spot all problems or issues in a pull request. Sometimes it will make mistakes." I found no mention of CodeRabbit on the GitHub pages I read, and no Copilot comparison page among the 596 addresses in CodeRabbit's sitemap.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose for a team
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If this is true for your team&lt;/th&gt;
&lt;th&gt;Look first at&lt;/th&gt;
&lt;th&gt;What the pages say&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Repositories live in GitLab or Bitbucket&lt;/td&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;not found on Copilot's code review pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You run GitHub Enterprise Server&lt;/td&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;"Copilot is not currently available for GitHub Enterprise Server."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code must stay on your own servers&lt;/td&gt;
&lt;td&gt;CodeRabbit, from 500 seats, with a model provider you choose&lt;/td&gt;
&lt;td&gt;a self-hosted Copilot review service not found; below 500 seats, neither of these two&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You already pay for Copilot Business or Enterprise on GitHub.com&lt;/td&gt;
&lt;td&gt;Copilot, as the first trial&lt;/td&gt;
&lt;td&gt;nothing to install; by default reviews draw on the pooled credits, and an enterprise or organization owner can choose to bill the organization instead; members without a license can be reviewed once an enterprise administrator or organization owner enables it, billed to the organization or enterprise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reviews only when someone asks&lt;/td&gt;
&lt;td&gt;Copilot&lt;/td&gt;
&lt;td&gt;its default; CodeRabbit gets there with automatic reviews off plus a label or &lt;code&gt;@coderabbitai review&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The bill should follow headcount, not review volume&lt;/td&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;per developer who opens pull requests, with an hourly allowance; at Copilot each seat adds credits to a pool, and by default each review draws on it by pull request size and effort&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review before commit in Visual Studio, JetBrains or Xcode&lt;/td&gt;
&lt;td&gt;Copilot&lt;/td&gt;
&lt;td&gt;Copilot lists VS Code, Visual Studio, JetBrains IDEs and Xcode; CodeRabbit lists VS Code-based editors and a CLI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Each finding should pass a separate check before it is posted&lt;/td&gt;
&lt;td&gt;CodeRabbit; on GitHub, also Sigma (Mnemoverse, the author's company), in closed beta by invitation&lt;/td&gt;
&lt;td&gt;CodeRabbit's architecture page lists "Specialized AI agents working in parallel: Review, Verification, Chat, Pre-Merge Checks"; Sigma's page says "Sigma checks potential issues and brings the evidence back to your code.", its docs document that a fresh verifier "confirms, rejects or reclassifies" each candidate, that "only confirmed candidates are verified findings" and that suspicions no verifier confirmed stay labeled separately; Sigma runs on Claude Code and OpenAI models and reviews its team's own repositories every day; its page also says "A request does not grant access automatically."&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  A two-week test that settles it
&lt;/h2&gt;

&lt;p&gt;CodeRabbit's plans page says new organizations start with a "14-day Advanced trial". On the Copilot side, a team whose plan includes code review can request Copilot on the same pull requests, which keeps the cost of the test in your hands. Set the effort level on purpose: since 28 September 2026 the built-in default is Balanced, the more expensive of the two levels on offer.&lt;/p&gt;

&lt;p&gt;Take five bugs you already fixed, reopen the commits that introduced them as new pull requests, and mark every comment as a real bug, a wrong claim or noise. After two weeks you have numbers of your own: known bugs caught out of five, wrong claims per pull request, minutes per comment, and what each review cost. They answer CodeRabbit vs Copilot for your code, which no vendor's chart can do. The same test works for any other reviewer on your shortlist, such as Cursor's Bugbot, Greptile or Sigma.&lt;/p&gt;

&lt;p&gt;Sources, all read on 9 and 10 October 2026. GitHub: &lt;a href="https://docs.github.com/en/copilot/concepts/agents/code-review" rel="noopener noreferrer"&gt;Copilot code review&lt;/a&gt;, &lt;a href="https://docs.github.com/en/copilot/how-tos/use-copilot-agents/use-code-review" rel="noopener noreferrer"&gt;using code review&lt;/a&gt;, &lt;a href="https://docs.github.com/en/copilot/how-tos/copilot-on-github/set-up-copilot/configure-code-review" rel="noopener noreferrer"&gt;configuring code review&lt;/a&gt;, &lt;a href="https://docs.github.com/en/copilot/get-started/plans" rel="noopener noreferrer"&gt;plans (docs)&lt;/a&gt;, &lt;a href="https://github.com/features/copilot/plans" rel="noopener noreferrer"&gt;plans and data FAQ&lt;/a&gt;, &lt;a href="https://github.blog/changelog/2026-10-02-copilot-code-review-api-support-and-new-default-effort-level/" rel="noopener noreferrer"&gt;effort default changelog&lt;/a&gt;, &lt;a href="https://github.blog/ai-and-ml/github-copilot/60-million-copilot-code-reviews-and-counting/" rel="noopener noreferrer"&gt;60 million reviews post&lt;/a&gt;, &lt;a href="https://docs.github.com/llms.txt" rel="noopener noreferrer"&gt;docs index&lt;/a&gt;. CodeRabbit: &lt;a href="https://www.coderabbit.ai/pricing" rel="noopener noreferrer"&gt;pricing&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/management/plans.md" rel="noopener noreferrer"&gt;plans&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/platforms/overview.md" rel="noopener noreferrer"&gt;platforms&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/platforms/github-enterprise-server.md" rel="noopener noreferrer"&gt;GitHub Enterprise Server&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/self-hosted/overview.md" rel="noopener noreferrer"&gt;self-hosted&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/configuration/auto-review.md" rel="noopener noreferrer"&gt;automatic review controls&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/overview/pull-request-review.md" rel="noopener noreferrer"&gt;pull request reviews&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/reference/configuration.md" rel="noopener noreferrer"&gt;configuration reference&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/overview/architecture.md" rel="noopener noreferrer"&gt;architecture&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/knowledge-base/code-guidelines.md" rel="noopener noreferrer"&gt;code guidelines&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/overview/ide-cli-review.md" rel="noopener noreferrer"&gt;IDE and CLI&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/ide.md" rel="noopener noreferrer"&gt;IDE extension&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/faq.md" rel="noopener noreferrer"&gt;FAQ&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/changelog.md" rel="noopener noreferrer"&gt;changelog&lt;/a&gt;, &lt;a href="https://docs.coderabbit.ai/llms-full.txt" rel="noopener noreferrer"&gt;docs index&lt;/a&gt;, &lt;a href="https://www.coderabbit.ai/events/who-reviews-copilot-code" rel="noopener noreferrer"&gt;webinar page&lt;/a&gt;, &lt;a href="https://www.coderabbit.ai/blog/sonnet-5-5-model-review" rel="noopener noreferrer"&gt;model benchmark post&lt;/a&gt;, &lt;a href="https://www.coderabbit.ai/sitemap.xml" rel="noopener noreferrer"&gt;sitemap&lt;/a&gt;. Sigma: &lt;a href="https://sigma.mnemoverse.com" rel="noopener noreferrer"&gt;home page&lt;/a&gt;, &lt;a href="https://sigma.mnemoverse.com/docs" rel="noopener noreferrer"&gt;docs&lt;/a&gt;, &lt;a href="https://sigma.mnemoverse.com/docs/reading-a-review" rel="noopener noreferrer"&gt;reading a review&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>codereview</category>
      <category>githubcopilot</category>
      <category>github</category>
    </item>
    <item>
      <title>How to implement context decay so an AI agent forgets stale or incorrect instructions over time?</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Fri, 09 Oct 2026 09:18:00 +0000</pubDate>
      <link>https://dev.to/izgorodin/how-to-implement-context-decay-so-an-ai-agent-forgets-stale-or-incorrect-instructions-over-time-2l8b</link>
      <guid>https://dev.to/izgorodin/how-to-implement-context-decay-so-an-ai-agent-forgets-stale-or-incorrect-instructions-over-time-2l8b</guid>
      <description>&lt;p&gt;A year into a project, one agent's memory holds three instructions that should no longer win. It says to install packages with npm, and since June it also says to use pnpm; both are still there, and either can come back first. It holds a workaround for a library bug that was fixed in the spring, and nothing has needed it for months. It says to retry a failing integration test until it passes, and the last time the agent did that, the retries hid a real regression. Each one matches the question it answers exactly as well as on the day it was written.&lt;/p&gt;

&lt;p&gt;The short answer: forgetting stale or incorrect instructions takes three operations, and decay is only one of them. Close an instruction when a newer one replaces it: keep it, mark the date it stopped applying and what replaced it, and make reads prefer open instructions. Decay the ones that go unused and unconfirmed for a long time, lowering their ranking with time so they stop competing at full strength. Push down an instruction that misled when the agent acted on it, with an explicit negative mark. None of the three deletes anything. Deletion stays for secrets, personal data on request, and noise nothing ever depended on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a store never forgets on its own
&lt;/h2&gt;

&lt;p&gt;A vector store ranks by closeness in embedding space, and age, deprecation and replacement are not dimensions of that space. Similarity has no age and no status: last year's convention matches today's query exactly as well as it ever did, and nothing in cosine distance says deprecated. The store is not broken. It answers "what is most similar?", while the agent needs "what is currently true?".&lt;/p&gt;

&lt;p&gt;Diligence makes this worse: the more carefully agents write memory, the more retired instructions the store holds, and the higher the odds that a recall surfaces one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three operations, not one
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Context decay&lt;/strong&gt; lowers an entry's recall priority as time passes without it being used or confirmed, so it drifts down the ranking instead of competing at full strength. It changes ranking, not storage. Each of the three operations answers a different reason an instruction should stop winning:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;When it applies&lt;/th&gt;
&lt;th&gt;What changes&lt;/th&gt;
&lt;th&gt;What it must not do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Close&lt;/td&gt;
&lt;td&gt;A newer instruction replaces it&lt;/td&gt;
&lt;td&gt;Marked closed, with the date and its successor; reads prefer open entries&lt;/td&gt;
&lt;td&gt;Overwrite or delete the old entry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Decay&lt;/td&gt;
&lt;td&gt;Nobody uses, confirms or contradicts it for a long time&lt;/td&gt;
&lt;td&gt;Its ranking weight falls with time since it was last used or confirmed&lt;/td&gt;
&lt;td&gt;Delete silently&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Push down&lt;/td&gt;
&lt;td&gt;Acting on it failed&lt;/td&gt;
&lt;td&gt;An explicit negative mark ranks it below the alternatives&lt;/td&gt;
&lt;td&gt;Spread beyond the entry that misled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delete&lt;/td&gt;
&lt;td&gt;A secret, personal data on request, noise with no history&lt;/td&gt;
&lt;td&gt;The entry is gone&lt;/td&gt;
&lt;td&gt;Touch anything a past decision depended on&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Closing.&lt;/strong&gt; When an instruction is replaced, do not overwrite it and do not delete it. Mark it closed, record when it stopped applying, and link its successor: "install with npm, true until 2026-06, replaced by pnpm". Reads prefer open instructions, but the closed one still exists, and that matters more than it seems: an agent asked why the January branch has a &lt;code&gt;package-lock.json&lt;/code&gt; needs January's instruction to answer. Overwriting rewrites history; closing versions it.&lt;/p&gt;

&lt;p&gt;Closing needs to know what replaced what, and that is known for certain only at the moment of the correction. So the correction should name the instruction it closes when it is written, rather than leave a later pass to guess from two similar texts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decay.&lt;/strong&gt; Instructions that are never recalled, never confirmed and never contradicted should not keep competing at full strength forever. One way to build it on a store you control: keep a last-used and a last-confirmed date on each entry, both set when it is written. At read time, fetch more candidates than you need, multiply each retrieval score by a factor that shrinks with the time since the later of the two dates, and stop that factor at a floor above zero, so an old entry that matches a question closely can still come back. Decay should demote, not erase. Decay that quietly deletes cannot be told apart from data loss.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pushing down.&lt;/strong&gt; Some instructions are not old, just wrong, and you know they are wrong because acting on them failed. Those deserve an explicit negative mark that ranks them below the alternatives the next time the same question comes up. Push-down is targeted: it lands on the entry that misled. Decay is ambient: it touches everything that goes unused.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deleting.&lt;/strong&gt; Hard deletion keeps a narrow, real role. The test is simple: if nothing ever depended on the entry, delete it; if anything did, close it instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  With plain files, and with a memory system
&lt;/h2&gt;

&lt;p&gt;With plain files, all three are editorial habits: a status line on each entry (&lt;code&gt;active&lt;/code&gt;, or &lt;code&gt;closed, replaced by ...&lt;/code&gt;), a periodic review that produces a list for a person to approve instead of silent removals, and a rule never to rewrite an old entry in place. It works, and a person is the garbage collector.&lt;/p&gt;

&lt;p&gt;With a memory system, the same three become properties to look for: statuses and validity windows on entries, decay that demotes rather than deletes, and a feedback channel for marking what misled.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing an instruction in code
&lt;/h2&gt;

&lt;p&gt;The code uses &lt;code&gt;mnemoverse&lt;/code&gt; 0.4.0 from PyPI, the Python SDK of Mnemoverse (the author's company), with setup on the &lt;a href="https://mnemoverse.com/docs/api/python-sdk" rel="noopener noreferrer"&gt;Python SDK page&lt;/a&gt;. The example covers closing, on the write and on the read, plus a rating after the agent acts. The agent's own logic is left out.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mnemoverse&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MnemoClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MnemoClient&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# reads MNEMOVERSE_API_KEY
&lt;/span&gt;&lt;span class="n"&gt;DOMAIN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;project:web&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# January: the instruction as it was given
&lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Instruction (2026-01, repo: web): install packages with npm.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;concepts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;instruction&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;package-manager&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;npm&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DOMAIN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stored&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;SystemExit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Not stored: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# June: the correction names the instruction it closes, in the same write
&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Instruction (2026-06, repo: web): install packages with pnpm, not npm. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Replaces the 2026-01 npm instruction.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;concepts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;instruction&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;package-manager&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pnpm&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;npm&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DOMAIN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;supersedes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;atom_id&lt;/span&gt;&lt;span class="p"&gt;)],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stored&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;SystemExit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Not stored: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;superseded&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# the ids this write marked as replaced
&lt;/span&gt;
&lt;span class="c1"&gt;# Before acting: read, and act only on instructions nothing has replaced
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;how do I install packages in the web repo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DOMAIN&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;superseded_by&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# After acting: rate what was used (1.0 helped, -1.0 misled)
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;feedback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;atom_ids&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;atom_id&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;outcome&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;query_concepts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;query_concepts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DOMAIN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Explaining the past: ask for replaced instructions too
&lt;/span&gt;&lt;span class="n"&gt;history&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;which package manager did the web repo use in January&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DOMAIN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;include_history&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;history&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;replaced&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;superseded_by&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;current&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The June write names the January record in &lt;code&gt;supersedes&lt;/code&gt;, and the &lt;a href="https://mnemoverse.com/docs/api/reference#post-memory-write" rel="noopener noreferrer"&gt;API reference&lt;/a&gt; says what happens to a record named there: "A target is not deleted; it gains a &lt;code&gt;superseded_by&lt;/code&gt; pointer to the new atom and stays fetchable by ID". Hiding replaced records from ordinary reads is an organisation setting, "Hide replaced memories" under Settings in the console, and it is off by default, so a read can return the January and the June instructions side by side. For that case the reference names the field to check: "while filtering is off, this field is how you tell a replaced revision from a live one". That is why the code filters on &lt;code&gt;superseded_by&lt;/code&gt; itself, which gives the same result with the setting on or off. With it on, ordinary reads return current records only, and &lt;code&gt;include_history=True&lt;/code&gt; makes replaced ones eligible again under the same ranking, as &lt;a href="https://mnemoverse.com/docs/api/reference#reading-history" rel="noopener noreferrer"&gt;Reading history&lt;/a&gt; describes.&lt;/p&gt;

&lt;p&gt;Ratings re-rank what comes back next. The &lt;a href="https://mnemoverse.com/docs/api/overview" rel="noopener noreferrer"&gt;overview&lt;/a&gt; states the limit of that: feedback "changes the order of the next read, not the stored text". The two &lt;code&gt;stored&lt;/code&gt; checks are there for the write gate: a write that is too similar to the nearest memory in the same domain is not stored, and a refused write returns no id to pass to &lt;code&gt;supersedes&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check it with a control
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Write an instruction, then a correction that names it as replaced. Ask the agent how to do the task. It should follow the correction, not the original.&lt;/li&gt;
&lt;li&gt;Ask it to explain something that happened under the old instruction, such as the January lockfile. It should find the closed instruction and say it was replaced, which shows that closing kept the history a deletion would have lost.&lt;/li&gt;
&lt;li&gt;Control: ask about an instruction that was never replaced, such as how tests are run. It should come back as current. If it comes back marked as replaced, or the npm instruction comes back unmarked, the closing is not working, and the first answer proves nothing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;a href="https://mnemoverse.com/docs/library/why-agents-need-to-forget" rel="noopener noreferrer"&gt;library page&lt;/a&gt; has the same three operations in a shorter form, including what to look for in a memory system before you trust it with instructions. Which retired instruction is your agent still following?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>python</category>
      <category>rag</category>
    </item>
  </channel>
</rss>
