Metadata-Version: 2.4
Name: nrprotocol
Version: 1.0.0
Summary: NRP — Node Reach Protocol. AAP for the physical world.
License: MIT
Project-URL: Homepage, https://nrprotocol.dev
Project-URL: Repository, https://github.com/ElmadaniS/nrp
Keywords: nrp,aap,physical,robot,iot,protocol,ai,safety
Classifier: Development Status :: 3 - Alpha
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: System :: Hardware
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: aap-protocol>=0.1.0
Provides-Extra: test
Requires-Dist: pytest>=8.0; extra == "test"
Dynamic: license-file

<div align="center">

# NRP — Node Reach Protocol

**AAP for the physical world.**

[![PyPI](https://img.shields.io/pypi/v/nrprotocol?color=2563eb)](https://pypi.org/project/nrprotocol/)
[![License: MIT](https://img.shields.io/badge/License-MIT-2563eb.svg)](LICENSE)
[![Tests](https://img.shields.io/badge/tests-22%20passed-2563eb.svg)](tests/)

[Website](https://nrprotocol.dev) · [AAP Spec](https://aap-protocol.dev) · [Halyn](https://halyn.dev)

</div>

---

NRP implements the [AAP spec](https://aap-protocol.dev) for physical nodes:
robots, IoT sensors, industrial machines, drones, vehicles.

## The Physical World Rule

For nodes where actions have irreversible physical consequences,
**Autonomous (Level 4) is forbidden by spec.** Not configurable. Not overridable.

## 4 methods. Any device.

```python
from nrp import NRPDriver, NRPManifest, NRPAddress, ShieldRule, ShieldOperator

class MyRobot(NRPDriver):
    def manifest(self):
        return NRPManifest(
            address=NRPAddress.parse("nrp://factory/robot/arm-1"),
            description="6-DOF robot arm",
            version="1.0.0",
        )
    def observe(self): ...       # read state — no side effects
    def act(self, action, params): ...  # execute action
    def shield_rules(self):      # unbreakable constraints
        return [
            ShieldRule("force_n", ShieldOperator.MAX, max_value=50.0, unit="N"),
        ]
```

## AAP Ecosystem

| Layer | Project | Role |
|-------|---------|------|
| Spec | [AAP](https://aap-protocol.dev) | Protocol definition |
| Physical | **NRP** (this) | AAP for robots, IoT, machines |
| Full system | [Halyn](https://halyn.dev) | Complete demonstration |

## License

MIT
