Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Version-aware guidance for PufferLib reinforcement-learning environments, vectorization, policies, PuffeRL training, evaluation, and safe checkpoint review. Use when adapting Gymnasium/PettingZoo environments to published PufferLib 3.0.0 or working with the redesigned native 4.0 source line.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 238% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 70% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 55% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 223% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 57% | 0% |
Use PufferLib with an explicit version profile. Upstream currently has two incompatible surfaces:
| Profile | Status on 2026-07-23 | Main use | |---|---|---| | pufferlib==3.0.0 | Latest stable PyPI release, published 2025-06-23 | Python/Gymnasium/PettingZoo emulation, pufferlib.vector, Torch PuffeRL | | source 4.0 | Upstream default branch; not the latest stable PyPI artifact | Native C Ocean environments, native CUDA trainer, optional Torch fallback |
Do not combine 3.0 imports with 4.0 config/CLI examples. The 4.0 redesign removed the 3.0 emulation, vector, and pytorch modules from the current package tree.
only allowlisted built-ins and slug identifiers.
extension, ROM, map, checkpoint, or pickle file.
attestations, and build hooks. Sandbox native builds and first execution.
render size, and wall time.
disclosure acknowledgment, and separate artifact-upload approval.
logger configuration. Never print them.
.env.is not proof of safety.
All bundled CLIs are dependency-free and emit strict JSON:
bashpython3 scripts/env_template.py --help python3 scripts/env_contract_validator.py python3 scripts/benchmark_vectorization.py --backend serial python3 scripts/train_template.py python3 scripts/validate_plan.py python3 scripts/repro_plan.py
Defaults are synthetic, deterministic, bounded, local, CPU-only, no-network, and dry-run where training would otherwise occur.
PyPI supplies only pufferlib-3.0.0.tar.gz:
textsha256: 7df3a3e3f5f894d78d2a1f5374097890aec01473183e748abefe4f3faa10eaa9 Requires-Python: >=3.9
After source/build review, create a pinned uv project:
bashuv venv --python 3.11 uv add --exact --no-sync "pufferlib==3.0.0" uv lock uv sync --frozen
Commit pyproject.toml and uv.lock; verify the archive digest and every resolved dependency. The source build can compile native code and fetch build assets, so resolve/build in a sandbox without credentials or sensitive mounts. The uploaded metadata does not pin Torch or CUDA; do not claim a supported CUDA matrix that PyPI does not declare.
The reviewed branch head on 2026-07-23 was:
text25647630e1b15330bb3153a5a0d3ff8d234c3acf
Pin the commit, not branch 4.0:
bashuv add --no-sync \ "pufferlib @ git+https://github.com/PufferAI/PufferLib.git@25647630e1b15330bb3153a5a0d3ff8d234c3acf" uv lock
The current package declares Python >=3.10 and Torch >=2.9. Upstream PufferTank currently uses Ubuntu 24.04, Python 3.12, and an NVIDIA CUDA 13.0.2/cuDNN development image with the cu130 Torch index, but does not pin the exact Torch wheel or all system packages. Treat it as a reference, not a complete lock. Never execute a remote installer directly from a pipe.
Read references/training.md before any installation or build.
Gymnasium reset returns (observation, info). Step returns:
python(observation, reward, terminated, truncated, info)
Validate spaces, shapes, dtypes, finite rewards, booleans, reset-before-step, reset-after-end, seeding, and cleanup. terminated is an MDP terminal; truncated is an external cutoff such as a time limit. Preserve the distinction for bootstrapping and metrics.
bashpython3 scripts/env_contract_validator.py \ --steps 64 --episodes 8 --seed 42
Published 3.0 uses explicit wrappers:
pythonimport pufferlib.emulation wrapped = pufferlib.emulation.GymnasiumPufferEnv(reviewed_gymnasium_instance)
For a reviewed PettingZoo Parallel environment:
pythonwrapped = pufferlib.emulation.PettingZooPufferEnv(reviewed_parallel_instance)
There is no supported 3.0 pufferlib.emulate(...) shortcut matching the old skill. Read references/environments.md and references/integration.md.
Published 3.0 PufferEnv requires single_observation_space, single_action_space, and num_agents before super().__init__(buf). It uses in-place vector buffers and returns separate terminal/truncation arrays plus a list of info dictionaries.
Current 4.0 uses C bindings. Start from upstream ocean/squared (single-agent) or ocean/target (multi-agent), build one environment in local/sanitized mode, and verify every buffer size/type/index before optimization.
Published 3.0:
pythonimport pufferlib.vector vecenv = pufferlib.vector.make( reviewed_creator, backend=pufferlib.vector.Serial, num_envs=4, seed=42, )
Move to Multiprocessing only after serial traces pass. Record num_envs, num_workers, batch_size, zero-copy mode, start method, agent count, masks, and actual returned shapes. For multi-agent environments, batch length is based on agent slots, not necessarily num_envs.
Current 4.0 config instead uses:
ini[vec] total_agents = 4096 num_buffers = 2 num_threads = 16
Read references/vectorization.md. Benchmark fixed work with warmup and at least three repeats; report simulation and end-to-end training SPS separately. The bundled benchmark measures only its synthetic harness.
Published 3.0 policies are Torch modules sized from single_observation_space/single_action_space. Stable recurrent composition uses encode_observations and decode_actions; structured emulation uses pufferlib.pytorch.nativize_dtype and nativize_tensor.
Current 4.0 Torch fallback composes:
pythonpufferlib.models.Policy(encoder=encoder, decoder=decoder, network=network)
It provides MLP, MinGRU, LSTM, and GRU network choices; --slowly selects this fallback instead of the native backend. Check output/state shapes, masks, finite values, gradients, and eager-versus-compiled behavior. See references/policies.md.
Published 3.0 trainer import:
pythonfrom pufferlib import pufferl trainer = pufferl.PuffeRL(train_config, vecenv, policy)
Current 4.0 CLI:
bashpuffer train ENV_NAME puffer eval ENV_NAME --load-model-path EXACT_TRUSTED_PATH puffer sweep ENV_NAME
Generate a plan instead of launching by default:
bashpython3 scripts/train_template.py \ --profile pypi-3.0.0 \ --environment synthetic \ --device cpu \ --total-timesteps 10000
Validate a custom strict-JSON plan:
bashpython3 scripts/validate_plan.py --root . --config plan.json
The schema rejects secret-bearing keys, unbounded resources, dotted environment paths, invalid vector divisibility, mixed-version options, and coupled train/eval seeds. See references/training.md.
PufferLib 3.0 exposes W&B and Neptune; current 4.0 CLI exposes W&B. Both are optional external services. They may transmit configuration, metrics, source metadata, hardware telemetry, output, and approved artifacts, with privacy, retention, access-control, and cost implications.
WANDB_API_KEY.NEPTUNE_API_TOKEN.The planner requires both:
bashpython3 scripts/train_template.py \ --logger wandb \ --enable-external-logging \ --acknowledge-external-disclosure
It reports only the required variable name and never reads its value.
PufferLib 3.0 and the 4.0 Torch fallback use Torch serialization; current native 4.0 writes opaque .bin weights. PyTorch warns that untrusted models are programs and that torch.load uses unpickling.
bashpython3 scripts/inspect_checkpoint.py checkpoint.pt \ --root . \ --expected-sha256 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
The inspector hashes and classifies only. It does not call torch.load, import pickle/Torch, inspect archive members, or extract files. Verify source, license, architecture, environment revision, sidecar metadata, and checksum before any sandboxed load. Never use latest in a reproducible evaluation.
scripts/env_template.py — deterministic synthetic Gymnasium-style template.scripts/env_contract_validator.py — bounded contract and seed checks.scripts/benchmark_vectorization.py — capped serial/spawn synthetic benchmark.scripts/train_template.py — non-executing 3.0/4.0 training-plan generator.scripts/validate_plan.py — strict config/resource/security validator.scripts/inspect_checkpoint.py — metadata/hash inspection without deserialization.scripts/repro_plan.py — separate-seed evaluation and benchmark plan.references/environments.md — Gymnasium, stable PufferEnv, emulation, native C.references/vectorization.md — backends, shapes, start methods, benchmarks.references/policies.md — stable/current policy contracts and state safety.references/training.md — installs, config, CLI, PuffeRL, eval, logs, checkpoints.references/integration.md — migration matrix, third-party and credential safety.released 2025-06-23; checked 2026-07-23.
digest/dependencies; checked 2026-07-23.
checked 2026-07-23.
implementation; checked 2026-07-23.
— CUDA/Python reference; checked 2026-07-23.
Reinforcement Learning Journal, 2025; use only for its stated benchmarks.
submitted 2024-06-18; describes an earlier API/performance profile.
Other measured skills in the registry, with their headline benchmark lift.