Local allow-list + per-app proxy for macOS

Send only the traffic you choose through your tunnel.

A local proxy that routes the hostnames you allow — or the apps you pick — through your SOCKS5 tunnel, and everything else straight out.

Free & open source (MIT) · macOS 14 or later · Apple Silicon & Intel

Proxy Manager dashboard: live request feed, request-rate chart, and per-route stats.
Tunnel settings in “Run the tunnel for me” mode: SSH host, key-file authentication, a local SOCKS port, and a running status.

Run the tunnel for me

No tunnel yet? Let the app run one.

Already have a SOCKS5 proxy? Point at it. Don’t? Give Proxy Manager your SSH host and it runs and supervises the tunnel for you — restarting it automatically if the connection drops.

  • Key-file or password auth; the password is stored in the Keychain, never in the config.
  • Automatic restart with backoff, and a one-click Restart tunnel.
  • Auth, host-key, and key-file errors are surfaced instead of retried forever.

A clear view of every request

Live decisions, sizes, and timings — on your machine.

A request selected in the dashboard, showing its method, host, route, status, and byte counts.

Per-request detail

Method, host, route, status, source port, and bytes. Metadata only.

The Targets editor listing hostname rules, with a wildcard rule disabled.

Your allow-list, editable live

Exact hosts or wildcards like *.deepseek.com. Changes apply without a restart.

Settings → Apps: per-app routing rules for Chrome, Safari, Slack, and node, with Chrome set to Tunnel all.

Route by app

Tunnel all, follow your host list, or go direct — per app. An app rule wins over the allow-list.

Tunnel settings for a manual SOCKS5 proxy, showing a healthy tunnel and supervision options.

Bring your own tunnel

Use any SOCKS5 proxy you already run — for example ssh -D 1080.

The first-run onboarding wizard, choosing a starting allow-list from presets.

Set up in about a minute

Pick a preset or start empty; add your own hosts later.

Settings → General: the Routing master switch at the top, switched on, with a green live status line underneath.

The master switch

Turn routing on or off from Settings, not just the menu bar. The live status underneath shows a spinner while it applies, and the reason with Try Again when it can’t start.

Settings → Integration: the external-control master switch, per-adapter switches, agent and socket status, and two approved apps.

Control it from anywhere

Off by default. Turn on URL links, Shortcuts & Siri, or the XPC service for other apps — each with its own switch, per-app approval, and an audit log. Read the docs.

How it works

One local hop decides where each connection goes.

  1. Turn it on. One switch — in the menu bar, the dashboard, or Settings → General — starts the proxy, sets the macOS system proxy, and exports HTTP_PROXY/HTTPS_PROXY for CLI tools.
  2. Traffic is classified. Each connection is matched to its app first (Tunnel all / Direct all), then to the host allow-list; everything else goes straight out, streamed with backpressure.
  3. Watch it work. Every request shows up live. Turning it off restores your original settings.

Under the hood

  • Raw sockets, not a framework. Outbound connections use connect(2) directly, so they never re-enter the system proxy this app sets.
  • Streaming, not buffering. CONNECT tunnels are relayed byte-for-byte with backpressure, so SSE and LLM token streams arrive as they are produced. WebSocket sessions (ws:// and wss://) relay full-duplex too.
  • Bounded memory. Fixed 256 KB buffers per direction, with half-close handled so responses are never truncated.
  • Telemetry off the hot path. Per-request recording is a lock and an append; a single batched writer flushes SQLite.
  • Per-app identity, resolved locally. With per-app routing on, each connection is matched to its originating app by a local process scan — helpers resolve to their host app. Off by default, so the hot path is unchanged.
  • Crash-safe. A watchdog user agent restores your original proxy settings within milliseconds if the app dies. The app keeps its saved recovery state until a restore actually succeeds, so a transient failure can’t erase it.
  • Your choice sticks. A failed attempt doesn’t silently flip the switch off — background tries retry quietly, and routing returns on unlock, wake, or a network change.
  • Loopback by default. The proxy binds to 127.0.0.1 and blocks non-loopback clients from loopback, link-local, and private destinations, checked against the resolved address.
  • No prompts in the background. Proxy toggles change per-user settings, so a normal setup never asks for a password. Anything that would need authorization from the background — at login, on wake, while the screen is locked — waits until you are at the keyboard.

Private by design

  • No TLS interception. CONNECT streams are relayed byte-for-byte.
  • Local-only. Binds to 127.0.0.1; private destinations are blocked for non-loopback clients.
  • Metadata only, on disk. Host, app, size, timing, and status in a local SQLite file. No bodies or headers.
  • Secrets in the Keychain. An SSH password is never written to the config or a command line.

Questions

macOS won’t open the app — is it safe?

Proxy Manager isn’t notarized by Apple, so macOS may block the first launch. Open System Settings → Privacy & Security and click Open Anyway for Proxy Manager. You only need to do this once; the app updates itself normally afterwards.

Do I need my own server or tunnel?

Yes — Proxy Manager routes to a SOCKS5 proxy that you provide. Make one with ssh -D 1080 user@host, or switch on “Run the tunnel for me” and let the app create and supervise the SSH tunnel.

What is a SOCKS5 proxy?

A lower-level pipe that carries traffic to a remote machine. Your apps speak HTTP to the local proxy; the local proxy speaks SOCKS5 to your tunnel, so CLI tools that can’t do SOCKS5 directly still work.

Does all my traffic go through the tunnel?

No. Only the hostnames on your allow-list — plus any apps you set to Tunnel all. Everything else connects directly, so the rest of your browsing is unaffected.

Can I route traffic per app?

Yes. In Settings → Apps, each app can be set to Tunnel all, Use target rules (follow the host allow-list), or Direct all, and apps with no rule use a default you choose. You can also set the frontmost app's mode straight from the menu bar. It's off until you turn it on.

Will it ask for my password?

Normally no. The macOS proxy settings it changes are per-user, so a standard setup needs no admin approval. Anything that would need authorization from the background — at login, on wake, or while the screen is locked — is deferred until you are back at the keyboard. On a signed install in /Applications the optional privileged helper asks once, when it is installed, and is silent after that.

Will it work with curl, node, and other CLI tools?

Yes. It writes HTTP_PROXY/HTTPS_PROXY into your shell rc files, so new terminal sessions route through it automatically.

Does it work with WebSockets?

Yes. wss:// (WebSocket over TLS) is carried by the same opaque CONNECT tunnel as other HTTPS traffic, and ws:// upgrades are forwarded, so the origin switches protocols and frames flow both ways for the life of the connection.

Is this a VPN?

No. It’s an allow-list HTTP proxy, not a system-wide tunnel or packet-level VPN. It never touches traffic that isn’t on your list.

What happens if the app crashes while routing is on?

A tiny crash watchdog restores your original proxy settings within milliseconds, so your internet is never left pointing at a dead local port. The app also keeps its saved recovery state until a restore has actually succeeded, so a transient failure can’t erase it.

How do updates work?

Proxy Manager checks for new versions via Sparkle in the background and always asks before installing. You can change the frequency or turn checks off in Settings → General.

Can the app see my traffic?

No. TLS is passed through untouched; only metadata (host, size, timing, status) is recorded, and only on your disk.

Route what you choose. Leave the rest alone.

Proxy Manager is free and MIT-licensed. If it’s useful, a star helps others find it.