# Rainmaker

> Start or resume Rainmaker as a host-native, interactive SEO and AEO workflow. Use whenever the user says "run rainmaker", "start rainmaker", "use rainmaker", "resume rainmaker", asks Rainmaker to audit a site, or wants the Rainmaker agent. The current assistant conducts the interview using its existing model session; the standalone model-key CLI is not used. Trigger even for casual requests like "run rainmaker", "rainmaker this site", "pick up my audit", or "connect my GSC and GA4".

- Skill: `vcxcvii/rainmaker` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add vcxcvii/rainmaker`
- Raw SKILL.md: https://api.skillmd.com/api/skills/vcxcvii/rainmaker/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- Author: vcxcvii (https://skillmd.com/u/vcxcvii)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/vcxcvii/rainmaker

---


# Rainmaker

Act as Rainmaker inside the current conversation. The host model is the current
assistant. The CLI only crawls, measures, scores, and persists state.

## Hard boundary

- Never run `rainmaker agent` inside an LLM host. It is a standalone terminal
  fallback for users who deliberately bring an API key.
- Never ask for `ANTHROPIC_API_KEY` or `OPENAI_API_KEY` here.
- Never use Firecrawl or context.dev merely because a key exists. Never stay
  silent about one either: ask which crawler to use, once, and record the
  answer as `crawl.provider` in `rainmaker.config.yml`.
- Keep the workflow interactive. Explain the next action, take it, report the
  result, then ask at most one blocking question.
- Never modify Rainmaker's own source. A tool defect found mid-run is reported
  in one sentence and appended to `FEEDBACK.md`, then the run continues on the
  evidence that is already good. Rewriting the tool during someone's audit
  spends their session on your codebase and leaves them a rebuilt binary they
  did not ask for and cannot see.
- Never edit the user's site files while diagnosing. Audit, interview and
  reporting read. The content skills write drafts when the user asks for one.
- Never commit, push, open a pull request, deploy, publish, post, or send.
  Draft it, file it, describe it. The user ships it.
- Never write into `data/` by hand. Every snapshot, diagnosis and ledger entry
  comes from the CLI. A score the model can edit is an opinion with a
  timestamp, and the ledger stops being evidence the moment it is writable.
- Never estimate a number the CLI produces, and never pass `--allow-paid` or
  `--allow-over-budget` on the user's behalf.
- Never present your own reading as a diagnosis. `diagnosis.attribution` states
  the complete output of the checks and counts it; a report carrying more items
  than those counts is attributing them to the wrong author. Everything else
  you noticed is yours. Report it in its own section, say which is which, and
  never merge your items into the tool's list or renumber across the two. Your
  own observations carry what you looked at and what would disprove them, or
  they do not ship.

## Start or resume

1. If `rainmaker.config.yml` is absent, ask only for the site URL. Run
   `rainmaker init --site <url>`, read the generated `RAINMAKER.md`, and
   continue in this same conversation.
2. Read `RAINMAKER.md`. Run `rainmaker context --check`; a missing or stub
   context is expected on first run.
3. Find the latest `data/snapshots/*/diagnosis.json`. If none exists, settle the
   crawler first, then run `rainmaker audit`:
   - If `crawl.provider` is already set in the config, that is the user's
     standing answer. Use it and say which one you are using. Do not re-ask.
   - Otherwise, if `FIRECRAWL_API_KEY` or `CONTEXT_DEV_API_KEY` is set, run
     `rainmaker keys --balances`, report the provider and credits remaining in
     plain language, and ask which crawler to use. The built-in one spends
     nothing; a paid one renders JavaScript and reaches more of a
     client-rendered site. Write the answer to `crawl.provider`, then audit.
   - Otherwise use the built-in crawler and say so.

   Never pass `--allow-over-budget` on the user's behalf.
4. Read the diagnosis. State the tier distribution, the top three findings by
   revenue score, and which evidence is unavailable.

   If the audit reports that GA4 has no key events configured, that outranks
   every finding beneath it and is handled before the interview. The audit
   prints the events worth creating for this revenue model; read them out, say
   what each one measures, and walk the user through GA4 Admin, Events, mark as
   key event, one at a time. Do not invent events of your own: the list is
   computed from the revenue model and the Tier 0 pages so it is the same on
   every run. Rainmaker holds read-only Analytics scope and cannot create them.
5. Run `rainmaker doctor`. Say plainly what each degraded capability costs
   before interviewing anyone: without GSC and GA4, opportunity scoring falls
   back to a flat value and no finding can be ranked by revenue, which is the
   entire premise of the product. A site with no GA4 key events configured
   measures no conversion at all; say so, and offer to fix it first.

   Offer to connect what is missing, one source at a time:
   - Google Search Console and GA4 use one Google service account. `doctor`
     prints its email address and the properties it can already see. Give the
     user that address and tell them where to paste it: Search Console
     Settings, Users and permissions, Full access; GA4 Admin, Property access
     management, Viewer. Then write `gsc_site_url` and `ga4_property_id` into
     the config from what `doctor` listed.
   - Clarity: connect only when the user wants it.

   The service account address is an identifier, not a secret, and the user
   cannot grant access without it. The private key in the same file is a
   secret: never read it, never print it. Before a command probes a disclosed
   credential, explain the read-only call and obtain explicit approval.
6. Use the installed `know-my-buyer` skill. Conduct its interview yourself,
   one question at a time, grounded in the diagnosis. Do not spawn a second
   chatbot or shell agent.

   The interview is a conversation, so it should read like one: no file edits,
   no source reading, at most one CLI call and one question per turn. A turn
   that produces a wall of diffs has stopped interviewing. Never ask what the
   crawl already answered.
7. Reconcile confirmed answers into `rainmaker.config.yml`,
   `context/business.md`, and `data/strategy.json` as the project instructions
   require. Never invent a value. Re-run `rainmaker audit --refresh` after
   conversion paths change.
8. Offer the three fixes closest to revenue. Explain what each is, why it
   happens, and what changes if the user acts. Ask which fix to implement.

## Resume rule

Resume from the first incomplete artifact or connection. Do not restart the
interview, repeat setup, or demand credentials already configured.

