Sandbox
@ykdojo/safeclaw

Docker dashboard for multiple Claude Code sessions

SafeClaw runs Claude Code inside separate Docker containers so each session is isolated and starts fast. A browser terminal and a dashboard let you create, view, stop, and delete sessions, while host-mounted volumes keep conversation history and memory across restarts.

183 stars20 forksHTMLUpdated 16d ago
Who it's for

Builders who want to run Claude Code in isolated sessions and manage them from one local dashboard.

What it delivers

You can keep several Claude Code sessions running side by side, with shared defaults and saved context, instead of juggling one brittle terminal at a time.

What it does

One session per container

Each Claude Code session runs in its own Docker container so sessions do not interfere with one another.

Web dashboard

`dashboard/server.js` serves a local dashboard with create, start, stop, delete, and live iframe views.

Persisted history and memory

Session data is stored under `~/.config/safeclaw/sessions/<session-name>/` and mapped into the container so history survives restarts.

Sensible defaults

The setup pins Claude Code, disables auto compacting and prompt suggestions, and runs with `--dangerously-skip-permissions` inside the container.

Optional Slack access

`./scripts/setup-slack.sh` adds read-only Slack support when you provide a token.

Included skills and tools

The `setup/skills/` and `setup/tools/` folders ship reusable skills such as Slack, yt-dlp, and gdoc support.

How to get it

  1. 1Manage all sessions from a web dashboard
    node dashboard/server.js
  2. 2Each session's data persists locally at
    ~/.config/safeclaw/sessions/<session-name>/

README

SafeClaw

The easiest way to run multiple Claude Code sessions, each in its own container, with a dashboard to manage them all. Quick setup with battle-tested sensible defaults and skills.

https://github.com/user-attachments/assets/e282ed8f-3ec9-4a9e-aa9e-4bc84f9281e9

See architecture.md for design details.

Why a container?

  • Isolated - Claude Code runs with bypass permissions, but can't touch your host machine.
  • Lightweight - Spin up, stop, or delete sessions in seconds. Much faster than a full VM.
  • Portable - Works on any machine with Docker. Same environment everywhere.

This lets you run Claude Code with --dangerously-skip-permissions safely and fast.

One session per container

Each Claude Code session runs in its own container. Spin up as many as you need - they're isolated from each other and start in seconds. Run different research tasks, projects, or experiments in parallel without interference. Conversation history is automatically stored on your host machine via a volume mount.

Quickstart

# Build image (once, or after changes)
./scripts/build.sh

# Start container and web terminal
./scripts/run.sh

# To mount a local project (host_path:container_path)
./scripts/run.sh -v ~/myproject:/home/sclaw/myproject

# Run multiple sessions with -s
./scripts/run.sh -s work        # safeclaw-work on next available port
./scripts/run.sh -s research    # safeclaw-research on next available port

On first run, run.sh will prompt you to set up authentication tokens. It then starts a web terminal at http://localhost:7681 and opens it in your browser.

Dashboard

Dashboard showing multiple Claude Code sessions running in parallel

Manage all sessions from a web dashboard:

node dashboard/server.js

Opens at http://localhost:7680 with:

  • Create new sessions with volume mounts and initial queries
  • All sessions listed with start/stop/delete controls
  • Live iframe views of active sessions

Optional integrations

  • ./scripts/setup-slack.sh - Add Slack read access

What's included

  • Ubuntu 24.04
  • Node.js 24 (LTS)
  • Claude Code 2.1.250
  • GitHub CLI with auto-configured git user
  • Playwright MCP with Chromium
  • Slack read-only skill and tool (optional - requires token)
  • DX plugin, custom status line, shell aliases
  • ttyd web terminal + tmux

Sensible defaults

  • Claude Code version pinned (currently 2.1.250)
  • autoCompactEnabled: false - prevents automatic context compaction
  • promptSuggestionEnabled: false - disables prompt suggestions
  • --dangerously-skip-permissions enabled (because it's containerized)

Conversation history and memory

Each session's data persists locally at:

~/.config/safeclaw/sessions/<session-name>/

This maps to /home/sclaw/.claude/projects/ inside the container and includes:

  • Conversations - JSONL files (one per conversation)
  • Memory - Auto memory at -home-sclaw/memory/MEMORY.md, loaded into the system prompt each conversation

Rebuilding containers or restarting sessions won't affect your history or memory.

Authentication

Tokens are stored in ~/.config/safeclaw/.secrets/ and injected as env vars on each run. The filename becomes the env var name.

FileHow to generate
CLAUDE_CODE_OAUTH_TOKENclaude setup-token (valid 1 year)
GH_TOKENgh auth token or create a PAT at github.com/settings/tokens
SLACK_TOKENOptional - ./scripts/setup-slack.sh

You can add any additional secrets by creating files in the .secrets/ directory.

Scripts

ScriptDescription
scripts/build.shBuild the Docker image and remove old container
scripts/run.shStart/reuse container, inject auth, start ttyd. Use -s name for named sessions, -v for volumes, -n to skip opening browser, -q "question" to start with a query.
scripts/setup-slack.shSet up Slack integration (optional)
scripts/manage-env.jsManage environment variables (list, add, delete)
dashboard/server.jsWeb dashboard for managing multiple sessions

Aliases

Inside each container, these aliases are available:

AliasCommand
cclaude
csclaude --dangerously-skip-permissions

npm scripts

CommandRuns
npm run build./scripts/build.sh
npm start./scripts/run.sh
npm run dashboardnode dashboard/server.js
npm run dashboard:devnodemon dashboard/server.js
npm run setup-slack./scripts/setup-slack.sh
npm run manage-envnode scripts/manage-env.js

Skills

Defined in setup/skills/.

SkillDescriptionRequires
slackRead Slack messages, channels, DMs, and search (read-only)SLACK_TOKEN
yt-dlpDownload YouTube videos, audio, and subtitles/transcripts-
gdocRead publicly shared Google Docs-

Featured in

Files in the repo

Repository payload12 top-level entries
  • assets
  • dashboard
  • scripts
  • setup
  • .gitignore
  • architecture.md
  • CLAUDE.md
  • Dockerfile
  • LICENSE
  • package-lock.json
  • package.json
  • README.md

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More tools

JuliusBrussee/
caveman

🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman

105k
1 add
MemPalace/
mempalace

The best-benchmarked open-source AI memory system. And it's free.

59k
stablyai/
orca

Orca is the ADE for working with a fleet of parallel agents. Run any coding agent with your own subscription. Available on desktop, mobile and remote runtime.

66k

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

132k

Never stop coding. Free MIT AI gateway: one endpoint, 352 providers (150+ free), 1200+ models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline & Copilot. Quota-aware auto-fallback, RTK+Caveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550+ contributors

64k
headroomlabs-ai/
headroom

Compress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.

71k