Where does the bug appear (feature/product)?
Cursor CLI
Describe the Bug
In ACP mode (cursor-agent acp, used by JetBrains AI Chat), these parts do not work as they do in the IDE and in cursor-agent -p:
- Plugins do not load. This is true for team or public marketplace plugins,
~/.cursor/plugins/local, and--plugin-dir. No plugin rules, skills, subagents or hooks are available. The same plugins load in the IDE and incursor-agent -p. - Project hooks are read from the wrong folder. ACP reads
~/.cursor/projects/<workspace-slug>/.cursor/hooks.json, not<workspace>/.cursor/hooks.json. A hooks.json in the state folder runs, and its deny works. The workspace file never runs. User hooks (~/.cursor/hooks.json) run. - Lifecycle hooks do not fire.
sessionStart,beforeSubmitPrompt,subagentStart,subagentStop,afterAgentResponseandstopdo not fire in ACP. Tool hooks fire (preToolUse,beforeShellExecution,afterShellExecution,beforeReadFile,postToolUse). permissions.denyin~/.cursor/cli-config.jsonis not applied in ACP. The same deny in<workspace>/.cursor/cli.jsonworks.~/.cursor/agents/does not load in ACP, and~/.cursor/rules/loads only when the workspace is under the home folder. Is this intended?
Steps to Reproduce
- Make a test workspace (
git init) with.cursor/cli.json:{ "permissions": { "allow": ["Shell(echo)"], "deny": [] } }. - Add
<workspace>/.cursor/hooks.jsonwith abeforeShellExecutionhook that returns{"permission":"deny"}for the commandecho probe-deny. - Install a local plugin (or use
--plugin-dir) that has an always-on rule with a codeword, a skill, and the same kind of deny hook. - Start
cursor-agent acpand sendinitialize,authenticate(cursor_login),session/newwithcwd= the workspace, thensession/prompt: “Runecho probe-deny. Then give the plugin rule codeword without reading files.” - Result: the command runs, and the agent has no plugin rule codeword.
available_commands_updatehas no plugin skill. - Copy the same hooks.json to
~/.cursor/projects/<workspace-slug>/.cursor/hooks.json(the workspace path with each non-alphanumeric run changed to-). Run step 4 again: now the deny works. - Add
"deny": ["Shell(echo:probe-user-deny*)"]to~/.cursor/cli-config.jsonand ask the agent to runecho probe-user-deny: it asks for approval and runs. The same deny in<workspace>/.cursor/cli.jsonblocks it.
Expected Behavior
ACP loads the same plugins, hooks and permissions as cursor-agent in the terminal, and it reads project hooks from <workspace>/.cursor/hooks.json.
Operating System
Linux
Version Information
cursor-agent 2026.09.18-9a7762b (installed by JetBrains AI Chat from the ACP registry) and 2026.09.27-44a7577 (CLI). The IDE comparison was on Cursor 3.21.16.
For AI issues: which model did you use?
Auto. The issue does not depend on the model.
Additional Information
Clients: JetBrains AI Chat (IntelliJ IDEA 2026.2), and a minimal ACP client over stdio.
Hook ask works in ACP: the client gets session/request_permission with “Hook requested approval: <user_message>”.
For item 2, the ACP session code seems to pass the project state folder (~/.cursor/projects/<slug>) to the hooks config loader as the project folder.
Does this stop you from using Cursor
No - Cursor works, but with this issue