Robotics & Autonomous Systems

A deterministic gate for agents that command hardware.

In robotics, UAVs and autonomous systems, language models plan missions, interpret operator commands and summarise telemetry. Here a tool call is a physical action. It may be a motion, a grasp or a change of flight path. Thulpar keeps the tool rails deterministic. Cedar authorisation and the argument schema decide within milliseconds. An unsafe command is denied, speed and area limits are checked as facets, and an action that needs operator approval becomes a hold. The model judge runs only asynchronously.

Policy template

tr-defence

Recommended install

Air-gap or edge install, Starter tier, deterministic rails with an async judge. A pack derived from tr-defence.

Surfaces
MCP proxyCheck API
Regulatory basis
  • SHGM UAV Instruction · defence programme security rules
  • ISO 10218 / ISO 13482 (robot safety) context
  • EU AI Act Annex III (high risk)
Policy template

The real-time boundary

A motion command cannot wait for an LLM judge. The gate has to be deterministic.

Watch the runs →
Runs

The scenarios below are derived from the product’s real rules.

Every scenario is an agent run written to the product’s real rules. It shows the stage, the rails, the decision, the finding, the approval and the ledger entry step by step.

4 scenarios →
Robotics & Autonomous Systems

What comes up in practice

The real-time boundary

A motion command cannot wait for an LLM judge. The gate has to be deterministic.

Command injection

Text on a sensor label or in a mission brief must not be read as a new command.

Black-box recording

After an incident, the chain of what the agent saw, proposed and did has to be immutable.

Runs

4 scenarios

The player opens on the flagship scenario. Pick the others below.

Warehouse robot-fleet command assistant · Fleet command assistant · MCP proxymcptr-defencebaslangic
Decision trailFleet Commander · qwen3-8b · llama.cpp · edge server
S
01tool_callsystem
The proxy receives tools/list: 4 tools; schema hashes match the pinned version, the descriptions are clean.
U
02inputuser
“Take R-07 to rack C-14, pick pallet 3, be quick.”
A
03tool_callagent
The robot:move {robot: "R-07", target: "C-14", speed_mps: 2.4, route: ["Z-2", "C"]} call.
A
04tool_callagent
The rebuilt command: speed_mps 1.4, route via corridor K-1; both facets within limits.
A
05tool_callagent
robot:grasp {robot: "R-07", pallet: 3}; fleet:status shows 1 person in C-14 at that moment.
S
06tool_callsystem
The floor supervisor clears the zone and approves in 2 minutes; the run resumes, the grasp executes.
M
07outputmodel
To the operator: the move made, the command denied, the grasp held; all three on the ledger’s hash chain.
A
08agent_traceagent
The trajectory goes to the async judge (a separate judge node): no goal drift, no chained commands.
Thulpar · Rails

Speed and zone limits decide in ms on robot:move / robot:grasp calls; a human-occupied zone waits for approval.

robot:moverobot:graspfleet:statuszones:list
Controls: GR-TOOL-01 · GR-TOOL-02 · GR-TOOL-03 · GR-RES-01 · GR-LOG-01
Evidence ledger0000…0000
Simulation · runs in your browser · no request leaves the pageadded latency: 0 ms · 8 steps · SHA-256 chain
Controls exercised in these scenarios

11 GR-*

idcontrolOWASPrails
GR-TOOL-01Tool-call privilege policy (default deny)LLM06 / ASI02, ASI03 / MCP02tool.authz, tool.args
GR-TOOL-02Durable human approval on high-impact actions, four eyesLLM06 / ASI02, ASI09labels.sink
GR-TOOL-03Tool schema pinning / diff / quarantine (rug-pull)LLM03 / ASI04 / MCP03, MCP04tool.schema_pin
GR-RES-01Per-run rate/cost/loop limits, circuit breakerLLM10 / ASI08budget
GR-LOG-01Tamper-evident event log (model/tool/policy/approval/hit), ≥ 6 months, auditor export— / — / MCP08
GR-INJ-02Indirect injection from tool/RAG output: untrusted label, no new tool call without policyLLM01, LLM08 / ASI01, ASI06 / MCP06, MCP10injection.indirect, file.hidden_text
GR-IFC-01Information-flow labels (integrity, confidentiality, tenant, PII class) enforced at sensitive sinksLLM02 / ASI01, ASI03 / MCP10labels.sink, pii.detect
GR-OUT-01Output handling: no raw HTML, code sandbox, schema validationLLM05 / ASI05 / MCP05code, schema, regex, secrets, file.analyze, file.type, file.active_content, yara
GR-INJ-01Direct injection and jailbreak at the gate (TR+EN)LLM01 / ASI01 / MCP06injection.direct, jailbreak
GR-CONT-01Content-harm policy (AILuminate 12 + TR) with tenant thresholdsLLM09 / ASI09content.input, content.output, toxicity, topic, groundedness, language, image.content_safety, banlist, competitors
GR-TOOL-05SQL / command / path traversal / RFI / XSS injection in tool arguments (libinjection + OWASP CRS)LLM05 / ASI02, ASI05 / MCP05tool.args.injection

The full catalogue and evidence packs →

See it in your own environment.

A one-hour technical demo: your scenario, your policy pack, on a closed-circuit install. Then the install kit and a trial licence for a pilot.