{"version":"2.1.292","anchor":"lsp-tool-denial-display-respects-permission-rule-denials","canonical_anchor":"lsp-tool-denial-display-respects-permission-rule-denials","heading":"Tool errors show the real message when a permission rule denied the call","tier":"notice","area":"Elsewhere","scope":"individual","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.292\/e\/lsp-tool-denial-display-respects-permission-rule-denials","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.292","markdown":"### Tool errors show the real message when a permission rule denied the call\n\nLSP, Write, Read and notebook edit errors no longer collapse into a generic line when a permission rule blocked the call\n\n**What**\n\nWhen a tool fails and you are not in verbose mode, Claude Code normally shows a short generic error. A tool is an action Claude can take, such as writing a file. Now, when the failure is because a permission rule (one of your allow or deny settings) refused it, the real message is shown instead. The tool result now passes `toolDenialKind` to the display, and the short form is skipped when it is `permission-rule`.\n\n- LSP tool: no longer collapses to \"LSP operation failed\".\n\n- Write: no longer collapses to \"Error writing file\".\n\n- Read: skips the short \"File not found\" and \"Error reading file\" text.\n\n- Notebook edit: no longer collapses to \"Error editing notebook\".\n\n**Why**\n\nIf a deny rule blocks one of these tools, you now see why instead of a generic error, which makes it easier to tell a blocked action from a real failure.\n\n- Area: Elsewhere\n- Tier: You'll notice\n- Useful: 1\/5\n- Signal: 1\/5\n- Scope: individual\n- Heads-up: no"}