Add UID/GID isolation for evaluated agents - #87
Conversation
…isolation wrapper execs it
…served-path assertion
…e isolation default
Real-container validation: claude and codex armsRan this branch on a native-Linux Docker host (Azure VM) against tasks drawn from runs where the deployed harness had read grading material. Both agent backends, same tasks, same probes. Evidence below is from live containers, not code reading. The launch seams both drop privileges
This matters because the two backends reach the barrier by different routes: claude via Grading material is unreachableProbed inside each live container as the agent identity (
A The two agents behaved very differently, and both results are informativeClaude did go looking, and was stopped. It ran Codex never tried at all. Across 7 tasks and 99 tool calls, zero commands touched any grading-material path. It read Neither result alone is proof. Claude's denials show the barrier holds under pressure; codex's silence shows the layout removes the motive. The deterministic probes above are what actually establish reachability, independent of what any model chose to do. What this does not coverContent staged into the agent's own workspace via Also: Fixes pushed while validating
Suite on Linux after these: 4214 passed, 8 skipped. Remaining failures are environmental on that host (no |
…dir and skip POSIX-only relative symlinks on Windows
What changed
no_new_privsmockdidentity behind a group-gated Unix socket[docsai, ask], with no shell, bounded execution/output, and in-memory response cachingWhy
Encryption or runtime sealing does not protect fixtures when the evaluated agent can invoke the decryptor. The boundary must prevent the agent identity from reading grading material and mock fixture bytes while retaining a narrow, observable CLI behavior channel.
Impact and compatibility
Protected Docker isolation is enabled by default. Images must declare
org.coder-eval.agent-isolation=uid-gid-v1.docker.working_dir,extra_mounts, and dynamic privileged criteria (run_command,uipath_eval,agent_judge) fail closed until their audiences or grader sandbox are implemented.protected_mocksis opt-in; UiPath/skills#2503 is the dependent migration. Runtimesealis not part of the protected interface.Native-Linux container validation is still pending because the supplied test VM was unreachable from the implementation environment.
Validation