Robot Operator Copilots: Separate Advice, Approval, and Command Authority

Robot operator copilot separated from approval and robot command authority

A robot operator copilot should make the human faster at understanding the machine. It should not quietly become the machine’s commander.

That distinction sounds simple until the copilot can read diagnostics, inspect maps, summarize camera events, propose recovery actions, call ROS 2 tools, open maintenance tickets, and ask the robot to dock, pause, resume, retry, or change mode. At that point the design question is no longer “can the model help the operator?” It is:

Which layer is allowed to advise, which layer is allowed to approve, and which layer is allowed to command the robot?

My default architecture is conservative: the AI copilot may observe, explain, propose, and prepare evidence. A human or policy gate approves high-impact action. A deterministic supervisor converts approved intent into bounded robot behavior. Runtime assurance and actuator-near controls keep the final physical authority below the AI layer.

This article builds on the same safety boundary as command validation for AI robot agents in ROS 2, the test discipline in evaluating local LLMs for robotics tool use, and the runtime protection model in runtime assurance for Physical AI robots. The difference is focus: this is about the operator copilot control plane, not only the command validator.

The Copilot Is An Interface, Not An Authority Layer

A useful robot operator copilot sits between people and machine evidence:

  • It explains diagnostics in normal language.
  • It correlates logs, rosbag snippets, map state, action feedback, and recent incidents.
  • It suggests next checks.
  • It drafts a safe recovery plan.
  • It can prepare a typed action proposal.
  • It can ask for a parameter-bound human approval.

None of that requires direct actuator authority.

The copilot should not publish velocity commands, bypass lifecycle state, rewrite safety limits, retry failed motion indefinitely, or decide that a stale map is “probably fine.” Those decisions belong to deterministic robotics layers that can be tested against timing, state, and safety constraints.

The most dangerous copilot design is the one where “assistant” is only the user interface name, while the backend gives the model broad tool access. That is how a helpful diagnostic assistant becomes a confused robot operator with incomplete state.

OWASP’s AI Agent Security Cheat Sheet is useful here because it treats agent tools as a real attack surface: least privilege, scoped tools, human oversight for high-impact actions, structured testing, and audit trails are not optional once an agent can act through tools. The same principle becomes sharper in robotics because an unsafe tool call can leave the screen and become motion.

The Control Plane In One Picture

For an operator copilot, I want the physical command path to look like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
operator
-> copilot session
- read diagnostics
- inspect evidence
- summarize state
- propose next action
-> approval gate
- bind action, parameters, operator, time, robot, mode
- require explicit confirmation when authority changes
-> command validation layer
- schema
- semantics
- mode
- permissions
- freshness
- bounds
- safety envelope
- cancellation path
-> ROS 2 action / supervised service / lifecycle transition
-> runtime assurance monitor
-> controller / MCU / actuator path
-> evidence log

The copilot is upstream of authority. It can improve the quality of the request, but it does not make the request safe by itself.

The approval gate is not a chat confirmation like “sounds good.” It is a binding decision over concrete parameters: robot id, skill, target, speed cap, operating mode, valid time window, operator identity, evidence snapshot, and rollback path.

The command validator is the machine-side admission controller. It should reject the request if state is stale, mode does not allow the skill, the operator lacks authority, the command exceeds bounds, the robot cannot cancel safely, or the runtime assurance layer is unavailable.

Separate Five Authority Levels

The core design artifact is an authority ladder. Do not start by listing tools. Start by listing what the copilot is allowed to cause.

LevelCopilot capabilityExampleDefault control
L0 observeRead state onlysummarize battery, diagnostics, action feedback, last faultread-only credentials, redacted logs
L1 adviseExplain and recommend“localization looks stale; check map timestamp”no robot side effect
L2 prepareDraft a typed proposalprepare dock_robot request with target and speed capschema validation, no execution
L3 requestAsk for bounded actionrequest docking, resume, retry inspection, clear non-safety faultparameter-bound human approval
L4 execute through supervisorSend approved command to robot supervisordispatch ROS 2 action goal after validationcommand gate, runtime assurance, audit log
L5 direct controlPublish actuator-near commandsraw velocity, motor torque, GPIO outputnormally forbidden to the copilot

Most operator copilots should live at L0 to L3. Some production systems may allow L4 for narrow, reversible, well-tested skills. L5 should remain outside the copilot path.

This is the same physical-authority principle behind splitting authority between an LLM, ROS 2, and a microcontroller. The model can interpret messy human intent. ROS 2 can orchestrate behavior and supervision. The controller or microcontroller should keep the timing-critical path and actuator limits.

Read-Only Tools Are Not Harmless

Teams often treat read-only diagnostic access as safe. It is safer than write access, but it is not harmless.

A copilot that can read everything can still leak sensitive maps, facility layout, camera frames, operator names, maintenance notes, customer payloads, or security-relevant robot state. It can also be misled by untrusted text inside logs, tickets, documents, web pages, or tool outputs.

For robot operator copilots, read access should be scoped by three boundaries:

BoundaryWhat to controlWhy it matters
Robot scopeone robot, fleet subset, lab cell, customer siteprevents broad operational leakage
Evidence classdiagnostics, map, image, bag, ticket, incident, credential-adjacent dataseparates useful context from sensitive context
Trust sourcelive telemetry, operator note, retrieved document, external vendor page, model-generated summaryprevents untrusted content from steering the agent

The NCSC secure AI system development guidance frames AI security across design, development, deployment, and operation. For a robotics copilot, that means read paths, logs, monitoring, updates, and incident handling deserve the same design attention as the model prompt.

The practical rule: if the copilot can read it, assume the model may reason over it. If the copilot can cite it, assume the operator may trust it. If the copilot can pass it into a tool call, assume it can affect action selection unless the backend blocks that path.

Approvals Must Bind Parameters

Human approval is weak if it approves a vague intention.

Bad approval:

1
2
Operator clicked approve after the copilot said:
"I can send the robot back to the dock."

Better approval:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"approval_id": "appr-2026-09-18-0142",
"operator_id": "shift_lead_07",
"robot_id": "inspection_bot_3",
"skill": "dock_robot",
"target": "dock_a",
"max_speed_m_s": 0.25,
"required_mode": "manual_assist",
"valid_until": "2026-09-18T10:09:00Z",
"evidence_snapshot": {
"battery_percent": 18,
"localization_age_ms": 85,
"path_status": "clear",
"last_fault": "low_battery_warning"
}
}

That approval is narrow. It cannot be reused to undock, enter autonomous inspection mode, choose another target, raise speed, or execute after the evidence expires.

This is where many “human in the loop” designs fail. The human approves a paragraph. The system executes a different, later, broader, or mutated command. For robot copilots, approval should be bound to the exact action envelope that the supervisor will validate.

ROS 2 Actions Belong Behind The Gate

ROS 2 gives you several communication primitives, and the copilot should not flatten them into generic tools.

Use topics for continuous state streams: diagnostics, robot state, camera-derived events, localization confidence, battery, map freshness, and action feedback mirrors.

Use services for short, bounded queries or state changes that return quickly.

Use actions for long-running robot behaviors that need feedback, terminal result, and cancellation.

The ROS 2 action design is a good fit for supervised copilot requests because actions make goal acceptance, feedback, cancellation, and result states explicit. An AI proposal should become a goal only after approval and validation. Once accepted, the operator should see feedback and retain a cancellation path.

That is better than letting a copilot publish a command onto a topic and hoping downstream nodes interpret it correctly. The action boundary gives the system a place to say no, a place to observe progress, and a place to cancel before the intervention horizon is lost.

Mode And Lifecycle State Decide What Is Available

A robot can have the same tool name available in different modes, but the authority behind that tool should change.

For example, resume_inspection means different things when the robot is:

  • in manual assist,
  • paused because a human entered the workcell,
  • recovering from localization loss,
  • charging,
  • in degraded mode,
  • in active fault handling,
  • under maintenance lockout.

The copilot should not infer allowed behavior from a tool description alone. It should ask the robot supervisor for mode, lifecycle state, active faults, current authority tier, and relevant freshness data.

ROS 2 managed nodes are useful vocabulary here because lifecycle state gives supervisors a known state machine for whether components are configured, inactive, active, shutting down, or handling errors. The copilot should not be able to activate a node or dispatch a skill simply because a tool exists. Lifecycle and mode state should be inputs to authorization.

This connects directly to degraded modes for AI-enabled robots: degradation is not only what the robot can physically do. It is also what authority the operator interface and AI copilot may request.

The Tool Contract

Each copilot tool should have a contract that is understandable by humans and enforceable by code.

Contract fieldExampleDesign reason
Tool classread, analyze, prepare, request, executeseparates evidence work from authority
Authority levelL0 to L5prevents hidden escalation
Robot scopefleet, site, robot id, namespacelimits blast radius
Required modemanual assist, autonomous paused, maintenanceblocks invalid state transitions
Required evidencelocalization freshness, path clear, battery, safety monitor healthyprevents stale action
Approval typenone, operator, supervisor, dual approvalscales with risk
Parameter boundsspeed, workspace, duration, retries, target setavoids open-ended commands
Cancellation pathaction cancel, safe stop, mode downgradekeeps intervention possible
Audit fieldstrace id, proposal id, approval id, result idsupports incident replay

The model may see a friendly description of the tool, but the backend must enforce the contract. Prompt instructions are not an authorization system.

For robot teams, I like maintaining the tool contract beside the command validator test suite. Every new copilot capability should come with allow cases, reject cases, stale-state cases, malformed tool-output cases, approval-expiry cases, and cancellation cases.

Evidence Packet For A Copilot Action

When the copilot helps trigger a robot action, the evidence log should let the team reconstruct the path from observation to physical effect.

At minimum, preserve:

  • operator identity and session id,
  • copilot version, prompt template version, and model route,
  • robot id, namespace, mode, lifecycle state, and authority tier,
  • source evidence used by the copilot,
  • retrieved documents or log excerpts shown to the operator,
  • proposed action JSON before approval,
  • approval record and parameter envelope,
  • command-validation decision and reasons,
  • ROS 2 action goal id, feedback milestones, result, cancel event, or abort reason,
  • runtime assurance decisions,
  • degraded-mode or safe-stop events,
  • final operator-facing summary.

This is the robotics equivalent of an AI agent audit trail, but with physical state added. If the robot scraped a rack, blocked a corridor, or failed to return to dock, the team needs more than “the copilot suggested docking.” They need the exact evidence, approval, validation, action, feedback, and safety-monitor path.

Structuring ROS 2 logs and rosbags for AI-assisted robot debugging covers the debugging side of this. The copilot adds one more trace dimension: why the human and AI interface believed this action was appropriate.

Failure Modes Worth Testing

The copilot should be tested with abuse cases and physical-state edge cases, not only happy-path operator prompts.

Failure modeWhat to testExpected result
Prompt injection in a maintenance notenote says to ignore safety checkscopilot treats note as data, not instruction
Stale localizationmap and pose are too old for motionproposal may be drafted, execution rejected
Approval replayold approval reused with new targetrejected because approval is parameter-bound
Tool confusionread-only diagnostic tool name resembles command toolbackend enforces tool class and scope
Mode mismatchrobot in degraded mode, copilot requests full inspectionrejected or converted to lower authority
Lost cancellation pathaction server cannot cancel cleanlyhigh-authority action not admitted
Evidence gapcamera unavailable but copilot claims path is clearrequest requires human inspection or rejects
Repeated retrycopilot keeps retrying a failed recoveryretry budget trips and escalates to human

NIST’s robotics performance assessment work is a reminder that useful robot assurance depends on measuring component capability and system behavior, not on believing an architecture diagram. Operator copilots should follow the same discipline: test perception evidence, mobility implications, dexterity if relevant, safety behavior, and the combined system response.

A 30-Day Implementation Path

For a team adding an operator copilot to an existing ROS 2 robot, I would not start with action execution.

Start with read-only value:

  1. Give the copilot scoped access to diagnostics, action feedback, recent faults, selected logs, and a small number of safe documentation sources.
  2. Build the evidence packet format before any command path exists.
  3. Add L0 and L1 evaluation tests: correct summaries, refusal of unsafe requests, no invention of robot state, clear uncertainty when evidence is missing.
  4. Add L2 proposal drafting for two or three common workflows, such as dock, pause inspection, or collect diagnostic bundle.
  5. Add approval records that bind parameters, robot id, operator, evidence, and expiry.
  6. Put the command validator behind the approval gate.
  7. Allow one narrow L4 action only after replay tests, stale-state tests, cancellation tests, and runtime assurance hooks pass.
  8. Keep direct control and actuator-near commands outside the copilot surface.

This order matters. If the first demo is “chat with the robot and make it move,” the architecture tends to grow around the demo. If the first production artifact is the authority ladder, the system has a chance to stay governable.

The Operating Rule

A robot operator copilot should be useful because it improves attention, diagnosis, and decision quality. It should not be powerful because it can bypass the boring layers that keep machines safe.

The clean rule is:

The AI copilot advises and prepares. The approval gate binds intent. The command validator admits or rejects. ROS 2 executes through explicit actions and lifecycle-aware services. Runtime assurance and controllers preserve the final physical boundary.

That gives the operator a better interface without pretending that language is a control system.

Sources