Claude Visibility agent

Four numbers from Claude’s own web search every morning, beside the previous round.

Before Claude answers a buyer’s question it searches the web, and it can only cite a page that search returns. A page that is not in the index Claude searches is invisible to it however well it is written, and nothing on the answer side says which pages those are.

Running on our own company since Oct 15, 2026 · Claude Code WebSearch · Risk: Low. Everything on this page is public; there is nothing to sign in for.

Goes inThe 19 queries Claude itself issued for the buyer questions, two brand queries, two watch queries, a site: probe for each of 22 target pages, 45 isolated command-line sessions that each search once, and the previous round
Comes outOne summary a day beside the previous round: category queries with us in the results, target pages Claude’s search can find, stale snapshots, the brand query; every query diagnosed at its block; the pages still to submit; its run record for the public log; and, on Fridays, a line in the weekly report
Human stepSubmitting a page to Brave, rewriting a title, writing a new page and asking a listicle to add us are all a person’s; the agent proposes and records. Nothing on the site changes by itself
Runs onA machine you control: Node and the Claude Code CLI signed in to a subscription. No browser, no Brave account

Tasks and outputs

What it takes on

Probe

Starts one isolated session per query, told to call the search tool exactly once with the query verbatim, and keeps the list of pages that came back. A session that searched twice or changed the query is discarded; more than three discarded means the instrument broke and the round is not a reading.

45 result lists, in the repository

Fetch the live titles

Requests each target page once, with a User-Agent that names this agent and nothing about who runs it, and keeps the title, so a page Claude still shows under an old title is counted as a stale snapshot.

titles.json

Count and summarise

Counts the four numbers, diagnoses every category query at its first block, lists who holds the queries, which of our pages the search can see and which entered or left, and the pages still to submit; writes the summary beside the previous round’s with the run record at the top.

analysis.json and summary.md

Who it is for: Teams whose buyers ask Claude for a shortlist, and who want to know, page by page, whether Claude’s search can find them at all, whether it holds a stale copy, and which listicles and guides hold the searches Claude actually runs instead.

How we use it: We probed claw-world.app on 2026-10-13 by hand before turning the scripts into this agent: of the 19 queries Claude itself had issued for the buyer questions, none returned one of our pages; of the 22 pages we wanted found, 7 could be; and Claude still showed the home page and the comparison page with titles they had lost on October 5 and 10. The pages it could not find were submitted to Brave that night, and the daily rounds are what tells us whether that worked. The AI Visibility agent measures the answers to the same questions; this one measures the search under them, and the two are read together: a page cannot be cited before it can be found.

.agents/skills/claude-visibility/SKILL.mdDefinitions table of the skill

What each number is counted to

01Category queries with us in the results: of the 19 queries Claude issued for the buyer questions, how many result lists held one of our pages. The query set is frozen until the growth plan ends; a change in this number is a change in the index, not in the questions.

02Target pages Claude’s search can find: of the 22 pages we want found, how many appeared in any probe’s results this round, their own site: probe or another’s. A site: probe is a soft filter, so absence is strong evidence, not proof.

03Stale snapshots: found pages whose title in Claude’s results matches none of the titles the live page carries (the title tag, og:title and the h1), site suffix off, quotes and case ignored. Claude reads the snapshot, not the page.

04Brand query: for a search of our name with the category word, how many results are ours and the position of the first. The arcades that share the name hold the rest.

05Diagnosis: each category query at its first block. Hit; no page (nothing written for the question); awaiting index (pages written, none found); indexed but not ranked (a page found, this query does not list it). A page proposal is only ever made for the last: rewriting a page the index does not hold changes nothing Claude sees.

06Noise: the retrieval layer is stable, four queries probed twice on 2026-10-13 agreed on 35 of 36 results, so a change of one is worth opening the probe file. The answer layer’s noise band does not apply here.

07Counts of queries and pages, never rates. A discarded probe leaves the denominator; a round with more than three discarded is not a reading. A change to the queries, the targets or a definition moves the definitions version, and two versions are never set side by side.

Read from the skill fileEvery summary names the round it is compared to

The rules the agent’s output is written to, from the file named above. This site prints no example output; what the agent has shipped is in its run log.

Workflow

How a run goes, step by step

Pick a step to see what goes in, what comes out, and where a person is involved.

Step 1 of 6

Probe

Starts one isolated Claude Code session per query with the same flags as the AI readout (safe mode, no settings sources, no MCP servers, the search tool as its only tool), tells it to search exactly once with the query verbatim, and reads the result list out of the session’s transcript. The reply is thrown away.

Goes in

panel.json, targets.json and the Claude Code CLI

Comes out

45 probe records: the query, what the session issued, the pages that came back

Where a person steps in

None. A usage limit pauses the round 15 minutes; a round cut short records what it has and the record says so.

Step 2 of 6

Fetch titles

Requests each target page once and keeps its title, so the title Claude’s results carry can be compared with the title the page has today.

Goes in

targets.json

Comes out

titles.json

Where a person steps in

None. A page that cannot be fetched is unknown, not stale.

Step 3 of 6

Count

Counts the four numbers, diagnoses every category query at its first block, finds every page of ours in any result list, lists the URLs that hold two or more of the queries, and the target pages not found with the date each was last submitted.

Goes in

The probe records and titles.json

Comes out

analysis.json

Where a person steps in

None.

Step 4 of 6

Summarise

Writes the four numbers beside the previous round’s, then every query with its diagnosis, every target page, the brand queries, who holds the queries, which of our pages entered or left, the watch probes and the pages still to submit. Opens the file with the run record.

Goes in

This round’s analysis and the previous one’s

Comes out

summary.md: counts, positions and page titles; there is no answer text to keep out

Where a person steps in

None.

Step 5 of 6

Check and propose

A judgement session evaluates the due rows of the changes table against the round (a submitted page found, a title refreshed, a watch resolved), writes the record’s narrative and, on Fridays, proposes at most three changes: a page to rewrite for a query that can be found but is not listed, a page to write for a query nothing answers, listicles to approach. A page not yet in the index is pending for up to eight weeks; nothing fails by rule before that.

Goes in

summary.md, the previous round’s record, the changes table, and the morning’s AI readout for the queries Claude issued today

Comes out

The record’s narrative, the due rows filled, proposals a person decides on

Where a person steps in

Every action: submitting, rewriting, writing, outreach. The session never does any of them.

Step 6 of 6

Report

On Fridays, puts the four numbers into the weekly report with one sentence. The whole summary is not pasted; the report is for reading.

Goes in

summary.md

Comes out

One line in the weekly report, on Fridays

Where a person steps in

A person reads the report.

Before you start

What you’ll need to bring

Company material

Your domain, the suffix your page titles carry, and the pages you want found, each with the buyer question it is written for.

Source material

The queries Claude itself issues for your buyer questions, read from a measurement that recorded them (the AI Visibility readout keeps them), frozen once written. The agent probes them; it writes nothing on your site.

Platform account

A Claude subscription with the Claude Code CLI signed in. The probes spend its quota, 45 short sessions a day on the cheapest model. No password handed over, no Brave account.

Run environment

A machine with Node.js, the Claude Code CLI and an agent runner that follows a written workflow. We use Claude Code. The sandbox folder sits outside your user profile; no browser is kept open.

Guides and files

Set it up yourself

The setup guide, and the files the agent is built from. You run it in your own environment, with your own accounts.

Open · no account neededA Claude Code skill (markdown instructions and the definitions table) plus four Node scripts: the probes, the live titles, the counting and the summary, sharing the isolated session starter with the AI Visibility skill. Not packaged for public download yet — the setup guide below describes what they do; the managed tier runs it for you today.
Setup guide
  1. 01

    Runtime

    • Node.js 20 or later, for the four scripts.
    • An agent runner that follows a written workflow, for the judgement step — we use Claude Code. It runs after the scripts and never searches anything itself.
  2. 02

    Browser setup

    • None. Every probe is a command-line session; nothing in this agent opens a browser. Submitting a page to Brave is a person’s action in their own browser.
  3. 03

    Account setup

    • A Claude subscription with the Claude Code CLI signed in. The probes spend that subscription’s quota: 45 short sessions a day, on the cheapest model.
    • No Brave account: Brave has no webmaster console, and no API is used. Its submit form is the one lever, and a person uses it.
  4. 04

    Configuration

    • panel.json: the queries Claude itself issued for your buyer questions, taken from a measurement’s records, with the question each serves, plus the brand queries. Frozen once written, so a change in the numbers is a change in the index, not in the questions.
    • targets.json: the pages you want Claude’s search to find, each with its site: probe (the title’s distinctive words) and the questions it is written for; a person records each submission date here.
    • brand.json: your domain, the site suffix your titles carry, and which panel row is the brand query.
    • The sandbox folder: outside your user profile and with a name that means nothing, as for the AI Visibility readout. Here the model never answers, so a leak could only show as a rewritten query, which the record catches and discards.
  5. 05

    First run

    • Run one round and read section 3 of the summary: a page you know is indexed should sit at position 1 or 2 of its own site: probe. If it does not, the probe’s words are too far from the stored title; change them before trusting the number.
    • Read section 2: every query diagnosed awaiting index names the pages you need to submit; section 8 lists them with their submission state.
    • Submit them, record the dates in targets.json, and let the rounds run; a page takes weeks to appear, and the changes table says when to look.
Files · 7

SKILL.md

Workflow · Markdown. The steps above and the definitions table, as the runner reads them.

Workflow

lib.mjs

Script · Node. What the scripts share: the config, the snapshot root, how a URL becomes a path of ours, how a title is compared, how a round is read back.

Script

probe.mjs

Script · Node. One round of probes, one record per query, resumable; discards a session that searched twice or changed the query.

Script

titles.mjs

Script · Node. The live title of every target page, one plain request each.

Script

analyze.mjs

Script · Node. Counts a round into analysis.json: the four numbers, the diagnosis of every query, who holds the queries, the pages still to submit.

Script

summarize.mjs

Script · Node. Writes summary.md beside the previous round, with the run record this log reads at the top.

Script

engines.mjs

Script · Node. Shared with the AI Visibility skill: the isolated session starter, the only place the CLI is started with the flags that shut out everything but web search.

Script

Not packaged for public download yet. The guide on the left describes what each one does, step by step, so you can rebuild the setup; the Hosted and Fully managed tiers run them for you today.

Rather have us run it?

Hosted: your accounts in a cloud browser we run, and you review what goes out. Fully managed: we set the strategy and run the agents.

Good to know

Where it stops and asks for you

  • More than three probes are discarded. The search tool’s result format changed or the sessions stopped relaying the query verbatim: the instrument broke. No number is read that day; the record is marked failed at the probes and a person fixes the parser.
  • A usage limit is hit. The round pauses 15 minutes and goes on. A round that still cannot finish within its time limit records the probes it has, with the denominator to match, and waits for a person.
  • A page is found for the first time, or a query lists us for the first time. The check row that was waiting for it is filled, and a first hit on a category query is written as a proposal the same day: a person decides what to do with it.
  • A page stays missing for eight weeks after its submission. The check row is closed as failed by the judgement session. The assumption that submitting works is what is being tested; after that, the lever is gone and the design doc says what to try next.

Risk notice

What to watch for

  • The instrument follows Claude Code: when the search tool’s result format changes, every probe is discarded, the run is recorded as failed at the probes, and a person fixes the parser.
  • A site: probe is a soft filter: other domains leak in, so a page not returned is strong evidence of absence, not proof. A probe whose words drift from the stored title undercounts; a page that stays missing while a person can find it on Brave’s site gets its probe rewritten.
  • Whether submitting a page to Brave gets it indexed is the assumption everything downstream rests on. It is unverified; the first check row of the changes table is where it is being tested, and if nothing appears in eight weeks the agent is down to reading.
  • Claude Code and claude.ai may not see the same results; the design doc rates the assumption that they do as medium confidence, and a hand check on claude.ai is planned.

FAQ

Questions about this agent

Why probe Claude and not Brave directly?

Claude’s search is backed by Brave, but it re-ranks and reaches past Brave’s top ten: on 2026-10-13, 45 of 54 Claude results were in Brave’s top 20 and only 31 in its top 10. Probing Claude measures what Claude gets; Brave’s own pages rate-limit after about ten queries and its API costs money. Six queries by hand once a month are kept as a calibration.

A page is live and linked. Why can Claude not find it?

Brave finds pages mostly through its browser’s Web Discovery Project, not by following links: the pages that were indexed had linked the missing ones from their navigation for weeks. The submit form is the lever that is left, and the changes table records whether it worked.

The first number has been zero for weeks.

It will be, until the pages written for the queries are in the index and then rank. Read the second and third numbers first: they are the preconditions and they move earlier. A query is never given a page proposal while its pages are awaiting the index.

Why is this agent separate from AI Visibility?

That one asks the questions and reads the answers; this one reads the search under the answers. They fail in different ways, keep different tables and run at different times, and the AI readout’s own records of what Claude searched are what will refresh this panel after the growth plan.