Skip to content

feat: add geo-writing skill and content-automation onboarding flow (JARVIS-899)#31378

Merged
alex-nork merged 7 commits into
mainfrom
alex-nork/content-automation-geo-skill
May 21, 2026
Merged

feat: add geo-writing skill and content-automation onboarding flow (JARVIS-899)#31378
alex-nork merged 7 commits into
mainfrom
alex-nork/content-automation-geo-skill

Conversation

@alex-nork
Copy link
Copy Markdown
Contributor

@alex-nork alex-nork commented May 20, 2026

Summary

  • Bundle geo-writing skill as a prompt-only bundled skill with listicle and head-to-head article formats
  • Rewrite BOOTSTRAP-CONTENT-AUTOMATION.md for skill-first onboarding: load skill immediately, ask one question, ship a draft, learn voice from edits
  • Rewrite wake-up greeting on the daemon side for content-automation cohort — bypasses the canned greeting and lets the model respond via normal inference

PRs merged into feature branch

Part of plan: content-automation-geo-skill.md

Closes JARVIS-899

@alex-nork alex-nork self-assigned this May 20, 2026
@linear
Copy link
Copy Markdown

linear Bot commented May 20, 2026

JARVIS-899

@alex-nork
Copy link
Copy Markdown
Contributor Author

Plan papertrail: Content-Automation GEO Skill Auto-Install

Content-Automation GEO Skill Auto-Install

Overview

Bundle a new GEO writing skill in the assistant, update the content-automation cohort onboarding flow to send a GEO-focused first user message instead of the generic "Wake up, my friend!" greeting, and let the model respond naturally (bypassing the canned greeting) using the updated BOOTSTRAP-CONTENT-AUTOMATION.md and the geo skill's article writing framework. This is a cross-repo feature touching both vellum-assistant and vellum-assistant-platform.

Linear: JARVIS-899

PR 1: Add geo skill as bundled skill

Depends on

None

Branch

geo-skill/pr-1-bundle-geo-skill

Title

feat: add GEO article writing skill as bundled skill

Repo

vellum-assistant

Files

  • assistant/src/config/bundled-skills/geo/SKILL.md
  • assistant/src/config/bundled-skills/geo/geo-article-writer.md
  • assistant/src/config/bundled-skills/geo/geo-vs.md
  • assistant/src/config/bundled-skills/geo/head-to-head-structure.md
  • assistant/src/config/bundled-skills/geo/listicle-structure.md
  • assistant/src/config/bundled-skills/geo/qc-checklist.md

Implementation steps

  1. Create the directory assistant/src/config/bundled-skills/geo/.
  2. Copy all 6 markdown files from ~/Desktop/geo-skill/ into the new directory.
  3. Update the SKILL.md frontmatter to match bundled skill conventions:
    • name: geo (must match directory name)
    • description: keep the existing description about GEO/AEO-optimized article writing
    • Ensure metadata.vellum.display-name is set (e.g. "GEO Article Writer")
    • Add metadata.vellum.activation-hints with entries like "GEO content writing", "SEO article optimization", "AI search engine optimization", "blog post writing for AI citations"
    • No feature-flag field — the skill is prompt-only and safe for all users
  4. Verify no TOOLS.json is needed (this is a prompt-only skill with no tool executors).
  5. No need to regenerate bundled-tool-registry.ts since there are no tool executors.

Acceptance criteria

  • Directory bundled-skills/geo/ exists with all 6 markdown files
  • SKILL.md frontmatter passes parseFrontmatter() validation (name, description, metadata fields present)
  • bun run lint and bunx tsc --noEmit pass
  • Skill appears in the catalog when loadBundledSkills() runs (verify with a targeted test or by inspecting the discovery logic)

PR 2: Update content-automation bootstrap for GEO-focused first message

Depends on

None

Branch

geo-skill/pr-2-update-bootstrap-geo

Title

feat: update content-automation bootstrap for GEO article flow

Repo

vellum-assistant

Files

  • assistant/src/prompts/templates/BOOTSTRAP-CONTENT-AUTOMATION.md

Implementation steps

  1. Read the current BOOTSTRAP-CONTENT-AUTOMATION.md at assistant/src/prompts/templates/BOOTSTRAP-CONTENT-AUTOMATION.md.
  2. Update the "First turn" section to handle the new first message "I want to write articles that rank better in GEO":
    • Instead of a generic "turn content into a publishable draft" framing, acknowledge the GEO/AEO intent explicitly.
    • The opening should acknowledge the user's GEO goal and establish that the assistant will help create articles optimized for AI search engines (ChatGPT, Perplexity, Claude, Gemini).
    • Keep the existing logic for checking pre-existing state (website URL in user context → data/sanity-connection.jsondata/content-source.json).
  3. Update the "First draft" section to reference the geo skill's article formats:
    • The model should use the geo skill's framework (listicle or head-to-head format) for the first draft.
    • The model should follow the geo skill's research phase (competitor research, real data) before writing.
    • The model should apply the geo skill's QC checklist after drafting.
  4. Keep the existing VOICE.md mechanics, edit loop, publishing, and scheduled drafting sections largely unchanged — these are format-agnostic.
  5. Update the "Constraints" section to reference the geo skill's banned words and formatting rules (no em dashes, no buzzwords, HTML tables only).

Acceptance criteria

  • Bootstrap template handles "I want to write articles that rank better in GEO" as the expected first message
  • Bootstrap references the geo skill's article formats (listicle, head-to-head) and QC checklist
  • Existing pre-chat state detection (Sanity, content source, website URL) is preserved
  • VOICE.md mechanics are preserved
  • Template is valid markdown with no frontmatter parsing errors

PR 3: Send GEO-specific first message for content-automation cohort

Depends on

None

Branch

geo-skill/pr-3-geo-first-message

Title

feat: send GEO-focused first message for content-automation cohort

Repo

vellum-assistant-platform

Files

  • web/src/app/(app)/assistant/(chat)/AssistantPageClient.tsx

Implementation steps

  1. Read web/src/app/(app)/assistant/(chat)/AssistantPageClient.tsx, focusing on the auto-greet effect (around line 1262-1280).
  2. At line 1279, the hardcoded sendMessage("Wake up, my friend!") fires for all cohorts. Change this to be cohort-aware:
    • Read pendingOnboardingContextRef.current?.cohort (the ref is already populated at line 1033 before the auto-greet effect fires).
    • If cohort is "content-automation", send "I want to write articles that rank better in GEO" instead.
    • For all other cohorts (or no cohort), keep "Wake up, my friend!".
  3. The exact code change at line 1279:
    const greetMessage =
      pendingOnboardingContextRef.current?.cohort === "content-automation"
        ? "I want to write articles that rank better in GEO"
        : "Wake up, my friend!";
    void sendMessage(greetMessage);
  4. The onboarding context (including cohort: "content-automation") is automatically attached to the message by the useSendMessage hook via pendingOnboardingContextRef, so no additional changes are needed to thread cohort information.

Acceptance criteria

  • Content-automation cohort users see "I want to write articles that rank better in GEO" as their first message in chat
  • All other cohorts still see "Wake up, my friend!" as the first message
  • The onboarding context (cohort, tools, tasks, tone, sanityConnected, contentSourceUrl) is still attached to the message payload
  • npx tsc --noEmit passes
  • The message does NOT match isWakeUpGreeting() on the daemon side (verified by text comparison: "i want to write articles that rank better in geo" !== "wake up, my friend"), which causes the daemon to skip the canned greeting and use normal model inference instead

Parallelism analysis

Wave 1 (parallel): PR 1, PR 2, PR 3
Total: 3 PRs across 1 wave (vs 3 sequential)

All three PRs are independent and can be implemented in parallel. The complete feature requires all three to be merged:

  • PR 1 provides the geo skill capabilities to the model
  • PR 2 ensures the bootstrap template handles the GEO-focused first message
  • PR 3 sends the GEO-focused first message from the platform

Cross-repo note: PR 3 targets vellum-assistant-platform. PRs 1 and 2 target vellum-assistant (this repo).

Copy link
Copy Markdown
Contributor

@devin-ai-integration devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

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

Devin Review found 2 potential issues.

View 3 additional findings in Devin Review.

Open in Devin Review

Comment thread assistant/src/prompts/templates/BOOTSTRAP-CONTENT-AUTOMATION.md Outdated
Comment thread assistant/src/config/bundled-skills/geo-writing/SKILL.md Outdated
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 084ca921b6

ℹ️ 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".

Comment thread assistant/src/prompts/templates/BOOTSTRAP-CONTENT-AUTOMATION.md Outdated
alex-nork added 2 commits May 20, 2026 19:03
…boarding (#31380)

* feat: rename geo skill to geo-writing, rewrite bootstrap for skill-first onboarding

* test: update bootstrap tests for skill-first onboarding rewrite
@alex-nork alex-nork changed the title feat: content-automation GEO skill auto-install (JARVIS-899) feat: add geo-writing skill and content-automation onboarding flow (JARVIS-899) May 21, 2026
@alex-nork alex-nork merged commit 45b385f into main May 21, 2026
13 checks passed
@alex-nork alex-nork deleted the alex-nork/content-automation-geo-skill branch May 21, 2026 13:14
@alex-nork
Copy link
Copy Markdown
Contributor Author

Cleaned up in #31464 — removed fabricated directives that were hallucinated during the generated PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant