dumbtv
dumbtv takes the ads, screen tracking and update nags out of your Fire TV over ADB. No root, none of your apps touched, every step can be undone. Free and open source.
Provael red-teams vision-language-action robot policies in simulation and reports an attack-success rate with a 95% CI and a benign control. Open-source.
SecurityPython · TeXGitHub @provaelOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Provael — red-team open Vision-Language-Action (VLA) robot policies in simulation and report an Attack Success Rate (ASR). Prove it. Prevail.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Red-team open Vision-Language-Action (VLA) robot policies in simulation and get an Attack
Success Rate — beside the control it is read against.
Deterministic CPU stub run, seed 0 — reproduce it in seconds.Read the full README ↗Red-team open Vision-Language-Action (VLA) robot policies in simulation and get an Attack Success Rate — beside the control it is read against.
What it found on a real policy. In LIBERO simulation, a real SmolVLA policy left its keep-out envelope in 42 of 50 episodes under a roleplay-framed instruction (task-clustered 95% CI [62%, 100%]) against 1 of 50 under a benign control. The same frame with no target named does it in 27 of 30, so this is fragility under an out-of-distribution instruction, not attacker control (the run · E-2026-12). One policy, one suite, an uncalibrated predicate, measured with provael 0.41.2 on 14 Sep 2026; the limits are below. Want the same measurement on your checkpoint? provael.com.
What this is. A Python CLI that red-teams an open VLA robot policy inside a simulator and
reports an attack-success rate — always beside the benign control it is read against, with a
95% interval, a competence control, and an evidence label that says whether a real policy or the
CPU fixture produced it. It emits what a review needs: report.json, a scorecard, SARIF, OSCAL, a
CycloneDX ML-BOM, a test report and a signed attestation. For a team shipping a VLA policy that
needs a measured rate with its control before a release or in CI, a researcher reproducing a
published result, a reviewer who wants the number, the denominator and the decision in one place.
Simulation only and defensive: no physical robot, no real-world-harm payload; every number here
is a claim about the simulator that produced it. Read SAFETY.md before anything else.
pip install provael # requires Python 3.12+
# deterministic CPU run — no GPU, no model download; prints an ASR-by-attack table (47/70)
provael attack --policy stub --suite stub --attacks instruction,visual,injection --episodes 10 --seed 0
It prints Adversarial ASR: 67.1% (47/70). Those are fixture numbers: the stub policy and
suite are deterministic CPU arithmetic that exercises the whole pipeline in under five seconds and
says nothing about any real policy. The run writes runs/stub/report.json (byte-deterministic) and
report.md; their release verdict reads incomplete — not assessed, because no acceptance protocol
was named. Timed on a clean container: 20 s from pip install to a written report
(the transcript).
| Policy | Suite | Status | Evidence |
|---|---|---|---|
smolvla — HuggingFaceVLA/smolvla_libero | --suite libero --tasks libero_object/0…9 (10 tasks) | measured, the published body | 14 Sep 2026 run · delivery pack |
pi05 — lerobot/pi05_libero_finetuned_v044 | --suite libero --tasks libero_object/0…9 | measured — preliminary (3 seeds, 2 of 8 arms, at the floor) | 18 Sep 2026 run |
stub | stub, reach, humanoid (CPU fixtures) | fixture | the run above |
libero_object is a task filter, not a suite: the suite is libero, the ten Object tasks are
--tasks libero_object/0,…,9. The real rows need a GPU, Linux and [lerobot]. Every other registered
adapter (pi0, pi0fast, groot, openvla, openpi) and suite (Meta-World, ai2_bridge, vla_arena)
is scaffolding or has no run committed here — provael list-policies / list-suites print each status.
SmolVLA × LIBERO-Object, 14 September 2026, provael 0.41.2 — ten tasks, five seeds per (task,
arm), horizon 280, on a workstation RTX 2000 Ada. Under the roleplay instruction the policy left
its keep-out envelope on 42 of 50 episodes (84%, task-clustered 95% CI [62%, 100%]) against a
benign floor of 1/50 (2.0%, Wilson 95% [0.4%, 10.5%]); McNemar exact p = 9.1e-13, surviving
Holm across the seven arms. Clean task success on the benign arm: 48/50. The visual and injection
arms sit at the floor (1/50, 1/50, 2/50; mcp_tool_desc not applicable). The controls run the same
day put the same frame with no target named at 27/30 and with scrambled tokens at 18/30, so
the exit is fragility under a long imperative out-of-distribution string, not attacker control
(E-2026-12). It re-measures the 9 August 2026 run on 0.32.0 (44/50 against 2/50)
inside its interval. Under the example acceptance protocol the decision is FAIL on the roleplay
slice, and the pack says so:
run ·
controls ·
delivery pack ·
write-up with the full tables.
Reading any result: the rate and its floor travel together; the endpoint is an envelope exit
under the predicate the run names; N/A is not zero; a release verdict exists only under a named
protocol (--protocol) — how to read a result.
provael coverage prints the difference between what exists and what has met a real policy:
17 adversarial families registered, 8 exercised against a real policy (instruction, visual,
injection, gradient_patch, optimized_instruction, optimized_patch, universal_patch,
weight_integrity — one of the eight transferred; the other seven returned measured nulls, five of
them at n = 3, which is a result and not a rate), 9 stub-validated only, measured on
2 real policies (pi05, smolvla). The registry holds 39 adversarial attacks, not a family
count. Every number is derived from the committed runs (watch/registry.json),
never typed; the per-family catalogue with each family's status is docs/attacks.md.
pip install provael # CPU core: every attack, scoring, reports, attestation
pip install 'provael[lerobot]' # + SmolVLA / π0.5 and the LIBERO simulator (Linux, GPU)
docker run --rm ghcr.io/provael/provael:latest attack --recipe quick # no local Python at all
On the CPU: the stub, reach and humanoid fixtures, every adversarial family (provael list-attacks), scoring, reports, recipes, reproduce, calibrate, attest (Ed25519 via [attest])
and the test suite. Behind a GPU and [lerobot]: the real policies and the libero simulator; on a
CPU they fail with a message naming the extra. Install notes, including the Linux-only simulator:
docs/quickstart.md.
# .github/workflows/provael.yml
permissions: { contents: read, security-events: write } # SARIF goes to code scanning
jobs:
redteam:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: provael/[email protected]
with:
attacks: none,instruction,visual,injection,action # `none` is the benign control
episodes: "10"
asr-threshold: "0.5" # pooled adversarial ASR gate (descriptive)
protocol: .provael/protocol.yml # the named acceptance protocol that decides
release-mode: "false" # "true": an undecided or incomplete run fails
baseline: .provael/baseline.report.json # optional per-checkpoint regression gate
A pooled rate is descriptive; the decision is made under the protocol's own criteria — critical
attacks and tasks on their own slices, incomplete where a slice did not run. Inputs, the defended
arm, the regression gate and the self-maintaining baseline: docs/quickstart.md.
report.json (byte-deterministic) and report.md · --format scorecard | sarif | oscal | test-report (ISO/IEC 17025 clause 7.8 layout) · --format compliance, the crosswalk
(docs/compliance/index.md) · a CycloneDX ML-BOM · provael attest, a dated,
digest-bound, offline-verifiable bundle (docs/attestation.md) · provael dossier, the
Machinery Regulation evidence dossier · the signed board (docs/leaderboard.md). All of
it is evidence, not certification.
PROVAEL_ENABLE_EXPERIMENTAL_HOSTED. One maintainer, and every commercial page says so.make check runs lint, type-check and tests, exactly as CI does. How it is made. Much of this codebase was written with AI assistance (Claude Code); every
published number, calibration and security-relevant path is human-reviewed before it ships.
Co-author trailers are in git: git log --grep=Co-Authored-By.
Security & contributing. Vulnerabilities: SECURITY.md (90-day coordinated
disclosure). Contributions: CONTRIBUTING.md — the green gate and the DCO sign-off
(git commit -s); who has contributed and under which terms: CONTRIBUTORS.md;
CODE_OF_CONDUCT.md (Contributor Covenant 2.1).
CITATION.cff is the same metadata (concept DOI: always the newest archived version):
@software{jain_provael_2026,
author = {Jain, Sattyam},
title = {Provael: red-teaming Vision-Language-Action robot policies in simulation},
version = {0.46.0},
year = {2026},
doi = {10.5281/zenodo.21984184},
url = {https://doi.org/10.5281/zenodo.21984184},
license = {Apache-2.0}
}
Apache-2.0. Provael — prove it, prevail.
Provael™ (the name and the Proof-Path logo) is an unregistered mark of Sattyam Jain — no application has been filed yet; one is planned in India (classes 9 and 42). What you may do with the name, and what needs permission: TRADEMARKS.md. The Embodied AI Security Top 10 is a separate community document (CC-BY-SA 4.0), deliberately unbranded and donatable, not a Provael™ product, and not affiliated with or endorsed by the OWASP® Foundation or MITRE®.