Each rule says what it looks for, why it matters and how to fix it, in the words every report uses. The parts in italics are filled in from the files a check finds.
Levels and score
Critical
Harm is under way or needs no one to act: known malware, signs of an attack, instructions hidden from you, or code downloaded and run automatically. Act now.
High
One step from harm: the agent can act without asking, a credential is exposed, or the setup sends the agent to code or servers no one has checked. Fix soon.
Medium
A safeguard is weaker than it should be. Harm needs something else to go wrong too.
Low
Small on its own. Worth tidying up.
Info
Worth knowing. It doesn't change the score.
The score starts at 100. The first finding from a rule takes off 30 points if it's critical, 15 if it's high, 6 if it's medium and 2 if it's low. Each repeat takes off a quarter of that again, up to twice that for one rule, so one noisy rule can't empty the score. Info findings take off nothing. Grades: A for 90 or more, B for 80 or more, C for 65 or more, D for 50 or more and F below 50. Any critical finding caps the grade at D.
This ruleset has 11 critical, 60 high, 39 medium, 14 low and 5 info rules.
Claude Code runs with every permission prompt turned off
Why it matters. permissions.defaultMode is bypassPermissions, so Claude Code edits files and runs any command without asking. A prompt injection in any file, web page or tool output it reads can then run commands on your computer.
Fix. Remove permissions.defaultMode or set it to "default". For fewer prompts, allow specific commands under permissions.allow instead.
Claude Code can run any shell command without asking
Why it matters. permissions.allow contains “rule”, which pre-approves every shell command. A prompt injection in anything Claude Code reads can then run commands on your computer.
Fix. Replace it with the specific commands you trust, such as Bash(npm test:*).
A pre-approved command can run any code or delete any file: rule
Why it matters. Claude Code runs it with any arguments and without asking. Interpreters such as python and node, shells and sudo run whatever code they're given, and rm can delete any file you can.
Fix. Remove it from permissions.allow, or narrow it to one exact script, such as Bash(npm run lint).
A pre-approved command can send data off your computer: rule
Why it matters. Claude Code runs it with any arguments and without asking. curl and wget can post any file Claude Code can read to any server, and ssh can run commands on any server your keys reach.
Fix. Remove rule from permissions.allow so Claude Code asks first. For web pages, allow WebFetch for specific domains instead, such as WebFetch(domain:docs.example.com).
Why it matters.Variable in a setting sends the agent's requests to host instead of the vendor's service once you trust the folder. Those requests carry your prompts, the code the agent reads and your API key.
Fix. Remove it from the project. If your company routes AI traffic through a gateway, set that in your own settings.
Why it matters.Variable is 0, so the agent or the programs it starts accept any certificate. Anyone on the network between you and a service can read and change the traffic, API keys included.
Fix. Remove it. If your network inspects HTTPS, add its certificate with NODE_EXTRA_CA_CERTS in your own settings instead.
A .claude.json with a credential is inside this project
Why it matters. This file holds Claude Code's account data and user settings. Inside a project, any agent or tool working here can read it, and it can be committed with the code.
Fix. Move it out of the project, and rotate the credential if the file was ever committed or shared.
File lets commands run outside the sandbox without asking
Why it matters. A prefix_rule with decision = "allow", or no decision, lets any command that starts with its pattern run outside the sandbox without asking. The patterns in this file start with list.
Fix. Set decision = "prompt" on these rules, or narrow each pattern to the exact command you need. Delete the rules for commands you approved only once.
Claude in VS Code can skip every permission prompt
Why it matters. github.copilot.chat.claudeAgent.allowDangerouslySkipPermissions is true, so the Claude agent in Copilot Chat can run commands and edit files without asking.
Copilot can change its own settings without asking
Why it matters. chat.tools.edits.autoApprove approves edits to VS Code's own settings files, so a prompt injection can have the agent turn on its own auto-approval. That's how CVE-2025-53773 let attackers run code through Copilot.
A custom agent in file runs shell commands without asking
Why it matters.Setting in this file pre-approves “rule”, so this agent runs matching commands without asking. A project's agent replaces any of yours with the same name, so in a project from someone else, picking that name runs their version.
Fix. Remove the entry, or allow only the exact commands you need and deny the rest.
This project asks Claude Code to skip every permission prompt
Why it matters. permissions.defaultMode is bypassPermissions in the project's own settings. Claude Code 2.1.257 and later ignore it there and start in the default mode, but older versions skip every prompt for anyone who opens the project.
Fix. Remove permissions.defaultMode from the project's settings, and keep Claude Code up to date.
Why it matters. WebFetch without a domain lets Claude Code open any page without asking. A page can carry instructions for the agent, and the agent can send data out in the address it fetches.
Fix. Allow specific domains instead, such as WebFetch(domain:docs.example.com).
Why it matters. Claude Code runs any of the server's tools without asking, including ones that write, send or delete, and tools the server adds in later versions.
Fix. List the individual tools you use, such as mcp__github__get_issue.
Why it matters. It's built by a function, a loop or an expression, so misconfig can't tell which commands it lets run without asking. Codex runs the file as code, so the rule still applies.
Fix. Write each rule out as prefix_rule(pattern = [...], decision = ...), so you and misconfig can read what it allows.
Why it matters. permissions.defaultMode is acceptEdits, so Claude Code applies file edits without review, including edits to scripts and config that run later, such as package.json scripts, a Makefile or CI workflows.
Fix. Set permissions.defaultMode to "default". When you want edits accepted for a while, switch modes in the session with Shift+Tab.
Why it matters. defaultApprovalMode is auto_edit, so Gemini CLI applies file edits without review, including edits to scripts and config that run later.
Why it matters. chat.tools.terminal.ignoreDefaultAutoApproveRules is true, so VS Code's own rules, which always ask before commands such as rm, no longer apply.
Why it matters. yes-always is true, so Aider answers yes for you when it asks to add a file to the chat, create a file or edit one that isn't in the chat. Files it adds are sent to the model. Shell commands still need your explicit yes.
Fix. Remove yes-always, so Aider asks before it adds or edits files.
Why it matters.Variable in your own settings sends the agent's requests to host instead of the vendor's service. That's expected if your company routes AI traffic through a gateway. If you didn't set it, another program changed your settings, and host receives your prompts, code and API key.
Why it matters.File asks for YOLO mode, which approves every tool call. Current Gemini CLI ignores it in settings and turns YOLO on only with --yolo or --approval-mode=yolo, so check the scripts and aliases that start Gemini CLI.
MCP server “server” sets variable, which runs extra code
Why it matters.Variable makes the server's program load a module, library or script as it starts, so the server runs code that isn't part of its package.
Fix. Remove variable from the server's env, unless you set it yourself and know what it loads.
Why it matters. “command” fetches the newest release each time the server starts. If a later release is malicious, it runs on your computer with your permissions. That happened with postmark-mcp (Koi Security, September 2025), whose version 1.0.16 secretly copied every email it sent to the attacker.
Fix. Pin package to an exact version. To see the newest, run lookup command.
Why it matters. It starts “path”, which comes with the project, whenever the agent starts the server, with your permissions. In a project from someone else, that's their code.
Fix. Read what it runs before you approve the server, or remove the server.
Why it matters. It contains number Unicode tag characters. Most editors and web pages don't display them, but the model receives them as text. Decoded, they read: “the hidden text”
Fix. Delete the hidden characters and check where the file came from.
File points at a service that collects what's sent to it
Why it matters. Whoever set up the address on host, or has the link, can read what's sent there. Security testers use these services, and so do attackers moving stolen data out.
Fix. Remove the address unless you set it up yourself.
Why it matters. A password keeps antivirus and email scanners from looking inside an archive, which is why malware is often shipped that way. The ClawHavoc campaign (Koi Security, February 2026) used one to deliver a trojan.
Fix. Don't run it. Install tools from their official source instead.
Why it matters. Removing the quarantine flag with xattr, or turning Gatekeeper off with spctl, skips the check macOS runs before a downloaded app opens, so the download runs with no warning. Mac info-stealers often tell people to run these commands.
Fix. Don't run it on files you downloaded. Install the tool from a signed release.
Why it matters.Number characters that take up no space are in its text. They can hide encoded text, or split words so a search or filter misses them, while the agent still reads them.
Fix. Delete them. If you didn't add them, check where the file came from.
Why it matters. Whoever posted the text on host can change it at any time, so what the agent reads later can differ from what you checked. In the ClawHavoc campaign (Koi Security, February 2026), malicious ClawHub skills sent people to a script on a paste site.
Fix. Keep the steps in the repository, where changes are reviewed.
Why it matters. It runs “command” automatically, without asking. Whatever that address serves runs on your computer with your permissions, and its owner can change it at any time.
Fix. Remove it, or replace the download with a script kept in the repo.
Variable in a setting runs extra code inside the agent's commands
Why it matters.Variable changes what programs load, or which programs run, when the agent starts a command. Set here, it can run the project's own code inside every command, and nothing in the commands shows it.
Fix. Remove variable, unless you set it yourself and know what it loads.
Why it matters. Its runOptions.runOn is "folderOpen", so VS Code and editors built on it run “command” when the folder opens. Cursor ships with Workspace Trust off and runs it without asking. VS Code asks you to trust the folder first, unless Workspace Trust is off.
Fix. Remove runOptions.runOn from the task. In Cursor, set security.workspace.trust.enabled to true, so it asks before it runs a folder's tasks.
Why it matters.A hook or setting runs “command” automatically, without asking. In a project from someone else, that's their code running on your computer once you trust the folder.
Fix. Keep it only if you know what it runs. In a project from someone else, read the command and any script it starts before you trust the folder.
Agent runs file when it starts here, without asking
Why it matters.Agent loads the plugins and tools in this project each time it starts, and they can do anything you can. In a project from someone else, that's their code running on your computer. misconfig lists plugin code by name and doesn't read it.
Fix. Read the code before you start agent in this project, and delete it if you didn't add it.
Files in folder can give orders to agents started there
Why it matters. Instructions for an agent were found in files. An agent started in folder treats the files there as context, and anything saved there later can add more.
Fix. Start agents in project folders only, and delete instruction files you didn't write.
Why it matters. Agents follow the link and read the file as instructions, so what's in it goes to the agent and the model behind it. misconfig didn't open it.
Fix. Replace the link with an ordinary file. If an agent has read it, change the keys in the file it points to.
Why it matters. Agents follow the link and read the file it points to as instructions. misconfig didn't open it. In a project from someone else, a link like this can put a file from your computer into what the agent reads.
Fix. Replace the link with an ordinary file in the project. If you made the link on purpose, check the file it points to by hand.
Why it matters. Its settings couldn't be read, usually because it isn't valid JSON or TOML, so none of them were checked. The agent may still apply some of them.
Fix. Fix the syntax error, then run the check again.
Why it matters. misconfig reads agent files up to 400 KB each and 4 MB in all. This one is over a limit, so nothing in it was checked, but the agent still reads it.
Fix. Review it by hand, or split it into smaller files.
MCP server “server” runs package, a lookalike of official name
Why it matters. The name is close to official name, but it's a different package. Lookalike names are how malicious packages get installed by mistake, including by AI agents that guess a package's name.
Fix. Check who publishes package. If you meant official name, switch to it.
Why it matters. Files there come from downloads and other programs, not from a release you chose, and anything that can write there can change what the server runs.
Fix. Install the server from its official release, or move the program somewhere only you control.
Why it matters. Its name copies the official official name extension, official ID, but someone else publishes it. Extensions run with your permissions as soon as the editor loads them, so a copy can do anything you can.
Fix. If you meant to install official name, uninstall extension and install official ID instead.
Why it matters.Files can't be read like the rest of a skill, and the skill can tell the agent to run them. Skills from public registries have been used to deliver malware.
Fix. Remove the skill unless you trust where it came from, and get any tool it needs from the tool's own release.
Why it matters. The most serious: summary (reference). Found on OSV.dev. Where it's used.
Fix.The steps to take.
Read the code
The checks are plain JavaScript, the same in the browser check and the command. catalog.js holds the wording on this page, and index.js the checks that apply it.