Configuration
Text

Configuration

Everything exe knows about this machine is in ~/.exe/config.json, written by exe init and editable from the desktop's Configuration window. Most of it is hot-reloaded; the fields marked * in the window need a restart.

keymeaning
listenAPI address. Defaults to your Tailscale IP when one is detected (e.g. 100.120.160.126:7777) so you can drive it from your phone, otherwise 127.0.0.1:7777. When bound to a specific non-loopback IP, the API also stays on 127.0.0.1:<port>
proxy_listenreverse-proxy address the tunnel forwards to (default :8090)
ssh_listenSSH gate address (default :2222): ssh -p 2222 exe@mac = lobby, ssh -p 2222 <vm>@mac = the VM. "off" disables
advertise_hostthis Mac as reachable from the cloudflared host — LAN IP (e.g. 192.168.1.131) or Tailscale IP (pre-filled with the Tailscale IP when detected)
api_tokenif set, every API call needs Authorization: Bearer <token>. Set it before binding beyond localhost
ssh_useruser created in each VM (default dev, passwordless sudo)
image_urlbase image; macOS accepts raw cloud images, while Linux accepts a raw ext4 filesystem or a GPT image containing an ext4 root partition
firecracker.binaryLinux Firecracker executable (default firecracker from PATH)
firecracker.kernel_urlLinux direct-boot kernel URL, selected for the host architecture
firecracker.network_helperroot-owned, capability-limited helper path
firecracker.network_cidrprivate IPv4 pool divided into one /30 per VM (default 172.30.0.0/16)
firecracker.outbound_interfaceLinux egress interface; empty auto-detects the default IPv4 route
qemu.binaryWindows QEMU executable (default qemu-system-x86_64 from PATH, then C:\Program Files\qemu)
qemu.firmware_dirfolder with edk2-x86_64-code.fd + edk2-i386-vars.fd; empty auto-detects QEMU's share dir
qemu.network_cidrWindows in-process guest subnet (default 192.168.127.0/24); the daemon is the gateway
ollama.base_urlhttp://127.0.0.1:11434 to go through your signed-in local Ollama (cloud models like glm-5.2:cloud need no key), or https://ollama.com + ollama.api_key
ollama.modeldefault agent model, e.g. glm-5.2:cloud
cloudflare.*see below
hub.urlthe exe-hub this node's agent watches, e.g. http://100.64.0.2:7788
hub.agent.keythe agent's own ed25519 key (PKCS8 PEM) — a separate identity from the node's peer key; empty keeps the agent off
hub.agent.answerhub profile ids whose replies the agent answers under its own posts; nobody else's text reaches the model
hub.agent.model, hub.agent.repos, hub.agent.max_per_day, hub.agent.max_per_threadthe Claude model that writes replies (run through the Claude Code CLI with every tool disabled), local checkouts whose commit subjects it may cite, and how much it may say

Secrets can also come from OLLAMA_API_KEY, CLOUDFLARE_API_TOKEN, EXE_API_TOKEN.

Cloudflare setup (one time)

  1. Use a remotely-managed tunnel (created in Zero Trust → Networks → Tunnels). exe expose edits its ingress rules via API; a locally-managed tunnel (config.yml on the cloudflared host) can't be updated this way — for those, add one catch-all ingress *.your.domain -> http://<advertise_host>:8090 by hand instead, and exe will still manage DNS + routing.
  2. API token with Zone → DNS → Edit and Account → Cloudflare Tunnel → Edit.
  3. Fill cloudflare.api_token, account_id, zone_id, tunnel_id, domain.

exe expose <vm> -port N [-sub name] then: creates/updates the CNAME <sub>.<domain><tunnel>.cfargotunnel.com, upserts a tunnel ingress rule <sub>.<domain>http://<advertise_host>:8090, and routes that hostname in the local proxy to http://<vm_ip>:N.

To redirect the zone apex or a full subdomain without a VM:

exe expose example.com -redirect https://exe.example.com
exe expose www.example.com -redirect https://exe.example.com

This publishes DNS and tunnel ingress the same way, but the daemon answers with 308 Permanent Redirect. Paths and query strings are preserved; the target must be an HTTP(S) origin without a path, query, fragment or credentials. The source must be the configured domain or a subdomain. Use exe routes to inspect redirects and exe unexpose <host> to remove one.

Contents