macOS · CLI · free & open-source

The porn blocker you can't sweet-talk.

Every other blocker has an off switch you'll find at 1 a.m. Wolf doesn't. It's a CLI-first commitment device: one command blocks a site, a 48-hour cooldown or an accountability partner's passphrase is the only way past it, and a root watchdog heals any tampering. Runs entirely on your Mac — no account, no telemetry.

Why the others fail

You don't relapse because the blocker is weak. You relapse because it lets you turn it off, and at 1 a.m. you will always find a reason.

Password you set? You know it. Timer you chose? You can end it. Uninstall? Two clicks. Soft blockers are built to be undone, so they always are. Wolf flips the physics: trivial to commit, genuinely hard to walk back.

How it holds

Easy in. Hard out. Self-healing in between.

01 / asymmetry

Blocking is instant. Unblocking is a decision you can't rush.

Add a site and it's dead in one second. Change your mind and removal sits behind a 48-hour cooldown, so the craving passes long before the timer does. Need it gone now? That takes a passphrase your accountability partner sets and you never see.

  • addInstant. No friction on doing the right thing.
  • remove48-hour cooldown. The urge expires first.
  • --nowPartner passphrase. A second person, not a second thought.
02 / the watchdog

Tamper with it and it puts itself back within seconds.

A root-level guardian re-applies the block on a loop and marks its own files immutable. Edit the hosts file, kill the process, delete the app: it heals and restarts. There's no quiet way to switch it off in a weak moment.

hosts sinkholeevery app
pf firewall anchorDNS routes
immutable flagsself-heal
root watchdogalways on
03 / system-level, every app

Not a browser extension. It blocks at the OS layer.

Enforcement lives in /etc/hosts and a pf firewall anchor, so every app is covered, not just one browser. The pf anchor also blocks the well-known DNS-over-HTTPS/TLS resolvers, so Chrome and Firefox can't quietly resolve around the hosts file. A full-tunnel VPN or Private Relay still gets around it today — we say so plainly below.

  • /etc/hostsSinkholes blocked domains for every app.
  • pfBlocks known DoH/DoT resolvers so browsers can't route around it.
  • roadmapAn on-device Network Extension to close VPN & Private Relay.
04 / the escape hatch

You're never truly trapped. But bailing costs you.

A break-glass command always works, so a malfunction can never brick your Mac. It's deliberately scorched-earth: it wipes your whole setup and writes a permanent, tamper-proof record. You can leave. You just can't leave quietly.

  • panicAlways works. Safety before everything.
  • wipesThe whole config, so it's never a shortcut.
  • logsA record your partner can see. No secret exits.
Read this before you install

We won't tell you it's impossible to beat.

Every tool that swears it's "100% unbypassable" is lying to you, and you already know it. On a Mac where you have the admin password, a determined person can eventually get around anything. Here's the real deal — and it's all in the threat model, not buried.

What Wolf can't do (yet)

  • Beat a full-tunnel VPN or iCloud Private Relay — that needs the on-device Network Extension, which is on the roadmap.
  • Stop someone who wipes the Mac or boots into Recovery.
  • Block a different device: your phone, a work laptop.
  • Read your mind. It blocks sites you name, not everything.

What Wolf actually does

  • Makes bypass slow, effortful, and visible, so the impulse loses.
  • Removes the easy off switch every other blocker leaves you.
  • Puts a real person, not just software, between you and relapse.

The lock is the part we can build. It isn't the part that ends it. Why the blocker is the easy part →

Install

Free, open-source, one brew command.

No account, no license key, no payment. Wolf installs like any other CLI, then a single privileged step arms the watchdog.

Everyday commands need no sudo — the root daemon enforces the gate. Requires macOS 13+ and Homebrew. Read the code, the threat model, and every system change Wolf makes on GitHub.

Straight answers

The questions you're actually asking.

Can't I just bypass it if I really want to?

Eventually, if you're determined enough, yes, and we say so plainly above. The point isn't a perfect cage. It's to make bypass so slow and so visible that the craving passes before you can pull it off. That gap is where recovery happens.

Does it hold if I turn on a VPN?

Straight answer: not yet. v1 enforces through /etc/hosts and pf, which covers every app and blocks the common DNS-over-HTTPS bypass — but a full-tunnel VPN or iCloud Private Relay can still route around it. That's a documented hole in the threat model, and the fix is an on-device Network Extension content filter on the roadmap. We'd rather name the gap than sell you a fantasy.

Is my browsing tracked or sent anywhere?

No — and you don't have to take our word for it. There's no account and no telemetry; everything runs on your Mac against your own local blocklist. It's open-source (MIT), so you can read exactly what it does. Your accountability partner sees only the events you'd expect (a removal request, a break-glass), never your history.

What if I lose the partner passphrase?

You wait out the 48-hour cooldown, which removes any site without a passphrase, or you use the break-glass command. Break-glass always works so you can never be locked out of your own machine. It just wipes the setup and leaves a record, so it's a real exit, not a loophole.

How technical do I need to be?

It's a command-line tool: brew install, one sudo wolf bootstrap, then wolf add <site>. If you're comfortable in a terminal, you're home. A menu-bar app is coming for the days you don't feel like typing. Handing the partner passphrase to the other person is the one step best not done yourself.

It's free — what's the catch?

No catch, no account. Wolf is free and open-source (MIT) because a tool you're trusting with your recovery shouldn't hide its guts behind a paywall or a login — you can read every line, including exactly what it does to your system, on GitHub. If a paid layer ever shows up, it'll be an optional add-on, never a wall in front of the core.

Bind yourself before you need to

The best time to set the trap is when you're strong.

Not at 1 a.m. Right now, while the decision is easy and the resolve is real. One command: