SEO Content Gap Audit
rampstackco/claude-skills
Audit content gaps and decay using Ahrefs MCP data: missing topics, thin coverage, outdated content, and decaying pages.
Generates a fully structured SEO content brief for a target keyword and optionally pushes it to a Notion database.
$ npx skills add Infrasity-Labs/dev-gtm-claude-skills --skill content-brief -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Infrasity-Labs/dev-gtm-claude-skills content-brief --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Infrasity-Labs/dev-gtm-claude-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/notion-skills/content-brief .claude/skills/content-brief && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "content-brief" agent skill from https://github.com/Infrasity-Labs/dev-gtm-claude-skills/tree/main/notion-skills/content-brief into .claude/skills/content-brief/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "content-brief", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Infrasity-Labs/dev-gtm-claude-skills/tree/main/notion-skills/content-briefType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Infrasity-Labs/dev-gtm-claude-skills --skill content-brief -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Infrasity-Labs/dev-gtm-claude-skills content-brief --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Infrasity-Labs/dev-gtm-claude-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/notion-skills/content-brief .agents/skills/content-brief && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "content-brief" agent skill from https://github.com/Infrasity-Labs/dev-gtm-claude-skills/tree/main/notion-skills/content-brief into .agents/skills/content-brief/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "content-brief", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Infrasity-Labs/dev-gtm-claude-skills --skill content-brief -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Infrasity-Labs/dev-gtm-claude-skills content-brief --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Infrasity-Labs/dev-gtm-claude-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/notion-skills/content-brief .cursor/skills/content-brief && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "content-brief" agent skill from https://github.com/Infrasity-Labs/dev-gtm-claude-skills/tree/main/notion-skills/content-brief into .cursor/skills/content-brief/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "content-brief", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Infrasity-Labs/dev-gtm-claude-skills.git --path notion-skills/content-brief--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Infrasity-Labs/dev-gtm-claude-skills --skill content-brief -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Infrasity-Labs/dev-gtm-claude-skills content-brief --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Infrasity-Labs/dev-gtm-claude-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/notion-skills/content-brief .gemini/skills/content-brief && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "content-brief" agent skill from https://github.com/Infrasity-Labs/dev-gtm-claude-skills/tree/main/notion-skills/content-brief into .gemini/skills/content-brief/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "content-brief", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Infrasity-Labs/dev-gtm-claude-skills content-briefInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Infrasity-Labs/dev-gtm-claude-skills --skill content-brief -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Infrasity-Labs/dev-gtm-claude-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/notion-skills/content-brief .github/skills/content-brief && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "content-brief" agent skill from https://github.com/Infrasity-Labs/dev-gtm-claude-skills/tree/main/notion-skills/content-brief into .github/skills/content-brief/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "content-brief", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Infrasity-Labs/dev-gtm-claude-skills --skill content-brief -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Infrasity-Labs/dev-gtm-claude-skills content-brief --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Infrasity-Labs/dev-gtm-claude-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/notion-skills/content-brief .opencode/skills/content-brief && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "content-brief" agent skill from https://github.com/Infrasity-Labs/dev-gtm-claude-skills/tree/main/notion-skills/content-brief into .opencode/skills/content-brief/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "content-brief", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
content-briefGenerates a fully structured SEO content brief for a target keyword and optionally pushes it to a Notion database.
Content Brief is an agent skill from Infrasity-Labs/dev-gtm-claude-skills. Generates a fully structured SEO content brief for a target keyword and optionally pushes it to a Notion database. Use this skill whenever the user says 'create a content brief', 'brief this keyword', 'run a content brief for', 'generate a brief', 'write a brief for [keyword]', 'content brief on [topic]', or any variation where someone needs a keyword researched and turned into a structured writing assignment with H1, H2 outline, FAQ, internal links, word count target, and writer notes. Also triggers when the…
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including scripts and reference files (for example `references/error-handling.md`, `references/notion-schema.md` and `references/routing-logic.md`).
It sits in Writing & Content, covering Content strategy and On-page SEO. It works with Notion, Model Context Protocol and Ahrefs. The repository describes itself as: Open-source Claude skills for GEO, AI discoverability, and developer GTM workflows. Built for developer-focused companies that want their documentation to be found, parsed, and… The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 02cfefb. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 2 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
pythonFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Content Brief loads about 2.8k tokens when it runs, and up to ~5.4k if it reads all its reference files. Until then it costs about 189 tokens; SKILL.md has 1,212 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from Infrasity-Labs/dev-gtm-claude-skills at commit 02cfefb, republished under its MIT licence (© Infrasity-Labs). 1,212 words, ~2,799 tokens.
.claude/skills/content-brief/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.Generates a structured SEO content brief from a target keyword. Output follows the mandatory Direction prompt format so the text_parser.py script can extract every field for Notion without manual cleanup.
Explicit phrases (any of):
Implicit signals:
When triggered, run immediately — no upfront intake beyond the keyword itself.
Run the brief without questions when the keyword is clear.
Ask one clarifying question only when both are true:
Quick clarification — who is the primary audience for "[keyword]"?
- [Inferred persona A — e.g., HR Director]
- [Inferred persona B — e.g., Operations Manager]
- Tell me
Why I'm asking: audience shapes the H1, content angle, and writer notes. One question prevents a wrong brief.
Max one question. If audience is inferable, skip and proceed.
Run these steps before generating the Direction prompt output:
Preferred: Ahrefs MCP (keywords_explorer_overview) → volume, KD, CPC, SERP data.
Fallback (no Ahrefs MCP): Use WebSearch to estimate:
[keyword] search volume KD CPC site:ahrefs.com OR site:semrush.com OR site:moz.com[not available — add manually][keyword] → identify top 3 organic results (skip ads, maps, featured snippets)Based on keyword + SERP type, classify as one of exactly four options:
Informational — user wants to learnCommercial — user is comparing options before buyingTransactional — user is ready to act/purchaseNavigational — user seeks a specific brand/siteApply routing logic from references/routing-logic.md:
This format is non-negotiable. The text_parser.py script performs label-exact extraction. If any label deviates from the format below — wrong case, extra space, missing underscore — the Notion property will arrive empty.
After data gathering, output the brief using EXACTLY this structure:
TARGET_KEYWORD: [keyword]
VOLUME: [number or "not available"]
CPC: [decimal or "not available"]
DIFFICULTY: [0-100 integer or "not available"]
SEARCH_INTENT: [Informational | Commercial | Transactional | Navigational]
AUDIENCE: [persona — job title or role]
RECOMMENDED_H1: [final proposed title]
CONTENT_ANGLE: [one paragraph describing the unique angle, why this beats competitors, what the post must do]
WORD_COUNT: [number]
SCHEMA: [schema type — e.g., FAQ, HowTo, Article, FAQ + HowTo]
PRIORITY: [HIGH | MEDIUM | LOW]
H2_OUTLINE:
- H2: [heading]
- H3: [subheading]
- H3: [subheading]
- H2: [heading]
- H3: [subheading]
FAQ:
- Q: [question the audience actually searches]
- Q: [question]
- Q: [question]
INTERNAL_LINKS:
- [anchor text] → [relative URL or page title if URL unknown]
WRITER_NOTES:
[one paragraph of specific guidance: tone, POV, what to avoid, key differentiators to emphasize, CTAs, any client-specific requirements]Critical rules:
| Node | Role | Tool |
|---|---|---|
| 1 — Input | Accept keyword + optional client/audience context | User message |
| 2 — Keyword Metrics | Pull volume, KD, CPC, SERP type | Ahrefs MCP OR WebSearch fallback |
| 3 — SERP Scrape | Extract H2/H3 from top 3 organic results | WebFetch |
| 4 — Brief Generation | Process data through Direction prompt → structured output | Claude (this skill) |
| 5 — Text Parser | Extract labeled fields → structured variables | scripts/text_parser.py |
| 6 — Conditional Router | Route based on PRIORITY value | Routing logic |
| 7A — Notion Create (HIGH) | Create page, Status = "Briefed: Ready for Assignment" | Notion MCP |
| 7B — Notion Create (MED/LOW) | Create page, Status = "Briefed: Weekly Review Queue" | Notion MCP |
| 8A — Slack Notify (HIGH only) | Post brief summary + Notion link to channel | Slack MCP |
| 9 — Calendar Sync | Create linked entry in Content Calendar database | Notion MCP |
In Claude Code without MCP connectors: Nodes 1–5 run automatically. Nodes 6–9 produce a ready-to-paste summary and instruct the user on manual Notion entry.
Trigger: user provides a CSV with a Target Keyword column (optional Priority Override column).
Process:
Target Keyword column exists---Expected throughput: 20 briefs in 20–25 minutes (60–75 seconds per brief).
If any keyword fails (no SERP data, ambiguous intent): note it in the summary table as [FAILED — reason] and continue processing remaining keywords.
Map parser output to Notion properties using references/notion-schema.md.
Two paths based on PRIORITY:
HIGH:
MEDIUM:
LOW:
After page creation: run Calendar Sync (Node 9) to create linked entry in Content Calendar database.
Pre-check before creating: query Notion for existing page with same TARGET_KEYWORD. If found → route to update_page instead of create_page to prevent duplicates.
Each client has:
Onboarding a new client: ~45–60 minutes to configure connector + test one brief end-to-end.
If Notion MCP is not available, after generating the Direction prompt output, append:
---
NOTION PUSH: Not connected. To add this brief to Notion manually:
1. Open your Notion database
2. Create a new page
3. Paste the following field values:
[formatted summary of all extracted fields]
Or run: python scripts/text_parser.py brief.txt --output json
to get a JSON payload ready for the Notion API.
---After generating output, mentally verify:
Run scripts/brief_validator.py on the output file for automated validation.
| Situation | Behavior |
|---|---|
| No keyword data available | Set numeric fields to "not available", add note in WRITER_NOTES instructing editor to verify manually |
| SERP scrape blocked (403/paywalled) | Skip scrape, note "competitor outline not available" in WRITER_NOTES, proceed with brief |
| Ambiguous search intent | Default to Informational; flag in WRITER_NOTES: "Intent ambiguous — verify before briefing writer" |
| Select value mismatch in Notion | Capitalize values exactly; Notion select is case-sensitive |
| Duplicate keyword detected | Route to update_page instead of create_page |
| >2 empty properties in parsed brief | Flag for manual review; do not push to Notion |
| Batch keyword fails | Note in summary table, continue processing |
| CSV missing Target Keyword column | Stop and ask user to confirm column name |
See references/error-handling.md for full failure-point catalog.
| Script | Role |
|---|---|
scripts/text_parser.py | Extracts labeled fields from Direction prompt output → structured dict. python text_parser.py brief.txt --output json |
scripts/brief_validator.py | Validates all required fields are present, values are in allowed sets. python brief_validator.py brief.txt |
references/notion-schema.md — Notion database property config (names, types, allowed values)references/routing-logic.md — Priority scoring rules and publish date calculationsreferences/error-handling.md — Known failure points and fixes© Infrasity-Labs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (scripts, references) in notion-skills/content-brief of Infrasity-Labs/dev-gtm-claude-skills.
Open the folder on GitHubat commit 02cfefb
Content Brief next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Content Brief this skillInfrasity-Labs/dev-gtm-claude-skills | 136 | — | ~2.8k | Automated safety check: Pass | MIT | |
| SEO Content Gap Auditrampstackco/claude-skills | 945 | — | ~2.3k | Automated safety check: Pass | MIT | |
| SEO Keyword Gap Auditrampstackco/claude-skills | 945 | — | ~2k | Automated safety check: Pass | MIT | |
| Content Creatorsickn33/agentic-awesome-skills | 47k | 1 repos | ~2.5k | Automated safety check: Pass | MIT | |
| Local Content Strategygarrettjsmith/localseoskills | 121 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Topic Cluster Planninginhouseseo/superseo-skills | 352 | — | ~1.7k | Automated safety check: Pass | Apache-2.0 |
rampstackco/claude-skills
Audit content gaps and decay using Ahrefs MCP data: missing topics, thin coverage, outdated content, and decaying pages.
rampstackco/claude-skills
Find keywords competitors rank for that the target property does not, and prioritize them by opportunity.
sickn33/agentic-awesome-skills
Drafts and reviews audience-specific content from supplied brand examples, with local scripts for brand voice and SEO diagnostics, channel templates and a content calendar.
garrettjsmith/localseoskills
Build a complete local content strategy from keyword research output.
inhouseseo/superseo-skills
A skill your agent uses when planning a topic cluster (hub + spokes) for a new content area.
AgriciDaniel/claude-blog
Generate detailed content briefs for blog posts with target keywords, content outlines, competitive analysis, recommended statistics, image and chart suggestions, word count targets, internal…
Infrasity-Labs/dev-gtm-claude-skills
Generates a fully structured SEO content outline (not a finished brief) and exports it as a formatted .docx Word document.
Infrasity-Labs/dev-gtm-claude-skills
Audits any API documentation site by crawling every endpoint page and scoring each one across 5 checks: description quality, OpenAPI spec presence, body param descriptions, response codes, and…
Infrasity-Labs/dev-gtm-claude-skills
Audits any developer documentation site across 33 checks in 7 categories and produces a scored report (out of 100) with Pass / Warn / Fail status per check.
Infrasity-Labs/dev-gtm-claude-skills
Generates a 3-month SEO performance HTML report for any domain using DataForSEO data.
Infrasity-Labs/dev-gtm-claude-skills
Email triage system that handles both one-time setup and recurring triage in a single skill.
Infrasity-Labs/dev-gtm-claude-skills
Audits any domain's AI-readiness by using curl to directly probe robots.txt, llms.txt, and llms-full.txt, then scores each file against a structured checklist and delivers a formatted report with…
Works with
Categories
Generates a fully structured SEO content brief for a target keyword and optionally pushes it to a Notion database. Content Brief is an agent skill from Infrasity-Labs/dev-gtm-claude-skills. Generates a fully structured SEO content brief for a target keyword and optionally pushes it to a Notion database.
Content Brief fits situations like: the user says create a content brief; brief this keyword; run a content brief for; generate a brief.
Run `npx skills add Infrasity-Labs/dev-gtm-claude-skills --skill content-brief -a claude-code`. Or copy the skill folder (notion-skills/content-brief in Infrasity-Labs/dev-gtm-claude-skills) into .claude/skills/content-brief in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Infrasity-Labs/dev-gtm-claude-skills --skill content-brief -a codex`. Or copy the skill folder (notion-skills/content-brief in Infrasity-Labs/dev-gtm-claude-skills) into .agents/skills/content-brief in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Infrasity-Labs/dev-gtm-claude-skills --skill content-brief -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/content-brief, .gemini/skills/content-brief, .github/skills/content-brief and .opencode/skills/content-brief in your project.
Going by SKILL.md and its folder, Content Brief needs Python for the scripts in its folder and the command-line tools its instructions call (python). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Content Brief is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.6k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Content Brief: SEO Content Gap Audit (rampstackco/claude-skills, 945 stars), SEO Keyword Gap Audit (rampstackco/claude-skills, 945 stars), Content Creator (sickn33/agentic-awesome-skills, 47k stars) and Local Content Strategy (garrettjsmith/localseoskills, 121 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Infrasity-Labs (a GitHub user) maintains it in Infrasity-Labs/dev-gtm-claude-skills, which has 136 GitHub stars. The repository holds 26 skills in this directory. The repository was last updated on June 28, 2026.
Source: Infrasity-Labs/dev-gtm-claude-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.