Ghostget

Comparison · Ghostget 0.18.27

browser-use drives a browser. Ghostget removes the wheel.

browser-use is the open-source Python library that turns an LLM into a web agent: the model observes the page, plans, clicks, and repeats until the goal is done. Ghostget answers a different need. It is a local CLI and TypeScript SDK where the agent names a reviewed outcome and gets one bounded result, with no browser it can steer at all.

This page describes browser-use's published model and Ghostget's v0.18.27 contract, checked against each project's public source in September 2026.

Two execution models

browser-use owns the loop. The model sees the current page through DOM serialization and optional screenshots, decides the next action, executes it through CDP, and observes again. Persistent sessions, multi-tab flows, and self-recovery are the point: when a flow breaks, the model finds another path through the live page.

Ghostget owns the operation. The agent asks for an outcome such as messaging.list or a URL read. The kernel binds the exact provider, account realm, transport, contract version, and risk level, runs one exchange, and returns a typed result. There is no session the model can improvise inside: no selectors, no coordinates, no next click to invent.

The context bill is the loop

A browser-use step re-reads the page, so the token cost of a task grows with its step count and page complexity. Every screenshot and DOM dump joins the context. That is the price of open-ended reach, and for genuinely novel tasks it is often worth paying.

Ghostget pays once. A measured September 2026 read of a Wikipedia article returned 15,021 bytes of Markdown where the raw page served 145,617 bytes of HTML, roughly 3,800 tokens against 36,000, from a single HTTP request with no browser process. The number that matters is not one page but the shape of the curve: one bounded result per call, not page state per step.

Side by side

Decision browser-use Ghostget
What the caller supplies A goal in plain language; the library picks the steps A named operation and its typed input; the contract picks the exchange
What enters model context Page state on every step, plus action history Only the result: Markdown, an archive, a typed receipt, or a typed error
Credentials Live in the driven browser's session, reachable by the model's actions Opaque to the caller and bound to one account realm, provider target, and transport
When a page changes The model adapts mid-flow, for better or worse The operation fails closed until its contract is reviewed; there is no DOM fallback
Reach Anything a real browser can do, including flows nobody reviewed Only the reviewed operations in the installed release
Runs where Local Python, or hosted through Browser Use Cloud Local CLI or TypeScript SDK on macOS or Linux; nothing is hosted

When to pick which

Pick browser-use when the task is open-ended, the path is unknown, and recovery matters more than auditability: research crawls, one-off flows, sites with no stable contract. The model's freedom to improvise is the feature.

Pick Ghostget when the task recurs and the boundary is the point: reading a connected inbox, publishing through a reviewed operation, archiving one authorized media item, or capturing a page as durable Markdown. You give up reach and gain a call you can reason about, diff in review, and firewall behind an exact operation set.

They compose cleanly: keep a driver for the long tail, and put Ghostget in front of the paths that must behave the same way every run.