Self-hosted Wallet-as-a-Service daemon for AI Agents
10K+
A local daemon that gives AI agents secure, policy-controlled access to crypto wallets across EVM and Solana chains.
Your keys, your machine, your rules.
docker run -d \
--name waiaas \
-p 127.0.0.1:3100:3100 \
-v waiaas-data:/data \
-e WAIAAS_AUTO_PROVISION=true \
waiaas/daemon
Then open http://localhost:3100/admin to access the Admin UI.
services:
daemon:
image: waiaas/daemon:latest
ports:
- "127.0.0.1:3100:3100"
volumes:
- waiaas-data:/data
environment:
- WAIAAS_AUTO_PROVISION=true
restart: unless-stopped
volumes:
waiaas-data:
docker compose up -d
All config values can be set via environment variables using the WAIAAS_{SECTION}_{KEY} pattern:
| Variable | Description | Default |
|---|---|---|
WAIAAS_AUTO_PROVISION | Auto-generate master password on first start | false |
WAIAAS_DAEMON_PORT | Listening port | 3100 |
WAIAAS_DAEMON_HOSTNAME | Bind address | 0.0.0.0 (in container) |
WAIAAS_DAEMON_LOG_LEVEL | Log level (trace/debug/info/warn/error) | info |
WAIAAS_RPC_SOLANA_MAINNET | Solana mainnet RPC URL | public endpoint |
WAIAAS_RPC_SOLANA_DEVNET | Solana devnet RPC URL | public endpoint |
WAIAAS_RPC_EVM_ETHEREUM_MAINNET | Ethereum mainnet RPC URL | — |
WAIAAS_SECURITY_MASTER_PASSWORD_HASH | Pre-set Argon2id master password hash | — |
WAIAAS_SECURITY_SESSION_TTL | Session lifetime in seconds | 86400 |
When WAIAAS_AUTO_PROVISION=true and no config.toml exists, the entrypoint automatically runs waiaas init --auto-provision. The generated master password is saved to /data/recovery.key.
Retrieve it after first start:
docker exec waiaas cat /data/recovery.key
Important: Change the password with
waiaas set-masterand delete the recovery key for production use.
For production deployments, use Docker secrets instead of environment variables:
services:
daemon:
image: waiaas/daemon:latest
secrets:
- waiaas_master_password
environment:
- WAIAAS_MASTER_PASSWORD_FILE=/run/secrets/waiaas_master_password
secrets:
waiaas_master_password:
file: ./secrets/master_password.txt
| Property | Value |
|---|---|
| Base image | node:22-slim |
| Runs as | non-root user waiaas (UID 1001) |
| Data volume | /data (database, keystore, config) |
| Exposed port | 3100 |
| Health check | curl -f http://localhost:3100/health every 30s |
| Watchtower | Auto-update supported (com.centurylinklabs.watchtower.enable=true) |
The /data volume contains all persistent state:
/data/
config.toml # Configuration
recovery.key # Auto-provision master password (delete after setup)
data/
waiaas.db # SQLite database
keystore/
*.enc # Encrypted private keys
tokens/ # MCP session token files
backups/ # Automatic backup archives
docker run example binds to 127.0.0.1. Never expose port 3100 to the public internet without a TLS reverse proxy.MIT
Content type
Image
Digest
sha256:6c3d86bee…
Size
217.4 MB
Last updated
6 months ago
docker pull waiaas/daemon