Official Python SDK for the RCAN robot communication protocol
Project description
rcan-py
Python SDK for the RCAN protocol — build robots that communicate securely, audit every action, and enforce safety gates locally.
Install
pip install rcan==0.6.0
Optional extras:
pip install rcan[http] # httpx for registry client
pip install rcan[crypto] # cryptography for Ed25519 signing
pip install rcan[all] # everything
Quick Start
from rcan import RobotURI, RCANMessage, ConfidenceGate
from rcan.audit import AuditChain, CommitmentRecord
from rcan.replay import ReplayCache
from rcan.qos import QoSLevel
from rcan.consent import ConsentRequest
# 1. Address a robot
uri = RobotURI.build(manufacturer="acme", model="arm", version="v2", device_id="unit-001")
# rcan://registry.rcan.dev/acme/arm/v2/unit-001
# 2. Gate on AI confidence before acting
gate = ConfidenceGate(threshold=0.8)
confidence = 0.91
if gate.allows(confidence):
msg = RCANMessage(
cmd="move_forward",
target=uri,
params={"distance_m": 1.0},
confidence=confidence,
model_identity="gemini-2.5-flash",
)
# 3. Replay attack prevention — deduplicate incoming messages
cache = ReplayCache(window_seconds=300)
if cache.is_replay(msg.msg_id):
raise ValueError("Replay attack detected")
cache.record(msg.msg_id)
# 4. Tamper-evident audit chain — every action sealed and linked
chain = AuditChain(secret="your-hmac-secret")
chain.append(CommitmentRecord(
action="move_forward",
robot_uri=str(uri),
confidence=confidence,
model_identity="gemini-2.5-flash",
safety_approved=True,
))
chain.verify_all() # raises if chain is tampered
# 5. Request human consent before a sensitive action
req = ConsentRequest(
action="open_gripper",
robot_uri=str(uri),
requester="operator-alice",
scope="control",
)
print(req.to_json())
What's in v0.6.0
| Module | Description |
|---|---|
rcan.message |
Core RCANMessage envelope with all v1.6 fields |
rcan.address |
RobotURI — parse, build, and validate RCAN robot addresses |
rcan.audit |
AuditChain + CommitmentRecord — tamper-evident HMAC-chained logs |
rcan.gates |
ConfidenceGate, HiTLGate — safety gates for AI-driven actions |
rcan.replay |
ReplayCache — sliding-window replay attack prevention (GAP-03) |
rcan.clock |
ClockSyncStatus — NTP clock sync verification (GAP-04) |
rcan.qos |
QoSLevel — FIRE_AND_FORGET / ACKNOWLEDGED / EXACTLY_ONCE (GAP-11) |
rcan.consent |
Consent wire protocol — request/grant/deny (GAP-05) |
rcan.revocation |
Robot identity revocation with TTL cache (GAP-02) |
rcan.training_consent |
Training data consent, GDPR/EU AI Act Annex III §5 (GAP-10) |
rcan.delegation |
Command delegation chain, max 4 hops, Ed25519-signed (GAP-01) |
rcan.offline |
Offline operation mode — ESTOP always allowed (GAP-06) |
rcan.fault |
FaultCode structured fault taxonomy (GAP-20) |
rcan.federation |
Federated consent — cross-registry trust, DNS discovery (GAP-16) |
rcan.transport |
Constrained transports — compact CBOR, 32-byte ESTOP minimal, BLE (GAP-17) |
rcan.multimodal |
Multi-modal payloads — inline/ref media, streaming (GAP-18) |
rcan.identity |
Level of Assurance — LoA policies, JWT parsing (GAP-14) |
rcan.keys |
Key rotation with JWKS-compatible KeyStore (GAP-09) |
rcan.config_update |
CONFIG_UPDATE protocol with safety scope enforcement (GAP-07) |
rcan.node |
NodeClient — resolve RRNs across federated registry nodes (§17) |
rcan.validate |
L1/L2/L3 conformance validation for configs, messages, URIs |
Protocol 66 Compliance
Protocol 66 is RCAN's safety layer. Key invariants enforced by this SDK:
- ESTOP always delivered —
QoSLevel.EXACTLY_ONCE, never blocked by QoS downgrade - Local safety wins —
offlinemodule enforces local limits even without cloud connectivity - Confidence gates run locally —
ConfidenceGatenever makes a network call - Audit chain required —
AuditChain.verify_all()before executing any flagged command
from rcan.offline import OfflineMode
from rcan.safety import SafetyInvariant
mode = OfflineMode()
mode.assert_estop_reachable() # raises if ESTOP path is blocked
CLI
# Validate a robot config (L1/L2/L3 conformance)
rcan-validate config myrobot.rcan.yaml
# Validate a RCAN message
rcan-validate message command.json
# Verify an audit chain
rcan-validate audit audit.jsonl
# Validate a Robot URI
rcan-validate uri 'rcan://registry.rcan.dev/acme/arm/v2/unit-001'
# Run all checks
rcan-validate all myrobot.rcan.yaml
Spec Compliance
Implements RCAN v1.6 — 587 tests, 0 skipped.
Covered sections: §1 Robot URI · §2 RBAC · §3 Message Format · §5 Authentication · §5.3 QoS · §6 Safety Invariants · §8.3 Replay Prevention · §8.4 Clock Sync · §8.5 Sender Type · §8.6 Key Lifecycle · §8.7 Level of Assurance · §9 Capabilities · §11 Behavior Scripts · §12 Command Delegation · §13 Revocation · §14 Offline Mode · §16 AI Accountability · §17 Distributed Registry · §18 Federation · §19 Constrained Transport · §21 Registry Integration
Ecosystem
| Package | Version | Purpose |
|---|---|---|
| rcan-py (this) | v0.6.0 | Python SDK |
| rcan-ts | v0.6.0 | TypeScript SDK |
| rcan-spec | v1.6.0 | Protocol spec |
| OpenCastor | v2026.3.17.1 | Robot runtime (reference impl) |
| RRF | v1.6.0 | Robot identity registry |
| Fleet UI | live | Web fleet dashboard |
| Docs | live | Runtime reference, RCAN, API |
Contributing
Issues and PRs welcome at github.com/continuonai/rcan-py.
Spec discussions: github.com/continuonai/rcan-spec/issues
License
MIT
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 rcan-1.2.2.tar.gz.
File metadata
- Download URL: rcan-1.2.2.tar.gz
- Upload date:
- Size: 131.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b64b8b1f8c188f6abd4ef9f6871ab201cf18cafeab9f442c81574eb7bd24aab
|
|
| MD5 |
dc60e8b5ba162cdc1d55eea7e9ab3db2
|
|
| BLAKE2b-256 |
f850616f52984d3e60b2d082531f5ef83c6e2b880f6d2b99583b33620763be21
|
File details
Details for the file rcan-1.2.2-py3-none-any.whl.
File metadata
- Download URL: rcan-1.2.2-py3-none-any.whl
- Upload date:
- Size: 100.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bded3e0cd1e9267355e9ee849c323a8adf8feb4d4cac81ee3225a93a2c46b7a1
|
|
| MD5 |
5ef91960ef741bb44ddb5efc3bf7c9f0
|
|
| BLAKE2b-256 |
176b8330f86e5f00b023cb03be1021af3b36d9d8844c1960ff7a7cadd71a8bcd
|