Philosophy: The README is just the facade; the real value is hidden in Issues, Commits, and community discussions.
Workflow
[项目名] → [1. 定位 Repo] → [2. 多源采集] → [3. 分析研判] → [4. 结构化输出]
Phase 1: Locate the Repo
- Use
web_searchto searchsite:github.com <project_name>to confirm the full org/repo - Use
search-layer(Deep mode + intent-aware) to additionally fetch community links and non-GitHub resources:python3 skills/search-layer/scripts/search.py \ --queries "<project_name> review" "<project_name> 评测 使用体验" \ --mode deep --intent exploratory --num 5 - Use
web_fetchto fetch the repo homepage and obtain basic information (README, Stars, Forks, License, most recent update)
Phase 2: Multi-Source Collection (Parallel)
⚠️ GitHub page scraping rules (mandatory): GitHub repo pages are SPAs (client-side rendered),web_fetch can only get the navigation bar shell,using web_fetch to scrape github.com repo pages is prohibited. Always use the GitHub API:
- README:
curl -s -H "Authorization: token {PAT}" -H "Accept: application/vnd.github.v3.raw" "https://api.github.com/repos/{owner}/{repo}/readme" - Repo metadata:
curl -s -H "Authorization: token {PAT}" "https://api.github.com/repos/{owner}/{repo}" - Issues:
curl -s -H "Authorization: token {PAT}" "https://api.github.com/repos/{owner}/{repo}/issues?state=all&sort=comments&per_page=10" - Commits:
curl -s -H "Authorization: token {PAT}" "https://api.github.com/repos/{owner}/{repo}/commits?per_page=10" - File tree:
curl -s -H "Authorization: token {PAT}" "https://api.github.com/repos/{owner}/{repo}/git/trees/{branch}?recursive=1"
See TOOLS.md for the PAT.
The following sourcesare checked on demand; collect if present, skip if not:
| Source | URL Pattern | Content to Collect | Recommended Tool |
|---|---|---|---|
| GitHub Repo | github.com/{org}/{repo} |
README、About、Contributors | web_fetch |
| GitHub Issues | github.com/{org}/{repo}/issues?q=sort:comments |
Top 3-5 high-quality Issues | browser |
| Chinese communities | WeChat/Zhihu/Xiaohongshu | In-depth reviews, usage experience | content-extract |
| Tech blogs | Medium/Dev.to | Technical architecture analysis | web_fetch / content-extract |
| Discussion forums | V2EX/Reddit | User feedback, complaints | search-layer(Deep mode) |
search-layer invocation spec
search-layer v2 supports intent-aware scoring. Recommended usage in the github-explorer scenario:
| Scenario | Command | Description |
|---|---|---|
| Project research (default) | python3 skills/search-layer/scripts/search.py --queries "<project> review" "<project> 评测" --mode deep --intent exploratory --num 5 |
Multiple queries in parallel, ranked by authority |
| Latest updates | python3 skills/search-layer/scripts/search.py "<project> latest release" --mode deep --intent status --freshness pw --num 5 |
Prioritize freshness, filter to within one week |
| Competitor comparison | python3 skills/search-layer/scripts/search.py --queries "<project> vs <competitor>" "<project> alternatives" --mode deep --intent comparison --num 5 |
Comparison intent, dual weighting of keywords + authority |
| Quick link lookup | python3 skills/search-layer/scripts/search.py "<project> official docs" --mode fast --intent resource --num 3 |
Exact match, fastest |
| Community discussion | python3 skills/search-layer/scripts/search.py "<project> discussion experience" --mode deep --intent exploratory --domain-boost reddit.com,news.ycombinator.com --num 5 |
Weighted community sites |
Intent type quick reference:factual(fact) / status(dynamic) / comparison(comparison) / tutorial(tutorial) / exploratory(exploration) / news(news) / resource(resource location)
Without
--intent, the behavior is exactly the same as v1 (no scoring, output in original order).
Fallback rules: If either Exa/Tavily returns 429/5xx → continue with the remaining sources; if the script fails entirely → fall back to web_search as a single source.
Extraction Fallback and Upgrade Protocol (Extraction Upgrade)
When encountering the following situations,you mustupgrade from web_fetch to content-extract:
- Domain restrictions:
mp.weixin.qq.com,zhihu.com,xiaohongshu.com。 - Complex structure: The page contains many formulas (LaTeX), complex tables, or the Markdown returned by
web_fetchis extremely messy. - Missing content:
web_fetchreturns empty content or a Challenge page due to anti-scraping measures.
Invocation method:
python3 skills/content-extract/scripts/content_extract.py --url <URL>
Internally, content-extract will:
- First check the domain whitelist (WeChat/Zhihu, etc.); if matched, go directly to MinerU
- Otherwise, first use the
web_fetchprobe; if it fails, fall back to MinerU-HTML - Return a unified JSON contract (including fields such as
ok,markdown,sources)
Phase 3: Analysis and Assessment
Make judgments based on the collected data:
- Project stage: early experimentation / rapid growth / mature and stable / maintenance mode / stalled (based on commit frequency and content)
- Featured Issue criteria: high comment count, maintainer participation, exposure of architectural issues, or inclusion of valuable technical discussion
- Competitor identification: extracted from the "Comparison"/"Alternatives" sections of the README, Issues discussions, and web searches
Phase 4: Structured Output
Output strictly according to the following template;every module must have substantive content or be explicitly marked as "not found"。
Formatting rules (mandatory)
- The title must link to the GitHub repository(format:
# [Project Name](https://github.com/org/repo), ensuring it is clickable and navigable) - Use a blank line uniformly before and after the title(end of previous section → blank line → title → blank line → content, ensuring clear visual separation)
- Telegram blank line fix (mandatory): Telegram will swallow the blank line after list items (starting with
-). Solution: between the end of the list and the next title, insert a line containing a Braille blank⠀(U+2800), in the following format:
This ensures that the blank line before the title is not swallowed when rendered in Telegram.- 列表最后一项 ⠀ **下一个标题** - Bold all titles(emoji + bold text)
- Competitor comparisons must include links(GitHub / official website / documentation, at least one)
- Community buzz must be specific: cite specific post/tweet/discussion content summaries with original links. Do not write general descriptions like "highly praised" or "very popular"; write "so-and-so said what" or "a certain post discussed what specific issue"
- Information traceability principle: all cited external information should include the original link so readers can trace it to the source
# [{Project Name}]({GitHub Repo URL})
**🎯 一句话定位**
{是什么、解决什么问题}
**⚙️ 核心机制**
{技术原理/架构,用人话讲清楚,不是复制 README。包含关键技术栈。}
**📊 项目健康度**
- **Stars**: {数量} | **Forks**: {数量} | **License**: {类型}
- **团队/作者**: {背景}
- **Commit 趋势**: {最近活跃度 + 项目阶段判断}
- **最近动态**: {最近几条重要 commit 概述}
**🔥 精选 Issue**
{Top 3-5 高质量 Issue,每条包含标题、链接、核心讨论点。如无高质量 Issue 则注明。}
**✅ 适用场景**
{什么时候该用,解决什么具体问题}
**⚠️ 局限**
{什么时候别碰,已知问题}
**🆚 竞品对比**
{同赛道项目对比,差异点。每个竞品必须附 GitHub 或官网链接,格式示例:}
- **vs [GraphRAG](https://github.com/microsoft/graphrag)** — 差异描述
- **vs [RAGFlow](https://github.com/infiniflow/ragflow)** — 差异描述
**🌐 知识图谱**
- **DeepWiki**: {链接或"未收录"}
- **Zread.ai**: {链接或"未收录"}
**🎬 Demo**
{在线体验链接,或"无"}
**📄 关联论文**
{arXiv 链接,或"无"}
**📰 社区声量**
**X/Twitter**
{具体引用推文内容摘要 + 链接,格式示例:}
- [@某用户](链接): "具体说了什么..."
- [某讨论串](链接): 讨论了什么具体问题...
{如未找到则注明"未找到相关讨论"}
**中文社区**
{具体引用帖子标题/内容摘要 + 链接,格式示例:}
- [知乎: 帖子标题](链接) — 讨论了什么
- [V2EX: 帖子标题](链接) — 讨论了什么
{如未找到则注明"未找到相关讨论"}
**💬 我的判断**
{主观评价:值不值得投入时间,适合什么水平的人,建议怎么用}
Execution Notes
- Prioritize using
web_search+web_fetch, with browser as a fallback - Search enhancement: project research tasks use
search-layerv2 Deep mode +--intent exploratoryby default (Brave + Exa + Tavily three-source parallel deduplication + intent-aware scoring); failure of a single source does not block the main process - Scraping fallback (mandatory): when
web_fetchfails/403/anti-scraping page/content too short, or the source domain is a high-risk site (such as WeChat/Zhihu/Xiaohongshu): switch tocontent-extract(which internally falls back to MinerU-HTML) to obtain cleaner Markdown + traceable sources - Collect from different sources in parallel to improve efficiency
- All links must be genuinely accessible; do not fabricate URLs
- Output in Chinese, keep technical terms in English
⚠️ Output self-check list (mandatory, check item by item before each output)
Before outputting the report,you must check the following items one by one, and only send after all pass:
- Title link:
# [Project Name](GitHub URL)format, clickable to jump - Heading blank lines: each bold heading (
**🎯 ...**) has a blank line before and after it - Telegram blank lines: between the end of each list block and the next heading there is a braille blank space
⠀line (to prevent Telegram from swallowing blank lines) - Issue links: each featured Issue has a complete
[#号 标题](完整URL)format - Competitor links: each competitor includes
[名称](GitHub/官网链接) - Community buzz links: each quote has
[来源: 标题](URL)format - No vague descriptions: the community buzz section has no generalized descriptions such as "highly praised" or "very popular"
- Information traceability: all external references include original links
Dependencies
This Skill depends on the following OpenClaw tools and Skills:
| Dependency | Type | Purpose |
|---|---|---|
web_search |
Built-in tool | Brave Search retrieval |
web_fetch |
Built-in tool | Web content scraping |
browser |
Built-in tool | Dynamic page rendering (alternative) |
search-layer |
Skill | Multi-source search + intent-aware scoring (Brave + Exa + Tavily + Grok), v2.1 supports --intent / --queries / --freshness |
content-extract |
Skill | High-fidelity content extraction (fallback for anti-scraping sites) |