Self-Hosting
The healing stack is four long-running pieces. All of them ship in the autowright-v3 repo.
The stack
| Component | Port | What it does |
|---|---|---|
| service | 4400 | Coordination API — script registry, error intake, dedup, fix queue (SQLite state) |
| fixer | — | Polls for jobs, runs the Claude agent, opens PRs, notifies Slack |
| minio | 9000 (API), 9001 (console) | S3-compatible artifact storage for evidence bundles |
| dashboard | 4300 | Next.js UI — run/fix stats, per-fix cost and detail pages |
Docker Compose
git clone https://github.com/nawaaz-korvol/autowright-v3cd autowright-v3cp .env.example .env # add ANTHROPIC_API_KEY, GITHUB_TOKEN, SLACK_WEBHOOK_URLdocker compose up service fixer minio minio-initminio-init is a one-shot container that creates the artifact bucket. The
service persists its SQLite database to a volume, so fix history survives
restarts.
Run the dashboard alongside:
npm installnpm run dev -w @autowright/dashboard # http://localhost:4300Tilt (local development)
For live-reload development of the stack itself:
tilt up # Tilt UI at http://localhost:10350Tilt groups resources by label: infra (minio, minio-init), backend (service, fixer), and demo (target-site).
Try it end-to-end with the demo
The repo includes a demo target site with a built-in failure switch:
docker compose up target-site # demo site on :3000npm run scraper -w @autowright/demo # scrape it — succeeds
CHAOS=true docker compose up target-sitenpm run scraper -w @autowright/demo # selector breaks → fix pipeline runsWith CHAOS=true the site renames #login-btn to #signin-button, giving
you a deterministic SELECTOR_NOT_FOUND and, a minute or two later, a real
pull request that fixes the scraper.
Production notes
- Storage: point
STORAGE_ENDPOINTat real S3 (or any compatible store) instead of MinIO; the browser package uploads bundles directly, so storage must be reachable from wherever scripts run. - Ports: only the service (
4400) needs to be reachable from your scripts. The fixer makes outbound calls only (service, storage, GitHub, Anthropic, Slack). - Scaling fixes: raise
MAX_CONCURRENT_FIXESon the fixer when a busy fleet of scripts shares one stack.