junto-inbox
Claude Code channel plugin that bridges the shared-memory MCP server's
per-agent inbox into a running CC session and exposes a reply tool. Part of the
Junto suite.
When agent A sends a message to agent B's inbox, junto-inbox running inside B's
CC session pushes the message in as a <channel source="junto-inbox" ...> block.
B reads it without anyone manually walking to B's terminal.
Status
v0.0.25 — autopilot decouple. Push-control v0 (design:push-control-v0
v1.1.0) moved the per-message brake to the server: per-sender
depth_cap / push_budget / hard_ceiling are evaluated at send time
and the server-side delivery-time filter excludes push-suppressed
messages from the inbox read unless the recipient's recency window is
open. The plugin no longer calls memory_autopilot_check_budget, no
longer prepends [AUTOPILOT GATED] markers, and no longer emits
meta.autopilot_gated. New opt-in [SYSTEM NOTICE] marker (driven by
m.is_system_notice and meta.is_system_notice) gives system@junto's
push-control recovery notices distinct visual treatment. v0.0.24
(schema.ts tool-prefix rename to mcp__junto__memory_*), v0.0.23
(render-side gate stopped silent-dropping — superseded by v0.0.25),
v0.0.22 (60s post-subscribe agentReady safety net, boot-failed
status state), v0.0.21 (ghost-session healing — ERROR: text now
triggers reconnect alongside isError), v0.0.20 (Phase 0 PreToolUse
hook capturing the 13-tool mutation set when OFFLINE per
design:local-first-junto-v0-mvp
v0.3.0 §8), v0.0.19 (heartbeat, statusline OFFLINE, autopilot-pause,
journal at ~/.junto/journal/...), v0.0.18 (persistent send_message
outbox) carry forward. See CHANGELOG.md for full
history.
Functionally: subscribe-mode against inbox://<project>/<agent>,
get_session_id tool for host-CC session sharing, paginated inbox
drain, status file for statusLine indicator, [REQUIRES REVIEW] marker
for messages tagged require_human=true, [SYSTEM NOTICE] marker for
messages tagged is_system_notice=true, 60s post-subscribe safety net
so hosts that don't call get_session_id early still drain, 12s health
probe with OFFLINE indicator after 3 consecutive failures, persistent
local journal at ~/.junto/journal/<project>-<agent>.journal.jsonl for
offline mutations.
Auth-bound: the agent identifier passed to memory_start_session MUST equal the
URI's <agent> segment, otherwise subscribe raises and reads return
{"error":"permission denied"}.
Configuration
Per-launch env vars (all JUNTO_<name>; the CT_<name> deprecation
fallback was removed in v0.0.15):
JUNTO_PROJECT (required) — e.g. nimbus
JUNTO_AGENT (required) — e.g. server-team. Determines both the agent
identity for memory_start_session and the inbox URI.
JUNTO_ROLE (optional) — role_description for the agent directory
(set once, persists across sessions).
JUNTO_SHARED_MEMORY_URL (default http://localhost:8080/mcp) — point this at wherever your shared-memory MCP server is reachable.
JUNTO_API_KEY (only if shared-memory has MCP_AUTH_ENABLED=true)
JUNTO_DEBUG=1 — write per-event traces to ./junto-inbox-debug.log.
JUNTO_FYI_DIGEST (default on) — set to 0/false to disable FYI
batching (v0.0.27). When off, lane === "fyi" messages deliver immediately
like every other message and the statusline badge shows only [N open].
Install
Recommended: from the bundled marketplace
The repo ships .claude-plugin/marketplace.json so you can install with
two /plugin slash-commands inside Claude Code:
/plugin marketplace add tlemmons/junto-inbox
/plugin install junto-inbox@tlemmons-junto-inbox
Marketplace install gives you persistent trust (hasTrustDialogAccepted
in ~/.claude.json); no per-launch confirmation dialog.
Development: clone and run via stdio
Clone the repo and run claude from inside the checkout (the bundled
.mcp.json registers junto-inbox as a spawnable stdio server). This
path requires confirming the --dangerously-load-development-channels
dialog on every launch.
bash / zsh:
JUNTO_PROJECT=nimbus JUNTO_AGENT=server-team \
claude --dangerously-load-development-channels server:junto-inbox
PowerShell:
$env:JUNTO_PROJECT="nimbus"; $env:JUNTO_AGENT="server-team"; `
claude --dangerously-load-development-channels server:junto-inbox
cmd.exe:
set JUNTO_PROJECT=nimbus && set JUNTO_AGENT=server-team && claude --dangerously-load-development-channels server:junto-inbox
Launch (after install)
JUNTO_PROJECT=nimbus JUNTO_AGENT=server-team \
claude --channels plugin:junto-inbox@tlemmons-junto-inbox