Self-hosting
Murphy is open source and the core is meant to actually work on its own. You can run the whole thing on your own box: the widget, the agent, the inbox, training, and the API.
What you need
Any VPS with 2GB of RAM and Docker. Point a DNS A record at it, something like
support.yourdomain.com.
git clone https://github.com/bluematter/echofox.git && cd echofox
cp .env.example .env
Minimum config in .env:
SECRET=<long random string> # openssl rand -hex 32
NEXTAUTH_URL=https://support.yourdomain.com
FAL_KEY=<your fal key> # chat model
OPENAI_API_KEY=<your openai key> # embeddings
POSTGRES_PASSWORD=<random>
Boot it
ECHOFOX_DOMAIN=support.yourdomain.com \
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
Caddy handles TLS with an automatic Let's Encrypt certificate and proxies to the app. Migrations run on boot. Open the domain, sign up, and the first account is yours.
Bring your own model
LLM_BASE_URL, LLM_API_KEY, and LLM_MODEL point at any OpenAI-compatible
endpoint, so you are not tied to one provider. Embeddings use OpenAI by default.
If you are self-hosting specifically to keep customer conversations off other companies' servers, point these at something you run and the transcripts stay on your box.
What you give up
The hosted version runs the scheduled work for you: nightly triage, QA scoring, the monitors queue, the morning report. Self-hosting means running those crons yourself. Everything they do is in the repo, nothing is held back behind a license check, but you are the one keeping them alive.
Managed Postgres, backups, and uptime are also yours. That is the trade.
Naming
The repository, the Docker environment variables, and the widget's JavaScript
global still say EchoFox in places. That was the product's original name. The
globals are kept deliberately so existing installs do not break; window.Murphy
mirrors window.EchoFox. Where you see the old name in config, it is the same
product.