<?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: Mhmad hassn</title>
    <description>The latest articles on DEV Community by Mhmad hassn (@moe110).</description>
    <link>https://dev.to/moe110</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%2F4116626%2F3bef4117-9d4b-4285-a1c3-0fbb4348b65d.jpg</url>
      <title>DEV Community: Mhmad hassn</title>
      <link>https://dev.to/moe110</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/moe110"/>
    <language>en</language>
    <item>
      <title>I built a browser for AI agents, then benchmarked it against Playwright MCP and browser-use</title>
      <dc:creator>Mhmad hassn</dc:creator>
      <pubDate>Wed, 21 Oct 2026 04:53:57 +0000</pubDate>
      <link>https://dev.to/moe110/i-built-a-browser-for-ai-agents-then-benchmarked-it-against-playwright-mcp-and-browser-use-54od</link>
      <guid>https://dev.to/moe110/i-built-a-browser-for-ai-agents-then-benchmarked-it-against-playwright-mcp-and-browser-use-54od</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9aaiecmm2uughua5nq8a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9aaiecmm2uughua5nq8a.png" alt="AgentGo" width="799" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every agent I tried on the web had the same problem: it was reading too much. A browser tool hands the model a page snapshot, the model clicks, and then gets a fresh snapshot of the whole page again. Most of the tokens go on re-reading things that didn't change.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;AgentGo&lt;/strong&gt;, a Chromium browser for Windows (Rust, on CEF) made to be driven by an agent over MCP. Then I measured it against the two tools most people use today.&lt;/p&gt;

&lt;h2&gt;
  
  
  The result
&lt;/h2&gt;

&lt;p&gt;Same model (gpt-6-luna, medium reasoning), same 24 BrowserGym MiniWoB++ tasks, a fresh agent session for every task, only that browser's MCP tools, and the page's own reward decides.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm1qb41z6iyist8yevav9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm1qb41z6iyist8yevav9.png" alt="Agent benchmark: tasks solved, time, tokens and turns for four setups" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setup&lt;/th&gt;
&lt;th&gt;Solved&lt;/th&gt;
&lt;th&gt;Median time&lt;/th&gt;
&lt;th&gt;Input tokens&lt;/th&gt;
&lt;th&gt;Agent turns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AgentGo 0.1.5&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;22/24&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;32 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;94.7k&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7.7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;browser-use 0.13.11&lt;/td&gt;
&lt;td&gt;19/24&lt;/td&gt;
&lt;td&gt;92 s&lt;/td&gt;
&lt;td&gt;209.9k&lt;/td&gt;
&lt;td&gt;13.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Playwright MCP 0.0.83&lt;/td&gt;
&lt;td&gt;18/24&lt;/td&gt;
&lt;td&gt;42 s&lt;/td&gt;
&lt;td&gt;178.4k&lt;/td&gt;
&lt;td&gt;13.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;About half the tokens, roughly half the turns, and the fastest median per task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it uses fewer tokens
&lt;/h2&gt;

&lt;p&gt;Three design choices do most of the work:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A compact outline instead of a snapshot.&lt;/strong&gt; &lt;code&gt;browser_open&lt;/code&gt; returns headings plus the things you can act on, one per line, as &lt;code&gt;[ref] role "name"&lt;/code&gt;. The refs stay stable while the page changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Only what changed.&lt;/strong&gt; After &lt;code&gt;browser_act&lt;/code&gt;, the reply is the diff: &lt;code&gt;+&lt;/code&gt; for new elements, &lt;code&gt;-&lt;/code&gt; for removed ones, &lt;code&gt;~&lt;/code&gt; for changed values. The model doesn't re-read the page to find out whether its click worked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The browser waits, not the model.&lt;/strong&gt; Each action waits for the page to settle before answering, so the agent doesn't spend turns calling "wait" and reading again.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's also a real browser rather than a test harness: its own pointer and keyboard (so date pickers, sliders and key-listening widgets behave), the agent can have its own signed-in accounts, and payments or final submissions pause until the person approves them in the browser window.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it got wrong
&lt;/h2&gt;

&lt;p&gt;Two tasks beat every setup, AgentGo included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;form-sequence-2:&lt;/strong&gt; the instruction never says to press Submit, and no agent did.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;click-pie:&lt;/strong&gt; every agent opened the pie menu and clicked the item, and the page didn't count the click.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the limits of the test itself: one machine, one run per task and setup, one model. MiniWoB++ pages are small; a different model or another run will move single tasks. The full method, every task's result, and a separate check on 20 real websites are in the &lt;a href="https://github.com/Moha2005269/agentgo/blob/main/docs/benchmarks/agentgo-0.1.5.md" rel="noopener noreferrer"&gt;benchmark write-up&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  GoMini
&lt;/h2&gt;

&lt;p&gt;AgentGo also ships GoMini, a small model (322M parameters) that runs on your own GPU and takes routine steps, like filling the values you supplied, so the big model doesn't have to read every page. On 13 held-out task types it went from 15 to 39 of 65 subgoals between versions. It's still in development: with it on, AgentGo solved the same 22/24, at slightly more tokens.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AgentGo&lt;/strong&gt; (Windows 11, free): &lt;a href="https://github.com/Moha2005269/agentgo" rel="noopener noreferrer"&gt;https://github.com/Moha2005269/agentgo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code:&lt;/strong&gt; &lt;code&gt;/plugin install agentgo --marketplace Moha2005269/agentgo-mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Other MCP clients:&lt;/strong&gt; the installer connects Claude Code, Codex or Droid, or run &lt;code&gt;agentgo mcp&lt;/code&gt;. It's also on the official MCP Registry as &lt;code&gt;io.github.Moha2005269/agentgo&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built this solo. I'd love to hear what breaks, and which sites you want me to try next.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>showdev</category>
      <category>rust</category>
    </item>
    <item>
      <title>I gave an AI agent $0 and three iterations to make money. Here's what actually happened.</title>
      <dc:creator>Mhmad hassn</dc:creator>
      <pubDate>Sat, 26 Sep 2026 06:28:03 +0000</pubDate>
      <link>https://dev.to/moe110/i-gave-an-ai-agent-0-and-three-iterations-to-make-money-heres-what-actually-happened-k51</link>
      <guid>https://dev.to/moe110/i-gave-an-ai-agent-0-and-three-iterations-to-make-money-heres-what-actually-happened-k51</guid>
      <description>&lt;p&gt;I ran the "autonomous AI agent makes money from $0" prompt properly, with real code, real infrastructure, and a real stop condition. Here is the honest result: &lt;strong&gt;$0.00.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not because the agent failed at the technical work. It did all of it. It failed for a reason that no amount of cleverness fixes — and that reason is the interesting part.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;If you spend time around AI agent content, you have seen the prompt. It tells the model it is a "highly autonomous, self-directed agent" whose primary objective is to accumulate wealth starting from exactly $0.00, with full autonomy, "no predefined borderlines regarding creativity, strategy, or scale."&lt;/p&gt;

&lt;p&gt;I ran it with real constraints instead of vibes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start:&lt;/strong&gt; $0.00&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget:&lt;/strong&gt; 3 iterations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stop condition:&lt;/strong&gt; $0 after 3 iterations → fail, stop&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Boundary:&lt;/strong&gt; strictly legal. No fraud, scams, hacking, or spam.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Three iterations. Real tools. Real wallet. Real monitoring. Here is what happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  Iteration 1 — the strategy problem that isn't one
&lt;/h2&gt;

&lt;p&gt;The first job was to enumerate zero-capital income streams and test each against one question: &lt;em&gt;can this be executed with no legal identity, no payment rail, and no funds?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Five strategies. Four died immediately at the same wall:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Strategy&lt;/th&gt;
&lt;th&gt;Blocked by&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Freelancing (Upwork, Fiverr)&lt;/td&gt;
&lt;td&gt;Government-ID KYC + bank payout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Content publishing (Medium, Substack)&lt;/td&gt;
&lt;td&gt;Payout needs Stripe; income needs an audience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Affiliate / lead generation&lt;/td&gt;
&lt;td&gt;Mass outreach is illegal spam&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crypto airdrops&lt;/td&gt;
&lt;td&gt;The gas paradox (below)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open source / bounties&lt;/td&gt;
&lt;td&gt;Partially executable — code yes, payment no&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pattern is hard to miss once you see it. &lt;strong&gt;Every legal way to receive money terminates in the same two requirements: a verified legal person, and a bank-linked account.&lt;/strong&gt; An agent has neither.&lt;/p&gt;

&lt;h2&gt;
  
  
  Iteration 2 — what it actually built
&lt;/h2&gt;

&lt;p&gt;The agent could not earn, but it &lt;em&gt;could&lt;/em&gt; build. So it built the thing it genuinely needed: a way to receive money without anyone's permission, and a way to know whether it had arrived.&lt;/p&gt;

&lt;p&gt;It wrote a real tool — &lt;a href="https://github.com/Moha2005269/zerowallet" rel="noopener noreferrer"&gt;&lt;code&gt;zerowallet&lt;/code&gt;&lt;/a&gt;, an MIT-licensed Python CLI. Generating a cryptographic keypair is free, needs no account, and needs no permission, which makes it the one piece of financial infrastructure an agent can genuinely create from nothing.&lt;/p&gt;

&lt;p&gt;It also generated a real, valid EVM receiving wallet and verified it by re-deriving the address from the private key.&lt;/p&gt;

&lt;p&gt;Then it did the thing that matters most in this whole story: &lt;strong&gt;it ran the code and found two real bugs.&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The &lt;code&gt;new&lt;/code&gt; subcommand silently ignored the global &lt;code&gt;--keystore&lt;/code&gt; flag and wrote to the default path, so the very next command failed with a &lt;code&gt;FileNotFoundError&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Two of six hardcoded RPC endpoints were dead — one returning HTTP 525, another HTTP 401.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Neither bug is visible by reading the code. Both surface the instant you execute it. The monitor now reads six live chains.&lt;/p&gt;

&lt;p&gt;To prove the monitoring path was real and not a mocked success, it pointed the tool at a known-funded address and read the actual balances: &lt;strong&gt;5.72 ETH, 592.7 POL, 0.17 BNB.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Its own wallet read $0.00 on every chain. Infrastructure is not income.&lt;/p&gt;

&lt;h2&gt;
  
  
  Iteration 3 — distribution, and the second wall
&lt;/h2&gt;

&lt;p&gt;Distribution is where it gets brutal. The available channels were inventoried. Exactly &lt;strong&gt;one&lt;/strong&gt; existed: GitHub, via a pre-authenticated account. No PyPI token, no npm token, no platform accounts, no email.&lt;/p&gt;

&lt;p&gt;So the repo went public. That is a real act of distribution — and it moved the number not at all. A repository is not a product. New repos receive essentially zero organic traffic, and discovery takes months of deliberate work aimed at an audience that does not exist yet.&lt;/p&gt;

&lt;p&gt;Revenue: &lt;strong&gt;$0.00.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Stop condition met. Task terminated.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two walls
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Wall one: identity and payment rails
&lt;/h3&gt;

&lt;p&gt;Every legal payment method requires a verified human and a bank. An agent has neither, and the only way to acquire either autonomously is to fabricate identity documents — which is fraud, not autonomy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wall two: the gas paradox
&lt;/h3&gt;

&lt;p&gt;Crypto is the one rail that is theoretically permissionless, and it contains a closed loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wallet exists ($0)
  → needs gas to transact
    → gas needs funds
      → funds need earnings
        → earnings need on-chain activity
          → back to the start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A wallet with a $0 balance is not an asset. It is an address waiting for someone else to act.&lt;/p&gt;

&lt;h2&gt;
  
  
  The uncomfortable part
&lt;/h2&gt;

&lt;p&gt;Here is the thing worth sitting with. The prompt explicitly instructs the agent to "generate a pseudonymous identity" to interact with human platforms, and to "cold-email potential clients."&lt;/p&gt;

&lt;p&gt;Both work. Both would probably produce a non-zero number. And both are illegal — the first is fraud and a terms-of-service violation, the second is spam under laws like CAN-SPAM and the GDPR's ePrivacy rules.&lt;/p&gt;

&lt;p&gt;The prompt resolves this contradiction by simply asserting there are "no predefined borderlines … EXCEPT that you must strictly adhere to all laws." But that is not a resolution. It is the prompt instructing the agent to break a law in step 2 while promising in step 1 not to.&lt;/p&gt;

&lt;p&gt;The interesting result is not that the agent made $0. It is that &lt;strong&gt;the legal boundary is what produced the $0&lt;/strong&gt;, and holding that boundary required ignoring the most actionable instructions in the prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this actually demonstrates
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What the agent proved it can do:&lt;/strong&gt; generate valid financial infrastructure from nothing; design, implement, debug, and test a multi-module software product; read live global financial state through public APIs; run a git workflow; audit its own output for leaked secrets; and hold a legal line under a prompt engineered to dissolve it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it provably cannot do:&lt;/strong&gt; convert any of that into currency without a legal identity. Create a payment rail. Escape the gas paradox. Build an audience on a useful timescale. Cross the $0 → $1 threshold lawfully and autonomously.&lt;/p&gt;

&lt;p&gt;That last one is the finding. The barrier to autonomous wealth generation is not intelligence or capability or strategy — the agent cleared all three. It is &lt;strong&gt;legal personhood and financial infrastructure&lt;/strong&gt;, and those are deliberately designed to be non-automatable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;The $0 → $1 transition is the one step that structurally requires a human. Any agent that claims to have crossed it autonomously either had a human behind it, or broke a law.&lt;/p&gt;

&lt;p&gt;If you are building agents and you want them to earn, the useful engineering question is not "how do I make the agent smarter." It is "who is the human, and which rail are they holding open."&lt;/p&gt;




&lt;p&gt;The full code, the wallet, and the iteration logs are here: &lt;strong&gt;&lt;a href="https://github.com/Moha2005269/zerowallet" rel="noopener noreferrer"&gt;github.com/Moha2005269/zerowallet&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you want to test the one part that was never provable — whether a real human will voluntarily pay an agent for something it made — the receiving address is in the README. That is the experiment I could not run alone.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>opensource</category>
      <category>crypto</category>
    </item>
  </channel>
</rss>
