Where does the bug appear (feature/product)?
Cursor CLI
Describe the Bug
Under approvalMode: "allowlist", there is no documented config that auto-approves native Delete (deleteToolCall) or WebFetch. Headless agent --print maps the missing approval to User Rejected.
permissions.json only documents terminalAllowlist, mcpAllowlist, and autoRun. Native Delete is not a shell command and is not an MCP server:tool from mcp.json, so that file cannot express deleteToolCall. Unknown keys are ignored.
~/.cursor/cli-config.json permissions.allow tokens WebFetch(*), Delete(*), Delete(**), Write(**), Mcp(cursor:*), CallDynamicTool(*) do not set skipApproval: true on webFetchRequestQuery. autoAcceptWebSearch: true does auto-approve WebSearch. approvalMode: "unrestricted" auto-approves Delete (CallDynamicTool / cursor.Delete returned Successfully deleted file: …) but WebFetch still comes back User Rejected.
This looks like the same class of gap as ACP WebSearch never being pre-approvable, except here WebSearch does work via autoAcceptWebSearch, while Delete/WebFetch have no equivalent.
Steps to Reproduce
- macOS, Cursor CLI
2026.09.18-9a7762b, Enterprise,approvalMode: "allowlist",sandbox.mode: "disabled". - In
~/.cursor/cli-config.jsonset:"permissions": { "allow": ["WebFetch(*)", "WebSearch", "Delete(**)", "Write(**)", "Mcp(cursor:*)", "CallDynamicTool(*)"], "deny": [] }"autoAcceptWebSearch": true"webFetchDomainAllowlist": ["*", "example.com"](also reproduced with[])
- Run (no
--force/--yolo):
agent --print --stream-partial-output --output-format stream-json --trust --workspace /tmp/cursor-cli-perm-verify --sandbox disabled \
"Call WebFetch on https://example.com then stop."
- Separately, ask the agent to use native Delete (not Shell/
rm) on a file in that workspace.
Expected Behavior
WebFetch(*)and/orwebFetchDomainAllowlistshould auto-approvehttps://example.com(skipApproval: true).- There should be a documented allow token for native
deleteToolCall(orpermissions.jsonshould grow a native-tool allowlist). Headless--printshould not inventUser Rejectedwhen no TTY exists.
Actual Behavior
WebFetch stream-json:
{"type":"interaction_query","query_type":"webFetchRequestQuery",
"query":{"webFetchRequestQuery":{"args":{"url":"https://example.com"},"skipApproval":false}}}
{"type":"interaction_query","response":{"webFetchRequestResponse":{"rejected":{"reason":"User Rejected"}}}}
Delete under allowlist: denied / missing as a built-in (only available as dynamic cursor.Delete). Under approvalMode: "unrestricted", the same CallDynamicTool Delete succeeds (Successfully deleted file: /tmp/cursor-cli-perm-verify/to-delete.txt (10 bytes)). WebSearch succeeds throughout via autoAcceptWebSearch. Init still reports "permissionMode":"default" even when approvalMode is unrestricted (session store had isRunEverything: true).
--sandbox disabled / sandbox.networkAccess is not this gate: reject happens at webFetchRequestQuery, not as a network error.
Operating System
MacOS
Version Information
Operating System
- MacOS (darwin 25.6.0, arm64)
Version Information
- Cursor IDE: 3.21.18
- Cursor CLI: 2026.09.18-9a7762b (
agent about, up to date) - Model: Composer 2.5
- Subscription: Enterprise
Additional Information
Related:
- ACP: built-in web search tool cannot be pre-approved via any config (always prompts, even under approvalMode: unrestricted)
- MCP tools in permissions allowlist are still prompting for approval every time (team
allowedMcpServersswallowing personal allowlist; workaroundunrestricted) - Docs:
permissions.jsonCLI note says CLI permissions are separate; documented CLI tokens are Shell / Read / Write / WebFetch / Mcp only. No Delete / CallDynamicTool / webFetchRequestQuery skip flag.
Does this stop you from using Cursor
No - Cursor works, but with this issue