Set up and manage Docker-based ZeroClaw agent instances under ~/zc-agents/. Use this skill when the user wants to: create a new ZeroClaw Docker agent, spin up another agent instance, bind a directory to an agent, mount a project folder into an agent's workspace, set up a multi-agent ZeroClaw environment, or says things like 'add a new agent', 'create agent X', 'set up another zeroclaw instance', 'docker agent setup', 'bind this folder to my agent', 'mount project to neo'.
You help users create and manage Docker-based ZeroClaw agent instances under ~/zc-agents/.
Before starting any workflow, resolve these repos in order — use the first one available:
~/repos/zeroclaw — check with ls ~/repos/zeroclaw 2>/dev/nullhttps://github.com/taeho-zeroclaw/zeroclaw — use gh api repos/taeho-zeroclaw/zeroclaw/contents/<path> to read fileshttps://github.com/zeroclaw-labs/zeroclaw — use gh api repos/zeroclaw-labs/zeroclaw/contents/<path> if taeho-zeroclaw group is inaccessible~/zc-agents — canonical location, tracks https://github.com/taeho-zeroclaw/zc-agentshttps://github.com/taeho-zeroclaw/zc-agentsgh api repos/taeho-zeroclaw/zc-agents/contents/<path>neo/Dockerfileneo/docker-compose.ymlThe skill must never fail due to a missing local repo. Always fall back to the remote API for reference files (Dockerfiles, config examples, scripts).
When this skill is invoked, first determine which workflow to run. If not obvious from the user's input, present this menu:
Which workflow would you like to run?
1. Create Agent — Set up a new ZeroClaw Docker agent instance
2. Bind Directory — Mount a host directory into an existing agent's workspace
3. Manage Agents — Start, stop, health-check, or list all agents using global script
Ask the user to pick (1/2/3) and proceed to the corresponding section. If the user's intent is already clear from their message (e.g., "create agent foo" → workflow 1, "bind ~/projects/myapp to neo" → workflow 2), skip the menu and proceed directly.
Each agent lives in its own directory:
~/zc-agents/
├── mqtt-broker/
│ ├── docker-compose.yml # MQTT broker (eclipse-mosquitto:2, container: zc-mqtt-broker)
│ ├── mosquitto.conf # Broker config (allow_anonymous, logging)
│ └── logs/ # Broker logs (mosquitto.log — human-readable)
├── shared/
│ └── sidecar_daemon.py # Shared sidecar (single source of truth for all agents)
├── scripts/
│ └── zc-agents.sh # Global control script
└── <agent-name>/
├── Dockerfile
├── docker-compose.yml
├── .env
├── scripts/
│ ├── entrypoint.sh # Starts sidecar in background, then exec zeroclaw
│ └── sync-skills.sh
├── .zeroclaw/
│ ├── config.toml # Includes [sidecar] section for MQTT role
│ └── .secret_key
└── workspace/
All agents share a single MQTT broker (zc-mqtt-broker) for session sync. Set it up once before creating agents.
mkdir -p ~/zc-agents/mqtt-broker/logs
mqtt-broker/mosquitto.conf:
allow_anonymous true
listener 1883
log_dest file /logs/mosquitto.log
log_type all
log_timestamp true
log_timestamp_format %Y-%m-%dT%H:%M:%S
mqtt-broker/docker-compose.yml: