Self-hosted sandboxed execution environments — run isolated “spaces” on your own machines (Docker + Tailscale).
/workspace/workspace/.bash_history)flowchart LR
%% Clients
AGENT[Clawdbot Agent] -->|tool call: clawdspace| PLUGIN[Clawdspace Extension<br/>Clawdbot]
CLI[clawdspace CLI] -->|REST| API
UI[Web Dashboard] -->|REST| API
UI -->|WebSocket terminal| API
%% Clawdbot side
PLUGIN -->|REST - API key| API
%% Clawdspace node
API[Clawdspace API] -->|Docker socket| DOCKER[Docker Engine]
DOCKER -->|containers| SPACE[Spaces]
DOCKER -->|named volumes| VOL[Per-space volumes]
API -->|tailscale status| TS[Tailscale]
API -->|cached probe| NODES[Other nodes]
API --> AUDIT[Audit JSONL]
SPACE -->|bash history| VOL
API -->|ingest .bash_history| AUDIT
For a more detailed guide, see docs/SETUP.md.
git clone https://github.com/adam91holt/clawdspace.git
cd clawdspace
For now, Clawdspace uses a single shared secret string.
python3 - <<'PY'
import secrets
print('clawdspace_sk_live_' + secrets.token_hex(16))
PY
docker build -t clawdspace:latest -f docker/Dockerfile .
npm ci
npm run build
cd packages/api
PORT=7777 API_KEY="<your_api_key>" node dist/index.js
Dashboard:
http://localhost:7777Clawdspace discovers nodes using tailscale status --json and probes each peer on port 7777.
/api/nodes is cached server-side (fast dashboard loads)API_KEY) and ensure it’s reachable over TailscaleOverride discovery:
CLAWDSPACE_NODES=name=http://host:7777,other=http://host2:7777
The server supports either:
?key=YOUR_KEY (recommended for browsers)Authorization: Bearer YOUR_KEY (best for curl/CLI)Dev only:
CLAWDSPACE_AUTH_DISABLED=trueThe CLI runs on your workstation and calls the API.
clawdspace system
clawdspace list
clawdspace create dev
clawdspace exec dev "python3 --version"
clawdspace stop dev
clawdspace start dev
clawdspace destroy dev
clawdspace dashboard
GET /api/healthGET /api/systemGET /api/system/capabilitiesGET /api/spacesPOST /api/spaces (supports template, optional repo clone + envfile write)POST /api/spaces/:name/execGET /api/spaces/:name/statsGET /api/spaces/:name/observabilityGET /api/spaces/:name/files?path=/GET/PUT /api/spaces/:name/file?path=/foo.txtPOST /api/spaces/:name/git/pushGET /api/templatesPUT /api/templatesGET /api/nodesGET /api/audit?space=name&limit=200docker exec over WebSocket:
GET /api/spaces/:name/terminal?key=YOUR_KEYbash -l/workspace/.bash_history and ingested into the audit logA snapshot of the Clawdbot extension that exposes Clawdspace as a native tool lives here:
clawdbot/plugins/clawdspace/This is the code that maps tool actions like create_space, exec, files_get/put, list_spaces, etc. to the Clawdspace HTTP API.
docs/API.md — REST API referencedocs/ARCHITECTURE.md — system design + mermaid diagramsdocs/CLI.md — CLI referencedocs/SETUP.md — setup guide (API key, services, nodes)docs/USAGE.md — day 2 workflows + examplesdocs/TROUBLESHOOTING.md — common errors + fixesBuilt with 🦞 (a tiny nod to the crustacean army) — keep it local, keep it yours.
75 commits
TypeScript
88.1%
Shell
6.0%
CSS
5.1%
Self-hosted sandboxed execution environments — run isolated “spaces” on your own machines (Docker + Tailscale).
/workspace/workspace/.bash_history)flowchart LR
%% Clients
AGENT[Clawdbot Agent] -->|tool call: clawdspace| PLUGIN[Clawdspace Extension<br/>Clawdbot]
CLI[clawdspace CLI] -->|REST| API
UI[Web Dashboard] -->|REST| API
UI -->|WebSocket terminal| API
%% Clawdbot side
PLUGIN -->|REST - API key| API
%% Clawdspace node
API[Clawdspace API] -->|Docker socket| DOCKER[Docker Engine]
DOCKER -->|containers| SPACE[Spaces]
DOCKER -->|named volumes| VOL[Per-space volumes]
API -->|tailscale status| TS[Tailscale]
API -->|cached probe| NODES[Other nodes]
API --> AUDIT[Audit JSONL]
SPACE -->|bash history| VOL
API -->|ingest .bash_history| AUDIT
For a more detailed guide, see docs/SETUP.md.
git clone https://github.com/adam91holt/clawdspace.git
cd clawdspace
For now, Clawdspace uses a single shared secret string.
python3 - <<'PY'
import secrets
print('clawdspace_sk_live_' + secrets.token_hex(16))
PY
docker build -t clawdspace:latest -f docker/Dockerfile .
npm ci
npm run build
cd packages/api
PORT=7777 API_KEY="<your_api_key>" node dist/index.js
Dashboard:
http://localhost:7777Clawdspace discovers nodes using tailscale status --json and probes each peer on port 7777.
/api/nodes is cached server-side (fast dashboard loads)API_KEY) and ensure it’s reachable over TailscaleOverride discovery:
CLAWDSPACE_NODES=name=http://host:7777,other=http://host2:7777
The server supports either:
?key=YOUR_KEY (recommended for browsers)Authorization: Bearer YOUR_KEY (best for curl/CLI)Dev only:
CLAWDSPACE_AUTH_DISABLED=trueThe CLI runs on your workstation and calls the API.
clawdspace system
clawdspace list
clawdspace create dev
clawdspace exec dev "python3 --version"
clawdspace stop dev
clawdspace start dev
clawdspace destroy dev
clawdspace dashboard
GET /api/healthGET /api/systemGET /api/system/capabilitiesGET /api/spacesPOST /api/spaces (supports template, optional repo clone + envfile write)POST /api/spaces/:name/execGET /api/spaces/:name/statsGET /api/spaces/:name/observabilityGET /api/spaces/:name/files?path=/GET/PUT /api/spaces/:name/file?path=/foo.txtPOST /api/spaces/:name/git/pushGET /api/templatesPUT /api/templatesGET /api/nodesGET /api/audit?space=name&limit=200docker exec over WebSocket:
GET /api/spaces/:name/terminal?key=YOUR_KEYbash -l/workspace/.bash_history and ingested into the audit logA snapshot of the Clawdbot extension that exposes Clawdspace as a native tool lives here:
clawdbot/plugins/clawdspace/This is the code that maps tool actions like create_space, exec, files_get/put, list_spaces, etc. to the Clawdspace HTTP API.
docs/API.md — REST API referencedocs/ARCHITECTURE.md — system design + mermaid diagramsdocs/CLI.md — CLI referencedocs/SETUP.md — setup guide (API key, services, nodes)docs/USAGE.md — day 2 workflows + examplesdocs/TROUBLESHOOTING.md — common errors + fixesBuilt with 🦞 (a tiny nod to the crustacean army) — keep it local, keep it yours.
75 commits
TypeScript
88.1%
Shell
6.0%
CSS
5.1%