01-intake
Build the GEO brand context for a client by ingesting provided materials (PDF/DOCX/PPTX/XLSX, URLs, raw notes) and conducting structured AI-perception +…
Re-run 02-audit, diff against the previous baseline, attribute movement to specific content/distribution actions. Outputs reaudit/round-N.json validated against attribution_diff.schema.json. This is the closing-of- loop artifact that proves (or disproves) what's actually
> /plugin marketplace add ViryaZheng/recomby-geo > /plugin install recomby-geo@recomby-geo
How it fires
How this command gets triggered: by you, by Claude, or both.
/07-reauditContext preview
What this command does when you run it.
Re-run 02-audit, diff against the previous baseline, attribute movement to specific content/distribution actions. Outputs reaudit/round-N.json validated against attribution_diff.schema.json. This is the closing-of- loop artifact that proves (or disproves) what's actually
description: Re-run 02-audit, diff against the previous baseline, attribute movement to specific content/distribution actions. Outputs reaudit/round-N.json validated against attribution_diff.schema.json. This is the closing-of- loop artifact that proves (or disproves) what's actually working. Run monthly after the previous month's distribution actions have had time to be indexed. argument-hint: "<client-folder, e.g. clients/acme>"
Closes the loop. Without this command, the pipeline is open-loop — actions go out, no proof they did anything. With this command, every action gets graded: did it move queries, which queries, by how much, with what confidence.
---
`schemas/attribution_diff.schema.json`.
review.
preserved.
new round.
---
Before re-running audit, copy current `visibility_baseline.json` to `baselines/round-<N-1>.json` if not already there. Idempotent.
Call 02-audit with `meta.audit_round = N`. Use the SAME `target_queries` list as the previous round (do not silently drop or add queries — that breaks the diff). If brand_context.target_queries has changed, log the delta but keep the audit on the union for one round; signal to user that next round will adopt the new list.
After 02-audit completes, the new baseline is at `clients/<slug>/visibility_baseline.json`.
PREV=clients/<slug>/baselines/round-<N-1>.json CURR=clients/<slug>/visibility_baseline.json LOG=clients/<slug>/distribution/log.jsonl
Filter log entries to those with `shipped_at` between PREV.captured_at and CURR.captured_at. These are the actions in this round's window.
For each query in PREV.summary.per_query:
back to query string). **Keep the query text byte-identical across rounds** — `query_id` is derived from the query string (02-audit Step 1), so any edit (even punctuation) mints a new id and silently drops the query from the diff. To revise a tracked query, retire the old one and add the new under a fresh id rather than editing in place.
**Two verdict frames — don't mix them.** 02-audit's baseline verdicts (`winning` / `contested` / `absent`) are ABSOLUTE snapshots: `winning` needs mention_rate ≥ 0.6 and position ≤ 3. The verdict_change values above are DELTAS between rounds: `newly-won`'s 0.3 threshold means "crossed from zero into contested territory", NOT "became winning". A query can be `newly-won` here and still `contested` in the new baseline. When reporting, use verdict_change for movement and the new baseline's verdict for current state — never infer one from the other.
For each query with movement (improved / regressed / newly-won / newly-lost):
query_id.
cause), publication date vs measurement date (need ≥7 days for AI re-indexing typically).
confounding factors.
competitor also moved).
inconsistent with action.
competitor change, AI model update, market drift).
For each action in this round's window:
`summary.actions_with_impact`.
`summary.actions_without_impact` with a `diagnosis` field.
Diagnosis options:
time.
competitor entrenchment.
data; probably not getting cited.
no external mentions; AI engines didn't find it.
shipped a stronger piece.
Diagnosis feeds into the next 03-gap run.
queries_improved = count(verdict_change in {"improved", "newly-won"})
queries_regressed = count(verdict_change in {"regressed", "newly-lost"})
queries_stable = count(verdict_change == "stable")
overall_score_delta = CURR.summary.overall_visibility_score - PREV.summary.overall_visibility_score`next_round_recommendations[]` — plain-language hand-off. Examples:
Hold nex
GEO 领域 AI 员工开源方案 · Open-source GEO AI-employee solution (MIT). GEO Skills package + curated lists of agents and office CLIs that make up the AI-employee stack.
Build the GEO brand context for a client by ingesting provided materials (PDF/DOCX/PPTX/XLSX, URLs, raw notes) and conducting structured AI-perception +…
Run a Claude-native visibility audit. For each query in brand_context.target_queries, ask Claude to answer the query as a real user would (using WebSearch +…
Translate the visibility baseline + brand context into a ranked list of content actions that should move the needle. Identifies absent queries, contested…
For one priority from content_priorities.json, generate a content brief with explicit slots for the human expert (founder/domain specialist) to fill with real…
Convert an expert-filled brief into a publishable draft. Applies Princeton KDD 2024 GEO techniques (statistics, quotations, citations, authoritative language)…
For a published-ready draft, generate JSON-LD schema markup, internal linking suggestions, third-party distribution targets, and llms.txt block. Outputs…