Skip to content

Control levels

Every agent in the agent record carries a control level. It tells you what OpenLatch can actually do with that agent, so you never have to assume an agent is controlled because it is listed.

Control levelWhat it means
EnforcedThe client sits in the agent’s execution path. A verdict reaches the agent and is obeyed
MonitoredThe integration is installed and events flow, but a verdict cannot be delivered yet, so nothing is prevented
KnownThe agent is identified and classified, with the limits of control stated

Coverage is a deployment outcome. The control level is what the deployment achieved for that agent, not a promise about every agent of its kind.

An agent is covered on two planes, and the control level is always stated per plane.

PlaneWhat it catchesWhat it can carry today
Command planeA tool call or shell command, caught at the agent’s native hookAllow, Ask, Block or Optimize, decided before the action runs. Optimize is Monitor-first
Request planeAn outbound model request, caught at a listener on the same machineAllow and record by default, so it is Observed: captured and measured. Ask has no meaning here, and Block is not shipped on this plane
AgentDeliveryCommand planeRequest plane
Claude CodeAnyEnforced on the command planeObserved on the request plane
Codex CLIManaged, through MDM, a system setting or a cloud setupEnforced on the command plane, and the developer cannot turn it offObserved on the request plane
Codex CLISelf-serveMonitored on the command plane until the developer trusts the OpenLatch hook inside Codex CLI, then Enforced on that planeObserved on the request plane
CursorSelf-serve, in the IDE and the CLI, on macOS and WindowsEnforced on the command planeObserved on the request plane
ClineSelf-serve, in VS Code, on macOSMonitored on the command planeObserved on the request plane

openlatch status and openlatch doctor report each agent on the machine with its control level.

Not every agent can express every verdict natively. A verdict an agent cannot express is delivered as the nearest one it can, recorded as such, and never stricter than the rule intended.

AgentAskBlock
Claude CodeIts own native askIts native refusal
Codex CLIA message carrying the rule’s reason; the call proceedsIts native refusal
CursorNative on shell commands and MCP calls in some of the IDE’s run modes; elsewhere the action is allowed and the record says Ask could not be deliveredIts native refusal