Agent skill
seo-ops
Filed under Content and SEO.
From ericosiu/ai-marketing-skills · 21 skills · 3,449 · pushed 2026-08-16
What it does when it runs
Read from the skill and the 7 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- AHREFS_TOKEN
- BRAVE_API_KEY
- CLIENT_SECRET
- GOOGLE_CLIENT_SECRET
- Hosts it reaches
- accounts.google.com
- ahrefs.com
- api.ahrefs.com
- api.search.brave.com
- brave.com
- console.cloud.google.com
- hacker-news.firebaseio.com
- levelingup.beehiiv.com
- news.ycombinator.com
- oauth2.googleapis.com
- reddit.com
- singlebrain.com
- trends.google.com
- www.example.com
- www.googleapis.com
- www.reddit.com
- www.singlegrain.com
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It does act, so it runs under whatever permissions your session already grants. - Actions present in the files
- shellwrites filesnetwork
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/ericosiu/ai-marketing-skills.git /tmp/ai-marketing-skills git -C /tmp/ai-marketing-skills sparse-checkout set "seo-ops" mkdir -p ~/.claude/skills/seo-ops cp -R "/tmp/ai-marketing-skills/seo-ops/." ~/.claude/skills/seo-ops/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
Before you install: this skill will not complete its job on a bare agent. It needs AHREFS_TOKEN, BRAVE_API_KEY, CLIENT_SECRET, GOOGLE_CLIENT_SECRET, which you have to obtain separately.
The skill
Source on GitHub ↗Reproduced in full from ericosiu/ai-marketing-skills/blob/2eb0f34edb8d6111ca8b2930fed92413c9af7002/seo-ops/SKILL.md, which is licensed MIT (repository). 798 words, 20 headings.
AI SEO Ops
Preamble (runs on skill start)
# Version check (silent if up to date)
python3 telemetry/version_check.py 2>/dev/null || true
# Telemetry opt-in (first run only, then remembers your choice)
python3 telemetry/telemetry_init.py 2>/dev/null || true
Privacy: This skill logs usage locally to
~/.ai-marketing-skills/analytics/. Remote telemetry is opt-in only. No code, file paths, or repo content is ever collected. Seetelemetry/README.md.
AI-powered SEO operations: keyword intelligence, competitor gap analysis, GSC optimization, and trend detection.
When to Use
- User asks for keyword research, content brief, or SEO analysis
- User wants to find quick-win keywords from Google Search Console
- User needs a competitor gap analysis
- User wants to identify trending topics for content creation
- User asks about decaying content or traffic drops
- User wants a prioritized list of keywords to target
Tools
Content Attack Brief (content_attack_brief.py)
Full keyword intelligence pipeline. Requires AHREFS_TOKEN and GSC auth.
# Run the full brief
python content_attack_brief.py
What it produces:
- Topic fingerprint from your content library
- BOFU money keywords ranked by Impact × Confidence
- Trending keywords with sparkline visualizations
- Competitor gap analysis (keywords they rank for, you don't)
- Decaying page alerts (traffic drops >30%)
- Execution pipeline (auto-create → semi-auto → team)
Output: Prints formatted report to stdout + saves JSON to OUTPUT_DIR/content-attack-brief-latest.json
GSC Client (gsc_client.py)
Google Search Console API client. Works as CLI or importable library.
# CLI usage
python gsc_client.py --queries 50 --days 28
python gsc_client.py --striking # Striking distance keywords (pos 4-20)
python gsc_client.py --pages 100 --days 7
python gsc_client.py --trend # Daily click/impression trend
python gsc_client.py --devices # Mobile vs desktop split
python gsc_client.py --sites # List verified properties
python gsc_client.py --json --queries 25 # JSON output
# Library usage
from gsc_client import GSCClient
gsc = GSCClient()
rows = gsc.striking_distance(days=28, min_position=4, max_position=20)
for row in rows:
print(f"{row['keys'][0]}: pos {row['position']:.1f}, {row['impressions']} impressions")
GSC Auth (gsc_auth.py)
One-time OAuth setup for Google Search Console access.
python gsc_auth.py
# Opens browser → Google Sign-In → saves token locally
Trend Scout (trend_scout.py)
Multi-source trend detection. No API keys required for basic functionality.
python trend_scout.py
Sources: Google Trends RSS, Hacker News, Reddit, X/Twitter (needs BRAVE_API_KEY), YouTube outlier detection
Output: Prints summary + saves JSON to OUTPUT_DIR/flash-trends-latest.json and markdown report.
Configuration
All scripts read from environment variables. Copy .env.example to .env and fill in your values.
Required:
GSC_SITE_URL— your Google Search Console property URLGOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRET— for GSC OAuthYOUR_DOMAIN— your root domain
Optional:
AHREFS_TOKEN— enables Ahrefs keyword data and competitor analysisCOMPETITORS— comma-separated competitor domainsBRAVE_API_KEY— enables X/Twitter trend scanningCONTENT_VERTICALS— comma-separated topics for trend relevance scoringTREND_SUBREDDITS— comma-separated subreddits to monitor
Scoring Model
Keywords are scored on two axes:
Impact (0-10): Volume + CPC + Funnel Stage + Trend direction Confidence (0-10): Keyword Difficulty + Current ranking position + Topic authority
Priority = Impact × Confidence (max 100)
Funnel Classification
- BOFU: Commercial/transactional intent, or keywords containing "agency", "services", "pricing", "best", "vs", "hire"
- MOFU: Informational with buying signals — "how to", "guide", "roi", "case study"
- TOFU: Pure informational
Recommended Workflow
- Weekly: Run
content_attack_brief.pyfor the full intelligence report - Daily: Run
gsc_client.py --strikingto monitor striking distance keywords - 2x/week: Run
trend_scout.pyto catch trending topics early - Monthly: Review competitor gaps and adjust
COMPETITORSlist
SEO/AEO/GEO Closed Loop
Use analytics readbacks before promoting any SEO, AEO, GEO, or content-refresh playbook change.
Inputs:
- GSC clicks, impressions, CTR, average position, queries, pages
- GA4 sessions, engaged sessions, conversions, assisted leads
- Ahrefs rankings, backlinks, traffic estimates, keyword movement
- ClickFlow opportunities where available
- AI-search / answer-engine / GEO visibility where available
- CMS/page change log
Judgment:
- Compare baseline vs candidate windows.
- Segment by page, query, topic, intent, and source.
- Track confounders: seasonality, indexing lag, brand spikes, campaigns, tracking changes, and unrelated site edits.
Promotion rule:
- Promote the playbook patch only if the candidate beats baseline or exposes a repeatable signal.
- Otherwise mark it
unproven, keep testing, or rollback.
Common readback windows:
- Content refresh: 7, 14, 28, and 56 days
- New content: 14, 28, 56, and 90 days
- Technical SEO fix: daily for 7 days, then 28-day readback
- AEO/GEO visibility: weekly, because answer engines are noisy gremlins with citations
Required readback fields:
- change made
- owner
- page/query/topic affected
- baseline window
- candidate window
- source systems pulled
- primary and secondary metrics
- caveats
- decision: promote / keep testing / rollback / unproven
- next playbook patch
Dependencies
pip install -r requirements.txt
Files bundled with it
These load only when the skill asks for them, so they cost nothing until it runs.
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- ai-seo by coreyhaines31 · 45,947
- programmatic-seo by coreyhaines31 · 45,947
- seo-audit by coreyhaines31 · 45,947
- write-seo-geo-content by onvoyage-ai · 1,291
- programmatic-seo by OpenClaudia · 664
- seo-audit by OpenClaudia · 664
- seo-content-brief by OpenClaudia · 664
- seo-technical by shawnpang · 308
Need help setting it up?
This page tells you what seo-ops does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.