GhostGet gives your agent reviewed actions instead of a browser to drive
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 is a local CLI and TypeScript SDK where the agent asks for a reviewed outcome and gets one result, with no browser to steer.
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 structured 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 new, one-off 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. One page is only an example. What matters is that GhostGet returns one result per call, while a browser loop re-reads the page on every 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 declared input; the operation definition picks the exchange |
| What enters model context | Page state on every step, plus action history | Only the result: Markdown, an archive, a structured result, or a structured 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 fixed action set 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.