Skip to main content

zenpilot

CI License: MIT

Let Claude use your Zen browser. Works with Claude Desktop and Claude Code, kind of like Claude in Chrome but for Zen.

zenpilot demo: install, set up, then Claude fills in and submits a form in Zen

There's no browser extension. zenpilot opens Zen with its remote control turned on and talks to it directly.

Alpha. Only tested on macOS with Zen 1.23.

Install

You need a Mac with Zen in /Applications.

Claude Desktop: download zenpilot-<version>.mcpb from the latest release and open it. That's it.

Claude Code (or both): with uv installed, run:

uv tool install zenpilot
zenpilot setup

Setup asks which Zen profile to use and which sites Claude may visit. Then it connects zenpilot to Claude Code (and Claude Desktop, if you have it) and opens Zen. Restart Claude Desktop afterwards.

Use it

Just ask Claude: "order a large pizza with bacon on httpbin.org/forms/post for Sam, then submit it".

The first time, a few popups may show up. Only you see them, not Claude:

  • Which profile? zenpilot is a fresh profile that isn't logged in to anything. Pick your own profile if you want Claude to use sites you're logged into.
  • Reopen Zen? If Zen is already open without remote control, zenpilot offers to restart it. Your tabs come back.
  • Allow this site? Claude only works on sites you allow. Choose Don't Allow, Allow This Session or Always Allow.

Pressing Enter always picks the safe answer.

Claude can open, switch and close tabs, go to a URL, read the page, click, type, scroll and take screenshots. It can't touch cookies, passwords or downloads, and it can't run its own JavaScript.

Staying safe

  • Allowlist. Claude only works on sites you've allowed. Add one with zenpilot allow github.com.
  • Stick to the zenpilot profile if you can. It's logged out of everything. On your main profile, a shady page could try to trick Claude into doing stuff in your accounts, so only allow sites you trust.
  • Read-only mode. Set read_only = true and Claude can look but not click or type.
  • Log. Everything Claude does is written to ~/.local/state/zenpilot/audit.jsonl.
  • Remote control is open while Zen runs this way. Other apps on your Mac could connect to it too, and some sites (banks, Cloudflare checks) may think you're a bot. When you're done, quit Zen and open it normally.

zenpilot also stops Zen from switching off its own protections (Safe Browsing, the popup blocker and so on), which would otherwise happen when remote control is on.

Commands

Command What it does
zenpilot setup Set everything up (see above)
zenpilot allow [site...] Allow sites. --remove takes them off. No sites lists them.
zenpilot launch Open Zen with remote control on
zenpilot doctor Check your setup and say how to fix anything that's broken

Settings

They live in ~/.config/zenpilot/config.toml, and changes apply right away.

allowlist = ["localhost", "127.0.0.1"]   # "example.com" covers its subdomains too
read_only = false                        # true: Claude can look but not click or type
profile = "zenpilot"                     # which Zen profile Claude uses
auto_launch = true                       # open Zen when Claude needs it
prompts = true                           # show the popups above
port = 9222
audit_log = "~/.local/state/zenpilot/audit.jsonl"
dangerously_allow_all_sites = false      # skips the allowlist. Please don't.

Good to know

  • Only one Claude can drive Zen at a time. zenpilot lets go after 2 minutes of doing nothing, so Claude Desktop and Claude Code can take turns.
  • Zen can be hidden or behind other windows. It still works.
  • Zen loads restored tabs lazily, so Claude only sees an old tab once you've opened it.
  • Stuck? Run zenpilot doctor. If Zen says it already has a session after a crash, restart Zen.

Hacking on it

git clone https://github.com/beSaif/zenpilot.git && cd zenpilot
uv sync && uv run zenpilot setup     # points Claude at your clone
uv run pytest -m "not integration"   # unit tests
uv run pytest                        # all tests, needs Zen running (zenpilot launch)

Pushing a v* tag that matches pyproject.toml publishes to PyPI and makes a GitHub release with the .mcpb.

License

MIT

Metadata

Release files for zenpilot 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for zenpilot 0.2.3
File Size Uploaded Provenance
zenpilot-0.2.3.tar.gz 30.3 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for zenpilot 0.2.3
File Interpreter ABI Platform
zenpilot-0.2.3-py3-none-any.whl Python 3 none any Details

Total release size: 64.2 kB

Release files / zenpilot-0.2.3.tar.gz

Download URL zenpilot-0.2.3.tar.gz
Size 30.3 kB
Tags Source
SHA-256 checksum
How to use checksums
a1ee3f79abe3288ea78fbd70bbb441d5a34b4ec8c9e571a24095ec05a32c3dd2
BLAKE2b-256 checksum
How to use checksums
4ca386afe6bc89d3f07868b5f4b7704439d434ca8ac8d09700944fb1b76f1587
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / zenpilot-0.2.3-py3-none-any.whl

Download URL zenpilot-0.2.3-py3-none-any.whl
Size 33.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
079ab200f016677158a766188dfd9a88e0ed0894ddee34ac8c6c75819258a74c
BLAKE2b-256 checksum
How to use checksums
b5dbce1e96a78df785ea9ef5c1e03b2eae9f60c240ce760608babe5070492868
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for zenpilot 0.2.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page