akili-specs 2.13.1 → 2.15.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.
@@ -49,6 +49,7 @@ Audit for discrepancies, classifying findings under the following categories:
49
49
  * **Technical Constraints Violation:** Architectural layout in the codebase that conflicts with patterns (e.g. testing requirements, security rules, file structuring) documented in `docs/trd/trd.md`.
50
50
  * **Agent Guide Drift:** Modules whose conventions clearly diverge from the root but lack a child `CLAUDE.md`/`AGENTS.md`, child guides missing from the parent's `## Module Guides` index, guide entries pointing at modules that no longer exist, or root-guide structure descriptions that no longer match the codebase.
51
51
  * **Model Registry Drift:** The project's `## Model Routing` registry (root `AGENTS.md`/`CLAUDE.md`) names models the host tool no longer offers, uses dated model pins where a floating alias exists (violating the alias-first rule) without a recorded reason, is missing tiers or the author ≠ auditor note versus the packaged default in `docs/model-routing.md`, or the Step 8E agent wrappers (`.claude/agents/akili-*.md` / OpenCode agent config) declare models that contradict the registry. Report only — never edit the registry or wrappers during the audit.
52
+ * **Model Generation Drift:** Aliases absorb a new model generation silently, so the *registry* can be perfectly current while everything calibrated around it has gone stale. Flag, without editing: (a) a **frontier escalation pin** whose recorded reason predates the current `opus` generation — each generation narrows the gap the pin was bought to close, so it needs re-justification against the alias at `xhigh`/`max`; (b) an **`Updated:` stamp older than the current model generation**, meaning the effort defaults were never swept for it (`docs/model-routing.md` → *Effort dial* → re-baseline rule); and (c) `.agents/*.md` personas missing guardrails the packaged templates have gained since — most importantly the **Delegation Ceiling** in `leader.md` and the both-directions **Scope Discipline** in `implementer.md`, which counter over-delegation and scope expansion in current-generation models.
52
53
 
53
54
  ### Step 3: Write Drift Report
54
55
 
@@ -373,8 +373,8 @@ If the packaged templates are available, prefer copying them as the seed; otherw
373
373
 
374
374
  **Required content per persona:**
375
375
 
376
- - **`leader.md`** — orchestration sequence, rework loop with 3-attempt ceiling, structured FAIL handoff to the next Implementer spawn, `execution.md` audit-trail format, `tasks.md` status transitions, AKILI commit standard, Pivot Protocol escalation.
377
- - **`implementer.md`** — strict context alignment to constitution + spec, incremental focus (no scope creep), aesthetics and design-token compliance from `docs/ux-ui/design.md`, verification rigor (must run the task's verification command before reporting), structured completion report.
376
+ - **`leader.md`** — orchestration sequence, rework loop with 3-attempt ceiling, structured FAIL handoff to the next Implementer spawn, `execution.md` audit-trail format, `tasks.md` status transitions, AKILI commit standard, Pivot Protocol escalation, the **Delegation Thresholds** floor *and* the **Delegation Ceiling** (one subagent beats several for one task; commit to the delegation; brief precisely once; bounded fan-out; never delegate your own verification — with the explicit carve-out that the independent Reviewer is `author ≠ auditor`, not self-verification, and must never be collapsed).
377
+ - **`implementer.md`** — strict context alignment to constitution + spec, **scope discipline in both directions** (no scope creep, but also no silent narrowing — finish the whole task and report completion only when it is actually complete, listing what is missing and why when it is not), aesthetics and design-token compliance from `docs/ux-ui/design.md`, verification rigor (must run the task's verification command before reporting), structured completion report with an optional `Not Done / Assumptions` field.
378
378
  - **`reviewer.md`** — read-only role, audit checklist (requirement conformance, design-token compliance, technical compliance, stability), structured PASS/FAIL output where every FAIL item lists *Discovered Issue*, *Violated Rule*, and *Remediation Suggestion*.
379
379
  - **`tester.md`** — single-suite scope (backend unit, frontend unit, integration, or E2E), thin per-suite context, explicit coverage of negative constraints (`BUT it must NOT`) and strict validations (`AND IT MUST`), bounded self-correction inner loop (max 3), distinction between a test defect (fix the test) and a product defect (keep the test red, report `PRODUCT_BUG`), and structured `PASS`/`FAIL`/`PRODUCT_BUG` output with a per-scenario coverage slice. Author ≠ tester: prefer a different model than the Implementer.
380
380
 
@@ -431,9 +431,15 @@ project guides so the project does not depend on the package's `docs/` after ins
431
431
  table (trivial/mechanical → `low`; standard scope → `medium`; complex — algorithm, concurrency,
432
432
  security, ambiguity → `xhigh`; correctness-critical → `max`); (b) default effort by role (T1
433
433
  propose/specify/Leader `high`; T2 Implementer/Tester `medium`, flex by task; T3 Reviewer `high`;
434
- T5 archive `low`); (c) the rework rule (*bump effort one level on every retry*); and (d) the
435
- tier↔effort rule (*never `max` a cheaper tier — escalate the tier instead*). The
436
- `/akili-execute` and `/akili-test` Leaders read this subsection to set each worker's effort.
434
+ T5 archive `low`); (c) the rework rule (*bump effort one level on every retry*); (d) the
435
+ tier↔effort rule (*never `max` a cheaper tier — escalate the tier instead*); (e) the
436
+ **re-baseline rule** (*effort defaults are per-generation and must be swept `medium`/`high`/`xhigh`
437
+ on a real spec — whenever the underlying model generation changes; the tier mapping survives model
438
+ churn, these defaults do not, and a task that arrives under-specified — a `[~]` resume or a
439
+ post-Pivot retry — starts one level higher*); and (f) **effort is not a verbosity dial** (*lowering
440
+ effort does not reliably shorten output — fix long reports in the brief via `caveman` /
441
+ `cognitive-doc-design`, never by dropping effort*). The `/akili-execute` and `/akili-test` Leaders
442
+ read this subsection to set each worker's effort.
437
443
 
438
444
  **Mode-specific policy (mirror Step 8B):**
439
445
 
@@ -448,7 +454,12 @@ project guides so the project does not depend on the package's `docs/` after ins
448
454
  the user decides whether to refresh them.
449
455
 
450
456
  Confirm the user's available models before writing concrete identifiers: which tier they run in
451
- Claude Code (and their plan's rate limits) and which models their OpenCode roster exposes.
457
+ Claude Code (and their plan's rate limits) and which models their OpenCode roster exposes. Note that
458
+ **rate limits are per-generation, not per-family** — a new top-tier generation draws on its own quota
459
+ rather than inheriting the previous one's pool, so moving T1/T3 onto it neither frees nor inherits
460
+ headroom. If the user carries a **frontier escalation pin** (Step 8C item 4), flag it for
461
+ re-justification whenever the `opus` alias advances a generation: each generation narrows the gap the
462
+ pin was bought to close, so try the alias at `xhigh`/`max` before renewing the pin.
452
463
 
453
464
  ---
454
465
 
@@ -59,6 +59,8 @@ The Leader does not write production code itself unless the rework loop is exhau
59
59
 
60
60
  **Delegation Thresholds:** the Leader's inline-vs-delegate boundary is quantified in `.agents/leader.md` → *Delegation Thresholds* (inline only for 1-file checks and puntual verifications; 4+ full-file reads → scout subagent; 2+ non-trivial file writes → Implementer; CodeGraph lookups don't count toward the read threshold). Apply it to your own research inside this command — e.g. investigating a Reviewer FAIL across many files is scout work, not Leader-inline work.
61
61
 
62
+ **Delegation Ceiling:** that table is the floor; `.agents/leader.md` → *Delegation Ceiling* is the cap, and on current-generation models it is the one that binds. One subagent beats several for a single task, parallelism is bounded by the count of genuinely independent tasks in `tasks.md`, you commit to a delegation rather than re-deriving its result, and you never spawn a subagent to verify your own work. **The Implementer → Reviewer gate is exempt** — it is `author ≠ auditor` independence, not self-verification, and is never collapsed for efficiency.
63
+
62
64
  **Communication economy:** load the `caveman` skill and apply its Scope Contract to all transient output in this command — inter-agent messages (Leader ↔ Implementer/Reviewer briefs, reports, feedback relays) at `full`, user-visible progress lines at `lite`. It never applies to `execution.md` audit entries, PR descriptions, HITL summaries, Pivot blockers, or verbatim evidence (Reviewer FAIL reports pass unchanged — the Structured Feedback rule wins).
63
65
 
64
66
  ---
@@ -137,6 +137,7 @@ Produce `docs/specs/$SPEC_PATH/seo-setup-report.md` documenting:
137
137
  - Record every finding with its structure: **Issue / Impact / Evidence / Fix / Priority**.
138
138
  - Respect its schema-detection limitation: static fetches (`curl`, `web_fetch`) cannot see JS-injected JSON-LD. Validate structured data via `url_inspection_inspect.richResultsResult` or a rendering tool, never via static HTML alone.
139
139
  - Apply its International SEO checklist (hreflang reciprocity, self-reference, `x-default`, cross-locale canonicals, locale sitemaps) whenever the site serves multiple languages or regions.
140
+ - Apply its **GEO** section (Step 2.8) for generative-engine visibility. GEO is a layer on top of ranking, never a substitute — run the priority order first. When citing a magnitude, carry the skill's source tier: the KDD 2024 figures are peer-reviewed; AI Overview and crawler-behaviour figures are industry analyses and must not be presented as measured fact.
140
141
 
141
142
  Use `systematic-debugging` when results are inconsistent with site reality.
142
143
 
@@ -210,6 +211,24 @@ For the pages sampled in Step 2.5, apply the on-page checklist from the `seo-aud
210
211
 
211
212
  Record each failure as a finding using the skill's Issue / Impact / Evidence / Fix / Priority structure.
212
213
 
214
+ #### Step 2.8 — GEO audit (generative-engine visibility)
215
+
216
+ For the same sampled pages, apply the `seo-audit` skill's **GEO** section (evidence and sources in its
217
+ `references/geo.md`). Highest-yield checks first — the measured gains come from evidence, not markup:
218
+
219
+ - **Evidence density:** claims carry verifiable statistics with named sources; credible quotations where the topic supports them; outbound citations to reliable sources.
220
+ - **Self-containment test:** for each passage the page wants cited, confirm it still makes sense lifted out with no surrounding context. Flag anaphora that depends on the previous paragraph ("this approach", "as mentioned above"). No on-page check above catches this.
221
+ - **Definitional sentences:** each term the page wants to own has a *"X is a Y that does Z."* sentence at first use.
222
+ - **Entity resolution:** the page states in one sentence what the subject is and who made it; `Person`/`Organization` node with `sameAs`.
223
+ - **Freshness:** `dateModified` exposed and truthful; no stale visible version numbers or dates.
224
+ - **AI crawler directives:** `robots.txt` separates training agents (`GPTBot`, `ClaudeBot`, `Google-Extended`) from retrieval agents (`OAI-SearchBot`, `Claude-SearchBot`, `PerplexityBot`). A blanket AI-bot block removes the site from AI answers too — confirm the owner's intent before calling either state correct.
225
+ - **Unverifiable claims:** flag numeric or superlative claims in `<title>`, meta description, or JSON-LD that no source supports.
226
+
227
+ **Do not raise:** a missing `llms.txt` (no measured visibility effect — see the skill), or any finding
228
+ that asserts engagement metrics such as bounce rate affect rankings.
229
+
230
+ Record each failure in the same Issue / Impact / Evidence / Fix / Priority format.
231
+
213
232
  ---
214
233
 
215
234
  ### Phase 3: Write `seo-audit-report.md`
@@ -227,8 +246,9 @@ Required sections:
227
246
  7. Render Audit
228
247
  8. Internal Linking Findings
229
248
  9. On-Page SEO Findings — Step 2.7 results, each in the `seo-audit` Issue / Impact / Evidence / Fix / Priority format.
230
- 10. Remediation Planprioritized (High / Medium / Low) actionable items, each scoped enough that an implementer can execute it without further discovery.
231
- 11. Re-audit Schedulewhen to run `/akili-seo <domain>` again.
249
+ 10. GEO FindingsStep 2.8 results, same format. State the source tier next to any magnitude cited, and keep GEO items ranked below blocking classic-SEO fixes in the remediation plan (GEO layers on ranking, it does not substitute for it).
250
+ 11. Remediation Planprioritized (High / Medium / Low) actionable items, each scoped enough that an implementer can execute it without further discovery.
251
+ 12. Re-audit Schedule — when to run `/akili-seo <domain>` again.
232
252
 
233
253
  The report title must be `# SEO Audit Report — <domain>`.
234
254
 
@@ -268,6 +288,8 @@ After the command completes, verify:
268
288
  - [ ] Every URL in the sitemap is either audited or explicitly excluded with a reason.
269
289
  - [ ] Every structured-data warning is reproduced with the exact bad value and the exact fix.
270
290
  - [ ] On-page findings from Step 2.7 use the `seo-audit` Issue / Impact / Evidence / Fix / Priority format.
291
+ - [ ] GEO findings from Step 2.8 are present, carry their source tier where a magnitude is cited, and rank below blocking classic-SEO fixes in the remediation plan.
292
+ - [ ] No finding claims engagement metrics (bounce rate, time on page) affect rankings, and none flags a missing `llms.txt`.
271
293
  - [ ] The implementation prompt is self-contained and would not require this conversation to execute.
272
294
 
273
295
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: seo-audit
3
- description: When the user wants to audit, review, or diagnose SEO issues on their site. Also use when the user mentions "SEO audit," "technical SEO," "why am I not ranking," "SEO issues," "on-page SEO," "meta tags review," "SEO health check," "my traffic dropped," "lost rankings," "not showing up in Google," "site isn't ranking," "Google update hit me," "page speed," "core web vitals," "crawl errors," or "indexing issues." Use this even if the user just says something vague like "my SEO is bad" or "help with SEO" — start with an audit. In AKILI-SPECS projects, /akili-seo loads this skill in its audit phase.
3
+ description: When the user wants to audit, review, or diagnose SEO issues on their site. Also use when the user mentions "SEO audit," "technical SEO," "why am I not ranking," "SEO issues," "on-page SEO," "meta tags review," "SEO health check," "my traffic dropped," "lost rankings," "not showing up in Google," "site isn't ranking," "Google update hit me," "page speed," "core web vitals," "crawl errors," or "indexing issues." Also covers generative-engine visibility (GEO/AEO): "AI Overviews," "AI search," "not showing up in ChatGPT," "get cited by AI," "GEO," "answer engine optimization," "llms.txt," "AI crawlers," "GPTBot," or "ClaudeBot." Use this even if the user just says something vague like "my SEO is bad" or "help with SEO" — start with an audit. In AKILI-SPECS projects, /akili-seo loads this skill in its audit phase.
4
4
  license: MIT
5
5
  metadata:
6
6
  author: Corey Haines (coreyhaines31)
@@ -8,7 +8,7 @@ metadata:
8
8
  adapted-by: "Juan Carlos Cadavid — jcadavid.com"
9
9
  adapted-for: "AKILI-SPECS"
10
10
  binding: core
11
- version: 2.0.0
11
+ version: 2.1.0
12
12
  ---
13
13
 
14
14
  # SEO Audit
@@ -61,6 +61,11 @@ Reporting "no schema found" based solely on `web_fetch` or `curl` leads to false
61
61
  4. **Content Quality** (does it deserve to rank?)
62
62
  5. **Authority & Links** (does it have credibility?)
63
63
 
64
+ **GEO is a layer, not a sixth priority.** Generative-engine visibility (AI Overviews, ChatGPT,
65
+ Perplexity) is applied *on top of* pages that already rank or can — roughly three quarters of AI
66
+ Overview citations come from pages already in the top 10. Never trade a fix from the list above for a
67
+ GEO fix. Run the priority order first, then apply the [GEO section](#generative-engine-optimization-geo).
68
+
64
69
  ---
65
70
 
66
71
  ## Technical SEO Audit
@@ -71,6 +76,13 @@ Reporting "no schema found" based solely on `web_fetch` or `curl` leads to false
71
76
  - Check for unintentional blocks
72
77
  - Verify important pages allowed
73
78
  - Check sitemap reference
79
+ - **`Disallow` is not `noindex`.** A disallowed URL can still be indexed (from external links) and will show as "Indexed, though blocked by robots.txt". To remove a page from the index you must let Google crawl it and serve `noindex` — blocking it prevents Google from ever seeing the directive. A `noindex` line inside `robots.txt` is unsupported and ignored.
80
+
81
+ **AI crawler directives** (see [GEO reference](references/geo.md) for the full agent table)
82
+ - Distinguish **training** agents (`GPTBot`, `ClaudeBot`, `Google-Extended`) from **retrieval** agents (`OAI-SearchBot`, `Claude-SearchBot`, `PerplexityBot`) and user-triggered fetchers (`ChatGPT-User`, `Claude-User`, `Perplexity-User`)
83
+ - **High-impact finding:** a blanket AI-bot block removes the site from AI answers as well as from training corpora. Confirm the client's intent before treating either state as correct
84
+ - `Google-Extended` is a robots.txt token only — it never appears in logs, and blocking it does not affect `Googlebot`, Search, or AI Overviews
85
+ - Where the requirement is genuine prevention rather than preference, note that robots.txt is advisory and escalate to WAF/bot management
74
86
 
75
87
  **XML Sitemap**
76
88
  - Exists and accessible
@@ -338,6 +350,30 @@ Three equivalent placement methods: HTML `<link>` in `<head>`, HTTP `Link` heade
338
350
  - No keyword cannibalization
339
351
  - Logical topical clusters
340
352
 
353
+ ### Structured Data
354
+
355
+ Read the **Schema Markup Detection Limitation** above before auditing this — a static fetch cannot
356
+ see JS-injected JSON-LD, and reporting "no schema found" from `curl` output is a false finding.
357
+
358
+ **Check for:**
359
+ - Correct type for the page's purpose (`Article`/`TechArticle`, `Product`, `FAQPage`, `HowTo`, `BreadcrumbList`, `Organization`, `Person`, `SoftwareApplication`, `LocalBusiness`)
360
+ - Validates without errors in the Rich Results Test
361
+ - Markup matches **visible** page content — invisible or contradictory markup is a spam-policy violation, not an optimization
362
+ - `dateModified` present and truthful on content that changes
363
+ - Entity nodes (`Organization` / `Person`) carry `sameAs` links to authoritative profiles
364
+ - `@id` used consistently so nodes can reference each other instead of being duplicated
365
+ - One coherent graph per page rather than several disconnected islands
366
+
367
+ **Common issues:**
368
+ - Required properties missing, so the type is ineligible for rich results
369
+ - `FAQPage` markup on content that is not a genuine Q&A
370
+ - Schema describing content the user cannot see
371
+ - Stale `dateModified` auto-set to build time on unchanged pages
372
+ - Duplicate `Organization` nodes on every page with no shared `@id`
373
+
374
+ Structured data also has a measurable association with citation in generative answers — see the
375
+ [GEO section](#generative-engine-optimization-geo).
376
+
341
377
  ---
342
378
 
343
379
  ## Content Quality Assessment
@@ -373,12 +409,86 @@ Three equivalent placement methods: HTML `<link>` in `<head>`, HTTP `Link` heade
373
409
  - Better than top-ranking competitors
374
410
  - Updated and current
375
411
 
376
- ### User Engagement Signals
412
+ ### User Engagement Signals — diagnostic only, not ranking factors
413
+
414
+ **Google does not use analytics engagement metrics as ranking factors.** John Mueller: *"We don't use
415
+ bounce rate in search rankings."* Gary Illyes: *"we don't use analytics/bounce rate in search
416
+ ranking."* Google has denied this for roughly a decade.
417
+
418
+ Never write a finding that says "improve bounce rate to improve rankings" — it is a causal claim
419
+ Google has explicitly denied, and it damages the credibility of the correct findings next to it.
420
+
421
+ Use these metrics the other way round: as **diagnostics that localize a content problem**, whose fix
422
+ is the content itself.
423
+
424
+ | Metric | Read it as |
425
+ |---|---|
426
+ | High exit rate on a ranking page | Possible intent mismatch — the page ranks for a query it does not answer |
427
+ | Very low time on page for long-form content | Content may be unscannable, or the answer is buried |
428
+ | Pages per session | Internal linking and topical-cluster coverage signal |
429
+ | Return visits | Brand and content-quality signal (correlates with, does not cause, ranking) |
430
+
431
+ - Sources and exact quotes: [SEJ: Is bounce rate a Google ranking factor?](https://www.searchenginejournal.com/ranking-factors/bounce-rate/)
432
+
433
+ ---
434
+
435
+ ## Generative Engine Optimization (GEO)
436
+
437
+ Visibility inside AI-generated answers — Google AI Overviews / AI Mode, ChatGPT, Claude, Perplexity —
438
+ rather than in a ranked list of links. See the [GEO reference](references/geo.md) for the measured
439
+ evidence, source tiers, and the full AI-crawler agent table.
440
+
441
+ **GEO layers on top of ranking; it does not replace it.** Roughly three quarters of AI Overview
442
+ citations come from pages already in the top 10. Audit the priority order first.
443
+
444
+ ### What measurably works
445
+
446
+ Peer-reviewed measurement (GEO-bench, KDD 2024: ~10,000 queries across nine datasets) found the
447
+ largest visibility gains come from **evidence, not markup**:
448
+
449
+ | Finding to raise | Measured effect |
450
+ |---|---|
451
+ | Claims lack **verifiable statistics** with named sources | ~30–40% gain when added |
452
+ | No **credible quotations** where the topic supports them | ~30–40% |
453
+ | No **outbound citations** to reliable sources | ~30–40% |
454
+ | Poor fluency / readability | ~15–30% |
455
+ | Keyword stuffing present | Negligible or **negative** — treat as a defect, not a tactic |
456
+
457
+ Gains are largest for content that is visible but not dominant (up to +115.1% at position 5), which
458
+ is most audit subjects.
459
+
460
+ ### The self-containment test
461
+
462
+ Generative engines extract **passages**, not pages. For each passage the page wants cited, ask:
463
+ *does this paragraph still make sense lifted out with no surrounding context?*
464
+
465
+ Anaphora that depends on the previous paragraph ("this approach", "as mentioned above", "the former")
466
+ breaks extraction. This is the most common GEO defect on otherwise well-optimized pages, and **no
467
+ classic on-page check catches it**.
468
+
469
+ Also require: a **definitional sentence** (*"X is a Y that does Z."*) at first use of every term the
470
+ page wants to own, and a Q&A block with the question as the heading and the direct answer in the
471
+ first sentence.
472
+
473
+ ### Checks
474
+
475
+ - [ ] Verifiable statistics, quotations, and outbound citations present
476
+ - [ ] Target passages pass the self-containment test
477
+ - [ ] Definitional sentence at first use of each ownable term
478
+ - [ ] Entity resolvable in one sentence (what it is, who made it); `Person`/`Organization` + `sameAs`
479
+ - [ ] `dateModified` exposed; no stale visible version numbers or dates (fresh content is cited far more often)
480
+ - [ ] JSON-LD present and valid (see Structured Data above)
481
+ - [ ] robots.txt separates training agents from retrieval agents, matching the client's stated intent
482
+ - [ ] No unverifiable numeric or superlative claims in `<title>`, meta description, or JSON-LD
483
+
484
+ ### Do not raise these
377
485
 
378
- - Time on page
379
- - Bounce rate in context
380
- - Pages per session
381
- - Return visits
486
+ - **Missing `llms.txt`.** Adoption is ~8.7% of the top 1,000 domains, ~40% of existing files are
487
+ empty plugin stubs, no major AI crawler has committed to consuming it, crawler logs show the
488
+ retrieval agents skip it, and in one citation model removing the variable *improved* accuracy. It
489
+ has a legitimate use as business-to-agent context for IDE agents and MCP servers — recommend it on
490
+ developer-experience grounds or not at all, never as a visibility tactic.
491
+ - **"Improve bounce rate to rank better."** See User Engagement Signals above.
382
492
 
383
493
  ---
384
494
 
@@ -459,6 +569,7 @@ Same format as above
459
569
 
460
570
  - [AI Writing Detection](references/ai-writing-detection.md): Common AI writing patterns to avoid (em dashes, overused phrases, filler words)
461
571
  - [International SEO](references/international-seo.md): Evidence and sources for hreflang, canonical + i18n, sitemaps, URL structure, and content quality across locales
572
+ - [GEO](references/geo.md): Evidence and sources for generative-engine visibility — the KDD 2024 measurement of what works, passage-level extraction, freshness, structured-data correlation, the AI-crawler agent table (training vs retrieval), and why `llms.txt` is not a visibility tactic
462
573
 
463
574
  ---
464
575
 
@@ -503,4 +614,5 @@ Adaptation rules:
503
614
 
504
615
  - Findings land in the AKILI report artifacts (`/akili-seo` output), using the Issue / Impact / Evidence / Fix / Priority shape.
505
616
  - Fixes that exceed the trivial gate are routed through `/akili-propose` — never applied silently during the audit.
506
- - Sibling skills mentioned by upstream versions of this skill (programmatic-seo, schema, ai-seo, cro, analytics) are **not packaged** with AKILI-SPECS; when a finding needs them, note the gap in the report instead of loading them.
617
+ - GEO findings use the same Issue / Impact / Evidence / Fix / Priority shape. Label the source tier when citing a magnitude: the KDD 2024 figures are peer-reviewed, the AI Overview and crawler-behaviour figures are industry analyses. Never present an `[INDUSTRY]` number to a client as measured fact.
618
+ - Sibling skills mentioned by upstream versions of this skill (programmatic-seo, cro, analytics) are **not packaged** with AKILI-SPECS; when a finding needs them, note the gap in the report instead of loading them. The upstream `schema` and `ai-seo` gaps are now covered in-skill by the **Structured Data** and **GEO** sections.
@@ -123,12 +123,27 @@
123
123
  {
124
124
  "id": 8,
125
125
  "prompt": "I want to add FAQ schema to my product pages. Can you help me set that up?",
126
- "expected_output": "Should recognize this is a schema markup implementation task, not an SEO audit. Should defer to or cross-reference the schema skill, which specifically handles structured data implementation including FAQ schema. May briefly mention that FAQ schema can enable rich results, but should make clear that schema is the right skill for implementation.",
126
+ "expected_output": "Should recognize this is a structured-data implementation task, not a full SEO audit, and apply the Structured Data section directly (AKILI-SPECS does not package a separate schema skill). Should require that FAQPage markup describe genuine, visible Q&A content on the page, and warn that markup not matching visible content is a spam-policy violation rather than an optimization. Should note the detection limitation for verification (Rich Results Test or a rendering tool, never curl/web_fetch). May mention that FAQ content is also the densest citable surface for generative engines.",
127
127
  "assertions": [
128
- "Recognizes this as schema markup implementation",
129
- "References or defers to schema skill",
130
- "Does not attempt a full SEO audit",
131
- "May briefly mention FAQ schema benefits"
128
+ "Recognizes this as structured-data implementation",
129
+ "Applies the Structured Data section rather than deferring to an unpackaged schema skill",
130
+ "Requires markup to match visible page content",
131
+ "Notes the JS-injection detection limitation for verification",
132
+ "Does not attempt a full SEO audit"
133
+ ],
134
+ "files": []
135
+ },
136
+ {
137
+ "id": 9,
138
+ "prompt": "We rank on page one for our main keywords but we never show up in Google AI Overviews or ChatGPT. What should we fix?",
139
+ "expected_output": "Should apply the GEO section. Should lead with the evidence-density findings, which carry the largest measured gains (verifiable statistics with named sources, credible quotations, outbound citations to reliable sources), and cite the KDD 2024 GEO study as the source with its magnitudes labelled as peer-reviewed. Should apply the self-containment test to target passages and flag anaphora that depends on surrounding context. Should check definitional sentences, entity resolution, freshness / dateModified, and structured data. Should audit robots.txt for a blanket AI-bot block that also excludes the retrieval agents (OAI-SearchBot, Claude-SearchBot, PerplexityBot) as distinct from the training agents. Should NOT recommend creating llms.txt as a visibility tactic. Should NOT claim engagement metrics affect rankings. Should note GEO layers on ranking rather than replacing it.",
140
+ "assertions": [
141
+ "Prioritizes evidence density (statistics, quotations, citations) as the highest-yield fix",
142
+ "Applies the self-containment test to passages",
143
+ "Distinguishes AI training agents from retrieval agents in robots.txt",
144
+ "Does not recommend llms.txt as a visibility tactic",
145
+ "Labels industry figures separately from peer-reviewed figures",
146
+ "States that GEO layers on top of ranking"
132
147
  ],
133
148
  "files": []
134
149
  }
@@ -0,0 +1,203 @@
1
+ # Generative Engine Optimization (GEO): Evidence & Sources
2
+
3
+ Visibility inside AI-generated answers (Google AI Overviews / AI Mode, ChatGPT, Claude, Perplexity)
4
+ rather than in a ranked list of links.
5
+
6
+ **Source tiers used below.** `[PRIMARY]` = peer-reviewed research or first-party vendor
7
+ documentation. `[INDUSTRY]` = vendor or agency analysis of observed data; directionally useful,
8
+ methodology usually undisclosed, treat magnitudes as indicative not exact. Do not present
9
+ `[INDUSTRY]` figures to a client as measured fact.
10
+
11
+ ---
12
+
13
+ ## GEO is not a replacement for SEO
14
+
15
+ `[INDUSTRY]` 76% of Google AI Overview citations come from pages already ranking in the top 10 —
16
+ classic ranking is the qualifying condition, not an alternative to it. A meaningful long tail exists
17
+ (46.5% of cited URLs rank outside the top 50), so ranking is strongly predictive but not required.
18
+
19
+ **Audit consequence:** never trade a classic SEO fix for a GEO fix. Run the standard audit priority
20
+ order first; GEO is an additional layer applied to pages that already rank or can.
21
+
22
+ - [CXL: Where Google AI Overviews cite from — 100-page study](https://cxl.com/blog/google-ai-overview-citation-sources/)
23
+
24
+ ---
25
+
26
+ ## What measurably improves generative visibility
27
+
28
+ `[PRIMARY]` The GEO study (Aggarwal, Murahari, Rajpurohit, Kalyan, Narasimhan, Deshpande — KDD
29
+ 2024) built GEO-bench: ~10,000 queries across nine datasets, against a two-stage pipeline (Google
30
+ Search retrieves top-5 sources, then an LLM synthesizes a cited answer). It tested nine content
31
+ modifications and measured visibility change.
32
+
33
+ | Modification | Measured effect |
34
+ |---|---|
35
+ | Adding **verifiable statistics** | ~30–40% gain (position-adjusted word count) |
36
+ | Adding **credible quotations** | ~30–40% gain |
37
+ | **Citing reliable sources** | ~30–40% gain |
38
+ | Improving **fluency / readability** | ~15–30% gain |
39
+ | **Keyword stuffing** | negligible or **negative** |
40
+
41
+ Aggregate reported improvement across successful methods: **22–41%**.
42
+
43
+ **The Equalizer Effect.** `[PRIMARY]` Gains are largest for lower-ranked sources — up to **+115.1%**
44
+ visibility for content at position 5. GEO disproportionately benefits sites that are visible but not
45
+ dominant, which is precisely the audit population that most needs it.
46
+
47
+ **Audit consequence:** the three highest-yield GEO findings are all citation-and-evidence findings,
48
+ not markup findings. A page making unsourced claims is a GEO defect even when its technical SEO is
49
+ clean.
50
+
51
+ - [arXiv: GEO — Generative Engine Optimization (2311.09735)](https://arxiv.org/pdf/2311.09735)
52
+ - [dblp: KDD 2024 record](https://dblp.dagstuhl.de/rec/conf/kdd/AggarwalMRKND24.html)
53
+ - [Princeton: publication record](https://collaborate.princeton.edu/en/publications/geo-generative-engine-optimization/)
54
+ - [Blck Alpaca: methodology and critique of the Princeton GEO study](https://blckalpaca.at/en/knowledge-base/seo-geo/geo-generative-engine-optimization/the-princeton-geo-study-methodology-results-and-critique)
55
+
56
+ ---
57
+
58
+ ## Extraction happens at passage level, not page level
59
+
60
+ `[INDUSTRY]` Generative engines lift **short, self-contained passages**. Paragraphs that answer one
61
+ specific question are far more likely to be extracted than long blocks where the answer is diluted
62
+ across sentences. Content types cited most: direct answers to specific questions, comparison tables,
63
+ statistics attributed to named sources, and step-by-step instructions.
64
+
65
+ **Audit consequence — the self-containment test.** For each target passage, ask: *does this
66
+ paragraph still make sense lifted out of the page with no surrounding context?* Anaphora that
67
+ depends on the previous paragraph ("this approach", "as mentioned above", "the former") breaks
68
+ extraction. This is the single most common GEO defect on otherwise well-optimized pages, and it is
69
+ invisible to every classic on-page check.
70
+
71
+ **Definitional-sentence pattern.** For each term the page wants to own, include one sentence of the
72
+ form *"X is a Y that does Z."* at first use. That sentence is what gets quoted verbatim.
73
+
74
+ - [Contently: how to get cited in Google AI Overviews (2026)](https://contently.com/2026/02/25/how-to-get-cited-google-ai-overviews/)
75
+ - [CXL: Where Google AI Overviews cite from](https://cxl.com/blog/google-ai-overview-citation-sources/)
76
+
77
+ ---
78
+
79
+ ## Freshness is weighted heavily
80
+
81
+ `[INDUSTRY]` Content under three months old is reported as ~3x more likely to be cited in AI
82
+ Overviews.
83
+
84
+ **Audit consequence:** stale version numbers, undated articles, and missing `dateModified` are GEO
85
+ findings, not just hygiene. For tooling and documentation pages specifically, a visible version
86
+ number that lags the shipped release is a direct credibility signal against the page. Prefer reading
87
+ such values from a live source at build time over hardcoding them.
88
+
89
+ - [Heroic Rankings: Google AI Overview statistics 2026](https://heroicrankings.com/seo/managed/google-ai-overview-statistics-2026/)
90
+
91
+ ---
92
+
93
+ ## Structured data correlates with citation
94
+
95
+ `[INDUSTRY]` Reported: 65% of pages cited by Google AI Mode carry structured data markup; 71% of
96
+ pages cited by ChatGPT do. Figures span all schema types (`Article`, `Organization`, `Product`,
97
+ `Review`, `FAQPage`, `HowTo`).
98
+
99
+ **Read this as correlation, not proven causation** — pages with schema also tend to be better
100
+ maintained overall. It is still a cheap, low-risk intervention with a plausible mechanism
101
+ (machine-readable facts survive extraction better than prose).
102
+
103
+ Highest-value types for GEO:
104
+
105
+ | Type | Use for |
106
+ |---|---|
107
+ | `FAQPage` | Q&A blocks — the densest citable surface on most pages |
108
+ | `HowTo` | Step-by-step procedures |
109
+ | `TechArticle` / `Article` | Carries `dateModified`, feeding the freshness signal |
110
+ | `SoftwareApplication` | Tools and packages — carries `softwareVersion` |
111
+ | `Person` / `Organization` with `sameAs` | Entity resolution and author authority |
112
+
113
+ **Entity disambiguation.** State plainly, in one sentence, what the subject *is* and who made it.
114
+ Ambiguous brand names must be resolvable without inference. Bind the page to a `Person` or
115
+ `Organization` node with `sameAs` links to authoritative profiles.
116
+
117
+ - [Contently: 2026 AI Overview tactics](https://contently.com/2026/02/25/how-to-get-cited-google-ai-overviews/)
118
+ - [Digital Applied: content strategy for AI Overviews, post-I/O 2026](https://www.digitalapplied.com/blog/content-strategy-ai-overviews-post-io-guide-2026)
119
+
120
+ ---
121
+
122
+ ## AI crawler access control
123
+
124
+ `[PRIMARY]` The agents split by **purpose**, and that split is the whole point of auditing them:
125
+
126
+ | Vendor | Training | Search / retrieval | User-triggered |
127
+ |---|---|---|---|
128
+ | OpenAI | `GPTBot` | `OAI-SearchBot` | `ChatGPT-User` |
129
+ | Anthropic | `ClaudeBot` | `Claude-SearchBot` | `Claude-User` |
130
+ | Perplexity | — | `PerplexityBot` | `Perplexity-User` |
131
+ | Google | `Google-Extended` | (Googlebot) | — |
132
+
133
+ **The consequential audit finding:** a site that blanket-blocks AI bots to avoid training also
134
+ blocks the retrieval agents, and therefore removes itself from AI answers entirely. If the goal is
135
+ visibility without feeding training, allow the search and user agents and disallow only the training
136
+ agents.
137
+
138
+ **`Google-Extended` is a robots.txt token, not a user agent.** It never appears in server logs.
139
+ `Disallow: /` under `Google-Extended` opts out of Gemini training while leaving `Googlebot` — and
140
+ therefore Search and AI Overviews — unaffected. Auditing for it in logs will always produce a false
141
+ negative.
142
+
143
+ **robots.txt is a request, not enforcement.** `[INDUSTRY]` Cloudflare reported (2025-08-04)
144
+ observing Perplexity using undeclared crawlers that rotate user-agent, IP, and ASN to bypass
145
+ no-crawl directives. When a client's requirement is actually *prevention* rather than *preference*,
146
+ robots.txt is the wrong control — escalate to WAF/bot-management, and say so in the finding.
147
+
148
+ - [Anagram: AI crawlers explained — GPTBot, ClaudeBot, PerplexityBot (2026)](https://www.anagram.ai/blog/ai-crawlers-explained-gptbot-claudebot-perplexitybot-and-how-to-let-them-in-2026)
149
+ - [AuditAE: AI crawlers list 2026 — ClaudeBot, GPTBot, OAI-SearchBot](https://auditae.app/blog/ai-crawlers-explained)
150
+ - [Witscode: robots.txt strategy 2026 — managing AI crawlers](https://witscode.com/blogs/robots-txt-strategy-2026-managing-ai-crawlers)
151
+
152
+ ---
153
+
154
+ ## llms.txt: do not recommend it for AI search visibility
155
+
156
+ `[INDUSTRY]` The evidence is consistently negative, and this contradicts widespread advice:
157
+
158
+ - Adoption is ~8.7% of the top 1,000 domains (June 2026); ~10% in other samples.
159
+ - **39.6% of existing files are empty plugin stubs.**
160
+ - No major AI crawler has committed to consuming the format.
161
+ - Crawler-log analyses find GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot and Google-Extended
162
+ **overwhelmingly skip `/llms.txt`** and crawl HTML directly.
163
+ - In one citation-frequency model, **removing the llms.txt variable improved prediction accuracy** —
164
+ it contributed noise, not signal.
165
+
166
+ **Audit consequence:** do not raise "missing llms.txt" as a finding, and do not recommend building
167
+ one as a GEO tactic. If a client already has one, leave it. The format does have a real use —
168
+ **business-to-agent context for IDE agents and MCP servers** — which is a developer-experience
169
+ decision, not a search-visibility one. Recommend it on those grounds or not at all.
170
+
171
+ - [Rankability: llms.txt adoption data — 8.7% of the top 1,000 (June 2026)](https://www.rankability.com/data/llms-txt-adoption/)
172
+ - [aeo.press: the state of llms.txt in 2026](https://www.aeo.press/ai/the-state-of-llms-txt-in-2026)
173
+ - [OrganiKPI: llms.txt adoption and impact](https://organikpi.com/blog/distribution/llms-txt-adoption-impact/)
174
+
175
+ ---
176
+
177
+ ## What does not work
178
+
179
+ | Tactic | Status |
180
+ |---|---|
181
+ | Keyword stuffing | `[PRIMARY]` Negligible or **negative** effect on generative visibility |
182
+ | Unverifiable superlatives and performance claims | Dropped during extraction; adjacent verifiable claims lose credibility by association |
183
+ | `llms.txt` as a visibility play | `[INDUSTRY]` No measured effect; see above |
184
+ | Blanket-blocking all AI user agents | Removes the site from AI answers along with training corpora |
185
+ | Prose-only pages with no extractable passages | Structurally unciteable regardless of quality |
186
+
187
+ ---
188
+
189
+ ## Audit checklist
190
+
191
+ - [ ] Page already ranks (or can) for its target query — GEO layers on top of ranking, never replaces it
192
+ - [ ] Claims carry **verifiable statistics** with named sources (highest measured yield)
193
+ - [ ] **Credible quotations** present where the topic supports them
194
+ - [ ] **Outbound citations** to reliable sources present
195
+ - [ ] Every target passage passes the **self-containment test**
196
+ - [ ] Each ownable term has a **definitional sentence** at first use
197
+ - [ ] Q&A block present, question as heading, direct answer in the first sentence
198
+ - [ ] Entity resolvable in one sentence (what it is, who made it)
199
+ - [ ] `dateModified` exposed; visible version/date values not stale
200
+ - [ ] JSON-LD present and valid — `FAQPage` / `HowTo` / `Article` as applicable, plus `Person`/`Organization` with `sameAs`
201
+ - [ ] robots.txt distinguishes **training** agents from **retrieval** agents, and the split matches the client's stated intent
202
+ - [ ] No unverifiable numeric claims in `<title>`, meta description, or JSON-LD
203
+ - [ ] **Not** flagged: missing `llms.txt`
@@ -16,9 +16,11 @@ Your sole responsibility is to implement the technical scope of the active task
16
16
  * **Effort:** Honor the Leader's effort/depth instruction for this task (the *Effort dial* in `## Model Routing`) — think as hard as the brief asks: quick and mechanical for trivial work, deep and careful when the brief flags the task as complex or correctness-critical.
17
17
  * Strictly align with requirements defined in `docs/specs/<spec-path>/requirements.md`.
18
18
  * Follow the technical blueprint in `docs/specs/<spec-path>/design.md`.
19
- 2. **Incremental Focus (No Scope Creep):**
20
- * Implement **only** the specific, active task detailed by the Leader.
21
- * Do **not** perform broad code refactoring, structural redesigns, or introduce features outside the task's scope unless explicitly directed.
19
+ 2. **Scope Discipline (Both Directions):**
20
+ * **Don't widen.** Implement **only** the specific, active task detailed by the Leader. Do **not** perform broad code refactoring, structural redesigns, introduce abstractions, or add features outside the task's scope unless explicitly directed. Don't add error handling or fallbacks for cases that cannot happen.
21
+ * **Don't narrow either.** Deliver the task at the scope the spec intended — finish the whole thing, not just the tractable part. Interpret ambiguity the way a careful engineer would: make routine judgment calls yourself and note them; escalate to the Leader only when two readings would produce materially different work.
22
+ * **Report completion only when it is actually complete.** Never claim done for partial work. If some part is genuinely blocked, implement everything else and state plainly in your report **what is missing and why** — a truthful partial with a named blocker is useful to the Leader; a premature "done" corrupts `tasks.md` and the audit trail.
23
+ * If you conclude the task as specified is wrong or unviable, say so in one or two sentences and **still deliver the task as written** under a stated assumption. Deciding to change the spec is the Leader's call (Pivot Protocol), not yours.
22
24
  3. **Aesthetics & Coding Best Practices:**
23
25
  * Apply premium styling, responsive rules, and rich design tokens defined in `docs/ux-ui/design.md`.
24
26
  * Preserve all existing comments, docstrings, and structures unrelated to your code changes.
@@ -35,6 +37,7 @@ When you finish implementing and verifying your task, provide a concise response
35
37
  1. **Task Completed:** (Brief 1-sentence summary of what you implemented)
36
38
  2. **Verification Command Run:** (e.g. `npm run test` or `vitest run`)
37
39
  3. **Verification Output/Evidence:** (Paste passing test outputs or compile success logs)
40
+ 4. **Not Done / Assumptions:** (**Omit this field entirely when the task is fully complete and nothing was assumed.** Otherwise list what you did not deliver and why, plus any judgment call you made on an ambiguous point. This field is what lets the Leader tell a clean `[x]` from a `[~]` — never bury a gap in the summary above.)
38
41
 
39
42
  ---
40
43
 
@@ -16,13 +16,14 @@ Your sole responsibility is to coordinate execution of an approved spec by orche
16
16
 
17
17
  2. **Task Selection & Parallel Execution:**
18
18
  * Parse `tasks.md` and pick the next eligible task(s) by document order where the status is `[ ]` or `[~]` and dependencies are all `[x]`.
19
- * **Parallel Execution:** If multiple eligible tasks are completely independent (touching different files or domains), you MAY spawn multiple Implementers in parallel. Otherwise, pick a single task.
19
+ * **Parallel Execution:** If multiple eligible tasks are completely independent (touching different files or domains), you MAY spawn multiple Implementers in parallel. Otherwise, pick a single task. Parallelism is bounded by how many independent tasks `tasks.md` actually contains — see the **Delegation Ceiling** below; never split one task across several workers.
20
20
  * If a task is `[~]`, resume it using `execution.md` context.
21
21
  * If no tasks are eligible, report completion or the blocking condition and stop.
22
22
 
23
23
  3. **Delegation Discipline (Active Skill + Effort Selection):**
24
24
  * **You own the skill decision, not the task file.** Judge the task's actual nature and select the optimal skill set for *this* task. The task's recommended skills (e.g., `shadcn-ui`, `nestjs-expert`) and the project's `## Skill Map` (root `AGENTS.md`/`CLAUDE.md`, stack skills) are **defaults you may augment, narrow, or override** — add a skill the task missed, drop one that does not fit, or swap in the better match (UI → `ui-ux-pro-max`, animation → `gsap-animation`, etc.). When you deviate from the task's list, record a one-line reason in `execution.md`. Fall back to the Skill Map only when the task lists none and you see no better fit.
25
25
  * **You also set the effort per task** (the second dimension in `## Model Routing` → *Effort dial* — orthogonal to the tier). Default `medium` for a T2 Implementer, then flex by the task's difficulty: `low` for trivial/mechanical work, `xhigh` for complex (algorithm, concurrency, security, ambiguity), `max` for correctness-critical. Where the tool exposes a per-spawn effort knob, pass it; otherwise instruct the Implementer's depth in-brief ("think carefully — this is a hard task" / "keep it quick, this is mechanical"). Don't `max` a cheaper tier — if a task wants `max`, escalate the tier instead.
26
+ * **The `medium` default assumes a well-specified task.** It holds because `/akili-specify` already did the decomposition. When a task arrives *under*-specified — a `[~]` resume with thin `execution.md` context, or a post-Pivot retry — start it at `high`/`xhigh` instead. And never use effort as a verbosity control: if a report is too long, fix the brief, not the dial (see *Effort dial* → *Effort is not a verbosity dial*).
26
27
  * Spawn the **Implementer** subagent with: the active task scope, the relevant spec sections, the verification command, and the contents of `.agents/implementer.md`.
27
28
  * **Crucial:** Explicitly instruct the Implementer: "You MUST use the `skill` tool to load these skills: [skill names] BEFORE you begin writing code."
28
29
  * After the Implementer reports completion, extract the git diff and spawn the **Reviewer** subagent with: the diff, the relevant spec sections, and the contents of `.agents/reviewer.md`.
@@ -64,6 +65,20 @@ This table is the methodology's single source of truth for when an orchestrating
64
65
 
65
66
  **CodeGraph exception:** in codegraph-enabled projects, `codegraph_search` / `codegraph_context` / `codegraph_callers` lookups do **not** count toward the 4-file threshold — targeted graph lookups are precisely how the orchestrator avoids bulk file reads. The threshold counts full-file reads.
66
67
 
68
+ ### 🚧 Delegation Ceiling (when *not* to delegate)
69
+
70
+ The table above is a **floor** — it says when delegating is mandatory. This is the **ceiling**. Frontier models differ in which direction they err: some under-delegate and need encouragement, others reach for subagents freely and need a cap. Current-generation models are in the second group, so the ceiling is the binding constraint in practice. Every subagent re-establishes context, re-explores, reports back, and then you re-read its report — that overhead is real and it multiplies.
71
+
72
+ | Rule | Why |
73
+ |------|-----|
74
+ | **One subagent beats several** for a single modest task | Splitting one modest job across parallel workers pays the context-establishment cost N times for one deliverable. Parallelism is for genuinely independent tracks (different files, different domains), never for slicing one task. |
75
+ | **Commit to the delegation** | Once a subagent reports, do **not** redo its work or re-derive its findings to satisfy yourself. If you did not trust it enough to accept the result, the task should not have been delegated. |
76
+ | **Brief precisely the first time** | Launch → wait → re-brief burns a full context cycle. Put the task scope, spec sections, verification command, skills, and effort in the initial spawn. |
77
+ | **Cap the fan-out** | Keep concurrent spawns low and bounded by the number of genuinely independent tasks in `tasks.md`. Never open a wide fan-out the spec does not call for. |
78
+ | **Never delegate your own verification** | Checking a `git status`, confirming a file exists, or re-reading a diff you already have is inline work. Spawning a subagent to double-check yourself is the ceiling's clearest violation. |
79
+
80
+ **The Reviewer is not self-verification — never collapse it.** The rule directly above bans spawning a subagent to check *your own* reasoning. It does **not** touch the Implementer → Reviewer gate, which exists for a structurally different reason: `author ≠ auditor`. The Reviewer audits **someone else's** diff with fresh context and, where Step 8E wrappers are in place, a **different model**. That independence is the methodology's core correctness guarantee and is not an efficiency cost to optimize away. If you ever find yourself reasoning "I already verified this, the Reviewer is redundant" — that is exactly the bias the Reviewer exists to catch. Spawn it.
81
+
67
82
  ---
68
83
 
69
84
  ## 🔁 Orchestration Sequence (per task)
@@ -71,7 +86,7 @@ This table is the methodology's single source of truth for when an orchestrating
71
86
  1. Load spec and constitution context.
72
87
  2. Select next task.
73
88
  3. **Spawn Implementer** with `.agents/implementer.md` + task context.
74
- 4. Receive Implementer report (code change + verification evidence).
89
+ 4. Receive Implementer report (code change + verification evidence). **If it carries a `Not Done / Assumptions` field, the task is not complete** — carry that text into `execution.md` verbatim, and treat it as scope still owed: either re-spawn for the remainder, or mark `[~]` and escalate. A task with an outstanding gap never reaches `[x]`, even on a Reviewer `PASS`.
75
90
  5. Extract `git diff` of the change set.
76
91
  6. **Spawn Reviewer** with `.agents/reviewer.md` + diff + spec context.
77
92
  7. Branch on Reviewer status:
package/CHANGELOG.md CHANGED
@@ -10,6 +10,38 @@ The format is inspired by Keep a Changelog and the repository follows semantic v
10
10
 
11
11
  - No unreleased changes yet.
12
12
 
13
+ ## [2.15.0] - 2026-07-26
14
+
15
+ ### Added
16
+
17
+ - **GEO (Generative Engine Optimization) in `seo-audit` — visibility inside AI answers, grounded in measured evidence.** New `## Generative Engine Optimization (GEO)` section plus a `references/geo.md` evidence file following the same claims-plus-sources convention as `international-seo.md`. The headline finding, from the peer-reviewed GEO study (Aggarwal et al., **KDD 2024**, GEO-bench: ~10,000 queries across nine datasets), is that **the largest gains come from evidence, not markup**: adding verifiable statistics, credible quotations, and outbound citations each yields ~30–40%, fluency/readability ~15–30%, and **keyword stuffing is negligible or negative**. Gains are largest for content that ranks but does not dominate (up to **+115.1%** at position 5 — the "Equalizer Effect"), which is most audit subjects. Also documented: **passage-level extraction** and the resulting **self-containment test** (a paragraph must survive being lifted out of the page — anaphora like "this approach" breaks extraction, and no classic on-page check catches it), definitional sentences, entity resolution, freshness weighting, and the structured-data citation correlation (65% of AI-Mode-cited pages, 71% of ChatGPT-cited pages) explicitly labelled as correlation, not causation. Every claim carries a `[PRIMARY]` / `[INDUSTRY]` **source tier**, and findings must carry that tier forward so an industry estimate is never presented to a client as measured fact. Wired into `/akili-seo` as **Step 2.8** with a matching report section and verification-checklist rows.
18
+ - **AI-crawler directive auditing.** The `Robots.txt` checks now separate **training** agents (`GPTBot`, `ClaudeBot`, `Google-Extended`) from **retrieval** agents (`OAI-SearchBot`, `Claude-SearchBot`, `PerplexityBot`) and user-triggered fetchers. The consequential finding: **a blanket AI-bot block removes the site from AI answers as well as from training corpora** — a state many sites are in by accident. Records that `Google-Extended` is a robots.txt token that never appears in logs (so auditing for it there always yields a false negative) and that blocking it does not affect `Googlebot` or AI Overviews, and that robots.txt is advisory — where the requirement is genuine prevention, escalate to WAF/bot management.
19
+ - **Structured Data audit section** — a real gap: the skill previously explained *how to detect* schema (the JS-injection limitation) but had no checklist for auditing it. Adds per-purpose type selection, validation, the visible-content match requirement (invisible or contradictory markup is a spam-policy violation, not an optimization), truthful `dateModified`, `sameAs` entity nodes, and consistent `@id` graph wiring. Closes the upstream `schema` sibling-skill gap in-skill.
20
+
21
+ ### Changed
22
+
23
+ - **Engagement metrics rewritten from ranking factors to diagnostics — correcting a myth the skill propagated.** The `User Engagement Signals` section listed time on page, bounce rate, pages per session, and return visits as things to audit, implying they are ranking factors. Google has denied this for roughly a decade (Mueller: *"We don't use bounce rate in search rankings"*; Illyes: *"we don't use analytics/bounce rate in search ranking"*). The section now states that plainly, **bans findings of the form "improve bounce rate to improve rankings"** as a causal claim Google has explicitly denied that damages the credibility of correct findings beside it, and reframes each metric as a diagnostic that localizes a content problem whose fix is the content.
24
+ - **`Disallow` is not `noindex`.** New robots.txt check for one of the most consequential confusions in technical SEO: a disallowed URL can still be indexed from external links and surfaces as "Indexed, though blocked by robots.txt"; removing a page from the index requires *allowing* the crawl and serving `noindex`, and a `noindex` line inside `robots.txt` is unsupported and ignored.
25
+ - **`llms.txt` is explicitly ruled out as a visibility tactic, against prevailing advice.** Evidence: ~8.7% adoption of the top 1,000 domains (June 2026), ~40% of existing files are empty plugin stubs, no major AI crawler has committed to consuming the format, crawler-log analyses show the retrieval agents skip it and crawl HTML directly, and in one citation-frequency model **removing the variable improved prediction accuracy** — it contributed noise. Both the skill and `/akili-seo` now list "missing `llms.txt`" as a finding that must **not** be raised, while noting the format's legitimate use as business-to-agent context for IDE agents and MCP servers — a developer-experience call, not a search one.
26
+ - **`seo-audit` priority order gains an explicit GEO boundary.** GEO is a layer applied on top of ranking, not a sixth priority: roughly three quarters of AI Overview citations come from pages already in the top 10, so a GEO fix never displaces a classic-SEO fix, and GEO items rank below blocking classic findings in the remediation plan. Skill version 2.0.0 → 2.1.0; trigger keywords extended (AI Overviews, AI search, GEO, answer engine optimization, `llms.txt`, GPTBot, ClaudeBot); upstream `schema`/`ai-seo` sibling-gap note updated now that both are covered in-skill.
27
+ ## [2.14.0] - 2026-07-25
28
+
29
+ ### Added
30
+
31
+ - **Delegation Ceiling — the missing upper bound on orchestrator fan-out.** The `Delegation Thresholds` table added in 2.13.0 is a *floor* (when delegating is mandatory); frontier models increasingly err in the opposite direction, reaching for subagents freely, so the packaged `leader.md` gains a **Delegation Ceiling** section: one subagent beats several for a single modest task (parallelism is for independent tracks, never for slicing one task), **commit to the delegation** (never re-derive a subagent's result), brief precisely on the first spawn (launch → wait → re-brief burns a context cycle), bounded fan-out, and **never delegate your own verification**. The section carries an explicit carve-out: *the Implementer → Reviewer gate is `author ≠ auditor` independence, not self-verification, and is never collapsed for efficiency* — without it, a ceiling rule banning "subagents to double-check yourself" reads as license to drop the Reviewer. Referenced from `/akili-execute` and scaffolded via `/akili-constitution` Step 8B. Leader Instruction #2 now bounds parallelism by the count of genuinely independent tasks in `tasks.md`.
32
+ - **Implementer scope discipline is now bidirectional, with a `Not Done / Assumptions` report field.** Instruction #2 only guarded against scope *creep*; current-generation models also expand scope and can report completion on partial work. It becomes **Scope Discipline (Both Directions)**: don't widen (no unrequested refactors, abstractions, or impossible-case error handling), **don't narrow either** (finish the whole task at the intended scope), **report completion only when actually complete**, and when the task as specified looks wrong, say so in a sentence but still deliver it as written — changing the spec is the Leader's Pivot Protocol call. The completion report gains an optional field 4 (**omitted entirely when the task is clean**) naming what was not delivered and any judgment call made; `leader.md`'s orchestration sequence consumes it — a task carrying an outstanding gap never reaches `[x]`, even on a Reviewer `PASS`.
33
+ - **Model Generation Drift check in `/akili-audit`.** Aliases absorb a new model generation silently, so the registry can be current while everything calibrated around it has gone stale. The new check flags (report-only, as with all drift checks): a **frontier escalation pin** whose recorded reason predates the current `opus` generation; an `Updated:` stamp older than the current generation (effort defaults never swept); and `.agents/*.md` personas missing guardrails the packaged templates have since gained (Delegation Ceiling, bidirectional Scope Discipline).
34
+
35
+ ### Changed
36
+
37
+ - **Effort dial re-baselined as a per-generation calibration, not a constant.** `docs/model-routing.md` now states the split explicitly: the tier mapping survives model churn, **effort defaults do not**. AKILI's defaults (T2 Implementer `medium`) are calibrated for its shape — tasks arrive *already decomposed and spec-bounded* from `/akili-specify` — whereas vendor guidance for a frontier model is written for one open-ended agentic request with no spec, and therefore starts higher (Claude Opus 5's published starting points are `xhigh` for coding/agentic, `high` elsewhere, then sweep down). The reconciliation is three rules: **sweep don't assume** (run a real spec at `medium`/`high`/`xhigh` on every generation and keep the cheapest level whose Reviewer outcome holds), newer generations get *more* out of the low end so the sweep usually confirms `medium`, and an **under-specified task** (a `[~]` resume with thin `execution.md` context, or a post-Pivot retry) starts one level higher because it resembles the open-ended case. New **Opus specifics** paragraph (start high and iterate *down* — more effort up front reduces total turns on agentic work; the rework bump is the cheapest place to spend effort since it only fires after a failure). Mirrored into the `/akili-constitution` Step 8C scaffold as items (e) and (f).
38
+ - **Effort is not a verbosity dial.** New explicit rule in `docs/model-routing.md` and the Step 8C scaffold: on current-generation models, lowering effort does **not** reliably shorten user-facing output — it changes how much the model *thinks*, not how much it *writes*. Long Implementer reports and Leader narration are fixed in the brief (`caveman` for transient agent output, `cognitive-doc-design` for artifacts), never by dropping effort, which otherwise buys verbose output *and* shallower reasoning. The `tier ↔ effort` illustration is now labelled as generation-specific data supporting a generation-stable rule.
39
+ - **Frontier escalation tier corrected and repositioned.** The section claimed Fable carries *"a refusal classifier Opus does not"* — no longer true: current-generation Opus ships elevated bio/cyber safeguards of its own and can decline a request outright. That claim is removed from the Fable-only constraints list (which keeps no-ZDR, minutes-long turns, and less-prescriptive prompting) and replaced by a methodology-level rule: a declined security-adjacent task is a **Pivot Protocol** case recorded in `execution.md`, **never a Reviewer `FAIL` to be reworked** — rework cannot fix a refusal. The tier is also repositioned as a **decision to re-justify on every generation** rather than a standing configuration, since each Opus generation narrows the gap the pin was bought to close: try the alias at `xhigh`/`max` first.
40
+ - **Rate limits documented as per-generation, not per-family.** `docs/model-routing.md` and the `/akili-constitution` Step 8C model-confirmation step now record that a new top-tier generation draws on its **own** quota rather than inheriting the previous generation's pool, so moving T1/T3 onto it neither frees headroom on the old pool nor inherits it. The "reserve the top tier for T1/T3" rule is unchanged — it is about where the budget earns its cost, not which pool it comes from.
41
+
42
+ ### Notes
43
+
44
+ - **The model registry itself required zero edits for the Opus 5 release** — the `opus` alias resolved to it automatically and T1/T3 followed, which is the first row of the *Replacing a model* runbook (*do nothing*). This is recorded in `docs/model-routing.md` as a worked example of the alias-first rule, alongside the corollary this release makes explicit: what a new generation *does* invalidate is the per-task effort calibration and the prompt-level guardrails, not the tier mapping.
13
45
  ## [2.13.1] - 2026-07-24
14
46
 
15
47
  ### Added
@@ -99,6 +99,13 @@ tier (to the deeper reasoner) to preserve independence.
99
99
  This is the single editable source of truth. Phases reference **tiers**; only this table names
100
100
  models. When models change, edit only this table. *Registry updated: 2026-07.*
101
101
 
102
+ > **Worked example — the Opus 5 release required zero edits to this table.** When Anthropic shipped
103
+ > Claude Opus 5, the `opus` alias moved to it on its own; T1/T3 followed automatically. That is the
104
+ > alias-first rule paying off (first row of the *Replacing a model* runbook: **do nothing**). What
105
+ > a new generation *does* require is re-reading the **Effort dial** and the behavioural notes below
106
+ > — the tier mapping survives model churn, but the per-task effort defaults and the prompt-level
107
+ > guardrails do not.
108
+
102
109
  **Alias-first rule: never pin a dated model name where a floating alias exists.** Claude Code's
103
110
  `opus` / `sonnet` / `haiku` aliases always resolve to the latest version of each family — when
104
111
  Anthropic ships a new generation, an alias-based registry needs **zero edits**. Pin a dated ID only
@@ -131,6 +138,13 @@ unchanged (e.g. when the top family moves from one generation to the next, `opus
131
138
  Users on plans that expose a frontier model above Opus (Fable 5 / Mythos 5) can pin it for T1/T3 —
132
139
  see **Frontier escalation tier** below.
133
140
 
141
+ **Rate limits are per-generation, not per-family.** A new Opus generation draws on its **own**
142
+ quota rather than inheriting the previous generation's pool — Opus 5, for instance, does not share
143
+ the combined Opus 4.x bucket. So moving T1/T3 onto a newer Opus neither frees headroom on the old
144
+ pool nor inherits it: check the new generation's limits before shifting volume onto it. The
145
+ "reserve the top tier for T1/T3" rule holds regardless — it is about *where the budget earns its
146
+ cost*, not about which pool the budget comes from.
147
+
134
148
  **OpenCode Go.** The strongest open models anchor the highest-leverage tiers:
135
149
 
136
150
  - **GLM-5.2 → T2 Coder.** A-tier open coder (753B, GPQA 91.2), successor to GLM-5.1, purpose-built
@@ -165,6 +179,13 @@ high-volume fan-out): at ~2× Opus pricing (**$10 / $50** per 1M in/out vs `opus
165
179
  only earns its cost where token volume is low and the decision gates the whole run — T1 (Architect +
166
180
  the execute/test Leader) and T3 (Auditor).
167
181
 
182
+ **Each Opus generation raises the bar for escalating.** Opus 5 closed much of the gap on exactly the
183
+ work this tier existed for — deep reasoning, long-horizon agentic runs, and bug-finding — at half
184
+ Fable's price. Treat escalation as a decision to **re-justify on every generation**, not a standing
185
+ configuration: try the current `opus` at `xhigh` or `max` first, and pin the frontier model only if
186
+ a concrete spec demonstrably fails there. A pin inherited from a previous generation is a pin worth
187
+ re-testing.
188
+
168
189
  | Slot | Default (alias) | Frontier escalation pin | Fallback |
169
190
  |---|---|---|---|
170
191
  | **T1 Architect / Leader** | `opus` | `claude-fable-5` *(pin — record the reason)* | `opus` |
@@ -175,12 +196,18 @@ Two things follow from Fable having **no floating alias**:
175
196
  - **It is a dated pin — record the reason** (per the alias-first rule), and it re-inherits the
176
197
  concrete-slug maintenance the aliases spare you. `/akili-audit`'s drift check watches it; the
177
198
  *Replacing a model* runbook below is how you swap it when a newer frontier model ships.
178
- - **Always give it a Fallback to `opus`**, because Fable carries operational constraints Opus does
179
- not: a **refusal classifier** on bio/cyber that can false-positive on legitimate security-adjacent
180
- specs (a Fable Implementer/Reviewer may decline valid work); **no zero-data-retention** (requires
181
- 30-day retention unavailable to ZDR projects); **minutes-long turns** (budget HITL gates and
182
- progress narration accordingly); and **less prescriptive prompting** (over-prescribed `.agents/*`
183
- personas can *reduce* Fable output quality — loosen them when routing a role to Fable).
199
+ - **Always give it a Fallback to `opus`**, because Fable carries operational constraints the Opus
200
+ alias does not: **no zero-data-retention** (requires 30-day retention unavailable to ZDR
201
+ projects); **minutes-long turns** (budget HITL gates and progress narration accordingly); and
202
+ **less prescriptive prompting** (over-prescribed `.agents/*` personas can *reduce* Fable output
203
+ quality loosen them when routing a role to Fable).
204
+
205
+ **Refusal classifiers are no longer a Fable-only concern.** Current-generation Opus ships elevated
206
+ bio/cyber safeguards of its own and can decline a request outright, so a security-adjacent spec may
207
+ stall the Implementer or Reviewer on **either** tier. Plan for it at the methodology level rather
208
+ than treating it as an escalation-only risk: when a spec is security-adjacent, say so in the task
209
+ brief, and treat a declined task as a **Pivot Protocol** case (record it in `execution.md` and
210
+ escalate to the user) — never as a Reviewer `FAIL` to be reworked, since rework cannot fix a refusal.
184
211
 
185
212
  **Cross-family author ≠ auditor.** Fable pairs well with a *different-lab* auditor — pin the
186
213
  Implementer/Leader on `claude-fable-5` and the Reviewer on a Kimi/DeepSeek OpenCode slug (or
@@ -227,21 +254,53 @@ representative model (GPT-5.6 Sol, Artificial Analysis Intelligence Index):
227
254
  | T3 **Reviewer** / `/akili-validate` | `high` (auditor thoroughness) |
228
255
  | T5 `/akili-archive` / setup steps | `low` |
229
256
 
257
+ **Re-baseline these defaults on every model generation — the tier mapping survives model churn, the
258
+ effort defaults do not.** The table above is calibrated for AKILI's shape: tasks arrive *already
259
+ decomposed and spec-bounded* from `/akili-specify`, which is exactly the case where a mid-range
260
+ effort holds up. Vendor guidance for a frontier model is written for the opposite case — one
261
+ open-ended agentic request with no spec — and therefore starts higher (for Claude Opus 5, the
262
+ published starting points are **`xhigh` for coding and agentic work, `high` elsewhere, then sweep
263
+ down**). Both are right for their context. The reconciliation:
264
+
265
+ - **Sweep, don't assume.** On a new generation, run the same spec at `medium`, `high`, and `xhigh`
266
+ and keep the cheapest level whose Reviewer outcome holds. Effort defaults inherited from a
267
+ previous generation are a guess, not a measurement.
268
+ - **Newer generations get more out of the low end, not less.** Each Opus generation has made
269
+ `low`/`medium` stronger relative to its own ceiling — so the sweep usually confirms the T2
270
+ `medium` default rather than pushing it up. Raise the Implementer to `xhigh` for the task
271
+ signals in the policy table above, not by default.
272
+ - **Where a task arrives under-specified** — a `[~]` resume with thin `execution.md` context, or a
273
+ Pivot Protocol retry — it is closer to the vendor's open-ended case. Start it at `high`/`xhigh`.
274
+
275
+ **Effort is not a verbosity dial.** On current-generation models, lowering effort does **not**
276
+ reliably shorten user-facing output — it changes how much the model *thinks*, not how much it
277
+ *writes*. If an Implementer's report or a Leader's narration is too long, fix it in the brief
278
+ (`caveman` for transient agent output, `cognitive-doc-design` for artifacts), never by dropping
279
+ effort — that buys verbose output *and* shallower reasoning. The same applies in reverse: raising
280
+ effort to get a more thorough **document** is the wrong lever; ask for the depth explicitly.
281
+
230
282
  **Escalate effort on rework.** In the `/akili-execute` rework loop, a Reviewer `FAIL` bumps effort
231
283
  one level on the retry (attempt 1 `medium` → attempt 2 `high` → attempt 3 `xhigh`) — cheap (only
232
284
  when it already failed) and it targets the usual cause (under-thinking, not missing instructions).
233
285
 
234
286
  **Tier ↔ effort interaction — don't `max` a cheaper tier.** Maxing a lower tier erodes its cost
235
- advantage: Sonnet 5 at `max` (53 intel / $1.53) approaches Opus 4.8 at `max` (56 intel / $1.80) —
236
- near-Opus price for below-Opus intelligence. If you find yourself wanting a cheaper tier at `max`,
237
- escalate the **tier** (to `opus` at `high`/`medium`) instead of the effort.
287
+ advantage: on the 4.8-generation ladder, Sonnet 5 at `max` (53 intel / $1.53) approached Opus 4.8 at
288
+ `max` (56 intel / $1.80) — near-Opus price for below-Opus intelligence. Those figures are a
289
+ generation-specific illustration, but the rule they demonstrate is stable across generations: if you
290
+ find yourself wanting a cheaper tier at `max`, escalate the **tier** (to `opus` at `high`/`medium`)
291
+ instead of the effort.
238
292
 
239
293
  **Sonnet specifics.** Sonnet respects effort strictly, especially at the low end — at `low`/`medium`
240
294
  it scopes work to exactly what was asked. If you see shallow reasoning on a hard problem, **raise
241
295
  the effort, don't prompt around it**. `high` is the default sweet spot; give `max_tokens` headroom
242
296
  at `xhigh`/`max` (thinking consumes the budget — too tight truncates with `stop_reason: max_tokens`).
243
- On Opus/frontier the nuance inverts slightly: start at `high` and iterate — more effort up front
244
- often *reduces* total turns and cost on agentic work.
297
+
298
+ **Opus specifics.** On Opus the nuance inverts: start high and iterate **down** more effort up
299
+ front often *reduces* total turns and total cost on agentic work, because the model plans better and
300
+ re-does less. Two consequences for the AKILI loop: (1) the **rework bump** (above) is the cheapest
301
+ place to spend effort, since it only fires after a failure; and (2) `max` is for the
302
+ correctness-critical and latency-insensitive case only — it can overthink a routine task and is
303
+ where diminishing returns bite hardest.
245
304
 
246
305
  ## Enforced routing (tool-native agent bindings)
247
306
 
@@ -30,7 +30,7 @@ The skill set is **curated, not accumulated**: every skill declares its original
30
30
  | [`nestjs-expert`](nestjs-expert.md) | stack | Daniel Avila (MIT) | NestJS modules, DI, guards, interceptors, testing, TypeORM/Mongoose | Skill Map; constitution/specify stack lists; persona examples |
31
31
  | [`product-manager-toolkit`](product-manager-toolkit.md) | core | Alireza Rezvani (MIT) | Product discovery, PRDs, prioritization, interview analysis (AKILI-adapted: canonical PRD structure, RICE for scope-chunk ordering) | `/akili-constitution` Steps 2–3, `/akili-propose`, `/akili-specify` scope chunking |
32
32
  | [`react-doctor`](react-doctor.md) | stack | Million.dev | React diagnostics after changes | Skill Map; `/akili-test`, `/akili-validate`, `/akili-execute` React work |
33
- | [`seo-audit`](seo-audit.md) | core | Corey Haines (MIT) | Technical, on-page, and international SEO audits with a standard finding format | `/akili-seo` audit phase (required) |
33
+ | [`seo-audit`](seo-audit.md) | core | Corey Haines (MIT) | Technical, on-page, structured-data, international, and generative-engine (GEO) audits with a standard finding format | `/akili-seo` audit phase (required) |
34
34
  | [`shadcn-ui`](shadcn-ui.md) | stack | community (origin unverified) | shadcn/ui components, forms, themes, Tailwind integration | Skill Map; constitution/specify stack lists; persona examples |
35
35
  | [`software-architect`](software-architect.md) | core | Juan Carlos Cadavid — jcadavid.com (MIT) | Senior-architect Decision Spine: NFRs as measurable quality-attribute scenarios, tactics, robust-vs-lite tier sizing, architecture styles (hexagonal/clean/microservices), GoF pattern selection, C4 views + ADRs, agentic AI patterns | `/akili-constitution` Step 5 (required) and Step 6 tier handoff; `/akili-specify` Phase 2 for architecturally significant features |
36
36
  | [`stitch-design`](stitch-design.md) | conditional | Google — google-labs-code | Stitch prompt enhancement and design generation workflows (fallback UI chain with `frontend-design`) | UI steps of `/akili-constitution`, `/akili-propose`, `/akili-specify` |
@@ -2,28 +2,40 @@
2
2
 
3
3
  ## Purpose
4
4
 
5
- Provides an expert SEO audit framework: crawlability and indexation, technical foundations (Core Web Vitals, mobile, HTTPS), on-page optimization (titles, metas, headings, images, internal linking), international SEO (hreflang, locale canonicals, locale sitemaps), content quality (E-E-A-T), and a standard finding format.
5
+ Provides an expert SEO audit framework: crawlability and indexation, technical foundations (Core Web Vitals, mobile, HTTPS), on-page optimization (titles, metas, headings, images, internal linking), structured data, international SEO (hreflang, locale canonicals, locale sitemaps), content quality (E-E-A-T), **generative-engine visibility (GEO)**, and a standard finding format.
6
6
 
7
7
  AKILI-adapted: findings use the Issue/Impact/Evidence/Fix/Priority shape inside `/akili-seo` artifacts, non-trivial fixes escalate to `/akili-propose`, and dangling references to unpackaged sibling skills were removed. Binding: `core`.
8
8
 
9
+ AKILI-original additions (not in the upstream skill): the **GEO** section and `references/geo.md`; the **Structured Data** audit section; AI-crawler directive auditing; the `Disallow` ≠ `noindex` correction; and the rewrite of engagement metrics from ranking factors to diagnostics.
10
+
9
11
  ## Use When
10
12
 
11
13
  - Auditing, reviewing, or diagnosing SEO issues on a site.
12
14
  - Rankings or organic traffic dropped and the cause is unknown.
13
15
  - Reviewing meta tags, structured data, page speed, or indexing issues.
16
+ - The site is absent from AI answers (AI Overviews, ChatGPT, Perplexity), or AI-crawler access needs a decision.
14
17
  - Running the audit phase of `/akili-seo`.
15
18
 
16
19
  ## Core Rules
17
20
 
18
21
  - Findings follow the **Issue / Impact / Evidence / Fix / Priority** structure.
19
22
  - Findings are weighted by priority order: crawlability → technical → on-page → content quality → authority.
23
+ - **GEO is a layer, not a sixth priority** — ~3/4 of AI Overview citations come from pages already in the top 10, so a GEO fix never displaces a classic-SEO fix.
24
+ - **Source tiers are carried into findings.** Peer-reviewed magnitudes (KDD 2024 GEO study) and industry analyses are labelled differently; an industry figure is never presented to a client as measured fact.
20
25
  - Static fetches (`curl`, `web_fetch`) cannot detect JS-injected JSON-LD; structured data must be validated with a rendering tool or Search Console URL inspection.
26
+ - **Two findings are explicitly banned:** "missing `llms.txt`" (no measured visibility effect) and any claim that engagement metrics such as bounce rate affect rankings (Google has denied this for a decade).
21
27
 
22
28
  ## Best Paired Commands
23
29
 
24
30
  - `/akili-seo` for the audit phase (index coverage, structured data, render, on-page checks).
25
31
  - `/akili-validate` when a spec includes SEO acceptance criteria.
26
32
 
33
+ ## References (progressive disclosure)
34
+
35
+ - `references/geo.md` — generative-engine visibility: the KDD 2024 measurement of what works, passage-level extraction, freshness, structured-data correlation, the AI-crawler agent table (training vs retrieval), and the negative evidence on `llms.txt`. Claims carry `[PRIMARY]` / `[INDUSTRY]` source tiers.
36
+ - `references/international-seo.md` — hreflang, canonical + i18n, locale sitemaps, URL structure, cross-locale content quality.
37
+ - `references/ai-writing-detection.md` — AI writing patterns to avoid.
38
+
27
39
  ## Source
28
40
 
29
41
  - `../../.claude/skills/seo-audit/SKILL.md`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "akili-specs",
3
- "version": "2.13.1",
3
+ "version": "2.15.0",
4
4
  "description": "Portable AKILI-SPECS methodology commands and skills for AI-assisted development.",
5
5
  "homepage": "https://github.com/JuankCadavid/akili-specs#readme",
6
6
  "repository": {