Skip to content

Commit 51a7965

Browse files
committed
docs: update phrasing
1 parent 249c75f commit 51a7965

3 files changed

Lines changed: 520 additions & 203 deletions

File tree

README.md

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
# devsandbox
22

3-
Sandbox your AI coding assistants. Run Claude Code, Copilot, aider, and other tools without exposing SSH keys, cloud credentials, or secrets.
3+
Your real dev environment, sandboxed per project. Run Claude Code, Copilot, aider, and other AI coding agents safely -- without giving up your shell, your `mise`-managed tools, or your editor configs.
44

5-
## The Problem
5+
## The DX gap
66

7-
AI coding assistants execute shell commands, install packages, and make network requests on your machine -- with full access to your `~/.ssh` keys, `~/.aws` credentials, `.env` secrets, and everything else. An AI agent with unrestricted access could read your `~/.ssh/id_ed25519`, exfiltrate `~/.aws/credentials` via an API call, or `rm -rf` your home directory.
7+
Docker and VMs isolate by *replacing* your dev environment. Fresh shell with no aliases. No `mise`, no editor, no prompt. Reinstall every tool inside the container, fight file watchers across the VM boundary, and wait 10-30 seconds for cold starts. So most people skip isolation entirely and let agents run on the host -- with full access to `~/.ssh`, cloud credentials, `.env` secrets, and every other project on disk.
88

9-
devsandbox removes that risk. It wraps any command in a sandbox scoped to your current working directory -- the directory you run `devsandbox` from becomes the project root with full read/write access, while everything outside it (credentials, keys, secrets, other projects) is blocked. An optional proxy mode logs every HTTP/HTTPS request for inspection.
9+
devsandbox closes that gap. It wraps any command in a sandbox scoped to your current working directory and brings the rest of your real environment with it:
10+
11+
- **Your shell, aliases, history.** Detected from `$SHELL` and bound read-only.
12+
- **`mise`-managed tools.** Go, Node, Python, kubectl, whatever -- already there, no `mise install` twice.
13+
- **Editor + LSP, prompt, multiplexer.** nvim, helix, starship, tmux, fish, zsh -- all preserved.
14+
- **Sub-second startup.** bubblewrap on Linux shares the host kernel; native file watching works.
15+
16+
The isolation boundary is still real. Inside the sandbox, the agent sees the project directory and your tools -- and nothing else. SSH keys, cloud credentials (`~/.aws`, `~/.azure`, `~/.gcloud`), `.env` files, sibling projects, and parent directories are invisible. `.git` is read-only by default. An optional MITM proxy logs every HTTP/HTTPS request for inspection.
1017

1118
## Prerequisites
1219

@@ -124,13 +131,15 @@ devsandbox scratchpad rm experiments --keep-state
124131
devsandbox scratchpad rm --all --force
125132
```
126133

127-
## What Your AI Agent CAN and CANNOT Do
134+
## Security baseline
135+
136+
DX is the headline; isolation is the floor. The defaults are tuned so an agent inside a fresh sandbox can do its job and nothing more -- no flags required.
128137

129-
**CAN:** Read/write your project files, run build commands, install dependencies, make API calls (logged in proxy mode).
138+
**CAN:** Read/write your project files, use your `mise`-managed tools, inherit your shell and editor configs, run build commands, install dependencies, make API calls (logged in proxy mode).
130139

131140
**CANNOT:** Read SSH keys, access cloud credentials (AWS/Azure/GCloud), read `.env` secrets, see other projects, push to git (by default), or modify your system.
132141

133-
### Security Details
142+
### Resource access defaults
134143

135144
| Resource | Default Access |
136145
|---|---|
@@ -149,13 +158,13 @@ Everything is configurable. See [Configuration](docs/configuration.md) for detai
149158

150159
## Features
151160

152-
- **Zero-config security** -- SSH keys, cloud credentials, `.env` files, and git credentials are blocked by default
153-
- **Your tools, your shell** -- mise-managed tools, shell configs, editor setups (nvim, starship, tmux) all work inside the sandbox
161+
- **Your real dev env, inside the sandbox** -- mise-managed tools, shell configs, editor setups (nvim, starship, tmux) auto-detected and bound, no Dockerfile required
162+
- **Sub-second startup** -- [bubblewrap](https://github.com/containers/bubblewrap) namespaces on Linux share the host kernel; native file watching works. Docker layer caching keeps macOS restarts at 1-2s
163+
- **Per-project isolation** -- each project gets its own sandbox home, caches, and logs
164+
- **Zero-config security baseline** -- SSH keys, cloud credentials, `.env` files, and git credentials blocked by default
154165
- **MITM proxy** -- optional traffic inspection with log viewing, filtering, and export
155166
- **HTTP filtering** -- whitelist/blacklist domains, or interactively approve requests one at a time
156167
- **Content redaction** -- scan outgoing requests for secrets, block or replace them before they leave your machine
157-
- **Cross-platform** -- [bubblewrap](https://github.com/containers/bubblewrap) namespaces on Linux (sub-second startup), Docker containers on macOS
158-
- **Per-project isolation** -- each project gets its own sandbox home, caches, and logs
159168
- **Git modes** -- readonly (default), readwrite (with SSH/GPG), or disabled
160169
- **Desktop notifications** -- sandboxed apps can send notifications to the host via XDG Desktop Portal (Linux)
161170

site/landing/index.html

Lines changed: 109 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,21 @@
33
<head>
44
<meta charset="utf-8">
55
<meta name="viewport" content="width=device-width,initial-scale=1">
6-
<title>devsandbox — sandbox AI coding assistants safely</title>
7-
<meta name="description" content="Run Claude Code, Copilot, aider, and any other AI coding tool safely. devsandbox sandboxes the agent to your project directory — your SSH keys, cloud credentials, and other projects stay invisible. Skip permission prompts without giving up your home directory.">
6+
<title>devsandbox — your dev environment, sandboxed</title>
7+
<meta name="description" content="Sandbox AI coding agents without rebuilding your dev env. Your shell, mise-managed tools, and editor configs come with you. SSH keys, cloud credentials, and other projects stay invisible.">
88
<meta name="color-scheme" content="light dark">
9-
<meta name="theme-color" content="#4051b5" media="(prefers-color-scheme: light)">
10-
<meta name="theme-color" content="#1a1d2e" media="(prefers-color-scheme: dark)">
9+
<meta name="theme-color" content="#c84a1a" media="(prefers-color-scheme: light)">
10+
<meta name="theme-color" content="#14130f" media="(prefers-color-scheme: dark)">
1111
<link rel="canonical" href="https://zekker6.github.io/devsandbox/">
1212
<link rel="icon" type="image/svg+xml" href="assets/favicon.svg">
1313

1414
<meta property="og:type" content="website">
1515
<meta property="og:url" content="https://zekker6.github.io/devsandbox/">
16-
<meta property="og:title" content="devsandbox — sandbox AI coding assistants safely">
17-
<meta property="og:description" content="Run Claude Code, Copilot, aider, and friends without exposing SSH keys or cloud credentials. Skip permission prompts safely.">
16+
<meta property="og:title" content="devsandbox — your dev environment, sandboxed">
17+
<meta property="og:description" content="Sandbox AI coding agents without rebuilding your dev env. Your shell, mise tools, and editor configs come with you. Credentials and other projects stay invisible.">
1818
<meta name="twitter:card" content="summary">
19-
<meta name="twitter:title" content="devsandbox — sandbox AI coding assistants safely">
20-
<meta name="twitter:description" content="Run Claude Code, Copilot, aider, and friends without exposing SSH keys or cloud credentials.">
19+
<meta name="twitter:title" content="devsandbox — your dev environment, sandboxed">
20+
<meta name="twitter:description" content="Sandbox AI coding agents without rebuilding your dev env. Your shell and mise tools come with you.">
2121

2222
<link rel="stylesheet" href="style.css">
2323
</head>
@@ -26,101 +26,161 @@
2626
<header class="hero">
2727
<div class="container">
2828
<nav class="topnav">
29-
<span class="brand">devsandbox</span>
29+
<span class="brand"><span class="brand-bracket">[</span>devsandbox<span class="brand-bracket">]</span></span>
3030
<span class="topnav-links">
31-
<a href="/devsandbox/docs/">Docs</a>
32-
<a href="https://github.com/zekker6/devsandbox" rel="noopener">GitHub</a>
31+
<a href="/devsandbox/docs/">docs</a>
32+
<a href="https://github.com/zekker6/devsandbox" rel="noopener">github</a>
3333
</span>
3434
</nav>
35-
<h1>Run AI coding tools without giving them your SSH keys.</h1>
35+
36+
<p class="eyebrow">Sandboxing for AI coding agents · Linux + macOS</p>
37+
<h1>
38+
Sandbox the agent. <em>Keep your dev env.</em>
39+
</h1>
3640
<p class="lede">
37-
<strong>devsandbox</strong> sandboxes Claude Code, Copilot, aider, and any other CLI tool to the directory you're working in.
38-
Skip permission prompts safely — your <code>~/.ssh</code>, cloud credentials, and other projects stay invisible.
41+
Docker and VMs isolate by replacing your environment — fresh shell, no <code>mise</code>, no editor config, slow rebuilds. So most people skip isolation entirely.
42+
<strong>devsandbox</strong> brings your real shell, mise-managed tools, and editor setup into a per-project sandbox. Your <code>~/.ssh</code>, cloud credentials, and other projects stay invisible.
3943
</p>
4044

4145
<div class="install">
4246
<pre><code id="install-cmd">mise use -g github:zekker6/devsandbox</code></pre>
43-
<button class="copy-btn" type="button" data-target="install-cmd" aria-label="Copy install command">Copy</button>
47+
<button class="copy-btn" type="button" data-target="install-cmd" aria-label="Copy install command">copy</button>
4448
</div>
4549

4650
<div class="cta-row">
47-
<a class="cta cta-primary" href="/devsandbox/docs/getting-started/install/">Get started &rarr;</a>
48-
<a class="cta cta-secondary" href="https://github.com/zekker6/devsandbox" rel="noopener">GitHub &rarr;</a>
51+
<a class="cta cta-primary" href="/devsandbox/docs/getting-started/install/">Get started <span aria-hidden="true"></span></a>
52+
<a class="cta cta-secondary" href="https://github.com/zekker6/devsandbox" rel="noopener">Source <span aria-hidden="true"></span></a>
4953
</div>
5054

5155
<p class="hero-foot">
52-
Open source · MIT licensed · Linux &amp; macOS
56+
Open source · MIT · Sub-second startup on Linux (bubblewrap) · Docker-backed on macOS
5357
</p>
5458
</div>
5559
</header>
5660

57-
<section class="why">
61+
<section class="dxgap">
5862
<div class="container">
59-
<h2>Why devsandbox</h2>
60-
<div class="cards">
61-
<article class="card">
62-
<h3>Secrets stay yours</h3>
63-
<p>
64-
<code>~/.ssh</code>, <code>~/.aws</code>, <code>.env</code>, parent directories, and other projects are <em>invisible</em> inside the sandbox. An AI agent can't exfiltrate what isn't mounted.
65-
</p>
66-
</article>
67-
<article class="card">
68-
<h3>No more permission fatigue</h3>
69-
<p>
70-
Run with <code>--dangerously-skip-permissions</code> and actually mean it. Auto-approve commands without trusting your whole home directory.
71-
</p>
72-
</article>
73-
<article class="card">
74-
<h3>Tool-agnostic</h3>
75-
<p>
76-
Claude Code, GitHub Copilot, aider, Cursor CLI, OpenCode — anything with a shell. Wraps the binary, no plugin needed.
77-
</p>
78-
</article>
63+
<p class="section-tag">/ 01 — the DX gap</p>
64+
<h2>Most isolation tools make you rebuild your dev env from zero.</h2>
65+
<p class="section-lede">
66+
Spin up a Docker container or VM and you land in a stranger's machine: bash with no aliases, no <code>mise</code>, no editor, no prompt. Reinstall everything, fight file watchers, eat 10–30s cold starts. Eventually you give up and let the agent run on the host. devsandbox closes that gap.
67+
</p>
68+
69+
<div class="comparison">
70+
<div class="col col-pain">
71+
<p class="col-tag">Docker · VM</p>
72+
<ul class="checklist negative">
73+
<li>Fresh shell — no aliases, no history, no prompt</li>
74+
<li>Reinstall every tool inside the container</li>
75+
<li>Editor + LSP configs (nvim, helix, vscode) gone</li>
76+
<li><code>mise</code>, <code>starship</code>, <code>tmux</code> — gone</li>
77+
<li>10–30s cold start, slow rebuilds</li>
78+
<li>File-watching breaks across the VM boundary</li>
79+
</ul>
80+
</div>
81+
<div class="col col-win">
82+
<p class="col-tag">devsandbox</p>
83+
<ul class="checklist positive">
84+
<li>Your shell, your aliases, your history</li>
85+
<li><code>mise</code> tools mounted read-only — Go, Node, Python, all of it</li>
86+
<li>Editor + LSP configs come along, untouched</li>
87+
<li>Starship, tmux, nvim, fish, zsh — all preserved</li>
88+
<li>Sub-second restart on Linux, 1–2s on macOS</li>
89+
<li>Native file watching — bubblewrap shares the host kernel</li>
90+
</ul>
91+
</div>
7992
</div>
8093
</div>
8194
</section>
8295

8396
<section class="how">
8497
<div class="container">
85-
<h2>How it works</h2>
98+
<p class="section-tag">/ 02 — how it works</p>
99+
<h2>Wrap any command. Inherit your env. Block the rest.</h2>
86100

87101
<ol class="steps">
88102
<li>
89-
<h3>Wrap the command.</h3>
90-
<p>Use <code>devsandbox</code> as a prefix. The directory you run it from becomes the sandbox root — everything else is blocked.</p>
103+
<p class="step-num">01 · wrap</p>
104+
<h3>Prefix the command.</h3>
105+
<p>The directory you run <code>devsandbox</code> from becomes the sandbox root. Everything outside it is gone.</p>
91106
<pre><code>cd ~/projects/my-app
92107
devsandbox claude --dangerously-skip-permissions</code></pre>
93108
</li>
94109
<li>
95-
<h3>Filesystem locked down.</h3>
96-
<p>Project files are read/write. Credentials, parent directories, sibling projects, and <code>.env</code> files are gone. <code>.git</code> is read-only by default.</p>
110+
<p class="step-num">02 · inherit</p>
111+
<h3>Your env follows you in.</h3>
112+
<p>mise tools, shell configs, editor and prompt — auto-detected, bound read-only. No reinstall, no Dockerfile, no <code>mise install</code> twice.</p>
97113
<pre><code># inside the sandbox
98-
ls ~/.ssh
114+
mise ls # your real toolchain
115+
which nvim # your real editor
116+
echo $STARSHIP_* # your real prompt</code></pre>
117+
</li>
118+
<li>
119+
<p class="step-num">03 · isolate</p>
120+
<h3>Credentials stay out.</h3>
121+
<p>SSH keys, cloud creds, <code>.env</code>, sibling projects — invisible. <code>.git</code> is read-only by default. Now <code>--dangerously-skip-permissions</code> actually means something.</p>
122+
<pre><code>ls ~/.ssh
99123
# No such file or directory
100124

101125
cat .env
102126
# (empty — masked with /dev/null)</code></pre>
103127
</li>
104128
<li>
105-
<h3>Network optional.</h3>
106-
<p>Add <code>--proxy</code> to log every HTTP request. Block outbound entirely with a filter rule, or interactively approve each domain.</p>
129+
<p class="step-num">04 · observe</p>
130+
<h3>Network, on your terms.</h3>
131+
<p>Add <code>--proxy</code> to log every HTTP call. Block, allow, or interactively approve domains as the agent runs.</p>
107132
<pre><code>devsandbox --proxy claude --dangerously-skip-permissions
108133
devsandbox logs proxy --last 50</code></pre>
109134
</li>
110135
</ol>
111136
</div>
112137
</section>
113138

139+
<section class="security">
140+
<div class="container">
141+
<p class="section-tag">/ 03 — security baseline</p>
142+
<h2>Zero-config defaults. <em>Reach what isn't mounted.</em></h2>
143+
<p class="section-lede">
144+
DX is the headline; isolation is the floor. The defaults are tuned so that an agent inside a fresh sandbox can do its job and nothing more — no flags required.
145+
</p>
146+
147+
<div class="security-grid">
148+
<div class="cell cell-good">
149+
<p class="cell-label">read · write · inherit</p>
150+
<ul>
151+
<li>Your project directory</li>
152+
<li><code>mise</code>-managed tools (read-only)</li>
153+
<li>Shell, editor, prompt configs (read-only)</li>
154+
</ul>
155+
</div>
156+
<div class="cell cell-bad">
157+
<p class="cell-label">blocked by default</p>
158+
<ul>
159+
<li><code>~/.ssh</code> — keys, known_hosts</li>
160+
<li><code>~/.aws</code>, <code>~/.azure</code>, <code>~/.gcloud</code></li>
161+
<li><code>.env</code> and <code>.env.*</code> (masked)</li>
162+
<li>Parent dirs and sibling projects</li>
163+
<li>Git commits (<code>.git</code> read-only)</li>
164+
</ul>
165+
</div>
166+
</div>
167+
</div>
168+
</section>
169+
114170
<footer class="footer">
115171
<div class="container">
172+
<p class="footer-meta">
173+
<span class="brand-bracket">[</span>devsandbox<span class="brand-bracket">]</span>
174+
&nbsp;·&nbsp; MIT &nbsp;·&nbsp; built for terminals
175+
</p>
116176
<p class="footer-links">
117177
<a href="https://github.com/zekker6/devsandbox" rel="noopener">GitHub</a>
118178
·
119179
<a href="/devsandbox/docs/">Docs</a>
120180
·
121181
<a href="/devsandbox/docs/about/changelog/">Changelog</a>
122182
·
123-
<a href="/devsandbox/docs/about/license/">License (MIT)</a>
183+
<a href="/devsandbox/docs/about/license/">License</a>
124184
</p>
125185
</div>
126186
</footer>
@@ -135,7 +195,7 @@ <h3>Network optional.</h3>
135195
try {
136196
await navigator.clipboard.writeText(target.textContent.trim());
137197
const original = btn.textContent;
138-
btn.textContent = 'Copied!';
198+
btn.textContent = 'copied';
139199
btn.classList.add('copied');
140200
setTimeout(() => { btn.textContent = original; btn.classList.remove('copied'); }, 1600);
141201
} catch (e) { /* clipboard denied — fall through silently */ }

0 commit comments

Comments
 (0)