Not in the top 1,000 by GitHub stars

gbessoni/seobuild-onpage

SEOBuild Onpage - The first AI agent that writes pages Google ranks AND LLMs cite. One command in, ranking page out. Built on DeerFlow, powered by 2026 SEO + GEO strategies tested / working. Forensic competitive analysis, 500-token chunk architecture, entity consensus, verification tags. BYOK GSC, DataforSEO. Works w/ OpenClaw, Claude Code, Codex

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

SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

417f38706bc4 → 417f38706bc4

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 417f38706bc4

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 417f38706bc46a1a8e1c808267719d8eb76d1753

git clone --filter=blob:none --no-checkout https://github.com/gbessoni/seobuild-onpage.git .hotskills/gbessoni-seobuild-onpage && git -C .hotskills/gbessoni-seobuild-onpage checkout --detach 417f38706bc46a1a8e1c808267719d8eb76d1753 # Copy each selected skill directory from .hotskills/gbessoni-seobuild-onpage into .claude/skills/<skill-name>/
265GitHub stars
1star in 7 days
1skill in this repository
5commits in 30 days

Heat

2.9
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Nov 4, 2026265

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

seobuild-onpage

When your agent uses it

Write SEO pages that rank on Google AND get cited by LLMs. Uses live SERP data, 500-token chunk architecture, RAG optimization for Gemini 3.5 Flash, the Two-Gate AEO framework (retrieval-pool entry + selected-citation extraction), the Anti-NLP Stuffing Protocol (structural entity placement, no keyword-density stuffing), strict single-service local isolation, and the Reddit Test quality gate. Triggers on: "write an SEO page", "seo-agi", "seo page for [keyword]", "rank for [keyword]", "rewrite this page for SEO", "GEO", "AEO", "write a page that ranks".

What it loads into context

Frontmatter

211 tokens

Always available to the agent

SKILL.md

25,291 tokens

When the skill is activated

Reference documents

31,484 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. MASTER RULE -- THE ANTI-HALLUCINATION META-DIRECTIVE
  2. NEW IN v2.6.0 -- SEMANTIC STRICTNESS & CREDENTIAL PROMINENCE
  3. NEW IN v2.5.0 -- SPECIFICITY SCORING & FORMAT BANS
  4. NEW IN v2.4.0 -- DISCOVERY ROUTES & OFF-PAGE EMBEDS
  5. NEW IN v2.3.0 -- AI SEO CORRELATION PROTOCOLS
  6. NEW IN v2.2.0 -- COMPLIANT AFFILIATE MONETIZATION & LOCAL ISOLATION
  7. NEW IN v2.1.0 -- THE ANTI-NLP PROTOCOL & TWO-GATE AEO
  8. 0. DATA LAYER -- COMPETITIVE INTELLIGENCE
  9. HARD RULES (never violate)
  10. 1. CORE BELIEF SYSTEM
  11. 2. GOOGLE AI SEARCH -- 7 RANKING SIGNALS
  12. 3. THE 500-TOKEN CHUNK ARCHITECTURE
  13. 4. SEAT SIGNALS (Semantic + E-E-A-T + Entity/Knowledge Graph)
  14. 5. QUALITY & AUDIT FILTERS
  15. 6. TECHNICAL MARKUP RULES
  16. 7. VERIFICATION & TAGGING SYSTEM
  17. 8. REQUIRED PAGE STRUCTURE
  18. 9. ABSOLUTE WRITING RULES
  19. 10. VERTICAL-SPECIFIC INSTRUCTIONS
  20. 11. LLM / AEO CITATION STRATEGY
  21. 11A. TRIBUTARY TRUST PROTOCOL (v1.7.0)
  22. 12. HUB & SPOKE INTERNAL LINKING
  23. 13. EXECUTION PROTOCOL
  24. 14. QUALITY CHECKLIST
  25. FORENSIC SEO PROTOCOLS (v1.5.0)
  26. 2026 MARCH UPDATE PROTOCOLS
  27. 15. OUTPUT FORMAT
  28. PAGE BRIEF TEMPLATE
  29. REFERENCE FILES
  30. TECHNICAL CODEBASE EXECUTION RULES (v1.7.1)
  31. DEPENDENCIES

Scripts executed separately

  • scripts/gsc_pull.py
  • scripts/lib/__init__.py
  • scripts/lib/dataforseo.py
  • scripts/lib/env.py
  • scripts/lib/gsc_client.py
  • scripts/lib/massive.py
  • scripts/lib/serp_analyze.py
  • scripts/research.py
  • scripts/setup.py
  • scripts/tributary_gen.py
  • tests/test_dataforseo.py
  • tests/test_dataforseo_nullsafe.py
  • tests/test_env.py
  • tests/test_gsc_ghost_paths.py
  • tests/test_massive.py
  • tests/test_research_v171.py
  • tests/test_research_v191.py
  • tests/test_research_v200.py
  • tests/test_research_v220.py
  • tests/test_serp_analyze.py

Files

  • .claude-plugin/marketplace.jsonasset790 bytes
  • .claude-plugin/plugin.jsonasset732 bytes
  • .env.exampleasset1,155 bytes
  • .gitignoreasset59 bytes
  • CHANGELOG.mddoc29,999 bytes
  • CLAUDE.mddoc9,322 bytes
  • CONNECTOR.mddoc10,822 bytes
  • README.mddoc39,498 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SKILL.mdcore111,579 bytes
  • SPEC.mddoc10,169 bytes
  • fixtures/keywords_sample.jsonasset1,081 bytes
  • fixtures/serp_sample.jsonasset2,528 bytes
  • references/page-templates.mddoc7,815 bytes
  • references/quality-checklist.mddoc20,870 bytes
  • references/schema-patterns.mddoc4,430 bytes
  • requirements.txtdoc115 bytes
  • scripts/gsc_pull.pyruns10,618 bytes
  • scripts/lib/__init__.pyruns26 bytes
  • scripts/lib/dataforseo.pyruns11,869 bytes
  • scripts/lib/env.pyruns4,736 bytes
  • scripts/lib/gsc_client.pyruns5,514 bytes
  • scripts/lib/massive.pyruns4,918 bytes
  • scripts/lib/serp_analyze.pyruns7,056 bytes
  • scripts/research.pyruns39,232 bytes
  • scripts/setup.pyruns5,390 bytes
  • scripts/tributary_gen.pyruns12,757 bytes
  • tests/test_dataforseo.pyruns10,253 bytes
  • tests/test_dataforseo_nullsafe.pyruns3,982 bytes
  • tests/test_env.pyruns1,450 bytes
  • tests/test_gsc_ghost_paths.pyruns4,183 bytes
  • tests/test_massive.pyruns3,527 bytes
  • tests/test_research_v171.pyruns8,655 bytes
  • tests/test_research_v191.pyruns8,963 bytes
  • tests/test_research_v200.pyruns5,555 bytes
  • tests/test_research_v220.pyruns1,919 bytes
  • tests/test_serp_analyze.pyruns4,124 bytes

No excerpt is shown for this license. Read the source on GitHub.

View the complete source on GitHub

Skills included

  • seobuild-onpage

Repository facts

License
No license detected
Created
Mar 18, 2026
Last pushed
Oct 20, 2026
Forks
42
Open issues
0
Project activity
Active

Before you install

Network or broad shell

Automated 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 32 notes
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 239 signals by file

.claude-plugin/marketplace.json

  • Network accessline 3
    "owner": {     "name": "Greg Bessoni",     "url": "https://github.com/gbessoni"
  • Network accessline 4
    "name": "Greg Bessoni",     "url": "https://github.com/gbessoni"   },
  • Network accessline 5
    "url": "https://github.com/gbessoni"
  • Network accessline 16
    "author": {         "name": "Greg Bessoni",         "url": "https://github.com/gbessoni"
  • Network accessline 17
    "name": "Greg Bessoni",         "url": "https://github.com/gbessoni"       },
  • Network accessline 18
    "url": "https://github.com/gbessoni"
  • Network accessline 20
    "source": "./",       "category": "productivity",       "homepage": "https://github.com/gbessoni/seobuild-onpage",
  • Network accessline 21
    "category": "productivity",       "homepage": "https://github.com/gbessoni/seobuild-onpage",       "license": "MIT"
  • Network accessline 22
    "homepage": "https://github.com/gbessoni/seobuild-onpage",

.claude-plugin/plugin.json

  • Network accessline 5
    "author": {     "name": "Greg Bessoni",     "url": "https://github.com/gbessoni"
  • Network accessline 6
    "name": "Greg Bessoni",     "url": "https://github.com/gbessoni"   },
  • Network accessline 7
    "url": "https://github.com/gbessoni"
  • Network accessline 8
    },   "homepage": "https://github.com/gbessoni/seobuild-onpage",   "repository": "https://github.com/gbessoni/seobuild-onpage",
  • Network accessline 9
    "homepage": "https://github.com/gbessoni/seobuild-onpage",
  • Network accessline 10
    "repository": "https://github.com/gbessoni/seobuild-onpage",

.env.example

  • Access to secretsline 2
    [Credential-related source omitted]
  • Access to secretsline 5
    [Credential-related source omitted]
  • Network accessline 7
    # DataForSEO (required for live SERP research) # Sign up at https://dataforseo.com -- ~$0.002 per query
  • Network accessline 8
    # Sign up at https://dataforseo.com -- ~$0.002 per query
  • Network accessline 12
    # Google Search Console (optional -- for owned site performance data) # Create a service account at https://console.cloud.google.com
  • Network accessline 13
    # Create a service account at https://console.cloud.google.com
  • Access to secretsline 18
    [Credential-related source omitted]
  • Access to secretsline 21
    [Credential-related source omitted]
  • Network accessline 26
    # DataForSEO's content_parsing/live endpoint misses. Falls back to # DataForSEO per-URL on failure or empty response, so partial outages # don't break the run. Get a token at https://joinmassive.com
  • Network accessline 27
    # DataForSEO per-URL on failure or empty response, so partial outages # don't break the run. Get a token at https://joinmassive.com # SERP organic results and keyword data continue to come from DataForSEO.
  • Network accessline 28
    # don't break the run. Get a token at https://joinmassive.com

.gitignore

  • Access to secretsline 3
    [Credential-related source omitted]

CONNECTOR.md

  • Network accessline 41
    │       ▼ 401 + WWW-Authenticate: Bearer resource_metadata="https://.../.well-known/oauth-protected-resource"
  • Network accessline 42
    ▼ 401 + WWW-Authenticate: Bearer resource_metadata="https://.../.well-known/oauth-protected-resource"       │
  • Network accessline 43
    401 + WWW-Authenticate: Bearer resource_metadata="https://.../.well-known/oauth-protected-resource"
  • Network accessline 77
    {   "resource": "https://seo.seobuild.md/mcp",
  • Network accessline 78
    "resource": "https://seo.seobuild.md/mcp",
  • Network accessline 79
    "authorization_servers": ["https://seo.seobuild.md"],
  • Network accessline 89
    {   "issuer": "https://seo.seobuild.md",
  • Network accessline 90
    "issuer": "https://seo.seobuild.md",
  • Network accessline 91
    "authorization_endpoint": "https://seo.seobuild.md/oauth/authorize",
  • Network accessline 92
    "token_endpoint": "https://seo.seobuild.md/oauth/token",
  • Network accessline 93
    "registration_endpoint": "https://seo.seobuild.md/oauth/register",
  • Network accessline 94
    "revocation_endpoint": "https://seo.seobuild.md/oauth/revoke",
  • Network accessline 95
    "device_authorization_endpoint": "https://seo.seobuild.md/oauth/device",
  • Network accessline 224
    Over-quota responses must be actionable. `"Trial limit reached: 3 of 3 page generations used. Continue at https://seobuild.md/pricing"` is a sales moment.
  • Network accessline 225
    generations used. Continue at https://seobuild.md/pricing"` is a sales moment.

README.md

  • Network accessline 332
    git clone https://github.com/gbessoni/seobuild-onpage.git ~/.claude/skills/seobuild-onpage
  • Network accessline 337
    git clone https://github.com/gbessoni/seobuild-onpage.git ~/.codex/skills/seobuild-onpage
  • Network accessline 342
    git clone https://github.com/gbessoni/seobuild-onpage.git ~/.agents/skills/seobuild-onpage
  • Access to secretsline 373
    [Credential-related source omitted]
  • Network accessline 379
    # DataForSEO -- sign up at https://dataforseo.com (~$0.002/query)
  • Access to secretsline 424
    [Credential-related source omitted]
  • Network accessline 499
    Built by [Greg Bessoni](https://github.com/gbessoni) ([@gregbessoni](https://x.com/gregbessoni)).

SPEC.md

  • Access to secretsline 156
    [Credential-related source omitted]
  • Access to secretsline 170
    [Credential-related source omitted]

fixtures/serp_sample.json

  • Network accessline 3
    {       "position": 1,       "url": "https://example.com/airport-parking-jfk",
  • Network accessline 4
    "position": 1,       "url": "https://example.com/airport-parking-jfk",       "domain": "example.com",
  • Network accessline 5
    "url": "https://example.com/airport-parking-jfk",
  • Network accessline 23
    {       "position": 2,       "url": "https://competitor1.com/jfk-parking",
  • Network accessline 24
    "position": 2,       "url": "https://competitor1.com/jfk-parking",       "domain": "competitor1.com",
  • Network accessline 25
    "url": "https://competitor1.com/jfk-parking",
  • Network accessline 42
    {       "position": 3,       "url": "https://competitor2.com/airports/jfk/parking",
  • Network accessline 43
    "position": 3,       "url": "https://competitor2.com/airports/jfk/parking",       "domain": "competitor2.com",
  • Network accessline 44
    "url": "https://competitor2.com/airports/jfk/parking",

references/schema-patterns.md

  • Network accessline 9
    {   "@context": "https://schema.org",
  • Network accessline 10
    "@context": "https://schema.org",
  • Network accessline 28
    {   "@context": "https://schema.org",
  • Network accessline 29
    "@context": "https://schema.org",
  • Network accessline 31
    "name": "Business Name",   "description": "What the business does",   "url": "https://example.com",
  • Network accessline 32
    "description": "What the business does",   "url": "https://example.com",   "address": {
  • Network accessline 33
    "url": "https://example.com",
  • Network accessline 54
    {   "@context": "https://schema.org",
  • Network accessline 55
    "@context": "https://schema.org",
  • Network accessline 72
    {   "@context": "https://schema.org",
  • Network accessline 73
    "@context": "https://schema.org",
  • Network accessline 93
    {   "@context": "https://schema.org",
  • Network accessline 94
    "@context": "https://schema.org",
  • Network accessline 99
    "position": 1,       "name": "Home",       "item": "https://example.com/"
  • Network accessline 100
    "name": "Home",       "item": "https://example.com/"     },
  • Network accessline 101
    "item": "https://example.com/"
  • Network accessline 105
    "position": 2,       "name": "Category",       "item": "https://example.com/category/"
  • Network accessline 106
    "name": "Category",       "item": "https://example.com/category/"     },
  • Network accessline 107
    "item": "https://example.com/category/"
  • Network accessline 131
    [   { "@context": "https://schema.org", "@type": "FAQPage", ... },
  • Network accessline 132
    { "@context": "https://schema.org", "@type": "FAQPage", ... },
  • Network accessline 133
    { "@context": "https://schema.org", "@type": "BreadcrumbList", ... }
  • Network accessline 139
    Always validate generated schema at: - https://search.google.com/test/rich-results
  • Network accessline 140
    - https://search.google.com/test/rich-results
  • Network accessline 141
    - https://validator.schema.org/
  • Network accessline 155
    <p vocab="https://schema.org/" typeof="Product">
  • Network accessline 167
    <span vocab="https://schema.org/" typeof="ParkingFacility">
  • Network accessline 176
    <div itemscope itemtype="https://schema.org/LocalBusiness">

scripts/gsc_pull.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 55
    [Credential-related source omitted]
  • Network accessline 77
    req = urllib.request.Request(
  • Network accessline 79
    )     try:         with urllib.request.urlopen(req, timeout=timeout) as resp:
  • Network accessline 80
    try:         with urllib.request.urlopen(req, timeout=timeout) as resp:             return resp.status
  • Network accessline 81
    with urllib.request.urlopen(req, timeout=timeout) as resp:
  • Network accessline 166
    def parse_args():     parser = argparse.ArgumentParser(description="SEO-AGI GSC Pull")     parser.add_argument("site_url", help="GSC site URL (e.g., https://example.com)")
  • Network accessline 167
    parser = argparse.ArgumentParser(description="SEO-AGI GSC Pull")     parser.add_argument("site_url", help="GSC site URL (e.g., https://example.com)")     parser.add_argument("--keyword", default=None, help="Keyword filter")
  • Network accessline 168
    parser.add_argument("site_url", help="GSC site URL (e.g., https://example.com)")
  • Access to secretsline 237
    [Credential-related source omitted]

scripts/lib/__init__.py

  • Executable scriptline 1
    Executable file

scripts/lib/dataforseo.py

  • Executable scriptline 1
    Executable file
  • Network accessline 16
    BASE_URL = "https://api.dataforseo.com/v3"
  • Network accessline 33
    req = urllib.request.Request(
  • Network accessline 43
    try:             with urllib.request.urlopen(req, timeout=30) as resp:
  • Network accessline 44
    with urllib.request.urlopen(req, timeout=30) as resp:

scripts/lib/env.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 3
    [Credential-related source omitted]
  • Access to secretsline 17
    [Credential-related source omitted]
  • Access to secretsline 32
    [Credential-related source omitted]
  • Access to secretsline 50
    [Credential-related source omitted]
  • Access to secretsline 54
    [Credential-related source omitted]
  • Access to secretsline 55
    [Credential-related source omitted]
  • Access to secretsline 58
    [Credential-related source omitted]
  • Access to secretsline 88
    [Credential-related source omitted]
  • Access to secretsline 89
    [Credential-related source omitted]
  • Access to secretsline 90
    [Credential-related source omitted]
  • Access to secretsline 91
    [Credential-related source omitted]
  • Access to secretsline 92
    [Credential-related source omitted]
  • Access to secretsline 100
    [Credential-related source omitted]
  • Access to secretsline 102
    [Credential-related source omitted]
  • Access to secretsline 103
    [Credential-related source omitted]

scripts/lib/gsc_client.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 20
    [Credential-related source omitted]
  • Network accessline 41
    creds = service_account.Credentials.from_service_account_file(                 self.credentials_path,                 scopes=["https://www.googleapis.com/auth/webmasters.readonly"],
  • Network accessline 42
    self.credentials_path,                 scopes=["https://www.googleapis.com/auth/webmasters.readonly"],             )
  • Network accessline 43
    scopes=["https://www.googleapis.com/auth/webmasters.readonly"],
  • Network accessline 64
    Args:             site_url: The GSC property URL (e.g., "https://example.com")
  • Network accessline 65
    site_url: The GSC property URL (e.g., "https://example.com")

scripts/lib/massive.py

  • Executable scriptline 1
    Executable file
  • Network accessline 30
    BASE_URL = "https://render.joinmassive.com"
  • Network accessline 41
    qs = urllib.parse.urlencode(params)         url = f"{self.BASE_URL}{path}?{qs}"         req = urllib.request.Request(url, headers=self._headers())
  • Network accessline 42
    url = f"{self.BASE_URL}{path}?{qs}"         req = urllib.request.Request(url, headers=self._headers())         try:
  • Network accessline 43
    req = urllib.request.Request(url, headers=self._headers())
  • Network accessline 44
    try:             with urllib.request.urlopen(req, timeout=timeout) as resp:                 return resp.read().decode("utf-8", errors="ignore")
  • Network accessline 45
    with urllib.request.urlopen(req, timeout=timeout) as resp:

scripts/lib/serp_analyze.py

  • Executable scriptline 1
    Executable file

scripts/research.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 624
    [Credential-related source omitted]

scripts/setup.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 17
    [Credential-related source omitted]
  • Network accessline 64
    print("\n--- API Keys ---")     print("DataForSEO is REQUIRED. Get credentials at:")     print("  https://app.dataforseo.com/api-dashboard\n")
  • Network accessline 66
    print("  https://app.dataforseo.com/api-dashboard\n")
  • Access to secretsline 102
    [Credential-related source omitted]
  • Access to secretsline 115
    [Credential-related source omitted]
  • Access to secretsline 116
    [Credential-related source omitted]

scripts/tributary_gen.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 20
    python3 tributary_gen.py "<keyword>" --money-page=<path-or-url> [--tiers=1]   python3 tributary_gen.py "airport parking JFK" --money-page=~/Documents/SEO-AGI/pages/jfk.md   python3 tributary_gen.py "best crm 2026" --money-page=https://examp
  • Network accessline 21
    python3 tributary_gen.py "airport parking JFK" --money-page=~/Documents/SEO-AGI/pages/jfk.md   python3 tributary_gen.py "best crm 2026" --money-page=https://example.com/best-crm """
  • Network accessline 22
    python3 tributary_gen.py "best crm 2026" --money-page=https://example.com/best-crm
  • Network accessline 113
    src = source.strip()     if src.startswith(("http://", "https://")):         req = urllib.request.Request(
  • Network accessline 114
    if src.startswith(("http://", "https://")):         req = urllib.request.Request(             src, headers={"User-Agent": "seobuild-onpage/1.7.0"}
  • Network accessline 115
    req = urllib.request.Request(
  • Network accessline 116
    src, headers={"User-Agent": "seobuild-onpage/1.7.0"}         )         with urllib.request.urlopen(req, timeout=30) as resp:
  • Network accessline 117
    )         with urllib.request.urlopen(req, timeout=30) as resp:             return resp.read().decode("utf-8", errors="ignore")
  • Network accessline 118
    with urllib.request.urlopen(req, timeout=30) as resp:

tests/test_dataforseo.py

  • Executable scriptline 1
    Executable file
  • Network accessline 28
    "type": "organic",                         "rank_absolute": 1,                         "url": "https://example.com/page",
  • Network accessline 29
    "rank_absolute": 1,                         "url": "https://example.com/page",                         "domain": "example.com",
  • Network accessline 30
    "url": "https://example.com/page",
  • Network accessline 36
    "type": "organic",                         "rank_absolute": 2,                         "url": "https://other.com/page",
  • Network accessline 37
    "rank_absolute": 2,                         "url": "https://other.com/page",                         "domain": "other.com",
  • Network accessline 38
    "url": "https://other.com/page",
  • Network accessline 58
    assert len(result["organic"]) == 2     assert result["organic"][0]["position"] == 1     assert result["organic"][0]["url"] == "https://example.com/page"
  • Network accessline 59
    assert result["organic"][0]["position"] == 1     assert result["organic"][0]["url"] == "https://example.com/page"     assert result["organic"][1]["title"] == "Other Page"
  • Network accessline 60
    assert result["organic"][0]["url"] == "https://example.com/page"

tests/test_dataforseo_nullsafe.py

  • Executable scriptline 1
    Executable file

tests/test_env.py

  • Executable scriptline 1
    Executable file

tests/test_gsc_ghost_paths.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 22
    [Credential-related source omitted]
  • Network accessline 69
    ["URL", "Purpose", "Response"],     )     out = parse_crawl_stats_csv(path, "https://example.com")
  • Network accessline 70
    )     out = parse_crawl_stats_csv(path, "https://example.com")     paths = [o["path"] for o in out]
  • Network accessline 71
    out = parse_crawl_stats_csv(path, "https://example.com")
  • Network accessline 82
    def test_csv_handles_absolute_urls_and_alt_headers():     path = _write_csv(         [{"Page": "https://example.com/ghost", "Crawl purpose": "Discovery", "Status": "404 Not Found"}],
  • Network accessline 83
    path = _write_csv(         [{"Page": "https://example.com/ghost", "Crawl purpose": "Discovery", "Status": "404 Not Found"}],         ["Page", "Crawl purpose", "Status"],
  • Network accessline 84
    [{"Page": "https://example.com/ghost", "Crawl purpose": "Discovery", "Status": "404 Not Found"}],
  • Network accessline 85
    ["Page", "Crawl purpose", "Status"],     )     out = parse_crawl_stats_csv(path, "https://example.com")
  • Network accessline 86
    )     out = parse_crawl_stats_csv(path, "https://example.com")     assert len(out) == 1
  • Network accessline 87
    out = parse_crawl_stats_csv(path, "https://example.com")
  • Network accessline 88
    assert len(out) == 1     assert out[0]["url"] == "https://example.com/ghost"     assert out[0]["path"] == "/ghost"
  • Network accessline 89
    assert out[0]["url"] == "https://example.com/ghost"
  • Network accessline 93
    def test_csv_empty_returns_empty():     path = _write_csv([], ["URL", "Purpose", "Response"])     assert parse_crawl_stats_csv(path, "https://example.com") == []
  • Network accessline 95
    assert parse_crawl_stats_csv(path, "https://example.com") == []

tests/test_massive.py

  • Executable scriptline 1
    Executable file

tests/test_research_v171.py

  • Executable scriptline 1
    Executable file

tests/test_research_v191.py

  • Executable scriptline 1
    Executable file
  • Network accessline 37
    def test_normalize_domain_strips_scheme_www_path():     assert _normalize_domain("https://www.example.com/foo/bar") == "example.com"
  • Network accessline 38
    assert _normalize_domain("https://www.example.com/foo/bar") == "example.com"
  • Network accessline 39
    assert _normalize_domain("http://example.com") == "example.com"
  • Network accessline 40
    assert _normalize_domain("https://sub.example.com/x") == "sub.example.com"
  • Network accessline 97
    def test_missing_spokes_keeps_only_same_domain_semantic():     organic = [         {"url": "https://spothero.com/airport/jfk"},
  • Network accessline 98
    organic = [         {"url": "https://spothero.com/airport/jfk"},         {"url": "https://example.com/page"},
  • Network accessline 99
    {"url": "https://spothero.com/airport/jfk"},
  • Network accessline 100
    {"url": "https://example.com/page"},
  • Network accessline 103
    {  # competitor 1             "links": [                 {"text": "JFK Long Term Parking", "url": "https://spothero.com/airport/jfk-lt"},
  • Network accessline 104
    "links": [                 {"text": "JFK Long Term Parking", "url": "https://spothero.com/airport/jfk-lt"},                 {"text": "Newark Parking", "url": "https://spothero.com/airport/ewr"},
  • Network accessline 105
    {"text": "JFK Long Term Parking", "url": "https://spothero.com/airport/jfk-lt"},
  • Network accessline 106
    {"text": "Newark Parking", "url": "https://spothero.com/airport/ewr"},
  • Network accessline 107
    {"text": "Contact Us", "url": "https://spothero.com/contact"},  # generic
  • Network accessline 108
    {"text": "Privacy Policy", "url": "https://spothero.com/privacy"},  # generic
  • Network accessline 109
    {"text": "External Partner Site", "url": "https://other.com/partner"},  # external
  • Network accessline 113
    {  # competitor 2             "links": [                 {"text": "JFK Long Term Parking", "url": "https://example.com/jfk-long-term"},
  • Network accessline 114
    "links": [                 {"text": "JFK Long Term Parking", "url": "https://example.com/jfk-long-term"},             ]
  • Network accessline 115
    {"text": "JFK Long Term Parking", "url": "https://example.com/jfk-long-term"},
  • Network accessline 134
    def test_missing_spokes_respects_top_n_competitors():     organic = [{"url": f"https://site{i}.com/"} for i in range(5)]
  • Network accessline 135
    organic = [{"url": f"https://site{i}.com/"} for i in range(5)]
  • Network accessline 136
    content_data = [         {"links": [{"text": "Visible Anchor", "url": "https://site0.com/x"}]},         {"links": [{"text": "Visible Anchor", "url": "https://site1.com/x"}]},
  • Network accessline 137
    {"links": [{"text": "Visible Anchor", "url": "https://site0.com/x"}]},
  • Network accessline 138
    {"links": [{"text": "Visible Anchor", "url": "https://site1.com/x"}]},
  • Network accessline 139
    {"links": [{"text": "Visible Anchor", "url": "https://site2.com/x"}]},
  • Network accessline 140
    {"links": [{"text": "Hidden Anchor", "url": "https://site3.com/x"}]},
  • Network accessline 141
    {"links": [{"text": "Hidden Anchor", "url": "https://site4.com/x"}]},
  • Network accessline 160
    See our [Long Term Parking](https://spothero.com/long-term) page
  • Network accessline 161
    or read about [Cell Phone Lots](https://spothero.com/cell-phone).
  • Network accessline 163
    Skip image: ![alt text](https://spothero.com/image.jpg)

tests/test_research_v200.py

  • Executable scriptline 1
    Executable file
  • Network accessline 62
    {"headings": ["H2: y"], "word_count": 200},     ]     organic = [{"url": "https://a.com"}, {"url": "https://b.com"}]
  • Network accessline 63
    ]     organic = [{"url": "https://a.com"}, {"url": "https://b.com"}]     out = flag_deep_nesting(content_data, organic, top_n=3, max_depth=3)
  • Network accessline 64
    organic = [{"url": "https://a.com"}, {"url": "https://b.com"}]
  • Network accessline 77
    {"raw_html": flat},   # depth 2 -> ok     ]     organic = [{"url": "https://deep.com"}, {"url": "https://flat.com"}]
  • Network accessline 78
    ]     organic = [{"url": "https://deep.com"}, {"url": "https://flat.com"}]     out = flag_deep_nesting(content_data, organic, top_n=3, max_depth=3)
  • Network accessline 79
    organic = [{"url": "https://deep.com"}, {"url": "https://flat.com"}]
  • Network accessline 82
    assert out["assessed_count"] == 2     assert len(out["flagged"]) == 1     assert out["flagged"][0]["url"] == "https://deep.com"
  • Network accessline 83
    assert len(out["flagged"]) == 1     assert out["flagged"][0]["url"] == "https://deep.com"     assert out["flagged"][0]["max_depth"] == 6
  • Network accessline 84
    assert out["flagged"][0]["url"] == "https://deep.com"
  • Network accessline 94
    {"raw_html": deep},  # 4th competitor -- beyond top_n=3     ]     organic = [{"url": f"https://s{i}.com"} for i in range(4)]
  • Network accessline 95
    ]     organic = [{"url": f"https://s{i}.com"} for i in range(4)]     out = flag_deep_nesting(content_data, organic, top_n=3, max_depth=3)
  • Network accessline 96
    organic = [{"url": f"https://s{i}.com"} for i in range(4)]

tests/test_research_v220.py

  • Executable scriptline 1
    Executable file
  • Network accessline 19
    def test_affiliate_block_compliant_when_link_present():     out = build_affiliate_block("https://partner.example.com/ref?id=123")
  • Network accessline 20
    out = build_affiliate_block("https://partner.example.com/ref?id=123")
  • Network accessline 22
    assert out["affiliate_link"] == "https://partner.example.com/ref?id=123"
  • Network accessline 31
    out = build_affiliate_block("https://partner.example.com")
  • Network accessline 43
    def test_affiliate_block_strips_whitespace():     out = build_affiliate_block("  https://x.com/aff  ")
  • Network accessline 44
    out = build_affiliate_block("  https://x.com/aff  ")
  • Network accessline 45
    assert out["affiliate_link"] == "https://x.com/aff"

tests/test_serp_analyze.py

  • Executable scriptline 1
    Executable file
  • Network accessline 99
    serp_data = {         "organic": [             {"position": 1, "url": "https://a.com", "title": "A", "description": ""},
  • Network accessline 100
    "organic": [             {"position": 1, "url": "https://a.com", "title": "A", "description": ""},             {"position": 2, "url": "https://b.com", "title": "B", "description": ""},
  • Network accessline 101
    {"position": 1, "url": "https://a.com", "title": "A", "description": ""},
  • Network accessline 102
    {"position": 2, "url": "https://b.com", "title": "B", "description": ""},

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.

Declared and executed: 1 fact
Signal confidence: 203 facts

and 153 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeManifest .claude-plugin/marketplace.json.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md 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.