# Landing Page Copy — Spens

## Hero

**Headline:** Run AI agents. See everything they do.

**Subhead:** Spens runs coding agents in sandboxed Docker containers, intercepts every network call, and logs it all — LLM traffic, tool calls, file changes. Review exactly what your agent did, line by line.

**Primary CTA:** Get started — `pip install .`

**Secondary CTA:** View source

---

## What is Spens

Spens is a CLI toolchain for running AI coding agents — Codex, Claude Code, opencode, pi — inside sandboxed Docker containers with full network interception and audit control.

Three tools, one runtime:

- **Docker** — isolated, ephemeral environments
- **nono.sh** — sandboxed shell with filesystem access control and audit logging
- **mitmproxy** — SSL-intercepting proxy that captures and decodes LLM API traffic

---

## Why Spens

If you work across many codebases and experiment with multiple agents and LLMs, you need a way to run them without polluting your machine, creating conflicts, or having an agent blow away your home directory.

Spens gives you:

- **Containment** — agents run in Docker, as non-root, under a sandboxed shell
- **Observability** — every LLM call, HTTP request, and file change is logged
- **Control** — fail-closed domain rules; your secrets never enter the container

---

## How to use it

### 1. Install

Requires Python 3.11+ and Docker.

```bash
pip install .
```

### 2. Run an agent

```bash
spens node-20 codex .
```

Environment, agent, workspace. That's it.

Environments: `node-20` · `node-22` · `node-24` · `python-3.11` · `python-3.12` · `python-3.13`
Agents: `codex` · `claude` · `opencode` · `pi`

### 3. Review the session

```bash
spens log-viewer
```

Opens a local web UI at `http://127.0.0.1:7331`.

---

## Yolo mode

Give an agent a prompt and let it run non-interactively:

```bash
spens node-20 opencode . "add a docstring to every public function in src/"
```

The agent executes the prompt and exits. You review the log.

---

## What you see

Every session is captured in the log viewer:

- **Chat transcript** — decoded LLM requests and responses, tool calls, reasoning, token usage
- **Audit log** — executable identity, tracked paths, audit events, integrity chain
- **HTTP traffic** — every non-LLM request and response
- **File changes** — what changed, per file, with rollback

---

## Control your network

Add a `.spens.config.json` to your workspace — or run `spens init` to generate one — and you can:

- **Allow or block domains** per HTTP method. Unmatched domains are blocked. Fail closed.
- **Keep secrets out of the container.** The agent only sees a placeholder; the proxy swaps in the real key for approved domains only.
- **Capture more URLs**, run pre-sandbox commands, forward environment variables.

---

## Security posture

Honest by design: Spens is not 100% secure. It's secure enough for most workloads.

- Agents run as non-root users inside Docker
- All egress is forced through the interceptor — non-HTTP protocols have no route and fail closed
- Policy files are masked from the agent, so it can't tamper with the next session's rules

---

## Footer CTA

**Headline:** Run agents with confidence.

```bash
pip install .
spens node-20 codex .
```
