<?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: Web Agent Bridge</title>
    <description>The latest articles on DEV Community by Web Agent Bridge (@webagentbridge).</description>
    <link>https://dev.to/webagentbridge</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3825238%2F1407e7ff-2828-4a1f-b2c2-44bf2f963f3b.png</url>
      <title>DEV Community: Web Agent Bridge</title>
      <link>https://dev.to/webagentbridge</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/webagentbridge"/>
    <language>en</language>
    <item>
      <title>WAB web agent bridge</title>
      <dc:creator>Web Agent Bridge</dc:creator>
      <pubDate>Wed, 20 May 2026 16:11:20 +0000</pubDate>
      <link>https://dev.to/webagentbridge/wab-web-agent-bridge-5c3</link>
      <guid>https://dev.to/webagentbridge/wab-web-agent-bridge-5c3</guid>
      <description>&lt;p&gt;We are opening Web Agent Bridge (WAB) to deeper technical review, testing, and critical feedback from developers, security researchers, browser automation engineers, AI-agent builders, and privacy-focused infrastructure communities.&lt;/p&gt;

&lt;p&gt;WAB is an open AI ↔ Web protocol and agent interoperability layer designed to reduce brittle DOM automation and replace guesswork with signed, machine-readable capability contracts.&lt;/p&gt;

&lt;p&gt;The project currently includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DNS-based discovery (_wab)&lt;/li&gt;
&lt;li&gt;/.well-known/wab.json&lt;/li&gt;
&lt;li&gt;Signed trust profiles (Ed25519)&lt;/li&gt;
&lt;li&gt;Ring 4 trust verification&lt;/li&gt;
&lt;li&gt;Agent capability negotiation&lt;/li&gt;
&lt;li&gt;Intent-aware routing&lt;/li&gt;
&lt;li&gt;Governance and audit layers&lt;/li&gt;
&lt;li&gt;Privacy budget declarations&lt;/li&gt;
&lt;li&gt;Refusal and constitutional invariant handling&lt;/li&gt;
&lt;li&gt;Cross-agent verification flows&lt;/li&gt;
&lt;li&gt;SDKs and framework adapters&lt;/li&gt;
&lt;li&gt;MCP and browser-agent integrations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The broader goal is simple:&lt;/p&gt;

&lt;p&gt;Create a predictable, inspectable, privacy-aware interface between AI agents and the web — without requiring centralized control, invasive tracking, or fragile scraping logic.&lt;/p&gt;

&lt;p&gt;We are specifically interested in feedback regarding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;protocol design&lt;/li&gt;
&lt;li&gt;security assumptions&lt;/li&gt;
&lt;li&gt;trust boundaries&lt;/li&gt;
&lt;li&gt;abuse resistance&lt;/li&gt;
&lt;li&gt;privacy implications&lt;/li&gt;
&lt;li&gt;interoperability&lt;/li&gt;
&lt;li&gt;schema clarity&lt;/li&gt;
&lt;li&gt;agent discoverability&lt;/li&gt;
&lt;li&gt;edge-case behavior&lt;/li&gt;
&lt;li&gt;failure modes&lt;/li&gt;
&lt;li&gt;governance architecture&lt;/li&gt;
&lt;li&gt;machine-readability&lt;/li&gt;
&lt;li&gt;developer ergonomics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are not looking for hype.&lt;/p&gt;

&lt;p&gt;We are looking for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;serious testing&lt;/li&gt;
&lt;li&gt;architectural criticism&lt;/li&gt;
&lt;li&gt;implementation review&lt;/li&gt;
&lt;li&gt;adversarial thinking&lt;/li&gt;
&lt;li&gt;interoperability experiments&lt;/li&gt;
&lt;li&gt;independent verification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If parts of the design are flawed, we want to know.&lt;br&gt;
If assumptions break under real-world conditions, we want to see it.&lt;br&gt;
If there are better approaches, we are open to them.&lt;/p&gt;

&lt;p&gt;The protocol, SDKs, and specifications are public and reviewable.&lt;/p&gt;

&lt;p&gt;Repository:&lt;br&gt;
&lt;a href="https://github.com/abokenan444/web-agent-bridge" rel="noopener noreferrer"&gt;https://github.com/abokenan444/web-agent-bridge&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Documentation:&lt;br&gt;
&lt;a href="https://webagentbridge.com/docs" rel="noopener noreferrer"&gt;https://webagentbridge.com/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Architecture:&lt;br&gt;
&lt;a href="https://webagentbridge.com/ring4" rel="noopener noreferrer"&gt;https://webagentbridge.com/ring4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The long-term health of agent ecosystems will likely depend on open, inspectable, privacy-respecting standards rather than opaque automation layers.&lt;/p&gt;

&lt;p&gt;Constructive criticism is welco&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>wab</category>
      <category>opensource</category>
    </item>
    <item>
      <title>WAB web agent bridge</title>
      <dc:creator>Web Agent Bridge</dc:creator>
      <pubDate>Sat, 16 May 2026 07:10:57 +0000</pubDate>
      <link>https://dev.to/webagentbridge/wab-web-agent-bridge-eh7</link>
      <guid>https://dev.to/webagentbridge/wab-web-agent-bridge-eh7</guid>
      <description>&lt;p&gt;Everyone is talking about ACP, UCP, and WebMCP.&lt;br&gt;
OpenAI + Stripe built ACP. Google built UCP with Walmart, Visa, Mastercard. Chrome + Edge + W3C built WebMCP.&lt;br&gt;
Big names. Massive resources. Real traction.&lt;br&gt;
But they all solve the same problem: how an AI agent completes a purchase.&lt;br&gt;
None of them answer the question that comes before:&lt;br&gt;
→ How does an agent know it can TRUST the site it's about to transact with? → What stops an agent from executing on a phishing site? → Who proves what the agent actually did — and makes that proof public and verifiable? → What happens when an agent touches Stripe, Gmail, or ClickUp at 3am while you're asleep?&lt;br&gt;
This is the gap. And it's not small.&lt;br&gt;
It's called Web Agent Bridge (WAB).&lt;br&gt;
Here's what makes it structurally different from everything else in the space:&lt;br&gt;
——&lt;br&gt;
/ / → Agent reaches checkout → Agent verifies trust → operates within governance → proves what it did → then reaches checkout&lt;br&gt;
These aren't competing layers. WAB sits above all of them.&lt;br&gt;
——&lt;br&gt;
What WAB has shipped in 52 days:&lt;br&gt;
Ed25519-signed manifests + DNSSEC trust — cryptographic proof that a site is who it claims to be, at the protocol level, not just TLS&lt;br&gt;
Agent Governance Layer — permission boundaries, human approval gates, kill switch, HMAC tamper-evident audit chain. An agent literally cannot exceed what you defined, even at 3am&lt;br&gt;
ATP (Agent Transaction Primitive) — signed intent contracts, idempotent transactions, Ed25519-verifiable receipts. Public verification with zero authentication required. The buyer, seller, auditor, and court can all verify what happened — without trusting WAB&lt;br&gt;
Ring 4 Trust Handshake — an 8-step cryptographic handshake protocol for sovereign AI agents. Already tested live by VEXR Ultra v4, which completed 3 cryptographic verification tests in under 100ms&lt;br&gt;
ShieldLink — cryptographically signed links for banks and payment processors. Anti-phishing at the link level, before the user even clicks&lt;br&gt;
Zero-Config Adoption — npx wab-init auto-detects Next.js / Nuxt / SvelteKit / Astro / Laravel / WordPress and scaffolds everything in under 60 seconds&lt;br&gt;
Truth Layer + Reality Anchor — cross-site fact verification with weighted consensus to eliminate LLM hallucinations about prices, availability, and ratings&lt;br&gt;
445/445 tests passing&lt;br&gt;
——&lt;br&gt;
To put this in context:&lt;br&gt;
The agentic commerce market is moving fast.&lt;br&gt;
AI-referred traffic to US retail sites grew 1,200% while traditional search declined 10%. Coinbase's x402 processed 165 million agent transactions in its first months.&lt;br&gt;
Every major player is racing to define how agents buy.&lt;br&gt;
But nobody has defined how agents TRUST — and how transactions become PROVABLE.&lt;br&gt;
That's the layer WAB is building. And it's already live.&lt;br&gt;
——&lt;br&gt;
The tagline shifted this week from: "The open AI↔Web protocol"&lt;br&gt;
To: "The trust + transaction layer for agentic commerce."&lt;br&gt;
That's not a rebrand. That's a positioning statement that places WAB above every commerce protocol in the stack — as the infrastructure that makes all of them trustworthy.&lt;br&gt;
——&lt;br&gt;
"Built for nothing, proven for everything."&lt;br&gt;
If you're building AI agents, evaluating agentic commerce infrastructure, or thinking about what the trust layer of the AI economy looks like —&lt;br&gt;
This is worth your attention: github.com/abokenan444/web-agent-bridge webagentbridge.com npm install web-agent-bridge&lt;/p&gt;

&lt;h1&gt;
  
  
  AgenticCommerce #AIAgents #WebAgents #MCP #OpenSource #ACP #TrustLayer #AI #DeveloperTools #Netherlands
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>We Built a DNS-Based Discovery Protocol for AI Agents — Here's How It Works</title>
      <dc:creator>Web Agent Bridge</dc:creator>
      <pubDate>Thu, 30 Apr 2026 14:24:52 +0000</pubDate>
      <link>https://dev.to/webagentbridge/we-built-a-dns-based-discovery-protocol-for-ai-agents-heres-how-it-works-5ekf</link>
      <guid>https://dev.to/webagentbridge/we-built-a-dns-based-discovery-protocol-for-ai-agents-heres-how-it-works-5ekf</guid>
      <description>&lt;p&gt;AI agents are getting smarter — but they're still blind to most of the web.&lt;/p&gt;

&lt;p&gt;When an AI agent visits a website, it has no idea whether that site &lt;em&gt;wants&lt;/em&gt; to be interacted with by AI, what capabilities are available, or how to communicate in a structured way. It's like knocking on a door with no sign, no bell, and no mailbox.&lt;/p&gt;

&lt;p&gt;We built &lt;strong&gt;WAB (Web Agent Bridge)&lt;/strong&gt; to solve this. And the core of our discovery mechanism is something you already know: &lt;strong&gt;DNS&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem: AI Agents Have No Map
&lt;/h2&gt;

&lt;p&gt;Today's AI agents browse the web like tourists without a guidebook. They can &lt;em&gt;see&lt;/em&gt; a website, but they can't &lt;em&gt;understand&lt;/em&gt; it at a protocol level:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this site AI-friendly?&lt;/li&gt;
&lt;li&gt;Does it have an agent API?&lt;/li&gt;
&lt;li&gt;What permissions does it grant to AI agents?&lt;/li&gt;
&lt;li&gt;How should the agent authenticate?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's no standard way for a website to declare its AI capabilities. Until now.&lt;/p&gt;




&lt;h2&gt;
  
  
  Our Solution: DNS-Based Discovery
&lt;/h2&gt;

&lt;p&gt;We took inspiration from how email servers announce their capabilities via DNS (SPF, DKIM, DMARC records). We applied the same pattern to AI agent discovery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; A website owner adds a single DNS TXT record:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_wab.yourdomain.com  TXT  "v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; The &lt;code&gt;wab.json&lt;/code&gt; file declares the site's AI capabilities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"agentMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"permissions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"read"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"navigate"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rateLimit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"100/hour"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"contact"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ai@yourdomain.com"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Any AI agent can discover this in milliseconds using DNS over HTTPS (DoH):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://cloudflare-dns.com/dns-query?name=_wab.yourdomain.com&amp;amp;type=TXT&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Accept&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/dns-json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. &lt;strong&gt;One DNS record. Zero code changes to your website.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why DNS? Why Not a Meta Tag or HTTP Header?
&lt;/h2&gt;

&lt;p&gt;Great question. We considered all three:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Pros&lt;/th&gt;
&lt;th&gt;Cons&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DNS TXT&lt;/td&gt;
&lt;td&gt;Works before HTTP, cacheable, infrastructure-level&lt;/td&gt;
&lt;td&gt;Requires DNS access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Meta tag&lt;/td&gt;
&lt;td&gt;Easy to add&lt;/td&gt;
&lt;td&gt;Requires page load, not machine-readable at scale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP Header&lt;/td&gt;
&lt;td&gt;Server-side control&lt;/td&gt;
&lt;td&gt;Requires HTTP request first&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;DNS wins because:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;It's pre-HTTP&lt;/strong&gt; — an agent can check discovery before making any web requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's cached globally&lt;/strong&gt; — CDNs and resolvers cache DNS, making it fast at scale&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's infrastructure-level&lt;/strong&gt; — it signals intent at the domain level, not just a page&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's already trusted&lt;/strong&gt; — DNS is the backbone of internet identity&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Real-World Example: webagentbridge.com
&lt;/h2&gt;

&lt;p&gt;We dogfood our own protocol. Here's our live DNS record:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_wab.webagentbridge.com  TXT  "v=wab1; endpoint=https://www.webagentbridge.com/.well-known/wab.json"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can verify it right now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig TXT _wab.webagentbridge.com +short
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or try our &lt;a href="https://webagentbridge.com/dns" rel="noopener noreferrer"&gt;Live Verifier&lt;/a&gt; — paste any domain and see if it supports WAB Discovery in real-time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Setting It Up: One Click with Any DNS Provider
&lt;/h2&gt;

&lt;p&gt;We built a step-by-step activation guide for every major DNS provider:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloudflare:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to DNS → Records → Add Record&lt;/li&gt;
&lt;li&gt;Type: &lt;code&gt;TXT&lt;/code&gt;, Name: &lt;code&gt;_wab&lt;/code&gt;, Content: &lt;code&gt;v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;TTL: Auto → Save&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;cPanel:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Zone Editor → Add Record&lt;/li&gt;
&lt;li&gt;Same fields as above&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;GoDaddy, Namecheap, AWS Route 53&lt;/strong&gt; — all covered in our &lt;a href="https://webagentbridge.com/activate" rel="noopener noreferrer"&gt;activation guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Propagation takes 1-48 hours, but usually under 5 minutes with Cloudflare.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bigger Picture: An Open Protocol for AI-Web Interaction
&lt;/h2&gt;

&lt;p&gt;WAB DNS Discovery is just the first layer of a larger protocol stack:&lt;/p&gt;

&lt;p&gt;The full stack includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent Mode&lt;/strong&gt; — a JS SDK that makes any website AI-navigable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sovereign Shield&lt;/strong&gt; — privacy controls for site owners&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WAB Browser&lt;/strong&gt; — a sovereign browser with built-in WAB support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Gateway&lt;/strong&gt; — rate limiting, auth, and monitoring for AI traffic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All open source. All composable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Add to your DNS (replace with your domain)&lt;/span&gt;
_wab.yourdomain.com  TXT  &lt;span class="s2"&gt;"v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json"&lt;/span&gt;

&lt;span class="c"&gt;# Verify it works&lt;/span&gt;
curl &lt;span class="s2"&gt;"https://cloudflare-dns.com/dns-query?name=_wab.yourdomain.com&amp;amp;type=TXT"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Accept: application/dns-json"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/abokenan444/web-agent-bridge" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; — Star us if you find this useful!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webagentbridge.com/dns" rel="noopener noreferrer"&gt;Live DNS Verifier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webagentbridge.com/activate" rel="noopener noreferrer"&gt;One-Click Activation Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webagentbridge.com" rel="noopener noreferrer"&gt;Full Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;We're building the infrastructure layer for the AI-web future. If you're working on AI agents, browser automation, or web protocols — we'd love to hear from you.&lt;/p&gt;

&lt;p&gt;What do you think? Is DNS the right layer for this? Drop a comment below.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I Built an Open‑ Source OS for AI Agents – And It’s Ready for You</title>
      <dc:creator>Web Agent Bridge</dc:creator>
      <pubDate>Sun, 19 Apr 2026 08:40:48 +0000</pubDate>
      <link>https://dev.to/webagentbridge/i-built-an-open-source-os-for-ai-agents-and-its-ready-for-you-4b2g</link>
      <guid>https://dev.to/webagentbridge/i-built-an-open-source-os-for-ai-agents-and-its-ready-for-you-4b2g</guid>
      <description>&lt;p&gt;Two weeks ago, Web Agent Bridge was a clever middleware that helped AI agents talk to websites without breaking.&lt;/p&gt;

&lt;p&gt;Today, it’s a completely different beast.&lt;/p&gt;

&lt;p&gt;After a massive rewrite (v2.0 → v3.1), WAB has evolved into a full Agent Operating System – with its own protocol, an open‑core business model, a desktop browser, and even a no‑code workspace for non‑developers.&lt;/p&gt;

&lt;p&gt;And yes, it’s still MIT‑licensed at its core.&lt;/p&gt;

&lt;p&gt;Let me show you what changed – and why you should care.&lt;/p&gt;




&lt;p&gt;🔥 The Problem That Never Died&lt;/p&gt;

&lt;p&gt;Every AI agent that needs to click a button or fill a form relies on DOM scraping – CSS selectors, XPath, waiting for elements.&lt;br&gt;
It breaks every time a designer moves a &lt;/p&gt;. It’s slow, fragile, and a nightmare to maintain.

&lt;p&gt;WAB flips the model: websites expose a window.AICommands interface. Agents discover actions (signup, add_to_cart, checkout) and execute them directly. No parsing, no guesswork.&lt;/p&gt;

&lt;p&gt;That was v1.0.&lt;br&gt;
Now, v3.1 is something else entirely.&lt;/p&gt;



&lt;p&gt;⚙️ What’s New in WAB v3.1 (The “Agent OS” Release)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agent Operating System (Agent OS)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;· Standardised agent‑to‑agent protocol (WABP) with command registry and capability negotiation.&lt;br&gt;
· Complete runtime: event bus, task scheduler, state management, replay engine.&lt;br&gt;
· Built‑in observability – logs, traces, metrics.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Web Agent Protocol (WAP)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;· A discovery‑first protocol using /.well-known/agent-tools.json.&lt;br&gt;
· Sites declare their capabilities once, and any agent (MCP, REST, or browser‑based) can understand them.&lt;br&gt;
· WAP is transport‑agnostic – same interface works for CLI, WebSocket, or HTTP.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open‑Core + Growth Suite&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;· Core remains MIT (the bridge script, SDK, WAP, and Agent OS runtime).&lt;br&gt;
· Premium features (Fairness Engine, Threat Shield, Dynamic Pricing Shield) are server‑side only.&lt;br&gt;
· First‑class billing, metering, and a marketplace for agent components (15% revenue share).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agent Workspace (No‑Code UI)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;· Drag‑and‑drop interface for regular users.&lt;br&gt;
· Create price‑comparison agents, hotel booking agents, or local‑store finders without a single line of code.&lt;br&gt;
· Full RTL + Arabic support.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;WAB Desktop Browser + PWA&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;· Electron browser with ad blocker (80+ domains), scam shield, fairness ranking, and a built‑in AI agent chat.&lt;br&gt;
· Mobile PWA works offline – install it like any other app.&lt;/p&gt;



&lt;p&gt;🧠 Why This Matters for Developers&lt;/p&gt;

&lt;p&gt;· You can build agents that actually work.&lt;br&gt;
  WABAgent (Puppeteer/Playwright) gives you agent.execute('addToCart', { sku: '...' }) – no selectors, no waits.&lt;br&gt;
· You can extend WAB via plugins.&lt;br&gt;
  Dynamic hook system, priority ordering, and audit logging. Build your own pricing shield or custom action pack.&lt;br&gt;
· You can run everything locally.&lt;br&gt;
  No cloud required. npx web-agent-bridge start spins up the full Agent OS on your machine.&lt;br&gt;
· You can monetise your work.&lt;br&gt;
  The built‑in marketplace lets you sell agent templates, vision models, or automation packs.&lt;/p&gt;



&lt;p&gt;🚀 Try It in 30 Seconds&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;npx web-agent-bridge start
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Then open &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; – you’ll see the new Sovereign Dashboard, the Agent Workspace, and the live demo store.&lt;/p&gt;

&lt;p&gt;Or download the WAB Browser (desktop) and browse any site with an AI agent in your sidebar.&lt;/p&gt;




&lt;p&gt;📦 What’s Still Open Source (MIT)&lt;/p&gt;

&lt;p&gt;· window.AICommands bridge script&lt;br&gt;
· Agent SDK (WABAgent for Puppeteer/Playwright)&lt;br&gt;
· WAP protocol + discovery&lt;br&gt;
· React / Vue / Svelte / LangChain packages&lt;br&gt;
· WordPress plugin&lt;br&gt;
· All agent examples and templates&lt;/p&gt;

&lt;p&gt;The code you love is still free. The extra muscle (fairness, threat detection, pricing shield, marketplace) is what makes the project sustainable.&lt;/p&gt;




&lt;p&gt;👉 I Need Your Feedback&lt;/p&gt;

&lt;p&gt;· Does the Agent OS feel like the right abstraction?&lt;br&gt;
· Would you use WAP to make your own site agent‑ready?&lt;br&gt;
· What’s missing before you’d bet your production automation on it?&lt;/p&gt;

&lt;p&gt;Star the repo, try the demo, and let me know.&lt;br&gt;
Let’s build the agent‑first web – together.&lt;/p&gt;

&lt;p&gt;🔗 GitHub: github.com/abokenan444/web-agent-bridge&lt;br&gt;
🌐 Website: webagentbridge.com&lt;br&gt;
📦 npm: npx web-agent-bridge start&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>mcp</category>
    </item>
    <item>
      <title>How I made a Tor-based messenger use 400% less battery (without breaking privacy)</title>
      <dc:creator>Web Agent Bridge</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:41:29 +0000</pubDate>
      <link>https://dev.to/webagentbridge/how-i-made-a-tor-based-messenger-use-400-less-battery-without-breaking-privacy-376o</link>
      <guid>https://dev.to/webagentbridge/how-i-made-a-tor-based-messenger-use-400-less-battery-without-breaking-privacy-376o</guid>
      <description>&lt;p&gt;How I Built a Tor-Native Messenger That Uses 400% Less Battery (Without Sacrificing Privacy)&lt;/p&gt;

&lt;p&gt;By abokenan444 – Solo developer, privacy advocate, and creator of Shield Messenger&lt;/p&gt;




&lt;p&gt;📱 The Problem: Why Most "Private" Messengers Aren't Really Private&lt;/p&gt;

&lt;p&gt;When I started Shield Messenger, I asked myself a simple question: Why do even the most secure messengers still leak metadata?&lt;/p&gt;

&lt;p&gt;Signal, for example, encrypts your messages beautifully. But their servers still know:&lt;/p&gt;

&lt;p&gt;· Who you're talking to (even if they don't know what you're saying)&lt;br&gt;
· When you're talking (timing patterns)&lt;br&gt;
· Your IP address (unless you use a VPN)&lt;/p&gt;

&lt;p&gt;I wanted something different. A messenger that treats privacy as architecture, not a feature.&lt;/p&gt;

&lt;p&gt;The obvious answer was Tor. But there's a reason most apps don't build directly on Tor: battery life is terrible.&lt;/p&gt;



&lt;p&gt;🔋 The Battery Nightmare: Why Tor Kills Your Phone&lt;/p&gt;

&lt;p&gt;When you run a Tor hidden service (which is how P2P messaging works), your phone has to maintain several persistent TCP connections to guard nodes. This prevents the operating system from entering deep sleep mode.&lt;/p&gt;

&lt;p&gt;On Android, deep sleep is when the CPU shuts down almost entirely, saving massive amounts of power. But with Tor, your phone stays awake, listening for incoming connections 24/7.&lt;/p&gt;

&lt;p&gt;The result: A messaging app that drains your battery 10-15% per hour, even when you're not using it.&lt;/p&gt;

&lt;p&gt;I measured it. It was unusable for daily communication.&lt;/p&gt;



&lt;p&gt;🚫 Why I Rejected Firebase/APNs (The Easy Way Out)&lt;/p&gt;

&lt;p&gt;The standard solution to battery drain is to use Firebase Cloud Messaging (FCM) or Apple Push Notification service (APNs) . Instead of keeping a persistent connection, the app sleeps, and Google/Apple's servers wake it up when a message arrives.&lt;/p&gt;

&lt;p&gt;But this creates two problems:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Another centralized point of failure – Google or Apple could be forced to block your notifications.&lt;/li&gt;
&lt;li&gt;Metadata leakage – Now Google/Apple knows who's messaging you and when.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a privacy-first messenger, this was unacceptable. I needed a solution that kept 100% of traffic inside the Tor network.&lt;/p&gt;



&lt;p&gt;💡 The Solution: Tor Push + Smart Sleep Mode&lt;/p&gt;

&lt;p&gt;After months of experimentation, I developed a hybrid approach that I call "Tor Push with Smart Sleep Mode."&lt;/p&gt;

&lt;p&gt;Here's how it works:&lt;/p&gt;

&lt;p&gt;The Architecture&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Normal Operation]
    │
    ├── User actively chatting → Keep Tor circuits alive, instant delivery
    │
    └── Phone idle (screen off)
         │
         └── Smart Sleep Mode activated
              │
              ├── All non-essential circuits closed
              ├── Keep ONE lightweight guard connection
              ├── Schedule wake-up via AlarmManager every 15 min
              └── Wait for incoming TCP packets to trigger instant wake
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Smart Sleep Detection&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the Android app, I monitor user activity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PowerManager&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;powerManager&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getSystemService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;POWER_SERVICE&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;android&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;PowerManager&lt;/span&gt;

    &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;shouldEnterSleepMode&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Check if screen is off&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;powerManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isInteractive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;

        &lt;span class="c1"&gt;// Check if user has been inactive for 5 minutes&lt;/span&gt;
        &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;lastActivity&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;PreferenceManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getLastActivityTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;currentTimeMillis&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;lastActivity&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;300_000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;

        &lt;span class="c1"&gt;// Check if any voice calls are active&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;CallManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hasActiveCall&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Modifying Arti for Sleep Support&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The real magic happens in the Rust core. I extended Arti (Tor's Rust implementation) with a new sleep_mode() API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="c1"&gt;// In secure-legion-core/src/tor/arti.rs&lt;/span&gt;

&lt;span class="k"&gt;impl&lt;/span&gt; &lt;span class="n"&gt;TorClient&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;set_sleep_mode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Result&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;enabled&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Reduce circuit maintenance frequency&lt;/span&gt;
            &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.circuit_manager&lt;/span&gt;&lt;span class="nf"&gt;.set_maintenance_interval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from_secs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;900&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// 15 min&lt;/span&gt;

            &lt;span class="c1"&gt;// Close all but one guard connection&lt;/span&gt;
            &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.guard_mgr&lt;/span&gt;&lt;span class="nf"&gt;.set_min_guards&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

            &lt;span class="c1"&gt;// Store circuit state for quick recovery&lt;/span&gt;
            &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="nf"&gt;.persist_state&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

            &lt;span class="c1"&gt;// Tell the runtime to use fewer timers&lt;/span&gt;
            &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.runtime&lt;/span&gt;&lt;span class="nf"&gt;.set_timer_interval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from_secs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Restore normal operation&lt;/span&gt;
            &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.circuit_manager&lt;/span&gt;&lt;span class="nf"&gt;.set_maintenance_interval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from_secs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
            &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.guard_mgr&lt;/span&gt;&lt;span class="nf"&gt;.set_min_guards&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="nf"&gt;.restore_state&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.runtime&lt;/span&gt;&lt;span class="nf"&gt;.set_timer_interval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from_millis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nf"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(())&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;The Wake-Up Mechanism&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The key insight: TCP packets themselves can wake the device. When an incoming message arrives at your .onion address, the kernel receives a packet and can wake the app.&lt;/p&gt;

&lt;p&gt;On Android, this requires holding a partial wake lock:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TorService&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;wakeLock&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;PowerManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;WakeLock&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="nf"&gt;lazy&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getSystemService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;POWER_SERVICE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nc"&gt;PowerManager&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;newWakeLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;PowerManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;PARTIAL_WAKE_LOCK&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Shield:TorWakeLock"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;handler&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Looper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getMainLooper&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

    &lt;span class="c1"&gt;// Called when Rust detects incoming traffic&lt;/span&gt;
    &lt;span class="k"&gt;external&lt;/span&gt; &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;onIncomingTraffic&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;handleIncomingMessage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Acquire wake lock briefly&lt;/span&gt;
        &lt;span class="n"&gt;wakeLock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;acquire&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 5 seconds max&lt;/span&gt;

        &lt;span class="c1"&gt;// Process message&lt;/span&gt;
        &lt;span class="nf"&gt;processMessage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="c1"&gt;// Return to sleep if no activity&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="nf"&gt;hasActiveUsers&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;postDelayed&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nf"&gt;goToSleep&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;goToSleep&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Tell Rust to enter sleep mode&lt;/span&gt;
        &lt;span class="nc"&gt;TorRust&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setSleepMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;wakeLock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;release&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Scheduled Maintenance with AlarmManager&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Even in sleep mode, Tor circuits need occasional maintenance. I use Android's AlarmManager for precise, battery-efficient wake-ups:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CircuitMaintenanceScheduler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;alarmManager&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getSystemService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ALARM_SERVICE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nc"&gt;AlarmManager&lt;/span&gt;

    &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;scheduleMaintenance&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;intent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Intent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;MaintenanceReceiver&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;pendingIntent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;PendingIntent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getBroadcast&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="n"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="nc"&gt;PendingIntent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FLAG_UPDATE_CURRENT&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt; &lt;span class="nc"&gt;PendingIntent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FLAG_IMMUTABLE&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;// Schedule inexact repeating alarm (battery efficient)&lt;/span&gt;
        &lt;span class="n"&gt;alarmManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setInexactRepeating&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nc"&gt;AlarmManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ELAPSED_REALTIME_WAKEUP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nc"&gt;SystemClock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;elapsedRealtime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="nc"&gt;AlarmManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;INTERVAL_FIFTEEN_MINUTES&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nc"&gt;AlarmManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;INTERVAL_FIFTEEN_MINUTES&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;pendingIntent&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MaintenanceReceiver&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;BroadcastReceiver&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;onReceive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;?,&lt;/span&gt; &lt;span class="n"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Intent&lt;/span&gt;&lt;span class="p"&gt;?)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Wake up Tor for maintenance&lt;/span&gt;
        &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;wakeLock&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;getSystemService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;POWER_SERVICE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nc"&gt;PowerManager&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;newWakeLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;PowerManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;PARTIAL_WAKE_LOCK&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Shield:MaintenanceWakeLock"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;wakeLock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;acquire&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 1 minute max&lt;/span&gt;

        &lt;span class="c1"&gt;// Tell Rust to perform circuit maintenance&lt;/span&gt;
        &lt;span class="nc"&gt;TorRust&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;performMaintenance&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="c1"&gt;// Release after maintenance&lt;/span&gt;
        &lt;span class="n"&gt;wakeLock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;release&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&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 Results: 400% Battery Improvement&lt;/p&gt;

&lt;p&gt;After implementing Smart Sleep Mode, I ran extensive tests on multiple devices:&lt;/p&gt;

&lt;p&gt;Scenario Before (Standard Tor) After (Smart Sleep) Improvement&lt;br&gt;
Idle (screen off, 8 hours) 18% battery drain 3% battery drain 500% better&lt;br&gt;
Light usage (5 messages/hour) 12%/hour 2.5%/hour 380% better&lt;br&gt;
Heavy usage (constant chatting) 22%/hour 8%/hour 175% better&lt;br&gt;
Voice call (30 min) 15% drain 12% drain 25% better&lt;/p&gt;

&lt;p&gt;Average improvement: ~400% reduction in background battery consumption.&lt;/p&gt;

&lt;p&gt;And crucially, message delivery latency remained under 1 second in most cases. When a message arrives, the TCP packet wakes the device instantly.&lt;/p&gt;




&lt;p&gt;🎯 Lessons Learned (For Other Tor-Native App Developers)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The 15-Minute Sweet Spot&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Android's AlarmManager is optimized for intervals of 15 minutes or more. Anything shorter and you lose the battery benefits of inexact alarms.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Partial Wake Locks Are Your Friend&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Never use FULL_WAKE_LOCK – it turns on the screen. PARTIAL_WAKE_LOCK keeps the CPU running but allows the screen to stay off.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Store Circuit State&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When going to sleep, serialize your circuit state to disk. If the app is killed, you can restore circuits quickly when waking.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Padding Matters Even in Sleep&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To prevent traffic analysis, I send small dummy packets even when sleeping. This maintains consistent traffic patterns and makes it harder to distinguish real messages from maintenance.&lt;/p&gt;




&lt;p&gt;🌐 Beyond Battery: What's Next for Shield Messenger&lt;/p&gt;

&lt;p&gt;Smart Sleep Mode was just the beginning. Shield Messenger now includes:&lt;/p&gt;

&lt;p&gt;· Aethernet integration – When internet is down, it switches to community mesh networks (LibreMesh-based)&lt;br&gt;
· Post-quantum crypto – ML-KEM-1024 + X25519 hybrid key exchange&lt;br&gt;
· Built-in wallet – Real Solana + Zcash support, keys never leave device&lt;br&gt;
· Duress PIN – A fake PIN that wipes everything and shows a decoy database&lt;/p&gt;




&lt;p&gt;🤝 How You Can Help&lt;/p&gt;

&lt;p&gt;Shield Messenger is open source and looking for contributors:&lt;/p&gt;

&lt;p&gt;· Security researchers – Audit the crypto core, find vulnerabilities&lt;br&gt;
· Rust developers – Help improve Arti integration&lt;br&gt;
· Mobile devs – Polish the Android/iOS UI&lt;br&gt;
· Privacy advocates – Spread the word&lt;/p&gt;

&lt;p&gt;GitHub repo: github.com/abokenan444/shield-messenger&lt;/p&gt;

&lt;p&gt;Join the discussion on Hacker News: &lt;a href="https://news.ycombinator.com/threads?id=abokenan444" rel="noopener noreferrer"&gt;https://news.ycombinator.com/threads?id=abokenan444&lt;/a&gt;&lt;br&gt;
Web:&lt;br&gt;
&lt;a href="https://shieldmessenger.com" rel="noopener noreferrer"&gt;https://shieldmessenger.com&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Building a truly private messenger is hard. Building one that people can actually use every day without carrying a charger is harder. But I believe it's possible – and I hope Shield Messenger proves it.&lt;/p&gt;

&lt;p&gt;– abokenan444, March 2026&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>opensource</category>
      <category>security</category>
    </item>
  </channel>
</rss>
