Configure a project for muster deployment. Generates muster.json and hook scripts in .muster/hooks/.
muster setup # interactive TUI wizard
muster setup --scan # non-interactive: auto-detect everything
muster setup --services api,redis # non-interactive: explicit services
muster setup --force --scan # overwrite existing configRunning muster setup without flags launches a full-screen TUI wizard (requires TTY).
Machine role
Local deploy, deploy to others (fleet control), receive deploys, or both.
Environment
Production (30s health, session creds), Staging (15s health, session creds), or Development (5s health, off creds).
Components
Web app, workers, database, cache, proxy, or other.
Scan project
Auto-detects stack, services, health probes, git info, and secrets.
Confirm scan results
Review and accept or adjust detected configuration.
Deploy order
Drag/reorder services (infra services are auto-sorted first).
Per-service config
Health checks, credentials, remote deploy, and git pull settings.
muster setup will detect the existing muster.json and ask whether to overwrite or merge. Use --force to skip the prompt.| Name | Description |
|---|---|
--path, -p | stringProject directory. Default: . |
--scan | booleanAuto-detect stack and services. |
--stack, -s | stringStack type: k8s, compose, docker, bare, dev. |
--services | stringComma-separated service names. |
--order | stringComma-separated deploy order. |
--health | stringPer-service health spec (repeatable). See Health Spec Format. |
--creds | stringPer-service credential mode (repeatable). See Credential Modes. |
--remote | stringPer-service remote config (repeatable). See Remote Spec. |
--git-pull | stringPer-service git pull config (repeatable). See Git Pull Spec. |
--namespace | stringKubernetes namespace. Default: default |
--name, -n | stringProject name. |
--force, -f | booleanOverwrite existing config. |
--health <service>=<type>[:<args>]
| Name | Description |
|---|---|
http | healthHTTP health check. Format: http:<endpoint>:<port> |
tcp | healthTCP port check. Format: tcp:<port> |
command | healthRun a command. Format: command:<cmd> |
none | healthDisabled — skip health checks for this service. |
muster setup --health api=http:/health:3000 --health redis=tcp:6379
muster setup --health worker=command:"pgrep -f worker" --health cache=none--creds <service>=<mode>
| Name | Description |
|---|---|
off | modeNo credentials required. |
save | modeStore credentials in the system keychain. |
session | modeKeep credentials in memory for the session only. |
always | modePrompt for credentials every time. |
muster setup --creds api=session --creds db=save--remote <service>=<user>@<host>[:<port>][:<path>]
muster setup --remote [email protected]:22:/opt/api
muster setup --remote [email protected]--git-pull <service>[=<remote>:<branch>] — defaults to origin:main.
muster setup --git-pull api
muster setup --git-pull api=upstream:releaseWhen --scan is used (or during the interactive wizard), muster inspects your project files to determine the stack type.
| Name | Description |
|---|---|
k8s | stackFound k8s/, deploy/, or *-deployment.yaml files. |
compose | stackFound docker-compose.yml or compose.yaml. |
docker | stackFound a Dockerfile. |
bare | stackFound systemd/ or .service files. |
dev | stackDevelopment environment (no deployment files found). |
When the detected stack is k8s, muster queries the live cluster via kubectl get deployments to auto-detect deployment names, container ports, and liveness/readiness probes. This step is silently skipped if kubectl is unavailable or the cluster is unreachable.
kubeconfig is pointed at the correct cluster and namespace before running setup. Use --namespace <ns> to target a specific namespace.Known infrastructure services are automatically identified and sorted before application services in the deploy order. They receive pull-only hook templates by default.
Recognized infra services: redis, postgres, mysql, mongo, rabbitmq, kafka, elasticsearch, memcached, nginx, caddy, traefik, haproxy.
After setup completes, the following files and directories are created in your project:
.muster/logs/ and .muster/pids/ are added to your .gitignore. Commit both muster.json and .muster/hooks/ to version control so your team shares the same deployment configuration and hook scripts.