allow
Tools you pre-approved
A rule like Bash(git commit:*) lets that command through without stopping. The rule is scoped to the command, not to what the command opens once it runs.
Claude Code
The permission system decides which tools Claude Code may run. It says nothing about what those tools can reach, and what they can reach is every secret on your machine. Sallyport moves the keys somewhere the agent cannot read them.
Claude Code asks before running a tool you have not allowed. The rules live in settings.json as allow, ask, and deny lists, and they are worth setting up properly.
allow
A rule like Bash(git commit:*) lets that command through without stopping. The rule is scoped to the command, not to what the command opens once it runs.
ask
The default. Claude Code shows you the tool call and waits. You are reviewing one action, in the moment, with whatever context you happen to have at 2am.
deny
A deny rule keeps the Read tool out of ./.env. It does not keep a permitted shell command out of the same file, and it has no say over the processes your dependencies start.
bypass
The --dangerously-skip-permissions flag drops the question entirely. That one has its own section below.
Every one of those rules governs the agent's tools. None of them governs the file a tool reads. Your API tokens are in .env, your SSH key is in ~/.ssh, and both are readable by any process running as you, prompt or no prompt.
People reach for it with good reason: long refactors and overnight runs where a confirmation dialog means the job sits idle until morning. It is worth knowing exactly what you traded for that.
Claude Code could already read your files, run your shell, and reach the network. The flag removes the pause where you would have noticed it happening.
The prompt was a chance to catch the agent opening .env. It was never a barrier around the file itself. Any process running as you can read it, including the dependency npm installed while you were reading the prompt.
One prompt injection in a fetched page, one poisoned README in a transitive dependency, and those instructions land inside a session that holds your credentials and has no prompts left.
YOLO mode costs you the chance to notice. It is not what put the keys within reach; they were within reach in default mode too.
Security review
Claude Code will read a diff and flag vulnerabilities in it, and you should let it. That work is about the code you are shipping. It says nothing about what the agent itself can reach while it runs, which is the exposure this page is about. They are separate problems, and fixing one does nothing for the other.
Sallyport holds the credential and runs the call. Claude Code asks for an action and gets a result back. No key enters its environment, so there is nothing for a skipped prompt, a poisoned dependency, or an injected instruction to walk out with.
01
http.request to api.stripe.com, or ssh.exec on prod-03. It arrives over MCP, the same way Claude Code calls any other tool.
02
A locked vault denies everything. A key flagged for approval per call shows a card every time. Otherwise one card per agent run, carrying the caller's code-signing authority.
03
The credential attaches inside the app, during execution. It does not enter the agent's environment, and a cross-host redirect does not carry it along.
04
Encrypted and hash-chained as the action happens. You can find out what ran without relying on the agent's account of it.
After that, run Claude Code however suits you, prompts on or off. The decision that mattered moved out of the agent.
Sallyport runs in the menu bar and hosts the vault in process. There is no daemon and no account.
Onboarding creates the vault and turns on its Touch ID gate.
brew install --cask olegsotnikov/tap/sallyportClaude Code picks up http.request, ssh.exec, and any upstream MCP server you proxy through Sallyport.
claude mcp add sallyport -- /Applications/Sallyport.app/Contents/MacOS/sp mcpStore the credential in the vault, bind it to its host, and remove it from .env. Flag the ones that scare you for approval per call.
stripe → api.stripe.com · approval per callAbout two minutes. The prompts you keep are Sallyport's, and they ask about actions against real infrastructure rather than about which tool is allowed to run.
Free download. Apple Silicon, macOS 14 or newer. No account, ever.
brew install --cask olegsotnikov/tap/sallyportmacOS 14+ · Apple Silicon