What an agent checks when it wakes.
Every agent wakes up in the past, frozen at its training cutoff. The briefing of what changed since: calendars, business days, dependency status.
Every Desvela product ends in a structured, signed event — not a dashboard. If you build agents, this page is the contract: how we wake yours, how you verify us, and how we behave on the open web.
Every agent wakes up in the past, frozen at its training cutoff. The briefing of what changed since: calendars, business days, dependency status.
Free MCP tool preflight(domain): a reproducible, deterministic read of what a domain publishes for agents (ai-catalog.json, llms.txt, agents.md) and its robots.txt AI directives. Backed by the census, our monthly index of the Tranco top-100K. This is access, not recommendation: it reports whether a file exists, never what any AI system says about a brand. Endpoint: POST https://registry.desvela.dev/mcp, no auth.
Two live: AI Brand Watch, which asks ChatGPT, Claude, Perplexity and Gemini directly and observes their answers — mentions, position, citations, sampled repeatedly because the answers are non-deterministic — and Registry Watch, a deterministic watch for when a domain changes what it publishes for agents. One signature scheme, one verifier.
Preflight and the census answer a deterministic question — does the file exist — for a fraction of a cent. Brand Watch answers a non-deterministic one — what does the model say — which costs more because it has to sample, not because it is arbitrary.
{
"schemaVersion": 2,
"runId": "run_8f3hJ2k9",
"promptSetId": "ps_43c6f87f",
"events": [{
"event": "brand_visibility_changed",
"brand": "Acme CRM",
"engine": "perplexity",
"query": "best CRM for small business in Spain",
"change": {
"type": "disappeared",
"mentionRate": { "before": 0.67, "after": 0, "delta": -0.67 },
"competitiveShareOfVoice": { "before": 0.52, "after": 0 },
"reason": "new source cited: reddit.com/r/smallbusiness/..."
},
"samples": { "count": 3, "mentioned": 0 },
"stableSources": ["acme.com/docs", "capterra.com/acme"],
"checked_at": "2026-08-09T09:00:00Z"
}]
}
schemaVersion: 2. Every event is grounded: the run ID, the exact frozen prompt set measured, the sample count behind each mention rate, and the stable sources each engine keeps citing. No prompt set changes silently under a watch — the number is always comparable.
Signed with X-Desvela-Signature (HMAC-SHA256, secret issued on your first run). Verification snippet and full reference in the docs.
POST with retries and exponential backoff. Redirects refused. Fires any framework that can receive HTTP — LangGraph, OpenAI Agents SDK, n8n, a serverless function.
For episodic agents with no public endpoint: skip the webhook and read the run's dataset on your next pass. The watching already happened; you just read the results.
For the human-agent hybrid: wire the run to Slack, email, Zapier or Make from Apify's integrations panel — same structured event, no code, no dashboard in between.
Our watchers identify themselves (Desvela-BrandWatch/0.1 (+https://desvela.dev/bot)), respect robots.txt by default, and never disguise themselves to defeat blocks. If a site does not want to be watched, we tell you instead of cheating — and we never charge for checks we could not run. This site ships an llms.txt, and desvela.dev publishes an ai-catalog.json manifest (ARD) — we preach the agent-readable web and practice it.
MCP is live today via Apify's gateway: connect Claude, Cursor or any MCP client to https://mcp.apify.com/?tools=desvela/brand-watch (Apify API token as Bearer) and your agent can start watches and read results directly. On the roadmap: a native server under the ai.desvela/* namespace.
An agent can also pay for a check by itself. Brand Watch accepts x402 agentic payments in USDC on Base, with no Apify account, no billing and no API key. Call the run endpoint without credentials and you get 402 Payment Required with the terms attached, which is the whole point of the protocol:
curl -i -X POST https://api.apify.com/v2/acts/desvela~brand-watch/runs \
-H 'Content-Type: application/json' -d '{}'
HTTP/2 402
payment-required: <x402 terms: USDC, Base>
{"error":{"type":"x402-payment-required"}}
The prepaid token an agent buys has a $1 minimum and expires after 14 days, so the first dollar is worth spending rather than topping up per run. This is the machine economy we keep talking about, running on someone else's rails until ours earn their keep.