<?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: Shanewas Ahmed</title>
    <description>The latest articles on DEV Community by Shanewas Ahmed (@shanewas).</description>
    <link>https://dev.to/shanewas</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%2F3950052%2Fa774d32d-abee-48c2-9c48-e12d731266a7.jpg</url>
      <title>DEV Community: Shanewas Ahmed</title>
      <link>https://dev.to/shanewas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shanewas"/>
    <language>en</language>
    <item>
      <title>Driving Your Real Microsoft Edge Tabs from AI Agents with edge-agent-bridge</title>
      <dc:creator>Shanewas Ahmed</dc:creator>
      <pubDate>Wed, 30 Sep 2026 06:14:52 +0000</pubDate>
      <link>https://dev.to/shanewas/driving-your-real-microsoft-edge-tabs-from-ai-agents-with-edge-agent-bridge-59pg</link>
      <guid>https://dev.to/shanewas/driving-your-real-microsoft-edge-tabs-from-ai-agents-with-edge-agent-bridge-59pg</guid>
      <description>&lt;p&gt;Most browser automation tools built for AI agents start from an inconvenient premise: they assume your task wants a clean, empty browser window. &lt;/p&gt;

&lt;p&gt;Tools like Playwright or Puppeteer boot disposable profiles in headless mode. That's fine for running test suites in continuous integration. It falls flat the moment you want an agent to handle daily engineering work, like approving a pull request behind corporate SAML or pulling a report from an internal intranet portal. &lt;/p&gt;

&lt;p&gt;Standard headless browsers don't have your session cookies. They trigger Cloudflare turnstiles, get blocked by bot detectors, and can't pass hardware key 2FA prompts.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;edge-agent-bridge&lt;/strong&gt; to sidestep this entirely. Instead of fighting bot walls in a sandbox, it drives the browser tabs you already have open: Edge and Chrome both work.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Drive the Live Browser?
&lt;/h2&gt;

&lt;p&gt;When an agent controls your open Edge or Chrome tabs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authenticated sessions stay valid. You log in once via SSO; your agent uses that existing state.&lt;/li&gt;
&lt;li&gt;Actions dispatch through Chrome DevTools Protocol as real, trusted input events (&lt;code&gt;isTrusted: true&lt;/code&gt;), not injected synthetic JavaScript clicks.&lt;/li&gt;
&lt;li&gt;Corporate VPN tunnels and client certificates work without extra configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything runs locally. A small background daemon listens on &lt;code&gt;127.0.0.1:18999&lt;/code&gt; and coordinates requests between your agent tools and a companion browser extension.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Install the PyPI Package
&lt;/h3&gt;

&lt;p&gt;The client requires Python 3.10+ and has zero third-party dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;edge-agent-bridge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Add the Companion Extension
&lt;/h3&gt;

&lt;p&gt;The extension ships on both stores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Edge:&lt;/strong&gt; &lt;a href="https://microsoftedge.microsoft.com/addons/detail/agent-browser-bridge/dfkieodkfepoidihjapiggpjmfapanpd" rel="noopener noreferrer"&gt;Agent Browser Bridge on Microsoft Edge Add-ons&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chrome:&lt;/strong&gt; &lt;a href="https://chromewebstore.google.com/detail/agent-browser-bridge/dfkieodkfepoidihjapiggpjmfapanpd" rel="noopener noreferrer"&gt;Agent Browser Bridge on Chrome Web Store&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you prefer building from source, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;edge-bridge extension open
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That command displays the extension directory path. From there, open &lt;code&gt;edge://extensions&lt;/code&gt;, toggle Developer mode on, and pick "Load unpacked".&lt;/p&gt;

&lt;p&gt;Verify the background service anytime:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;edge-bridge daemon status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Three Ways to Use It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Element-Ref CLI
&lt;/h3&gt;

&lt;p&gt;The CLI uses an accessibility snapshot model. It maps visible interactive nodes to short ref tokens (&lt;code&gt;e1&lt;/code&gt;, &lt;code&gt;e2&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Capture the active tab&lt;/span&gt;
edge-bridge snapshot

&lt;span class="c"&gt;# Output format:&lt;/span&gt;
&lt;span class="c"&gt;# - textbox "Search" [e1] value=""&lt;/span&gt;
&lt;span class="c"&gt;# - button "Submit" [e2]&lt;/span&gt;

&lt;span class="c"&gt;# Click or type by ref&lt;/span&gt;
edge-bridge fill e1 &lt;span class="s2"&gt;"agentic automation"&lt;/span&gt;
edge-bridge click e2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Refs prevent accidental clicks. If the page reloads or DOM nodes shift before your command finishes, the bridge flags the stale ref and stops rather than clicking the wrong element.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Python Scripting
&lt;/h3&gt;

&lt;p&gt;For standalone automation scripts, import the &lt;code&gt;Edge&lt;/code&gt; client:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;edge_agent_bridge&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Edge&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nc"&gt;Edge&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;snap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;snapshot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;e1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;edge-agent-bridge&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;e2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Done&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The context manager locks onto the active tab from your first query. If you click into another desktop window while the script runs, execution won't wander to the wrong tab.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. MCP Server for Coding Assistants
&lt;/h3&gt;

&lt;p&gt;You can wire Edge control straight into Claude Code, Cursor, Windsurf, or Gemini CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;edge-bridge setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This registers 29 tools (prefixed with &lt;code&gt;edge_&lt;/code&gt;) using the Model Context Protocol stdio transport. Your coding assistant can inspect the DOM tree, fill forms, press key shortcuts, and capture targeted element screenshots.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security and Privacy
&lt;/h2&gt;

&lt;p&gt;Because the extension interacts with your live tabs, the safety boundaries are intentionally conservative:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The daemon binds strictly to loopback (&lt;code&gt;127.0.0.1&lt;/code&gt;). It inspects the &lt;code&gt;Host&lt;/code&gt; header and rejects external origins or DNS rebinding with HTTP 421.&lt;/li&gt;
&lt;li&gt;Mutating actions require local authorization tokens stored in your user directory.&lt;/li&gt;
&lt;li&gt;No network requests leave your machine. There are no telemetry pings, no remote trackers, no crash reporters, and no hosted cloud relays.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out the project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PyPI:&lt;/strong&gt; &lt;a href="https://pypi.org/project/edge-agent-bridge/" rel="noopener noreferrer"&gt;edge-agent-bridge&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge Add-ons:&lt;/strong&gt; &lt;a href="https://microsoftedge.microsoft.com/addons/detail/agent-browser-bridge/dfkieodkfepoidihjapiggpjmfapanpd" rel="noopener noreferrer"&gt;Agent Browser Bridge&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chrome Web Store:&lt;/strong&gt; &lt;a href="https://chromewebstore.google.com/detail/edge-agent-bridge/lknjdleggnheadkkjfngphdbcglalmmg" rel="noopener noreferrer"&gt;Agent Browser Bridge&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
      <category>automation</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>Open-source Playwright wrapper that passes bot.sannysoft.com, pixelscan, and CreepJS in headless mode</title>
      <dc:creator>Shanewas Ahmed</dc:creator>
      <pubDate>Mon, 25 May 2026 06:29:09 +0000</pubDate>
      <link>https://dev.to/shanewas/open-source-playwright-wrapper-that-passes-botsannysoftcom-pixelscan-and-creepjs-in-headless-5h3b</link>
      <guid>https://dev.to/shanewas/open-source-playwright-wrapper-that-passes-botsannysoftcom-pixelscan-and-creepjs-in-headless-5h3b</guid>
      <description>&lt;p&gt;Been scraping for a while and got tired of getting blocked the moment a page loads. Standard Playwright leaks everywhere — TLS fingerprint, navigator.webdriver, WebGL renderer differences.&lt;/p&gt;

&lt;p&gt;Built a library that handles all of that before the page even loads:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. Region-spoofed TLS handshakes (Japan, US, EU, Korea) instead of Python's defaults&lt;/li&gt;
&lt;li&gt;2. JS patches that strip automation flags before first paint&lt;/li&gt;
&lt;li&gt;3. Human-like mouse movements and typing speed&lt;/li&gt;
&lt;li&gt;4. Auto proxy/session rotation on block detection&lt;/li&gt;
&lt;li&gt;5. Built-in MCP server for agent integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's on PyPI, MIT licensed:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;pip install agentic-stealth-browser&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://github.com/shanewas/agentic-stealth-browser" rel="noopener noreferrer"&gt;https://github.com/shanewas/agentic-stealth-browser&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tested against bot.sannysoft.com, pixelscan.net, and CreepJS — clean passes in headless mode.&lt;/p&gt;

&lt;p&gt;Would love feedback from people who actually hit these problems daily. What's the hardest site you've had to scrape?&lt;/p&gt;

</description>
      <category>automation</category>
      <category>opensource</category>
      <category>python</category>
      <category>webscraping</category>
    </item>
  </channel>
</rss>
