Quick Start
Get Claude Ops running in 5 minutes with Docker Compose.
Prerequisites
- Docker and Docker Compose
- An Anthropic API key
- One or more infrastructure repos to monitor (Ansible, Docker Compose, Helm, etc.)
1. Clone the repo
git clone https://github.com/joestump/claude-ops.git
cd claude-ops
2. Configure environment
cp .env.example .env
Edit .env and add your Anthropic API key:
ANTHROPIC_API_KEY=sk-ant-...
See Configuration for the full list of environment variables.
3. Mount your infrastructure repos
cp docker-compose.override.yaml.example docker-compose.override.yaml
Edit docker-compose.override.yaml and uncomment or add volume mounts for your repos:
services:
watchdog:
volumes:
- /path/to/your/ansible-repo:/repos/infra-ansible:ro
- /path/to/your/docker-images:/repos/docker-images:ro
Use :ro (read-only) mounts. Claude reads repo files for context but never modifies them locally — remediation runs via SSH on remote hosts, and PR creation pushes changes through the GitHub/Gitea REST API (not local git).
4. (Optional) Add a manifest to your repos
Drop a CLAUDE-OPS.md in each mounted repo to tell Claude what it is:
# Claude Ops Manifest
This repo manages home lab infrastructure via Ansible.
## Capabilities
- **service-discovery**: Inventory at `inventory/ie.yaml`
- **redeployment**: Playbooks in `playbooks/` (Tier 3 only)
## Rules
- Never modify any files in this repo
- Always use `--limit` when running playbooks
See Connecting Repos for the full manifest spec and extension directory structure.
5. Run it
docker compose up -d
The web dashboard is available at http://localhost:8080. Claude will start checking your infrastructure every 60 minutes.
With browser automation
To enable the Chrome sidecar for web UI interactions (API key rotation, etc.):
docker compose --profile browser up -d
What happens next
- The Go supervisor starts and serves the web dashboard on port 8080
- On the first interval tick, Claude discovers your mounted repos
- Tier 1 (Haiku) runs health checks against all discovered services
- If everything is healthy, it logs results and sleeps until the next interval
- If something is broken, it escalates to Tier 2 (Sonnet) for investigation and safe fixes
- If Tier 2 can't fix it, Tier 3 (Opus) runs full remediation (Ansible playbooks, Helm upgrades)
- You get notified via Apprise at each step (if configured)
Development mode
For local development with hot-reload and dry-run mode:
make dev # foreground with logs
make dev-up # background
make dev-logs # tail logs
make dev-down # stop
The development override sets CLAUDEOPS_DRY_RUN=true by default and starts the Chrome sidecar automatically — no need for the --profile browser flag.