A sandbox, a git worktree, a throwaway copy of your project — declared once as a recipe, summoned by name, tracked until you tear it down.
$ curl -fsSL https://dabs.dev/install.sh | sh
Supported platforms: Linux and macOS. Installed? Read the docs →
Choose from the shipped recipes
$ dabs recipes
sh shell in a clean box over your current directory
wt cut a worktree, no box
wtbox shell in a clean box over a fresh git worktree
scratch copy the cwd into a directory node, no box
scratchbox shell in a clean box over a throwaway copy of the cwd
claudewt:
description: Claude box working in a fresh git worktree
image: claude
command: [claude]
keep: true # resume the box after claude exitsenv:
CLAUDE_CONFIG_DIR: /root/.claude
sources:
- mkmount: ~/.dabs/shared/claude # mount sandbox specific credentials and configspath: /root/.claude
- mkmount: $PARENT_VOLUME/claude/projects # transcripts outlive the boxpath: /root/.claude/projects
- worktree: .
path: /work
Boxception
Write your own setups and call them by their name.
What you defineWhat dabs takes care of
aibAgent in the boxyou ──▶[box]──▶ claude
aobAgent outside the boxyou ──▶ claude ──▶[box]──▶ npm test
aob-aibAgents outside the box running an agent inside the boxyou ──▶ claude ──▶[box]──▶ claude 😵💫
A box is just a place an agent can stand — so nothing stops the agent standing in one from booting another.