supervise: provision agent-side MCP config so Claude sees the sidecar #23

Merged
didericis merged 1 commits from supervise-mcp-provision-followup into main 2026-05-25 06:25:24 -04:00
Owner

Summary

The supervise sidecar (PRD 0013) has been serving MCP at http://supervise:9100/ since it landed, but the in-bottle Claude Code had no .mcp.json or settings pointing there — so the agent couldn't actually call cred-proxy-block / pipelock-block / capability-block as tools. To exercise the flow you had to curl the sidecar from a sibling container.

This closes that last mile by adding a provision_supervise step that writes ~/.claude/settings.json into the agent container with an mcpServers.supervise HTTP entry pointing at the per-bottle sidecar. No-op when bottle.supervise is False.

After this, the full end-to-end works:

./cli.py start <agent> --cwd       # agent's claude sees supervise
# agent calls cred-proxy-block via MCP
./cli.py dashboard                  # approve
./cli.py resume <identity>          # restart with new capabilities
## Summary The supervise sidecar (PRD 0013) has been serving MCP at `http://supervise:9100/` since it landed, but the in-bottle Claude Code had no `.mcp.json` or settings pointing there — so the agent couldn't actually call `cred-proxy-block` / `pipelock-block` / `capability-block` as tools. To exercise the flow you had to curl the sidecar from a sibling container. This closes that last mile by adding a `provision_supervise` step that writes `~/.claude/settings.json` into the agent container with an `mcpServers.supervise` HTTP entry pointing at the per-bottle sidecar. No-op when `bottle.supervise` is False. After this, the full end-to-end works: ./cli.py start <agent> --cwd # agent's claude sees supervise # agent calls cred-proxy-block via MCP ./cli.py dashboard # approve ./cli.py resume <identity> # restart with new capabilities
didericis added 1 commit 2026-05-25 06:22:37 -04:00
feat(supervise): provision agent-side MCP config so Claude sees the sidecar
test / unit (pull_request) Successful in 17s
test / integration (pull_request) Successful in 1m30s
6e46ca4478
The supervise sidecar (PRD 0013) has been serving MCP at
http://supervise:9100/ since it landed, but the in-bottle Claude
Code had no `.mcp.json` or settings pointing there — so the agent
couldn't actually call cred-proxy-block / pipelock-block /
capability-block as tools. To exercise the flow you had to curl
the sidecar from a sibling container.

This closes that last mile.

- claude_bottle/backend/docker/provision/supervise.py (new):
  provision_supervise(plan, target) writes
  ~/.claude/settings.json into the running agent container with an
  mcpServers.supervise entry of type http pointing at the
  per-bottle sidecar. No-op when bottle.supervise is False.
- BottleBackend.provision orchestrator gains provision_supervise as
  the last step (after CA, prompt, skills, git, cred-proxy). Default
  impl is a no-op so non-Docker backends aren't forced to implement it.
- DockerBottleBackend wires it through to the new module.
- Test covers the rendered settings shape so a future regression in
  the MCP entry format would surface in unit-level CI.

To test the full flow end-to-end now:
  ./cli.py start <agent> --cwd       # agent's claude sees supervise
  # agent calls cred-proxy-block via MCP
  ./cli.py dashboard                  # approve
  ./cli.py resume <identity>          # restart with new capabilities

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
didericis merged commit 37ab6659a9 into main 2026-05-25 06:25:24 -04:00
Sign in to join this conversation.