Persistent coordination infrastructure for multi-agent LLM workflows.
Junto lets multiple Claude Code (and other LLM) agents share state, message each other, and stay coherent across sessions, machines, and projects. It is the layer below orchestration: where agents remember and find each other, not who speaks next.
This repo (junto-stack) is the adopter entry point. One git clone, one docker-compose up, working stack on your machine.
| Component | Repo | Role |
|---|---|---|
| junto-memory | tlemmons/mcp-shared-memory |
MCP server. MongoDB + ChromaDB-backed shared state: messages, specs, function registry, learnings, audit logs, agent directory, locks, backlog. Speaks standard MCP — works with any compliant client (Claude Code, Cursor, Windsurf, custom). |
| junto-inbox | tlemmons/junto-inbox (forthcoming) |
Push-delivery plugin: subscribes to a junto-memory inbox resource and surfaces new messages into the host agent's live session. Current implementation is a Claude Code channel plugin; the role generalizes to any agent harness with a wake-on-notification primitive. |
| junto-control | tlemmons/junto-control |
PWA + FastAPI dashboard for a human operator: see all agents, browse threads, send messages, approve destructive operations. |
| junto-stack | tlemmons/junto-stack |
This repo. Wires the above with docker-compose; the adopter entry point. |
The components ship as separate repos because they have different runtimes (Python/Docker server, TypeScript/Bun plugin, TypeScript/Svelte dashboard) and different release cadences. This repo brings them together for adopters who just want the working system.
Cross-agent by design. junto-memory is MCP-native, so any MCP-compliant agent can participate. junto-inbox is currently a Claude Code adapter; future adapters for other agent harnesses can plug into the same junto-memory backend without changing the data model.
Today the stack is junto-memory + your existing Claude Code agents — junto-inbox and junto-control are forthcoming and will plug in via this same compose file when published.
# 1. Clone this repo and the memory server side-by-side
git clone https://github.com/tlemmons/junto-stack
git clone https://github.com/tlemmons/mcp-shared-memory junto-stack/components/junto-memory
# 2. Configure
cd junto-stack
cp .env.example .env
# Edit .env — the MONGO_PASSWORD line at minimum.
# 3. Bring up MongoDB + ChromaDB + memory server
docker compose up -d
# 4. Verify
curl http://localhost:8080/health
# {"status":"ok"}Your Claude Code agents now have a shared memory MCP server at http://localhost:8080/mcp. Add it to your .mcp.json:
{
"mcpServers": {
"shared-memory": {
"type": "http",
"url": "http://localhost:8080/mcp"
}
}
}Then the tools (memory_start_session, memory_send_message, memory_define_spec, ...) are available to your agents.
When tlemmons/junto-inbox publishes, sideload instructions land here. The plugin runs as a Bun script per Claude Code session; it subscribes to your agent's inbox resource on junto-memory and surfaces new peer-agent messages into the live session as <channel> blocks.
Clone alongside the other components:
git clone https://github.com/tlemmons/junto-control components/junto-controlUncomment the junto-control service block in docker-compose.yml, set its env vars in .env (tom-web API key, SESSION_SECRET, LOGIN_PASSPHRASE), then docker compose up -d junto-control. The dashboard talks to junto-memory like any other MCP client and renders agent activity, message threads, and approval flows for a human operator.
Decided 2026-05-06. Three reasons separated repos win over a monorepo:
- Different runtimes — Python/Docker server, Bun/TS plugin, TS/Svelte dashboard. Combined CI means contributors of any one need toolchains for all.
- Plugin marketplace expectation — Anthropic's official plugin tree (
claude-plugins-official/external_plugins/*) has zero precedent for plugin + non-plugin code in one repo. Mixing risks Phase E review friction. - Contract-as-boundary — same-repo invites "while we're in here" patches that skip the spec/notify discipline. We already paid for muddy contracts (case-sensitivity bug,
learning_5c447278).
This repo (junto-stack) gives adopters the one-clone experience without the costs.
MIT. See LICENSE.
The component repos may use different licenses (junto-memory is MIT; junto-inbox is Apache-2.0). Check each.
- 2026-05-06 — repo created, namespace claimed, walkthrough lands.
junto-memoryalready public and operational.junto-inboxandjunto-controlforthcoming.