Zu plugin-test gate: contract/interop gates + the adversarial red-team agent and out-of-band verdict observers
Project description
zu-redteam
The plugin-test gate and the adversarial red team — the machinery behind the capability-envelope philosophy and the red-team design (in the published docs). The red team is itself a Zu agent: Zu is the runtime on both sides of the gate.
This is test/CI infrastructure — it is not loaded by a deployed agent. Run it
with zu test-plugin <pkg> (install via pip install 'zu-runtime[test]').
What it does
A plugin is not "done" when its unit tests pass — it is done when it cooperates with other plugins and withstands an adversary inside a real Zu runtime. The gate runs the graded gates in order and renders one verdict:
zu test-plugin zu-tools
✅ unit PASS
✅ contract PASS — port shape + declared capability envelope
✅ interop PASS — stood up with >= 3 cross-category neighbours
✅ adversarial PASS — frozen corpus + directed probes; envelope held
⊘ container SKIP — Docker not present (production form of the same run)
The pieces
| Module | Role |
|---|---|
verdict.py |
The out-of-band, deterministic judge: egress / exfil / provenance / resources / neighbour-health observers. The attacker never certifies. |
corpus.py |
The frozen regression corpus — the §4 attacks as deterministic runs. Only ever grows. |
attacker.py |
The attacker agent + tools + fleet. ScriptedAttacker (deterministic, CI); LiveAttacker (opt-in frontier discovery, ZU_REDTEAM_LIVE=1). |
harness.py |
Stands a target up in a real in-process Zu run and captures it for the observers. |
contract.py |
Port/contract conformance (shape, types, declared envelope). |
gate.py |
Orchestrates the gates → GateReport; the entry point zu test-plugin calls. |
Determinism
Discovery (a live frontier attacker) is non-deterministic by design; a discovered
breach is frozen into corpus.py and replayed deterministically thereafter — so
CI stays reproducible while the corpus only grows. The container gate is the
production form of the same in-process run (same observers, same verdict).
Tests
uv run pytest packages/zu-redteam — offline, deterministic. The suite proves the
gate both passes a safe plugin and fails an unsafe one (a tool that
under-declares egress, or leaks a planted secret).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zu_redteam-0.2.3.tar.gz.
File metadata
- Download URL: zu_redteam-0.2.3.tar.gz
- Upload date:
- Size: 50.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
55979d3012f0fefc65173808e07daea0c828fcb6ab457e9514d207240c73ad92
|
|
| MD5 |
1a105804faa90d78b184198253e0d9d9
|
|
| BLAKE2b-256 |
b5916c2383f340e71b308bd73aa2e4dc2db390e8ab1afcf2acce5c55117b4c18
|
File details
Details for the file zu_redteam-0.2.3-py3-none-any.whl.
File metadata
- Download URL: zu_redteam-0.2.3-py3-none-any.whl
- Upload date:
- Size: 46.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c306d9b19f2f1175fd22213cc4a9000ae281abd8504a1883f732567c8c995b76
|
|
| MD5 |
a23a774f2eb4d05ef3a7ebfdc5b93d74
|
|
| BLAKE2b-256 |
174bfa3cec7a23c50514708a94ef90effa1f1fe741dbb89734a05978a2cad187
|