Skip to main content

schepper

Declarative manager for Docker Sandboxes (sbx).

Each project gets a schepper.yaml. Run schepper up to create or reconcile the sandbox to match.

Notice that Docker itself is working on a similar feature.

Install

uv tool install schepper

Workflow

cd ~/Projects/myproject
schepper init      # creates schepper.yaml with defaults
# edit schepper.yaml
schepper up        # creates sandbox, confirms, then prints the attach command
schepper run       # attach interactively

Commands

Command Description
schepper init Scaffold schepper.yaml in current project dir
schepper up Align sandbox with config and start it; confirms all changes, warns before recreation
schepper run Attach to the sandbox interactively (must already exist)
schepper down Stop sandbox
schepper rm Remove sandbox (with confirmation)
schepper status Show status, kit, memory, ports for the current sandbox
schepper inspect [name] Print a live sandbox's config as schepper.yaml (copy-pasteable)
schepper ls List all sandboxes (sbx ls)
schepper ssh Run sbx setup ssh globally (once)

schepper.yaml

name: myproject
kit: claude
memory: 8g
cpus: 0
storage: 10g
ports:
  - 3000
  - 8000-8010
ssh: false
Field Default Description
name current directory name Sandbox name passed to sbx
kit claude Agent kit: claude, codex, shell, etc.
memory 8g Memory limit in binary units, e.g. 512m, 4g, 8g
cpus 0 CPU count; 0 = auto (all host CPUs)
storage 10g VM root disk size. Cannot be changed on an existing sandbox — requires schepper rm && schepper up.
ports [] Ports to publish. Ranges like 8000-8010 are expanded.
ssh false When true, runs sbx setup ssh on every schepper up

Ports are always mapped symmetrically (3000:3000), so localhost:3000 works identically inside and outside the sandbox — Claude can suggest a preview URL and it just works.

Notes

  • Changing memory or kit on an existing sandbox requires recreation. schepper up will detect the diff, warn, and ask to confirm before removing and recreating. Changing storage also requires recreation, but schepper up cannot detect it automatically — run schepper rm && schepper up manually.
  • SSH: schepper ssh (or ssh: true in config) runs sbx setup ssh, which writes an ~/.ssh/config entry so ssh <name>.sbx connects without further setup.

Development

git clone https://github.com/Ecno92/schepper
cd schepper
uv sync --extra dev
uv run pytest tests/ -v

To publish a new release:

uv build
uv publish

Metadata

Release files for schepper 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for schepper 0.1.0
File Size Uploaded Provenance Actions
schepper-0.1.0.tar.gz 34.5 kB Without provenance Details for schepper-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for schepper 0.1.0
File Interpreter ABI Platform Actions
schepper-0.1.0-py3-none-any.whl Python 3 none any Details for schepper-0.1.0-py3-none-any.whl

Total release size: 46.3 kB

Release files / schepper-0.1.0.tar.gz

Download URL schepper-0.1.0.tar.gz
Size 34.5 kB
Tags Source
SHA-256 checksum
How to use checksums
3f28e4b2ceda29974ffb049be08a13b9b5eb141893df68a5a5c71d2274e36718
BLAKE2b-256 checksum
How to use checksums
49eb6beb240669741d00d6bb484b3f55624a8eefc39286b540b0ea442c6b17ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / schepper-0.1.0-py3-none-any.whl

Download URL schepper-0.1.0-py3-none-any.whl
Size 11.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fd242be7245737d2e034973f37a81bb0389b656b103af6c3f7d6a09204723752
BLAKE2b-256 checksum
How to use checksums
d458cd495ddf29b66bbf8df54fb3e0d97b049a0e789a0de38c40627e06a128f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for schepper 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page