Screenshot-based browser agents were slow and expensive for me, and they kept taking over my screen. So I built GhostTab: a small CLI (b) that lets any agent with a shell (Claude Code, Codexβ¦) use my real, logged-in Chrome or Brave as text, inside a hidden window.
Why text instead of screenshots
A screenshot costs roughly 1,500 tokens. A compact text view of the same page, with numbered elements, is usually a few hundred. Over a long task that is about 5β10Γ cheaper, and faster too.
What it looks like
b bg on # hidden, minimized window that shares your logins
b go https://example.com
b text 0 2000 # read a slice of the page
b el # numbered clickable/fillable elements
b click 12
b form # every field of a form in one call
b fillform @answers.json # fill it, incl. react-select, radios, uploads
b ocr total # on-device OCR (Apple Vision), no image tokens
Safety rails
- Final clicks (Submit / Send / Pay) need an exact text match, and are refused on stale or already-submitted pages
- Uploads of keys,
.envfiles and dotfolders are blocked - Every final click is logged to
submits.log, so you can audit what was sent - It never types passwords or 2FA codes; you log in yourself
Real test
This week my agent used it to fill and submit about 40 job applications (LinkedIn Easy Apply and Greenhouse) in one day. Most of the fixes in the repo came from that run: shadow-DOM radios, react-select dropdowns, rich-text editors, daily limits.
Try it
macOS only for now (AppleScript plus an optional extension bridge for background real input). Free and open source (MIT):
π https://github.com/NadirAliOfficial/ghosttab
I'd love feedback, especially on the safety model and prompt injection. What would you want it to do next?
Top comments (0)