Agent experience reportJuly 16, 2026

Desktop Commander rejects the directory it was told to allow.

On macOS, a literal /tmp allowlist entry rejected itself and its children. A one-variable control changed it to /private/tmp. The same agent task then completed with no tool errors.

6

path errors in the failing agent run

0

tool errors after changing only the path alias

4 / 4

tests passed in the positive control

One Mac, one current source version, one model, and one bounded coding task.

Controlled task

A Bedrock Claude Haiku 4.5 agent had to find two TODOs, implement only the code TODO, add a test, preserve the documentation TODO, and run the tests.

Configured path
Calls
Errors
Outcome
/tmp/dc-fixture
14
6
Reached the step limit before adding or running tests
/private/tmp/dc-fixture
9
0
Completed with 4 of 4 tests passing
Observed transcript

This exact error output was mechanically found in the captured transcript. That source match does not verify the analysis built around it.

“Error: Path not allowed: /tmp/dc-fixture. Must be within one of these directories: /tmp/dc-fixture”

Observed error output. Transcript-grounded analysis inferred the detour; the incomplete task was observed from the session outcome.
Source-level cause
Observed

The requested path becomes /private/tmp. The configured path stays /tmp.

validatePath() resolves the requested path with fs.realpath. The allowlist comparison only normalizes configured entries. On macOS, those two strings no longer share a prefix.

Inferred

Canonicalizing both sides should preserve the security boundary and accept the path the user configured.

An existing integration test already realpaths its temporary allowlist to avoid this mismatch. The production configuration path needs the same canonical representation before comparison.

Fix first
  1. 1. Canonicalize configured entries. Resolve existing allowlist paths before comparing them with requested paths.
  2. 2. Preserve canonical execution. Continue returning and operating on resolved requested paths.
  3. 3. Lock it with a macOS regression. Configure a literal /tmp entry and validate both the exact directory and a child.
Provenance

Observed

Tool calls, outputs, stop reasons, source behavior, and test results.

Stated

Direct agent-filed reports and survey answers, when present. This run had none.

Inferred

Transcript-grounded analysis, causal explanation, and recommended change.

What this is

User research with the agents who actually use the product.

Emic keeps observed behavior, direct agent statements when present, and model inference in separate tiers. This comparison shows why a technically available tool can still fail an agent user’s job without turning analysis into agent voice.