Not in the top 1,000 by GitHub stars
TheMattBerman/seo-kit
AI agent that finds keywords, writes content, monitors rankings, and self-improves. Two OpenClaw skills that chain into a compounding SEO loop.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/seo-agent/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → c57d77d182cf
No earlier version was observed for comparison.
skills/seo-checklist/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → c57d77d182cf
No earlier version was observed for comparison.
skills/seo-forge/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → c57d77d182cf
No earlier version was observed for comparison.
skills/seo-health/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → c57d77d182cf
No earlier version was observed for comparison.
skills/seo-images/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → c57d77d182cf
No earlier version was observed for comparison.
skills/seo-links/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → c57d77d182cf
No earlier version was observed for comparison.
Verified commit c57d77d182cf3db76cb19cc68c2f7651accc2e9a
git clone --filter=blob:none --no-checkout https://github.com/TheMattBerman/seo-kit.git .hotskills/themattberman-seo-kit && git -C .hotskills/themattberman-seo-kit checkout --detach c57d77d182cf3db76cb19cc68c2f7651accc2e9a
# Copy each selected skill directory from .hotskills/themattberman-seo-kit into .agents/skills/<skill-name>/Heat
Insufficient historyNot enough history yet to measure heat. It appears after a few days of data.
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- seo-agent
skills/seo-agent - seo-checklist
skills/seo-checklist - seo-forge
skills/seo-forge - seo-health
skills/seo-health - seo-images
skills/seo-images - seo-links
skills/seo-links
How it works
seo-agent
When your agent uses it
Self-improving SEO system. Finds keywords via DataForSEO, writes content that ranks, monitors GSC for what's climbing, then writes MORE content to push winners higher. A feedback loop, not a one-shot tool.
What it loads into context
Frontmatter
113 tokensAlways available to the agent
SKILL.md
1,971 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The Loop
- The Strike Zone
- Scripts
- Configuration
- Setup
- Running the Full Loop
- How Claude Uses This
- DataForSEO Endpoints Used
- Output Files
- Why This Works
Scripts executed separately
scripts/seo-compete.shscripts/seo-discover.shscripts/seo-monitor.sh
Files
SKILL.mdcore8,099 bytesSKILL.mdcore8,099 bytesSKILL.mdcore8,099 bytesSKILL.mdcore8,099 bytesSKILL.mdcore8,099 bytesSKILL.mdcore8,099 bytesSKILL.mdcore8,099 bytesSKILL.mdcore8,099 bytesSKILL.mdcore8,099 bytesscripts/seo-compete.shruns8,097 bytesscripts/seo-discover.shruns12,088 bytesscripts/seo-monitor.shruns11,629 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubseo-checklist
When your agent uses it
SEO technical checklist and publishing reference. Meta tags, schema markup, llms.txt, topical authority, internal linking rules, Core Web Vitals targets, and image optimization. The agent uses this when publishing content. You can use it to audit existing pages.
What it loads into context
Frontmatter
123 tokensAlways available to the agent
SKILL.md
524 tokensWhen the skill is activated
Reference documents
1,700 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What's Covered
- How the Agent Uses This
- How You Use This
Files
CHECKLIST.mddoc6,500 bytesSKILL.mdcore2,381 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubseo-forge
When your agent uses it
Matt Berman's custom SEO content engine. Learns your brand through a smart interview, then creates content that ranks AND converts using Puppet Strings, Scroll Traps, and Care To Click psychology. Anti-AI-Overview by design. DataForSEO integrated. The content your competitors can't copy because it requires real experience.
What it loads into context
Frontmatter
142 tokensAlways available to the agent
SKILL.md
6,560 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Three Operating Modes
- The Psychology Frameworks
- The "Only I Can Write This" Test
- Anti-AI-Overview Strategy
- DataForSEO Integration
- Matt's Voice Rules
- The Full Workflow
- File Output Format
- How This Connects
- Invocation
- Implementation Notes
- The Test
- Feedback Loop
- Image Generation (via seo-images skill)
Scripts executed separately
scripts/seo-check.shscripts/seo-interview.shscripts/seo-research.sh
Files
SKILL.mdcore28,723 bytesSKILL.mdcore28,723 bytesSKILL.mdcore28,723 bytesscripts/seo-check.shruns4,244 bytesscripts/seo-interview.shruns6,416 bytesscripts/seo-research.shruns6,372 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubseo-health
When your agent uses it
Technical SEO monitoring. Weekly PageSpeed audits, Core Web Vitals tracking, crawl health checks, image optimization, and mobile usability. Catches problems before they tank your rankings.
What it loads into context
Frontmatter
123 tokensAlways available to the agent
SKILL.md
1,271 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Scripts
- Weekly Health Check Workflow
- Snapshots and Trending
- Thresholds
- How This Connects to the Loop
Scripts executed separately
scripts/health-crawl.shscripts/health-images.shscripts/health-speed.sh
Files
SKILL.mdcore4,846 bytesSKILL.mdcore4,846 bytesSKILL.mdcore4,846 bytesSKILL.mdcore4,846 bytesSKILL.mdcore4,846 bytesSKILL.mdcore4,846 bytesscripts/health-crawl.shruns4,405 bytesscripts/health-images.shruns2,921 bytesscripts/health-speed.shruns4,786 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubseo-images
When your agent uses it
Generate premium SEO article images using Nano Banana 2. Six locked-in visual styles with cinema-grade JSON prompts. No stock photo slop.
What it loads into context
Frontmatter
135 tokensAlways available to the agent
SKILL.md
3,121 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick Start
- Setup
- How It Works
- The 6 Visual Styles
- Prompt Architecture
- Generating Images
- Reference Images
- API Reference
- Prompt Flattening
- Tips
Scripts executed separately
scripts/generate.sh
Files
SKILL.mdcore12,144 bytesSKILL.mdcore12,144 bytesSKILL.mdcore12,144 bytesSKILL.mdcore12,144 bytesSKILL.mdcore12,144 bytesSKILL.mdcore12,144 bytesSKILL.mdcore12,144 bytesSKILL.mdcore12,144 bytesSKILL.mdcore12,144 bytesSKILL.mdcore12,144 bytesscripts/generate.shruns15,085 bytesstyles/cinematic_scene.jsonasset8,012 bytesstyles/dark_data.jsonasset6,491 bytesstyles/founder_editorial.jsonasset8,745 bytesstyles/product_lifestyle.jsonasset7,219 bytesstyles/social_card.jsonasset6,404 bytesstyles/verticals.jsonasset7,634 bytesstyles/warm_lifestyle.jsonasset6,682 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubseo-links
When your agent uses it
Backlink acquisition engine. Mines competitor backlinks, finds unlinked brand mentions, discovers broken link opportunities, audits internal linking, and prospects resource pages. Turns link building from guesswork into a repeatable system.
What it loads into context
Frontmatter
135 tokensAlways available to the agent
SKILL.md
1,325 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Scripts
- Weekly Link Building Workflow
- How This Connects to the Loop
Scripts executed separately
scripts/link-broken.shscripts/link-internal.shscripts/link-mentions.shscripts/link-mine.shscripts/link-prospect.sh
Files
SKILL.mdcore5,715 bytesSKILL.mdcore5,715 bytesSKILL.mdcore5,715 bytesSKILL.mdcore5,715 bytesSKILL.mdcore5,715 bytesSKILL.mdcore5,715 bytesSKILL.mdcore5,715 bytesSKILL.mdcore5,715 bytesSKILL.mdcore5,715 bytesSKILL.mdcore5,715 bytesSKILL.mdcore5,715 bytesscripts/link-broken.shruns1,806 bytesscripts/link-internal.shruns2,464 bytesscripts/link-mentions.shruns1,453 bytesscripts/link-mine.shruns3,145 bytesscripts/link-prospect.shruns1,539 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubSkills included
- seo-agent
- seo-checklist
- seo-forge
- seo-health
- seo-images
- seo-links
Repository facts
- License
- No license detected
- Created
- Mar 1, 2026
- Last pushed
- Mar 8, 2026
- Forks
- 26
- Open issues
- 0
- Project activity
- Slowing
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 34 notes
skills/seo-agent/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-agent/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-agent/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-agent/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-agent/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-agent/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-agent/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-agent/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-forge/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-forge/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-health/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-health/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-health/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-health/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-health/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-images/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-images/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-images/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-images/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/seo-images/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- 1 broad permissionin 1 file: seo-images/SKILL.md:1
- No dangerous shell commands
- 176 network referencesin 19 files: seo-checklist/CHECKLIST.md:23 seo-health/scripts/health-crawl.sh:6 seo-images/scripts/generate.sh:269 and 16 more
- No hidden or obfuscated text
- No instruction overrides
- 15 executable scriptsin 15 files: seo-agent/scripts/seo-compete.sh:1 seo-agent/scripts/seo-discover.sh:1 seo-agent/scripts/seo-monitor.sh:1 and 12 more
- 26 references to secretsin 8 files: seo-images/SKILL.md:50 seo-images/scripts/generate.sh:269 seo-agent/scripts/seo-discover.sh:86 and 5 more
- No requests to vote in Hot
Show all 218 signals by file
skills/seo-agent/SKILL.md
- Network accessline 6
emoji: "🔄" user-invocable: true homepage: https://bigplayers.co - Network accessline 7
user-invocable: true homepage: https://bigplayers.co requires: - Network accessline 8
homepage: https://bigplayers.co - Network accessline 65
All scripts live in `~/clawd/skills/seo-agent/scripts/`. All use bash + curl + jq. No Python. No npm. - Access to secretsline 150
[Credential-related source omitted] - Network accessline 152
### 3. Your Site URL Find your exact property URL in [Search Console](https://search.google.com/search-console). It's either: - Network accessline 153
Find your exact property URL in [Search Console](https://search.google.com/search-console). It's either: - Network accessline 154
- `https://example.com` (URL prefix property) - Network accessline 211
API base: `https://api.dataforseo.com`
skills/seo-agent/scripts/seo-compete.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 14
DFS_BASE="https://api.dataforseo.com" - Network accessline 49
RAW_SITE=$(grep '^site:' "$CONFIG_FILE" | sed 's/site: *"//' | tr -d '"' | tr -d "'") SITE=$(echo "$RAW_SITE" | sed 's|sc-domain:||' | sed 's|https://||' | sed 's|/$||') - Network accessline 50
SITE=$(echo "$RAW_SITE" | sed 's|sc-domain:||' | sed 's|https://||' | sed 's|/$||') - Network accessline 59
SITE=$(echo "$SITE" | sed 's|sc-domain:||' | sed 's|https://||' | sed 's|/$||') - Network accessline 88
INTERSECTION=$(curl -s -X POST "$DFS_BASE/v3/dataforseo_labs/google/domain_intersection/live" \ - Network accessline 140
COMP_PAGES=$(curl -s -X POST "$DFS_BASE/v3/dataforseo_labs/google/competitors_domain/live" \
skills/seo-agent/scripts/seo-discover.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 16
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" GSC_AUTH_SCRIPT="$HOME/clawd/skills/gsc-report/scripts/get-token.sh" DFS_BASE="https://api.dataforseo.com" - Network accessline 17
GSC_AUTH_SCRIPT="$HOME/clawd/skills/gsc-report/scripts/get-token.sh" DFS_BASE="https://api.dataforseo.com" CONFIG_FILE="$HOME/clawd/workspace/seo-agent/config.yaml" - Network accessline 18
DFS_BASE="https://api.dataforseo.com" - Access to secretsline 86
[Credential-related source omitted] - Network accessline 100
[Credential-related source omitted] - Access to secretsline 100
[Credential-related source omitted] - Network accessline 101
"https://searchconsole.googleapis.com/webmasters/v3/sites/${ENCODED_SITE}/searchAnalytics/query" \ - Access to secretsline 102
[Credential-related source omitted] - Network accessline 159
DFS_SUGGESTIONS=$(curl -s -X POST "$DFS_BASE/v3/dataforseo_labs/google/keyword_suggestions/live" \ - Network accessline 181
DFS_RELATED=$(curl -s -X POST "$DFS_BASE/v3/keywords_data/google_ads/keywords_for_keywords/live" \ - Network accessline 204
DFS_VOLUME=$(curl -s -X POST "$DFS_BASE/v3/keywords_data/google_ads/search_volume/live" \
skills/seo-agent/scripts/seo-monitor.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 53
SITE_SLUG=$(echo "$SITE" | sed 's|sc-domain:||' | sed 's|https://||' | sed 's|/|_|g' | sed 's|\.|_|g') - Network accessline 78
[Credential-related source omitted] - Access to secretsline 78
[Credential-related source omitted] - Network accessline 79
"https://searchconsole.googleapis.com/webmasters/v3/sites/${ENCODED_SITE}/searchAnalytics/query" \ - Access to secretsline 80
[Credential-related source omitted]
skills/seo-checklist/CHECKLIST.md
- Network accessline 23
<meta property="og:title" content="Your Title" /> <meta property="og:description" content="Your description" /> <meta property="og:image" content="https://yoursite.com/og-image.jpg" /> - Network accessline 24
<meta property="og:description" content="Your description" /> <meta property="og:image" content="https://yoursite.com/og-image.jpg" /> <meta property="og:url" content="https://yoursite.com/page" /> - Network accessline 25
<meta property="og:image" content="https://yoursite.com/og-image.jpg" /> - Network accessline 26
<meta property="og:url" content="https://yoursite.com/page" /> - Network accessline 34
<meta name="twitter:title" content="Your Title" /> <meta name="twitter:description" content="Your description" /> <meta name="twitter:image" content="https://yoursite.com/twitter-image.jpg" /> - Network accessline 36
<meta name="twitter:image" content="https://yoursite.com/twitter-image.jpg" /> - Network accessline 47
{ "@context": "https://schema.org", - Network accessline 48
"@context": "https://schema.org", - Network accessline 52
"@type": "Person", "name": "Author Name", "url": "https://yoursite.com/about" - Network accessline 53
"name": "Author Name", "url": "https://yoursite.com/about" }, - Network accessline 54
"url": "https://yoursite.com/about" - Network accessline 61
"logo": { "@type": "ImageObject", "url": "https://yoursite.com/logo.png" - Network accessline 62
"@type": "ImageObject", "url": "https://yoursite.com/logo.png" } - Network accessline 63
"url": "https://yoursite.com/logo.png" - Network accessline 64
} }, "image": "https://yoursite.com/article-image.jpg", - Network accessline 65
}, "image": "https://yoursite.com/article-image.jpg", "description": "Meta description here" - Network accessline 66
"image": "https://yoursite.com/article-image.jpg", - Network accessline 73
{ "@context": "https://schema.org", - Network accessline 74
"@context": "https://schema.org", - Network accessline 91
{ "@context": "https://schema.org", - Network accessline 92
"@context": "https://schema.org", - Network accessline 107
{ "@context": "https://schema.org", - Network accessline 108
"@context": "https://schema.org", - Network accessline 109
"@type": "Organization", "name": "Your Brand", "url": "https://yoursite.com", - Network accessline 110
"name": "Your Brand", "url": "https://yoursite.com", "logo": "https://yoursite.com/logo.png", - Network accessline 111
"url": "https://yoursite.com", - Network accessline 112
"logo": "https://yoursite.com/logo.png", - Network accessline 113
"sameAs": [ "https://twitter.com/yourbrand", "https://linkedin.com/company/yourbrand" - Network accessline 114
"https://twitter.com/yourbrand", - Network accessline 115
"https://linkedin.com/company/yourbrand" - Network accessline 140
## Key Content - [Topic Guide](https://yoursite.com/guide): Description - Network accessline 141
- [Topic Guide](https://yoursite.com/guide): Description - Network accessline 142
- [Resource](https://yoursite.com/resource): Description - Network accessline 144
## Contact - Website: https://yoursite.com - Network accessline 145
- Website: https://yoursite.com - Network accessline 212
Disallow: /admin/ Disallow: /api/ Sitemap: https://yoursite.com/sitemap.xml - Network accessline 214
Sitemap: https://yoursite.com/sitemap.xml - Network accessline 220
<link rel="canonical" href="https://yoursite.com/this-page" />
skills/seo-checklist/SKILL.md
skills/seo-forge/SKILL.md
- Access to secretsline 667
[Credential-related source omitted]
skills/seo-forge/scripts/seo-check.sh
- Executable scriptline 1
#!/usr/bin/env bash
skills/seo-forge/scripts/seo-interview.sh
- Executable scriptline 1
#!/usr/bin/env bash
skills/seo-forge/scripts/seo-research.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 12
LANG="en" JSON_MODE=false DFS_API="https://api.dataforseo.com/v3" - Network accessline 14
DFS_API="https://api.dataforseo.com/v3" - Network accessline 87
SERP_RESPONSE=$(curl -s \ - Network accessline 88
-u "$DATAFORSEO_LOGIN:$DATAFORSEO_PASSWORD" \ -X POST "$DFS_API/serp/google/organic/live/advanced" \ -H "Content-Type: application/json" \ - Network accessline 89
-X POST "$DFS_API/serp/google/organic/live/advanced" \ - Network accessline 103
VOLUME_RESPONSE=$(curl -s \ - Network accessline 104
-u "$DATAFORSEO_LOGIN:$DATAFORSEO_PASSWORD" \ -X POST "$DFS_API/keywords_data/google_ads/search_volume/live" \ -H "Content-Type: application/json" \ - Network accessline 105
-X POST "$DFS_API/keywords_data/google_ads/search_volume/live" \ - Network accessline 119
RELATED_RESPONSE=$(curl -s \ - Network accessline 120
-u "$DATAFORSEO_LOGIN:$DATAFORSEO_PASSWORD" \ -X POST "$DFS_API/keywords_data/google_ads/keywords_for_keywords/live" \ -H "Content-Type: application/json" \ - Network accessline 121
-X POST "$DFS_API/keywords_data/google_ads/keywords_for_keywords/live" \
skills/seo-health/SKILL.md
skills/seo-health/scripts/health-crawl.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 6
DOMAIN="${1:?Usage: health-crawl.sh <domain> [--sitemap URL] [--limit 50]}" SITEMAP="https://${DOMAIN}/sitemap.xml" - Network accessline 7
SITEMAP="https://${DOMAIN}/sitemap.xml" - Network accessline 18
echo "🕷<U+FE0F> Crawl Health Audit: $DOMAIN" echo "Sitemap: $SITEMAP" - Network accessline 19
echo "Sitemap: $SITEMAP" - Network accessline 23
echo "" echo "📋 robots.txt" ROBOTS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"I "https://${DOMAIN}/robots.txt" -o /dev/null -w "%{http_code}") - Network accessline 24
echo "📋 robots.txt" ROBOTS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"I "https://${DOMAIN}/robots.txt" -o /dev/null -w "%{http_code}") if [[ "$ROBOTS" == "200" ]]; then - Network accessline 25
ROBOTS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"I "https://${DOMAIN}/robots.txt" -o /dev/null -w "%{http_code}") - Network accessline 26
if [[ "$ROBOTS" == "200" ]]; then echo " ✅ robots.txt exists" SITEMAP_IN_ROBOTS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)" "https://${DOMAIN}/robots.txt" | grep -i "sitemap" || true) - Network accessline 27
echo " ✅ robots.txt exists" SITEMAP_IN_ROBOTS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)" "https://${DOMAIN}/robots.txt" | grep -i "sitemap" || true) if [[ -n "$SITEMAP_IN_ROBOTS" ]]; then - Network accessline 28
SITEMAP_IN_ROBOTS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)" "https://${DOMAIN}/robots.txt" | grep -i "sitemap" || true) - Network accessline 39
echo "" echo "🗺<U+FE0F> Sitemap" SITEMAP_STATUS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"I "$SITEMAP" -o /dev/null -w "%{http_code}") - Network accessline 40
echo "🗺<U+FE0F> Sitemap" SITEMAP_STATUS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"I "$SITEMAP" -o /dev/null -w "%{http_code}") if [[ "$SITEMAP_STATUS" == "200" ]]; then - Network accessline 41
SITEMAP_STATUS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"I "$SITEMAP" -o /dev/null -w "%{http_code}") - Network accessline 42
if [[ "$SITEMAP_STATUS" == "200" ]]; then URLS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L "$SITEMAP" | grep -oP '<loc>\K[^<]+' | head -"$LIMIT") URL_COUNT=$(wc -l <<< "$URLS") - Network accessline 43
URLS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L "$SITEMAP" | grep -oP '<loc>\K[^<]+' | head -"$LIMIT") - Network accessline 47
echo " ❌ Sitemap not accessible ($SITEMAP_STATUS)" echo " Trying sitemap_index..." URLS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L "$SITEMAP" | grep -oP '<loc>\K[^<]+' | head -3 | while read -r SUB; do - Network accessline 48
echo " Trying sitemap_index..." URLS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L "$SITEMAP" | grep -oP '<loc>\K[^<]+' | head -3 | while read -r SUB; do curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L "$SUB" 2>/dev/null | - Network accessline 49
URLS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L "$SITEMAP" | grep -oP '<loc>\K[^<]+' | head -3 | while read -r SUB; do - Network accessline 50
curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L "$SUB" 2>/dev/null | grep -oP '<loc>\K[^<]+' | head -20 - Network accessline 73
RESPONSE=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L --max-time 10 -w "\n%{http_code}" "$PAGE" 2>/dev/null) - Network accessline 77
SLUG=$(echo "$PAGE" | sed "s|https://${DOMAIN}||")
skills/seo-health/scripts/health-images.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 12
SITEMAP="https://${DOMAIN}/sitemap.xml" URLS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L "$SITEMAP" 2>/dev/null | grep -oP '<loc>\K[^<]+' | head -"$PAGES") - Network accessline 13
URLS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L "$SITEMAP" 2>/dev/null | grep -oP '<loc>\K[^<]+' | head -"$PAGES") - Network accessline 15
[[ -z "$URLS" ]] && { echo "No sitemap found. Checking homepage only."; URLS="https://${DOMAIN}"; } - Network accessline 24
while IFS= read -r PAGE; do [[ -z "$PAGE" ]] && continue SLUG=$(echo "$PAGE" | sed "s|https://${DOMAIN}||") - Network accessline 25
[[ -z "$PAGE" ]] && continue SLUG=$(echo "$PAGE" | sed "s|https://${DOMAIN}||") [[ -z "$SLUG" ]] && SLUG="/" - Network accessline 26
SLUG=$(echo "$PAGE" | sed "s|https://${DOMAIN}||") - Network accessline 29
BODY=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L --max-time 10 "$PAGE" 2>/dev/null) - Network accessline 75
done <<< "$URLS"
skills/seo-health/scripts/health-speed.sh
- Executable scriptline 1
#!/usr/bin/env bash - Access to secretsline 7
[Credential-related source omitted] - Network accessline 9
check_speed() { local url="$1" strategy="$2" local api_url="https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=${url}&strategy=${strategy}&category=performance&category=seo&category=accessibility" - Network accessline 10
local url="$1" strategy="$2" local api_url="https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=${url}&strategy=${strategy}&category=performance&category=seo&category=accessibility" [[ -n "$API_KEY" ]] && api_url="${api_url}& - Network accessline 11
local api_url="https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=${url}&strategy=${strategy}&category=performance&category=seo&category=accessibility" - Access to secretsline 12
[Credential-related source omitted] - Network accessline 14
echo "📱 Checking ${strategy}..." local response response=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)" "$api_url") - Network accessline 16
response=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)" "$api_url")
skills/seo-images/SKILL.md
- Broad permissionsline 1
Bash, Read, Write, WebFetch - Network accessline 17
bins: - curl - jq - Network accessline 18
- curl - jq --- - Network accessline 49
# Get your API token from https://replicate.com/account/api-tokens - Access to secretsline 50
[Credential-related source omitted] - Network accessline 60
# Get your API key from https://aistudio.google.com/apikey - Access to secretsline 61
[Credential-related source omitted] - Network accessline 64
**Model:** `gemini-3.1-flash-image-preview` **Cost:** Free tier available (rate limited), then pay-as-you-go **Endpoint:** `https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent` - Network accessline 66
**Endpoint:** `https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent` - Access to secretsline 71
[Credential-related source omitted] - Access to secretsline 175
[Credential-related source omitted] - Network accessline 237
[Credential-related source omitted] - Access to secretsline 237
[Credential-related source omitted] - Access to secretsline 238
[Credential-related source omitted] - Network accessline 242
"prompt": "your flattened prompt here", "image_input": ["https://url-to-reference-image.png"], - Network accessline 243
"image_input": ["https://url-to-reference-image.png"], - Network accessline 256
# Create prediction curl -s -X POST "https://api.replicate.com/v1/models/google/nano-banana-2/predictions" \ - Network accessline 257
[Credential-related source omitted] - Access to secretsline 257
[Credential-related source omitted] - Access to secretsline 258
[Credential-related source omitted] - Network accessline 272
[Credential-related source omitted] - Network accessline 273
[Credential-related source omitted] - Access to secretsline 273
[Credential-related source omitted] - Network accessline 274
"https://api.replicate.com/v1/predictions/{prediction_id}" - Network accessline 291
[Credential-related source omitted] - Access to secretsline 291
[Credential-related source omitted] - Network accessline 292
[Credential-related source omitted] - Access to secretsline 292
[Credential-related source omitted]
skills/seo-images/scripts/generate.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 269
[Credential-related source omitted] - Access to secretsline 269
[Credential-related source omitted] - Network accessline 270
echo "ERROR: REPLICATE_API_TOKEN not set" echo "Get your token at https://replicate.com/account/api-tokens" exit 1 - Network accessline 271
echo "Get your token at https://replicate.com/account/api-tokens" - Network accessline 287
for i in $(seq 1 "$VARIATIONS"); do RESPONSE=$(curl -s -X POST "https://api.replicate.com/v1/models/google/nano-banana-2/predictions" \ - Network accessline 288
[Credential-related source omitted] - Access to secretsline 288
[Credential-related source omitted] - Access to secretsline 289
[Credential-related source omitted] - Network accessline 324
OUT_FILE="$OUTPUT" fi curl -s -o "$OUT_FILE" "$IMAGE_URL" - Network accessline 325
fi curl -s -o "$OUT_FILE" "$IMAGE_URL" echo "✅ Saved: $OUT_FILE" - Network accessline 326
curl -s -o "$OUT_FILE" "$IMAGE_URL" - Network accessline 334
[Credential-related source omitted] - Network accessline 335
[Credential-related source omitted] - Network accessline 336
[Credential-related source omitted] - Access to secretsline 336
[Credential-related source omitted] - Network accessline 337
"https://api.replicate.com/v1/predictions/$PRED_ID") - Network accessline 347
OUT_FILE="$OUTPUT" fi curl -s -o "$OUT_FILE" "$IMAGE_URL" - Network accessline 348
fi curl -s -o "$OUT_FILE" "$IMAGE_URL" echo "✅ Saved: $OUT_FILE" - Network accessline 349
curl -s -o "$OUT_FILE" "$IMAGE_URL" - Network accessline 358
[Credential-related source omitted] - Network accessline 359
[Credential-related source omitted] - Network accessline 360
[Credential-related source omitted] - Access to secretsline 360
[Credential-related source omitted]
skills/seo-links/SKILL.md
skills/seo-links/scripts/link-broken.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 12
RESPONSE=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)" -X POST "https://api.dataforseo.com/v3/serp/google/organic/live/advanced" \ - Network accessline 31
LINKS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L --max-time 10 "$URL" 2>/dev/null | grep -oP 'href="\K[^"]+' | grep '^http' | sort -u | head -20) - Network accessline 32
for LINK in $LINKS; do STATUS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"I --max-time 5 -o /dev/null -w "%{http_code}" "$LINK" 2>/dev/null || echo "000") if [[ "$STATUS" == "404" || "$STATUS" == "410" || "$STATUS" == "00 - Network accessline 33
STATUS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"I --max-time 5 -o /dev/null -w "%{http_code}" "$LINK" 2>/dev/null || echo "000")
skills/seo-links/scripts/link-internal.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 5
DOMAIN="${1:?Usage: link-internal.sh <your-domain> [--sitemap URL]}" SITEMAP="${3:-https://${DOMAIN}/sitemap.xml}" - Network accessline 6
SITEMAP="${3:-https://${DOMAIN}/sitemap.xml}" - Network accessline 8
echo "🕸<U+FE0F> Auditing internal links for: $DOMAIN" echo "Sitemap: $SITEMAP" - Network accessline 9
echo "Sitemap: $SITEMAP" - Network accessline 12
echo "" echo "Fetching sitemap..." URLS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L "$SITEMAP" 2>/dev/null | grep -oP '<loc>\K[^<]+' | head -50) - Network accessline 14
URLS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L "$SITEMAP" 2>/dev/null | grep -oP '<loc>\K[^<]+' | head -50) - Network accessline 16
if [[ -z "$URLS" ]]; then echo "No sitemap found or empty. Trying sitemap_index..." URLS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L "$SITEMAP" 2>/dev/null | grep -oP '<loc>\K[^<]+' | head -5 | while read -r SUB; do - Network accessline 17
echo "No sitemap found or empty. Trying sitemap_index..." URLS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L "$SITEMAP" 2>/dev/null | grep -oP '<loc>\K[^<]+' | head -5 | while read -r SUB; do curl -s -A "Mozilla/5.0 (compatible - Network accessline 18
URLS=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L "$SITEMAP" 2>/dev/null | grep -oP '<loc>\K[^<]+' | head -5 | while read -r SUB; do - Network accessline 19
curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L "$SUB" 2>/dev/null | grep -oP '<loc>\K[^<]+' | head -20 - Network accessline 39
while IFS= read -r PAGE; do SLUG=$(echo "$PAGE" | sed "s|https://${DOMAIN}||") - Network accessline 40
SLUG=$(echo "$PAGE" | sed "s|https://${DOMAIN}||") - Network accessline 44
while IFS= read -r PAGE; do BODY=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L --max-time 10 "$PAGE" 2>/dev/null) - Network accessline 45
BODY=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)"L --max-time 10 "$PAGE" 2>/dev/null) - Network accessline 46
INTERNAL_LINKS=$(echo "$BODY" | grep -oP "href=\"\K[^\"]*" | grep -E "^/|^https://${DOMAIN}" | sed "s|https://${DOMAIN}||" | sort -u) - Network accessline 48
SLUG=$(echo "$PAGE" | sed "s|https://${DOMAIN}||")
skills/seo-links/scripts/link-mentions.sh
skills/seo-links/scripts/link-mine.sh
skills/seo-links/scripts/link-prospect.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 20
echo "" echo "--- Query: $Q ---" RESPONSE=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)" -X POST "https://api.dataforseo.com/v3/serp/google/organic/live/advanced" \ - Network accessline 21
echo "--- Query: $Q ---" RESPONSE=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)" -X POST "https://api.dataforseo.com/v3/serp/google/organic/live/advanced" \ -u "${DATAFORSEO_LOGIN}:${DATAFORSEO_PASSWORD}" \ - Network accessline 22
RESPONSE=$(curl -s -A "Mozilla/5.0 (compatible; SEOKit/1.0)" -X POST "https://api.dataforseo.com/v3/serp/google/organic/live/advanced" \
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Signal confidence: 218 facts
- Network access in the frontmatter of the SKILL.mdseo-agent/SKILL.md:6Low confidence
- Network access in the frontmatter of the SKILL.mdseo-agent/SKILL.md:7Low confidence
- Network access in the frontmatter of the SKILL.mdseo-agent/SKILL.md:8Low confidence
- Network access in prose of the SKILL.mdseo-agent/SKILL.md:65Low confidence
- Access to secrets in prose of the SKILL.mdseo-agent/SKILL.md:150Low confidence
- Network access in prose of the SKILL.mdseo-agent/SKILL.md:152Low confidence
- Network access in prose of the SKILL.mdseo-agent/SKILL.md:153Low confidence
- Network access in prose of the SKILL.mdseo-agent/SKILL.md:154Low confidence
- Network access in prose of the SKILL.mdseo-agent/SKILL.md:211Low confidence
- Executable script in code of a file that runsseo-agent/scripts/seo-compete.sh:1High confidence
- Network access in code of a file that runsseo-agent/scripts/seo-compete.sh:14High confidence
- Network access in code of a file that runsseo-agent/scripts/seo-compete.sh:49High confidence
- Network access in code of a file that runsseo-agent/scripts/seo-compete.sh:50High confidence
- Network access in code of a file that runsseo-agent/scripts/seo-compete.sh:59High confidence
- Network access in code of a file that runsseo-agent/scripts/seo-compete.sh:88High confidence
- Network access in code of a file that runsseo-agent/scripts/seo-compete.sh:140High confidence
- Executable script in code of a file that runsseo-agent/scripts/seo-discover.sh:1High confidence
- Network access in code of a file that runsseo-agent/scripts/seo-discover.sh:16High confidence
- Network access in code of a file that runsseo-agent/scripts/seo-discover.sh:17High confidence
- Network access in code of a file that runsseo-agent/scripts/seo-discover.sh:18High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueseo-agent/scripts/seo-discover.sh:86Low confidence
- Network access in code of a file that runsseo-agent/scripts/seo-discover.sh:100High confidence
- Access to secrets in code of a file that runsseo-agent/scripts/seo-discover.sh:100High confidence
- Network access in code of a file that runsseo-agent/scripts/seo-discover.sh:101High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueseo-agent/scripts/seo-discover.sh:102Low confidence
- Network access in code of a file that runsseo-agent/scripts/seo-discover.sh:159High confidence
- Network access in code of a file that runsseo-agent/scripts/seo-discover.sh:181High confidence
- Network access in code of a file that runsseo-agent/scripts/seo-discover.sh:204High confidence
- Executable script in code of a file that runsseo-agent/scripts/seo-monitor.sh:1High confidence
- Network access in code of a file that runsseo-agent/scripts/seo-monitor.sh:53High confidence
- Network access in code of a file that runsseo-agent/scripts/seo-monitor.sh:78High confidence
- Access to secrets in code of a file that runsseo-agent/scripts/seo-monitor.sh:78High confidence
- Network access in code of a file that runsseo-agent/scripts/seo-monitor.sh:79High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueseo-agent/scripts/seo-monitor.sh:80Low confidence
- Network access in code of documentationseo-checklist/CHECKLIST.md:23Low confidence
- Network access in code of documentationseo-checklist/CHECKLIST.md:24Low confidence
- Network access in code of documentationseo-checklist/CHECKLIST.md:25Low confidence
- Network access in code of documentationseo-checklist/CHECKLIST.md:26Low confidence
- Network access in code of documentationseo-checklist/CHECKLIST.md:34Low confidence
- Network access in code of documentationseo-checklist/CHECKLIST.md:36Low confidence
- Network access in code of documentationseo-checklist/CHECKLIST.md:47Low confidence
- Network access in code of documentationseo-checklist/CHECKLIST.md:48Low confidence
- Network access in code of documentationseo-checklist/CHECKLIST.md:52Low confidence
- Network access in code of documentationseo-checklist/CHECKLIST.md:53Low confidence
- Network access in code of documentationseo-checklist/CHECKLIST.md:54Low confidence
- Network access in code of documentationseo-checklist/CHECKLIST.md:61Low confidence
- Network access in code of documentationseo-checklist/CHECKLIST.md:62Low confidence
- Network access in code of documentationseo-checklist/CHECKLIST.md:63Low confidence
- Network access in code of documentationseo-checklist/CHECKLIST.md:64Low confidence
- Network access in code of documentationseo-checklist/CHECKLIST.md:65Low confidence
and 168 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Frontmatter field user-invocable in skills/seo-images/SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Native | Manifest AGENTS.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/seo-agent/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/seo-agent/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/seo-agent/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/seo-agent/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.