Multi-Agent Integration with m3-Memory

(subscription vs API token)

### High-level architecture

Layer | Component | Role
Agents | Claude Code, Gemini CLI, OpenCode | Do work, call tools, run sub-agents
Memory | m3-memory | Shared long-term, cross-agent memory
Local models | Ollama / LM Studio embed + small LLM | Embeddings, optional auto-summarization

All three agents talk to m3-memory via MCP or HTTP/WebSocket; they never call each other directly. [^1][^2]

## 1. Prerequisites and base install

### 1.1 Install m3-memory

pip install m3-memory

m3 exposes an MCP server entrypoint mcp-memory and is tuned for qwen3-embedding:0.6b by default. [^1][^2]

Set up an embedding model (pick one):

# Option A: Ollama ollama pull qwen3-embedding:0.6b ollama serve # Option B: LM Studio / llama.cpp # Start an embedding model and note its OpenAI-compatible endpoint

Key env vars (examples):

export EMBED_MODEL=qwen3-embedding:0.6b export EMBED_ENDPOINT=http://localhost:11434/v1 # Optional small chat model for auto-summarization/consolidation export SMALL_CHAT_MODEL=qwen2.5:0.5b

See ENVIRONMENT_VARIABLES.md for full list. [^3][^1]

## 2. Unified memory schema (tags + conventions)

Use m3�s built-in relationships and metadata, but standardize tags and fields across agents. See CONVENTIONS.md, AGENTS.md, and AGENT_INSTRUCTIONS.md for the official patterns. [^3]

### 2.1 Core fields

When writing via memory_write / memory_write_bulk:

� user_id: "bhaba" (or per-device/agent if you want separation)

� source: "claude" | "gemini" | "opencode"

� kind: "plan" | "design" | "decision" | "doc" | "bug" | "test" | "note"

� tags (array):

o "feature:<slug>"

o "agent:<claude|gemini|opencode>"

o "status:<draft|final>"

o "needs:review" / "needs:gemini-review" / "needs:doc"

### 2.2 Relationship types

Use m3�s graph relationships (see CORE_FEATURES.md / TECHNICAL_DETAILS.md): [^3][^2]

� supersedes - newer fact replaces older

� supports - evidence / examples

� contradicts - explicit conflict

� follows / precedes - temporal sequence

� relates_to - loose association

Agents should prefer:

� supersedes for updated decisions

� supports for tests/docs backing a decision

� relates_to for cross-feature links

## 3. Claude Code + m3-memory

m3 already ships an MCP config example and a Claude-specific guide (CLAUDE.md, mcp.json.example, mcp-server.json). [^3][^2]

### 3.1 Claude MCP config

In your Claude MCP config (location depends on platform; follow CLAUDE.md):

{ � "mcpServers": { ��� "memory": { ����� "command": "mcp-memory", ����� "env": { ������� "EMBED_MODEL": "qwen3-embedding:0.6b", ������� "EMBED_ENDPOINT": "http://localhost:11434/v1" ����� } ��� } � } }

Restart Claude Desktop / Claude Code; run /mcp (or equivalent) to verify memory_* tools are listed.

### 3.2 Claude system prompt (main agent)

You are the primary orchestrator for my local development environment. You have access to an MCP server called "memory" (m3-memory), which provides over 60 tools for persistent, local, cross-session memory, including hybrid search, knowledge graph, GDPR tools, and chat-log capture. Rules: - Before planning work, call `memory_suggest` or `memory_search` with relevant tags � (repo name, feature slug, agent name) to retrieve prior context. - When you make decisions, finish a feature, or debug a tricky issue, call `memory_write` � (or `memory_write_bulk`) to store: � - summary of the situation � - key decisions and rationale � - important commands, configs, and file paths � - tags: feature:<slug>, agent:claude, kind:<plan|decision|bug|test>, status:final - When facts change, write a new memory and let m3-memory handle contradictions and � supersedes relationships automatically. - Use `memory_graph` to explore related memories when you suspect prior work exists. - Treat m3-memory as the shared brain across Claude, Gemini CLI, and OpenCode. � Do not assume you are the only agent writing to it. When you think another agent (Gemini CLI or OpenCode) should contribute, write a memory tagged `needs:gemini-review` or `needs:doc` with a concise brief.

### 3.3 Claude sub-agents

You can define sub-agents in Claude Code (or via CLAUDE.md patterns) that specialize:

### planner-agent prompt

You are planner-agent. Goal: - Turn high-level user goals into structured plans. - Use m3-memory to reuse prior work and avoid re-solving solved problems. Behavior: - Always call `memory_suggest` or `memory_search` before planning. - Emit a structured plan (YAML or JSON) and then call `memory_write` to store it � with tags: feature:<slug>, kind:plan, agent:claude, status:draft.

### review-agent prompt

You are review-agent. Goal: - Review code changes and designs against prior decisions and patterns. Behavior: - Use `memory_search` and `memory_graph` to find related decisions, bugs, and tests. - Highlight regressions, inconsistencies, or violations of prior decisions. - Write a review summary via `memory_write` with kind:decision, tags:status:final.

## 4. Gemini CLI + m3-memory

m3 has a dedicated GEMINI.md and MULTI_AGENT.md describing Gemini CLI integration and multi-agent orchestration. [^3][^4][^5]

### 4.1 Enable MCP server in Gemini CLI

In Gemini CLI config (see �MCP servers� section in docs): [^6][^4]

{ � "mcpServers": { ��� "memory": { ����� "command": "mcp-memory", ����� "env": { ������� "EMBED_MODEL": "qwen3-embedding:0.6b", ������� "EMBED_ENDPOINT": "http://localhost:11434/v1" ����� } ��� } � } }

From Gemini CLI, verify:

/tools /tools desc

You should see memory_* tools listed under MCP.

### 4.2 Gemini CLI �design-agent� prompt

Create a Gemini CLI skill / profile (or just use this as a starting prompt):

You are design-agent, a specialist that reads and writes to m3-memory. - Before proposing designs, call `list_mcp_resources` and `read_mcp_resource` if available, � then `memory_suggest` or `memory_search` to load prior plans and decisions. - Focus on: � - architecture options � - tradeoffs � - migration paths - When you produce a design, call `memory_write` with: � - kind: "design" � - tags: ["feature:<slug>", "agent:gemini", "status:draft"] - If you see memories tagged `needs:gemini-review`, prioritize those.

## 5. OpenCode (ChatGPT) + m3-memory

OpenCode supports custom tools and MCP servers; docs explicitly mention MCP integration. [^7][^8]

### 5.1 Add m3-memory as an MCP server

In opencode.json:

{ � "$schema": "https://opencode.ai/config.json", � "mcpServers": { ��� "memory": { ����� "command": "mcp-memory", ����� "env": { ������� "EMBED_MODEL": "qwen3-embedding:0.6b", ������� "EMBED_ENDPOINT": "http://localhost:11434/v1" ����� } ��� } � }, � "permission": { ��� "memory_*": "allow", ��� "edit": "allow", ��� "bash": "ask", ��� "read": "allow", ��� "grep": "allow", ��� "glob": "allow" � } }

Restart OpenCode; use its /tools or equivalent to confirm memory_* tools are available.

### 5.2 OpenCode �doc-agent� prompt

You are doc-agent, running inside OpenCode with access to m3-memory. - Your job is to turn code and decisions into clear documentation. - Use OpenCode tools (read, glob, grep) to inspect the repo. - Use `memory_search` to find: � - plans � - designs � - decisions � - bugs and fixes - Generate: � - README sections � - ADR-style decision records � - inline docstrings and comments - After writing docs, call `memory_write` with: � - kind: "doc" � - tags: ["feature:<slug>", "agent:opencode", "status:final"]

## 6. Chat-log subsystem auto-install (self-install prompts)

m3�s PyPI page explicitly advertises a �one-line command�: tell your agent to install the chat log subsystem and it will auto-wire hooks using install_os.py and the repo�s orchestration scripts. [^1][^3]

### 6.1 Prompt for Claude Code

Install the m3-memory chat log sub-system for this environment. Steps (you should perform them yourself, using MCP and local tools): 1. Detect whether m3-memory is already installed (via `pip show m3-memory` or similar). �� - If not installed, run the appropriate command to install it. 2. Ensure the `mcp-memory` entrypoint is available. 3. Update your MCP configuration to include the "memory" server using the recommended �� settings from m3-memory's `mcp.json.example` and `CLAUDE.md`. 4. Enable chat-log capture: �� - Use the scripts and instructions in the m3-memory repo (e.g. `install_os.py`, ���� `AGENT_INSTRUCTIONS.md`, `MULTI_AGENT.md`) to: ���� - register a chat-log resource ���� - configure pre/post hooks if supported ���� - ensure each turn is written to m3-memory before compaction 5. Confirm: �� - Call a `memory_*` tool to verify connectivity. �� - Write a test memory and retrieve it. Explain what you did and where you wrote config files.

### 6.2 Prompt for Gemini CLI

Install and enable the m3-memory chat log subsystem for this Gemini CLI environment. You should: - Ensure `m3-memory` is installed and `mcp-memory` is available. - Add the "memory" MCP server to your Gemini CLI config using the guidance from � m3-memory's `GEMINI.md` and `mcp.json.example`. - Configure Gemini CLI so that: � - each conversation turn is written to m3-memory (using the recommended tools ��� and hooks described in m3-memory's multi-agent and chat-log docs), � - chat logs are captured before any summarization or compaction. - Verify by: � - writing a test conversation, � - calling `memory_suggest` or `conversation_search` to confirm the log is stored. Describe the changes you made and how to disable them if needed.

### 6.3 Prompt for OpenCode

Install and enable the m3-memory chat log subsystem for this OpenCode project. You should: - Confirm `m3-memory` is installed and `mcp-memory` is available. - Add the "memory" MCP server to `opencode.json` with appropriate env vars. - Configure a pattern where: � - each significant interaction (task start, plan, major edit, final summary) ��� is written to m3-memory using `memory_write` or `memory_write_bulk`, � - logs are tagged with agent:opencode and include file paths and commands used. - Follow the conventions and examples from m3-memory's `AGENTS.md`, � `AGENT_INSTRUCTIONS.md`, and `MULTI_AGENT.md`. After setup, run a small test session and confirm the memories exist via a `memory_search` call.

## 7. Multi-agent coordination patterns (Claude, Gemini, OpenCode)

Use MULTI_AGENT.md as the conceptual backbone; it already describes multi-agent orchestration and handoffs using m3�s tools (agent registry, notifications, tasks, chat-log capture). [^3][^1]

### 7.1 Tagging and routing

� Claude:

o agent:claude

o kind:plan|decision|bug|test

� Gemini:

o agent:gemini

o kind:design|exploration

� OpenCode:

o agent:opencode

o kind:doc|explanation

Use needs:* tags to signal handoffs:

� needs:gemini-review

� needs:doc

� needs:refactor

### 7.2 Example �handoff� prompt for Claude

When you believe another agent should contribute: 1. Write a memory via `memory_write` with: �� - a concise brief (3-7 sentences), �� - tags: ["feature:<slug>", "agent:claude", "needs:gemini-review"]. 2. Mention in your reply: "I have created a memory for Gemini CLI to review." Do not attempt to contact Gemini directly; rely on m3-memory as the shared channel.

### 7.3 Example �pickup� prompt for Gemini

At the start of a session, search m3-memory for any memories tagged `needs:gemini-review` or `agent:claude` with recent timestamps. For each such memory: - Read the brief. - Propose designs or alternatives. - Write your response back via `memory_write` with tags: � - ["feature:<slug>", "agent:gemini", "kind:design", "status:draft"].

## 8. Putting it all together: quick HOW-TO checklist

1. Install m3-memory and an embedding model (Ollama / LM Studio). [^1]

2. Wire m3-memory into Claude Code via MCP (CLAUDE.md, mcp.json.example). [^3][^2]

3. Wire m3-memory into Gemini CLI via MCP servers config (GEMINI.md, Gemini CLI MCP docs). [^4][^5][^3]

4. Wire m3-memory into OpenCode via opencode.json MCP config. [^7][^8][^3]

5. Adopt the unified schema (fields + tags + relationships).

6. Install chat-log subsystem by prompting each agent with the self-install prompts above and letting them follow m3�s AGENT_INSTRUCTIONS.md / MULTI_AGENT.md. [^3][^1]

7. Create sub-agents (planner, review, design, doc) using the prompt templates.

8. Start working normally-then periodically inspect m3�s DB or use memory_suggest / memory_graph to see the shared brain in action.

If you�d like, next step I can do a repo-specific pass: design concrete tag schemes and memory write patterns tailored to one of your actual projects (e.g., home automation stack, Proxmox/HA infra, or your AI orchestration repo).

# References (8)

[^1]: m3-memory � PyPI. https://pypi.org/project/m3-memory/

[^2]: m3-memory/README.md at main � skynetcmd/m3-memory � GitHub. https://github.com/skynetcmd/m3-memory/blob/main/README.md

[^3]: GitHub - skynetcmd/m3-memory: Local-first Agentic Memory Layer for MCP .... https://github.com/skynetcmd/m3-memory

[^4]: Welcome to Gemini CLI documentation. https://google-gemini.github.io/gemini-cli/docs/

[^5]: Gemini CLI . https://docs.cloud.google.com/gemini/docs/codeassist/gemini-cli

[^6]: Tools reference . https://geminicli.com/docs/reference/tools/

[^7]: Tools . https://opencode.ai/docs/tools

[^8]: Built-in Tools Reference - OpenCode Docs. https://open-code.ai/en/docs/tools