sand-boxer/SCOPE.md
tegwick 23d0c2b34d
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
feat: return combined bwrap runtime candidate to Glas
Answer the GLAS-WP-0015 handoff for SAND-WP-0015-T04 without activating any
production path.

Add candidate profile profile.claude-agent-dev-proof v1.1.0 (ext.bwrap,
localhost-only, default: deny, declared api.anthropic.com:443) for GLAS-WP-0012
review. The committed profile grants no egress by itself — ext.bwrap refuses it
unless owner extension config independently allowlists the destination — and a
regression test asserts that fail-closed default.

Reconcile the differing project examples in favour of the acceptance runner's
actor agt / project glas-local-proof, keeping the documented credential route
bound to that single project rather than broadening it.

Record the return contract (profile revision, host scope, consumer tuple,
runtime digest and mount paths, declared egress, value-free denial/cleanup
receipts) in docs/bwrap-runtime.md.

T04 stays wait: Claude credential lane, owner machine authentication, pinned
Claude executable and real-model acceptance remain operator gated.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HjyScPKb8MV8y2VZHGFSSV

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 716401@bnt-lap001
Assistant-Session: 0d02392b-d4a8-4fed-98e3-32333f768169
2026-09-06 20:34:51 +02:00

10 KiB
Raw Blame History

domain repo updated
infotech sand-boxer 2026-06-24

SCOPE

This file helps you quickly understand what this repository is about, when it is relevant, and when it is not.


One-liner

Coulomb meta-framework for establishing sandboxes — profile-based provision, extension routing, workspace checkpoints, lifecycle registration, and host telemetry — so agents and automations run in isolated venues without workstation blast radius.


Core Idea

sand-boxer is the sandbox establishment service (OpenRouter for sandboxes). It answers which recipe applies, which backend fulfills it, where it runs, and what happened during lifecycle. It is self-sustained — it does not depend on wise-validator or other sibling projects.

A profile is a named, versioned recipe bound to an extension (backend adapter). Consumers request create; sand-boxer provisions on a placement host, confirms reachability (ready), emits State Hub lifecycle events, and tears down on destroy or operator reap.

wise-validator (separate repo) consumes sand-boxer for cross-repo e2e validation; sand-boxer does not run health checks or test commands.

Lineage: provision/teardown extracted from the-custodian/e2e-framework/; ext.vm-packer attach mode covers build-machine workspaces; full Packer build orchestration from create remains deferred.


In Scope

  • Unified establishment API — CLI v0 + HTTP stub (create, get, list, destroy, recreate, snapshot, restore, extend-ttl, expire)
  • Profile catalog — six profiles: compose e2e/checkpoint, sandbox canary, vm-haskell-build, saas-stub, burst-sandbox
  • Extension platformext.compose-ssh, ext.vm-packer, ext.saas-stub; plugin contract in docs/meta-framework.md and docs/extension-sdk.md
  • Routing engineRouteSpec strategies (prefer-self-hosted, lowest-cost, lowest-latency, explicit); see docs/routing.md
  • Payments v0 — credits store, pre-create balance check, post-destroy debit for metered extensions; see docs/payments.md
  • Workspace checkpoints — snapshot index + extension hooks; see docs/snapshots.md
  • Host placement — profile placement + SANDBOXER_HOST overrides; sandboxer01 preferred, CoulombCore interim
  • Lifecycle + State Hub — transitions emit progress events; JSON stores at ~/.local/share/sandboxer/sandboxes.json and snapshots.json
  • Host telemetry — canary self-deploy, inspect host / inspect stale, reap-stale (SAND-WP-0008)
  • Capability registrycapability.execution.sandbox-provision (draft)
  • Sibling integration contractsdocs/integrations/ (glas-harness, wise-validator, snuggle-inventor)
  • Runbooks and smoke — compose-e2e, sandbox-canary; remote smoke scripts
  • Workplans and charter — ADR-001 files in workplans/, INTENT.md

Out of Scope

Concern Owner
E2e health checks, test execution, validation results wise-validator
Agent gateway, tools, memory glas-harness
Code generation, tech specs snuggle-inventor
Workplan / task state state-hub
Scheduling activity-core
SSH tunnels ops-bridge
SSH certificate issuance ops-warden
Canon and agent instruction canon the-custodian
Capability federation hub reuse-surface
Production on Railiance01 railiance-apps / domain repos
Real E2B / Modal / Daytona cloud APIs Future adapters (stub in-repo)
fin-hub billing export Future

sand-boxer consumes ops-bridge and ops-warden for reachability; it does not own tunnels or CAs.


Relevant When

  • Provisioning an isolated compose stack on CoulombCore / sandboxer01
  • Attaching a workspace on a pre-built VM (profile.vm-haskell-build)
  • Saving or restoring a workspace checkpoint (profile.compose-checkpoint)
  • Choosing self-hosted vs metered SaaS backend (profile.burst-sandbox)
  • Canary self-deploy or host inventory before placing workloads
  • activity-core, CI, glas-harness, or wise-validator need a sandbox handle
  • Discovering sandbox capability via registry/
  • Migrating off the-custodian/e2e-framework provision path

Not Relevant When

  • Running repo e2e tests end-to-end (use wise-validator validate run)
  • Local-only work with acceptable blast radius
  • Tunnel or cert operations alone (ops-bridge / ops-warden)
  • Task/workplan tracking alone (state-hub)

Current State

  • Status: v0 operational — self-hosted compose path proven on CoulombCore; routing, payments stub, and snapshots shipped
  • Workplans finished: SAND-WP-00010012 (0003/0004 in sibling repos)
  • Workplans ready: none (reuse-surface publish / sandboxer01 operator track)
  • Package: src/sandboxer/ — CLI, manager, extensions, routing, payments, snapshots, telemetry, HTTP API
  • Profiles: compose e2e/checkpoint, canary, vm-haskell-build, saas-stub, burst-sandbox, e2b-burst, modal-gpu, agent-dev, build, vm-packer-build, bwrap-local, claude-agent-dev-proof (candidate, not production)
  • Extensions: ext.compose-ssh, ext.vm-packer, ext.saas-stub, ext.e2b, ext.modal
  • Docs: meta-framework, extension-sdk, host-telemetry, routing, payments, snapshots, migration-gaps, migration-build-machines
  • Registry: capability.execution.sandbox-provision indexed (draft)
  • Tests: 172 pytest cases; make check green
  • Siblings: wise-validator validate run (SAND-WP-0003); the-custodian make e2e REPO= shim (SAND-WP-0004)

Latest gap analysis: history/2026-06-24-post-wp0007-intent-scope-gap-analysis.md
Gap analysis: history/2026-06-24-post-wp0007-intent-scope-gap-analysis.md
Ready workplans: none — gap analysis items complete; operator tracks remain.


What Is Possible Now

make setup && make install          # sandboxer CLI
sandboxer create                    # canary self-deploy (no args)
sandboxer create --profile profile.compose-e2e --input repo=/path/to/repo
sandboxer create --profile profile.vm-haskell-build --input vm=haskell-build --input repo=/path
sandboxer create --profile profile.burst-sandbox   # routes to saas-stub when needed
sandboxer get <id> / list / destroy / recreate
sandboxer snapshot <id> [--name LABEL]
sandboxer restore <snapshot_id>
sandboxer snapshots list / snapshots get <id>
sandboxer extend-ttl <id> --duration 2h
sandboxer expire [--apply]
sandboxer create --ttl 2h ...
sandboxer credits show / credits add <amount>
sandboxer inspect host / inspect stale / reap-stale [--apply]
sandboxer reachability show <id>
sandboxer create --profile profile.agent-dev --input repo=/path --actor agt --project glas-harness
sandboxer create --profile profile.build --input vm=haskell-build --actor agt --project snuggle-inventor
sandboxer create --profile profile.vm-packer-build --input packer_template=... --input vm_name=haskell-build
make smoke-remote                   # CoulombCore compose smoke (SANDBOXER_HOST)

# Full e2e validation (wise-validator, separate install):
validate run ~/activity-core

# Legacy operator entry (the-custodian):
cd ~/the-custodian && make e2e REPO=activity-core
  • State Hub lifecycle events on create/destroy/snapshot (when hub reachable)
  • HTTP API via uvicorn sandboxer.api.app:app (sandboxes + snapshots)
  • Operator runbooks under docs/runbooks/

What Is Not Possible Yet

  • TTL auto-expiry / extend_ttl enforcement — done (SAND-WP-0009)
  • Packer build orchestration from create — done (SAND-WP-0012)
  • Real E2B / Modal adapters — done (SAND-WP-0010)
  • Consumer profiles (agent-dev, build) — done (SAND-WP-0011)
  • Cross-host snapshot transfer
  • Formal ops-bridge tunnel attachment — done (SAND-WP-0011; descriptor only)
  • Dedicated sandboxer01 host (CoulombCore interim only today)
  • reuse-surface validate / federation publish workflow
  • .repo-classification.yaml — done (SAND-WP-0009)
  • fin-hub billing export — hook done (SAND-WP-0010); railiance-platform wiring operator

How It Fits

flowchart LR
  WV[wise-validator] -->|create/destroy| SB[sand-boxer]
  GH[glas-harness] -->|create| SB
  AC[activity-core] -->|when| WV
  AC -->|venue request| SB
  SB -->|provision| HOST[CoulombCore / sandboxer01]
  SB -->|lifecycle| SH[state-hub]
  SB -->|SSH reachability| OB[ops-bridge]
  TC[the-custodian] -.->|make e2e shim| WV
  TC -.->|provision| SB

Terminology

  • Profile — named sandbox recipe (extension binding, placement, TTL metadata)
  • Extension — backend adapter (provision, wait_ready, teardown; optional snapshot / restore_from_snapshot)
  • Establishment — create through ready (distinct from validation pass/fail)
  • Snapshot — point-in-time workspace checkpoint; restore creates a new sandbox
  • Route — extension selection policy when multiple backends qualify
  • Canaryprofile.sandbox-canary self-deploy with host telemetry
  • Actor types: adm, agt, atm

  • wise-validator — validation orchestration; one-way consumer of sand-boxer
  • the-custodian — legacy e2e-framework/; make e2e shim delegates to wise-validator (SAND-WP-0004)
  • ops-bridge / ops-warden — connectivity and identity consumers
  • state-hub — lifecycle visibility
  • reuse-surface — capability federation target

Provided Capabilities

Registered (draft): capability.execution.sandbox-provision — see registry/capabilities/execution.sandbox-provision.md.


Getting Oriented

Path Purpose
INTENT.md Charter and sibling boundaries
docs/meta-framework.md API, lifecycle, extension contract
docs/extension-sdk.md Extension author guide
docs/host-telemetry.md Canary and inventory
docs/routing.md Backend selection strategies
docs/payments.md Credits and metering
docs/snapshots.md Checkpoint snapshot/restore
docs/ttl.md TTL extend and expire/reap
docs/security.md Blast-radius vs intent enforcement
docs/migration-gaps.md Legacy cutover status
docs/integrations/ Consumer contracts
workplans/ ADR-001 work structure
history/ INTENT ↔ SCOPE assessments
AGENTS.md Session protocol