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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit f56124f0583a7c5e9642637f2cc1034811860caf

236GitHub stars
7stars in 7 days
3skills in this repository
0commits in 30 days

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

Oct 25, 2026Nov 6, 2026236

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

Individual skills in this repository

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 tokens

Always available to the agent

SKILL.md

1,556 tokens

When the skill is activated

Reference documents

378 tokens

Loaded on request

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

The playbook

  1. Input
  2. Phase 0: Output Directory Setup
  3. Phase 1: Scrape Page Title
  4. Phase 2: Query Fan-Out Research
  5. Phase 3: Main Query Extraction
  6. Phase 4: Google AI Overview Retrieval
  7. Phase 5: Query Fan-Out Summarization
  8. Phase 6: Comparison & Optimization Report
  9. Important Notes

Files

  • README.mddoc1,428 bytes
  • SKILL.mdcore6,375 bytes

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

View the complete source on GitHub

Skills 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 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 12 notes
  • skills/geo-optimizer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/geo-optimizer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/geo-optimizer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/geo-optimizer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/geo-optimizer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/geolook/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/geolook/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/geolook/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/geolook/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/geolook/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/geolook/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/geolook/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
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

  • Access to secretsline 67
    [Credential-related source omitted]
  • Access to secretsline 68
    [Credential-related source omitted]
  • Access to secretsline 69
    [Credential-related source omitted]

skills/geolook/references/known-issues.md

  • Network accessline 24
    **事实**: - **国内端点 `https://api.302ai.cn`**(新版本目录)才是本账号可用目录,代码 `AI302AI_BASE` 已是它。
  • Network accessline 25
    - **国内端点 `https://api.302ai.cn`**(新版本目录)才是本账号可用目录,代码 `AI302AI_BASE` 已是它。
  • Network accessline 28
    **规则**:判断「某平台/某模型是否可用」前,先 `GET https://api.302ai.cn/v1/models`

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

  • Executable scriptline 1
    Executable file
  • Network accessline 164
    home = G.fetch(root)
  • Network accessline 170
    def crawl_one(i: int, u: str) -> dict:         res = home if u.rstrip("/") == root else G.fetch(u)
  • Network accessline 171
    res = home if u.rstrip("/") == root else G.fetch(u)

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

  • Executable scriptline 1
    Executable file
  • Access to secretsline 150
    [Credential-related source omitted]

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=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[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

  • Executable scriptline 1
    Executable file
  • Network accessline 12
    CFG = {     "brand": {"name": "Acme", "site": "https://www.acme.com", "aliases": []},
  • Network accessline 13
    "brand": {"name": "Acme", "site": "https://www.acme.com", "aliases": []},

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

  • Executable scriptline 1
    Executable file
  • Network accessline 9
    CFG = {"brand": {"name": "Acme", "site": "https://www.acme.com"}, "market": "both"}

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
Signal confidence: 480 facts

and 430 more

Only the first 500 facts are listed.

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeFrontmatter field argument-hint in skills/geo-content-optimizer/SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md skills/geo-content-optimizer/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md skills/geo-content-optimizer/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md skills/geo-content-optimizer/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md skills/geo-content-optimizer/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard 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.