seo 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/PRIVACY.md +2 -2
  2. package/README.md +133 -40
  3. package/TERMS.md +2 -2
  4. package/TRADEMARKS.md +9 -5
  5. package/dist/cli.js +68 -52
  6. package/dist/cli.js.map +1 -1
  7. package/dist/{dist-CSY2_p-j.js → dist-6bK_8r5M.js} +49 -49
  8. package/dist/dist-6bK_8r5M.js.map +1 -0
  9. package/dist/{dist-FeAUNn9A.js → dist-vRmqfhR4.js} +1 -1
  10. package/dist/index.d.ts +186 -94
  11. package/dist/index.js +843 -415
  12. package/dist/index.js.map +1 -1
  13. package/dist/mcp.d.ts +18 -1
  14. package/dist/mcp.js +6532 -4665
  15. package/dist/mcp.js.map +1 -1
  16. package/dist/{package-uzXzqDW6.js → package-7aT8_Xp0.js} +2 -2
  17. package/dist/{package-uzXzqDW6.js.map → package-7aT8_Xp0.js.map} +1 -1
  18. package/evals/README.md +117 -0
  19. package/evals/affected-urls.json +57 -0
  20. package/evals/ai-readiness.json +84 -0
  21. package/evals/ai-referrals.json +71 -0
  22. package/evals/ai-search-scorecard.json +70 -0
  23. package/evals/audit-page.json +57 -0
  24. package/evals/audit-urls.json +58 -0
  25. package/evals/cannibalisation.json +57 -0
  26. package/evals/community-intent.json +57 -0
  27. package/evals/compare-crawls.json +56 -0
  28. package/evals/content-optimization.json +57 -0
  29. package/evals/crawl-diff.json +58 -0
  30. package/evals/crawl-history.json +44 -0
  31. package/evals/crawl-report.json +44 -0
  32. package/evals/crawler-rules.json +44 -0
  33. package/evals/ctr-underperformers.json +57 -0
  34. package/evals/decaying-pages.json +57 -0
  35. package/evals/entity-readiness.json +57 -0
  36. package/evals/explain-crawl-issue.json +44 -0
  37. package/evals/generate-llms-txt.json +44 -0
  38. package/evals/geo-gaps.json +57 -0
  39. package/evals/index-coverage-plan.json +58 -0
  40. package/evals/index-coverage.json +70 -0
  41. package/evals/index-monitor.json +58 -0
  42. package/evals/index-watch.json +68 -0
  43. package/evals/internal-links.json +57 -0
  44. package/evals/link-recovery.json +58 -0
  45. package/evals/llms-txt-audit.json +44 -0
  46. package/evals/measure-change.json +58 -0
  47. package/evals/monthly-action-plan.json +56 -0
  48. package/evals/monthly-report.json +58 -0
  49. package/evals/narrative-report.json +58 -0
  50. package/evals/okf-build.json +44 -0
  51. package/evals/okf-validate.json +44 -0
  52. package/evals/page-opportunities.json +57 -0
  53. package/evals/performance-audit.json +57 -0
  54. package/evals/pseo-audit.json +84 -0
  55. package/evals/query-clusters.json +57 -0
  56. package/evals/quick-wins.json +86 -0
  57. package/evals/redirect-trace.json +57 -0
  58. package/evals/refresh-priorities.json +57 -0
  59. package/evals/search-performance-overview.json +86 -0
  60. package/evals/second-page.json +58 -0
  61. package/evals/segment-impact.json +57 -0
  62. package/evals/seo-fix-queue.json +85 -0
  63. package/evals/seo-geo-readiness.json +84 -0
  64. package/evals/seo-site-audit.json +85 -0
  65. package/evals/seo-to-ai-query.json +57 -0
  66. package/evals/seo.json +87 -0
  67. package/evals/setup-check.json +56 -0
  68. package/evals/site-crawl.json +44 -0
  69. package/evals/striking-distance.json +85 -0
  70. package/evals/technical-watch.json +57 -0
  71. package/evals/top-fixes.json +44 -0
  72. package/evals/traffic-anomaly.json +57 -0
  73. package/evals/update-correlation.json +57 -0
  74. package/evals/update-postmortem.json +57 -0
  75. package/package.json +5 -3
  76. package/skills/README.md +46 -59
  77. package/skills/seo/SKILL.md +88 -63
  78. package/skills/seo/agents/openai.yaml +2 -2
  79. package/dist/dist-CSY2_p-j.js.map +0 -1
  80. package/skills/affected-urls/SKILL.md +0 -39
  81. package/skills/affected-urls/agents/openai.yaml +0 -4
  82. package/skills/ai-readiness/SKILL.md +0 -34
  83. package/skills/ai-readiness/agents/openai.yaml +0 -4
  84. package/skills/ai-referrals/SKILL.md +0 -31
  85. package/skills/ai-referrals/agents/openai.yaml +0 -4
  86. package/skills/audit-page/SKILL.md +0 -50
  87. package/skills/audit-page/agents/openai.yaml +0 -4
  88. package/skills/audit-urls/SKILL.md +0 -39
  89. package/skills/audit-urls/agents/openai.yaml +0 -4
  90. package/skills/cannibalisation/SKILL.md +0 -31
  91. package/skills/cannibalisation/agents/openai.yaml +0 -4
  92. package/skills/community-intent/SKILL.md +0 -39
  93. package/skills/community-intent/agents/openai.yaml +0 -4
  94. package/skills/compare-crawls/SKILL.md +0 -40
  95. package/skills/compare-crawls/agents/openai.yaml +0 -4
  96. package/skills/content-optimization/SKILL.md +0 -31
  97. package/skills/content-optimization/agents/openai.yaml +0 -4
  98. package/skills/crawl-diff/SKILL.md +0 -51
  99. package/skills/crawl-diff/agents/openai.yaml +0 -4
  100. package/skills/crawl-history/SKILL.md +0 -37
  101. package/skills/crawl-history/agents/openai.yaml +0 -4
  102. package/skills/crawl-report/SKILL.md +0 -37
  103. package/skills/crawl-report/agents/openai.yaml +0 -4
  104. package/skills/crawler-rules/SKILL.md +0 -34
  105. package/skills/crawler-rules/agents/openai.yaml +0 -4
  106. package/skills/ctr-underperformers/SKILL.md +0 -31
  107. package/skills/ctr-underperformers/agents/openai.yaml +0 -4
  108. package/skills/decaying-pages/SKILL.md +0 -31
  109. package/skills/decaying-pages/agents/openai.yaml +0 -4
  110. package/skills/entity-readiness/SKILL.md +0 -34
  111. package/skills/entity-readiness/agents/openai.yaml +0 -4
  112. package/skills/explain-crawl-issue/SKILL.md +0 -32
  113. package/skills/explain-crawl-issue/agents/openai.yaml +0 -4
  114. package/skills/generate-llms-txt/SKILL.md +0 -37
  115. package/skills/generate-llms-txt/agents/openai.yaml +0 -4
  116. package/skills/geo-gaps/SKILL.md +0 -37
  117. package/skills/geo-gaps/agents/openai.yaml +0 -4
  118. package/skills/index-coverage/SKILL.md +0 -84
  119. package/skills/index-coverage/agents/openai.yaml +0 -4
  120. package/skills/index-coverage-plan/SKILL.md +0 -50
  121. package/skills/index-coverage-plan/agents/openai.yaml +0 -4
  122. package/skills/index-monitor/SKILL.md +0 -49
  123. package/skills/index-monitor/agents/openai.yaml +0 -4
  124. package/skills/index-watch/SKILL.md +0 -77
  125. package/skills/index-watch/agents/openai.yaml +0 -4
  126. package/skills/internal-links/SKILL.md +0 -31
  127. package/skills/internal-links/agents/openai.yaml +0 -4
  128. package/skills/link-recovery/SKILL.md +0 -51
  129. package/skills/link-recovery/agents/openai.yaml +0 -4
  130. package/skills/llms-txt-audit/SKILL.md +0 -34
  131. package/skills/llms-txt-audit/agents/openai.yaml +0 -4
  132. package/skills/measure-change/SKILL.md +0 -52
  133. package/skills/measure-change/agents/openai.yaml +0 -4
  134. package/skills/monthly-action-plan/SKILL.md +0 -50
  135. package/skills/monthly-action-plan/agents/openai.yaml +0 -4
  136. package/skills/monthly-report/SKILL.md +0 -50
  137. package/skills/monthly-report/agents/openai.yaml +0 -4
  138. package/skills/narrative-report/SKILL.md +0 -51
  139. package/skills/narrative-report/agents/openai.yaml +0 -4
  140. package/skills/okf-build/SKILL.md +0 -39
  141. package/skills/okf-build/agents/openai.yaml +0 -4
  142. package/skills/okf-validate/SKILL.md +0 -43
  143. package/skills/okf-validate/agents/openai.yaml +0 -4
  144. package/skills/page-opportunities/SKILL.md +0 -31
  145. package/skills/page-opportunities/agents/openai.yaml +0 -4
  146. package/skills/performance/SKILL.md +0 -50
  147. package/skills/performance/agents/openai.yaml +0 -4
  148. package/skills/performance-audit/SKILL.md +0 -31
  149. package/skills/performance-audit/agents/openai.yaml +0 -4
  150. package/skills/pseo-audit/SKILL.md +0 -103
  151. package/skills/pseo-audit/agents/openai.yaml +0 -4
  152. package/skills/query-clusters/SKILL.md +0 -31
  153. package/skills/query-clusters/agents/openai.yaml +0 -4
  154. package/skills/quick-wins/SKILL.md +0 -31
  155. package/skills/quick-wins/agents/openai.yaml +0 -4
  156. package/skills/redirect-trace/SKILL.md +0 -51
  157. package/skills/redirect-trace/agents/openai.yaml +0 -4
  158. package/skills/refresh-priorities/SKILL.md +0 -48
  159. package/skills/refresh-priorities/agents/openai.yaml +0 -4
  160. package/skills/search-performance-overview/SKILL.md +0 -48
  161. package/skills/search-performance-overview/agents/openai.yaml +0 -4
  162. package/skills/second-page/SKILL.md +0 -50
  163. package/skills/second-page/agents/openai.yaml +0 -4
  164. package/skills/segment-impact/SKILL.md +0 -50
  165. package/skills/segment-impact/agents/openai.yaml +0 -4
  166. package/skills/seo-fix-queue/SKILL.md +0 -50
  167. package/skills/seo-fix-queue/agents/openai.yaml +0 -4
  168. package/skills/seo-geo-readiness/SKILL.md +0 -60
  169. package/skills/seo-geo-readiness/agents/openai.yaml +0 -4
  170. package/skills/seo-site-audit/SKILL.md +0 -59
  171. package/skills/seo-site-audit/agents/openai.yaml +0 -4
  172. package/skills/seo-to-ai-query/SKILL.md +0 -31
  173. package/skills/seo-to-ai-query/agents/openai.yaml +0 -4
  174. package/skills/setup-check/SKILL.md +0 -49
  175. package/skills/setup-check/agents/openai.yaml +0 -4
  176. package/skills/site-crawl/SKILL.md +0 -39
  177. package/skills/site-crawl/agents/openai.yaml +0 -4
  178. package/skills/striking-distance/SKILL.md +0 -52
  179. package/skills/striking-distance/agents/openai.yaml +0 -4
  180. package/skills/technical-watch/SKILL.md +0 -49
  181. package/skills/technical-watch/agents/openai.yaml +0 -4
  182. package/skills/top-fixes/SKILL.md +0 -38
  183. package/skills/top-fixes/agents/openai.yaml +0 -4
  184. package/skills/traffic-anomaly/SKILL.md +0 -52
  185. package/skills/traffic-anomaly/agents/openai.yaml +0 -4
  186. package/skills/update-correlation/SKILL.md +0 -51
  187. package/skills/update-correlation/agents/openai.yaml +0 -4
  188. package/skills/update-postmortem/SKILL.md +0 -49
  189. package/skills/update-postmortem/agents/openai.yaml +0 -4
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "seo",
3
- "version": "0.1.0",
4
- "description": "SEO Skills CLI and MCP for finding technical problems, ranking fixes with search data, and running reports locally.",
3
+ "version": "0.2.0",
4
+ "description": "The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and GA4 data.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
7
7
  "author": "Ian Nuttall",
8
- "homepage": "https://seoskills.dev",
8
+ "homepage": "https://seoskill.dev",
9
9
  "repository": {
10
10
  "type": "git",
11
11
  "url": "git+https://github.com/iannuttall/seo.git"
@@ -13,6 +13,7 @@
13
13
  "bugs": {
14
14
  "url": "https://github.com/iannuttall/seo/issues"
15
15
  },
16
+ "funding": "https://github.com/iannuttall/seo",
16
17
  "keywords": [
17
18
  "seo",
18
19
  "search-console",
@@ -41,6 +42,7 @@
41
42
  "files": [
42
43
  "dist",
43
44
  "skills",
45
+ "evals",
44
46
  "PRIVACY.md",
45
47
  "SECURITY.md",
46
48
  "TERMS.md",
package/skills/README.md CHANGED
@@ -1,30 +1,41 @@
1
1
  # Agent skills
2
2
 
3
- These skills teach an agent how to use `seo` without reading the whole repo.
3
+ This package ships one skill: `seo`. It teaches an agent how to use `seo`
4
+ without reading the whole repo.
4
5
 
5
- They work best with the MCP server installed. This command is an interactive
6
- setup flow for a human:
6
+ The skill is a router, not a manual. It explains the discover, describe, run
7
+ flow, names the report ids for common jobs, and states the evidence rules that
8
+ apply to every report. It does not memorise each report. Per-report depth, when
9
+ to use a report, when to avoid it, its schema, the order to read its output,
10
+ what its evidence cannot support, and one verification step, is fetched at
11
+ runtime with `describe`. This keeps the skill small and always in sync with the
12
+ registry.
13
+
14
+ ## Install
15
+
16
+ The skill works best with the MCP server installed. This command is an
17
+ interactive setup flow for a human:
7
18
 
8
19
  ```bash
9
20
  seo mcp install
10
21
  ```
11
22
 
12
- They can also call the CLI directly when MCP tools are not available. The npm
13
- package and repository contain the same skill folders. Install the collection
23
+ The skill also works by calling the CLI directly when MCP tools are not
24
+ available. The npm package and repository contain the same skill. Install it
14
25
  with the standard agent skills installer:
15
26
 
16
27
  ```bash
17
- npx skills add iannuttall/seo --all
28
+ npx skills add iannuttall/seo
18
29
  ```
19
30
 
20
- Use `seo skills list` or `seo skills path <name>` to inspect the copies bundled
21
- with the npm package.
31
+ Use `seo skill list` or `seo skill path seo` to inspect the copy bundled with
32
+ the npm package.
22
33
 
23
- The MCP path is deliberately small: discover ids with `seo_list_reports`, load
24
- one schema with `seo_describe_report`, then execute it with `seo_run_report`.
25
- The skills name the report ids for their workflow.
34
+ ## Discover, describe, run
26
35
 
27
- The same catalog is available without MCP:
36
+ The MCP path is deliberately small: discover ids with `seo_list_reports`, load
37
+ one report's full depth with `seo_describe_report`, then execute it with
38
+ `seo_run_report`. The same catalog is available without MCP:
28
39
 
29
40
  ```bash
30
41
  seo reports list --json
@@ -32,50 +43,26 @@ seo reports describe <report-id> --json
32
43
  seo reports run <report-id> --params '<json>' --json
33
44
  ```
34
45
 
35
- ## Adding a report skill
36
-
37
- Register a structured report once in `packages/mcp/src/report-registry.ts`.
38
- CLI and MCP discovery will then share its id, description, input schema, and
39
- handler. Add the same-name skill only after that contract exists.
40
-
41
- Every report skill must:
42
-
43
- - explain the technical SEO question and why it is useful;
44
- - show `seo_list_reports`, `seo_describe_report`, and `seo_run_report` usage;
45
- - show schema discovery and one valid `seo reports run` CLI example;
46
- - explain the evidence fields, partial-data states, and important caveats;
47
- - turn findings into bounded actions and verification steps; and
48
- - avoid turning estimates, conventions, or samples into search-engine rules.
49
-
50
- Run `pnpm skills:validate` after adding or changing a skill. The validator
51
- checks registry parity, command and tool names, frontmatter, package metadata,
52
- and minimum report guidance depth.
53
-
54
- ## Curated workflow skills
55
-
56
- - `seo-site-audit`: start with the main report, then add bounded technical evidence.
57
- - `seo-geo-readiness`: check AI-search readiness and citation gaps.
58
- - `seo-fix-queue`: turn crawl results into an implementation queue.
59
- - `pseo-audit`: audit repeated URL templates with GSC, crawl, and URL Inspection evidence.
60
- - `index-watch`: monitor exact indexed-state evidence, transitions, failures, and quota-deferred checks.
61
- - `performance`: separate Lighthouse lab diagnostics, CrUX field Core Web Vitals, and unscored fallback evidence.
62
- - `community-intent`: review explicit intent language in retained GSC queries without claiming a page gap.
63
- - `seo-to-ai-query`: create deterministic monitoring-prompt suggestions from retained GSC queries.
64
- - `measure-change`: compare equal finalized GSC windows without turning an incomplete after-period into a directional verdict.
65
-
66
- The `seo` skill routes requests that span several focused workflows.
67
-
68
- ## Report skills
69
-
70
- Every compact MCP report id has a same-name skill. Each skill teaches the
71
- discovery flow and the evidence limits that matter for that report.
72
-
73
- - Setup: `setup-check`.
74
- - Diagnosis: `search-performance-overview`, `segment-impact`, `striking-distance`, `traffic-anomaly`, `update-correlation`.
75
- - Opportunities: `cannibalisation`, `ctr-underperformers`, `decaying-pages`, `internal-links`, `query-clusters`, `quick-wins`.
76
- - AI search: `ai-referrals`, `community-intent`, `content-optimization`, `page-opportunities`, `performance-audit`, `seo-to-ai-query`.
77
- - Crawl: `affected-urls`, `ai-readiness`, `audit-urls`, `compare-crawls`, `site-crawl`, `entity-readiness`, `explain-crawl-issue`, `geo-gaps`, `crawl-report`, `crawl-history`, `crawler-rules`, `llms-txt-audit`, `generate-llms-txt`, `okf-build`, `okf-validate`, `top-fixes`.
78
- - Monitoring: `crawl-diff`, `index-coverage`, `index-coverage-plan`, `index-monitor`, `index-watch`, `link-recovery`, `redirect-trace`.
79
- - Reporting: `audit-page`, `monthly-report`, `pseo-audit`, `narrative-report`, `second-page`.
80
- - Experiments: `measure-change`.
81
- - Workflows: `monthly-action-plan`, `refresh-priorities`, `technical-watch`, `update-postmortem`.
46
+ Always describe a report before its first run. The describe response is the
47
+ per-report manual: its `readOrder`, `doNotClaim` limits, `verify` step, and
48
+ `related` ids come straight from the registry.
49
+
50
+ ## Adding a report
51
+
52
+ Register the report once in `packages/mcp/src/report-registry.ts`, including its
53
+ depth guidance in `packages/mcp/src/report-guidance.ts` and
54
+ `packages/mcp/src/report-depth.ts` (`readOrder`, `doNotClaim`, `verify`,
55
+ `related`). CLI discovery, MCP discovery, and the skill then share its id,
56
+ description, input schema, handler, and depth automatically. No new skill file
57
+ is needed. The router only lists report ids for common jobs; a report earns a
58
+ mention there when it belongs in one of those chains.
59
+
60
+ Run `pnpm skills:validate` after changing the skill or the registry. The
61
+ validator checks the skill frontmatter and word count, that every command and
62
+ report id the skill names resolves, that the MCP tool names are real, and that
63
+ every `evals/*.json` is well formed.
64
+
65
+ ## Evals
66
+
67
+ Behaviour tests for the skill live in the top-level `evals/` directory. See
68
+ [../evals/README.md](../evals/README.md) for the file shape and how to run them.
@@ -1,74 +1,99 @@
1
1
  ---
2
2
  name: seo
3
- description: Route SEO work across the local seo CLI and MCP server. Use when an agent needs to choose between technical SEO, Search Console, GA4, crawl, opportunity, monitoring, and reporting workflows or inspect evidence returned by several reports.
3
+ description: Use and read this skill immediately if the user request is in any way related to SEO or a site's organic search or AI search presence. That includes site audits, rankings, click or traffic changes, indexing problems, crawling, redirects, sitemaps, metadata, structured data, Core Web Vitals, internal links, content opportunities, Search Console or GA4 questions, Google update impact, llms.txt, AI search visibility in ChatGPT, Claude, Perplexity, or Google AI Overviews, and client SEO reporting. Routes to 52 evidence-backed local reports through the SEO CLI and MCP server.
4
4
  ---
5
5
 
6
6
  # seo
7
7
 
8
- Use the `seo` MCP server exposed by the repository or installed package.
8
+ `seo` is a local CLI, MCP server, and report engine. It answers SEO questions
9
+ with evidence from three sources: its own crawl of the site, Google Search
10
+ Console, and GA4. Every report returns structured JSON with the observed
11
+ evidence, derived findings, caveats, and provenance kept separate. Nothing is
12
+ hosted; data stays on the machine.
9
13
 
10
- Reason from MCP `structuredContent`. Treat text or Markdown content as the
11
- display layer. When MCP is unavailable use explicit CLI selectors and `--json`:
14
+ You do not need to memorise reports. Discover them at runtime.
15
+
16
+ ## Discover, describe, run
17
+
18
+ With the MCP server (preferred):
19
+
20
+ 1. `seo_list_reports` returns every report id with a one-line purpose,
21
+ optionally by category.
22
+ 2. `seo_describe_report` with one id returns when to use it, when to avoid it,
23
+ its exact JSON Schema, the order to read its output in, what its evidence
24
+ cannot support, one verification step, and related report ids.
25
+ 3. `seo_run_report` with the id and a bounded `params` object. Read
26
+ `structuredContent`, not the display text.
27
+
28
+ The same catalog exists without MCP:
12
29
 
13
30
  ```bash
14
- seo report --project <project> --json
15
- seo report --site sc-domain:example.com --json
31
+ seo reports list --json
32
+ seo reports describe <report-id> --json
33
+ seo reports run <report-id> --params '<json>' --json
16
34
  ```
17
35
 
18
- Use the default Markdown output from `seo report-narrative` or
19
- `seo monthly-report` only when the user wants a readable report rather than a
20
- machine contract.
21
-
22
- ## MCP flow
23
-
24
- The default MCP server exposes three tools:
25
-
26
- 1. Call `seo_list_reports` to discover compact report ids, optionally by
27
- category.
28
- 2. Call `seo_describe_report` once for the selected id to load its exact JSON
29
- Schema.
30
- 3. Call `seo_run_report` with that id and a bounded `params` object.
31
-
32
- Do not guess parameters or ask for every report schema up front. Reuse a schema
33
- for repeated runs in the same session.
34
-
35
- ## Which report id to use
36
-
37
- - Diagnosis: `search-performance-overview`,
38
- `segment-impact`, `striking-distance`, `traffic-anomaly`, and
39
- `update-correlation`.
40
- - Main follow-ups: `refresh-priorities`, `quick-wins`, `second-page`,
41
- `decaying-pages`, `cannibalisation`, `ctr-underperformers`, and `query-clusters`.
42
- - Page work: `audit-page`, `page-opportunities`, `content-optimization`,
43
- `internal-links`, and `performance-audit`.
44
- - Technical crawling: `site-crawl`, `top-fixes`, `affected-urls`,
45
- `explain-crawl-issue`, `crawl-report`, and `compare-crawls`.
46
- - Indexing and monitoring: `index-coverage`, `index-watch`, `index-monitor`,
47
- `index-coverage-plan`, `crawl-diff`, `redirect-trace`, and `link-recovery`.
48
- - AI-search evidence: `ai-readiness`, `geo-gaps`, `community-intent`,
49
- `seo-to-ai-query`, and `ai-referrals`.
50
- - Reporting and measurement: `narrative-report`, `monthly-report`,
51
- `measure-change`, `pseo-audit`, `update-postmortem`, and
52
- `technical-watch`.
53
- - Local setup health: `setup-check`.
54
-
55
- Use the CLI for project-profile administration and intentionally raw provider
56
- queries. Useful commands include `seo projects list --json`, `seo gsc-query`,
57
- `seo url-inspect`, `seo ga4-properties`, `seo ga4-report`, and `seo updates`.
58
-
59
- ## Rules
60
-
61
- - Treat observations as evidence within the report's methodology and data limits. Do not invent metrics.
62
- - Check `dataStatus`, source completeness, selection counts, warnings, and caveats before summarising a report.
63
- - In diagnosis output, check `summary.updateAttributionStatus` first and treat `summary.updateAttribution` as update-correlation context, not the site's overall diagnosis.
64
- - If `dataStatus` is `partial` or `unavailable`, name the skipped or incomplete evidence before describing findings. Treat capped sources the same way. Never turn unavailable or capped evidence into a zero-result claim.
65
- - Treat quick-win CTR targets and calculated shortfalls as deterministic prioritisation heuristics, not traffic forecasts.
66
- - Quote `principle` and `evidenceRef` when explaining recommendations.
67
- - Do not generate titles, metas, or copy. Keep advice structural and diagnostic.
68
- - If the tool returns no rows, say that clearly instead of padding the answer.
69
- - Remember that grouped GSC query totals can undercount due to anonymised rows.
70
-
71
- ## Refresh behaviour
72
-
73
- - Tool output is cached locally.
74
- - Pass `refresh: true` when the user explicitly wants a fresh fetch.
36
+ Always describe a report before its first run in a session. The describe
37
+ response is the per-report manual: follow its `readOrder`, respect its
38
+ `doNotClaim` limits, and use its `related` ids to decide what to run next.
39
+ Reuse the schema for repeated runs. Do not guess parameters.
40
+
41
+ ## Setup and selection
42
+
43
+ Run the `setup-check` report (or `seo doctor`) if auth state is unknown.
44
+ Saved project profiles are selected with `--project <id>`; list them with
45
+ `seo projects list --json`. Without a profile, pass `--site sc-domain:example.com`
46
+ for Search Console reports or `--url https://example.com` for crawl-only
47
+ reports. Crawl and page audits work with no Google connection at all. Always
48
+ pass `--json`; JSON mode never prompts.
49
+
50
+ ## Common jobs
51
+
52
+ Each job lists report ids in a sensible starting order. Run the first, read
53
+ its evidence, then decide; do not run a whole chain blindly.
54
+
55
+ | Job | Reports |
56
+ |---|---|
57
+ | Page not indexed or missing from Google | `index-coverage`, `index-monitor` (URL Inspection), `audit-page`, `redirect-trace` |
58
+ | Traffic or clicks dropped | `search-performance-overview`, `traffic-anomaly`, `update-correlation`, `segment-impact`, `decaying-pages`, `link-recovery` |
59
+ | Audit a whole site | `report` command (main report), `site-crawl`, `top-fixes`, `ai-search-scorecard` |
60
+ | More clicks from existing pages | `quick-wins`, `ctr-underperformers`, `striking-distance`, `second-page`, `internal-links` |
61
+ | AI search visibility and readiness | `ai-search-scorecard`, `ai-readiness`, `geo-gaps`, `entity-readiness`, `llms-txt-audit`, `ai-referrals` |
62
+ | Plan content from real demand | `query-clusters`, `page-opportunities`, `content-optimization`, `cannibalisation` |
63
+ | Catch regressions over time | `technical-watch`, `crawl-diff`, `index-watch`, `measure-change` after a fix ships |
64
+ | Client-ready reporting | `monthly-report`, `narrative-report`, `monthly-action-plan` |
65
+ | Turn crawl findings into tickets | `top-fixes`, `affected-urls`, `explain-crawl-issue` |
66
+
67
+ A single page complaint usually needs both angles: the index evidence for that
68
+ URL and an `audit-page` pass for content or technical problems on the page
69
+ itself.
70
+
71
+ The main human report is the `seo report` command. It is the right first move
72
+ when the user asks a broad "how is my site doing" question; the focused
73
+ reports above are for specific symptoms.
74
+
75
+ ## Evidence rules
76
+
77
+ - Check `dataStatus`, selection counts, `caveats`, and `warnings` before
78
+ summarising any report. Name skipped or incomplete evidence first.
79
+ - Partial, capped, filtered, or sampled sources never support a zero or an
80
+ all-clear. Grouped Search Console totals undercount because anonymised query
81
+ rows are withheld.
82
+ - Values marked heuristic are prioritisation aids, not forecasts. Never
83
+ promise clicks, rankings, indexing, or AI citations from any report.
84
+ - Quote `principle` and `evidenceRef` when explaining a recommendation, and
85
+ give the user the report's verification step alongside any suggested change.
86
+ - If a report returns no rows, say so plainly.
87
+ - Intentional controls such as `noindex`, canonicals, and robots rules are
88
+ observations until the user confirms they are unintended.
89
+
90
+ ## Beyond the report catalog
91
+
92
+ The CLI also has direct commands for raw provider access and administration:
93
+ `seo gsc-query`, `seo url-inspect`, `seo ga4-report`, `seo updates`,
94
+ `seo crawl`, `seo export`, and `seo projects`. Use `seo help all` to list
95
+ everything. Prefer a registered report when one covers the question, because
96
+ reports carry provenance and caveats that raw queries do not.
97
+
98
+ Report output is cached locally. Pass `refresh: true` (or `--refresh`) only
99
+ when the user explicitly wants a fresh fetch.
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "seo"
3
- short_description: "Route local SEO reports and inspect evidence"
4
- default_prompt: "Use $seo to choose the right local SEO report and explain its evidence."
3
+ short_description: "Use immediately for anything touching SEO, organic search, or AI search: audits, rankings, traffic changes, indexing, crawling, Search Console, GA4, or AI visibility"
4
+ default_prompt: "Use $seo to discover, describe, and run the right local SEO report and explain its evidence."