Agent skill
intel-ai-visibility
Track whether answer engines name the firm — build a versioned panel of buyer-intent prompts, run them across ChatGPT/Claude/Gemini/Perplexity, and roll results into a share-of-answer table with citation rate and named competitors.
Filed under Content and SEO.
From b2bforce/b2bforce · 29 skills · 2 · pushed 2026-08-21
What it does when it runs
Track whether answer engines name the firm — build a versioned panel of buyer-intent prompts, run them across ChatGPT/Claude/Gemini/Perplexity, and roll results into a share-of-answer table with citation rate and named competitors. Use for AI visibility, GEO/AEO monitoring, "do LLMs recommend us", or answer-engine share of voice.
Read from the skill and the 1 file bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- None found.
- Hosts it reaches
- No third-party host appears in the skill or its bundled files.
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It does act, so it runs under whatever permissions your session already grants. - Actions present in the files
- shell
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/b2bforce/b2bforce.git /tmp/b2bforce git -C /tmp/b2bforce sparse-checkout set ".agents/skills/intel-ai-visibility" mkdir -p ~/.claude/skills/intel-ai-visibility cp -R "/tmp/b2bforce/.agents/skills/intel-ai-visibility/." ~/.claude/skills/intel-ai-visibility/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
The skill
Source on GitHub ↗Reproduced in full from b2bforce/b2bforce/blob/7682ed90c62190a0f3c09eb135596d08bd6890bc/.agents/skills/intel-ai-visibility/SKILL.md, which is licensed MIT (skill frontmatter). 1,651 words, 15 headings.
AI Visibility
Answers one question on a schedule: when a buyer asks an answer engine for a firm like this one, does this firm get named?
This is the same pattern as intel-competitor-monitoring — a versioned panel, dated
runs, a rollup — with prompts in place of URLs. Nothing new architecturally. The value
is in the panel design and in the measurement discipline below.
Buyers now shortlist inside chat sessions, and an answer engine returns four to seven names where a search page returned ten links. A firm can run the entire content pipeline in this repo, rank perfectly well, and be absent from that shortlist. Without this skill the repo gives it no way to find out.
Read First
Brand scope. In a multi-brand workspace (2+ brand homes in workspace/firm/brands/), every path this skill reads or writes is brand-scoped: definitional entities (services, ICP, personas, proof, channels) live in firm/brands/{brand}/…, working pipelines carry a {brand}/ segment under their entity root, and the working brand comes from the user's choice or B2BFORCE_BRAND — never guessed. Rules: Brand Scope Gate in AGENTS.md; paths: docs/WORKSPACE.md.
workspace/firm/profile.md— firm name, aliases, domain, geography.workspace/firm/services/*.md— what the firm actually sells.workspace/marketing/icp/*.mdandicp/personas/*.md— how buyers describe their problem, and their objections.workspace/marketing/content/ideas/*.md— every idea carries abuyer_question. These are already real buyer phrasings; do not invent new ones while they exist.workspace/intelligence/competitors/*/!_profile.md— the named set to measure against. Share of answer is only meaningful relative to somebody.
The Firm Context Gate and ICP Gate apply. A prompt panel built without ICP context is a list of keywords with question marks.
Measurement Discipline
The rules that keep this skill from producing a misleading artifact. Non-negotiable, because an answer engine is non-deterministic: three runs of one prompt give three answers.
- Never report a single run as truth. A run is one sample.
- Minimum three runs per prompt per engine before reporting presence or a trend.
- Report a rate, never a boolean. "Named in 2 of 3 runs" is a finding. "We are in ChatGPT" is not a claim this data supports.
- The first batch is a baseline. No drift claims, exactly as the first competitor crawl stores a snapshot and raises no alert.
- Every run records
engine,model,run_index, and the date. A result without these is unusable, because engines and model versions change underneath the panel. - Never paraphrase an answer into a verdict. Store the verbatim response. The wording is the evidence, and a summary of it is the agent's opinion.
- A missing mention is not proof of absence — it is one sample where the firm was not named. Say it that way.
This matters more here than in most skills. Everything else in this repo refuses to invent client results; an AI-visibility artifact that reports one lucky run as "we rank in ChatGPT" would be the same failure wearing a dashboard.
The Prompt Panel
workspace/intelligence/ai-visibility/!_prompts.md — versioned, committed, and stable.
Week-to-week runs are incomparable if the panel drifts, so changing a prompt means
adding a new one and retiring the old, never editing in place.
15–30 prompts, maximum 30. The same discipline as "5–20 monitored pages is enough".
Each prompt is what a buyer would type, not what the firm would like to rank for:
| Prompt type | Example shape |
|---|---|
| Category shortlist | "best {service} agency for {icp descriptor}" |
| Geographic | "{service} consultancy in {region}" |
| Problem-led | the buyer_question from a content idea, verbatim |
| Comparison | "{competitor} alternatives for {icp}" |
| Objection | the objection from a persona file, phrased as a question |
| Vendor-check | "is {firm} a good choice for {problem}" |
The last type is the weakest signal and easy to over-read: an engine asked directly about a named firm will usually say something positive. Keep at most two.
The API caps a prompt at 500 characters. Longer prompts are rejected rather than truncated, so runs stay comparable.
---
engines: [chat_gpt, perplexity]
runs_per_prompt: 3
country: PL
cadence: monthly
firm_aliases: ["Acme Digital", "Acme Digital sp. z o.o.", "acmedigital.com"]
competitors: [northwind-studio, meridian-labs]
panel_version: 2
updated: 2026-07-25
---
Body: a table of prompt_slug | prompt | type | service | icp | status, where status
is active or retired. Retired rows stay for history.
firm_aliases matters more than it looks. An engine may name the firm without its
legal suffix, or cite the domain without naming the company, and a panel that only
matches the exact registered name will under-count.
Running A Batch
S=.agents/skills/tool-dataforseo/scripts
# Confirm which models the engine currently accepts — names drift
bash $S/llm-response.sh --models chat_gpt
# One run
bash $S/llm-response.sh chat_gpt "best drupal migration agency for mid-market retail" PL
Cost is the argument for doing this in the repo at all: DataForSEO's LLM Responses API is fractions of a cent per request plus model tokens, so 30 prompts × 2 engines × 3 runs is a few dollars a month. The SaaS category for the same job averages a few hundred dollars a month. This is the sharpest available illustration of the repo's "no subscription, no vendor lock-in" claim — a whole product category replaced by an API call and a folder of Markdown the firm owns.
Without an API key
This is the one workflow in this repo that is materially worse without a paid key. Be honest about it rather than papering over it:
- Ask the current agent session the prompts directly, record
engines: [current-session], and state in the rollup that coverage is one engine and grounding is unverified. - A session-only panel measures a single model, often without live web search. It is a starting point, not a visibility measurement, and the rollup must say so.
Do not present a degraded run as equivalent. The repo's FAQ says paid keys are optional, which stays true — this workflow just gets a weaker answer without one.
Output
Run file — one per prompt per batch
workspace/intelligence/ai-visibility/runs/{YYYY-MM-DD}/{prompt-slug}.md
All engines and all runs for that prompt go in one file. Splitting per engine per run would produce roughly 180 files a month, which collides with the Minimal Files Rule for no benefit. One file per prompt per batch keeps it at panel size.
---
prompt_slug: best-drupal-migration-agency-mid-market
prompt: "best drupal migration agency for mid-market retail"
batch: 2026-07-25
country: PL
firm_mentioned_runs: 1
total_runs: 6
engines: [chat_gpt, perplexity]
competitors_mentioned: [northwind-studio]
cited_domains: [clutch.co, reddit.com, g2.com]
---
Body: one ## {engine} · run {n} · {model} section per run, each with the verbatim
answer, its cited sources, and a one-line note on whether the firm or a tracked
competitor appears. No summarizing across runs here — that is the rollup's job.
Rollup
workspace/intelligence/ai-visibility/share-of-answer.md
Append-only, one row per prompt per batch. Past rows are never rewritten — the history is the point, and rewriting it destroys the only trend data the firm has.
| Batch | Prompt | Engine | Firm named | Rate | Rank | Competitors named | Top cited |
|-------|--------|--------|-----------:|-----:|-----:|-------------------|-----------|
| 2026-07-25 | best-drupal-migration-agency-mid-market | chat_gpt | 1/3 | 33% | 4 | northwind-studio (3/3) | clutch.co |
Then a short Findings section, and only claims the runs support:
- citation rate — share of active prompts where the firm was named in at least one run;
- share of answer against each named competitor;
- which domains the engines cite, which is the input to
marketing-geo-placement; - prompts where the firm never appears — the actual work list.
Do not compute a trend from fewer than two batches, or from fewer than three runs.
Retention
Rollup rows are kept permanently. Raw run folders older than six months may be deleted — they are bulky, the rollup carries the finding, and a verbatim answer from an engine version that no longer exists has little value. Say so before deleting.
Rules
- The panel is capped at 30 active prompts and changes by adding and retiring, never by editing a prompt in place.
- Minimum three runs per prompt per engine before any presence or trend claim.
- Store verbatim answers. Never store a paraphrase as the result.
- Match against
firm_aliases, not just the registered name. - Never fabricate a run, a citation, or a competitor mention. A failed request is a
run note with
status: error, exactly as a failed crawl is. - This skill observes. It does not write content, pitch anyone, or edit the website —
marketing-geo-placementand the content skills act on the findings. - Tactics in this area change fast. Note the date of any benchmark used, and re-check the approach yearly rather than trusting a number in this file forever.
What This Does Not Do
No llms.txt generation. It is widely recommended and there is still no confirmed
evidence that major answer engines consume it; Google has said publicly that it does
not. Shipping it as a feature would be cargo cult in a repo whose whole argument is
that outputs are not outcomes. If a firm wants one, it is a five-minute manual file.
No ranking guarantee. Nothing here makes an engine name the firm. It tells the firm
whether it is named, and where the engines are looking instead. Acting on that is
marketing-geo-placement and the content pipeline.
Related Skills
| Skill | When |
|---|---|
marketing-geo-placement | Turns cited_domains into a backlog of surfaces to get onto |
tool-dataforseo | llm-response.sh — the engine calls |
intel-competitor-monitoring | Supplies the named competitor set, and the pattern this copies |
intel-weekly-report | Reports visibility drift alongside competitor changes |
marketing-content-ideas | Supplies buyer_question values, and receives gaps back |
marketing-seo-research | The classic-search counterpart; different channel, same buyer |
Files bundled with it
These load only when the skill asks for them, so they cost nothing until it runs.
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- pipeline-visibility by NEON-Rutger · 45
- competitor-intel by cjf-iii · 1
- aeo-visibility by edupegoretti · 0
- aeo-visibility-monitor by edupegoretti · 0
- competitive-pricing-intel by edupegoretti · 0
- competitor-intel by edupegoretti · 0
Need help setting it up?
This page tells you what intel-ai-visibility does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.