A headless application firewall for macOS, operated through a CLI.
how it works
- An app on your Mac opens a connection.
- blackice lets it through, drops it, or holds it, by the mode and your rules.
- A held connection waits for an answer: yours, with
blackice approveorblackice deny, or an agent's, such as Claude Code or fx. - With no answer in time, it is dropped.
modes
accept-all- Allows every connection and logs it.
ask- Holds any connection that no rule or approval covers yet.
block-all- Allows only what your rules allow.
details
An approval covers one app and one host, and expires. Rules you want to keep go in blackice.toml.
An agent sees where a connection goes, never what it sends, and does not run as root.
There is no window: a menu bar icon shows the mode and what waits.
configuration
blackice.toml holds the mode and your rules. The first blackice start writes it. The configuration docs cover every key.
mode = "ask" [[allow]] app = "com.apple.curl" hosts = ["pypi.org"]
install 1.0.7
1.0.7 has run on one Mac, with macOS 27.0.1. It needs macOS 14.4 or later on Apple silicon.
curl -fsSL https://blackice-macos.vercel.app/install.sh | sh
The script checks the release and copies Blackice.app to /Applications. Or with Homebrew:
brew trust --cask valentintorassa/tap/blackice brew install --cask valentintorassa/tap/blackice
Or download Blackice-1.0.7.zip from the GitHub release and check it as the install docs describe.
Then run blackice start. It asks a few questions and opens System Settings so you can allow the extension.