io42 lab ARCH-0001 · Rev A
System Architecture · Draft

Agents propose. The safety layer decides.

IO42 wires LLM agents to robot fleets through MCP, with ROS2 as the execution substrate. Agents call bounded semantic tools — never actuators — and every call is stamped so a decision can be replayed against the sensor data that produced it.

DocumentARCH-0001
RevisionA — Draft
StatusOpen for review
Domains4
01 / Control Path

One spine, top to bottom

Every command travels this path before reaching an actuator. Telemetry and reasoning traces travel back up it, tagged with a single correlation ID.

LLM Agents

Tier 01

Single-robot and fleet-coordinator agents. Neither holds a direct robot endpoint — every request starts here and ends at the gateway.

Single-Robot AgentFleet Coordinator Agent
MCP calls

Fleet Gateway

Tier 02 · Control Plane

The only address an agent ever calls. Discovers live robots, locks actuators per task, routes validated calls to the right domain server.

DiscoveryAuth & LockingCommand Routing
→ traces every call to Tier 07
Capability schema

Robot Registry

Tier 03

URDF merged with a platform capability manifest, then versioned. New robot or new capability produces a new schema, not rewritten code.

URDF ParserCapability ManifestVersioned Schema Store
→ generates the tool schemas consumed by Tier 04
Generated tools

MCP Server Domains

Tier 04 · Control Plane

Generated per robot from its capability descriptor. A fixed-base arm simply has no mobility domain to call.

PerceptionMobilityManipulationDiagnostics

Perception Backends

Tier 05

YOLO for speed, CLIP for open vocabulary, VLM for scene reasoning — normalized to one schema and projected into robot frame before an agent sees them.

YOLOCLIPVLMFrame Projection · tf
→ backs the perception domain only · output is advisory
▲ Advisory · agent reachable Safety Boundary Deterministic execution ▼

Safety & Execution Layer

Tier 06 · ROS2

The only layer with actuator access. Validates every goal against deterministic sensors before Nav2 or MoveIt2 moves anything.

Kinematic / Safety ValidationNav2 · MoveIt2 · ControllersHardware Drivers
→ streams telemetry to Tier 07
rosbag2 + trace join

Telemetry & Trace Bus

Tier 07

Every MCP call and every sensor frame, joined by one episode_id — the join that makes agent behaviour debuggable and trainable.

Agent Trace Storerosbag2 / Sensor StoreCorrelation Engine
Pattern mining

Rules & Automation Engine

Tier 08

Mines the trace store for repeat patterns and exports them as behaviour trees. Mature behaviours graduate off the agent path entirely.

Pattern MiningBehaviour Trees / FSMsReactive Triggers
→ returns validated behaviours to Tier 06 · no agent in the loop
02 / Domain Spec

Four tool families

All generated from the same registry. A robot exposes only the domains its manifest declares.

DomainExample toolsROS2 backing
Perceptiondescribe_scene · detect_objects · locate_objectPerception stack + tf
Mobilitynavigate_to · follow_path · get_pose · dockNav2
Manipulationpick · place · move_to_pose · graspMoveIt2
Diagnosticsget_health · get_battery · run_self_testDiagnostics aggregator
03 / Walkthrough

Pick up the wrench

A single task, traced end to end — including the part where perception is unsure and the agent asks again.

  1. Task starts

    Coordinator agent generates an episode_id and calls gateway discovery.

  2. Low-confidence detection

    detect_objects("wrench") returns a CLIP hit below the confidence floor.

  3. Second opinion

    Agent calls describe_scene() for a VLM read before committing to a grasp.

  4. Frame-projected pose

    Perception returns a pose_3d already resolved into base_link.

  5. Command issued

    Agent calls pick(object_id) on the manipulation domain.

  6. Validated execution

    Safety layer checks reach and force limits; MoveIt2 plans and executes.

  7. Everything logged

    Calls, confidences, trajectory and force-torque land under one episode_id — later mined into a standing rule for low-light picks.

04 / Principles

What we refuse to compromise

Five rules that decide most arguments before they start.

Bounded macros

Agents call move_to_pose. Never raw torque.

Perception is advisory

Deterministic sensors are truth. No exceptions.

One correlation ID

episode_id threads MCP calls, ROS goals and rosbag windows.

Coarse tools, fine logs

Simple surface for agents, full resolution underneath for mining.

Versioned schemas

Old traces stay replayable as capabilities evolve.

05 / Open RFIs

Unresolved

Four decisions still open. Each changes the shape of the control plane.