This document is designed for AI agents to execute. Follow these steps exactly to deploy a local Multica instance and connect to it.
- Docker and Docker Compose installed
- Homebrew installed (for CLI)
- At least one AI agent CLI on PATH:
claudeorcodex
# Install CLI + provision self-host server
curl -fsSL https://raw.githubusercontent.com/hduhelp/multica/main/scripts/install.sh | bash -s -- --with-server
# Configure CLI for localhost, authenticate, and start daemon
multica setup self-hostWait for the server output ✓ Multica server is running and CLI is ready! before running multica setup self-host.
Expected result:
- Frontend at http://localhost:3000
- Backend at http://localhost:8080
multicaCLI installed and configured for localhost
git clone https://github.com/hduhelp/multica.git
cd multica
make selfhost
brew install hduhelp/tap/multica
multica setup self-hostThe multica setup self-host command will:
- Configure CLI to connect to localhost:8080 / localhost:3000
- Open a browser for login — use the emailed code, or the generated code printed in backend logs when Resend is unset
- Discover workspaces automatically
- Start the daemon in the background
multica daemon statusShould show running with detected agents.
# Stop the daemon
multica daemon stop
# Stop all Docker services
cd multica
make selfhost-stopIf the default ports (8080/3000) are in use:
- Edit
.envand changePORTandFRONTEND_PORT. These are host ports; the containers keep listening on 8080/3000 internally, so no rebuild is needed. - Run
make selfhost - Run
multica setup self-host --port <PORT> --frontend-port <FRONTEND_PORT>
Edit the file rather than relying on environment variables: make includes
.env, so a value in the file outranks the same variable from your shell
(PORT=9100 make selfhost is ignored when .env sets PORT). A command-line
assignment does take effect (make selfhost PORT=9100), and Docker Compose
invoked directly is the reverse again — there the environment outranks .env.
BACKEND_PORT is an optional alias that overrides PORT for the backend;
API_PORT and SERVER_PORT follow in that order. Whichever route you use, the
startup output is read back from Docker Compose, so the address it prints is the
one the stack is actually published on.
- Backend not ready:
docker compose -f docker-compose.selfhost.yml logs backend - Frontend not ready:
docker compose -f docker-compose.selfhost.yml logs frontend - Daemon issues:
multica daemon logs - Health checks:
curl http://localhost:8080/healthfor liveness,curl http://localhost:8080/readyzfor dependency-aware readiness