Repository navigation
Roadmap and Known Gaps
Sam LABBE edited this page Oct 13, 2026
·
1 revision
Stated plainly — the same bar the README holds itself to. Every gap here is measured or reproducible, not hand-waved.
| Gap | Status |
|---|---|
| Real (OS-level) mouse input |
/key ships native-first keyboard (CGEvent/SendInput/XTEST); the mouse equivalent is not built yet. /click uses real pointer+mouse events in-page — but not OS-level cursor motion. |
| Request/response network interception | Not built. No CDP, no proxy-rewrite API. --proxy routes traffic but doesn't inspect it. |
| OS file-dialog automation | Not built — and deliberately side-stepped: /upload fills file inputs page-side via DataTransfer, no OS dialog involved. |
| Full-page screenshots | Not implemented; viewport capture only (set the viewport before navigating). Tracked honestly rather than approximated. |
| Passkey sheet on unsigned builds | The WebAuthn ceremony plumbing ships, but Apple's AuthenticationServicesAgent refuses the sheet to builds without a real signing Team ID (Told not to present authorization sheet, ASC 1 → AS 1004 — measured in the unified log). A Developer ID–signed build is the unlock to retest; everything else is in place. |
-
#6 — Linux disk footprint: WebKitGTK writes HTTP cache + HSTS to
~/.cache/navette/~/.local/share/navette(no cookies, no logins). Needs a wry ephemeral-context lifetime fix; wry 0.57 has no upgrade path today. Also the origin of the WebView2 one-profile-per-session + InPrivate design. -
#7 — WebKitGTK cookie writes:
/evaluatescripts that writedocument.cookietime out (reads work). Workaround:/sessions/load. Mitigation sibling shipped:NAVETTE_EVAL_TIMEOUT_SECS(default 20, clamp 5–300) for slow/contended environments. -
#8 — keychain states + origin-bound credentials: shipped in two stages (state save → keychain; creds +
/loginorigin-bound fill). The origin-binding is the defense; at fill time the password does reach the page (same as human typing). - #9 — cold CI freeze: the v1.9.0 release asset froze on cold CI runners before the listener bound (38 s cold boots are this repo's known constant). Every green Linux CI job builds from source.
-
#10 — one-shot wry navigation race: redirected navigations timed out (completion was URL-match only) and two back-to-back navigations raced the event loop on CI. Fixes: URL-match completion shipped,
nav_untilretry everywhere, single-navigation install flows.
Native crashes on the non-macOS backends are being chased with a repro kit (docs/debug-vm.md): the Linux GTK/WebKit segfault ~10 s after boot (gdb backtrace names the guilty frame — libwebkit2gtk/libgtk/wry), and the Windows WebView2 crash during navigation (serve.log breadcrumbs show the last create_session step). Each backtrace becomes an issue with the exact data.
- Engine tier 2/3 hardening — WebView2 Fixed Version embed; WPE WebKit (~60 MB, no desktop stack) for bare containers (see Architecture).
-
Hand-rolled backend seam — the
WebviewKittrait is the plug point for direct WebKitGTK/WebView2 FFI (no wry) if/when wry's limits bite. - Passkey retest on a Developer ID build — the one measurement blocking the WebAuthn story.
- Full-page screenshots, OS-level mouse, network interception — the three shipped-gaps above, in no promised order.
- A thin CDP shim — only if the world asks; not a drop-in Playwright is the point.
- No vendored browser, ever — that trade is the thing navette exists to refuse.
- Loopback-only binding — there is no flag that changes it.
- Captchas are never solved by the machine —
session_showis the design (Secrets and Logins). - Claims stay measured: tables get corrections, not footnotes (Benchmarks).
slabbdev/navette · v1.9.0 · MIT — the browser for agents. One tiny Rust binary, the WebView your OS already ships.
navette — the browser for agents
- Home
- Use it
- Sessions, secrets, humans
- Ecosystem
- Evidence
- Project