Prerequisites
Required:- Python 3.11+
uvpackage manager — installation guide- Node.js 18+ (for the Web UI)
- Git
- Docker daemon — for the Docker sandbox provider
- E2B API key — e2b.dev
- Daytona API key — daytona.io or self-hosted instance
- AgentBay API key and region access
Installation
Configuration
Runtime configuration
Mycel service configuration comes from process environment variables and explicit server configuration. Agent configs, Skills, threads, Library resources, and user profiles are product state and are stored through the configured backend storage.Quick setup
Export variables in the shell or pointENV_FILE at an explicit env file:
Starting services
Local communication backend
The previousdeploy/local-communication/compose.yml path has been removed because it booted from a hand-written schema fork. Treat it as historical proof only, not as a valid self-hosting contract.
deploy/cli-minimal/compose.yml is the current CLI-minimal local communication
profile. It reuses the formal Mycel app schema/init path, runs PostgreSQL plus
PostgREST, exposes /rest/v1/* through a thin nginx gateway, and starts the
backend with MYCEL_RUNTIME_PROFILE=communication.
It is not the full Mycel platform. Full deployment is still represented by the
root docker-compose.yml plus operator-managed Supabase/Coolify configuration,
not by a deploy/full public self-hosting contract.
Start the local-only profile:
cel at it:
Full development stack
Sandbox provider setup
See Sandbox for full provider configuration. Quick reference:Docker
SetLEON_SANDBOXES_DIR to your sandbox provider config directory, then create docker.json in that directory:
E2B
Daytona (SaaS)
Daytona (self-hosted)
- Runner container image must have bash at
/usr/bin/bash - Workspace image must have bash at
/usr/bin/bash - Runner must be on both the compose network and the default Docker bridge network
/etc/hosts on the runner:
AgentBay
Verification
Open the Web UI athttp://localhost:5173, register an account, and confirm the agent responds.
Production notes
Database
Mycel runtime storage is explicit. Full production deployments should provide their own managed Supabase-compatible storage and secrets. Back up the configured database with the tools for that database.Security
- Store API keys in the deployment secret store or an explicit env file, never in code or version control
- Use
${VAR}substitution in JSON config files instead of hardcoding keys - Restrict env file permissions when using one:
chmod 600 /path/to/mycel.env - The
block_dangerous_commandssetting (default:true) preventsrm -rfand similar shell commands
Proxy environments
If your environment uses an HTTP proxy:Troubleshooting
"Could not import module" on backend startup
"Could not import module" on backend startup
- Confirm you’re in the correct directory
- Confirm the virtual environment is active:
source .venv/bin/activate - Try using the full path:
.venv/bin/python -m backend.web.main
"SOCKS proxy error" from LLM client
"SOCKS proxy error" from LLM client
Your shell has
all_proxy=socks5://... set. Unset before starting:Docker provider hangs
Docker provider hangs
Proxy environment variables inherited by the Docker CLI. Mycel strips these automatically, but if issues persist, check the
docker_host config field in $LEON_SANDBOXES_DIR/docker.json.Daytona PTY bootstrap fails
Daytona PTY bootstrap fails
Check each of these in order:
- Workspace image has bash at
/usr/bin/bash— test withdocker run <image> /usr/bin/bash -c "echo ok" - Runner has bash at
/usr/bin/bash - Runner is on the Docker bridge network (see Docker Compose config above)
- Daytona Proxy (port 4000) is accessible from the runner — test with
curl http://proxy.localhost:4000
fork/exec /usr/bin/bash: no such file or directory→ workspace image missing bashFailed to create sandbox within 60s→ network isolation, check runner networks- File operations fail silently → Daytona Proxy unreachable