Files

73 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Steel Browser vs Camoufox
type: comparison
status: active
created: 2026-07-29
updated: 2026-08-02
verified_on: 2026-08-02
confidence: high
tags: [comparison, browser, steel, camofox, decision]
sources: [live-probe, session-history]
---
# Steel Browser vs Camoufox
## Purpose
Compare the two browser-automation backends available to Hermes, including the Jul 2930 experiment and the decision to revert.
## At a glance
| | Steel Browser (CT201) | Camoufox (CT450) |
|---|---|---|
| **In use** | Disabled since 2026-07-30 | **Yes** — primary backend |
| **Engine** | Chromium 140 (Playwright) | Camoufox (Firefox-based) |
| **Connection** | CDP (`ws://` via port 9223) | REST API (localhost:9093) |
| **API** | REST at `:3000` — create/destroy/query sessions | Camoufox REST + CDP WebSocket |
| **Headless** | Native headless | Xvfb + VNC (headed, anti-fingerprint) |
| **Container** | Docker on CT201 | Systemd service on CT450 |
| **Stealth** | Standard Chromium | Anti-detection fingerprinting |
| **Session viewer** | Built-in UI at `/steel` | VNC at `/vnc-camofox` |
| **Plugin** | `browser-steel` plugin (disabled) | Native Hermes `browser.cloud_provider: camofox` |
## The Steel Experiment (Jul 2930)
### Why it was tried
- Steel promised full CDP access for richer browser control
- Built-in session viewer and management UI
- Docker-based, clean separation from Hermes host
### Timeline
1. **Jul 29:** Steel deployed on CT201 via Docker Compose, Chromium 140. Hermes configured with `browser.cloud_provider: steel`, `browser-steel` plugin enabled.
2. **Jul 29 (later):** CDP connectivity issues surfaced — Hermes was reaching `0.0.0.0` from the plugin's internal CDP URL. Required `_normalize_cdp_url()` patch in the Steel plugin to remap to `100.96.244.39`.
3. **Jul 30:** DeepSeek V4 Flash 0731 went live and rejected tool names that didn't match `^[a-zA-Z0-9_-]+$`. The Steel plugin's tools (`steel_scrape`, `steel_session_options`) were fine, but the route through OmniRoute → Steel → CDP was unreliable with empty-stream errors.
4. **Jul 30 (evening):** Decision to revert — Camoufox re-enabled, browser-steel plugin disabled, `CAMOFOX_URL` and `CAMOFOX_API_KEY` uncommented in `.env`. Steel left running on CT201 but Hermes no longer routes through it.
### What broke
- CDP URL normalization required a plugin patch to handle Docker's internal networking
- Empty-stream errors from `opencode-go/deepseek-v4-flash` provider path — the combo strategy does NOT iterate on empty responses, they pass to Hermes's own fallback chain (the #1 cause of "combo works but Hermes falls back")
- Tool name validation on DeepSeek 0731 was stricter — this affected all providers, not just Steel
### Lesson learned
Steel is a capable backend but adds a network hop and another plugin layer. Camoufox runs locally on CT450 with fewer failure modes. The `browser-steel` plugin still exists (disabled) if needed in future.
## Detail
### Camoufox (current primary)
- **Deployed:** Persistent systemd service on CT450
- **Connection:** REST API at `localhost:9093`, profile `anthony`, sessionKey `anthony`
- **Key advantage:** Runs on the same host as Hermes — no network hop, no container networking to debug
- **Auth:** Already authenticated into services (Uber Eats, LinkedIn, etc.) — no cookie files needed
- **Limitation:** Headed via Xvfb, consumes display resources
### Steel Browser (disabled but available)
- **Deployed:** 2026-07-29 on CT201, Docker, custom `steel-browser-api:fixed` image
- **Status:** Still running on CT201, Hermes not connected
- **CDP endpoint:** `http://100.96.244.39:9223`
- **REST API:** `http://100.96.244.39:3000`
- **UI:** `https://runtipi.kangaroo-eel.ts.net/steel`
- **Plugin:** `browser-steel` at `/home/hermes/.hermes/plugins/browser-steel/` — disabled, `plugin_steel` toolset flagged `requires_health=steel`
## Related
- [[systems/browser-backend]]
- [[concepts/browser-automation]]
- [[decisions/rollback-steel-to-camofox]]