Skip to main content

The RCAN Ecosystem: Python SDK, TypeScript SDK, and OpenCastor v2026.3.6.0

5 min read By Craig Merry
RCAN Robotics AI Safety OpenSource Release

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.

→ GitHub · → Release notes


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.

rcan.dev/quickstart →