feat: update content-automation bootstrap for GEO article flow#31371
Conversation
db3f57b
into
alex-nork/content-automation-geo-skill
| 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. | ||
| 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. |
There was a problem hiding this comment.
🔴 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 skills/, not in skills/catalog.json, and not as any SKILL.md file. While some geo-related rules are described inline (banned words at line 81/138, writing style at line 81), the "structure for that format" and "QC checklist" are never defined. The model will either fail to find these artifacts or hallucinate their contents, leading to unpredictable behavior in the content automation funnel.
All references to the non-existent geo skill
- Line 14: "the two proven article formats from the geo skill"
- Line 77: "Follow the geo skill's workflow for the first draft"
- Line 79: "run the geo skill's research phase"
- Line 80: "Load the geo skill's structure for that format"
- Line 81: "Apply the geo skill's writing rules"
- Line 82: "Run the geo skill's QC checklist"
- Line 138: "Follow the geo skill's banned words list"
Prompt for agents
The template references a "geo skill" that does not exist in the skills/ directory or catalog.json. The instructions at lines 80 and 82 tell the model to "Load the geo skill's structure for that format" and "Run the geo skill's QC checklist" — but these artifacts are not defined anywhere. Two approaches to fix:
1. Create an actual geo skill in skills/geo/ with a SKILL.md that contains the article format structures (listicle, head-to-head) and a QC checklist. Then the bootstrap template can reference this skill and the model can load it via the normal skill-loading mechanism.
2. Inline ALL the referenced artifacts directly in the bootstrap template. Currently the banned words and writing rules are partially inlined, but the format structures and QC checklist are not. If you don't want to create a separate skill, define the listicle structure, head-to-head structure, and QC checklist items directly in the template so the model has concrete instructions to follow.
Option 1 is preferred per AGENTS.md System Prompt Minimalism rule, which says to encode behavior in a SKILL.md that the assistant loads on demand rather than adding to the system prompt.
Was this helpful? React with 👍 or 👎 to provide feedback.
| - 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)`. |
There was a problem hiding this comment.
🚩 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 buildSystemPrompt() at assistant/src/prompts/system-prompt.ts:373-389). The new content includes banned words lists, citation format rules, table format requirements, and hollow opener restrictions — all of which are behavioral rules that could live in a skill's SKILL.md. The template already references "the geo skill" as if it should exist, suggesting the intent may be to create the skill separately. Since the bootstrap template auto-deletes after 4 turns (assistant/src/prompts/templates/BOOTSTRAP-CONTENT-AUTOMATION.md:146), the token-cost impact is bounded to early conversations. Still, extracting these rules into an actual geo skill would both satisfy the minimalism rule and resolve the non-existent skill reference bug.
Was this helpful? React with 👍 or 👎 to provide feedback.
| ## 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. |
There was a problem hiding this comment.
🚩 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.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8cb89934da
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| 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. | ||
| 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.
Ask for format choice before requiring a chosen format
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 👍 / 👎.
| 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. |
There was a problem hiding this comment.
Avoid referencing an undefined geo-skill workflow
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 👍 / 👎.
…ARVIS-899) (#31378) * feat: add GEO article writing skill as bundled skill (#31369) * feat: update content-automation bootstrap for GEO article flow (#31371) * fix: move geo skill reference files to references/ subdir, remove orphaned drafts, add compatibility field (#31376) * fix: remove duplicated geo skill rules from bootstrap template (#31377) * feat: rename geo -> geo-writing, rewrite bootstrap for skill-first onboarding (#31380) * feat: rename geo skill to geo-writing, rewrite bootstrap for skill-first onboarding * test: update bootstrap tests for skill-first onboarding rewrite * feat: rewrite wake-up greeting to GEO message for content-automation cohort (#31384) * fix: replace hardcoded brand placeholders with dynamic references in geo-writing skill (#31432)
Summary
Part of plan: content-automation-geo-skill.md (PR 2 of 3)
Closes JARVIS-899