AI Visibility agent
Five numbers from Claude and GPT-6 Sol every morning, beside yesterday’s and the 7-day pool.
The questions a buyer types into an AI assistant are answered with a handful of names and a handful of sources. Whether yours is among them changes week to week, and nobody is told.
Running on our own company since Oct 15, 2026 · Claude · GPT-6 Sol · Risk: Low. Everything on this page is public; there is nothing to sign in for.
Tasks and outputs
What it takes on
Probe the sessions
Asks each engine what the measuring session can see: its tools, its folder, any instructions, files or connectors. A session that sees anything but the question stops the run before a single question is asked.
Ask the 20 questions
Asks each frozen buyer question once to Claude Opus 5 and once to GPT-6 Sol, from an empty, neutrally named folder, and keeps each answer with its sources and the search results the engine saw.
Score and summarise
Matches every answer against the brand’s spellings, its domain and the vendor dictionary, then writes the five numbers beside the previous readout’s and the 7-day pool, with the run record at the top of the same file.
Who it is for: Teams whose buyers now ask Claude or ChatGPT for a shortlist, and who want to know every morning whether their pages turned up in the engine’s search, whether their name and site made it into the answer, which agencies did instead, and whether a change is theirs or the engine’s.
How we use it: We measured claw-world.app in two deep rounds of 200 answers each, on 2026-09-28 and 2026-10-12: ClawWorld was mentioned in 0 of 200 and cited in 0 of 200, both times. In the second round the control brands Profound and Peec each lost about ten mentions on Claude, so the engine itself had moved; three vendors entered Claude’s answers on the strength of their own articles; and none of the eleven pages we had published since late September was cited once. From mid-October 2026 it asks the same 20 questions every morning. Radar, our hosted monitor, runs its own nightly scans of most of these questions against the same two model families through a different OpenAI path; its numbers and this agent’s are not the same series and are not compared.
What each number is counted to
01Retrieved: answers whose search results listed a claw-world.app page, cited or not. A page has to be found before it can be cited, so this is the earliest number to move. The two deep rounds did not record search results.
02Mentioned: answers whose text names ClawWorld, Claw World or claw-world.app. A Las Vegas arcade is also called Claw World, so a hit is read in context before it counts.
03Cited: answers whose list of sources includes claw-world.app.
04Agency named: answers that name at least one done-for-you agency from the vendor dictionary, other than us. That place in the answer is the one we compete for, not the mention of any tool.
05Controls: answers naming Profound, and answers naming Peec. When both move together, the engine moved; a change in our numbers alone is ours.
06The noise band: at one answer a question a day, a control brand moving by three answers is noise. Week-on-week change is read from the 7-day pool of 280 answers. The only reading that is never noise is our own count leaving zero, and that one is read in the answer’s text before it is published.
07Counts are added, never rates averaged. A discarded answer leaves the denominator; a readout with no valid answer is not measured, not zero. A change to the questions, the dictionary or a definition moves the definitions version, and two versions are never set side by side.
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 session per engine with the flags the measurement uses and asks what it can see. Claude Code runs in safe mode, with no settings sources, no MCP servers and WebSearch as its only tool; Codex runs with apps, plugins, the browser and computer use switched off.
The two CLIs, each signed in to its own subscription
A clean or dirty verdict, and the probe’s answers on the machine
None when it is clean. A dirty probe means no measurement that day: the record is marked failed at the probe step, and a person finds what leaked in.
Step 2 of 6
Ask
Asks the 20 questions once each to both engines, from an empty folder outside the user profile with a name that means nothing. Each answer is one file, so a run that is cut short resumes where it stopped; a usage limit pauses it for 15 minutes rather than counting as a failure.
questions.json and the two sessions
40 answer files, kept on the machine and never committed: each carries the account the question was asked from
None. A run that cannot finish all 40 records the answers it has, and the denominator says so.
Step 3 of 6
Score
Matches each answer by string against the brand’s spellings, its domain and the vendor dictionary: is the domain in the search results, is the name in the text, is the domain among the sources, which vendors are named. Flags the answers that mention the machine (a folder, a user name, an email) or our name.
The answer files, brand.json, vendors.json, and review.json when it exists
analysis.json
None at this step; the flagged answers go to the review.
Step 4 of 6
Summarise
Writes the five numbers beside the previous readout of the same kind, and the 7-day pool beside the 7 days before it, then the counts by question, by vendor and by cited domain, and the flagged answers by position. Opens the file with the run record: the numbers, the steps so far, and room for the narrative.
This readout’s analysis and the previous ones
summary.md: counts and positions, never the text of an answer
None.
Step 5 of 6
Review the flagged answers
A judgement session reads each flagged answer and records keep or discard, and for a hit on our name whether it is us or the arcade. The scorer and the summary run again with those verdicts. The session never asks an engine anything: it carries the whole repository, and what it asked would not be a measurement.
The flagged answers and the agent’s changes table
review.json, the record’s narrative, a re-scored summary
When the session cannot tell, the record waits for a person.
Step 6 of 6
Report
On Fridays, puts the week’s 7-day pool into the weekly report with one sentence of judgement. The whole summary is not pasted; the report is for reading.
summary.md
One line in the weekly report, on Fridays
A person reads the report.
Before you start
What you’ll need to bring
Company material
Your brand’s spellings and domain, the agencies and tools you compete with, and two control brands big enough to show when an engine moves.
Source material
Twenty questions a buyer of what you sell would ask an AI assistant, without your name in them, frozen once written. The agent asks them; it writes nothing on your site.
Platform account
A Claude subscription with the Claude Code CLI signed in, and a ChatGPT subscription with the Codex CLI signed in under its own CODEX_HOME. The questions spend their quota, 20 calls each a day. No password handed over.
Run environment
A machine with Node.js, the two CLIs 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.
Run log
Recent runs, as they happened
The full log is public and read-only. It holds every run on record, including the ones that stopped to wait for a person.
View the full run logGuides 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.
- 01
Runtime
- Node.js 20 or later, for the six scripts.
- An agent runner that follows a written workflow, for the judgement step — we use Claude Code. It runs after the scripts and never asks an engine anything itself.
- 02
Browser setup
- None. Both engines are asked through their command-line tools; nothing in this agent opens a browser.
- 03
Account setup
- A Claude subscription with the Claude Code CLI signed in, and a ChatGPT subscription with the Codex CLI signed in under its own CODEX_HOME, kept apart from the profile you use day to day.
- Both runs spend that subscription’s quota: 20 calls each a day at this size. Nothing else is billed.
- 04
Configuration
- questions.json: the frozen questions, written the way a buyer would ask them and without your name. Changing one starts a new series.
- vendors.json: the vendor dictionary, each name with its spellings and whether it is a done-for-you agency or a tool, and the control brands.
- brand.json: your brand’s spellings, your domain, and the phrases that mark an answer as talking about the machine it was asked from.
- The sandbox folder: outside your user profile and with a name that means nothing, because the folder name reaches the model through the system prompt. Our first attempt used aeo-measure-20q; three of thirteen Claude answers treated the asker as someone building an AEO tool, and the whole round was discarded.
- 05
First run
- Run --probe first and read what each engine lists: tools, folder, instructions, connectors. Anything beyond the question and web search is a leak to close before you measure.
- Run one round.
- Read every flagged answer before you trust a count.
SKILL.md
Workflow · Markdown. The steps above and the definitions table, as the runner reads them.
engines.mjs
Script · Node. The isolated sessions: the only place the two CLIs are started, with the flags that shut out everything but web search.
score.mjs
Script · Node. The string-matching definitions: retrieved, mentioned, cited, a vendor named, the machine leaking into an answer.
measure.mjs
Script · Node. One round of questions, one file per answer, resumable; --probe asks the probe question only.
analyze.mjs
Script · Node. Scores a round into analysis.json, honouring the keep and discard verdicts in review.json.
summarize.mjs
Script · Node. Writes summary.md beside the previous readout and the 7-day pool, with the run record this log reads at the top.
review.mjs
Script · Node. Records keep or discard for an answer, and whether a hit on the name is us.
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
- The probe is not clean. Something the measuring session should not see reached it: a new global MCP server, a CLI update that changed a default. No question is asked that day; the record is marked failed at the probe step.
- A usage limit is hit. The run pauses 15 minutes and goes on. A run that still cannot finish records the answers it has, and the denominator is the number of valid answers, not 40.
- Our name appears in an answer. The scorer flags it and the review reads it: the arcade called Claw World counts as someone else. A first hit of ours is read in the answer’s text before the record says we were mentioned.
- A pinned model is retired. The run stops and the record says so. A person picks the replacement, the definitions version moves, and readouts of two versions are not compared.
Risk notice
What to watch for
- Isolation can break silently: a new global MCP server, or a CLI update that changes a default. Every run probes first, and a dirty probe means no measurement that day, recorded as failed.
- Name collision: a Las Vegas arcade is also called Claw World. A hit on the name is read in context before it counts.
- A pinned model can be retired. The record says so, the definitions version moves, and readouts before and after are not compared.
- Subscription limits: the questions share a quota with everything else on the account. A run that cannot finish its 40 answers records the ones it has, with the denominator to match.
FAQ
Questions about this agent
Why not read the numbers off Radar?
Radar is the hosted product: only our staff can start its scans, which run on the team’s own subscription with up to ten questions a brand. This agent is the one you can run yourself with two command-line tools and questions of your own, and every reader of the page can rebuild it. The two series are kept apart.
Why Claude and GPT-6 Sol, and not ChatGPT or Gemini?
The Codex CLI asks OpenAI’s model with a web search tool, which is not the answer chatgpt.com gives, so the page names the model. No measuring path here asks Gemini yet: an engine joins with a probe of its own, a column of its own and a history that starts the week it is added.
Today’s numbers jumped.
At one answer a question a day, a control brand moving by three answers is noise. Read the 7-day pool; if Profound and Peec moved with it, the engine moved.
Why are the answers themselves not published?
Each answer carries the account the question was asked from: the Claude session’s system prompt includes it and cannot be switched off. The answers stay on the machine; the summary quotes counts and positions, never the text.
Would you rather we ran this agent for you? There is a managed service for that.
Talk to us