Eve
Install and operate a self-hosted server stack around a Synap pod with the eve command-line tool.
Eve is an operator command-line tool (eve) that installs and manages a self-hosted server stack: a Synap pod, plus
optional services next to it such as a local model runner, agents, feeds and a chat interface, all behind one Traefik
reverse proxy. It also runs a web dashboard for the stack. Eve is open source, in the
hestia-cli repository.
Eve does not replace the pod's own tooling: it installs and updates the pod through the same synap server CLI
described in Run. If you only want a pod, the self-host quickstart is
simpler.
Install Eve
On a fresh Debian or Ubuntu server, as root:
apt-get update -y && apt-get install -y ca-certificates curl git
curl -fsSL https://raw.githubusercontent.com/Synap-core/hestia-cli/main/bootstrap.sh | bash -s -- --no-setupbootstrap.sh installs Docker, Node.js 20 and pnpm 10 when they are missing, clones Eve into /opt/eve (--dir
chooses another directory), builds it and links the eve command into /usr/local/bin. Without --no-setup it then
starts the older eve setup wizard, which needs an interactive terminal.
Install the stack
eve install # interactive: pick a preset or components
eve install --components traefik,synap --domain example.com --email you@example.com
eve install --dry-run --components traefik,synap # print the plan onlyTraefik and the Eve dashboard are always installed. A few of the components you can add (eve add <id>) or remove
(eve remove <id>) later:
| ID | What it is |
|---|---|
synap | The Synap pod |
ollama | Local model runner |
hermes, openclaw | Agents that work through the pod (Hermes is the one suggested for new installs) |
rsshub | Turns websites into feeds |
openwebui | A chat interface |
eve add without an argument lists what can be added. The full list is in the
repository.
Everyday commands
| Task | Command |
|---|---|
| What is installed and running | eve status (--watch, --json) |
| Diagnose problems | eve doctor |
| Update every component, or some | eve update, eve update synap |
| Update the pod to a release or channel | eve update synap --release stable (or fast, or a release ID) |
| Restart components | eve restart, eve restart synap |
| Logs of the Eve stack | eve logs [service] -f, from the Compose directory (or with --compose-file) |
| Open the dashboard | eve ui (port 7979 by default) |
| Serve the stack on your domain | eve domain set example.com --ssl --email you@example.com, then eve domain show |
| Agent keys for the pod | eve auth status, eve auth provision, eve auth renew --agent <slug> |
eve update synap runs the pod's own synap update, so the same backup, canary and automatic rollback apply. See
Upgrades.
Where things live
| Path | What it is |
|---|---|
/opt/eve | Eve itself (the default of bootstrap.sh) |
.eve/ in Eve's directory | Eve's secrets and setup choices |
~/.local/share/eve/state.json | Which components are installed (EVE_STATE_HOME moves it) |
/opt/synap-backend | The pod, when Eve installed it: a checkout of the backend repository (SYNAP_REPO_ROOT moves it) |
/opt/synap-backend/deploy | The pod's deploy directory |
Run synap commands for an Eve-installed pod from /opt/synap-backend/deploy (or pass SYNAP_DEPLOY_DIR to it on
the sudo command: sudo SYNAP_DEPLOY_DIR=/opt/synap-backend/deploy synap …), not
from /opt/synap/deploy as on a pod installed with install.sh. Run docker compose for the pod from that directory
too; from Eve's directory you reach a different Compose project.
What changes on an Eve-managed pod
- The pod's host name is
pod.<domain>. For the domain you give Eve, it installs the pod with--domain pod.<domain>, so the admin console ispod-admin.<domain>. - The edge is Traefik, not Caddy. Eve runs
synapwithSYNAP_SKIP_EDGE=1, and the first install or update pinsSYNAP_EDGE=traefikindeploy/.env, the same settingsynap install --edge traefikwrites. Caddy cannot bind port 80 next to Traefik, so a pod with Eve's override and no pinned edge is refused bysynap updateuntil you runsynap config set SYNAP_EDGE=traefik. - A compose override marks it. Eve writes a
docker-compose.override.ymlcarrying aneve-managedmarker in the deploy directory. It attaches the pod's services to Eve's Docker network so Traefik can reach them.synap doctorreports it. - Each agent has its own key. Eve gives every agent it manages its own Hub API key and pod user, minted through
the pod's
/api/hub/setup/agent.eve auth statuslists them. - AI providers. Changing the AI providers a pod uses needs the
providers.writekey scope, which is intended for an operator tool such as Eve and is not part of an ordinary agent key.
For everything else, the Run section applies to an Eve-managed pod as it does to any other.
