<?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: Sekhar</title>
    <description>The latest articles on DEV Community by Sekhar (@u_sekhar_07bfaf2277a48161).</description>
    <link>https://dev.to/u_sekhar_07bfaf2277a48161</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%2F4062785%2F9e74948c-3d65-4699-844f-2d9df2a93398.png</url>
      <title>DEV Community: Sekhar</title>
      <link>https://dev.to/u_sekhar_07bfaf2277a48161</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/u_sekhar_07bfaf2277a48161"/>
    <language>en</language>
    <item>
      <title>I built a BYOK AI agent that tests your app while you're building it, then turns the passing run into a real Playwright spec</title>
      <dc:creator>Sekhar</dc:creator>
      <pubDate>Tue, 04 Aug 2026 15:58:49 +0000</pubDate>
      <link>https://dev.to/u_sekhar_07bfaf2277a48161/i-built-a-byok-ai-agent-that-tests-your-app-while-youre-building-it-then-turns-the-passing-run-58gh</link>
      <guid>https://dev.to/u_sekhar_07bfaf2277a48161/i-built-a-byok-ai-agent-that-tests-your-app-while-youre-building-it-then-turns-the-passing-run-58gh</guid>
      <description>&lt;p&gt;I kept doing the same manual thing while building features: change some code, reload the page, click through the flow by hand to check it still works, repeat. So I built &lt;strong&gt;five46&lt;/strong&gt; to do that clicking-around for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;You give it a URL and a goal in plain English — &lt;em&gt;"log in and confirm the dashboard loads"&lt;/em&gt; — and an LLM (your own OpenAI/Anthropic/Gemini/Groq/Bedrock key) drives a real local Playwright browser toward it, one action at a time.&lt;/p&gt;

&lt;p&gt;When it succeeds, that exact run gets written out as a real, standalone Playwright spec you keep — so the manual check you were already going to do becomes a permanent regression test afterward, with &lt;strong&gt;no LLM or five46 involved in ever running it again&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; five46
five46 &lt;span class="nb"&gt;test &lt;/span&gt;http://localhost:3000 &lt;span class="nt"&gt;--goal&lt;/span&gt; &lt;span class="s2"&gt;"log in and confirm the dashboard loads"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why I built it this way
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Fully local, BYOK
&lt;/h3&gt;

&lt;p&gt;Everything runs on your machine.&lt;/p&gt;

&lt;p&gt;The only thing that leaves it is the page's visible text sent to your LLM provider per step — always disclosed, never hidden. No cloud sandbox sees your app's traffic or screenshots, which matters if your organization can't send application data off-machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Honest failure reporting
&lt;/h3&gt;

&lt;p&gt;A failed assertion comes back as a real finding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Screenshot&lt;/li&gt;
&lt;li&gt;DOM snapshot&lt;/li&gt;
&lt;li&gt;LLM-generated root-cause hypothesis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are clearly separated from tooling failures such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A stuck or looping agent&lt;/li&gt;
&lt;li&gt;An unparseable LLM response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I spent a lot of this project's time specifically hunting for ways it could silently claim success when it hadn't:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A compound goal only half-verified&lt;/li&gt;
&lt;li&gt;A weak assertion passing before the real check&lt;/li&gt;
&lt;li&gt;One scenario's crash silently hiding another scenario's passing result in batch mode&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Speed
&lt;/h3&gt;

&lt;p&gt;LLM round-trip latency dominates wall-clock time, not five46's own code.&lt;/p&gt;

&lt;p&gt;Structured planning (enabled by default) performs one upfront LLM call to plan the entire goal, then most execution steps happen without additional live decision-making.&lt;/p&gt;

&lt;p&gt;I actually measured this instead of guessing. Using the same login flow against a live demo site with the free Gemini tier:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Default (structured planning)&lt;/td&gt;
&lt;td&gt;~7–8 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fully adaptive fallback&lt;/td&gt;
&lt;td&gt;~11 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Other things it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API/backend testing&lt;/strong&gt; — No browser required. Drives real HTTP requests and generates a plain &lt;code&gt;node:test&lt;/code&gt; script instead of a Playwright spec.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP server&lt;/strong&gt; — &lt;code&gt;five46 mcp&lt;/code&gt; exposes five46 as a tool that IDE coding agents (Claude Code, Cursor, etc.) can call directly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-healing selectors&lt;/strong&gt; — A stale selector gets one bounded, fully disclosed recovery attempt instead of immediately failing the step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Story mode&lt;/strong&gt; — Splits a multi-acceptance-criteria user story into independent goals, executes them concurrently, and reports pass/fail for each acceptance criterion.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Status
&lt;/h2&gt;

&lt;p&gt;This is still an early project.&lt;/p&gt;

&lt;p&gt;It's been tested end-to-end with real LLM API keys across dozens of live websites and APIs, but I'd genuinely appreciate feedback—especially on places where &lt;em&gt;"the AI decided this passed"&lt;/em&gt; still feels too unproven to trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/sekharsdet/five46" rel="noopener noreferrer"&gt;https://github.com/sekharsdet/five46&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>automation</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
