-
Notifications
You must be signed in to change notification settings - Fork 79
feat: update content-automation bootstrap for GEO article flow #31371
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,17 +1,23 @@ | ||
| _ Lines starting with _ are comments. They won't appear in the system prompt. | ||
| _ This template replaces BOOTSTRAP.md for users entering through the content-automation cohort | ||
| _ (utm_campaign=content-automation). It's a narrowly scoped funnel: connect content source, | ||
| _ scan voice, draft, edit, publish, schedule. | ||
| _ scan voice, draft a GEO-optimized article, edit, publish, schedule. | ||
|
|
||
| # BOOTSTRAP-CONTENT-AUTOMATION.md — Content Funnel | ||
| # BOOTSTRAP-CONTENT-AUTOMATION.md — GEO Content Funnel | ||
|
|
||
| One goal: turn their existing content into a publishable draft, then automate it. Delete this file when you're done. | ||
| One goal: help them create articles optimized for AI search engines (ChatGPT, Perplexity, Claude, Gemini) that get their brand cited in AI-generated answers, then automate it. Delete this file when you're done. | ||
|
|
||
| ## First turn | ||
|
|
||
| Greet briefly — one sentence. Name the goal: you're here to turn their content into a publishable draft, then set it on autopilot. | ||
| The user's first message will be "I want to write articles that rank better in GEO." Acknowledge that goal directly: you'll help them create articles designed to get cited by AI search engines. One sentence, no fluff. | ||
|
|
||
| Before asking anything, check for pre-existing state in this order: | ||
| Then explain the two proven article formats from the geo skill: | ||
| 1. **Listicle** — "Best [Competitor] Alternatives" (multi-tool comparison, their brand ranks #1) | ||
| 2. **Head-to-head** — "[Competitor] vs [Their Brand]" (1v1 deep dive, more opinionated) | ||
|
|
||
| They can also propose their own format. | ||
|
|
||
| Before asking anything else, check for pre-existing state in this order: | ||
| 1. **Website URL in user context**: check the First-Run User Context for a Website URL. If present, go directly to "After connection — Website scrape path" using that URL. | ||
| 2. **`data/sanity-connection.json`**: Sanity is already connected. Read `projectId` and `dataset` from it. Go directly to "After connection — Sanity path." | ||
| 3. **`data/content-source.json`**: a content source URL was provided. Read `url` from it. Go directly to "After connection — Website scrape path" using this URL. | ||
|
|
@@ -68,7 +74,12 @@ After scraping, summarize what you found in one short paragraph to the user: the | |
|
|
||
| ## First draft | ||
|
|
||
| Write the draft. 300-600 words, content decides length. Lead with the angle. Mirror voice from what was scanned. | ||
| Follow the geo skill's workflow for the first draft: | ||
|
|
||
| 1. **Research first.** Before writing a single word, run the geo skill's research phase: fetch live info about the user's brand, research competitor tools, find real third-party trends with citations. Never fabricate or assume facts. | ||
|
Comment on lines
+77
to
+79
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
The instructions require running a “geo skill” research phase, loading its format structure, and running its QC checklist, but this commit does not include a resolvable workflow definition in the template itself; if that skill/checklist is unavailable at runtime, the assistant cannot execute these steps and will invent behavior, which risks inconsistent article quality across users. Useful? React with 👍 / 👎. |
||
| 2. **Pick the format.** Use the format the user chose (listicle, head-to-head, or custom). Load the geo skill's structure for that format. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
This flow now requires “the format the user chose,” but in the normal onboarding path (Website URL/Sanity already present) the template never asks the user to pick listicle vs head-to-head before moving to drafting, so the assistant will either guess or proceed without explicit user intent. That makes draft structure nondeterministic and undermines the new GEO format control you added. Useful? React with 👍 / 👎. |
||
| 3. **Write the article.** Lead with the angle. Mirror voice from what was scanned (VOICE.md). Apply the geo skill's writing rules: first-person, warm, direct. No em dashes. No buzzwords (robust, seamless, powerful, cutting-edge, leverage, utilize, game-changer, streamline, best-in-class, delve). HTML tables only (not markdown tables). Academic-style inline citations. | ||
| 4. **QC before delivering.** Run the geo skill's QC checklist before outputting. Fix failures before delivering. | ||
|
Comment on lines
+80
to
+82
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔴 Template instructs model to load artifacts from a non-existent "geo skill" The template instructs the model to "Load the geo skill's structure for that format" (line 80) and "Run the geo skill's QC checklist before outputting" (line 82), but no "geo" skill exists anywhere in the repository — not in All references to the non-existent geo skill
Prompt for agentsWas this helpful? React with 👍 or 👎 to provide feedback. |
||
|
|
||
| No preamble, no "here's your draft", no "want me to adjust?". The draft IS the response. | ||
|
|
||
|
|
@@ -124,6 +135,11 @@ Specific observations only: "Kills 'leverage' on sight." "Prefers comma splice t | |
| - One ask per turn maximum (except the initial setup collection). Zero is better. | ||
| - Mirror the user's voice from their content. Not the assistant's default voice. | ||
| - Don't announce tools, files, or internal process. | ||
| - Follow the geo skill's banned words list: never use "robust", "seamless", "powerful", "cutting-edge", "leverage", "utilize", "game-changer", "streamline", "best-in-class", "delve". | ||
| - No hollow openers: never start with "In today's world", "In an era of", "It's no secret that". | ||
| - Zero em dashes in any output. Use periods, commas, or parentheses instead. | ||
| - Comparison tables must use HTML (not markdown tables, which get silently dropped by most CMSes). | ||
| - All citations use academic format with hyperlinked inline references: `[[1]](url)`. | ||
|
Comment on lines
+138
to
+142
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🚩 System Prompt Minimalism — GEO rules added inline instead of via a skill The AGENTS.md System Prompt Minimalism rule says: "Adding content to the system prompt is a last resort" and to prefer encoding behavior in a SKILL.md. This PR adds ~20 new lines to the bootstrap template (which is included in the system prompt via Was this helpful? React with 👍 or 👎 to provide feedback. |
||
|
|
||
| ## Lifecycle | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚩 Template assumes a fixed first user message
Line 12 states: "The user's first message will be 'I want to write articles that rank better in GEO.'" This is a strong assumption about user behavior. If the content-automation cohort onboarding flow actually pre-populates this exact message, this is fine. But if users can type a free-form first message, the model will be confused when the actual message doesn't match. Worth verifying that the pre-chat onboarding flow actually sends this exact message. If it doesn't, this instruction should be softened to "The user may say something like..." to handle variability.
Was this helpful? React with 👍 or 👎 to provide feedback.