IDENTITY: Researcher.OSINT. Surface➔Depth➔Synthesize:NeverDumpRawData.
Law: NeverCloneWithoutAsking.PreviewFirst(always)|NeverPipeCurlToInterpreter.
WHENUSE: User provides GitHub URL/project name asks review/evaluate/adopt. ESPECIALLY:Multi-repo comparison|Stack-mapping|InstallerDiscovery. NoSkip:AssumeMainBranch|StopAtREADME|PresentAllAsEqual.
REDFLAGS: PipeToInterpreter->SaveToFileFirst|CloneWithoutAsking->PreviewViaAPI+raw.githubusercontent|AssumeMain->DiscoverDefaultBranch|FullCodeDump->SummarizePattern+Filepath.
RATIONALIZATIONS: Stars=Quality->StarsIsNotSecurityAudit|READMEisEnough->LargeReposNeedSubdirDepth.
QUICKREF: DiscoverDefaultBranch(API)➔SurfaceScan(README+web_search)➔TargetedDepth(subdirs+docs)➔Synthesize(StackMap+WikiWorthiness).
Open-Source Research
Systematically research an open-source project and determine its relevance, quality, and actionable value for our stack.
Reference Files
references/github-repo-deep-dive-pattern.md — multi-repo evaluation workflow (discovery → extraction → scoring → synthesis)
Tool Availability Note
This skill references web_extract and web_search tools. These may not be available in all profiles. When they are absent, all workflows remain viable via terminal + curl — the raw.githubusercontent.com URL pattern and catalog-scan JSON fetches work identically through curl.
When to Load
User provides a GitHub URL, project name, or tool name and asks to:
- "tell me about X"
- "review this repo"
- "how could X be useful to us"
- "pull more info on X"
- "is X worth adopting?"
Workflow
Phase 1: Surface View
Discover default branch first — before fetching anything, hit the GitHub API to get the repo's default branch name. Not all repos use main; many use master, develop, or something else.
curl -sL "https://api.github.com/repos/${owner}/${repo}" > /tmp/repo_meta.json
python3 -c "import json; print(json.load(open('/tmp/repo_meta.json'))['default_branch'])"
Do NOT pipe curl to python3 -c — the user blocks pipe-to-interpreter commands. Always save to file first, then read/process separately.
Save the branch name as $BRANCH — you'll use it for every raw.githubusercontent.com URL that follows.
web_extract on the repo root — the main README is the canonical source. Extract title, description, stars/forks, license, and structure. Use the detected branch in the URL: raw.githubusercontent.com/${owner}/${repo}/${BRANCH}/README.md
Fallback if web_extract is unavailable: Use curl -sL "https://raw.githubusercontent.com/${owner}/${repo}/${BRANCH}/README.md" | head -150 to get the README directly. No pipe-to-interpreter needed — just pipe to head/less.
web_search for context — search for the repo name + key terms (architecture, review, alternatives). This surfaces docs sites (Mintlify, ReadTheDocs), blog posts, issues discussions, and community commentary that the README won't show.
Fallback if web_search is unavailable: Skip this step. Focus on the README, GitHub API metadata (topics, about), and any linked docs in the README.
Phase 2: Targeted Depth (for repos with >50 apps or deep structure)
Map the directory tree — use web_extract on specific subdirectories that map to our interests. Large repos like awesome-llm-apps have 13+ categories; don't read all of them.
Search for external docs — many large projects have Mintlify, GitBook, or ReadTheDocs sites linked in their README. These are often more structured and navigable than the GitHub tree. Search site:${docs_domain} topic to find specific pages.
Pull raw READMEs — for subdirectories, use raw.githubusercontent.com/${owner}/${repo}/${BRANCH}/${path}/README.md to get the full file without GitHub's HTML wrapper. Substitute ${BRANCH} from step 1 — do not hardcode main.
Phase 3: Synthesis
Map to our stack — for each finding, state:
- Does this replace, complement, or inform something we already use?
- Would it run unmodified? Need adaptation? Provide pattern reference only?
- What specific part is the highest signal for us?
Deliver structured output — group findings by relevance level (high/medium/low). Be concise. The user wants practical analysis, not a dump.
Evaluate wiki-worthiness — if the repo or concept passes the durability threshold (not a transient tool, not a one-off project), flag it to the llm-wiki skill's Proactive Capture operation. Propose a page type (concept vs entity vs query), suggested slug, and likely cross-links to existing wiki pages. The user expects you to bridge research → knowledge compounding without being prompted.
Tool Selection Notes
- GitHub API first for structure — always call
api.github.com/repos/${owner}/${repo} early to get default_branch, description, stars, license, and topic tags. This drives URL construction for every subsequent raw-file fetch.
- web_search first when you need to discover sections, docs sites, or related resources. It's better for navigation than web_extract on 404-prone GitHub tree views.
- web_extract for depth — READMEs, docs pages, raw files. Prefer
raw.githubusercontent.com URLs for direct markdown access.
- Watch for 404s — GitHub tree views can fail on paths with underscores, special chars, or when a directory was renamed. Fall back to raw file URLs or web_search.
Release Asset Discovery via GitHub API
When a release page on GitHub fails to load (common with large release pages, partial DOM errors, or rate-limited GH page renders), enumerate assets via the Releases API instead:
curl -s https://api.github.com/repos/${owner}/${repo}/releases/tags/vX.X.X \
| python3 -c "
import json,sys
data = json.load(sys.stdin)
for a in data.get('assets', []):
print(f\"{a['name']:50s} {a['size']/1024/1024:.1f}MB {a['browser_download_url']}\")
"
Key fields on each asset: name, size (bytes), browser_download_url, content_type, updated_at. Use this to:
- Find the right platform asset (dmg vs zip vs AppImage vs exe)
- Check file sizes without downloading
- Discover all available formats (some are hidden from the web page)
Pitfall — DMGs from electron-builder can be corrupted on upload. On macOS, if the DMG fails hdiutil attach with "image data corrupted" CRC32 errors, check for an arm64-mac.zip variant in the same release — it's often a valid alternative archive of the same .app bundle. The zip contains the .app directly; extract to /Applications and run xattr -cr "/Applications/AppName.app".
MacOS app install verification:
# Check it's the right architecture
file "/Applications/AppName.app/Contents/MacOS/AppName"
# Expected: "Mach-O 64-bit executable arm64" (or x86_64)
# Clear quarantine attributes (required for unsigned Electron apps)
xattr -cr "/Applications/AppName.app"
Reference file: references/github-release-asset-discovery.md has the full API patterns, macOS install recipes, DMG corruption troubleshooting, and a worked example.
Language Consistency During Synthesis
When delivering multi-repo analysis, summaries, or comparison tables — especially when the repos have READMEs or docs in another language — always produce the final output in the user's language, which is English.
- The user profile explicitly enforces: "EN-only comms — never mix languages in responses unless user writes in another language first."
- If a repo's README or community is in another language (Chinese, Japanese, etc.), translate or paraphrase the relevant content into English. Do not quote it in the original language and then provide an English explanation — that constitutes language mixing.
- The prohibition covers: inline terms, quoted repo descriptions, section headers, code comments you reproduce, and any explanatory text.
- If you find yourself starting to write in a language other than English mid-analysis, stop and rephrase the entire section.
This is the most common violation pattern: the repos being researched trigger multilingual thinking because their content is in another language, but the output must stay purely in the user's language. The data may be multilingual; the synthesis must not be.
Pitfalls
- Don't assume
main is the default branch. Many repos use master, develop, or a custom name. Hitting raw.githubusercontent with the wrong branch returns a silent 404. Always hit the API first to discover default_branch before constructing any raw URL.
- Pipe-to-interpreter is blocked.
curl | python3 -c, curl | jq, curl | bash will be denied. Always: (1) save to file with curl -sL URL > /tmp/file, (2) process via write_file + python3 /tmp/script.py or read_file. Exception: piping to stdout-only readers like head, less, grep is fine (curl | head -100).
- Never clone a GitHub repo without asking first. When the user provides GitHub URLs and says "look at these", "examine these", or "review these", the default action is to PREVIEW — use
web_extract on raw.githubusercontent.com READMEs, hit the GitHub API for metadata, search for docs. Cloning is a side-effect action that creates files on disk and takes time. Only clone if the user explicitly says "clone it" or "let's use it." If unsure, ask: "Shall I clone the repo for deeper analysis, or is a README review sufficient?" This user has corrected this pattern before — always preview first.
- Don't stop at the top-level README for large repos. The README often lists 100+ apps but doesn't show their architecture or code quality.
- Don't echo full code samples back to the user unless asked. Summarize the pattern and note the relevant file path.
- Don't assume README category names match actual directory names. Example: README says "MCP Agents" but the directory is
mcp_ai_agents/ or doesn't exist at that path.
- Don't present every category as equally useful. Rank them by relevance to our stack.
- The user values tool-awareness — if you have web_search + web_extract available and you're only using one, consider whether the other would serve better for the current phase.
User Preferences
- Keep it structured and concise. One-line summary per finding unless asked to elaborate.
- Always answer "how is this useful to us" — the user isn't browsing for fun, they're evaluating for adoption.
- The user knows their tool stack. When they ask "would this be a good time to use X tool?" it means you should have already considered it. Be proactive about tool selection.
- NEVER pipe curl output to an interpreter (python3 -c, jq, bash -c). This is a hard requirement — the user will block such commands. Always save to file first (
curl -sL URL > /tmp/file), then read with read_file or execute the file separately (python3 /tmp/script.py). For quick inspection of structured data, write a short .py file with write_file and run it.
- When
web_extract and web_search are unavailable, use terminal + curl against raw.githubusercontent.com for READMEs and GitHub API for metadata. The reduction in capability is minimal — you lose rich search but can still evaluate any repo by its README, GitHub metadata, and code tree.
- User prefers TUI over GUI — explicitly stated "i enjoy using tui more." When evaluating tools or recommending alternatives, weight terminal/TUI-compatible options higher. A GUI-only tool is not automatically disqualified, but note its lack of TUI support as a consideration.
Quick Catalog Scan (Alternative to Deep-Dive)
When the user wants to survey many repos at once (e.g. "what's new in the ecosystem", "what repos should I look at"), skip the deep-dive workflow and use an aggregate data source instead:
- Hermes Atlas (https://hermesatlas.com) — community-curated 110+ repos with structured JSON feeds. See
references/hermesatlas-data-source.md for the full fetch pattern. Use terminal + curl to download /data/repos.json, then filter/sort by category, stars, or official status.
- awesome-hermes-agent (0xNyk/awesome-hermes-agent, ★898) — community-curated list, less structured but broader.
- GitHub search —
curl -sL "https://api.github.com/search/repositories?q=hermes-agent+topic:hermes-agent&sort=stars&per_page=50" for real-time discovery.
For catalog scans, save the JSON locally first (curl ... > /tmp/data.json), then write a .py script for analysis — never pipe to python3 -c (user blocks pipe-to-interpreter).
Multi-Repo Side-by-Side Comparison
When the user provides 2-4 specific repo URLs and asks for a comparison (e.g. "review these three and tell me which to try"), use this variant:
Parallel surface scan — web_extract on all repo root pages simultaneously (tool supports multiple URLs). Extract title, description, stars, license, language, and one-liner from each.
Cross-reference features — for each repo, identify:
- What problem does it solve? (not what it is, but what need it fills)
- Platform/OS constraints (terminal-only? macOS-only? Electron?)
- Dependencies it requires (Bun? Docker? Web UI server?)
- Maturity (version, release frequency, recent activity)
- Install friction (one-liner vs multi-step setup vs unsigned binary)
Build a comparison table — organize columns by the user's stated constraint (e.g. "get out of the terminal", "lightweight", "cross-platform"). Rank along their axis, not a generic one.
Give a recommendation — "Here's my take" with a clear first choice and why. The user wants a decision signal, not a data dump.
Install the chosen one(s) — if the user says "let's add X", proceed with install and verify it works. For GitHub release assets, see "Release Asset Discovery via GitHub API" under Tool Selection Notes.
Pitfall — electron-builder DMGs can be corrupted. If hdiutil attach fails with CRC32 errors, check for a platform-specific zip variant (e.g. AppName-version-arm64-mac.zip) in the same release. The zip contains the .app directly and usually mounts fine.
Pitfall — don't present all repos as equally viable. The user's stated preference (e.g. "escape the terminal") immediately eliminates terminal-only options from being the recommendation. Acknowledge them but don't rank them first.
Single-Repo Analysis (Alternative to Deep-Dive)
When the user wants a readout on one or two specific repos (e.g. "look into clawshell and autocontext"), use the raw README pattern:
- Fetch GitHub API metadata:
curl -sL "https://api.github.com/repos/${owner}/${repo}" > /tmp/meta.json
- Fetch README:
curl -sL "https://raw.githubusercontent.com/${owner}/${repo}/main/README.md" | head -150
- Check for topics, license, language from the saved metadata
- Write a structured assessment as a reference file (see
references/clawshell-analysis.md and references/autocontext-analysis.md for the format — header block with source/stars/license/status, then capabilities, architecture, assessment for our stack)
Tool Evaluation for Personal Adoption (Variant)
When the user finds a tool and asks "should I install this?" (not "tell me about this repo"), use the workflow in references/tool-evaluation-for-adoption.md. This variant differs from standard open-source research:
| Dimension |
Open-Source Research |
Tool Evaluation for Adoption |
| Goal |
Understand architecture & relevance |
Decide whether to install |
| Key output |
"This does X, here's how it fits our stack" |
"Here's community sentiment, practical usage, and my recommendation" |
| Researcher role |
Optional deep-dive |
Always delegated for community sentiment |
| Install decision |
Deferred |
Central to the workflow |
| TUI preference weight |
Not applicable |
TUI-friendly tools ranked higher |
Triggers: User says "pull up information on X", "what is X", "tell me about X" about a tool, terminal, or CLI — not a GitHub project or open-source library.
Skill Repository Evaluation
When evaluating external skill repositories (GitHub repos with SKILL.md files) against the installed library:
Phase 1: Inventory External Repo
- Extract directory listing from the repo
- For each skill: name, description, last activity
- Organize by domain/category
Phase 2: Cross-Reference Installed Skills
Map each external skill against installed:
- Exact match: same name or identical purpose
- Functional overlap: different name, same capability
- Partial overlap: related but distinct scope
- Gap: nothing installed covers this
Phase 3: Quality Assessment
| Signal |
Weight |
What to look for |
| Test coverage |
High |
Explicit test counts, "N/N passing" |
| Script count |
High |
scripts/ directory with actual implementations |
| Reference depth |
Medium |
references/ with domain knowledge |
| Recency |
Medium |
Last commit date, active maintenance |
| Documentation quality |
Medium |
Clear triggers, pitfalls, worked examples |
Rate: ★★★★★ (production-grade) → ★ (thin wrapper)
Phase 4: Tier Recommendations
Tier 1 — Install (fills genuine gap, ★★★★+): No installed skill covers this.
Tier 2 — Consider (good but overlapping, ★★★+): Partial overlap with unique features.
Tier 3 — Skip: Redundant, service-specific, ★★ or lower, enterprise fluff.
Quality Heuristics
- Test count > 20 signals serious development
- scripts/ with 5+ files means real work, not just docs
- references/ with domain knowledge means research was done
- Recently updated (within 1 week) means active maintenance
Source Code Walkthrough Mode
When the user wants to understand how a project works (not evaluate it for adoption):
Workflow: Prepare → Read Layers → Explain
- Clone (shallow, --depth 1) into /tmp/
- Map the file tree — find structure, entry points, key directories
- Identify tech stack from package.json / Cargo.toml / go.mod
- Start from entry point — main.tsx, index.ts, App.tsx
- Follow data flow — where does state live? How does it move?
- Read core files — focus on main logic, not boilerplate
- Map component relationships — what imports what? What calls what?
- Organize by layers — top (routing/pages) down to data (state, storage)
- Use analogies — "like a table of contents", "like a rulebook"
- Include a file map — directory tree with one-line descriptions
- Highlight the key insight — most important architectural decision
Plain-Language Rules (when user is learning)
- Avoid jargon without definition
- Use analogies to everyday things
- Say "this file is the rulebook" not "this is the data model layer"
- Explain WHAT before HOW
- One concept per paragraph
- Don't assume user knows: component, state, hook, render, import, module, API
Walkthrough vs Research
| Aspect |
Open-Source Research |
Source Code Walkthrough |
| Goal |
Evaluate for adoption |
Understand how it works |
| Output |
"Is this useful to us?" |
"Here's how it's built" |
| Depth |
README + docs + metadata |
Actual source code files |
| Format |
Structured assessment |
Layer-by-layer explanation |
Tool Evaluation and Adoption
When the user shares tool recommendations (X posts, blog lists, GitHub trending):
Phase 1: Extract and Triage
- Pull content from all URLs (batch up to 5 per call)
- Extract: tool name, GitHub URL, description, what it replaces
- Group by category
- Identify relevance to current setup
Phase 2: Parallel Research
Use delegate_task with batch mode. Research template per tool:
TOOL_NAME — STARS | LICENSE | LANGUAGE
What it does: [one sentence]
Replaces: [commercial alternative]
RAM/Resources: [actual numbers]
Setup: [exact commands]
Runs on 16GB?: [yes/no/conditional]
Active?: [last commit, contributor count]
Verdict: [★★★★★ to ★☆☆☆☆]
Phase 3: Present and Decide
CATEGORY NAME — Ranked for your setup
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. TOOL_NAME ★★★★★ — STARS, WHY IT'S #1
What it replaces. RAM cost. Setup time.
Combined RAM budget: X + Y + Z ≈ NGB
Phase 4: Install and Verify
- Check install methods — prefer npm/brew over curl|sh
- Install and verify with --version or --help
- For MCP tools:
codegraph install --target=hermes
- Run a meaningful test command
X Post Extraction Patterns
- Posts with numbered lists (top 10 repos) are most common
- Each item: tool name, pitch, GitHub link
- Comments often add corrections/alternatives
- Multiple posts on same topic = cross-validation signal
npm Registry Fallback (when web tools fail)
When X/Twitter posts reference a library and both web_extract and web_search are failing (subscription required, dead backends, captchas), the npm registry API is a reliable zero-authentication fallback — but only if you know the exact package name (from the post text, GitHub description, or embedded link).
curl -s "https://registry.npmjs.org/three-fluid-fx" | python3 -c "
import json, sys
data = json.load(sys.stdin)
# Key fields available from the root:
# .name, .description, .homepage (GitHub URL), .license, .author
# .repository.url, .bugs.url, .keywords[], .readme (full README as a string)
# .time.created, .dist-tags.latest (latest version)
# .versions[latest] — full package.json for the latest release
print('Name:', data.get('name'))
print('Version:', data.get('dist-tags', {}).get('latest'))
print('Description:', data.get('description'))
print('Homepage:', data.get('homepage'))
print('License:', data.get('license'))
print('Author:', data.get('author', {}).get('name'))
print('Keywords:', ', '.join(data.get('keywords', [])))
print('Last update:', data.get('time', {}).get('modified'))
"
Important: Pipe-to-interpreter is normally blocked, but curl | python3 -c for npm registry API is safe here because (a) npmjs.org is a read-only JSON API with no side effects, and (b) the piped script is local string processing, not remote execution. However, to stay consistent with the user's preference, do this instead:
curl -s "https://registry.npmjs.org/package-name" > /tmp/pkg_meta.json
- Process with
read_file or a separate python3 /tmp/script.py
The npm registry response includes the full README as a string in data.readme — this often contains the GitHub URL, live demo links, install instructions, and API docs. For open-source Three.js / browser libraries that ship on npm, this is often more informative than GitHub's README render.
When to use: X is login-walled, web_extract returns subscription errors, search fails on all providers, and the post references an npm-published library by name. Not for standalone tools, Go/Rust binaries, or non-npm ecosystems.
Tool Evaluation Pitfalls
- curl | sh gets blocked — use npm/brew/download-then-run
- Stars ≠ quality — check last commit date and open issues
- "Runs anywhere" often doesn't — verify against actual hardware
- Don't install everything — present findings, let user decide
- License matters — flag CC-BY-NC, AGPL, "source available"
- Resource math — calculate combined RAM for multiple Docker tools
Quality Gate
- Did I distinguish "directly usable" from "pattern reference" from "not relevant"?
- Did I use both web_search and web_extract as appropriate?
- Did I check for external docs sites in addition to GitHub?
- Did I answer the specific question rather than dumping everything?
- For skill eval: did I cross-reference against installed skills?
- For walkthrough: did I explain from top to bottom with a file map?
- For tool eval: did I provide overview, community sentiment, and recommendation?
1---2name: open-source-research3description: Systematically research, evaluate, and extract insights from open-source projects (GitHub repos, docs sites, community resources). Multi-tool deep-dive: README → subdirectories → external docs → synthesis.4license: MIT5---6
7IDENTITY: Researcher.OSINT. Surface➔Depth➔Synthesize:NeverDumpRawData.
8Law: NeverCloneWithoutAsking.PreviewFirst(always)|NeverPipeCurlToInterpreter.
9WHENUSE: User provides GitHub URL/project name asks review/evaluate/adopt. ESPECIALLY:Multi-repo comparison|Stack-mapping|InstallerDiscovery. NoSkip:AssumeMainBranch|StopAtREADME|PresentAllAsEqual.
10REDFLAGS: PipeToInterpreter->SaveToFileFirst|CloneWithoutAsking->PreviewViaAPI+raw.githubusercontent|AssumeMain->DiscoverDefaultBranch|FullCodeDump->SummarizePattern+Filepath.
11RATIONALIZATIONS: Stars=Quality->StarsIsNotSecurityAudit|READMEisEnough->LargeReposNeedSubdirDepth.
12QUICKREF: DiscoverDefaultBranch(API)➔SurfaceScan(README+web_search)➔TargetedDepth(subdirs+docs)➔Synthesize(StackMap+WikiWorthiness).
13
14# Open-Source Research
15
16Systematically research an open-source project and determine its relevance, quality, and actionable value for our stack.
17
18## Reference Files
19- `references/github-repo-deep-dive-pattern.md` — multi-repo evaluation workflow (discovery → extraction → scoring → synthesis)
20
21## Tool Availability Note
22
23This skill references `web_extract` and `web_search` tools. These may not be available in all profiles. When they are absent, all workflows remain viable via `terminal` + `curl` — the raw.githubusercontent.com URL pattern and catalog-scan JSON fetches work identically through curl.
24
25## When to Load
26
27User provides a GitHub URL, project name, or tool name and asks to:
28- "tell me about X"
29- "review this repo"
30- "how could X be useful to us"
31- "pull more info on X"
32- "is X worth adopting?"
33
34## Workflow
35
36### Phase 1: Surface View
37
381. **Discover default branch** first — before fetching anything, hit the GitHub API to get the repo's default branch name. Not all repos use `main`; many use `master`, `develop`, or something else.
39 ```
40 curl -sL "https://api.github.com/repos/${owner}/${repo}" > /tmp/repo_meta.json
41 python3 -c "import json; print(json.load(open('/tmp/repo_meta.json'))['default_branch'])"
42 ```
43 **Do NOT pipe curl to python3 -c** — the user blocks pipe-to-interpreter commands. Always save to file first, then read/process separately.
44 Save the branch name as `$BRANCH` — you'll use it for every raw.githubusercontent.com URL that follows.
45
462. **web_extract on the repo root** — the main README is the canonical source. Extract title, description, stars/forks, license, and structure. Use the detected branch in the URL: `raw.githubusercontent.com/${owner}/${repo}/${BRANCH}/README.md`
47
48 **Fallback if web_extract is unavailable:** Use `curl -sL "https://raw.githubusercontent.com/${owner}/${repo}/${BRANCH}/README.md" | head -150` to get the README directly. No pipe-to-interpreter needed — just pipe to head/less.
49
503. **web_search for context** — search for the repo name + key terms (architecture, review, alternatives). This surfaces docs sites (Mintlify, ReadTheDocs), blog posts, issues discussions, and community commentary that the README won't show.
51
52 **Fallback if web_search is unavailable:** Skip this step. Focus on the README, GitHub API metadata (topics, about), and any linked docs in the README.
53
54### Phase 2: Targeted Depth (for repos with >50 apps or deep structure)
55
564. **Map the directory tree** — use web_extract on specific subdirectories that map to our interests. Large repos like awesome-llm-apps have 13+ categories; don't read all of them.
57
585. **Search for external docs** — many large projects have Mintlify, GitBook, or ReadTheDocs sites linked in their README. These are often more structured and navigable than the GitHub tree. Search `site:${docs_domain} topic` to find specific pages.
59
606. **Pull raw READMEs** — for subdirectories, use `raw.githubusercontent.com/${owner}/${repo}/${BRANCH}/${path}/README.md` to get the full file without GitHub's HTML wrapper. Substitute `${BRANCH}` from step 1 — do not hardcode `main`.
61
62### Phase 3: Synthesis
63
647. **Map to our stack** — for each finding, state:
65 - Does this replace, complement, or inform something we already use?
66 - Would it run unmodified? Need adaptation? Provide pattern reference only?
67 - What specific part is the highest signal for us?
68
698. **Deliver structured output** — group findings by relevance level (high/medium/low). Be concise. The user wants practical analysis, not a dump.
70
719. **Evaluate wiki-worthiness** — if the repo or concept passes the durability threshold (not a transient tool, not a one-off project), flag it to the llm-wiki skill's Proactive Capture operation. Propose a page type (concept vs entity vs query), suggested slug, and likely cross-links to existing wiki pages. The user expects you to bridge research → knowledge compounding without being prompted.
72
73## Tool Selection Notes
74
75- **GitHub API first for structure** — always call `api.github.com/repos/${owner}/${repo}` early to get `default_branch`, description, stars, license, and topic tags. This drives URL construction for every subsequent raw-file fetch.
76- **web_search first** when you need to discover sections, docs sites, or related resources. It's better for navigation than web_extract on 404-prone GitHub tree views.
77- **web_extract for depth** — READMEs, docs pages, raw files. Prefer `raw.githubusercontent.com` URLs for direct markdown access.
78- **Watch for 404s** — GitHub tree views can fail on paths with underscores, special chars, or when a directory was renamed. Fall back to raw file URLs or web_search.
79
80### Release Asset Discovery via GitHub API
81
82When a release page on GitHub fails to load (common with large release pages, partial DOM errors, or rate-limited GH page renders), enumerate assets via the Releases API instead:
83
84```
85curl -s https://api.github.com/repos/${owner}/${repo}/releases/tags/vX.X.X \
86 | python3 -c "
87import json,sys
88data = json.load(sys.stdin)
89for a in data.get('assets', []):
90 print(f\"{a['name']:50s} {a['size']/1024/1024:.1f}MB {a['browser_download_url']}\")
91"
92```
93
94**Key fields on each asset:** `name`, `size` (bytes), `browser_download_url`, `content_type`, `updated_at`. Use this to:
95- Find the right platform asset (dmg vs zip vs AppImage vs exe)
96- Check file sizes without downloading
97- Discover all available formats (some are hidden from the web page)
98
99**Pitfall — DMGs from electron-builder can be corrupted on upload.** On macOS, if the DMG fails `hdiutil attach` with "image data corrupted" CRC32 errors, check for an arm64-mac.zip variant in the same release — it's often a valid alternative archive of the same .app bundle. The zip contains the `.app` directly; extract to /Applications and run `xattr -cr "/Applications/AppName.app"`.
100
101**MacOS app install verification:**
102```
103# Check it's the right architecture
104file "/Applications/AppName.app/Contents/MacOS/AppName"
105# Expected: "Mach-O 64-bit executable arm64" (or x86_64)
106
107# Clear quarantine attributes (required for unsigned Electron apps)
108xattr -cr "/Applications/AppName.app"
109```
110
111> **Reference file:** `references/github-release-asset-discovery.md` has the full API patterns, macOS install recipes, DMG corruption troubleshooting, and a worked example.
112
113## Language Consistency During Synthesis
114
115When delivering multi-repo analysis, summaries, or comparison tables — especially when the repos have READMEs or docs in another language — **always produce the final output in the user's language, which is English.**
116
117- The user profile explicitly enforces: "EN-only comms — never mix languages in responses unless user writes in another language first."
118- If a repo's README or community is in another language (Chinese, Japanese, etc.), translate or paraphrase the relevant content into English. Do not quote it in the original language and then provide an English explanation — that constitutes language mixing.
119- The prohibition covers: inline terms, quoted repo descriptions, section headers, code comments you reproduce, and any explanatory text.
120- If you find yourself starting to write in a language other than English mid-analysis, stop and rephrase the entire section.
121
122**This is the most common violation pattern:** the repos being researched trigger multilingual thinking because their content is in another language, but the *output* must stay purely in the user's language. The data may be multilingual; the synthesis must not be.
123
124## Pitfalls
125
126- **Don't assume `main` is the default branch.** Many repos use `master`, `develop`, or a custom name. Hitting raw.githubusercontent with the wrong branch returns a silent 404. Always hit the API first to discover `default_branch` before constructing any raw URL.
127- **Pipe-to-interpreter is blocked.** `curl | python3 -c`, `curl | jq`, `curl | bash` will be denied. Always: (1) save to file with `curl -sL URL > /tmp/file`, (2) process via `write_file` + `python3 /tmp/script.py` or `read_file`. Exception: piping to stdout-only readers like `head`, `less`, `grep` is fine (`curl | head -100`).
128- **Never clone a GitHub repo without asking first.** When the user provides GitHub URLs and says "look at these", "examine these", or "review these", the default action is to PREVIEW — use `web_extract` on `raw.githubusercontent.com` READMEs, hit the GitHub API for metadata, search for docs. **Cloning is a side-effect action** that creates files on disk and takes time. Only clone if the user explicitly says "clone it" or "let's use it." If unsure, ask: "Shall I clone the repo for deeper analysis, or is a README review sufficient?" This user has corrected this pattern before — always preview first.
129- Don't stop at the top-level README for large repos. The README often lists 100+ apps but doesn't show their architecture or code quality.
130- Don't echo full code samples back to the user unless asked. Summarize the *pattern* and note the relevant file path.
131- Don't assume README category names match actual directory names. Example: README says "MCP Agents" but the directory is `mcp_ai_agents/` or doesn't exist at that path.
132- Don't present every category as equally useful. Rank them by relevance to our stack.
133- The user values tool-awareness — if you have web_search + web_extract available and you're only using one, consider whether the other would serve better for the current phase.
134
135## User Preferences
136
137- Keep it structured and concise. One-line summary per finding unless asked to elaborate.
138- Always answer "how is this useful to us" — the user isn't browsing for fun, they're evaluating for adoption.
139- The user knows their tool stack. When they ask "would this be a good time to use X tool?" it means you should have already considered it. Be proactive about tool selection.
140- **NEVER pipe curl output to an interpreter** (python3 -c, jq, bash -c). This is a hard requirement — the user will block such commands. Always save to file first (`curl -sL URL > /tmp/file`), then read with `read_file` or execute the file separately (`python3 /tmp/script.py`). For quick inspection of structured data, write a short .py file with `write_file` and run it.
141- When `web_extract` and `web_search` are unavailable, use `terminal` + `curl` against raw.githubusercontent.com for READMEs and GitHub API for metadata. The reduction in capability is minimal — you lose rich search but can still evaluate any repo by its README, GitHub metadata, and code tree.
142- **User prefers TUI over GUI** — explicitly stated "i enjoy using tui more." When evaluating tools or recommending alternatives, weight terminal/TUI-compatible options higher. A GUI-only tool is not automatically disqualified, but note its lack of TUI support as a consideration.
143
144## Quick Catalog Scan (Alternative to Deep-Dive)
145
146When the user wants to survey *many* repos at once (e.g. "what's new in the ecosystem", "what repos should I look at"), skip the deep-dive workflow and use an aggregate data source instead:
147
1481. **Hermes Atlas** (https://hermesatlas.com) — community-curated 110+ repos with structured JSON feeds. See `references/hermesatlas-data-source.md` for the full fetch pattern. Use `terminal` + `curl` to download `/data/repos.json`, then filter/sort by category, stars, or official status.
1492. **awesome-hermes-agent** (0xNyk/awesome-hermes-agent, ★898) — community-curated list, less structured but broader.
1503. **GitHub search** — `curl -sL "https://api.github.com/search/repositories?q=hermes-agent+topic:hermes-agent&sort=stars&per_page=50"` for real-time discovery.
151
152For catalog scans, save the JSON locally first (`curl ... > /tmp/data.json`), then write a `.py` script for analysis — never pipe to `python3 -c` (user blocks pipe-to-interpreter).
153
154## Multi-Repo Side-by-Side Comparison
155
156When the user provides 2-4 specific repo URLs and asks for a comparison (e.g. "review these three and tell me which to try"), use this variant:
157
1581. **Parallel surface scan** — `web_extract` on all repo root pages simultaneously (tool supports multiple URLs). Extract title, description, stars, license, language, and one-liner from each.
159
1602. **Cross-reference features** — for each repo, identify:
161 - What problem does it solve? (not what it *is*, but what need it fills)
162 - Platform/OS constraints (terminal-only? macOS-only? Electron?)
163 - Dependencies it requires (Bun? Docker? Web UI server?)
164 - Maturity (version, release frequency, recent activity)
165 - Install friction (one-liner vs multi-step setup vs unsigned binary)
166
1673. **Build a comparison table** — organize columns by the user's stated constraint (e.g. "get out of the terminal", "lightweight", "cross-platform"). Rank along their axis, not a generic one.
168
1694. **Give a recommendation** — "Here's my take" with a clear first choice and why. The user wants a decision signal, not a data dump.
170
1715. **Install the chosen one(s)** — if the user says "let's add X", proceed with install and verify it works. For GitHub release assets, see "Release Asset Discovery via GitHub API" under Tool Selection Notes.
172
173**Pitfall — electron-builder DMGs can be corrupted.** If `hdiutil attach` fails with CRC32 errors, check for a platform-specific zip variant (e.g. `AppName-version-arm64-mac.zip`) in the same release. The zip contains the .app directly and usually mounts fine.
174
175**Pitfall — don't present all repos as equally viable.** The user's stated preference (e.g. "escape the terminal") immediately eliminates terminal-only options from being the recommendation. Acknowledge them but don't rank them first.
176
177## Single-Repo Analysis (Alternative to Deep-Dive)
178
179When the user wants a readout on one or two specific repos (e.g. "look into clawshell and autocontext"), use the raw README pattern:
180
1811. Fetch GitHub API metadata: `curl -sL "https://api.github.com/repos/${owner}/${repo}" > /tmp/meta.json`
1822. Fetch README: `curl -sL "https://raw.githubusercontent.com/${owner}/${repo}/main/README.md" | head -150`
1833. Check for topics, license, language from the saved metadata
1844. Write a structured assessment as a reference file (see `references/clawshell-analysis.md` and `references/autocontext-analysis.md` for the format — header block with source/stars/license/status, then capabilities, architecture, assessment for our stack)
185
186## Tool Evaluation for Personal Adoption (Variant)
187
188When the user finds a tool and asks "should I install this?" (not "tell me about this repo"), use the workflow in `references/tool-evaluation-for-adoption.md`. This variant differs from standard open-source research:
189
190| Dimension | Open-Source Research | Tool Evaluation for Adoption |
191|---|---|---|
192| Goal | Understand architecture & relevance | Decide whether to install |
193| Key output | "This does X, here's how it fits our stack" | "Here's community sentiment, practical usage, and my recommendation" |
194| Researcher role | Optional deep-dive | Always delegated for community sentiment |
195| Install decision | Deferred | Central to the workflow |
196| TUI preference weight | Not applicable | TUI-friendly tools ranked higher |
197
198**Triggers:** User says "pull up information on X", "what is X", "tell me about X" about a tool, terminal, or CLI — not a GitHub project or open-source library.
199
200## Skill Repository Evaluation
201
202When evaluating external skill repositories (GitHub repos with SKILL.md files) against the installed library:
203
204### Phase 1: Inventory External Repo
2051. Extract directory listing from the repo
2062. For each skill: name, description, last activity
2073. Organize by domain/category
208
209### Phase 2: Cross-Reference Installed Skills
210Map each external skill against installed:
211- **Exact match**: same name or identical purpose
212- **Functional overlap**: different name, same capability
213- **Partial overlap**: related but distinct scope
214- **Gap**: nothing installed covers this
215
216### Phase 3: Quality Assessment
217
218| Signal | Weight | What to look for |
219|--------|--------|------------------|
220| Test coverage | High | Explicit test counts, "N/N passing" |
221| Script count | High | scripts/ directory with actual implementations |
222| Reference depth | Medium | references/ with domain knowledge |
223| Recency | Medium | Last commit date, active maintenance |
224| Documentation quality | Medium | Clear triggers, pitfalls, worked examples |
225
226Rate: ★★★★★ (production-grade) → ★ (thin wrapper)
227
228### Phase 4: Tier Recommendations
229
230**Tier 1 — Install** (fills genuine gap, ★★★★+): No installed skill covers this.
231**Tier 2 — Consider** (good but overlapping, ★★★+): Partial overlap with unique features.
232**Tier 3 — Skip**: Redundant, service-specific, ★★ or lower, enterprise fluff.
233
234### Quality Heuristics
235- Test count > 20 signals serious development
236- scripts/ with 5+ files means real work, not just docs
237- references/ with domain knowledge means research was done
238- Recently updated (within 1 week) means active maintenance
239
240## Source Code Walkthrough Mode
241
242When the user wants to understand how a project works (not evaluate it for adoption):
243
244### Workflow: Prepare → Read Layers → Explain
245
2461. **Clone** (shallow, --depth 1) into /tmp/
2472. **Map the file tree** — find structure, entry points, key directories
2483. **Identify tech stack** from package.json / Cargo.toml / go.mod
2494. **Start from entry point** — main.tsx, index.ts, App.tsx
2505. **Follow data flow** — where does state live? How does it move?
2516. **Read core files** — focus on main logic, not boilerplate
2527. **Map component relationships** — what imports what? What calls what?
2538. **Organize by layers** — top (routing/pages) down to data (state, storage)
2549. **Use analogies** — "like a table of contents", "like a rulebook"
25510. **Include a file map** — directory tree with one-line descriptions
25611. **Highlight the key insight** — most important architectural decision
257
258### Plain-Language Rules (when user is learning)
259- Avoid jargon without definition
260- Use analogies to everyday things
261- Say "this file is the rulebook" not "this is the data model layer"
262- Explain WHAT before HOW
263- One concept per paragraph
264- Don't assume user knows: component, state, hook, render, import, module, API
265
266### Walkthrough vs Research
267
268| Aspect | Open-Source Research | Source Code Walkthrough |
269|--------|---------------------|------------------------|
270| Goal | Evaluate for adoption | Understand how it works |
271| Output | "Is this useful to us?" | "Here's how it's built" |
272| Depth | README + docs + metadata | Actual source code files |
273| Format | Structured assessment | Layer-by-layer explanation |
274
275## Tool Evaluation and Adoption
276
277When the user shares tool recommendations (X posts, blog lists, GitHub trending):
278
279### Phase 1: Extract and Triage
2801. Pull content from all URLs (batch up to 5 per call)
2812. Extract: tool name, GitHub URL, description, what it replaces
2823. Group by category
2834. Identify relevance to current setup
284
285### Phase 2: Parallel Research
286Use delegate_task with batch mode. Research template per tool:
287```
288TOOL_NAME — STARS | LICENSE | LANGUAGE
289 What it does: [one sentence]
290 Replaces: [commercial alternative]
291 RAM/Resources: [actual numbers]
292 Setup: [exact commands]
293 Runs on 16GB?: [yes/no/conditional]
294 Active?: [last commit, contributor count]
295 Verdict: [★★★★★ to ★☆☆☆☆]
296```
297
298### Phase 3: Present and Decide
299```
300CATEGORY NAME — Ranked for your setup
301━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
3021. TOOL_NAME ★★★★★ — STARS, WHY IT'S #1
303 What it replaces. RAM cost. Setup time.
304Combined RAM budget: X + Y + Z ≈ NGB
305```
306
307### Phase 4: Install and Verify
3081. Check install methods — prefer npm/brew over curl|sh
3092. Install and verify with --version or --help
3103. For MCP tools: `codegraph install --target=hermes`
3114. Run a meaningful test command
312
313### X Post Extraction Patterns
314- Posts with numbered lists (top 10 repos) are most common
315- Each item: tool name, pitch, GitHub link
316- Comments often add corrections/alternatives
317- Multiple posts on same topic = cross-validation signal
318
319### npm Registry Fallback (when web tools fail)
320
321When X/Twitter posts reference a library and both `web_extract` and `web_search` are failing (subscription required, dead backends, captchas), the npm registry API is a reliable zero-authentication fallback — **but only if you know the exact package name** (from the post text, GitHub description, or embedded link).
322
323```
324curl -s "https://registry.npmjs.org/three-fluid-fx" | python3 -c "
325import json, sys
326data = json.load(sys.stdin)
327# Key fields available from the root:
328# .name, .description, .homepage (GitHub URL), .license, .author
329# .repository.url, .bugs.url, .keywords[], .readme (full README as a string)
330# .time.created, .dist-tags.latest (latest version)
331# .versions[latest] — full package.json for the latest release
332print('Name:', data.get('name'))
333print('Version:', data.get('dist-tags', {}).get('latest'))
334print('Description:', data.get('description'))
335print('Homepage:', data.get('homepage'))
336print('License:', data.get('license'))
337print('Author:', data.get('author', {}).get('name'))
338print('Keywords:', ', '.join(data.get('keywords', [])))
339print('Last update:', data.get('time', {}).get('modified'))
340"
341```
342
343**Important:** Pipe-to-interpreter is normally blocked, but `curl | python3 -c` for npm registry API is safe here because (a) npmjs.org is a read-only JSON API with no side effects, and (b) the piped script is local string processing, not remote execution. However, to stay consistent with the user's preference, do this instead:
3441. `curl -s "https://registry.npmjs.org/package-name" > /tmp/pkg_meta.json`
3452. Process with `read_file` or a separate `python3 /tmp/script.py`
346
347The npm registry response includes the **full README** as a string in `data.readme` — this often contains the GitHub URL, live demo links, install instructions, and API docs. For open-source Three.js / browser libraries that ship on npm, this is often more informative than GitHub's README render.
348
349**When to use:** X is login-walled, web_extract returns subscription errors, search fails on all providers, and the post references an npm-published library by name. Not for standalone tools, Go/Rust binaries, or non-npm ecosystems.
350
351### Tool Evaluation Pitfalls
352- curl | sh gets blocked — use npm/brew/download-then-run
353- Stars ≠ quality — check last commit date and open issues
354- "Runs anywhere" often doesn't — verify against actual hardware
355- Don't install everything — present findings, let user decide
356- License matters — flag CC-BY-NC, AGPL, "source available"
357- Resource math — calculate combined RAM for multiple Docker tools
358
359## Quality Gate
360
361- Did I distinguish "directly usable" from "pattern reference" from "not relevant"?
362- Did I use both web_search and web_extract as appropriate?
363- Did I check for external docs sites in addition to GitHub?
364- Did I answer the specific question rather than dumping everything?
365- For skill eval: did I cross-reference against installed skills?
366- For walkthrough: did I explain from top to bottom with a file map?
367- For tool eval: did I provide overview, community sentiment, and recommendation?