<?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: Adeline</title>
    <description>The latest articles on DEV Community by Adeline (@a_e9d710dc0b575ff2fb87a3a).</description>
    <link>https://dev.to/a_e9d710dc0b575ff2fb87a3a</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3931881%2F7437cd83-6db8-492e-9676-cb4eaf472aa3.png</url>
      <title>DEV Community: Adeline</title>
      <link>https://dev.to/a_e9d710dc0b575ff2fb87a3a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/a_e9d710dc0b575ff2fb87a3a"/>
    <language>en</language>
    <item>
      <title>Teaching My AI Agents to Push Back: Why I Built RoBrain</title>
      <dc:creator>Adeline</dc:creator>
      <pubDate>Thu, 14 May 2026 23:04:20 +0000</pubDate>
      <link>https://dev.to/a_e9d710dc0b575ff2fb87a3a/teaching-my-ai-agents-to-push-back-why-i-built-robrain-23e</link>
      <guid>https://dev.to/a_e9d710dc0b575ff2fb87a3a/teaching-my-ai-agents-to-push-back-why-i-built-robrain-23e</guid>
      <description>&lt;p&gt;Claude Code’s auto-memory is a game-changer for solo coding, but it hits a wall the second you add a teammate. Memory is trapped in local files (e.g., ~/.claude/projects/.../memory/), meaning my agent is oblivious to what my teammate's agent has learned. Furthermore, if she switches to Cursor or Copilot, that knowledge silo becomes even deeper.&lt;/p&gt;

&lt;p&gt;To solve this, I built RoBrain—a shared institutional memory for AI teams. It keeps the "passive capture" magic (no manual note-taking required) but moves the storage to a shared Postgres instance accessible via MCP, working seamlessly across Claude Code, Cursor, and Copilot.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Capturing the "Why Not": The rejected[] Field
Most memory systems only record what you did. RoBrain records what you ruled out. Every decision includes a structured rejected[] field:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;JSON&lt;br&gt;
{&lt;br&gt;
  "decision": "Use Zustand for state management",&lt;br&gt;
  "rejected": [&lt;br&gt;
    { "option": "Redux", "reason": "re-render perf issues in cart" }&lt;br&gt;
  ]&lt;br&gt;
}&lt;br&gt;
Six weeks later, when an agent suggests Redux, RoBrain doesn't just say "we use Zustand"—it pushes back with: "You already considered Redux and ruled it out because of performance issues". Decisions also have a lifecycle; when you switch technologies, the old record is linked and invalidated rather than deleted, preserving the "why" behind your team's evolution.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The "Always-On" Cross-Tool Summary
Shared memory is only useful if it’s available the moment you start typing. At the start of every session, the MCP server automatically fetches and injects a pre-compressed summary of your project’s approved decisions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tuesday's Cursor decision is automatically known by Wednesday's Claude Code session.&lt;/p&gt;

&lt;p&gt;No manual copy-pasting or specific "inject" commands are required for the default path.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Background "Synthesis": The System’s Sleep Cycle
While capture is reactive and isolated, RoBrain periodically runs a "synthesis" pass to reconcile the entire corpus. This batch job performs three critical functions that reactive systems miss:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Contradiction Scanning: It flags sessions that provide conflicting instructions (e.g., "idempotent API calls" vs. "fire-and-forget webhooks").&lt;/p&gt;

&lt;p&gt;Drift Detection: It notices when your team’s stance on architecture is silently shifting across unrelated files.&lt;/p&gt;

&lt;p&gt;Entity Promotion: It identifies recurring proper nouns and elevates them into first-class planning blocks.&lt;/p&gt;

&lt;p&gt;Honest Tradeoffs&lt;br&gt;
Heavier Setup: Requires Docker, Postgres, and two API keys.&lt;/p&gt;

&lt;p&gt;Triage Needed: Passive capture can have false positives; you'll occasionally need to use robrain review.&lt;/p&gt;

&lt;p&gt;Scale Dependent: Synthesis provides the most value once you hit the 100+ decision mark.&lt;/p&gt;

&lt;p&gt;RoBrain is Apache 2.0 and fully self-hostable.&lt;/p&gt;

&lt;p&gt;I’d love your thoughts: Does a background reconciliation pass for agent memory feel like the right approach, or is it overengineered? And what would make you trust an automated rejected[] field in your daily workflow?&lt;/p&gt;

&lt;p&gt;Check it out here: &lt;a href="https://github.com/adelinamart/robrain" rel="noopener noreferrer"&gt;https://github.com/adelinamart/robrain&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frslr6easjur1nh83qrpc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frslr6easjur1nh83qrpc.png" alt=" " width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

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