Not in the top 1,000 by GitHub stars
liangdabiao/GEO-Content-Optimizer-Skill
GEO(Generative Engine Optimization)是面向 AI 搜索引擎的内容优化方法论。就像 SEO 优化 Google 排名,GEO 优化你的内容在 ChatGPT、Perplexity、Gemini、Google AI Overview 等 AI 引擎中的引用率。 本项目提供3个 Agent Skill,覆盖 GEO 全流程:
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/geo-content-optimizer/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
f56124f0583a → f56124f0583a
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → f56124f0583a
No earlier version was observed for comparison.
skills/geo-optimizer/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
f56124f0583a → f56124f0583a
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → f56124f0583a
No earlier version was observed for comparison.
skills/geolook/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
f56124f0583a → f56124f0583a
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → f56124f0583a
No earlier version was observed for comparison.
Heat
5.5- 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
30-day change not yet available: not enough history.
Individual skills in this repository
- geo-content-optimizer
skills/geo-content-optimizer - geo-optimizer
skills/geo-optimizer - geo
skills/geolook
How it works
geo-content-optimizer
When your agent uses it
AI 驱动的网页内容优化分析工具。输入 URL,自动抓取页面标题,通过 Google 搜索进行查询扩展, 获取 Google AI 概览,对比有机搜索覆盖与 AI 生成概览,生成中文优化建议报告。 当用户说"优化这个页面"、"分析这个网址"、"GEO 分析"、"内容优化"、"geo分析"或提供 URL 并要求内容改进建议时触发。
What it loads into context
Frontmatter
188 tokensAlways available to the agent
SKILL.md
1,556 tokensWhen the skill is activated
Reference documents
378 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Input
- Phase 0: Output Directory Setup
- Phase 1: Scrape Page Title
- Phase 2: Query Fan-Out Research
- Phase 3: Main Query Extraction
- Phase 4: Google AI Overview Retrieval
- Phase 5: Query Fan-Out Summarization
- Phase 6: Comparison & Optimization Report
- Important Notes
Files
README.mddoc1,428 bytesSKILL.mdcore6,375 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubgeo-optimizer
When your agent uses it
GEO (Generative Engine Optimization) 全流程优化工具。帮助品牌内容被 ChatGPT、Perplexity、Gemini 等 AI 搜索引擎引用。 包含 5 大模块:结构化数据生成 (JSON-LD Schema)、内容 AI 可读性检测、内容集群架构规划、AI 可见度监控与季度报告、内容差距分析。 当用户提到 "GEO"、"AI搜索优化"、"AI 引用优化"、"Schema 标记"、"JSON-LD"、"FAQ Schema"、"E-E-A-T"、 "内容被 AI 抓取"、"Pillar Page"、"内容集群"、"AI 可见度"、"Generative Engine Optimization" 时触发。 也适用于用户要求:"帮我生成 Schema"、"检测内容 AI 友好度"、"优化让 AI 引用我的内容"、"测试品牌在 AI 搜索中的曝光"。
What it loads into context
Frontmatter
222 tokensAlways available to the agent
SKILL.md
2,049 tokensWhen the skill is activated
Reference documents
5,117 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 工作流决策树
- 首次完整 GEO 设置流程
- 模块 A:结构化数据生成
- 模块 B:内容 AI 可读性检测
- 模块 C:Pillar Page 集群规划
- 模块 D:可见度测试与报告
- 模块 E:内容差距分析
- 30 分钟快速落地清单
- 参考资料
Scripts executed separately
scripts/geo_report_generator.pyscripts/readability_checker.pyscripts/schema_generator.pyscripts/visibility_tester.py
Files
README.mddoc6,939 bytesSKILL.mdcore7,304 bytesSKILL.mdcore7,304 bytesSKILL.mdcore7,304 bytesSKILL.mdcore7,304 bytesSKILL.mdcore7,304 bytesSKILL.mdcore7,304 bytesassets/pillar-template.htmlasset1,020 bytesreferences/best-practices.mddoc2,731 bytesreferences/geo-framework.mddoc3,711 bytesreferences/schema-templates.mddoc4,790 bytesscripts/geo_report_generator.pyruns5,441 bytesscripts/readability_checker.pyruns4,717 bytesscripts/schema_generator.pyruns10,033 bytesscripts/visibility_tester.pyruns7,147 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubgeo
When your agent uses it
完整的 GEO(生成式引擎优化)服务流水线:给一个产品官网 URL 和介绍材料, 做站点诊断与 AI 答案采样、生成带验收标准的执行工单、产出可直接部署的资产 (llms.txt / JSON-LD / 定义块 / FAQ / 内容大纲与初稿)、自动验收工单是否闭环、 并打包成可直接发给客户的交付物。可按周期复跑,做长期 GEO 运营与月报。 国内和海外双市场并行:国内覆盖 智谱GLM/豆包/DeepSeek/Kimi/MiniMax/纳米AI/百度AI, 海外覆盖 Gemini/ChatGPT/Claude/Grok/Perplexity,问题库与指标按市场分开算。 当用户说「做 GEO」「生成式引擎优化」「让 AI 推荐我的产品」「AI 搜索里搜不到我们」 「GEO 方案/诊断/监测/月报/交付」「给客户做 GEO 服务」,或给一个产品网址要做 AI 可见性优化时使用。GEO 指生成式引擎优化,不是地理信息; 不用于传统 SEO 关键词排名、竞价投放或建站。
What it loads into context
Frontmatter
293 tokensAlways available to the agent
SKILL.md
4,990 tokensWhen the skill is activated
Reference documents
45,349 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 最快的用法:给一个网址
- 两种用法
- 先读什么
- 步骤 0 · 建项目
- 步骤 1 · 吃透产品,建事实底座
- 步骤 2 · 建问题库
- 每期循环(`serve` 自动做完,这里说明每步在干什么)
- 全部命令
- 排期自动执行
- 边界
- 目录
Scripts executed separately
scripts/analytics.pyscripts/audit.pyscripts/benchmark.pyscripts/blueprint.pyscripts/bootstrap.pyscripts/crawl.pyscripts/dashboard.pyscripts/deliver.pyscripts/deliverables.pyscripts/generate.pyscripts/geo.pyscripts/geolib.pyscripts/jobs.pyscripts/publish.pyscripts/report.pyscripts/sample.pyscripts/tasks.pyscripts/verify.pytests/__init__.pytests/test_analytics.pytests/test_audit.pytests/test_bootstrap.pytests/test_crawl.pytests/test_deliver.pytests/test_geolib.pytests/test_jobs.pytests/test_report.pytests/test_sample.pytests/test_tasks.py
Files
.env.exampleasset6,008 bytes.gitignoreasset74 bytesLICENSEasset1,077 bytesREADME.mddoc31,516 bytesSKILL.mdcore16,915 bytesSKILL.mdcore16,915 bytesSKILL.mdcore16,915 bytesSKILL.mdcore16,915 bytesSKILL.mdcore16,915 bytesSKILL.mdcore16,915 bytesSKILL.mdcore16,915 bytesSKILL.mdcore16,915 bytesdocs/302ai-integration-research.mddoc23,604 bytesdocs/ARCHITECTURE.mddoc44,070 bytesdocs/ScreenShot_2026-08-04_120350_841.pngasset174,734 bytesdocs/demo.gifasset963,851 bytesdocs/screenshots/assets.pngasset124,724 bytesdocs/screenshots/channels.pngasset295,681 bytesdocs/screenshots/competitors.pngasset250,666 bytesdocs/screenshots/engines.pngasset230,552 bytesdocs/screenshots/facts.pngasset235,034 bytesdocs/screenshots/gaps.pngasset243,767 bytesdocs/screenshots/overview.pngasset218,891 bytesdocs/screenshots/plan.pngasset260,630 bytesdocs/screenshots/questions.pngasset314,620 bytesdocs/screenshots/settings.pngasset203,291 bytesdocs/screenshots/siteaudit.pngasset263,270 bytesdocs/screenshots/verify.pngasset284,774 bytesdocs/screenshots/workbench.pngasset177,262 bytesdocs/小米手机 · GEO 调研报告.mddoc7,583 bytesreferences/cn-platforms.mddoc7,620 bytesreferences/cn-source-ranking.mddoc8,147 bytesreferences/content-patterns.mddoc5,248 bytesreferences/global-platforms.mddoc4,639 bytesreferences/known-issues.mddoc3,326 bytesreferences/method.mddoc7,977 bytesreferences/sources.mddoc4,769 bytesscripts/analytics.pyruns19,469 bytesscripts/audit.pyruns13,236 bytesscripts/benchmark.pyruns4,087 bytesscripts/blueprint.pyruns18,347 bytesscripts/bootstrap.pyruns15,503 bytesscripts/crawl.pyruns9,072 bytesscripts/dashboard.pyruns37,916 bytesscripts/deliver.pyruns31,948 bytesscripts/deliverables.pyruns16,782 bytesscripts/generate.pyruns24,383 bytesscripts/geo.pyruns20,983 bytesscripts/geolib.pyruns14,205 bytesscripts/jobs.pyruns8,826 bytesscripts/publish.pyruns9,485 bytesscripts/report.pyruns19,165 bytesscripts/sample.pyruns51,207 bytesscripts/tasks.pyruns19,743 bytesscripts/ui.htmlasset158,262 bytesscripts/verify.pyruns11,897 bytestests/__init__.pyruns0 bytestests/test_analytics.pyruns7,660 bytestests/test_audit.pyruns8,211 bytestests/test_bootstrap.pyruns5,450 bytestests/test_crawl.pyruns2,532 bytestests/test_deliver.pyruns5,420 bytestests/test_geolib.pyruns1,770 bytestests/test_jobs.pyruns4,350 bytestests/test_report.pyruns3,686 bytestests/test_sample.pyruns6,497 bytestests/test_tasks.pyruns3,961 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubSkills included
- geo-content-optimizer
- geo-optimizer
- geo
Repository facts
- License
- No license detected
- Created
- May 10, 2026
- Last pushed
- Aug 5, 2026
- Forks
- 37
- Open issues
- 1
- 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 12 notes
skills/geo-optimizer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/geo-optimizer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/geo-optimizer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/geo-optimizer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/geo-optimizer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/geolook/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/geolook/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/geolook/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/geolook/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/geolook/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/geolook/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/geolook/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- 1 broad permissionin 1 file: geo-content-optimizer/SKILL.md:1
- No dangerous shell commands
- 365 network referencesin 35 files: geolook/scripts/sample.py:35 geolook/tests/test_audit.py:12 geolook/docs/302ai-integration-research.md:7 and 32 more
- No hidden or obfuscated text
- No instruction overrides
- 33 executable scriptsin 33 files: geo-optimizer/scripts/geo_report_generator.py:1 geo-optimizer/scripts/readability_checker.py:1 geo-optimizer/scripts/schema_generator.py:1 and 30 more
- 194 references to secretsin 16 files: geolook/scripts/sample.py:39 geolook/scripts/dashboard.py:181 geolook/docs/302ai-integration-research.md:73 and 13 more
- No requests to vote in Hot
Show all 593 signals by file
skills/geo-content-optimizer/README.md
- Network accessline 21
/geo-content-optimizer https://example.com - Network accessline 29
output/ apimart-ai/ ← https://apimart.ai/ - Network accessline 30
apimart-ai/ ← https://apimart.ai/ - Network accessline 33
query_fanout.md query_fanout_summary.md openai-com/ ← https://openai.com/ - Network accessline 34
query_fanout_summary.md openai-com/ ← https://openai.com/ report.md - Network accessline 35
openai-com/ ← https://openai.com/
skills/geo-content-optimizer/SKILL.md
- Broad permissionsline 1
WebSearch, mcp__web_reader__webReader, mcp__playwright__browser_navigate, mcp__playwright__browser_snapshot, mcp__playwright__browser_take_screenshot, mcp__playwright__browser_click, mcp__playwright__browser_close, Read, Write, Bash - Network accessline 30
1. Extract the domain name from the input URL (e.g., `https://apimart.ai/` → `apimart-ai`, `https://www.example.com/path` → `example-com`).
skills/geo-optimizer/README.md
- Network accessline 203
- [linux.do](https://linux.do) 佬友支持
skills/geo-optimizer/SKILL.md
- Network accessline 165
要求用户提供 Perplexity API Key(获取:https://docs.perplexity.ai/)。
skills/geo-optimizer/references/best-practices.md
- Network accessline 27
4. **Videos without subtitles** — AI cannot understand video without VTT caption files. 5. **FAQ too short** — Minimum 10 FAQ entries. Answers should contain specific data. 6. **Missing Schema validation** — Always validate at [Schema.org V - Network accessline 28
5. **FAQ too short** — Minimum 10 FAQ entries. Answers should contain specific data. 6. **Missing Schema validation** — Always validate at [Schema.org Validator](https://validator.schema.org/) before deploying. 7. **Ignoring AI Overview** — - Network accessline 29
6. **Missing Schema validation** — Always validate at [Schema.org Validator](https://validator.schema.org/) before deploying.
skills/geo-optimizer/references/geo-framework.md
- Network accessline 23
**验证工具**: [Schema.org Validator](https://validator.schema.org/)
skills/geo-optimizer/references/schema-templates.md
- Network accessline 23
{ "@context": "https://schema.org", - Network accessline 24
"@context": "https://schema.org", - Network accessline 49
{ "@context": "https://schema.org", - Network accessline 50
"@context": "https://schema.org", - Network accessline 74
{ "@context": "https://schema.org", - Network accessline 75
"@context": "https://schema.org", - Network accessline 129
{ "@context": "https://schema.org", - Network accessline 130
"@context": "https://schema.org", - Network accessline 161
{ "@context": "https://schema.org", - Network accessline 162
"@context": "https://schema.org", - Network accessline 186
{ "@context": "https://schema.org", - Network accessline 187
"@context": "https://schema.org", - Network accessline 204
{ "@context": "https://schema.org", - Network accessline 205
"@context": "https://schema.org", - Network accessline 225
<figure itemscope itemtype="https://schema.org/ImageObject">
skills/geo-optimizer/scripts/geo_report_generator.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/geo-optimizer/scripts/readability_checker.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/geo-optimizer/scripts/schema_generator.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 11
area_served=None, founding_date=None, url=None): schema = { "@context": "https://schema.org", - Network accessline 12
schema = { "@context": "https://schema.org", "@type": "Organization", - Network accessline 13
"@context": "https://schema.org", - Network accessline 41
}) return { "@context": "https://schema.org", - Network accessline 42
return { "@context": "https://schema.org", "@type": "FAQPage", - Network accessline 43
"@context": "https://schema.org", - Network accessline 51
article_type="TechArticle"): schema = { "@context": "https://schema.org", - Network accessline 52
schema = { "@context": "https://schema.org", "@type": article_type, - Network accessline 53
"@context": "https://schema.org", - Network accessline 113
article["author"] = {"@id": author_info["person_id"]} return { "@context": "https://schema.org", - Network accessline 114
return { "@context": "https://schema.org", "@graph": [person, article] - Network accessline 115
"@context": "https://schema.org", - Network accessline 133
citations.append(entry) schema = { "@context": "https://schema.org", - Network accessline 134
schema = { "@context": "https://schema.org", "@type": "Article", - Network accessline 135
"@context": "https://schema.org", - Network accessline 154
}) return { "@context": "https://schema.org", - Network accessline 155
return { "@context": "https://schema.org", "@type": "BreadcrumbList", - Network accessline 156
"@context": "https://schema.org",
skills/geo-optimizer/scripts/visibility_tester.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 32
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Network accessline 43
try: resp = requests.post( - Network accessline 44
resp = requests.post( - Network accessline 45
"https://api.perplexity.ai/chat/completions", - Network accessline 66
[Credential-related source omitted] - Access to secretsline 66
[Credential-related source omitted] - Access to secretsline 72
[Credential-related source omitted] - Network accessline 150
[Credential-related source omitted] - Access to secretsline 150
[Credential-related source omitted] - Network accessline 151
parser.add_argument("--model", default="kimi-k2.6", help="Model name for Kimi backend") parser.add_argument("--base-url", default="https://api.moonshot.cn/v1", help="API base URL for Kimi backend") - Network accessline 152
parser.add_argument("--base-url", default="https://api.moonshot.cn/v1", - Access to secretsline 160
[Credential-related source omitted] - Access to secretsline 161
[Credential-related source omitted] - Access to secretsline 162
[Credential-related source omitted] - Access to secretsline 163
[Credential-related source omitted] - Access to secretsline 164
[Credential-related source omitted] - Access to secretsline 175
[Credential-related source omitted]
skills/geolook/.env.example
- Network accessline 12
# ============================================================ # 一把 Key 解锁全部能力。设为 1 后 sample/generate/aggregate 全部走 # https://api.302ai.cn/v1(国内端点·OpenAI 兼容 + Anthropic 兼容,推荐); - Network accessline 13
# 一把 Key 解锁全部能力。设为 1 后 sample/generate/aggregate 全部走 # https://api.302ai.cn/v1(国内端点·OpenAI 兼容 + Anthropic 兼容,推荐); # 海外目录是 api.302.ai,模型 ID 与国内目录不同,切换前先 GET /v1/models 实测。 - Network accessline 14
# https://api.302ai.cn/v1(国内端点·OpenAI 兼容 + Anthropic 兼容,推荐); - Network accessline 15
# 海外目录是 api.302.ai,模型 ID 与国内目录不同,切换前先 GET /v1/models 实测。 # 302.AI 模式下还自带 9 个搜索 provider 的联网能力。Key 在 https://302.ai 控制台申请。 # 详见 docs/302ai-integration-research.md - Network accessline 16
# 302.AI 模式下还自带 9 个搜索 provider 的联网能力。Key 在 https://302.ai 控制台申请。 - Access to secretsline 19
[Credential-related source omitted] - Access to secretsline 58
[Credential-related source omitted] - Access to secretsline 62
[Credential-related source omitted] - Access to secretsline 63
[Credential-related source omitted] - Access to secretsline 64
[Credential-related source omitted] - Access to secretsline 65
[Credential-related source omitted] - Access to secretsline 66
[Credential-related source omitted] - Access to secretsline 69
[Credential-related source omitted] - Access to secretsline 70
[Credential-related source omitted] - Access to secretsline 71
[Credential-related source omitted] - Access to secretsline 72
[Credential-related source omitted] - Access to secretsline 73
[Credential-related source omitted] - Network accessline 81
# ============================================================ # 与 302.AI 互斥使用(用户只配一个)。想用 OpenRouter 时,把上面 AI302AI_MODE # 改为 0,再启用本节,sample/generate/aggregate 会改走 https://openrouter.ai/api/v1。 - Network accessline 82
# 与 302.AI 互斥使用(用户只配一个)。想用 OpenRouter 时,把上面 AI302AI_MODE # 改为 0,再启用本节,sample/generate/aggregate 会改走 https://openrouter.ai/api/v1。 # 9/10 平台覆盖(豆包 OpenRouter 无,自动跳过): - Network accessline 83
# 改为 0,再启用本节,sample/generate/aggregate 会改走 https://openrouter.ai/api/v1。 - Access to secretsline 90
[Credential-related source omitted]
skills/geolook/.gitignore
- Access to secretsline 5
[Credential-related source omitted]
skills/geolook/README.md
- Network accessline 11
🔍 [在线演示(只读)](https://geolook.cc/demo/) - Network accessline 27
在workbuddy,codex, claude code,等平台: 直接命令要求安装skill:<https://github.com/liangdabiao/geolook> - Network accessline 28
直接命令要求安装skill:<https://github.com/liangdabiao/geolook> - Network accessline 30
注册302.AI Key:<https://www.302.ai/302ai-key> - Access to secretsline 118
[Credential-related source omitted] - Network accessline 126
申请 OpenRouter Key:<https://openrouter.ai/keys> - Network accessline 250
# 1. 克隆并安装依赖 git clone https://github.com/liangdabiao/geolook.git - Network accessline 251
git clone https://github.com/liangdabiao/geolook.git cd geolook pip3 install requests beautifulsoup4 lxml - Network accessline 255
# 2. 启动看板(自动打开浏览器) python3 scripts/geo.py ui # → http://127.0.0.1:8765 - Network accessline 256
python3 scripts/geo.py ui # → http://127.0.0.1:8765 - Access to secretsline 259
[Credential-related source omitted] - Access to secretsline 261
[Credential-related source omitted] - Access to secretsline 262
[Credential-related source omitted] - Access to secretsline 263
[Credential-related source omitted] - Access to secretsline 272
[Credential-related source omitted] - Access to secretsline 273
[Credential-related source omitted] - Network accessline 283
# 推荐:SSH 隧道 ssh -N -L 8765:127.0.0.1:8765 user@your-server # 然后本地浏览器打开 http://127.0.0.1:8765 - Network accessline 285
# 然后本地浏览器打开 http://127.0.0.1:8765 - Network accessline 301
python3 scripts/geo.py new --url https://example.com --market both - Access to secretsline 385
[Credential-related source omitted] - Network accessline 439
- [@yaojingang](https://github.com/yaojingang) - Network accessline 447
[Credential-related source omitted] - Access to secretsline 447
[Credential-related source omitted] - Access to secretsline 486
[Credential-related source omitted] - Network accessline 526
<https://linux.do> 感谢佬友
skills/geolook/SKILL.md
- Network accessline 34
python3 scripts/geo.py new --url https://example.com --market both - Network accessline 57
python3 scripts/geo.py ui # 默认 http://127.0.0.1:8765 - Access to secretsline 158
[Credential-related source omitted] - Access to secretsline 159
[Credential-related source omitted] - Access to secretsline 160
[Credential-related source omitted] - Access to secretsline 161
[Credential-related source omitted] - Access to secretsline 162
[Credential-related source omitted] - Access to secretsline 163
[Credential-related source omitted] - Access to secretsline 164
[Credential-related source omitted] - Access to secretsline 165
[Credential-related source omitted] - Access to secretsline 166
[Credential-related source omitted] - Access to secretsline 167
[Credential-related source omitted]
skills/geolook/docs/302ai-integration-research.md
- Network accessline 7
> ⚠<U+FE0F> **2026-08-04 实测更新(重要)**:本账号走的是**国内端点 `https://api.302ai.cn`(新版本目录)**, - Network accessline 8
> 与本文多数地方写的海外端点 `api.302.ai` **模型 ID 不一致**。判断「某平台/某模型是否可用」, > **一律以 `GET https://api.302ai.cn/v1/models` 的全量列表实测为准**,别拿海外目录的旧 ID 下结论 > (曾因此误判 gemini/claude/perplexity 不可用)。代码里 `AI302AI_BASE` 已默认国内端点。 - Network accessline 9
> **一律以 `GET https://api.302ai.cn/v1/models` 的全量列表实测为准**,别拿海外目录的旧 ID 下结论 - Network accessline 16
| 问题 | 答案 | |---|---| | 302.AI 能不能跑通 GeoLook 全部 9 个 LLM 平台? | ✅ **能**。`https://api.302.ai/v1/chat/completions` 是 OpenAI 兼容端点,9 个平台全部对应有模型 | - Network accessline 17
|---|---| | 302.AI 能不能跑通 GeoLook 全部 9 个 LLM 平台? | ✅ **能**。`https://api.302.ai/v1/chat/completions` 是 OpenAI 兼容端点,9 个平台全部对应有模型 | | 能否用同一个 Key 调这 9 个平台? | ✅ **能**。一个 `302AI_API_KEY`(或 CLI 中的 `AI302_KEY`)覆盖 1400+ API | - Network accessline 18
| 302.AI 能不能跑通 GeoLook 全部 9 个 LLM 平台? | ✅ **能**。`https://api.302.ai/v1/chat/completions` 是 OpenAI 兼容端点,9 个平台全部对应有模型 | - Network accessline 19
| 能否用同一个 Key 调这 9 个平台? | ✅ **能**。一个 `302AI_API_KEY`(或 CLI 中的 `AI302_KEY`)覆盖 1400+ API | | 联网能力(豆包 / Perplexity)怎么办? | ✅ **保留并加强**。Perplexity 原生联网模型 302.AI 上有;联网搜索走 `302ai search` CLI(9 家搜索引擎) | | Anthropic 协议(Claude)怎么办? | ✅ **能**。302.AI 同时 - Network accessline 20
| 联网能力(豆包 / Perplexity)怎么办? | ✅ **保留并加强**。Perplexity 原生联网模型 302.AI 上有;联网搜索走 `302ai search` CLI(9 家搜索引擎) | | Anthropic 协议(Claude)怎么办? | ✅ **能**。302.AI 同时提供 Anthropic 兼容 `/messages` 端点(`ANTHROPIC_BASE_URL=https://api.302.ai/v1` 已验证) | | 火山方舟特 - Network accessline 21
| Anthropic 协议(Claude)怎么办? | ✅ **能**。302.AI 同时提供 Anthropic 兼容 `/messages` 端点(`ANTHROPIC_BASE_URL=https://api.302.ai/v1` 已验证) | - Network accessline 38
| 端点 | 协议 | 用途 | |---|---|---| | `POST https://api.302.ai/v1/chat/completions` | OpenAI 兼容 | **所有 OpenAI/Anthropic/Google/DeepSeek/GLM/Doubao/MiniMax 模型都走这里** | - Network accessline 39
|---|---|---| | `POST https://api.302.ai/v1/chat/completions` | OpenAI 兼容 | **所有 OpenAI/Anthropic/Google/DeepSeek/GLM/Doubao/MiniMax 模型都走这里** | | `POST https://api.302.ai/v1/messages` | Anthropic 兼容 | Claude 系列专用,自动路由(同 base) | - Network accessline 40
| `POST https://api.302.ai/v1/chat/completions` | OpenAI 兼容 | **所有 OpenAI/Anthropic/Google/DeepSeek/GLM/Doubao/MiniMax 模型都走这里** | - Network accessline 41
| `POST https://api.302.ai/v1/messages` | Anthropic 兼容 | Claude 系列专用,自动路由(同 base) | - Network accessline 42
| `GET https://api.302.ai/v1/models` | OpenAI 兼容 | 列模型 + 价格 | - Network accessline 43
| `POST https://api.302.ai/v1/embeddings` | OpenAI 兼容 | Embedding(将来可用于聚类题目) | - Access to secretsline 73
[Credential-related source omitted] - Network accessline 115
> 端点:`POST https://api.302.ai/302/general/search`(同样一把 Key 通用) - Network accessline 158
302.AI 的定价 vs 直接走官方(来源:[mastra.ai/models/providers/302ai](https://mastra.ai/models/providers/302ai)、[aimodelapis.com](https://aimodelapis.com/providers/302ai)): - Access to secretsline 183
[Credential-related source omitted] - Access to secretsline 185
[Credential-related source omitted] - Access to secretsline 186
[Credential-related source omitted] - Access to secretsline 190
[Credential-related source omitted] - Network accessline 199
"name": "智谱GLM", "market": "cn", # 原版 "base": "https://open.bigmodel.cn/api/paas/v4", - Network accessline 200
# 原版 "base": "https://open.bigmodel.cn/api/paas/v4", "model": os.environ.get("GLM_MODEL", "glm-4-flash"), - Network accessline 201
"base": "https://open.bigmodel.cn/api/paas/v4", - Access to secretsline 202
[Credential-related source omitted] - Access to secretsline 203
[Credential-related source omitted] - Network accessline 205
# 302.AI 替代(在 available() 里判断) "ai302ai": { "base": "https://api.302.ai/v1", - Network accessline 206
"ai302ai": { "base": "https://api.302.ai/v1", "model": os.environ.get("AI302AI_GLM_MODEL", "glm-4.5-air"), - Network accessline 207
"base": "https://api.302.ai/v1", - Access to secretsline 208
[Credential-related source omitted] - Access to secretsline 209
[Credential-related source omitted] - Access to secretsline 220
[Credential-related source omitted] - Access to secretsline 222
[Credential-related source omitted] - Access to secretsline 223
[Credential-related source omitted] - Access to secretsline 239
[Credential-related source omitted] - Access to secretsline 241
[Credential-related source omitted] - Access to secretsline 242
[Credential-related source omitted] - Network accessline 251
`ask_anthropic()` 在 302.AI 模式下,base 改 `https://api.302.ai/v1`,**Anthropic 兼容端点自动识别**(302.AI 在同一 base 下同时跑 OpenAI 和 Anthropic 协议,靠 path 区分)。 - Access to secretsline 269
[Credential-related source omitted] - Access to secretsline 312
[Credential-related source omitted] - Access to secretsline 320
[Credential-related source omitted] - Access to secretsline 323
[Credential-related source omitted] - Access to secretsline 324
[Credential-related source omitted] - Access to secretsline 341
[Credential-related source omitted] - Access to secretsline 381
[Credential-related source omitted] - Network accessline 388
6. 加 Claude 的 Anthropic 协议适配:`ask_anthropic()` 检测到 `AI302AI_MODE` 时切 base 到 `https://api.302.ai/v1` - Network accessline 401
13. 启动时校验 `GET https://api.302.ai/v1/models?llm=1`,对比本地预设,缺失平台警告 - Network accessline 416
| 来源 | 用途 | |---|---| | [mastra.ai/models/providers/302ai](https://mastra.ai/models/providers/302ai) | 302.AI 模型列表(97+) | - Network accessline 417
|---|---| | [mastra.ai/models/providers/302ai](https://mastra.ai/models/providers/302ai) | 302.AI 模型列表(97+) | | [aimodelapis.com/providers/302ai](https://aimodelapis.com/providers/302ai) | 单个模型详细参数(context、价格、能力)| - Network accessline 418
| [mastra.ai/models/providers/302ai](https://mastra.ai/models/providers/302ai) | 302.AI 模型列表(97+) | - Network accessline 419
| [aimodelapis.com/providers/302ai](https://aimodelapis.com/providers/302ai) | 单个模型详细参数(context、价格、能力)| - Network accessline 420
| [302ai.apifox.cn](https://302ai.apifox.cn/) | 302.AI 官方 API 文档(apifox)| - Network accessline 421
| [@302ai/ai-sdk on npm](https://www.npmjs.com/package/@302ai/ai-sdk) | Vercel AI SDK 集成范例 | - Network accessline 422
| [ZCF 文档](https://deepwiki.com/UfoMiao/zcf/10.4-environment-variables) | 验证 `ANTHROPIC_BASE_URL=https://api.302.ai/v1` 可用 |
skills/geolook/docs/ARCHITECTURE.md
- Network accessline 173
| [deliver.py](file:///d:/geolook-main/scripts/deliver.py) | 客户交付包打包 | `delivery/<日期>/` | | [publish.py](file:///d:/geolook-main/scripts/publish.py) | 手动触发,凭证在 `.env` | — | | [dashboard.py](file:///d:/geolook-main/scripts/dashboard.py) | 看板 - Network accessline 174
| [publish.py](file:///d:/geolook-main/scripts/publish.py) | 手动触发,凭证在 `.env` | — | | [dashboard.py](file:///d:/geolook-main/scripts/dashboard.py) | 看板后端:REST + 任务代理 | http://127.0.0.1:8765 | | [jobs.py](file:///d:/geolook-main/scripts/jobs. - Network accessline 175
| [dashboard.py](file:///d:/geolook-main/scripts/dashboard.py) | 看板后端:REST + 任务代理 | http://127.0.0.1:8765 | - Access to secretsline 319
[Credential-related source omitted] - Access to secretsline 322
[Credential-related source omitted] - Access to secretsline 323
[Credential-related source omitted] - Access to secretsline 333
[Credential-related source omitted] - Network accessline 411
"effort": "S", "window": "30天", "affected": ["https://..."], - Network accessline 412
"window": "30天", "affected": ["https://..."], "acceptance": { - Network accessline 413
"affected": ["https://..."], - Access to secretsline 736
[Credential-related source omitted] - Access to secretsline 738
[Credential-related source omitted] - Network accessline 792
"new_platform": { "name": "新平台", "market": "cn", # 或 "global" "base": "https://api.example.com/v1", - Network accessline 793
"name": "新平台", "market": "cn", # 或 "global" "base": "https://api.example.com/v1", "model": os.environ.get("NEW_PLATFORM_MODEL", "model-v1"), - Network accessline 794
"base": "https://api.example.com/v1", - Access to secretsline 795
[Credential-related source omitted] - Access to secretsline 797
[Credential-related source omitted]
skills/geolook/references/cn-platforms.md
- Access to secretsline 103
[Credential-related source omitted] - Access to secretsline 104
[Credential-related source omitted] - Access to secretsline 105
[Credential-related source omitted] - Access to secretsline 113
[Credential-related source omitted] - Access to secretsline 114
[Credential-related source omitted]
skills/geolook/references/cn-source-ranking.md
- Network accessline 141
# 数据(约 430KB,只需这一个 mart) curl -sLO https://raw.githubusercontent.com/yaojingang/geo-citation-lab/main/03-cn-geo-citation-dataset/data/marts/source_visibility.parquet - Network accessline 142
curl -sLO https://raw.githubusercontent.com/yaojingang/geo-citation-lab/main/03-cn-geo-citation-dataset/data/marts/source_visibility.parquet - Network accessline 143
curl -sLO https://raw.githubusercontent.com/yaojingang/geo-citation-lab/main/03-cn-geo-citation-dataset/data/reference/source_types.csv
skills/geolook/references/content-patterns.md
- Network accessline 103
<script type="application/ld+json"> { "@context": "https://schema.org", - Network accessline 104
{ "@context": "https://schema.org", "@type": "Organization", - Network accessline 105
"@context": "https://schema.org", - Network accessline 107
"name": "品牌规范名", "alternateName": ["别名1", "别名2"], "url": "https://example.com", - Network accessline 108
"alternateName": ["别名1", "别名2"], "url": "https://example.com", "logo": "https://example.com/logo.png", - Network accessline 109
"url": "https://example.com", - Network accessline 110
"logo": "https://example.com/logo.png", - Network accessline 140
## 重要页面 - [产品总览](https://example.com/product): 一句话说明 - Network accessline 141
- [产品总览](https://example.com/product): 一句话说明 - Network accessline 142
- [价格](https://example.com/pricing): 一句话说明 - Network accessline 143
- [文档](https://docs.example.com): 一句话说明
skills/geolook/references/global-platforms.md
skills/geolook/references/known-issues.md
skills/geolook/references/sources.md
- Network accessline 10
| 资料 | 地址 | 什么时候用 | |---|---|---| | GEO Citation Lab(数据总仓) | https://github.com/yaojingang/geo-citation-lab | 要复算或查原始口径 | - Network accessline 11
|---|---|---| | GEO Citation Lab(数据总仓) | https://github.com/yaojingang/geo-citation-lab | 要复算或查原始口径 | | 海外跨平台实验 3 分钟速读 | `01-geo-experiment-data-report/QUICK_REPORT.md` | **最高性价比**,`method.md` 的数字主要来自这里 | - Network accessline 12
| GEO Citation Lab(数据总仓) | https://github.com/yaojingang/geo-citation-lab | 要复算或查原始口径 | - Network accessline 14
| 国内 AI 引用偏好数据集 CN-GEO | `03-cn-geo-citation-dataset/` | 查国内平台/信源分布,21.4 万条引用记录 | | 海外 AI 引用偏好数据集 | `01-geo-experiment-data-report/` | 做海外市场时的信源判据 | | 论文:Citation Selection → Absorption | https://arxiv.org/abs/2604.25707 | 海外三平台实验,`method.m - Network accessline 15
| 海外 AI 引用偏好数据集 | `01-geo-experiment-data-report/` | 做海外市场时的信源判据 | | 论文:Citation Selection → Absorption | https://arxiv.org/abs/2604.25707 | 海外三平台实验,`method.md` 第 2 节数字的出处 | | 论文:中文生成式搜索引用什么 | https://arxiv.org/pdf/2607.15771 | 国内四产品八界面,Web - Network accessline 16
| 论文:Citation Selection → Absorption | https://arxiv.org/abs/2604.25707 | 海外三平台实验,`method.md` 第 2 节数字的出处 | - Network accessline 17
| 论文:中文生成式搜索引用什么 | https://arxiv.org/pdf/2607.15771 | 国内四产品八界面,Web/App 差异的出处 | - Network accessline 24
git clone --depth 1 https://github.com/yaojingang/geo-citation-lab.git - Network accessline 27
单文件取:`https://raw.githubusercontent.com/yaojingang/geo-citation-lab/main/<路径>` - Network accessline 33
| 资料 | 地址 | 说明 | |---|---|---| | yao-geo-skills(21 个细分 skill) | https://github.com/yaojingang/yao-geo-skills | 需要某个环节的**更细方法**时去查对应 `skills/<id>/SKILL.md` | - Network accessline 34
|---|---|---| | yao-geo-skills(21 个细分 skill) | https://github.com/yaojingang/yao-geo-skills | 需要某个环节的**更细方法**时去查对应 `skills/<id>/SKILL.md` | | **GEORank**(开源 GEO 工作台) | https://github.com/yaojingang/GEORank | 见下方说明 | - Network accessline 35
| yao-geo-skills(21 个细分 skill) | https://github.com/yaojingang/yao-geo-skills | 需要某个环节的**更细方法**时去查对应 `skills/<id>/SKILL.md` | - Network accessline 36
| **GEORank**(开源 GEO 工作台) | https://github.com/yaojingang/GEORank | 见下方说明 | - Network accessline 37
| GEORankHub(官方演示站) | https://georankhub.com | 不想自建时的在线入口 | - Network accessline 38
| GEOFlow(开源 GEO 运营系统) | https://github.com/yaojingang/GEOFlow | 要上规模化内容生产/分发平台时才需要,Laravel + Docker | - Network accessline 39
| GEO 资源专题 | https://tok123.cc/collections/geo-resources-and-services | 工具与服务商索引 | - Network accessline 69
| 资料 | 地址 | |---|---| | 《国内生成式AI引用生态全景报告》 | https://doc.laoyao.cn/qty18p | - Network accessline 70
|---|---| | 《国内生成式AI引用生态全景报告》 | https://doc.laoyao.cn/qty18p | | 《信源偏好分析报告》 | https://doc.laoyao.cn/krgovd | - Network accessline 71
| 《国内生成式AI引用生态全景报告》 | https://doc.laoyao.cn/qty18p | - Network accessline 72
| 《信源偏好分析报告》 | https://doc.laoyao.cn/krgovd | - Network accessline 73
| 《GEO白皮书》 | https://yaojingang.feishu.cn/docx/Jv85dXAeZoKJ7exJi4Yc4Edrnhf | - Network accessline 74
| 《GEO红皮书》 | https://yaojingang.feishu.cn/wiki/Otqtw0HFbiNeCMkjKalcFkoJnpf | - Network accessline 75
| 《GEO蓝皮书》 | https://yaojingang.feishu.cn/wiki/MwkiwPDqCiHGwVk2uOtcNUlrnnf | - Network accessline 76
| 《GEO到底是什么》 | https://mp.weixin.qq.com/s/GXuu0Hku-j-8ona5yzQSvA | - Network accessline 77
| 《从SEO到GEO,从流量到Agent》 | https://mp.weixin.qq.com/s/2P_zSjJkybl-rAyZjMIQAw | - Network accessline 78
| 《从AI搜索逻辑到GEOFlow落地实战》 | https://mp.weixin.qq.com/s/8Lyrzux7WacHjiHx_P9Fbg | - Network accessline 79
| 《一文讲透GEO内容工程》 | https://mp.weixin.qq.com/s/0ZZ5je2-W83HY7RtmsYkJA |
skills/geolook/scripts/analytics.py
- Executable scriptline 1
Executable file
skills/geolook/scripts/audit.py
- Executable scriptline 1
Executable file
skills/geolook/scripts/benchmark.py
- Executable scriptline 1
Executable file
skills/geolook/scripts/blueprint.py
- Executable scriptline 1
Executable file
skills/geolook/scripts/bootstrap.py
- Executable scriptline 1
Executable file
skills/geolook/scripts/crawl.py
skills/geolook/scripts/dashboard.py
- Executable scriptline 1
Executable file - Access to secretsline 181
[Credential-related source omitted] - Access to secretsline 188
[Credential-related source omitted] - Access to secretsline 190
[Credential-related source omitted] - Access to secretsline 264
[Credential-related source omitted] - Access to secretsline 265
[Credential-related source omitted] - Access to secretsline 271
[Credential-related source omitted] - Access to secretsline 275
[Credential-related source omitted] - Access to secretsline 290
[Credential-related source omitted] - Access to secretsline 291
[Credential-related source omitted] - Access to secretsline 298
[Credential-related source omitted] - Access to secretsline 311
[Credential-related source omitted] - Access to secretsline 317
[Credential-related source omitted] - Access to secretsline 319
[Credential-related source omitted] - Access to secretsline 506
[Credential-related source omitted] - Access to secretsline 513
[Credential-related source omitted] - Access to secretsline 532
[Credential-related source omitted] - Access to secretsline 534
[Credential-related source omitted] - Access to secretsline 535
[Credential-related source omitted] - Access to secretsline 540
[Credential-related source omitted] - Network accessline 542
[Credential-related source omitted] - Access to secretsline 542
[Credential-related source omitted] - Network accessline 543
try: r = requests.get( "https://api.302ai.cn/v1/models", - Network accessline 544
r = requests.get( - Network accessline 545
"https://api.302ai.cn/v1/models", - Access to secretsline 557
[Credential-related source omitted] - Access to secretsline 559
[Credential-related source omitted] - Access to secretsline 561
[Credential-related source omitted] - Access to secretsline 573
[Credential-related source omitted] - Access to secretsline 574
[Credential-related source omitted] - Access to secretsline 594
[Credential-related source omitted] - Access to secretsline 596
[Credential-related source omitted] - Access to secretsline 597
[Credential-related source omitted] - Access to secretsline 603
[Credential-related source omitted] - Network accessline 605
[Credential-related source omitted] - Access to secretsline 605
[Credential-related source omitted] - Network accessline 606
try: r = requests.get( "https://openrouter.ai/api/v1/auth/key", - Network accessline 607
r = requests.get( - Network accessline 608
"https://openrouter.ai/api/v1/auth/key", - Access to secretsline 622
[Credential-related source omitted] - Access to secretsline 624
[Credential-related source omitted] - Access to secretsline 628
[Credential-related source omitted] - Access to secretsline 640
[Credential-related source omitted] - Access to secretsline 641
[Credential-related source omitted] - Network accessline 747
threading.Thread(target=_monitor_loop, daemon=True).start() srv = ThreadingHTTPServer(("127.0.0.1", port), Handler) url = f"http://127.0.0.1:{port}/" - Network accessline 748
srv = ThreadingHTTPServer(("127.0.0.1", port), Handler) url = f"http://127.0.0.1:{port}/" G.info(f"看板已启动:{url}(Ctrl+C 退出)") - Network accessline 749
url = f"http://127.0.0.1:{port}/"
skills/geolook/scripts/deliver.py
- Executable scriptline 1
Executable file
skills/geolook/scripts/deliverables.py
- Executable scriptline 1
Executable file
skills/geolook/scripts/generate.py
- Executable scriptline 1
Executable file - Network accessline 136
org = { "@context": "https://schema.org", "@type": "Organization", - Network accessline 137
"@context": "https://schema.org", "@type": "Organization", - Network accessline 150
app = { "@context": "https://schema.org", "@type": "SoftwareApplication", - Network accessline 151
"@context": "https://schema.org", "@type": "SoftwareApplication", - Network accessline 173
faq = {"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ - Network accessline 178
article = { "@context": "https://schema.org", "@type": "Article", - Network accessline 179
"@context": "https://schema.org", "@type": "Article", - Network accessline 187
breadcrumb = {"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [
skills/geolook/scripts/geo.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 4
python3 scripts/geo.py init --url https://example.com --name 品牌名 - Network accessline 55
name = a.name if not name: res = G.fetch(url) - Network accessline 56
if not name: res = G.fetch(url) if res["html"]: - Network accessline 57
res = G.fetch(url)
skills/geolook/scripts/geolib.py
- Executable scriptline 1
Executable file - Access to secretsline 36
[Credential-related source omitted] - Access to secretsline 44
[Credential-related source omitted] - Access to secretsline 55
[Credential-related source omitted] - Access to secretsline 58
[Credential-related source omitted] - Network accessline 69
if m and m.group(1).lower() != "direct": proxy = m.group(1).strip() os.environ["HTTP_PROXY"] = f"http://{proxy}" - Network accessline 70
proxy = m.group(1).strip() os.environ["HTTP_PROXY"] = f"http://{proxy}" os.environ["HTTPS_PROXY"] = f"http://{proxy}" - Network accessline 71
[Credential-related source omitted] - Access to secretsline 71
[Credential-related source omitted] - Network accessline 72
[Credential-related source omitted] - Access to secretsline 72
[Credential-related source omitted] - Network accessline 223
def fetch(url: str, timeout: int = 12, retries: int = 1) -> dict: - Network accessline 230
try: t0 = time.time() r = requests.get( - Network accessline 231
t0 = time.time() r = requests.get( url, - Network accessline 232
r = requests.get( - Network accessline 278
def fetch_text(url: str, timeout: int = 8) -> str: try: r = requests.get(url, timeout=timeout, headers={"User-Agent": UA}) - Network accessline 279
try: r = requests.get(url, timeout=timeout, headers={"User-Agent": UA}) if r.status_code == 200: - Network accessline 280
r = requests.get(url, timeout=timeout, headers={"User-Agent": UA})
skills/geolook/scripts/jobs.py
skills/geolook/scripts/publish.py
- Executable scriptline 1
Executable file - Access to secretsline 24
[Credential-related source omitted] - Access to secretsline 27
[Credential-related source omitted] - Network accessline 31
"wordpress": { "name": "WordPress", "env": ["WP_USER", "WP_APP_PASSWORD"], "cfg": [("site_url", "https://blog.example.com")], - Network accessline 32
"name": "WordPress", "env": ["WP_USER", "WP_APP_PASSWORD"], "cfg": [("site_url", "https://blog.example.com")], "note": "REST API 新建草稿文章,登录后台确认后再发布", - Network accessline 33
"cfg": [("site_url", "https://blog.example.com")], - Access to secretsline 50
[Credential-related source omitted] - Network accessline 108
[Credential-related source omitted] - Access to secretsline 108
[Credential-related source omitted] - Network accessline 109
"Accept": "application/vnd.github+json"} url = f"https://api.github.com/repos/{repo}/contents/{path}" body = {"message": f"geo: publish {title}", "branch": branch, - Network accessline 110
url = f"https://api.github.com/repos/{repo}/contents/{path}" - Network accessline 111
body = {"message": f"geo: publish {title}", "branch": branch, "content": base64.b64encode(text.encode()).decode()} r0 = requests.get(url, headers=H, params={"ref": branch}, timeout=30) - Network accessline 112
"content": base64.b64encode(text.encode()).decode()} r0 = requests.get(url, headers=H, params={"ref": branch}, timeout=30) if r0.status_code == 200: # 已存在→更新 - Network accessline 113
r0 = requests.get(url, headers=H, params={"ref": branch}, timeout=30) - Network accessline 114
if r0.status_code == 200: # 已存在→更新 body["sha"] = r0.json().get("sha") r = requests.put(url, headers=H, json=body, timeout=30) - Network accessline 115
body["sha"] = r0.json().get("sha") r = requests.put(url, headers=H, json=body, timeout=30) if r.status_code in (200, 201): - Network accessline 116
r = requests.put(url, headers=H, json=body, timeout=30) - Network accessline 124
if not site: return {"ok": False, "error": "先在设置里配置 site_url"} r = requests.post(f"{site}/wp-json/wp/v2/posts", - Network accessline 125
return {"ok": False, "error": "先在设置里配置 site_url"} r = requests.post(f"{site}/wp-json/wp/v2/posts", auth=(os.environ["WP_USER"], os.environ["WP_APP_PASSWORD"]), - Network accessline 126
r = requests.post(f"{site}/wp-json/wp/v2/posts", - Access to secretsline 127
[Credential-related source omitted] - Network accessline 138
if not thumb: return {"ok": False, "error": "缺封面:先在设置里配置 thumb_media_id(永久素材)"} tr = requests.get("https://api.weixin.qq.com/cgi-bin/token", - Network accessline 139
return {"ok": False, "error": "缺封面:先在设置里配置 thumb_media_id(永久素材)"} tr = requests.get("https://api.weixin.qq.com/cgi-bin/token", params={"grant_type": "client_credential", - Network accessline 140
tr = requests.get("https://api.weixin.qq.com/cgi-bin/token", - Access to secretsline 142
[Credential-related source omitted] - Access to secretsline 143
[Credential-related source omitted] - Access to secretsline 144
[Credential-related source omitted] - Network accessline 147
[Credential-related source omitted] - Network accessline 148
[Credential-related source omitted] - Network accessline 149
[Credential-related source omitted] - Access to secretsline 149
[Credential-related source omitted] - Network accessline 157
def _pub_webhook(cfg, text, title, fname): r = requests.post(os.environ["PUBLISH_WEBHOOK_URL"], - Network accessline 158
[Credential-related source omitted] - Access to secretsline 158
[Credential-related source omitted]
skills/geolook/scripts/report.py
- Executable scriptline 1
Executable file
skills/geolook/scripts/sample.py
- Executable scriptline 1
Executable file - Network accessline 35
"glm": { "name": "智谱GLM", "market": "cn", "base": "https://open.bigmodel.cn/api/paas/v4", - Network accessline 37
"base": "https://open.bigmodel.cn/api/paas/v4", - Access to secretsline 39
[Credential-related source omitted] - Access to secretsline 41
[Credential-related source omitted] - Network accessline 48
"name": "豆包(方舟API)", "market": "cn", "protocol": "ark", "base": "https://ark.cn-beijing.volces.com/api/v3", - Network accessline 49
"protocol": "ark", "base": "https://ark.cn-beijing.volces.com/api/v3", "model": os.environ.get("ARK_MODEL", "doubao-seed-1-6-250615"), - Network accessline 50
"base": "https://ark.cn-beijing.volces.com/api/v3", - Access to secretsline 51
[Credential-related source omitted] - Access to secretsline 53
[Credential-related source omitted] - Network accessline 57
"deepseek": { "name": "DeepSeek", "market": "cn", "base": "https://api.deepseek.com/v1", - Network accessline 58
"name": "DeepSeek", "market": "cn", "base": "https://api.deepseek.com/v1", "model": os.environ.get("DEEPSEEK_MODEL", "deepseek-v4-flash"), - Network accessline 59
"base": "https://api.deepseek.com/v1", - Access to secretsline 60
[Credential-related source omitted] - Access to secretsline 62
[Credential-related source omitted] - Network accessline 66
"kimi": { "name": "Kimi", "market": "cn", "base": "https://api.moonshot.cn/v1", - Network accessline 67
"name": "Kimi", "market": "cn", "base": "https://api.moonshot.cn/v1", "model": os.environ.get("MOONSHOT_MODEL", "kimi-k2-0905-preview"), - Network accessline 68
"base": "https://api.moonshot.cn/v1", - Access to secretsline 69
[Credential-related source omitted] - Access to secretsline 71
[Credential-related source omitted] - Network accessline 75
"minimax": { "name": "MiniMax", "market": "cn", "base": "https://api.minimaxi.com/v1", - Network accessline 76
"name": "MiniMax", "market": "cn", "base": "https://api.minimaxi.com/v1", "model": os.environ.get("MINIMAX_MODEL", "MiniMax-M2"), - Network accessline 77
"base": "https://api.minimaxi.com/v1", - Access to secretsline 78
[Credential-related source omitted] - Access to secretsline 80
[Credential-related source omitted] - Network accessline 85
"gemini": { "name": "Gemini", "market": "global", "base": "https://generativelanguage.googleapis.com/v1beta/openai", - Network accessline 86
"name": "Gemini", "market": "global", "base": "https://generativelanguage.googleapis.com/v1beta/openai", "model": os.environ.get("GEMINI_MODEL", "gemini-2.5-flash"), - Network accessline 87
"base": "https://generativelanguage.googleapis.com/v1beta/openai", - Access to secretsline 88
[Credential-related source omitted] - Access to secretsline 90
[Credential-related source omitted] - Network accessline 94
"openai": { "name": "OpenAI(ChatGPT)", "market": "global", "base": os.environ.get("OPENAI_BASE_URL", "https://api.openai.com/v1"), - Network accessline 95
"name": "OpenAI(ChatGPT)", "market": "global", "base": os.environ.get("OPENAI_BASE_URL", "https://api.openai.com/v1"), "model": os.environ.get("OPENAI_MODEL", "gpt-4o-mini"), - Network accessline 96
[Credential-related source omitted] - Access to secretsline 96
[Credential-related source omitted] - Access to secretsline 97
[Credential-related source omitted] - Access to secretsline 99
[Credential-related source omitted] - Network accessline 105
"name": "Claude", "market": "global", "protocol": "anthropic", "base": "https://api.anthropic.com/v1", - Network accessline 106
"protocol": "anthropic", "base": "https://api.anthropic.com/v1", "model": os.environ.get("ANTHROPIC_MODEL", "claude-sonnet-5"), - Network accessline 107
"base": "https://api.anthropic.com/v1", - Access to secretsline 108
[Credential-related source omitted] - Access to secretsline 110
[Credential-related source omitted] - Network accessline 114
"grok": { "name": "Grok", "market": "global", "base": "https://api.x.ai/v1", - Network accessline 115
"name": "Grok", "market": "global", "base": "https://api.x.ai/v1", "model": os.environ.get("GROK_MODEL", "grok-3-mini"), - Network accessline 116
"base": "https://api.x.ai/v1", - Access to secretsline 117
[Credential-related source omitted] - Access to secretsline 119
[Credential-related source omitted] - Network accessline 123
"perplexity": { "name": "Perplexity", "market": "global", "base": "https://api.perplexity.ai", - Network accessline 124
"name": "Perplexity", "market": "global", "base": "https://api.perplexity.ai", "model": os.environ.get("PERPLEXITY_MODEL", "sonar"), - Network accessline 125
"base": "https://api.perplexity.ai", - Access to secretsline 126
[Credential-related source omitted] - Access to secretsline 128
[Credential-related source omitted] - Network accessline 143
# ------------------------------------------------------------ 302.AI 统一 Key 模式 # 一把 Key 跑通 9 个 LLM 平台。设 AI302AI_MODE=1 且填 AI302AI_API_KEY 后, # sample/aggregate 全部走 https://api.302ai.cn/v1(国内端点·OpenAI 兼容 + Anthropic 兼容)。 - Network accessline 144
[Credential-related source omitted] - Access to secretsline 144
[Credential-related source omitted] - Network accessline 145
# sample/aggregate 全部走 https://api.302ai.cn/v1(国内端点·OpenAI 兼容 + Anthropic 兼容)。 - Access to secretsline 147
[Credential-related source omitted] - Network accessline 149
AI302AI_BASE = "https://api.302ai.cn/v1" - Access to secretsline 170
[Credential-related source omitted] - Network accessline 175
# ============================================================ # OpenRouter 模式(与 302.AI 并列:用户只配一个聚合器) # 端点:https://openrouter.ai/api/v1(纯 OpenAI 兼容协议) - Network accessline 176
# OpenRouter 模式(与 302.AI 并列:用户只配一个聚合器) # 端点:https://openrouter.ai/api/v1(纯 OpenAI 兼容协议) # 注意:OpenRouter 上没有 Doubao,豆包在 OpenRouter 模式下被自动跳过 - Network accessline 177
# 端点:https://openrouter.ai/api/v1(纯 OpenAI 兼容协议) - Network accessline 180
OPENROUTER_BASE = "https://openrouter.ai/api/v1" - Access to secretsline 200
[Credential-related source omitted] - Access to secretsline 217
[Credential-related source omitted] - Access to secretsline 220
[Credential-related source omitted] - Access to secretsline 224
[Credential-related source omitted] - Access to secretsline 226
[Credential-related source omitted] - Access to secretsline 247
[Credential-related source omitted] - Access to secretsline 250
[Credential-related source omitted] - Access to secretsline 254
[Credential-related source omitted] - Access to secretsline 256
[Credential-related source omitted] - Network accessline 265
# ------------------------------------------------------------ 302.AI 多源搜索 # 一把 Key + 9 个搜索 provider。详见 .claude/skills/302ai-cli-skill/references/search.md # 端点:POST https://api.302.ai/302/general/search - Network accessline 266
# 一把 Key + 9 个搜索 provider。详见 .claude/skills/302ai-cli-skill/references/search.md # 端点:POST https://api.302.ai/302/general/search # 默认按市场分流:cn → bocha(中文质量好),global → tavily(英文质量好) - Network accessline 267
# 端点:POST https://api.302.ai/302/general/search - Network accessline 269
AI302AI_SEARCH_URL = "https://api.302ai.cn/302/general/search" - Access to secretsline 318
[Credential-related source omitted] - Network accessline 329
body["exclude_domains"] = exclude_domains try: r = requests.post( - Network accessline 330
try: r = requests.post( AI302AI_SEARCH_URL, - Network accessline 331
r = requests.post( - Access to secretsline 333
[Credential-related source omitted] - Access to secretsline 373
[Credential-related source omitted] - Access to secretsline 377
[Credential-related source omitted] - Access to secretsline 432
[Credential-related source omitted] - Access to secretsline 433
[Credential-related source omitted] - Access to secretsline 441
[Credential-related source omitted] - Access to secretsline 443
[Credential-related source omitted] - Access to secretsline 448
[Credential-related source omitted] - Access to secretsline 489
[Credential-related source omitted] - Access to secretsline 492
[Credential-related source omitted] - Access to secretsline 494
[Credential-related source omitted] - Network accessline 499
[Credential-related source omitted] - Network accessline 500
try: r = requests.post(f"{p['base']}/responses", headers=H, json={"model": p["model"], "input": question, - Network accessline 501
r = requests.post(f"{p['base']}/responses", headers=H, - Network accessline 527
try: # 降级:不联网的普通对话 r = requests.post(f"{p['base']}/chat/completions", headers=H, - Network accessline 528
r = requests.post(f"{p['base']}/chat/completions", headers=H, - Network accessline 543
for attempt in range(len(delays) + 1): try: r = requests.post( - Network accessline 544
try: r = requests.post( f"{p['base']}/messages", - Network accessline 545
r = requests.post( - Access to secretsline 579
[Credential-related source omitted] - Access to secretsline 581
[Credential-related source omitted] - Network accessline 606
[Credential-related source omitted] - Network accessline 607
if p.get("key_env") == "__OPENROUTER__": headers["HTTP-Referer"] = "https://github.com/aigclink/geolook" headers["X-Title"] = "GeoLook GEO Toolchain" - Network accessline 608
headers["HTTP-Referer"] = "https://github.com/aigclink/geolook" - Network accessline 611
for attempt in range(len(delays) + 1): try: r = requests.post( - Network accessline 612
try: r = requests.post( f"{p['base']}/chat/completions", - Network accessline 613
r = requests.post(
skills/geolook/scripts/tasks.py
- Executable scriptline 1
Executable file - Network accessline 95
t = _t(next(seq), "P0", "页面技术", "修复前端渲染空壳页(SSR / 预渲染)", "静态 HTML 无正文,多数 AI 抓取器看到的是空白页——国内官网最常见致命伤(method.md 可抓取性)", "对受影响路由启用 SSR 或预渲染,确保 curl 拿到的 HTML 含完整正文", - Network accessline 96
"静态 HTML 无正文,多数 AI 抓取器看到的是空白页——国内官网最常见致命伤(method.md 可抓取性)", "对受影响路由启用 SSR 或预渲染,确保 curl 拿到的 HTML 含完整正文", "开发", "M", {"type": "auto", "check": "pages.static_text", - Network accessline 97
"对受影响路由启用 SSR 或预渲染,确保 curl 拿到的 HTML 含完整正文",
skills/geolook/scripts/ui.html
- Network accessline 138
const esc=s=>String(s??'').replace(/[&<>"]/g,c=>({'&':'&','<':'<','>':'>','"':'"'}[c])); const pct=v=>v==null?'—':(v*100).toFixed(v>0&&v<0.095?1:0)+'%'; const api=async(u,o)=>{try{const r=await fetch(u,o);if(!r.ok)return{erro - Network accessline 139
const pct=v=>v==null?'—':(v*100).toFixed(v>0&&v<0.095?1:0)+'%'; const api=async(u,o)=>{try{const r=await fetch(u,o);if(!r.ok)return{error:`HTTP ${r.status}`};return await r.json().catch(()=>({error:'响应不是 JSON'}))}catch(e){return{error:'连接失败 - Network accessline 140
const api=async(u,o)=>{try{const r=await fetch(u,o);if(!r.ok)return{error:`HTTP ${r.status}`};return await r.json().catch(()=>({error:'响应不是 JSON'}))}catch(e){return{error:'连接失败:服务未响应'}}}; - Network accessline 1244
} async function editSheet(name){ const r=await fetch(`/files/${SLUG}/samples/${encodeURIComponent(name)}`); - Network accessline 1245
async function editSheet(name){ const r=await fetch(`/files/${SLUG}/samples/${encodeURIComponent(name)}`); if(!r.ok){toast('采样表不存在','err');return} - Network accessline 1246
const r=await fetch(`/files/${SLUG}/samples/${encodeURIComponent(name)}`); - Access to secretsline 1499
[Credential-related source omitted] - Access to secretsline 1513
[Credential-related source omitted] - Network accessline 1522
const curSp=ai.search_provider||''; modal(`<h4 style="font-size:17px">⚡ 302.AI 统一模式</h4> <p class="muted" style="font-size:12.5px;margin:4px 0 12px;line-height:1.55">在 <a href="https://302.ai" target="_blank" style="color:var(--a300)" - Network accessline 1524
<p class="muted" style="font-size:12.5px;margin:4px 0 12px;line-height:1.55">在 <a href="https://302.ai" target="_blank" style="color:var(--a300)">302.AI</a> 控制台申请一把 API Key,即可解锁全部 9 个 LLM 平台 + 9 个搜索 provider。</p> - Access to secretsline 1556
[Credential-related source omitted] - Access to secretsline 1571
[Credential-related source omitted] - Access to secretsline 1580
[Credential-related source omitted] - Access to secretsline 1588
[Credential-related source omitted] - Access to secretsline 1607
[Credential-related source omitted] - Access to secretsline 1617
[Credential-related source omitted] - Network accessline 1629
const models=or.models||[]; modal(`<h4 style="font-size:17px">🌐 OpenRouter 统一模式</h4> <p class="muted" style="font-size:12.5px;margin:4px 0 12px;line-height:1.55">在 <a href="https://openrouter.ai/keys" target="_blank" style="color:var( - Network accessline 1630
modal(`<h4 style="font-size:17px">🌐 OpenRouter 统一模式</h4> <p class="muted" style="font-size:12.5px;margin:4px 0 12px;line-height:1.55">在 <a href="https://openrouter.ai/keys" target="_blank" style="color:var(--a300)">openrouter.ai/keys</a - Network accessline 1631
<p class="muted" style="font-size:12.5px;margin:4px 0 12px;line-height:1.55">在 <a href="https://openrouter.ai/keys" target="_blank" style="color:var(--a300)">openrouter.ai/keys</a> 申请一把 API Key,即可解锁 10 个 LLM 平台(含 MiniMax-M3 1M 多模态 + bytedan - Access to secretsline 1656
[Credential-related source omitted] - Access to secretsline 1673
[Credential-related source omitted] - Access to secretsline 1681
[Credential-related source omitted] - Network accessline 1717
<div class="card" style="box-shadow:0 0 0 1px var(--a700);padding:14px 16px;gap:6px;display:flex;flex-direction:column"> <div style="font-size:13.5px;font-weight:500">⚡ 302.AI 模式</div> <div style="font-size:11.5px;co - Network accessline 1718
<div style="font-size:13.5px;font-weight:500">⚡ 302.AI 模式</div> <div style="font-size:11.5px;color:var(--t400);line-height:1.6">1 把 Key 解锁 <b>9 LLM + 9 搜索 + 豆包</b>。<a href="https://302.ai" target="_blank" style="color:var(--a300 - Network accessline 1719
<div style="font-size:11.5px;color:var(--t400);line-height:1.6">1 把 Key 解锁 <b>9 LLM + 9 搜索 + 豆包</b>。<a href="https://302.ai" target="_blank" style="color:var(--a300)">注册</a>,模型默认 2026-08 最新。</div> - Network accessline 1725
<div class="card" style="box-shadow:0 0 0 1px var(--a300);padding:14px 16px;gap:6px;display:flex;flex-direction:column"> <div style="font-size:13.5px;font-weight:500">🌐 OpenRouter 模式</div> <div style="font-size:11.5p - Network accessline 1726
<div style="font-size:13.5px;font-weight:500">🌐 OpenRouter 模式</div> <div style="font-size:11.5px;color:var(--t400);line-height:1.6">1 把 Key 解锁 <b>10 LLM(含 M3 多模态 + bytedance-seed 豆包)</b>。<a href="https://openrouter.ai/keys" targ - Network accessline 1727
<div style="font-size:11.5px;color:var(--t400);line-height:1.6">1 把 Key 解锁 <b>10 LLM(含 M3 多模态 + bytedance-seed 豆包)</b>。<a href="https://openrouter.ai/keys" target="_blank" style="color:var(--a300)">申请</a>,覆盖 Llama/Mistral/Qwen 等更多西方模型。</div - Network accessline 1745
</div>` :`<div class="muted" style="font-size:12px">已配置引擎:国内 ${okCn} 个 · 海外 ${okGl} 个(可在「设置」增改)${(ST.obMkt||'both')!=='global'&&!okCn?'——注意国内市场尚无可用 Key':''}${(ST.obMkt||'both')!=='cn'&&!okGl?'——注意海外市场尚无可用 Key':''}</div>`} <div c - Network accessline 1746
:`<div class="muted" style="font-size:12px">已配置引擎:国内 ${okCn} 个 · 海外 ${okGl} 个(可在「设置」增改)${(ST.obMkt||'both')!=='global'&&!okCn?'——注意国内市场尚无可用 Key':''}${(ST.obMkt||'both')!=='cn'&&!okGl?'——注意海外市场尚无可用 Key':''}</div>`} <div class="field">< - Network accessline 1747
<div class="field"><label>官网域名 *</label><input id="ob-url" class="input" placeholder="https://example.com" value="${esc(ST.obUrl||'')}"></div>
skills/geolook/scripts/verify.py
- Executable scriptline 1
Executable file
skills/geolook/tests/__init__.py
- Executable scriptline 1
Executable file
skills/geolook/tests/test_analytics.py
skills/geolook/tests/test_audit.py
- Executable scriptline 1
Executable file - Network accessline 12
def make_page(url="https://example.com/", text="", wc=None, **kw): - Network accessline 34
def test_functional_page_exempt(self): r = A.score_page(make_page(url="https://example.com/login", text=SPA_TEXT), []) - Network accessline 35
r = A.score_page(make_page(url="https://example.com/login", text=SPA_TEXT), []) - Network accessline 40
def test_functional_page_case_insensitive(self): r = A.score_page(make_page(url="https://example.com/Auth/SignIn", text=SPA_TEXT), []) - Network accessline 41
r = A.score_page(make_page(url="https://example.com/Auth/SignIn", text=SPA_TEXT), []) - Network accessline 45
def test_normal_low_page_still_spa(self): r = A.score_page(make_page(url="https://example.com/products", text=SPA_TEXT), []) - Network accessline 46
r = A.score_page(make_page(url="https://example.com/products", text=SPA_TEXT), []) - Network accessline 81
class TestNormalizeUrl(unittest.TestCase): def test_strips_tracking_params(self): u = G.normalize_url("https://example.com/", "/p?utm_source=x&fbclid=y&id=42&gclid=z") - Network accessline 82
def test_strips_tracking_params(self): u = G.normalize_url("https://example.com/", "/p?utm_source=x&fbclid=y&id=42&gclid=z") self.assertEqual(u, "https://example.com/p?id=42") - Network accessline 83
u = G.normalize_url("https://example.com/", "/p?utm_source=x&fbclid=y&id=42&gclid=z") - Network accessline 84
self.assertEqual(u, "https://example.com/p?id=42") - Network accessline 86
def test_strips_ref_spm(self): u = G.normalize_url("https://example.com/", "https://example.com/a?ref=nav&spm=1.2.3&lang=zh") - Network accessline 87
u = G.normalize_url("https://example.com/", "https://example.com/a?ref=nav&spm=1.2.3&lang=zh") - Network accessline 88
self.assertEqual(u, "https://example.com/a?lang=zh") - Network accessline 90
def test_no_query_unchanged(self): u = G.normalize_url("https://example.com/", "/about#team") - Network accessline 91
u = G.normalize_url("https://example.com/", "/about#team") - Network accessline 92
self.assertEqual(u, "https://example.com/about") - Network accessline 109
pages = [] for i in range(35): pages.append({"url": f"https://example.com/p{i}", "score": 50, - Network accessline 110
for i in range(35): pages.append({"url": f"https://example.com/p{i}", "score": 50, "word_count": 500, "jsonld_types": ["Article"], - Network accessline 111
pages.append({"url": f"https://example.com/p{i}", "score": 50, - Network accessline 117
"pages": pages, "avg_score": 50, "block_gap": [{"block": "定义", "missing_pages": 35, "total": 35}]} cfg = {"market": "cn", "brand": {"name": "X", "site": "https://example.com"}} - Network accessline 118
"block_gap": [{"block": "定义", "missing_pages": 35, "total": 35}]} cfg = {"market": "cn", "brand": {"name": "X", "site": "https://example.com"}} out = T.from_audit(audit, cfg, iter(f"T-{i:03d}" for i in range(1, 99))) - Network accessline 119
cfg = {"market": "cn", "brand": {"name": "X", "site": "https://example.com"}} - Network accessline 127
class TestAvgScore(unittest.TestCase): def test_zero_score_200_pages_counted(self): pages = [make_page(url="https://example.com/a", text=SPA_TEXT), - Network accessline 128
def test_zero_score_200_pages_counted(self): pages = [make_page(url="https://example.com/a", text=SPA_TEXT), make_page(url="https://example.com/b", text=SPA_TEXT, status=404)] - Network accessline 129
pages = [make_page(url="https://example.com/a", text=SPA_TEXT), - Network accessline 130
make_page(url="https://example.com/b", text=SPA_TEXT, status=404)] - Network accessline 160
(pdir / "evidence").mkdir(parents=True) (pdir / "geo.json").write_text(json.dumps( {"brand": {"name": "T", "site": "https://example.com"}, "market": "cn"}, - Network accessline 161
(pdir / "geo.json").write_text(json.dumps( {"brand": {"name": "T", "site": "https://example.com"}, "market": "cn"}, ensure_ascii=False), "utf-8") - Network accessline 162
{"brand": {"name": "T", "site": "https://example.com"}, "market": "cn"}, - Network accessline 163
ensure_ascii=False), "utf-8") pages = [ make_page(url="https://example.com/ja/", text=ja_text, language="zh", wc=200), - Network accessline 164
pages = [ make_page(url="https://example.com/ja/", text=ja_text, language="zh", wc=200), make_page(url="https://example.com/zh/", text=zh_text, language="zh", wc=200), - Network accessline 165
make_page(url="https://example.com/ja/", text=ja_text, language="zh", wc=200), - Network accessline 166
make_page(url="https://example.com/zh/", text=zh_text, language="zh", wc=200),
skills/geolook/tests/test_bootstrap.py
- Executable scriptline 1
Executable file - Network accessline 33
BASE_CFG = { "brand": {"name": "测试品牌", "aliases": [], "site": "https://t.example.com"}, - Network accessline 34
"brand": {"name": "测试品牌", "aliases": [], "site": "https://t.example.com"}, - Network accessline 45
class TestHomepageFirst(WorkDirCase): def test_root_is_first_page_not_highest_scored(self): home = "https://t.example.com/" - Network accessline 46
def test_root_is_first_page_not_highest_scored(self): home = "https://t.example.com/" deep = "https://t.example.com/blog/hot-article" - Network accessline 47
home = "https://t.example.com/" - Network accessline 48
deep = "https://t.example.com/blog/hot-article"
skills/geolook/tests/test_crawl.py
- Executable scriptline 1
Executable file - Network accessline 16
self.status_code = status self.headers = {"Content-Type": ctype} self.url = "http://x.test/" - Network accessline 17
self.headers = {"Content-Type": ctype} self.url = "http://x.test/" self._body = body - Network accessline 18
self.url = "http://x.test/" - Network accessline 31
with mock.patch.object(G.requests, "get", side_effect=responses) as get, \ mock.patch.object(G.time, "sleep"): res = G.fetch("http://x.test/", retries=retries) - Network accessline 32
mock.patch.object(G.time, "sleep"): res = G.fetch("http://x.test/", retries=retries) return res, get.call_count - Network accessline 33
res = G.fetch("http://x.test/", retries=retries)
skills/geolook/tests/test_deliver.py
- Executable scriptline 1
Executable file - Network accessline 30
pdir.mkdir(parents=True) (pdir / "geo.json").write_text(json.dumps( {"brand": {"name": "X", "site": "https://x.com"}, "market": "cn"}, - Network accessline 31
(pdir / "geo.json").write_text(json.dumps( {"brand": {"name": "X", "site": "https://x.com"}, "market": "cn"}, ensure_ascii=False), "utf-8") - Network accessline 32
{"brand": {"name": "X", "site": "https://x.com"}, "market": "cn"},
skills/geolook/tests/test_geolib.py
- Executable scriptline 1
Executable file
skills/geolook/tests/test_jobs.py
- Executable scriptline 1
Executable file
skills/geolook/tests/test_report.py
skills/geolook/tests/test_sample.py
- Executable scriptline 1
Executable file - Network accessline 10
CFG = { "brand": {"name": "AIGCLINK定制家", "aliases": ["定制家"], "site": "https://aigclink.example.com"}, - Network accessline 11
"brand": {"name": "AIGCLINK定制家", "aliases": ["定制家"], "site": "https://aigclink.example.com"}, - Network accessline 50
def test_latin_alias_requires_boundary(self): cfg = {"brand": {"name": "灵眸", "aliases": ["AIGC"], "site": "https://x.example.com"}, - Network accessline 51
cfg = {"brand": {"name": "灵眸", "aliases": ["AIGC"], "site": "https://x.example.com"}, - Access to secretsline 123
[Credential-related source omitted]
skills/geolook/tests/test_tasks.py
- Executable scriptline 1
Executable file - Network accessline 30
CFG = {"brand": {"name": "X", "site": "https://x.com"}, - Network accessline 81
(pdir / "metrics").mkdir(parents=True) (pdir / "geo.json").write_text(json.dumps( {"brand": {"name": "X", "site": "https://x.com"}, - Network accessline 82
(pdir / "geo.json").write_text(json.dumps( {"brand": {"name": "X", "site": "https://x.com"}, "market": "cn", "targets": {"mention_rate": 0.3}}, ensure_ascii=False), "utf-8") - Network accessline 83
{"brand": {"name": "X", "site": "https://x.com"},
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: 20 facts
- Allows Bash without restrictions, though it has no scripts or shell blocksgeo-content-optimizer/SKILL.md:9High confidence
- Contacts schema.org, which SKILL.md, the README and the plugin manifest do not mentiongeo-optimizer/scripts/schema_generator.py:13High confidence
- Contacts api.moonshot.cn, which SKILL.md, the README and the plugin manifest do not mentiongeo-optimizer/scripts/visibility_tester.py:66High confidence
- Contacts api.302ai.cn, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/dashboard.py:545High confidence
- Contacts openrouter.ai, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/dashboard.py:608High confidence
- Contacts schema.org, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/generate.py:137High confidence
- Contacts api.github.com, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/publish.py:110High confidence
- Contacts api.weixin.qq.com, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/publish.py:140High confidence
- Contacts open.bigmodel.cn, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/sample.py:37High confidence
- Contacts ark.cn-beijing.volces.com, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/sample.py:50High confidence
- Contacts api.deepseek.com, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/sample.py:59High confidence
- Contacts api.moonshot.cn, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/sample.py:68High confidence
- Contacts api.minimaxi.com, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/sample.py:77High confidence
- Contacts generativelanguage.googleapis.com, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/sample.py:87High confidence
- Contacts api.openai.com, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/sample.py:96High confidence
- Contacts api.anthropic.com, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/sample.py:107High confidence
- Contacts api.x.ai, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/sample.py:116High confidence
- Contacts api.302ai.cn, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/sample.py:149High confidence
- Contacts openrouter.ai, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/sample.py:180High confidence
- Contacts github.com, which SKILL.md, the README and the plugin manifest do not mentiongeolook/scripts/sample.py:608High confidence
Signal confidence: 480 facts
- Network access in code of documentationgeo-content-optimizer/README.md:21Low confidence
- Network access in code of documentationgeo-content-optimizer/README.md:29Low confidence
- Network access in code of documentationgeo-content-optimizer/README.md:30Low confidence
- Network access in code of documentationgeo-content-optimizer/README.md:33Low confidence
- Network access in code of documentationgeo-content-optimizer/README.md:34Low confidence
- Network access in code of documentationgeo-content-optimizer/README.md:35Low confidence
- Broad permissions in the frontmatter of the SKILL.mdgeo-content-optimizer/SKILL.md:1High confidence
- Network access in prose of the SKILL.mdgeo-content-optimizer/SKILL.md:30Low confidence
- Network access in prose of documentationgeo-optimizer/README.md:203Low confidence
- Network access in prose of the SKILL.mdgeo-optimizer/SKILL.md:165Low confidence
- Network access in prose of documentationgeo-optimizer/references/best-practices.md:27Low confidence
- Network access in prose of documentationgeo-optimizer/references/best-practices.md:28Low confidence
- Network access in prose of documentationgeo-optimizer/references/best-practices.md:29Low confidence
- Network access in prose of documentationgeo-optimizer/references/geo-framework.md:23Low confidence
- Network access in code of documentationgeo-optimizer/references/schema-templates.md:23Low confidence
- Network access in code of documentationgeo-optimizer/references/schema-templates.md:24Low confidence
- Network access in code of documentationgeo-optimizer/references/schema-templates.md:49Low confidence
- Network access in code of documentationgeo-optimizer/references/schema-templates.md:50Low confidence
- Network access in code of documentationgeo-optimizer/references/schema-templates.md:74Low confidence
- Network access in code of documentationgeo-optimizer/references/schema-templates.md:75Low confidence
- Network access in code of documentationgeo-optimizer/references/schema-templates.md:129Low confidence
- Network access in code of documentationgeo-optimizer/references/schema-templates.md:130Low confidence
- Network access in code of documentationgeo-optimizer/references/schema-templates.md:161Low confidence
- Network access in code of documentationgeo-optimizer/references/schema-templates.md:162Low confidence
- Network access in code of documentationgeo-optimizer/references/schema-templates.md:186Low confidence
- Network access in code of documentationgeo-optimizer/references/schema-templates.md:187Low confidence
- Network access in code of documentationgeo-optimizer/references/schema-templates.md:204Low confidence
- Network access in code of documentationgeo-optimizer/references/schema-templates.md:205Low confidence
- Network access in code of documentationgeo-optimizer/references/schema-templates.md:225Low confidence
- Executable script in code of a file that runsgeo-optimizer/scripts/geo_report_generator.py:1High confidence
- Executable script in code of a file that runsgeo-optimizer/scripts/readability_checker.py:1High confidence
- Executable script in code of a file that runsgeo-optimizer/scripts/schema_generator.py:1High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:11High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:12High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:13High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:41High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:42High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:43High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:51High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:52High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:53High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:113High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:114High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:115High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:133High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:134High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:135High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:154High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:155High confidence
- Network access in code of a file that runsgeo-optimizer/scripts/schema_generator.py:156High confidence
and 430 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Frontmatter field argument-hint in skills/geo-content-optimizer/SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/geo-content-optimizer/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/geo-content-optimizer/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/geo-content-optimizer/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/geo-content-optimizer/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/geo-content-optimizer/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.