<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nadir Ali Khan</title>
    <description>The latest articles on DEV Community by Nadir Ali Khan (@nadiraliofficial).</description>
    <link>https://dev.to/nadiraliofficial</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4224411%2Fa5d66ceb-1ed3-4d0f-ae1d-58c202c290c6.jpg</url>
      <title>DEV Community: Nadir Ali Khan</title>
      <link>https://dev.to/nadiraliofficial</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nadiraliofficial"/>
    <language>en</language>
    <item>
      <title>I built GhostTab: AI agents drive my real browser as text, in a hidden tab</title>
      <dc:creator>Nadir Ali Khan</dc:creator>
      <pubDate>Tue, 03 Nov 2026 13:56:54 +0000</pubDate>
      <link>https://dev.to/nadiraliofficial/i-built-ghosttab-ai-agents-drive-my-real-browser-as-text-in-a-hidden-tab-3j18</link>
      <guid>https://dev.to/nadiraliofficial/i-built-ghosttab-ai-agents-drive-my-real-browser-as-text-in-a-hidden-tab-3j18</guid>
      <description>&lt;p&gt;Screenshot-based browser agents were slow and expensive for me, and they kept taking over my screen. So I built &lt;strong&gt;GhostTab&lt;/strong&gt;: a small CLI (&lt;code&gt;b&lt;/code&gt;) that lets any agent with a shell (Claude Code, Codex…) use my real, logged-in Chrome or Brave &lt;strong&gt;as text&lt;/strong&gt;, inside a hidden window.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why text instead of screenshots
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it looks like
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;b &lt;span class="nb"&gt;bg &lt;/span&gt;on                  &lt;span class="c"&gt;# hidden, minimized window that shares your logins&lt;/span&gt;
b go https://example.com
b text 0 2000            &lt;span class="c"&gt;# read a slice of the page&lt;/span&gt;
b el                     &lt;span class="c"&gt;# numbered clickable/fillable elements&lt;/span&gt;
b click 12
b form                   &lt;span class="c"&gt;# every field of a form in one call&lt;/span&gt;
b fillform @answers.json &lt;span class="c"&gt;# fill it, incl. react-select, radios, uploads&lt;/span&gt;
b ocr total              &lt;span class="c"&gt;# on-device OCR (Apple Vision), no image tokens&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Safety rails
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Final clicks (Submit / Send / Pay) need an exact text match, and are refused on stale or already-submitted pages&lt;/li&gt;
&lt;li&gt;Uploads of keys, &lt;code&gt;.env&lt;/code&gt; files and dotfolders are blocked&lt;/li&gt;
&lt;li&gt;Every final click is logged to &lt;code&gt;submits.log&lt;/code&gt;, so you can audit what was sent&lt;/li&gt;
&lt;li&gt;It never types passwords or 2FA codes; you log in yourself&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real test
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;macOS only for now (AppleScript plus an optional extension bridge for background real input). Free and open source (MIT):&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/NadirAliOfficial/ghosttab" rel="noopener noreferrer"&gt;https://github.com/NadirAliOfficial/ghosttab&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love feedback, especially on the safety model and prompt injection. What would you want it to do next?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>showdev</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
