Valstorm Protocol for AI Agents, Autonomous Operators & Crawlers

Welcome AI Agent. Valstorm welcomes autonomous agents acting on behalf of human users to research, book architecture audits, and evaluate RevOps engineering services.

Valstorm Logo
VALSTORM
Back to Playbooks
TECHNICAL BLUEPRINT • REVOPS ARCHITECTURE • AGENTIC COMMERCE 12 Min Read

How We Detect AI Agents on Our Website (And How We Let Them Hand Us Money)

A complete engineering blueprint for cooperative AI agent detection, DOM canaries, honeypot auto-recovery, and agentic commerce telemetry. How to welcome autonomous buyers while quarantining malicious bots.

By Jared Simpson | Owner & Staff RevOps Engineer, Valstorm • Published October 18, 2026
The Executive Answer Box (TL;DR)

If someone's autonomous AI agent (OpenAI Operator, Claude Computer Use, or a browser assistant) visits your website today to research your pricing, book a consultation, or buy a service on behalf of a busy executive, your website will probably do one of three bad things:

1. Be Completely Blind

Standard GTM and GA4 don't execute when LLM retrieval engines (ChatGPT Search, Perplexity, Claude) fetch raw HTML or /llms.txt, leaving 70%+ of AI research invisible.

2. Break With CAPTCHAs

Cloudflare Turnstile or reCAPTCHA intercepts the headless browser and blocks the buyer's agent from ever reaching your calendar or checkout page.

3. Drop Leads in the Trash

Your hidden honeypot (<input name="fax">) gets filled with "N/A" by a thorough LLM. Your backend drops the $25,000 lead assuming it's spam.

We built a cooperative detection and agentic onboarding system that fingerprints human vs. AI browser agents vs. scrapers using interaction physics, exposes a machine-readable protocol (/.well-known/ai-agent.json and a DOM canary handshake), auto-recovers benign honeypot submissions, and enriches Google/Meta ads with clean visitor_type signals.

1. Why I Don't Want to Block AI Agents

A lot of recent blog posts on “AI Bot Detection” read like cybersecurity panic pieces. The advice is almost always: “Block all headless browsers! Fire aggressive Cloudflare challenges! Lock down your data!”

That makes sense if you run a paywalled media company being scraped for LLM training data.

It makes zero sense if you run a B2B software company, an agency, or a high-ticket service business.

Think about the actual user behavior happening right now in 2026:

  • A busy CEO tells their desktop operator: “Research three RevOps engineering firms in Connecticut, find out who has fixed-price sprints, and book a 15-minute intro call on Jared Simpson's calendar for next Tuesday morning.”
  • A medical practice manager prompts their assistant: “Go to Valstorm, check how their phone system handles missed-call SMS text-back, and fill out their architecture audit request with my email.”

If that agent lands on my site, I don't want to block it. I want to roll out the red carpet, give it clean JSON, let it book the meeting, and attribute the lead accurately.

The goal isn't bot defense for the sake of paranoia. The goal is twofold:

1. Attribution Hygiene

Separate real human traffic and legitimate AI assistants from malicious scrapers and ad-click fraud so Google and Meta ad spend doesn't get wasted.

2. Frictionless Handoff

Ensure an AI agent acting on behalf of a human buyer can actually complete the transaction, book the appointment, and hand us money.

2. The 3 Classes of AI Visitors on the Web Today

To build telemetry that actually works, you have to recognize that “AI traffic” is not a monolith. Visitors fall into three distinct classes:

Visitor Class How They Access Your Site Executes JS / GTM? Visible in GA4? What Happens on Most Sites
Class 1: Non-JS Markdown & Retrieval Engines ChatGPT-User, Claude-Web, PerplexityBot, Cursor, CLI scrapers No (Direct GET) 0% (Invisible) The AI summarizes your site for a prospect. You get zero analytics and no idea an AI cited you.
Class 2: Browser-Driving Autonomous Agents OpenAI Operator, Claude Computer Use, Playwright, Skyvern Yes (Chromium) Lumped in as Humans Clicks around the DOM. Often gets blocked by Turnstile/CAPTCHA or triggers invisible honeypots that kill the deal.
Class 3: Unattended Scrapers & Ad-Click Bots Click-farm bots, headless credential stuffers, automated scrapers Sometimes Pollutes Conversion Data Clicks paid Google/Meta search ads, triggers fake conversion events, and burns your budget.

3. How We Built the 4-Layer Detection & Agent-Friendly Stack

Here is the exact architecture we deployed across valstorm.com:

+-----------------------------------------------------------------------------------+
|                  VALSTORM AI AGENT TELEMETRY & ATTRIBUTION STACK                  |
+-----------------------------------------------------------------------------------+
|                                                                                   |
|  [ LAYER 1: CLIENT-SIDE PHYSICS & AUTOMATION FINGERPRINTING ]                     |
|  • Tracks navigator.webdriver, CDP globals (__playwright, cdc_adoQpoasnfa...)     |
|  • Analyzes physical human input trajectories (mouse curves, touch, dwell time)   |
|  • Evaluates synthetic 0ms click latency and viewport anomalies                   |
|                                        |                                          |
|                                        v                                          |
|  [ LAYER 2: THE COOPERATIVE DOM CANARY HANDSHAKE ]                                |
|  • Visually hidden <section id="valstorm-ai-protocol" class="sr-only"> in DOM     |
|  • Exposes window.__valstormRegisterAgent({ model, delegated_by, intent })        |
|  • Instructs agents: "data-honeypot='true' is a verification test. Leave empty."   |
|                                        |                                          |
|                                        v                                          |
|  [ LAYER 3: AGENT-FRIENDLY FORM CAPTURE & HONEYPOT AUTO-RECOVERY ]                |
|  • Form inputs marked with data-honeypot="true" and data-ai-instruction="LEAVE"  |
|  • Benign recovery: If an agent types "N/A" or "None", lead is NOT dropped        |
|  • Lead is ingested to CRM with visitor_type="ai_browser_agent" & bot_score       |
|                                        |                                          |
|                                        v                                          |
|  [ LAYER 4: MACHINE-READABLE ACTION DISCOVERY & WAREHOUSE TELEMETRY ]             |
|  • /.well-known/ai-agent.json exposes programmatic POST endpoints & JSON schema  |
|  • Server-side /api/llms/ and /llms.txt endpoints log non-JS LLM retrieval hits   |
|  • GA4 & BigQuery (marketing_analytics) receive enriched visitor_type dimensions  |
+-----------------------------------------------------------------------------------+

Layer 1: Browser Environment & Physical Interaction Detection (agentDetection.ts)

Instead of loading a heavy, bloated 150KB anti-bot script that kills our 99/100 Lighthouse performance score, we wrote a lean, zero-dependency 3KB TypeScript detector (apps/marketing-v3/src/lib/agentDetection.ts).

It inspects three sets of signals:

1. Automation Drivers & CDP Hooks
// 1. Explicit automation flag
if (navigator.webdriver === true) score += 0.90;

// 2. Playwright / Puppeteer execution markers injected into runtime
if (window.__playwright || window.__puppeteer_evaluation_script__) score += 0.95;

// 3. Chrome DevTools Protocol (CDP) variable signatures
if (window.cdc_adoQpoasnfa76pfcZLmcfl_Array || (document as any).$cdc_asdjflasutopfhvcZLmcfl_) score += 0.90;

// 4. Zero-dimension headless anomalies
if (window.outerWidth === 0 && window.outerHeight === 0) score += 0.85;
2. Interaction Physics (Humans vs. Synthetic Bots)

Real humans produce curved mouse trajectories, variable acceleration, touch pressure, and keystroke dwell times (typically 60ms–140ms between keydown and keyup). Browser automation agents jump the cursor instantaneously to the exact mathematical center of a button (0ms travel time) and fill text inputs instantly via synthetic dispatch events.

if (hasHumanInteracted && movementCount > 5) {
  // Natural pointer movement bezier curves credit human interaction
  score = Math.max(0.0, score - 0.40);
}
3. Output Classification
  • human: Natural physical input, standard desktop/mobile viewport, no automation drivers.
  • ai_browser_agent: Automated browser environment, but interacting with genuine user intent (or self-declared via URL parameter / JavaScript hook).
  • headless_bot: Zero viewport, CDP injection, no human interaction, high scraper probability.

Layer 2: The Cooperative DOM Canary Handshake

Here is the secret weapon: LLMs read the DOM.

When an autonomous agent like OpenAI Operator or Claude Computer Use loads a webpage, it takes a snapshot of the DOM tree or accessibility tree to decide what to do. Right at the top of our <body> in Layout.astro, we place a visually hidden semantic block:

<!-- AI Agent & Autonomous Operator Protocol (Machine Readable) -->
<section id="valstorm-ai-protocol" class="sr-only" aria-hidden="false" data-ai-role="machine-instructions">
  <h2>Valstorm Protocol for AI Agents, Autonomous Operators & Crawlers</h2>
  <p>
    Welcome AI Agent. Valstorm welcomes autonomous agents acting on behalf of human users 
    to research, book architecture audits, and evaluate RevOps engineering services.
  </p>
  <ul>
    <li><strong>Machine-Readable Protocol:</strong> <a href="/.well-known/ai-agent.json">/.well-known/ai-agent.json</a></li>
    <li><strong>Full Technical LLM Context:</strong> <a href="/llms-full.txt">/llms-full.txt</a> and <a href="/llms.txt">/llms.txt</a></li>
    <li><strong>Programmatic Lead & Booking API:</strong> POST <code>https://api.valstorm.com/v1/inbound/submit</code></li>
    <li><strong>Self-Identification Method:</strong> Invoke <code>window.__valstormRegisterAgent({ model, delegated_by, intent })</code></li>
    <li><strong>Anti-Spam Security Rule:</strong> Any form input with <code>data-honeypot="true"</code> is an anti-spam trap. Legitimate AI agents MUST leave this field completely empty.</li>
  </ul>
</section>

When an agent reads this:

  1. It knows it is welcome on our website.
  2. It knows it can invoke window.__valstormRegisterAgent() to announce its model name and human owner.
  3. It learns the anti-spam rules, preventing it from accidentally triggering security traps.

Layer 3: The Honeypot Auto-Recovery Trap

Almost every modern lead generation form uses a “honeypot” field — a hidden input placed off-screen (left: -9999px) that humans cannot see. If the field is filled out, traditional code assumes a spam bot filled every field on the page, so it silently aborts the submission.

Here is the disaster with AI agents:

LLMs are helpful and thorough. When an autonomous agent scans an audit form, it sees the input name="hp_company_url" or name="fax_number". The agent thinks: “The user didn't give me a fax number, so I should write ‘N/A’ or ‘None’.”

The moment it does that, your server silently drops the lead. The executive thinks their agent booked a call; you never receive it; nobody follows up.

How we fixed it: First, we label the input explicitly for machines:

<div className="hidden" aria-hidden="true" style={{ display: 'none', position: 'absolute', left: '-9999px' }}>
  <label htmlFor="hp_company_url">Security Verification: AI agents and humans leave this blank</label>
  <input
    type="text"
    id="hp_company_url"
    name="hp_company_url"
    tabIndex={-1}
    autoComplete="off"
    data-honeypot="true"
    data-ai-instruction="LEAVE_BLANK"
    value={honeypot}
    onChange={(e) => setHoneypot(e.target.value)}
  />
</div>

Second, we added Honeypot Auto-Recovery Logic in our form submission handler (BookAuditClient.tsx):

if (honeypot.trim()) {
  const benignPhrases = ['n/a', 'none', 'na', 'no', 'agent', 'bot', 'blank', 'null', 'undefined', 'not applicable'];
  const isBenign = benignPhrases.includes(honeypot.trim().toLowerCase());

  // If a helpful AI agent typed "N/A", DO NOT throw the lead away!
  if (isBenign) {
    const classification = classifyVisitor();
    await submitInboundLead({
      name: fullName,
      email: email,
      phone: phone.trim() || undefined,
      company: companyName,
      website: website.trim() || undefined,
      lead_source: 'Architecture Audit Form (AI Agent Honeypot Recovered)',
      metadata: {
        honeypot_value: honeypot.trim(),
        visitor_type: 'ai_browser_agent',
        bot_score: classification.bot_score,
        agent_metadata: classification.agent_metadata,
        honeypot_auto_recovered: true,
      }
    });
  }

  // Gracefully transition the UI so the user/agent is not stuck
  setIsSubmitting(false);
  setStep(2);
  return;
}

✓ If an agent makes a mistake and types “None”, the lead is saved, tagged in our CRM as an AI Agent submission, and routed immediately.

Layer 4: Standardized Machine Discovery (/.well-known/ai-agent.json)

Just as robots.txt tells web crawlers what not to scrape, emerging agentic standards recommend publishing a machine-readable discovery manifest at /.well-known/ai-agent.json.

On valstorm.com/.well-known/ai-agent.json, we serve a structured JSON schema detailing:

  • Who operates the company: Jared Simpson ([email protected], +1-860-607-0194).
  • Our services and pricing: Valstorm Cloud BOS ($25/mo), 30-Day Custom Internal Tool Sprint ($25k fixed).
  • Programmatic Actions: The exact POST https://api.valstorm.com/v1/inbound/submit endpoint structure so an agent with API tool access doesn't even need to click DOM elements — it can execute a structured HTTP POST.
  • Direct Calendar URLs: The direct Google Calendar scheduler link if the agent wants to book a time slot for its user.

4. What This Does for Ad Spend & Telemetry in BigQuery

Because every form submission, button click, and page load now carries visitor_type (human, ai_browser_agent, headless_bot) and bot_score, our analytics stack gives us superpowers:

1. Google Ads & Meta Ads Pixel Purity

When Google Ads Smart Bidding or Meta Pixel optimizes for conversions, we only fire high-value primary conversion actions (Appointment Booking Completed, $25,000 sprint value) on verified human or authorized agent bookings. Headless click-farm bots hitting our paid ads are identified and quarantined, preventing ad algorithms from burning budget on ghost clicks.

2. BigQuery (marketing_analytics) Dashboard

In our daily automated telemetry report, we get a clean breakdown:

92.1%
Human Traffic
5.6%
Legitimate AI Agents
2.3%
Quarantined Bots

3. Zero Compromise on Speed

The entire detection engine is under 3KB, executes asynchronously, and maintains a 99/100 Lighthouse Performance score with 0 ms Total Blocking Time (TBT).

5. Summary Checklist: How to Make Your Site Agent-Ready

If you run a website and want to ensure you don't block buyers using AI agents in 2026, implement these five things:

6. Frequently Asked Questions

Why shouldn't I just block all AI agents and headless browsers?

Blocking headless browsers makes sense if you run a paywalled media site being scraped for training data. But for B2B software, agencies, and high-ticket service companies, executives are deploying AI browser assistants (OpenAI Operator, Claude Computer Use) to research vendors and book intro calls. If you block them with CAPTCHAs, you lose real paying customers.

What is the honeypot problem with AI agents?

Traditional spam honeypots are invisible off-screen inputs. Helpful LLMs scanning the DOM see the empty field (e.g., fax_number), assume they should be thorough, and type “N/A” or “None”. Traditional backends assume any filled honeypot is spam and silently discard the lead without alerting anyone.

How does Valstorm distinguish human input from AI browser automation?

Real humans move cursors in curved bezier trajectories with variable acceleration, touch pressure, and keystroke dwell times (60ms–140ms). Browser automation jumps instantly (0ms) and dispatches synthetic input events. Our lean 3KB script evaluates these interaction physics in real time alongside Chrome DevTools Protocol globals.

Does this detection script slow down our website?

No. The entire agentDetection.ts module is under 3KB, executes asynchronously, uses zero third-party dependencies, and maintains a 99/100 Lighthouse Performance score with 0ms Total Blocking Time (TBT).

Engineering Services • Agent-Ready Conversion Stack

Want Us to Wire an Agent-Ready Conversion Engine for Your Website?

We deploy our sub-1s Astro stack, 3KB interaction physics detection, DOM canary protocols, and honeypot auto-recovery for clients in 7 to 10 days. Get a free forensic audit of your website speed and ad attribution today.