Hermes Camofox is the official Hermes Agent plugin that drives a local Camofox server, so your agent browses through Camoufox, a Firefox fork with fingerprint spoofing built in at the C++ level.
It lives in Nous Research's hermes-official-plugins repo now, not in Hermes core.
You run the server, Hermes runs the plugin, and the two talk over a REST API on port 9377.
Below is the exact order I'd set it up in: server, plugin, toolset, persistent logins, cookies, then vault fills.
If you'd rather have my team map which browser jobs to hand to an agent first, book a free SEO strategy session.
Two pieces: the Camofox server and the Hermes plugin
Get the naming straight before you type a single command.
Camoufox is the browser engine, documented at camoufox.com.
Camofox is the Node.js server from jo-inc/camofox-browser that wraps Camoufox in a REST API built for agents.
The Hermes plugin is the third layer: it calls that REST API and hands your agent ten browser tools.
Those tools are browser_navigate, browser_snapshot, browser_click, browser_type, browser_scroll, browser_back, browser_press, browser_get_images, browser_vision and browser_console.
A Camofox API key adds an eleventh, browser_import_cookies.
Hermes never installs or starts the server for you, so that job is yours.
Step 1: start the Camofox server with native Node
The plugin README puts the native path first, with no Docker, and it works on Windows too.
git clone https://github.com/jo-inc/camofox-browser
cd camofox-browser
npm install && npm start
# -> http://localhost:9377
The first start pulls down the Camoufox binary, which the camofox-browser README puts at around 300MB.
Want it in one line? Run npx @askjo/camofox-browser.
Then hit GET http://localhost:9377/health and look for ok: true before you go any further.
One setting I'd flip right away: the server sends anonymized crash and hang reports to GitHub Issues by default, and CAMOFOX_CRASH_REPORT_ENABLED=false turns that off.
Step 2: or run the Camofox server in Docker
Docker is one command:
docker run -d -p 9377:9377 -e CAMOFOX_PORT=9377 ghcr.io/jo-inc/camofox-browser:latest
There's a catch the README calls out: inside the container, 127.0.0.1 means the container, not your machine.
If your agent needs to open a page served on your host, turn on loopback rewriting:
# ~/.hermes/config.yaml
browser:
camofox:
rewrite_loopback_urls: true
loopback_host_alias: host.docker.internal
Only localhost, 127.0.0.1 and ::1 page URLs get rewritten, and the tool result tells the model it happened.
Leave this off on a native install.
Building the image yourself? The camofox-browser repo ships a Makefile (make up) and a build.ps1 script for Windows, and its README warns against running docker build directly.
The same README lists Fly.io and Railway as hosted options if you want the server off your laptop.
If you go that route, keep CAMOFOX_URL on HTTPS, because the vault will only send a password to a loopback or HTTPS address.
Step 3: install the plugin and save CAMOFOX_URL
Pick either install line:
hermes plugins install camofox
hermes plugins install NousResearch/hermes-official-plugins#camofox
The first pulls from the plugin catalog; the second goes straight to the repo.
The installer asks for CAMOFOX_URL, which for a local server is http://localhost:9377.
To change it later, run hermes camofox setup, which writes the URL and an optional CAMOFOX_API_KEY to that profile's .env.
🔥 Want Hermes and its browser tools already wired into a working agent stack? Inside the AI Profit Boardroom you get step-by-step video trainings, the installable Agent OS, four coaching calls a week and 3,400+ members running agents like this one. → Join the AI Profit Boardroom
Step 4: switch on the camofox toolset and check status
The tools only show up once two things are true: CAMOFOX_URL is set, and the camofox toolset is enabled in hermes tools.
Then run the health check that ships with the plugin:
hermes camofox status
It prints the configured URL, the identity mode, whether the server answers, and the VNC address.
If status says unreachable, fix the server first, because nothing on the Hermes side will help.
Running several Hermes profiles? Each profile has its own .env, so set each one up on its own.
Now give it a smoke test with a page that has no login.
Ask the agent to open a public page, take a snapshot, and tell you the page title.
Since a recent plugin fix, browser_navigate returns the page title itself, so you'll see it straight away.
The snapshot comes back as an accessibility tree with stable element refs, which the camofox-browser README says runs about 90% smaller than raw HTML.
If the title and the tree both look right, the pipe from Hermes to Camofox to Camoufox is working end to end.
Step 5: make logins survive a restart
Out of the box, every session gets a random Camofox identity, so cookies die when the session ends.
Fix that with one key:
browser:
camofox:
managed_persistence: true
Hermes then sends a fixed userId derived from the profile's browser_auth/camofox/ path, so each profile gets its own browser profile on the server.
The server still has to map that userId to a persistent profile, so check that side too.
Here's the part people miss: live cookies sit in the open browser context, not on disk, until Camofox checkpoints them.
A checkpoint happens on POST /stop with your CAMOFOX_ADMIN_KEY in the x-admin-key header, or on a graceful Node shutdown via SIGINT or SIGTERM.
A kill -9, taskkill /F or Task Manager kill skips that hook and throws away any login that never got saved.
Step 6: sign in once in a visible window, then go headless
For sites that need a human at the login screen, the README gives a four-move routine:
- Start Camofox with
interactive.mode(orCAMOFOX_INTERACTIVE) set todesktop. - Start Hermes, send it to the login page, and sign in yourself in the visible window.
- Checkpoint without killing Node:
curl -X POST http://localhost:9377/stop -H "x-admin-key: YOUR_ADMIN_KEY". - Set
interactive.modeback tooff, restart Camofox, and start a fresh Hermes browser task.
The saved state lands under ~/.camofox/profiles/ on the server.
No admin key set? POST /stop answers 403, so shut Node down gracefully instead.
The other interactive.mode values are novnc and auto, and Docker's headed path is VNC with ENABLE_VNC=1.
Cookie import: the shortcut past a login screen
If you're already signed in somewhere in your normal browser, export a Netscape-format cookies.txt and hand it over.
openssl rand -hex 32
mkdir -p ~/.camofox/cookies
cp ~/Downloads/linkedin_cookies.txt ~/.camofox/cookies/linkedin.txt
Put that generated key in ~/.hermes/.env as CAMOFOX_API_KEY, and start the server with the same value.
Then tell the agent to import the file and open the site.
The guard rails are tight: files must sit under browser.camofox.cookies_dir, absolute paths and ../ are refused, and each file tops out at 5 MB and 500 cookies.
Cookie values never get logged.
Vault fills on the Camofox tab: landed 28 October, not tagged yet
Hermes' browser_vault fills a saved password into the page without the password entering the conversation.
Until 28 October 2026 it failed on Camofox tabs, because Camofox has no CDP endpoint, so the username filled and the password never did.
Two commits fixed it: 0a93a234 in hermes-agent added a browser page backend seam, and 6f7d49b5 in hermes-official-plugins made the plugin use it.
Be clear on the version: neither change is in a tagged release yet.
The latest tag is v0.22.5, published 23 October 2026, five days before the fix.
On an older core, the plugin skips the registration and you type credentials with browser_type.
When you're on a core that has the seam, the fill only targets a tab browser_navigate already opened, only on an exact origin match, and only when CAMOFOX_URL is loopback or HTTPS.
The credential vault docs cover saving logins, 2FA codes and the 1Password and Bitwarden pickup.
The config keys I'd set on day one
| Key | Default | What I'd do |
|---|---|---|
CAMOFOX_URL | none | Set it. Nothing works without it. |
browser.camofox.managed_persistence | off | Turn on for any profile that signs in anywhere. |
browser.command_timeout | 30 | Raise for slow sites. Floor is 5; navigation allows 60. |
browser.snapshot_threshold | 15000 | Keep. Longer snapshots get cut and the full tree is saved under cache/web. |
browser.restrict_evaluate | false | Set true so console calls can't touch cookies, storage or network. |
CAMOFOX_API_KEY | none | Set only if you want cookie import. |
Env vars beat config.yaml when both are set, so check .env first when a setting seems ignored.
Gotchas that eat an afternoon
- Typed passwords show up in snapshots. Camoufox prints every filled field's value and doesn't mark password fields, so a password typed with
browser_typeor over VNC appears inbrowser_snapshot. - No console log capture.
browser_consoleevaluates JavaScript, but the Camofox REST API doesn't expose logs. - One snapshot view. There's no compact or full switch on
browser_snapshot. - Vision goes through the auxiliary model.
browser_visionhas no numbered-label overlay, and its model comes fromauxiliary.camofox_vision.*, which inheritsauxiliary.vision. - Ending a Hermes session doesn't close the Camofox session. The browser context keeps running until you checkpoint or shut Node down.
📞 Want a second pair of eyes on what your agent should automate first? Book a free SEO strategy session and my team will walk through your site, your traffic and the jobs worth handing to an agent. → Grab your free strategy session
When I'd skip Camofox and stay on browser_exec
Hermes' default browser is browser_exec, which runs model-written Python against a packaged Chromium over CDP, per the Hermes browser docs.
Stay there when you need browser_cdp or browser_dialog, which only exist while a CDP endpoint is configured.
Switch to Camofox when sites keep flagging your agent's Chromium and you want the fix on your own box, not a cloud vendor's.
Setting up the plugin on a fresh profile doesn't take browser_exec away, so both browsers can live side by side.
Already ran Camofox in Hermes core? Here's the upgrade path
Nous deleted the built-in browser tools and the bundled Camofox from core on 22 October 2026 in commit 68500d9f.
Profiles with CAMOFOX_URL set, or with browser.cloud_provider: camofox, migrate on update: the plugin gets installed and the core browser toolset is switched off for that profile.
Your CAMOFOX_* variables and every browser.camofox.* key carry over unchanged.
With managed_persistence: true, the plugin sends the same profile-scoped userId core sent, so saved logins come with you.
A profile that had browsing disabled everywhere gets camofox disabled too.
Run hermes camofox status right after updating and confirm the server is reachable.
Want the full Agent OS around this, with the setup prompts ready? Join the AI Profit Boardroom and start from the trainings.
Also On Our Network
- 🌐 Whether a small business should run Camofox, with three real use cases
- 🌐 A nine-point scorecard rating Camofox from setup to vault fills
- 🌐 Five copy-paste prompts that get your agent running Camofox
- 🌐 Which AI models to run behind Camofox, with live GoldieBench scores
- 🌐 The complete Hermes Camofox guide on the AI Profit Boardroom blog
FAQ: Hermes Camofox
What port does the Camofox server use?
Port 9377 by default. A native npm start serves it at http://localhost:9377, and the Docker image publishes the same port.
Why don't the Camofox tools show up in Hermes?
Two things have to be true: CAMOFOX_URL is set for that profile and the camofox toolset is enabled in hermes tools. Run hermes camofox status to see whether the server is reachable.
How do I stop losing logins when Camofox restarts?
Set browser.camofox.managed_persistence to true, then checkpoint with POST /stop using your admin key or shut Node down gracefully. A force-kill drops logins that were never saved to disk.
Do I need Docker to run Camofox?
No. The plugin README lists native Node first: clone jo-inc/camofox-browser, run npm install and npm start, or use npx @askjo/camofox-browser.
Is the Camofox vault fill in v0.22.5?
No. It landed on 28 October 2026 in commits 0a93a234 and 6f7d49b5, after v0.22.5 was tagged on 23 October, and no tagged release carries it yet.
📺 Video notes + links to the tools 👉
🎥 Learn how I make these videos 👉
🆓 Get a FREE AI Course + Community + 1,000 AI Agents 👉
About Julian
I'm Julian Goldie, an SEO entrepreneur, author and founder of the AI Profit Boardroom, which has 3,400+ members.
I help business owners scale with AI agents, automation and SEO.
- I've built a 7-figure SEO and link building agency, Goldie Agency, with a team of 70+ SEO experts.
- I've grown a YouTube channel to 400,000+ subscribers.
- I wrote "Link Building Mastery".
- My Udemy courses have taught over 29,000 students.
→ Get my best AI training inside the AI Profit Boardroom
Start the server, install the plugin, turn on managed_persistence, and if you want help picking the first jobs, book a free SEO strategy session or grab the Agent OS inside the AI Profit Boardroom before you wire up Hermes Camofox.











