curl -LsSf https://quixi.ai/hexis.sh | shOne command, works on a machine with nothing but curl and a shell. The script:
- Installs uv if it isn't already present (uv downloads its own Python — no Python install needed)
- Runs
uv tool install hexisto put the CLI in an isolated environment - Tells you if PATH needs a new terminal, and whether Docker is ready
It is safe to re-run: an existing install is upgraded to the latest release.
uv tool install hexisThis installs the hexis CLI and all dependencies into an isolated environment that uv creates and owns — nothing to activate, and no conflicts with your system Python. If Python 3.10+ isn't on the machine, uv downloads it automatically.
Don't have uv? It's a one-liner: curl -LsSf https://astral.sh/uv/install.sh | sh (or brew install uv).
If hexis isn't found afterward, uv's tool directory isn't on your PATH yet — run uv tool update-shell and open a new terminal.
To update later: hexis upgrade — it updates the CLI package itself (via uv, pipx, or pip, whichever installed it), then refreshes the Docker images and migrates the database. To move just the CLI package by hand: uv tool install --force hexis.
The CLI manages Docker containers, the database, and agent configuration.
Use the CLI so the Python tool and Docker resources are handled together:
hexis uninstallThe default is reversible: Hexis stops and removes its containers, network, and
images, then removes the CLI using the tool that installed it (uv, pipx, or
pip). The brain's Docker volumes and ~/.hexis configuration, credentials,
skills, artifacts, and backups are preserved. Reinstall Hexis and run
hexis up to use that data again.
For a permanent clean removal:
hexis backup --output "$HOME/hexis-backups" # optional; keep it outside ~/.hexis
hexis uninstall --purge--purge requires an explicit confirmation and permanently deletes the brain
database volumes plus the Hexis data directory, including its default backups
directory. It also removes the standalone embeddinggemma binary and model
cache when durable ownership records prove Hexis created them. A legacy,
changed, or independently started companion is surfaced and retained rather
than guessed at and deleted. If Docker is unavailable and you intentionally
want to remove only the CLI while leaving all Docker resources untouched, use
hexis uninstall --cli-only.
Already a pipx user? It gives you the same isolated-tool experience:
pipx install hexisUpdate later with pipx upgrade hexis.
Plain pip install hexis only works inside an activated virtualenv — on modern macOS (Homebrew Python) and Debian/Ubuntu, running it against the system Python fails with error: externally-managed-environment. If you manage your own environments:
python3 -m venv ~/.venvs/hexis
source ~/.venvs/hexis/bin/activate
pip install hexisNote that hexis is then only on PATH while that virtualenv is active.
For development or contributing:
The repository's mise.toml provides Python, uv, Bun, the Docker CLI, and Docker Compose. Install Mise, then run:
git clone https://github.com/QuixiAI/Hexis.git && cd Hexis
mise install
mise run setup
mise run docker:checkmise run setup links the Mise-managed Compose binary into Docker's user plugin directory only when docker compose is otherwise unavailable; it never replaces an existing plugin. docker:check then verifies Compose through the standard docker compose command and uses whichever Docker daemon is active.
On macOS 13 or newer without Docker Desktop, install and start the optional VZ/VirtioFS Colima runtime with mise run docker:colima, then rerun the check. On older macOS releases, use Docker Desktop or configure a compatible Docker daemon manually.
git clone https://github.com/QuixiAI/Hexis.git && cd Hexis
uv sync --locked --inexact
source .venv/bin/activate
cp .env.example .env # edit with your settings; never commit .envNo uv? A plain virtualenv works too: python3 -m venv .venv && source .venv/bin/activate && pip install -e .
If build isolation fails in a restricted environment:
pip install -e . --no-build-isolationCopy the tracked template, then edit only the settings you need. The resulting
.env is ignored by Git:
cp .env.example .envIf port 43815 is already in use, set POSTGRES_PORT to any free port.
For a custom OpenAI-compatible server, set its base URL and key in .env:
OPENAI_BASE_URL=https://your-inference-server.example/v1
OPENAI_API_KEY=replace-with-your-keyThen initialize with the model ID exposed by that server. --api-key-env tells
Hexis which variable to read without putting the secret in shell history:
hexis init --provider openai_compatible --model your-model-id --character hexis \
--api-key-env OPENAI_API_KEYIf the server does not authenticate, use a non-secret placeholder such as
OPENAI_API_KEY=not-needed; the OpenAI client still requires a value. Hexis
stores the endpoint and the environment variable's name in PostgreSQL, not
the key itself.
See Environment Variables for the complete reference.
hexis up # starts the brain, workers, API, dashboard, and delivery relay
hexis doctor # verify everything is healthyThe CLI auto-detects whether you're running from source or a packaged install and uses the appropriate Docker Compose file.
It starts cached or published images by default; a source checkout only builds
images when you explicitly run hexis up --build or enter watch mode with
hexis dev.
The dashboard stays available on loopback at http://127.0.0.1:3477. To install
it on a phone, keep that loopback bind and run hexis tunnel start; the private
Tailscale HTTPS runbook covers device
approval and verification. Plain LAN HTTP cannot provide the service worker, push,
or microphone.
hexis status # should show database connected, agent not yet configured
hexis doctor # checks Docker, DB, and embedding service health- First Agent -- configure your agent's identity and personality