Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 22 additions & 6 deletions assistant/src/prompts/templates/BOOTSTRAP-CONTENT-AUTOMATION.md
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.
Copy link
Copy Markdown
Contributor

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.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.


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.
Expand Down Expand Up @@ -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
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

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.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

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
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The 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 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.
Open in Devin Review

Was 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.

Expand Down Expand Up @@ -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
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The 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 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.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.


## Lifecycle

Expand Down
Loading