The RCAN Ecosystem: Python SDK, TypeScript SDK, and OpenCastor v2026.3.6.0
Update (March 13, 2026): RCAN v1.3 is now current — §18–§21 promoted to Stable, §21 (Registry Integration) live. rcan-py is now at v0.4.0, rcan-ts at v0.3.1, and OpenCastor at v2026.3.13.12. Registry moved to robotregistryfoundation.org. This post documents the v1.2 / v0.1.0 initial release day. See current versions →
Today I’m shipping three simultaneous releases that together form a complete open-source stack for building AI-accountable robots: rcan-py v0.1.0, rcan-ts v0.1.0, and OpenCastor v2026.3.6.0.
These aren’t independent tools — they’re designed to work together, implementing the same RCAN v1.2 protocol with a consistent API surface across Python and TypeScript, backed by a running robot runtime.
Why this matters
The robotics industry is headed toward a wall. Millions of AI-driven robots are being deployed — in warehouses, hospitals, construction sites, on public roads — without any standard way to:
- Address a specific robot uniquely across networks and manufacturers
- Audit what an AI model decided, when, at what confidence level
- Gate actions that the model isn’t sure enough about
- Prove to a regulator or insurer that safety was taken seriously
RCAN (Robot Communication and Addressing Network) is the protocol I’ve been building to solve this. I wrote about the ICANN parallel earlier this year. Today’s releases are the tooling that makes it real.
rcan-py v0.1.0
pip install rcan
The Python SDK covers the full RCAN v1.2 surface:
Robot addressing:
from rcan import RobotURI
uri = RobotURI.build(
manufacturer="acme", model="arm", version="v2", device_id="unit-001"
)
# rcan://registry.rcan.dev/acme/arm/v2/unit-001
AI confidence gating (§16):
from rcan import ConfidenceGate, RCANMessage
gate = ConfidenceGate(threshold=0.8)
confidence = 0.91 # from your AI model
if gate.allows(confidence):
msg = RCANMessage(
cmd="move_forward",
target=uri,
confidence=confidence,
model_identity="Qwen2.5-7B",
)
Tamper-evident audit chain (§16):
from rcan.audit import AuditChain
chain = AuditChain(secret="your-hmac-secret")
chain.append({"action": "move_forward", "robot_uri": str(uri), "confidence": 0.91})
print(chain.verify_all()) # True — HMAC-chained, forensic-grade
rcan-validate CLI:
rcan-validate config myrobot.rcan.yaml
# ✅ L1 — Addressing: passed
# ✅ L2 — Auth + confidence gates: passed
# ⚠️ L3 — hitl_gates not configured
# Result: L2
117 tests, Python 3.10/3.11/3.12. → GitHub · → PyPI
rcan-ts v0.1.0
npm install @continuonai/rcan-ts
The TypeScript SDK mirrors the Python API exactly — same class names, same method signatures, same mental model. Zero runtime dependencies (uses Node’s built-in crypto module).
import { RobotURI, RCANMessage, ConfidenceGate, AuditChain } from "@continuonai/rcan-ts";
const uri = RobotURI.build({
manufacturer: "acme", model: "arm", version: "v2", deviceId: "unit-001"
});
const gate = new ConfidenceGate(0.8);
if (gate.allows(0.91)) {
const msg = new RCANMessage({
cmd: "move_forward", target: uri, confidence: 0.91, modelIdentity: "GPT-4o"
});
const chain = new AuditChain("your-hmac-secret");
chain.append({ action: msg.cmd, robotUri: uri.toString(), confidence: 0.91 });
const { valid, count } = chain.verifyAll();
console.log(`Chain: ${valid}, ${count} records`);
}
Validation works the same way:
import { validateConfig } from "@continuonai/rcan-ts";
const result = validateConfig(myRobotConfig);
result.issues.forEach(i => console.error("❌", i));
result.warnings.forEach(w => console.warn("⚠️", w));
77 tests, Node 18/20/22. → GitHub
OpenCastor v2026.3.6.0
OpenCastor is the robot runtime that runs all of this on hardware. This release wires RCAN v1.2 deeply into the execution pipeline.
Ed25519 message signing
Every outbound action is now optionally signed with an Ed25519 key:
# myrobot.rcan.yaml
agent:
signing:
enabled: true
key_path: ~/.opencastor/signing_key.pem # auto-generated on first run
The key ID is logged at startup. Every commitment record in the audit chain includes the signature.
Multi-provider failover
agent:
provider: ollama
model: qwen2.5:7b
fallbacks:
- provider: anthropic
model: claude-haiku-3-5
on: [timeout, connection_error]
- provider: openai
model: gpt-4o-mini
on: [rate_limit]
The robot keeps thinking even when your primary AI provider is down.
Fleet group policies
fleet:
groups:
production:
robots: ["RRN-000000000001", "RRN-000000000002"]
policy:
agent:
confidence_gates: [{threshold: 0.92}]
Different confidence thresholds for production vs staging robots, resolved at runtime.
Browser-based wizard
castor wizard --web
# → http://localhost:8765
Full setup UI in the browser — hardware detection, provider selection, channel config, and robot registry registration (robotregistryfoundation.org). Built with zero extra dependencies; works from a phone on the local network.
Episode replay
castor memory replay --since 2026-01-01 --dry-run
castor memory replay --since 2026-01-01
After improving your consolidation pipeline (e.g., fixing bugs in the ALMA audit loop), you can backfill the knowledge that was missed in earlier episodes.
castor inspect
castor inspect RRN-000000000042
# 🤖 RRN-000000000042
# Registry: robotregistryfoundation.org
# Compliance: L2
# Chain: ✅ 147 records
One command to see registry entry, local config, live gateway status, commitment chain integrity, and RCAN compliance level.
The full stack
rcan-ts / rcan-py ← SDK (your app)
↓
RobotURI + RCANMessage ← addressing + commands
ConfidenceGate + HiTLGate ← RCAN §16 safety gates
AuditChain ← tamper-evident audit log
↓
OpenCastor runtime ← runs on the robot
(Ed25519 signing, failover, fleet policies, Prometheus)
↓
robotregistryfoundation.org ← global RRN, verification tiers
Everything is open source. The protocol spec is CC BY 4.0. The SDKs are MIT. The runtime (OpenCastor) is Apache 2.0.
What’s next
As of this writing (March 6), the registration API backend was the main unfinished piece — registration opened a pre-filled browser form rather than working programmatically. The registry has since moved to robotregistryfoundation.org with 5 seed robots registered. castor register and RegistryClient.register() programmatic registration is in active development.
I’m also in early contact with ISO/TC 299 WG3 (industrial robot safety standards) and looking at EU AI Act harmonized standards engagement. The August 2026 deadline for EU AI Act high-risk provisions is not far away.
If you’re building AI-driven robots, register yours and start using the protocol. The earlier you adopt, the less you’ll have to retrofit.