More

Reference

Every number in one place, checked against the source. For explanations, follow the links.

The box#

Settingstdlib (default)data
Imagepython@sha256:70729b46c69b4f1e97c4822c1af3df53a1476cf5ddc6c087c0c10bc3a5678c2f, linux/arm64, never pulled at run timeBuilt once by pybox setup --with data from that image plus hash-locked numpy 2.5.4, pandas 3.0.6, matplotlib 3.11.2 and their dependencies (pybox/images/data.lock). Your own images (pybox image build) get the same limits. Each is checked against its recorded image ID and recipe SHA-256 before every run
Memory (and memory + swap)128 MiB512 MiB
Processes3264
CPU0.5 core (a rate: about 1 CPU-second in 2 s)1 core
First processtimeout -s KILL <timeout_s + 1> python -I -B -u -; for runs that move files, … python -I -B -u -c <fixed helper>
User10000:10000, all capabilities dropped, no-new-privileges, default seccomp
FilesRead-only root; /tmp 16 MiB (64 MiB for runs that move files), no executables, no device files; no mounts
NetworkNone
Open files128
LogsEngine logging disabled

Time#

BudgetValue
Mac deadlineup to 30 s (default 2)
Box timerMac deadline + 1 s
Create / start / inspect / query / stop / remove5 / the run's deadline (at least 2) / 2 / 2 / 2 / 3 s
Whole cleanup15 s (one retry after an interruption gets another 15 s)
Box expiry label120 s after the run's identity is created
Settling an unconfirmed runallowed from expiry + 60 s
Kernel watchermust be ready within 1 s; 64 samples, 0.05 s apart for the first second, then spread over a longer run; runs at most the deadline + 4 s (at least 6 s); reached by checked direct ssh, or colima ssh as a fallback
Final-reading pause (opt-in runs)0.12 s, or one sampling gap plus 0.07 s above 2 s; never past the deadline
MCP supervisor45 s at a 2 s ceiling; above that, the engine's worst case plus 5 s

Sizes#

WhatCLI and PythonMCP
Program source65,536 bytes65,536 bytes
Output kept per stream1–65,536 bytes (default 65,536)1–8,192 bytes (default 4,096)
Files in64 files, 8 MiB in total16 files, 256 KiB in total
Files back64 files, 8 MiB in totalListed in full; 48 KiB of contents
Receipt delivered—64 KiB (output trimmed and flagged to fit)
Incoming message / response—512 KiB / 256 KiB
Calls / messages per session—32 / 256

Receipt layout#

KeyContents
schema_version1
identity, container_id, submission.source_sha256Which run, which box, which program
configuredWhat was asked for
observedpolicy_verified_before_start, effective_policy, engine_state, resources, termination
capturestdout, stderr, output_complete, *_truncated: untrusted
lifecyclelast_phase, cancelled, timeouts, timing
cleanupstatus, removed, reconciliation summary
clock_domains, unknownWhich clock each time uses; what can't be known
filesFor runs that move files: inputs and outputs (name, bytes, SHA-256), anything skipped, transfer errors. null otherwise
explanationsEvidence-tagged reasons (codes)

Files PyBox creates#

PathWhat it is
~/.pybox/runtime/Everything PyBox owns. Private to you (0700)
…/colima/The private VM profile pybox and its disk
…/colima/_lima/_config/override.yamlTurns off port forwarding for this VM
…/docker/config.jsonAn anonymous Docker config with no stored credentials
…/installation.jsonThis installation's random owner ID, used to label boxes
…/images.json, …/images.lockIDs and recipe fingerprints of locally built images (private, written only by setup and pybox image, one at a time)
…/recipes/NAME.lockThe saved, normalized lock file of each image you built
…/attempts/Notes written before each box is built
…/lifecycle.lockLets one run in at a time

Requirements#

  • macOS on Apple Silicon (arm64). Anything else is refused.
  • Python 3.11 or newer. On older versions some timestamps can't be read and labels fall back to UNKNOWN.
  • colima and docker from /opt/homebrew/bin or /usr/local/bin only. $PATH is never searched, and the binaries must not be writable by other users.

Source map#

FileResponsibility
pybox/container.pyPaths, guards, rules, the run lifecycle, cleanup
pybox/runtime_setup.pysetup, vm, doctor
pybox/_observe.sh, observation.pyThe kernel watcher and its strict parser
pybox/inspection.pyThe receipt
pybox/mcp.py, mcp_policy.pyThe MCP server and its limits
pybox/repair.py, nim.pyThe AI repair loop and its model client
pybox/runner.pyThe unsealed learning runner

Checked against the source on 21 October 2026.

esc