<?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: Mathias Markl</title>
    <description>The latest articles on DEV Community by Mathias Markl (@keshrath).</description>
    <link>https://dev.to/keshrath</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%2F3843386%2F66c0ffd3-7bca-4f1a-a32a-ca580402b40b.png</url>
      <title>DEV Community: Mathias Markl</title>
      <link>https://dev.to/keshrath</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/keshrath"/>
    <language>en</language>
    <item>
      <title>How I Gave My AI Agents a Dynamic MCP Marketplace</title>
      <dc:creator>Mathias Markl</dc:creator>
      <pubDate>Tue, 07 Apr 2026 13:05:16 +0000</pubDate>
      <link>https://dev.to/keshrath/how-i-gave-my-ai-agents-a-dynamic-mcp-marketplace-d3a</link>
      <guid>https://dev.to/keshrath/how-i-gave-my-ai-agents-a-dynamic-mcp-marketplace-d3a</guid>
      <description>&lt;p&gt;I've written before about agent-comm, agent-tasks, and agent-knowledge — tools for giving AI coding agents coordination, task management, and persistent memory. But there was still one friction point I hadn't solved: getting the right MCP servers in front of the agent in the first place.&lt;/p&gt;

&lt;p&gt;The problem with static MCP configs is that everything is always on. Every server you've ever registered is running whether you need it or not. You want to add a new tool? Edit a JSON file, restart your agent. You want to try something from the official MCP registry? Good luck figuring out what's available and how to install it without leaving your coding session.&lt;/p&gt;

&lt;p&gt;I built agent-discover to fix this.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;When you configure MCP servers in Claude Code (or any MCP client), you write a static config file. That list is fixed. All those servers load at startup. If you want to browse what else is out there, you leave the agent, search the internet, manually edit the config, and restart.&lt;/p&gt;

&lt;p&gt;It doesn't sound that bad until you're in the middle of a session and realize you need a filesystem tool, or a browser tool, or a database connector — and you have to break your flow to set it up.&lt;/p&gt;

&lt;p&gt;There's also a more subtle problem: with a long list of always-on servers, your agent's context is crowded with tools it may never use. Less signal, more noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: a runtime MCP marketplace
&lt;/h2&gt;

&lt;p&gt;agent-discover is an open-source MCP server registry and marketplace. It acts as a dynamic proxy — you add it to your MCP config once, and from then on your agent can discover, install, activate, and manage other MCP servers without ever leaving the session.&lt;/p&gt;

&lt;p&gt;The key mechanic: activated servers have their tools merged into agent-discover's own tool list, namespaced as &lt;code&gt;serverName__toolName&lt;/code&gt;. Your agent can call &lt;code&gt;filesystem__read_file&lt;/code&gt; without knowing anything about how the filesystem server is configured. Activate, use, deactivate — no restarts, no config edits.&lt;/p&gt;

&lt;h2&gt;
  
  
  What agents can do with it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Browse the official MCP registry&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;registry&lt;/code&gt; tool with action &lt;code&gt;browse&lt;/code&gt; proxies to registry.modelcontextprotocol.io. Your agent can search by keyword, see descriptions and versions, and install directly from results — all in a single tool call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. One-call install&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;registry(action="install", name="filesystem")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. agent-discover registers the server in a local SQLite database, pre-downloads the npm package in the background, and it's ready to activate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. On-demand activation&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;registry_server(action="activate", server_id="filesystem")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server starts, its tools get discovered and namespaced, and they appear in your tool list immediately. No restart. Deactivate when you're done and the tools disappear just as cleanly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Secret management&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;API keys and tokens live in per-server secret storage — not in your config file, not in env vars that leak across sessions. They're automatically injected on activation, as env vars for stdio servers or HTTP headers for SSE/streamable-http servers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Health checks and metrics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every activated server gets health probes — connect/disconnect checks for inactive servers, tool-list checks for active ones. Every proxied tool call records latency, call count, and error count. You get visibility into what's actually working.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; agent-discover
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or run directly with npx. Add to your MCP config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"agent-discover"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"agent-discover"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the only change you ever need to make to your MCP config. The dashboard auto-starts at &lt;a href="http://localhost:3424" rel="noopener noreferrer"&gt;http://localhost:3424&lt;/a&gt; on the first connection.&lt;/p&gt;

&lt;h2&gt;
  
  
  The dashboard
&lt;/h2&gt;

&lt;p&gt;The web UI at &lt;a href="http://localhost:3424" rel="noopener noreferrer"&gt;http://localhost:3424&lt;/a&gt; has two tabs. The Servers tab shows all your registered servers as cards — health status, error counts, active/inactive state, tags, tools list, and expandable sections for secrets, metrics, and config. Action buttons for activate, deactivate, health check, and delete.&lt;/p&gt;

&lt;p&gt;The Browse tab is the marketplace view: search the official registry, see server details, and hit install. Real-time updates via WebSocket with dark/light theming that persists across sessions.&lt;br&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%2Fy7f11o47zov1j98pemsc.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%2Fy7f11o47zov1j98pemsc.png" alt="The agent-discover dashboard — Servers tab with an active MCP server and its tools" width="800" height="752"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How it fits with the rest of the stack
&lt;/h2&gt;

&lt;p&gt;If you're already using agent-comm for agent coordination, agent-tasks for task pipelines, and agent-knowledge for persistent memory — agent-discover rounds out the picture. Now your agents can also expand their own capabilities on demand.&lt;/p&gt;

&lt;p&gt;The suite is designed to be used together, but each piece works independently. agent-discover exposes three transport layers: MCP (stdio), REST API (18 endpoints), WebSocket for real-time events. Anything that can make HTTP requests can integrate with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;The MCP ecosystem is growing fast. There are hundreds of servers in the official registry and more appearing weekly. Static configs don't scale with that — you end up with either a bloated always-on list or a permanently outdated one.&lt;/p&gt;

&lt;p&gt;agent-discover turns your MCP setup into something dynamic. Your agent can discover what's available, install what it needs, and activate tools for the duration of a task. It's closer to how humans use tools: pick up what you need, put it down when you're done.&lt;/p&gt;

&lt;p&gt;If you're running serious AI coding workflows, give it a try.&lt;/p&gt;

&lt;p&gt;GitHub: github.com/keshrath/agent-discover&lt;/p&gt;

&lt;p&gt;Feedback welcome — open an issue or drop a comment below.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>mcp</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>How I Gave My AI Agents a Permanent Memory That Syncs Across Machines</title>
      <dc:creator>Mathias Markl</dc:creator>
      <pubDate>Fri, 27 Mar 2026 10:08:31 +0000</pubDate>
      <link>https://dev.to/keshrath/how-i-gave-my-ai-agents-a-permanent-memory-that-syncs-across-machines-4755</link>
      <guid>https://dev.to/keshrath/how-i-gave-my-ai-agents-a-permanent-memory-that-syncs-across-machines-4755</guid>
      <description>&lt;p&gt;If you've spent any time working with AI coding agents like Claude Code, you've probably noticed the elephant in the room: &lt;strong&gt;every session starts from scratch&lt;/strong&gt;. Your agent debugs a tricky deployment issue, discovers that your project needs a specific environment variable, figures out the architecture of your codebase — and then forgets all of it the moment the session ends.&lt;/p&gt;

&lt;p&gt;The next session? Back to square one.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://github.com/keshrath/agent-knowledge" rel="noopener noreferrer"&gt;agent-knowledge&lt;/a&gt; to fix this. It's an open-source MCP server that gives AI agents a persistent, git-synced memory — a knowledge base they can read from and write to across sessions, across machines, and across different AI clients.&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%2Fllmq1kbd0erl4go422cf.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%2Fllmq1kbd0erl4go422cf.png" alt="Knowledge Base with category filtering" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem: Ephemeral Agent Sessions
&lt;/h2&gt;

&lt;p&gt;When you're working with Claude Code (or any AI coding agent), the conversation is stored as a JSONL transcript file — but the agent itself can't search or learn from previous sessions. Every new session is a blank slate.&lt;/p&gt;

&lt;p&gt;This means you end up repeating yourself constantly. You re-explain your project structure. You re-describe team preferences. You re-debug the same issues. It's like working with a brilliant colleague who has amnesia.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Solution: Two Complementary Memory Systems
&lt;/h2&gt;

&lt;p&gt;agent-knowledge tackles this with two systems working together:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Knowledge Base&lt;/strong&gt; — A git-synced markdown vault where structured entries live. Think of it as a shared wiki that your agent can read and write. Entries are organized into categories like projects, decisions, workflows, people, and notes. Each entry is a markdown file with YAML frontmatter, and every write is automatically committed and pushed to git.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Session Search&lt;/strong&gt; — TF-IDF ranked full-text search across all your past session transcripts. Instead of those JSONL files just sitting on disk, they become a searchable archive. Your agent can look up what happened in previous sessions — what errors occurred, what decisions were made, what files were modified.&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%2Fnai2xizguwmjaie2lpw1.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%2Fnai2xizguwmjaie2lpw1.png" alt="TF-IDF ranked session search" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works Under the Hood
&lt;/h2&gt;

&lt;p&gt;The architecture is straightforward. agent-knowledge runs as an MCP server over stdio, exposing 12 tools that your AI client can call. It also auto-starts a dashboard on &lt;code&gt;localhost:3423&lt;/code&gt; for browsing everything visually.&lt;/p&gt;

&lt;p&gt;On the knowledge side, markdown files live in a git repository (by default at &lt;code&gt;~/claude-memory&lt;/code&gt;). Every read triggers a &lt;code&gt;git pull&lt;/code&gt;, every write triggers a &lt;code&gt;git add&lt;/code&gt;, &lt;code&gt;commit&lt;/code&gt;, and &lt;code&gt;push&lt;/code&gt;. This means if you're working on two machines, your knowledge stays in sync automatically.&lt;/p&gt;

&lt;p&gt;On the session search side, it parses the JSONL transcript files that Claude Code generates and builds a TF-IDF index over them. The index is cached for 60 seconds and rebuilt on demand. Individual files are cached based on their modification time so unchanged files are never re-parsed.&lt;/p&gt;

&lt;p&gt;There's also a scoped recall system with six predefined filters: errors (stack traces, exceptions), plans (architecture, TODOs), configs (settings, env vars), tools (MCP calls, CLI commands), files (paths, modifications), and decisions (trade-offs, rationale). This lets your agent ask targeted questions like "what errors have I seen in this project before?"&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Setup is simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/keshrath/agent-knowledge.git
&lt;span class="nb"&gt;cd &lt;/span&gt;agent-knowledge
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then register it as an MCP server in Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add agent-knowledge &lt;span class="nt"&gt;-s&lt;/span&gt; user &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;KNOWLEDGE_MEMORY_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/claude-memory"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; node /path/to/agent-knowledge/dist/index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And grant permissions in your &lt;code&gt;~/.claude/settings.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"permissions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"allow"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"mcp__agent-knowledge__*"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Open &lt;code&gt;http://localhost:3423&lt;/code&gt; in your browser and you'll see the dashboard with four tabs: Knowledge, Search, Sessions, and Recall.&lt;/p&gt;




&lt;h2&gt;
  
  
  Works With Claude Code and OpenCode
&lt;/h2&gt;

&lt;p&gt;agent-knowledge works with any MCP client over stdio. The &lt;a href="https://github.com/keshrath/agent-knowledge/blob/main/docs/SETUP.md" rel="noopener noreferrer"&gt;setup guide&lt;/a&gt; includes configuration examples for both Claude Code and OpenCode.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Code&lt;/strong&gt; gets the richest experience with lifecycle hooks and session auto-distillation. You can set up a SessionStart hook that announces the knowledge dashboard URL at the beginning of every session, so the agent always knows where to look.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenCode&lt;/strong&gt; supports MCP servers through its &lt;code&gt;opencode.json&lt;/code&gt; config and offers lifecycle hooks via its plugin system. You can wire up events like &lt;code&gt;session.created&lt;/code&gt; and &lt;code&gt;tool.execute.after&lt;/code&gt; to integrate agent-knowledge into your workflow.&lt;/p&gt;

&lt;p&gt;Both clients support the full set of 12 MCP tools — knowledge CRUD, session search, scoped recall, and admin configuration.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Dashboard
&lt;/h2&gt;

&lt;p&gt;The built-in web dashboard is a vanilla JS single-page app — no framework, no build step. It connects over WebSocket for live updates and supports light/dark theming with Material Design 3 tokens.&lt;/p&gt;

&lt;p&gt;The Knowledge tab shows a card grid of your entries, filterable by category. The Search tab gives you full-text search with TF-IDF ranking and role filtering. The Sessions tab lists all your past conversations with project names and git branches. And the Recall tab lets you do scoped searches to quickly find errors, plans, or decisions from your history.&lt;/p&gt;

&lt;p&gt;There's even a live reload feature for development — edit the UI files and connected browsers auto-refresh.&lt;/p&gt;




&lt;h2&gt;
  
  
  Auto-Distillation and Secrets Scrubbing
&lt;/h2&gt;

&lt;p&gt;Two features that stood out to me: auto-distillation and secrets scrubbing.&lt;/p&gt;

&lt;p&gt;Auto-distillation automatically extracts insights from completed sessions and pushes them to the knowledge base. Instead of manually curating what the agent learned, it happens automatically.&lt;/p&gt;

&lt;p&gt;Secrets scrubbing ensures that API keys, tokens, passwords, and private keys are redacted before anything gets pushed to git. This is critical — you don't want your agent accidentally committing sensitive data to a shared repository.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;AI coding agents are incredibly powerful, but the lack of persistent memory has been a major friction point. Every time you start a new session, there's a ramp-up cost. The agent needs to re-learn your project, your preferences, your past decisions.&lt;/p&gt;

&lt;p&gt;agent-knowledge eliminates that ramp-up. Your agent remembers what it learned, can search its own history, and shares knowledge across machines and sessions. It turns ephemeral conversations into a cumulative knowledge base that grows over time.&lt;/p&gt;

&lt;p&gt;If you're using AI coding agents seriously, give &lt;a href="https://github.com/keshrath/agent-knowledge" rel="noopener noreferrer"&gt;agent-knowledge&lt;/a&gt; a look. It's MIT licensed, well tested, and the documentation is thorough. Check out the &lt;a href="https://github.com/keshrath/agent-knowledge/blob/main/docs/ARCHITECTURE.md" rel="noopener noreferrer"&gt;architecture docs&lt;/a&gt; if you want to understand how the internals work, or jump straight to the &lt;a href="https://github.com/keshrath/agent-knowledge/blob/main/docs/SETUP.md" rel="noopener noreferrer"&gt;setup guide&lt;/a&gt; to get started.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you been dealing with the same "amnesia" problem with your AI agents? I'd love to hear what approaches you've tried. Drop a comment below!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How I Got Multiple AI Coding Agents to Stop Losing Track of Their Work</title>
      <dc:creator>Mathias Markl</dc:creator>
      <pubDate>Thu, 26 Mar 2026 20:53:06 +0000</pubDate>
      <link>https://dev.to/keshrath/how-i-got-multiple-ai-coding-agents-to-stop-losing-track-of-their-work-19nb</link>
      <guid>https://dev.to/keshrath/how-i-got-multiple-ai-coding-agents-to-stop-losing-track-of-their-work-19nb</guid>
      <description>&lt;p&gt;I recently &lt;a href="https://dev.to/keshrath/how-i-got-multiple-ai-coding-agents-to-stop-stepping-on-each-other-1hd5"&gt;wrote about agent-comm&lt;/a&gt; — a communication layer that lets multiple AI coding agents talk to each other. But talking is only half the problem. The other half? &lt;strong&gt;Knowing what work needs to be done, who's doing it, and what stage it's in.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;When you run multiple AI agents in parallel — say three Claude Code sessions working on different parts of a feature — things fall apart fast:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No shared backlog.&lt;/strong&gt; Each agent only knows what you told it in its prompt. There's no central place to see all pending work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No pipeline visibility.&lt;/strong&gt; Is the spec done? Has anyone started implementing? Did tests pass? Nobody knows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No dependency tracking.&lt;/strong&gt; Agent B can't start until Agent A finishes, but there's nothing enforcing that.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No artifacts.&lt;/strong&gt; Specs, plans, test results — they live in chat context and vanish when the session ends.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I needed something that gives AI agents the same project management primitives that human teams take for granted — but exposed as MCP tools they can call directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: a pipeline for AI agents
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/keshrath/agent-tasks" rel="noopener noreferrer"&gt;agent-tasks&lt;/a&gt; is an open-source &lt;strong&gt;pipeline-driven task management server&lt;/strong&gt; that AI coding agents can use via MCP. Think of it as a lightweight Jira — but designed for machines, not humans.&lt;/p&gt;

&lt;p&gt;Every task flows through configurable pipeline stages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;backlog → spec → plan → implement → test → review → done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agents claim tasks, advance them through stages, attach artifacts at each step, and block on dependencies — all through 31 MCP tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  What agents can do with it
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Pipeline-driven workflow
&lt;/h3&gt;

&lt;p&gt;Tasks aren't just "open" or "closed." They move through stages, and each stage produces artifacts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Spec stage&lt;/strong&gt;: Agent writes a specification and attaches it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan stage&lt;/strong&gt;: Agent breaks the task into subtasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implement stage&lt;/strong&gt;: Agent writes code, attaches a summary&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test stage&lt;/strong&gt;: Agent runs tests, attaches results&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review stage&lt;/strong&gt;: Another agent reviews and approves&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Dependencies and blocking
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;task_add_dependency&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&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;depends_on&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;blocks&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agent 5 literally cannot advance until task 3 is done. The system detects cycles too — no deadlocks.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Multi-agent collaboration
&lt;/h3&gt;

&lt;p&gt;Agents can be assigned roles on tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Collaborator&lt;/strong&gt;: actively working on it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reviewer&lt;/strong&gt;: needs to approve before advancement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watcher&lt;/strong&gt;: gets notified of changes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Approval gates
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;task_request_approval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&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;stage&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;review&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Another agent:
&lt;/span&gt;&lt;span class="nf"&gt;task_approve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This enforces a maker-checker pattern. No task moves to "done" without explicit sign-off.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Artifacts with versioning
&lt;/h3&gt;

&lt;p&gt;Every spec, plan, test result, and review note is stored as a versioned artifact attached to the task. Previous versions are chained so you can see how decisions evolved.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Full-text search
&lt;/h3&gt;

&lt;p&gt;Need to find that task about the auth middleware rewrite? &lt;code&gt;task_search(query="auth middleware")&lt;/code&gt; uses SQLite FTS5 to search across all task titles and descriptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; agent-tasks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add to your MCP config (Claude Code &lt;code&gt;settings.json&lt;/code&gt;, Cursor, etc.):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"agent-tasks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"agent-tasks"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. The dashboard auto-starts at &lt;code&gt;http://localhost:3422&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real coordination pattern
&lt;/h2&gt;

&lt;p&gt;Here's how I use it with three agents working on a feature:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent 1&lt;/strong&gt; (planner) creates the task and writes a spec:&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="nf"&gt;task_create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Add rate limiting to 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;project&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;backend&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;task_claim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;task_add_artifact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;spec&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&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="nf"&gt;task_advance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# spec → plan
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Agent 2&lt;/strong&gt; (implementer) picks up the next unblocked task:&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="nf"&gt;task_next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;backend&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# returns task 42 at plan stage
&lt;/span&gt;&lt;span class="nf"&gt;task_claim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;task_expand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;subtasks&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;Add middleware&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;Add Redis store&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;Add config&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="c1"&gt;# ... implements each subtask ...
&lt;/span&gt;&lt;span class="nf"&gt;task_advance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# implement → test
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Agent 3&lt;/strong&gt; (reviewer) reviews and approves:&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="nf"&gt;task_claim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;task_add_artifact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;review-notes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;LGTM, clean implementation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;task_approve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;task_advance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# review → done
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The whole flow is visible in the dashboard — a kanban board that updates in real-time via WebSocket.&lt;/p&gt;

&lt;h2&gt;
  
  
  The dashboard
&lt;/h2&gt;

&lt;p&gt;The built-in dashboard gives you a kanban view of all tasks across pipeline stages. You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Drag tasks between columns&lt;/li&gt;
&lt;li&gt;Filter by project, assignee, or priority&lt;/li&gt;
&lt;li&gt;Expand task details with artifacts and comments&lt;/li&gt;
&lt;li&gt;View artifact diffs between versions&lt;/li&gt;
&lt;li&gt;Track subtask progress&lt;/li&gt;
&lt;li&gt;Toggle dark/light theme&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No frameworks — it's vanilla HTML/CSS/JS with &lt;code&gt;morphdom&lt;/code&gt; for efficient DOM updates.&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%2Fy4oc1iutmip772w4t9xz.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%2Fy4oc1iutmip772w4t9xz.png" alt="Task detail panel showing subtasks, artifacts, and metadata" width="800" height="534"&gt;&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%2Fh2x00j4ajen66tf05w9g.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%2Fh2x00j4ajen66tf05w9g.png" alt="Dashboard in dark mode" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical details
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; + Node.js, zero-framework architecture&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite&lt;/strong&gt; with WAL mode for concurrent reads&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3 transport layers&lt;/strong&gt;: MCP (stdio), REST API (18 endpoints), WebSocket&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;31 MCP tools&lt;/strong&gt; covering tasks, subtasks, dependencies, artifacts, comments, approvals, and collaboration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;337+ tests&lt;/strong&gt; with vitest&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MIT licensed&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It pairs naturally with &lt;a href="https://github.com/keshrath/agent-comm" rel="noopener noreferrer"&gt;agent-comm&lt;/a&gt; — when a task changes, agents get notified through the communication bridge.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;I'm actively using this to coordinate up to 5 Claude Code agents working simultaneously. If you're running multi-agent setups and losing track of what's happening, give it a try.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/keshrath/agent-tasks" rel="noopener noreferrer"&gt;github.com/keshrath/agent-tasks&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback welcome — open an issue or drop a comment below.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>mcp</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How I Got Multiple AI Coding Agents to Stop Stepping on Each Other</title>
      <dc:creator>Mathias Markl</dc:creator>
      <pubDate>Wed, 25 Mar 2026 15:16:33 +0000</pubDate>
      <link>https://dev.to/keshrath/how-i-got-multiple-ai-coding-agents-to-stop-stepping-on-each-other-1hd5</link>
      <guid>https://dev.to/keshrath/how-i-got-multiple-ai-coding-agents-to-stop-stepping-on-each-other-1hd5</guid>
      <description>&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;If you've tried running multiple AI coding agents in parallel — say, Claude Code in one terminal doing implementation while another does code review — you've probably hit this: they have no idea the other exists.&lt;/p&gt;

&lt;p&gt;Agent A refactors a function. Agent B, unaware, edits the same function. You get merge conflicts, duplicated work, and wasted tokens. The more agents you run, the worse it gets.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: give them a way to talk
&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://github.com/keshrath/agent-comm" rel="noopener noreferrer"&gt;agent-comm&lt;/a&gt;, an open-source communication server that any AI coding agent can plug into. It works with Claude Code, Codex CLI, Gemini CLI, Aider — anything that supports MCP or can make HTTP requests.&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%2F496x8xqrklf1d7jvxofy.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%2F496x8xqrklf1d7jvxofy.png" alt="agent-comm dashboard — agents, channels, and shared state at a glance" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What agents can do with it
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Discover each other
&lt;/h3&gt;

&lt;p&gt;Agents register with a name and capabilities. Others can query who's online and what they're working on.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Send messages
&lt;/h3&gt;

&lt;p&gt;Direct messages, broadcasts, topic-based channels, threading, reactions. An agent finishing a task can broadcast "auth module refactored, ready for review" and another agent picks it up.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Coordinate with shared state
&lt;/h3&gt;

&lt;p&gt;A namespaced key-value store with atomic compare-and-swap. This is the real workhorse — agents use it for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Distributed locks&lt;/strong&gt;: "I'm editing &lt;code&gt;src/auth.ts&lt;/code&gt;, back off"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progress flags&lt;/strong&gt;: "migration step 3 of 5 complete"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared config&lt;/strong&gt;: feature flags, environment state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The CAS operation means two agents can't accidentally grab the same lock — exactly like a mutex, but for AI agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Watch it all happen
&lt;/h3&gt;

&lt;p&gt;A real-time dashboard (WebSocket-powered) shows agents, messages, channels, and state — useful for debugging and understanding what your agents are actually doing.&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%2Fsugyzcu14pc5p29sb0yh.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%2Fsugyzcu14pc5p29sb0yh.png" alt="messages view — direct messages, channels, and threading between agents" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; agent-comm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add to your MCP config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"agent-comm"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"agent-comm"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The dashboard launches automatically at &lt;code&gt;http://localhost:3421&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real coordination pattern
&lt;/h2&gt;

&lt;p&gt;Here's how I use it with three Claude Code sessions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Implementer&lt;/strong&gt; registers, checks shared state for the current task queue&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reviewer&lt;/strong&gt; watches for "ready-for-review" state changes, picks up completed work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tester&lt;/strong&gt; monitors the "reviewed" channel, runs tests on approved changes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;They coordinate through channels and state locks. No merge conflicts, no duplicate work. Each agent knows what the others are doing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical details
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt;, &lt;strong&gt;SQLite&lt;/strong&gt; (WAL mode + FTS5 full-text search)&lt;/li&gt;
&lt;li&gt;33 MCP tools, 22 REST endpoints&lt;/li&gt;
&lt;li&gt;214 tests across 11 suites&lt;/li&gt;
&lt;li&gt;MIT licensed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The MCP tools cover agent management, messaging, channels, and shared state. The REST API mirrors everything for non-MCP clients.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;I'm actively using this daily and iterating. Would love feedback from anyone else running multi-agent setups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/keshrath/agent-comm" rel="noopener noreferrer"&gt;github.com/keshrath/agent-comm&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>typescript</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
