This directory hosts the release demo sandbox for Hermes Collab Engine v5.0. It runs a real local dashboard server with mock API data, an isolated SQLite demo database, and an isolated workspace; it does not bundle runtime data, secrets, or real Hermes/Claude configuration.
# From an installed checkout
curl -fsSL https://raw.githubusercontent.com/lpc0387/hermes-collab-engine/main/scripts/install.sh | bash
cd ~/hermes-collab-engine
./scripts/start_sandbox.sh
# Or run the sandbox server directly
python3 sandbox/server.py --host 127.0.0.1 --port 8876Open http://127.0.0.1:8876/.
To try an online sandbox environment, contact the author on WeChat lg19961117 to request access.
| Area | Sandbox behavior |
|---|---|
| Dashboard | Serves sandbox/index.html, copied from the production UI with sandbox labels and an isolation banner. |
| API | sandbox/server.py serves lightweight mock payloads and can read a sanitized SQLite snapshot in read-only mode. |
| Runs | Default POST /api/runs creates in-memory demo records only; --real enables limited real worker execution in the sandbox boundary. |
| Database | Uses demo SQLite such as data/demo_sandbox.sqlite3; real mode writes data/sandbox_real.sqlite3; never point it at production data. |
| Workspace | Real mode defaults to ignored data/sandbox_workspace/, separate from real project workspaces. |
| TTL cleanup | scripts/start_sandbox.sh defaults to 2 hours, then stops the sandbox process to avoid long-running demos. |
| Templates | Hermes/Claude templates are empty skeletons or .example files; no tokens, sessions, logs, memories, skills, or auth data are shipped. |
./scripts/start_sandbox.sh # default: 2 hours on port 8876
./scripts/start_sandbox.sh 4 # 4 hours
./scripts/start_sandbox.sh 0.5 # 30 minutes
./scripts/start_sandbox.sh --hours 8 # 8 hours
./scripts/start_sandbox.sh --port 8877 # custom port
./scripts/start_sandbox.sh --no-reseed # reuse existing demo DB
./scripts/start_sandbox.sh --real # limited real workers in isolated DB/workspace
./scripts/start_sandbox.sh -i # ask duration interactivelypython3 scripts/seed_demo_data.py --db data/demo_sandbox.sqlite3 --reset
HERMES_SANDBOX_DB=data/demo_sandbox.sqlite3 \
HERMES_SANDBOX_BASE_PATH=/sandbox/hermes \
HERMES_SANDBOX_PUBLIC_URL=https://demo.example.com/sandbox/hermes \
HERMES_SANDBOX_MOCK_CONFIG=config/sandbox-mocks.json \
python3 sandbox/server.py --host 127.0.0.1 --port 8876Share the configured public URL: https://demo.example.com/sandbox/hermes/.
Expected reverse-proxy routing:
location /sandbox/hermes/ {
proxy_pass http://127.0.0.1:8876/sandbox/hermes/;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
}Environment variables:
| Variable | Purpose |
|---|---|
HERMES_SANDBOX_HOST |
Bind host, default 127.0.0.1. Keep localhost for reverse-proxy deployments. |
HERMES_SANDBOX_PORT |
Bind port, default 8876. |
HERMES_SANDBOX_BASE_PATH |
Domain sub-path, for example /sandbox/hermes. |
HERMES_SANDBOX_PUBLIC_URL |
Shareable URL shown by the server, for example https://demo.example.com/sandbox/hermes. |
HERMES_SANDBOX_DB |
Optional sanitized SQLite file. The sandbox opens it read-only and falls back to in-memory data if omitted. |
HERMES_SANDBOX_MOCK_CONFIG |
Mock service config, default config/sandbox-mocks.json. |
Isolation checks:
- Use only the database generated by
scripts/seed_demo_data.py; do not pointHERMES_SANDBOX_DBat production data. - Mock service addresses come from
config/sandbox-mocks.jsonand are localhost-only. - The sandbox API exposes
/api/sandbox/configso operators can confirm base path, read-only database source, mock endpoints, and public URL. - Keep real
~/.hermesand~/.claudesecrets outside this repository; use the integration script templates only after manual review.