# SEO Project Setup

Populate a project's shared OpenSEO context, site scope, goals, positioning...

- Repository: https://github.com/every-app/open-seo (25988 stars)
- Category: AI and agents
- License: MIT
- Last updated: 2026-10-31
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add every-app/open-seo --skill seo-project-setup -g -a claude-code -y`
Codex: `npx skills add every-app/open-seo --skill seo-project-setup -g -a codex -y`
Cursor: `npx skills add every-app/open-seo --skill seo-project-setup -g -a cursor -y`
Gemini CLI: `npx skills add every-app/open-seo --skill seo-project-setup -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add every-app/open-seo`

## Description

Populate a project's shared OpenSEO context, site scope, goals, positioning, competitors, key pages, and preferences, plus MCP checks and Search Console intake.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# OpenSEO SEO Project Setup

## Goal

Interview the user once about one website or SEO project, and store the answers in that project's shared context in OpenSEO with `update_project_context`. That context is read by every other skill and by the user on the project's Context page (in the sidebar under AI), so it survives new sessions, new machines, and new agents. This is a context setup workflow, not a full audit.

## Tone

Be friendly, practical, and structured. Ask questions in small batches. Explain why each item matters only when useful. Do not overwhelm a beginner with jargon.

## Where the answers go

Two project-context MCP tools do all the writing. Both are free, they spend no credits.

- `get_project_context(projectId)`: everything already known about the project, plus a `missingSections` list.
- `update_project_context(projectId, updates)`: a list of patch ops. The ones this skill uses:
  - `{ section: "business_overview" | "current_goal" | "positioning" | "writing_preferences", content }`
  - `{ addCompetitors: [{ domain, name?, notes? }] }`
  - `{ addKeyPages: [{ url, role: "hub" | "spoke" | "money" | "other", topic?, notes? }] }`
  - `{ customSection: "<slug>", title?, content }` for anything that does not fit a typed section
  - `{ appendResearchLog: { summary } }` when this session spends credits

Write in batches as the interview progresses, do not hold every answer until the end. Sections are prose (~4,000 characters each), so a few tight paragraphs, not a transcript.

## Checklist

### 1. Verify OpenSEO MCP and resolve the project

Writes need a `projectId`, so do this first:

The rest: https://github.com/every-app/open-seo/blob/HEAD/.agents/skills/seo-project-setup/SKILL.md
