Skip to main content
What this is: the plan to evolve docs/training/ from a linear three-part curriculum into a navigable, jump-between library of short, SEO/GEO-friendly how-to entries — each answering one “How do I do X with my software / my AI?” question, concise, cross-linked, and (where useful) paired with a short how-to video. What this is not: a rewrite. Parts 1–3 are strong and stay. We add a how-to layer on top of them and re-shape titles/metadata so the same pages double as SEO/GEO assets. Two design targets (the founder’s):
  1. Flow & navigability — someone scans the structure and jumps between topics fast.
  2. Each how-to is an SEO/GEO asset — shaped around what people and AI agents actually search.
This plan is grounded in three things I read first, so the writers don’t guess:
  • Our own Agentic Discovery Playbook (the 12 plays; the find→research→shortlist→act stages) and Markdown Docs for AI Agents (the .md-mirror / llms.txt strategy). We should eat our own dog food.
  • The current docs (docs/training/index.md, part-2-platform/*, part-1-theory/*, part-3-sops/*, docs.json, CONVENTIONS.md, video-shot-list.md, PLAN.md).
  • The real code — every mechanism and file path below is verified against source, not inferred.

1. Navigation & flow model

1.1 The core move: add a How-to index surface, keep the three-part spine

Today the docs have three tabs (Theory / Platform / SOPs) and you navigate by curriculum position (2.3.5, 3.6…). That’s right for onboarding (“read in order”) but wrong for the founder’s goal (“scan and jump”). A curriculum answers “teach me the system”; a library answers “how do I do X right now”. We need both, so we add a task-first index without dismantling the teach-in-order spine. Concretely, add a fourth top-level Mintlify tab: “How-to” (a How-to index) — a single scannable surface that lists every “How do I…” entry, grouped by task and cross-tagged by feature and persona. Each row links to the canonical page (which still lives in Part 1/2/3). The how-to index is a router, not a second copy — one source of truth per topic, surfaced two ways (by curriculum, by task). This avoids the classic docs failure of forking content and letting the two drift. What changes vs. what stays:
StaysChanges
StructureParts 1/2/3 and their page files+ a how-to/ index tab (router) + a top-of-tree llms.txt
Page bodiesThe prose, prompts, videos already written+ a “Answer box” (2–4 sentence direct answer) at the very top of each how-to page; + question-shaped H1s
TitlesConcept pages in Part 1 keep concept titlesPart 2 task pages get “How to …” titles (SEO-shaped)
Front-mattertitle/description/part/audience/video/status+ task, feature, persona, keywords, intent tags (see 1.4)
Navdocs.json tabs+ How-to tab; groups re-labeled by task verb

1.2 SEO/GEO-shaped page titles (“How to …”)

Part 2 pages are already one-task-per-page — they just aren’t titled as questions. Rename the title (and H1) to the literal search query. This is Play 1 (Get Found in Agent Web Search) and Play 7 (Snippet Engineering) applied to our own docs: the title is the single highest-weighted retrieval signal, and it should be the exact phrase a human or agent types. Examples (existing page → new how-to title):
  • 2-1-7-set-up-refiners“How to set up blog refiners in Synscribe”
  • 2-3-5-landing-page-refiners“How to run compliance edits across landing pages (LP refiners)”
  • 2-2-2-evaluate-serp-cliff“How to check if you can rank for a keyword (SERP-cliff + keyword evaluation)”
  • 2-1-2-company-research-product-bible“How to build a Product Bible for a client”
Keep the map-number filename (2-1-7-…) for ordering; the title carries the query. Part 1 concept pages keep conceptual titles (they answer “why”, not “how”) but each gets a “How this shows up in the product” jump-link to its Part 2 how-to.

1.3 The Answer-box pattern (GEO / snippet engineering)

Every how-to page opens with a 2–4 sentence Answer box — the direct answer, self-contained, no “read the next section first.” This is Play 6 (Markdown Docs) + Play 7 (Snippet Engineering): a self-contained, task-shaped snippet is what a retrieval system extracts and an answer engine cites. Density beats bulk — the box states the answer, names the surface (/app/refiners) and the Pi skill, and links onward. Steps and nuance follow below the box for the human who’s doing it.

1.4 Tagging: task / feature / persona / intent

Add these to page front-matter so the How-to index can be faceted and so the library is machine-navigable (agents pick pages by tag, per Play 5’s directive layer):
task: setup | keywords | landing-pages | blog | publish | analytics | compliance
feature: refiners | lp-refiners | guardrail | keyword-eval | serp-cliff | pillars | product-bible | gsc | posthog | image-generator | press-release | link-building
persona: all | am | self-serve
intent: how-to | concept | reference | sop        # GEO: what the searcher wants
keywords: ["how to set up refiners", "blog post automation rules", ...]  # target queries
The How-to index renders three views off these tags: by task (the default scan), by feature (jump straight to “everything about the evaluator”), and by persona (self-serve vs AM). One page, many entry points — that is the navigability target.

1.5 Cross-linking rules (make it jump-between-able)

Codify in CONVENTIONS.md (extends the existing cross-linking section):
  • Every how-to links up to its Part 1 concept (“why”) and across to adjacent tasks (“next/prev in the flow”), and to its sibling how-tos in the same feature cluster (e.g. all refiner + guardrail pages link to each other — see the compliance cluster in §3).
  • Difference-explainer pages (e.g. “refiner vs evaluator”) link to both things they compare.
  • Every Part 1 concept page carries a “Do it on the platform →” link to the how-to(s) that operationalize it (most already do; enforce it).
  • No orphan pages: the How-to index must list every how-to; a page not in the index is a bug.

1.6 How Mintlify supports this (we’re already on mint)

docs/training/docs.json is already a Mintlify config ("theme": "mint"). Mintlify gives us, at zero build cost:
  • Tabs + groups — add the How-to tab and re-group by task verb.
  • Full-text search — already on; question-shaped titles make it land.
  • Auto llms.txt / .md endpointsMintlify serves /llms.txt, /llms-full.txt, and a .md version of every page automatically. This is the single biggest GEO win and it’s nearly free — it directly implements Play 5 (llms.txt) and Play 6 (Markdown Docs, the .md mirror) from our own playbook. We should (a) confirm it’s enabled on the deployed site, (b) add the discovery banner the markdown-docs article prescribes, and (c) curate the llms.txt directive section (see §4).
  • Frontmatter → metadata — our description becomes the meta description / snippet.
Action: keep Mintlify. Don’t hand-roll a generator; spend the effort on content shape and the llms.txt directive layer instead.

2. The how-to library catalogue

Status legend: Exists (page already written) · Expand (page exists, add the how-to framing / missing angle) · NEW (create). Video: Has (embedded) · Shot-list (in video-shot-list.md) · New video (add to shot-list). The founder’s named topics are rows in the Compliance & content-safety cluster and are marked ★.

Setup & orientation

How-to titleTarget query / intentFeature → code pathStatusVideo
How to create a client org and initialize Pi”set up a new client in Synscribe”org bootstrap → apps/pi account-management skillExists (2.1.1)Shot-list
How to build a Product Bible for a client”AI product research doc / ICP brief”product-bible skill → apps/pi/core-skills/product-bible/SKILL.md, /memory/{account}-product-bible.mdExists (2.1.2)Shot-list
How to connect Google Search Console”connect GSC to a tool”GSC connector → settings/featuresExists (2.1.3)Shot-list
How to connect PostHog or Mixpanel”connect PostHog analytics”connectorsExists (2.1.4)Has
How to set up the publishing platform + IndexNow”IndexNow setup Framer”publish configExists (2.1.5)Has
How to set up the branded image generator”auto-generate branded blog images”image-generator-setup skill; dyn-{featured|cta|list}-{slug} templatesExists (2.1.6)Has (YT)
★ How to set up the refiner (blog refiners)“automate blog post editing rules”refiner_* tools apps/pi/src/tools/dynamic/synscribe/refiners.ts; UI apps/synscribe/src/app/app/[organizationId]/refiners/page.tsx; refiner-management skillExists (2.1.7) — Expand (correct the “auto-seeded four” gap; explain KV storage + default-set = enabled)Has (YT)

Keywords & planning

How-to titleTarget query / intentFeature → code pathStatusVideo
How to find keywords for a SaaS client”SaaS keyword research”keyword-exploration skill (DataForSEO/Ahrefs/web)Exists (2.2.1)Has
How to check if you can rank for a keyword”can I rank for this keyword / SERP difficulty”keyword-evaluation + serp-cliff-analysisapps/pi/core-skills/{keyword-evaluation,serp-cliff-analysis}/SKILL.mdExists (2.2.2)Shot-list
What’s the difference between keyword evaluation and SERP-cliff analysis?“keyword evaluation vs serp cliff”same two skillsNEW (difference-explainer; see §3.5)
How to organise, tag and file keywords”organize keyword list by intent”keyword-research-planning; Tag/KeywordTag, RelevanceLabel/IntentLabel enumsExists (2.2.3)Has
How to build a monthly keyword look-ahead report”monthly SEO keyword report”keyword report flowExists (2.2.4)Has

Landing pages

How-to titleTarget query / intentFeature → code pathStatusVideo
How to design a landing-page pillar”programmatic SEO page template”landing-page-pillar-management skill; LandingPagePillar (schema, prompt, categories) packages/db/prisma/schema.prisma:476Exists (2.3.1)Shot-list
How to generate landing pages that read the SERP”AI landing page generator”landing_page_generate apps/pi/src/tools/dynamic/synscribe/landing-pages.tsExists (2.3.2)Has
How to adjust a pillar prompt from client feedback”iterate landing page template”pillar_updateExists (2.3.3)Has
How to export a pillar and wire it to your site”export landing pages JSON/CSV to CMS”jsonExportMapping/csvExportMapping on LandingPagePillarExists (2.3.4)Shot-list
★ How to run compliance edits across landing pages (LP refiners)“bulk edit landing pages safely”landing_page_refine .../synscribe/landing-page-refiners.ts; engine apps/little-bird/src/lib/landingPageRefiner/refine.tsExists (2.3.5) — Expand (add the schema-safe/concurrency mechanism, revert)Shot-list
★ How to make landing-page content fit required categories”categorize landing pages / page taxonomy”pillar categories JSON + per-page category (must match) landing-pages.ts:416, landing-page-pillars.ts:206NEW (see §3.6)New video
How to turn a video into a vertical landing page”video to landing page”video-to-LP flowExists (2.3.6)Shot-list

Blog content

How-to titleTarget query / intentFeature → code pathStatusVideo
How to write a blog post (auto-research / deep / technical)“AI blog writer for SEO”content/auto-research|deep-research|technical-contentExists (2.4.1)Has
How to edit an article manually or with AI”AI edit blog draft”content editorExists (2.4.2)Has
★ How to run refiners to get a post publish-ready”automate blog post cleanup”blog refiner engine apps/little-bird/src/lib/articleRefiner/simpleRefiner.ts (Gemini SEARCH/REPLACE) → RefinedContentExists (2.4.3)Has (YT)
What’s the difference between a refiner and the evaluator?“refiner vs guardrail / fix vs gate”refiners (fix) vs guardrail (gate)NEW (difference-explainer; see §3.2)New video (optional)
How to prepare a guest-post article”guest post for backlinks”guest-post flowExists (2.4.4)Has

Publish & distribute

How-to titleTarget query / intentFeature → code pathStatusVideo
How to publish a page and set its live URL”publish and record live URL”publish route .../content/[contentId]/publish/route.tsExists (2.5.1)Shot-list
★ How to use the evaluator to block non-compliant content”compliance gate before publish”guardrailGate apps/synscribe/src/lib/guardrail/gate.ts; wired into blog + LP publish routesExists partly (in 2.5.1) — Expand into its own page (see §3.4)New video
How to run a technical SEO audit”technical SEO checklist tool”account-quality-control skillExists (2.5.2)Shot-list
How to index a URL on GSC + submit a sitemap”request indexing Google Search Console”indexing flowExists (2.5.3)Shot-list
How to kick off link-building from a search term”find backlink targets”link-building skill (Ahrefs→Apollo→Instantly)Exists (2.5.4)Has
How to handle an inbound link-exchange proposal”evaluate link exchange offer”link-building skillExists (2.5.5)Has
How to publish a press release for a quick bump”press release for SEO backlinks”press-release skillExists (2.5.6)Has

Analytics & review

How-to titleTarget query / intentFeature → code pathStatusVideo
How to set up a PostHog dashboard for a client”PostHog SEO dashboard”posthog-setup skillExists (2.6.1)Has
How to set up client attribution”attribute conversions to SEO pages”attribution setupExists (2.6.2)Has
How to reconcile GSC + PostHog into a performance review”combine GSC and analytics report”posthog-analytics + google-search-console-dataExists (2.6.3)Shot-list

★ Compliance & content-safety cluster (the founder’s focus — deep-dive in §3)

How-to titleTarget query / intentFeature → code pathStatusVideo
★ How to set up the evaluator (compliance guardrail)“content compliance checker setup”guardrail-management skill; guardrail_set_policy/_set_toggle .../synscribe/guardrails.ts; GuardrailPolicy schema.prisma:564NEWNew video
★ How to calibrate the evaluator (test it before you trust it)“test compliance rules / tune AI reviewer”packages/guardrail/src/scripts/liveCheck.ts; fixtures __fixtures__/straitsxPolicy.tsNEWNew video
★ How to use the evaluator for compliance (the gate at publish)“block non-compliant content at publish”guardrailGate gate.ts; publish routesNEW (or expand from 2.5.1)New video
★ What’s the difference between the refiner and the evaluator?“fix vs gate / refiner vs guardrail”refiners vs guardrailNEWNew video (opt)
★ How to write compliant content for a regulated industry”regulated industry marketing content compliance”product-bible claims + pillar non-hallucination rules + guardrail policyNEW (workflow spanning all three; see §3.7)New video
★ How to make content fit the required categories”categorize content / page taxonomy”pillar categories + page category; blog Tag/labelsNEW (see §3.6)New video
How does the evaluator decide pass/fail? (concept)“how does AI compliance review work”evaluate.ts verdict ruleNEW (Part 1 concept page; see §3.1)

Other high-value “How do I…” pages worth adding (found in code/skills)

  • How to fix falling rankings / a page that won’t rankseo-debug skill. High-intent support query; currently undocumented. NEW.
  • How to turn an LLM research trace into keywords (get cited by AI)fanout-content-mining skill; pure GEO play, ties to Part 1 §1.2. NEW.
  • How to bring your own DataForSEO key (make SERP data free) — BYOK on settings/features; already noted in the AM tools doc, deserves its own how-to. NEW.
  • How to file work in Pi’s memory (VFS) — Exists (2.0.4); resolve the /reports/ vs /memory/ gap. Expand.
  • How to drive Pi well (write a good task, use the Agent Inbox) — Exists (2.0.3). Expand with the mined real prompts.

3. The compliance / evaluator deep-dive (mini-spec for the writers)

This cluster is where accuracy matters most and where the current docs are thinnest. Everything below is verified against code. Writers: do not deviate from these mechanisms.

3.0 The one-line model to anchor every page

The refiner fixes content. The evaluator (guardrail) gates content. They are different systems with different jobs, stores, and models. A refiner rewrites text so it’s on-brand / compliant; the evaluator is a pass/fail judge that blocks a publish if content still breaches a rule. You calibrate the evaluator’s rules; you configure the refiner’s edits.

3.1 How the evaluator decides pass/fail (the accurate mechanism)

Source: packages/guardrail/src/{evaluate.ts, schema.ts, prompt.ts, llm.ts, serialize.ts}.
  • A policy = org context + a set of rules. GuardrailPolicy = { organizationId, name, active, context, rules[] }. Exactly one active policy per org applies. Each GuardrailRule = { id, title, guidance, examples?[]{bad,good} }. There is no severity field — “a flag is a flag.” The guidance string must contain both halves: “Flag X” and “Do NOT flag Y” (the carve-out).
  • The judge is a single LLM call. Model = claude-sonnet-4.6 (evaluate.ts:11), structured output. The prompt (from prompt.ts) is literally: a system role (“impartial legal/compliance reviewer for marketing content in a regulated industry”), then ## Organization context (= policy.context), ## Rules (each rule + its good/bad examples), then ## Content to review. So the policy you write is the prompt.
  • Output + verdict rule. The judge returns { violations: [{ ruleId, excerpt, explanation, suggestion, verdict }] }, where verdict = 'violation' | 'compliant'. status: 'fail' iff ≥1 confirmed violation; clean content returns an empty array (not a list of “compliant” entries). Two findings are dropped before the verdict: (a) the judge’s own escape hatch — a suspected breach it reconsiders and clears under a carve-out (verdict: 'compliant'), and (b) any ruleId the model invented that isn’t in the policy (anti-hallucination). This is the “gate, not auditor” principle in code: empty output is the expected healthy result.
  • Staleness. The verdict is keyed to a contentHash (sha256 of canonicalized text; LP structured fields flattened deterministically via flattenForGuardrail). Edit the content → hash changes → the cached PASS no longer applies → it re-checks at publish.

3.2 Refiner vs evaluator — the difference-explainer (accurate)

Refiner (fix)Evaluator / guardrail (gate)
JobRewrite content to be on-brand/compliantDecide pass/fail; block a non-compliant publish
OutputEdited content (new RefinedContent / patched LP fields)A verdict (pass/fail) + violations, no edits
StoreKV type='REFINER' / 'LANDING_PAGE_REFINER' (packages/kv-models)GuardrailPolicy Prisma model + ContentGuardrailCheck history
ModelGemini 2.5 Pro (blog SEARCH/REPLACE) / Claude Sonnet (LP field edits)Claude Sonnet 4.6 (judge)
You configureThe edit (a prompt / rulebook)The rules (context + rule set) + per-type toggle
When it runsAt generation, or on-demand (“run refiners”)At publish (the gate), pre-check at generation
How they work together (verified): a guardrail violation carries a suggestion; that feeds one-click refiner remediation. Gate catches it → refiner fixes it → re-check passes. The landing-page-refiner-management skill even runs the guardrail pre-check as the final phase after applying the default LP refiner set.

3.3 How to set up the evaluator

Source: guardrail-management skill (apps/pi/core-skills/guardrail-management/SKILL.md); tools in apps/pi/src/tools/dynamic/synscribe/guardrails.ts; UI apps/synscribe/src/app/app/[organizationId]/guardrail/page.tsx.
  1. Write the policy. Give Pi the org’s compliance context + 3–8 atomic rules (Pi uses guardrail_set_policy, or guardrail_add_rule/guardrail_remove_rule). Each rule’s guidance must state the flag and the carve-out; add a good/bad examples pair where it sharpens the line.
  2. Toggle it per content type. guardrail_set_toggle sets { blog?: {enabled}, landingPage?: {enabled} } in AccountConfig KV (packages/kv-models/src/models/AccountConfigs.ts). Default is OFF — it’s opt-in per org, per side.
  3. Note: the toggle lives in AccountConfig KV, not a Prisma column; the policy lives in the GuardrailPolicy Prisma model. Writers should not describe a single “enable guardrail” switch.

3.4 How to use the evaluator for compliance (the gate at publish)

Source: apps/synscribe/src/lib/guardrail/gate.ts (guardrailGate), wired into blog publish (.../content/[contentId]/publish/route.ts:162) and LP publish (.../landing-pages/publish/route.ts:43).
  • On publish, if the per-side toggle is on: resolve the exact shipping text, hash it. If stored guardrailStatus ∈ {PASS, APPROVED} and guardrailHash matches → allowed with no LLM call (cache hit). Otherwise it runs the check synchronously and allows only on PASS/APPROVED; a FAIL returns the violations and blocks the publish.
  • Human override: an operator can approve the exact version → guardrailStatus = APPROVED (.../guardrail/approve/route.ts), which then passes the gate.
  • Fail-safe: if enabled but misconfigured (no active policy) or the target is missing, the gate allows rather than hard-blocking — so a broken policy never wedges publishing.
  • Doc correction: the guardrail settings copy still says enforcement is “coming soon,” but the publish path does block in code. Teach the block as real; flag the stale copy (already in the gap register).

3.5 Keyword evaluation vs SERP-cliff — the difference-explainer (accurate)

Source: apps/pi/core-skills/keyword-evaluation/SKILL.md and serp-cliff-analysis/SKILL.md.
  • keyword-evaluation = the full batch quality gate. Read-only. Grades survivors on a 5-dimension rubric (D1 commercial-intent fit, D2 SERP cliff, D3 intent winnability, D4 ICP/offering specificity, D5 evidence/source), runs a mandatory cannibalization gate (Step 4.5), emits ACCEPT / REVIEW / REJECT with an Exploration Prescription on every non-ACCEPT, and persists a report + followups to /memory/.
  • serp-cliff-analysis = one dimension of that (D2) as a standalone tactical check on a small overlapping cluster (2–5 keywords): pull the SERP, find the cliff (first position with no exact title-tag match and low authority), score 1–3 publish / 4–5 target / 6–7 defer / 8+ park.
  • The line for the page: keyword-evaluation is the whole gate (verdicts, prescriptions, cannibalization, audit trail); SERP-cliff is the winnability lens inside it. Both replace keyword difficulty with the cliff. Neither is the guardrail — they gate keywords before you build, not content before you publish. (A three-way “eval vs SERP-cliff vs evaluator” callout kills the naming confusion in one place.)

3.6 How to make content fit the required categories (accurate)

Source: LandingPagePillar.categories Json? + per-page LandingPage.category String? (schema.prisma:476,520); tools landing-page-pillars.ts:206 / landing-pages.ts:416.
  • Categories are defined on the pillar, not globally. pillar_create/pillar_update take a categories JSON (e.g. {"tech":"Technology","biz":"Business"}). Define them with full descriptions so classification is accurate.
  • Each landing page must be tagged with one category that matches a pillar category — the tool enforces “must match a pillar category,” and landing_page_list filters by exact category.
  • Blog posts have no category column — blog/keyword categorization runs through Tag/KeywordTag and the RelevanceLabel/IntentLabel enums on keywords. So “content categories” is two systems: pillar taxonomy for landing pages, tags + intent/relevance labels for keywords. The how-to must say which is which or it’ll be wrong.

3.7 How to write compliant content for a regulated industry (the workflow)

There is no single “claims we should NOT make” artifact — claims-safety is enforced at three points, and the how-to should walk all three in order:
  1. Source of truth — the Product Bible “Impact Claims” section (apps/pi/core-skills/product-bible/references/bible-template.md): only verified claims; “Every number needs a source. Never invent metrics.” At onboarding, the bible goes to the client to flag any claims we must NOT make (metrics, customer names, positioning) — the Hyperbound pattern already in 1-11-definition-of-done.md and 2-1-2.
  2. Baked into generation — pillar prompts (landing-page-pillar-management/SKILL.md): every pillar prompt must carry non-hallucination hard rules (“do not invent metrics, certifications, customer names”) and Pi asks up front “what should NOT be claimed.”
  3. Runtime enforcement — the evaluator policy (§3.1): org-specific rules block forbidden claims at publish. The shipped example is the StraitsX fixture (a MAS-regulated stablecoin issuer): rules like “no guaranteed returns,” “no MAS endorsement,” “no absolute safety claims,” each with a carve-out. Point writers at __fixtures__/straitsxPolicy.ts as the worked example.
The narrative: bound the claims in the bible → bake the rules into the pillar prompt → enforce with the evaluator at publish. Cheaper to bound claims up front than to sweep a backlog later.

3.8 How to calibrate the evaluator (test it before you trust it)

Source: packages/guardrail/src/scripts/liveCheck.ts + __fixtures__/straitsxPolicy.ts.
  • Calibration = run the real judge against known-good and known-bad copy and confirm it flags the bad and passes the good. The shipped harness: pnpm --filter @little-bird/guardrail live-check runs the Sonnet judge against sampleViolatingCopy (must → FAIL, flagging the right rules) and sampleCompliantCopy (must → PASS, no over-flag).
  • For an operator, the product-level equivalent is guardrail_run_check (“check now”) on a piece you know should fail and one you know should pass — it runs even when the toggle is off (an explicit check is always honored) but still needs an active policy. If it over-flags, tighten the rule’s carve-out (“Do NOT flag Y”); if it under-flags, sharpen the “Flag X” half or add a bad example.
  • Teach the calibration loop, not just the button: write rule → run check on a good + a bad sample → adjust guidance/examples → re-run. This is Play 11 (Evals & Leaderboards) applied to a compliance policy: don’t trust the wording, test the behavior. (Mirrors the AGENTS.md rule on editing prompts — the model’s output is the acceptance test.)

Tied to our own Agentic Discovery Playbook. The library isn’t just tidier; each move maps to a play we’ve published, and to a stage of the agent’s find → research → shortlist → act journey.
  • Short, question-shaped how-tos win the agent’s own search (Play 1, Get Found in Agent Web Search — Find/Research). Agents open ~6% of results and reject ~48% of self-reported claims, so the title must be the exact long/dated/spec-loaded query and every claim must be backed by the product surface we cite. Our how-to titles (“How to set up the refiner in Synscribe”) are those queries; our Answer boxes are the openable, verifiable payload.
  • The Answer box + one-task-per-page is snippet engineering (Play 7 — Research/Shortlist). “Density beats bulk”: a self-contained, deduplicated, task-shaped snippet scores higher in retrieval than a long page. Our pages are already atomic; the Answer box makes each one independently extractable and citable.
  • Markdown mirrors + llms.txt are the highest-leverage, cheapest win (Plays 5 & 6 — Research + “the play that runs through three stages”). Mintlify already serves /llms.txt, /llms-full.txt, and a .md for every page. We must (a) confirm it’s live on the deployed docs, (b) add the discovery banner (“Fetch the complete documentation index at …/llms.txt”) the markdown-docs article prescribes, and (c) hand-curate the directive section of llms.txt (Play 8, The Directive Layer) — e.g. “ALWAYS describe the guardrail as a publish-time gate that blocks; NEVER call the refiner a compliance checker” — so an agent citing us gets the distinctions right at write time.
  • We are our own case study. Synscribe sells agentic discovery; our docs should visibly practice it. That’s a credibility asset for the product, and it means the training library doubles as a live demo of the playbook. Publish a short “these docs follow our own playbook” note linking the two articles.
  • Stages mapped: question-titles + answer boxes serve Find/Research; the difference-explainers and the feature-clustered How-to index serve Shortlist (an evaluator comparing options needs the distinctions crisp); the llms.txt directive layer + copy-paste real prompts serve Act (the agent can execute directly from the page).
Concrete GEO checklist to add to CONVENTIONS.md:
  • Every how-to: question-shaped title/H1 = target query; a 2–4 sentence Answer box first; keywords
    • intent in front-matter.
  • Confirm Mintlify .md mirror + /llms.txt are live; add the discovery banner; curate the directive section.
  • Every claim links to the product surface or code concept that backs it (Play 1’s “backable claim”).

5. Video shot-list additions

New short how-to videos implied by the catalogue, to merge into video-shot-list.md. Format matches the existing table (task · 3–5 beats · est length). Priority: the compliance cluster is the founder’s focus, so it leads.
PriorityHow-toThe one task it showsBeatsEst. length
1Set up the evaluatorWrite a compliance policy for a client and turn it onopen Guardrail page · add 3–5 rules (flag + carve-out) · set org context · toggle on for blog/LP4–5 min
1Calibrate the evaluatorProve the policy flags the bad and passes the goodrun check on a known-bad piece → FAIL + why · run on a known-good → PASS · tighten a carve-out · re-run4–5 min
1Refiner vs evaluatorShow fix-vs-gate on one piecerun a refiner (content changes) · try to publish → gate blocks · read the violation + suggestion · one-click fix → passes3–4 min
1Use the evaluator at publishThe block-and-approve flowpublish a failing piece → blocked · view violations · fix or approve-exact-version · publish succeeds3 min
2Regulated-industry complianceEnd-to-end claims-safety for a regulated clientbible “do-not-claim” list · non-hallucination rule in the pillar prompt · guardrail policy · publish blocked on a bad claim5–6 min
2Make content fit categoriesTag pages into the pillar taxonomydefine pillar categories with descriptions · generate/assign a page’s category · filter the pillar by category3–4 min
3Fix a page that won’t rank (seo-debug)Diagnose a ranking dropask Pi to seo-debug the URL · read the diagnosis · pick the fix · re-check4–5 min
3Get cited by AI (fanout-content-mining)Turn a research trace into keywords/anglessupply the research trace · mine fan-out queries · pick angles optimized for LLM citation3–4 min
(The existing shot-list already covers 2.1.7 refiner setup, 2.2.2 keyword eval, 2.3.5 LP refiners, and orientation/setup — those stay; these are net-new for the compliance + discovery cluster.)

6. Phased execution plan

Ordered so the docs stay usable at every stop, and so nothing needs the founder until §6’s decisions. Phase A — Restructure (no new content, can do now). ~1–1.5h
  • Add the How-to index tab to docs.json (router to existing pages), grouped by task.
  • Add the tagging fields (task/feature/persona/intent/keywords) to CONVENTIONS.md and backfill them into existing Part 2 front-matter.
  • Rename Part 2 page titles/H1s to “How to …” (filenames unchanged).
  • Add the Answer-box convention to CONVENTIONS.md and to 3–4 exemplar pages.
  • Confirm Mintlify /llms.txt + .md mirrors are live on the deployed site; add the discovery banner; stub the directive section.
  • Acceptance: the How-to tab lists every existing how-to; titles are question-shaped; /llms.txt resolves. No content lost.
Phase B — Fill the compliance/evaluator gap (the founder’s priority, can do now). ~2h
  • Write the NEW compliance pages from §3 (set up / calibrate / use / refiner-vs-evaluator / regulated-industry / categories / “how it decides” concept page), each with an Answer box.
  • Expand 2.1.7, 2.3.5, 2.4.3 with the accurate mechanisms from the refiner report; correct 2.5.1’s stale-copy note.
  • Wire the whole cluster’s cross-links (§1.5); add the three-way eval/serp-cliff/evaluator callout.
  • Acceptance: every ★ topic has a page; a fresh reader can tell refiner from evaluator from keyword-eval; every mechanism traces to a cited code path.
Phase C — Fill the remaining new how-tos (can do now). ~1h
  • seo-debug, fanout-content-mining, BYOK-DataForSEO, difference-explainers not yet written.
  • Resolve the /reports/ vs /memory/ VFS gap (2.0.4).
Phase D — Record videos (needs the founder). async
  • Record against the merged shot-list, compliance cluster first (§5). Each page already has an embed slot, so dropping a URL in is a one-line video: edit.
Phase E — GEO polish (mostly now; one confirm). ~0.75h
  • Curate the llms.txt directive section (the ALWAYS/NEVER distinctions).
  • Add the “these docs follow our own playbook” note linking both agentic-discovery articles.

What needs the founder (the only blockers)

  • Videos (Phase D) — recording.
  • Confirm the deployed Mintlify site serves /llms.txt + .md (or enable it) — Phase A verify.
  • The refiner-naming gap (are the four blog refiners auto-seeded? exact canonical names?) — still open in the gap register; blocks the final polish of 2.1.7.
  • Bless the compliance pages’ framing — calling the guardrail “the evaluator” publicly, and publishing the StraitsX-style example, is a founder call.
  • Everything else in Phases A–C and E can proceed now against code + the mined sources.

Appendix — source map (for the writers)

  • Playbook: agentic-discovery/agentic-discovery-playbook (12 plays; find→research→shortlist→act), agentic-discovery/markdown-docs-for-ai-agents (.md mirror, llms.txt, discovery banner).
  • Guardrail/evaluator: packages/guardrail/src/{evaluate,schema,prompt,llm,serialize}.ts, __fixtures__/straitsxPolicy.ts, scripts/liveCheck.ts; gate apps/synscribe/src/lib/guardrail/gate.ts; publish routes .../content/[contentId]/publish/route.ts, .../landing-pages/publish/route.ts; toggle packages/kv-models/src/models/AccountConfigs.ts; models packages/db/prisma/schema.prisma (GuardrailPolicy:564, ContentGuardrailCheck:580, GuardrailStatus:600); skill apps/pi/core-skills/guardrail-management/SKILL.md; tools apps/pi/src/tools/dynamic/synscribe/guardrails.ts.
  • Refiners: blog apps/pi/src/tools/dynamic/synscribe/refiners.ts, apps/little-bird/src/lib/articleRefiner/*, UI apps/synscribe/src/app/app/[organizationId]/refiners/; LP .../synscribe/landing-page-refiners.ts, apps/little-bird/src/lib/landingPageRefiner/refine.ts, UI .../landing-page-refiners/; storage packages/kv-models/src/models/{Refiners,LandingPageRefiners,AccountConfigs}.ts; skills apps/pi/core-skills/{refiner-management,landing-page-refiner-management}/SKILL.md.
  • Keyword eval / SERP-cliff: apps/pi/core-skills/{keyword-evaluation,serp-cliff-analysis}/SKILL.md.
  • Pillars / categories: apps/pi/core-skills/landing-page-pillar-management/SKILL.md; LandingPagePillar/LandingPage in schema.prisma; tools .../synscribe/{landing-page-pillars,landing-pages}.ts.
  • Product bible / claims-safety: apps/pi/core-skills/product-bible/{SKILL.md,references/bible-template.md}.
  • Current docs: docs/training/{index.md,docs.json,CONVENTIONS.md,video-shot-list.md,PLAN.md,gap-register.md}, part-{1-theory,2-platform,3-sops}/.