Skip to main content

Safety Harness for Physical AI

tests PyPI License: Apache 2.0

A perception-grounded safety harness for physical AI: a default-deny precondition gate for physical actuators. Every action a robot proposes — grasp, place, reach, anything else you register — must earn a PERMIT from measured, structured evidence before it executes. No evidence, or a failed check, or an adapter that raises: BLOCK. Permission, not detection.

Full design spec, architecture, worked examples, test/validation record, and roadmap: Perception-Grounded Safety Harness for Physical AI — design doc.

Status

Reference implementation, not yet independently assessed. Validated against two robots (a Franka Panda arm; an ANYmal-C quadruped) in one simulator (Isaac Lab), with 100 automated unit/fuzz/mutation/black-box/stress tests and 7 live hazard-scenario recordings. It has not been reviewed by a functional-safety assessor against IEC 61508, ISO 13849, or ISO 10218/TS 15066 — see the design doc's Scope & Non-Goals section for what's out of scope today (joint-space kinematic checks, certified numeric thresholds, data-protection handling of logged human-position data). Treat this as engineering evidence, not a certification.

What's here

  • safety_harness/schema.py — the data contract (WorldState, Action, Decision, and friends). SCHEMA_VERSION tracks this contract specifically; bump it deliberately (see the design doc's Version History).
  • safety_harness/engine.py — ActuatorGate.gate(), the single decision entry point.
  • safety_harness/preconditions.py — the registered precondition checks (24 at last count: object/target safety, placement, agent proximity incl. ISO/TS 15066, robot self-limits, environmental signals).
  • safety_harness/action_schema.py — the YAML-driven registry mapping action types to the checks they must pass (configs/example_action_schema.yaml is the reference wiring).
  • tests/ — unit tests, mutation/random-fuzz tests, and reflection-driven black-box contract tests.

Robot-specific behavior lives entirely behind four adapter interfaces (PerceptionAdapter, DynamicsAdapter, FallbackController, Logger) so the engine and checks are robot-agnostic. Only an Isaac Lab / Franka adapter exists today.

Install & test

pip install safety-harness

Or straight from GitHub (e.g. for an unreleased fix):

pip install git+https://github.com/naganumakr/safety-harness.git

Or for local development (editable, so edits to safety_harness/ take effect immediately):

git clone https://github.com/naganumakr/safety-harness.git
cd safety-harness
pip install -e .
python -m unittest discover -s tests -p "test_*.py"

Usage

from safety_harness import ActionSchemaRegistry, ActuatorGate
from safety_harness.adapters import FreezeInPlaceFallback, InMemoryLogger
from safety_harness.adapters.isaac_lab import (
    IsaacLabCubeStackPerceptionAdapter,
    IsaacLabCubeStackDynamicsAdapter,
)

schema = ActionSchemaRegistry.from_yaml("configs/example_action_schema.yaml")
gate = ActuatorGate(
    perception=IsaacLabCubeStackPerceptionAdapter(...),   # swap for your own stack's adapter
    dynamics=IsaacLabCubeStackDynamicsAdapter(...),
    fallback=FreezeInPlaceFallback(),
    logger=InMemoryLogger(),
    schema=schema,
)

decision = gate.gate(proposed_action)  # -> Decision(verdict=PERMIT|BLOCK, ...)
if decision.verdict.name == "PERMIT":
    robot.execute(decision.action)
else:
    robot.execute(decision.action)  # the fallback action FreezeInPlaceFallback produced

Nothing here is Isaac-Lab-specific except the two adapter classes — swap those for adapters targeting your own robot stack and the engine, checks, and tests are unchanged. See "Contributing an adapter" below.

License

Apache License 2.0 — see LICENSE and NOTICE. The engine, the adapter interfaces, and the conformance test suite are all open under this license: the goal is for any robot maker to implement the four adapters for their own stack and run the same conformance suite against it, not to license the core code per-implementation. See the design doc's Release & Distribution section for the reasoning and the certification model this enables.

Contributing an adapter

  1. Implement PerceptionAdapter, DynamicsAdapter, FallbackController, and Logger for your stack (see safety_harness/adapters/isaac_lab.py for the reference shape).
  2. Run the black-box and fuzz test suites against your adapter's WorldState/PredictedTrajectory output — they're written against the interfaces, not the Isaac Lab implementation, so they should run unmodified.
  3. Open an issue or PR with your results. Passing the conformance suite is what "compliant adapter" means here — there's no separate certification process yet, but that's the intent (see the design doc's Roadmap).

Metadata

Release files for safety-harness 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for safety-harness 0.2.3
File Size Uploaded
safety_harness-0.2.3.tar.gz 52.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for safety-harness 0.2.3
File Interpreter ABI Platform
safety_harness-0.2.3-py3-none-any.whl Python 3 none any Details

Total release size: 87.8 kB

Release files / safety_harness-0.2.3.tar.gz

Download URL safety_harness-0.2.3.tar.gz
Size 52.0 kB
Tags Source
SHA-256 checksum
How to use checksums
1785cdd6141e31c75d1f45c4a5b970dad231a3656f663f4328ea8e4145e131ed
BLAKE2b-256 checksum
How to use checksums
86ad85e83535779e0299a0d96cdc733b7ebb42935d96ff3943514d72852feb5e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.

Transparency log

Release files / safety_harness-0.2.3-py3-none-any.whl

Download URL safety_harness-0.2.3-py3-none-any.whl
Size 35.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3c5e8c2f74cbfe5b5dd2cabb179b8e33ee2b617cbee5e98862a70060a4e9f53b
BLAKE2b-256 checksum
How to use checksums
71d79474ddeaee6539dadfffa9f45e312f7a58bafe74a2f8f812eb0070959b80
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.13

2 release files

0.3.6

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.4

2 release files

This release

0.2.3 This release

2 release files

0.2.2

2 release files

0.2.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page