Ygramul AIO Cascade
A self-evolving editorial cascade that generates and iteratively improves an AIO-summary block for a target URL using a weighted ensemble of 13 specialized editor-judges.
Output: a 30-50 word extraction-optimized block (intended for placement under H1, before first H2) + a full evolution log showing which judges fired, what they changed, and when the block converged.
Method: this is the productized Lever 4 content judge system from the Ygramul SEO/GEO methodology — specifically, the Karpathy-style auto-research loop applied to AIO block generation.
1. Required inputs
Confirm with the user before proceeding:
| Input | Required | Default if missing |
|---|---|---|
| Target URL | Yes | Ask |
| Primary query | Preferred | Infer from H1, confirm with user |
| Iteration ceiling | Optional | 30 (max 100 if user insists) |
| Output destination | Optional | Chat response; offer Sheet logging if user has Google Drive/Sheets connected |
Minimum viable input: a single URL. Everything else has sensible defaults.
Ask the user to confirm the inferred primary query before the cascade starts — a wrong query inference wastes 30 iterations optimizing for the wrong target.
2. Pre-flight: fetch page + SERP competitors
Before drafting the baseline block, gather the three data sources the judges need:
2.1 Fetch the target page
Use web_fetch on the target URL. Extract:
- H1 (the first
<h1>element) - Body text (prefer
<article>or<main>, truncate to ~1500 words) - Schema detection — scan raw HTML for
application/ld+jsonblocks, note which schema types are present (FAQPage, Article, HowTo, Product, etc.). This gates J20. - Publication date if available — informs J14
If web_fetch returns empty content (CDN bot-blocking, JS-rendered SPA without SSR), fall back to web_search on the URL itself — search-engine snippets are usually enough content to seed the cascade.
2.2 Fetch competitor SERP openings
This is what J11 needs. Do this once at cascade start, cache the result:
web_searchon the primary query- Take the top 3 non-target-domain results (skip if they're all from the target's own domain)
- For each, extract the opening paragraph (from the search result snippet is fine — don't fetch each competitor page unless snippets are unusable)
- Cache as
competitor_openers— an array of 3 text strings
If only 1-2 non-target competitors are in top 10, use what's available. If zero are available, J11 has to return no_change for every iteration it fires — log this as a known limitation.
2.3 Identify the query intent shape
This gates J12. Classify the primary query into one shape:
| Query shape | Triggers | Expected block form |
|---|---|---|
| Definitional | "what is X", "what does X mean" | Lead with definition, then elaboration |
| Procedural | "how to X", "how do you X" | Lead with action, then method |
| Causal | "why does X happen" | Lead with mechanism, then cause chain |
| Comparative | "X vs Y", "X or Y" | Lead with distinction, then details |
| Verification | "is X safe", "does X work" | Direct yes/no + qualifier + evidence |
| Enumerative | "signs of X", "types of X" | List format preferred |
Store as query_intent_shape.
3. Draft baseline block
Use this prompt to generate iteration 0:
Draft an AIO-summary block for the target page. Follow the Batch 3 pattern:
- 30-50 words exactly (count carefully)
- Sentence 1 directly answers the primary query
- Second person voice ("you", "your")
- No marketing language ("discover", "unlock", "transform", "journey")
- No brand mention unless the query is branded
- Include at least one concrete entity, number, or named concept
- Single paragraph by default (short list OK if content supports it)
- Helpful, direct, expert-but-accessible tone
PRIMARY QUERY: {primary_query}
QUERY INTENT SHAPE: {query_intent_shape}
PAGE H1: {h1}
PAGE CONTENT (first ~1500 words): {page_content}
Output ONLY the block itself. No labels, no quotes, no explanation.
Store as current_block. Initialize iteration counter to 0.
Log iteration 0 to the evolution log with judge_used = BASELINE and change_note = "Initial draft from drafter prompt".
4. The 13 judges
Each judge is an editor prompt that rewrites the current block or returns no_change with a reason. Judges split into three categories. Every iteration runs one guardrail + one optimizer + occasionally a reframer.
Guardrails (2)
J1 — Criteria Compliance
Enforce hard constraints: 30-50 words, second person, sentence 1 directly answers the primary query, no marketing language, no brand mention unless query is branded. Rewrite only to fix violations. If the block passes all constraints, return no_change.
J3b — Fact Accuracy vs Source
Every factual claim must be supported by the provided page content. Remove or rewrite any unsupported assertion. Do not introduce facts not present on the page. If all claims are verified, return no_change.
Optimizers (8)
J2 — AIO Citation Potential
Front-load the most citable claim. Make the block a standalone quotable thought that an LLM could extract verbatim as the answer to the primary query. Prefer definitional openers ("X typically means...") and active verbs. Avoid parentheticals and nested clauses that break extraction.
J3c — Information Gain
Compare the block against the SERP competitor openers provided. Flag generic phrasing that matches what competitors already lead with. Force a unique angle — a specific scenario, named entity, or framing that the page has but competitors don't. If the current block already has strong differentiation, return no_change.
J4 — Brand Voice
Match the brand's editorial register (inferred from the source page). Keep the block at ~8th-grade reading level. Non-anxiety-inducing for wellness content. No unexplained jargon. Do not invent tone — mirror what the page establishes. For BetterSleep specifically: neutral-positive, approachable, expert-but-warm.
J5 — Self-Uniqueness
Ensure the block is not just a paraphrase of the page's H1 or first paragraph. The block must add synthesis, framing, or specific distinctions the page opener lacks. If the block substantially restates what's already in the opener, rewrite; otherwise no_change.
J7 — Specificity
Replace vague claims with concrete examples, numbers, stages, or named techniques drawn from the page. Prefer "three scenarios" over "multiple scenarios," "46% of participants" over "most participants," "MILD technique" over "induction methods." If everything is already specific, no_change.
J10 — Entity Density
Count named entities in the block: named people, named techniques, specific numbers/percentages, named conditions, specific time windows, cited studies, named institutions. Target at least 3 named entities across the block. If below, inject entities present on the source page (do not hallucinate). If at or above 3, no_change.
J11 — Competitor Antipattern
Read the 3 competitor openers provided. Identify phrases, verbs, or framings that appear across multiple competitors — these are the "shared patterns" to avoid. Cite the specific phrases as evidence. Then rewrite the block to actively avoid those patterns. If SERP competitors are genuinely varied and no dominant antipattern exists, return no_change with rationale.
J12 — Query-Intent Alignment
Check that the block's answer shape matches the query intent shape. Definitional queries need definitional answers; procedural queries need action sequences; causal queries need mechanism chains; verification queries need yes/no with qualifier. If the shapes mismatch, rewrite to align. If they already match, no_change.
J14 — Temporal Freshness Signal
If the source page contains temporal markers (recent study