research-before-answer
Use when answering a factual question about a named repo, package, library, framework, SDK, API, version, release note, deprecation, company, product, market…
Skill by GGGODLIN
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/gggodlin-research-before-answer
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design, backend, research, productivity
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 14
9to5google.com· found in codeapi-docs.deepseek.com· found in codechatgpt.com· found in codeclaude.com· found in codecodeload.github.com· found in install commandcursor.com· found in codedev.meta.ai· found in codegithub.com· found in codelabs.scale.com· found in codemise.jdx.dev· found in codeone.google.com· found in coderesearch.meta.ai· found in codetavily.com· found in codevercel.com· found in code
Files it touches
~/.claude/skills/research-before-answer
What's inside
- Skill name
research-before-answer- Description
- Use when answering a factual question about a named repo, package, library, framework, SDK, API, version, release note, deprecation, company, product, market, or person activity, or when making a current-state claim. Do not use for pure framework, principle, design-pattern, or concept explanations, or trivial single-fact lookups you are already certain of. Also invokable manually via /research-before-answer.
- License
- MIT
- Instructions
- 178 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (24)
- README.md
- SKILL.md
- feature-check-cc-builtin-advisor.yaml · evals/cases/
- free-tier-groq-qwen.yaml · evals/cases/
- identity-merge-needs-version-id.yaml · evals/cases/
- limit-change-claude-5h.yaml · evals/cases/
- low-confidence-mark-must-survive.yaml · evals/cases/
- pricing-delta-deepseek.yaml · evals/cases/
- pricing-page-tavily.yaml · evals/cases/
- pricing-tiers-supergrok.yaml · evals/cases/
- proxy-metric-cannot-decide-target.yaml · evals/cases/
- release-check-gemini-37-flash.yaml · evals/cases/
- release-check-gpt6-sol-luna.yaml · evals/cases/
- release-rumor-deepseek-v41.yaml · evals/cases/
- repo-look-heeler.yaml · evals/cases/
- rumor-workbuddy-free-deepseek.yaml · evals/cases/
- tool-intro-mise-with-claim.yaml · evals/cases/
- version-question-must-research.yaml · evals/cases/
- eval.yaml · evals/
- monid-opt-in.md · references/
- research-before-answer-flow.svg
- decision-table-output-contract.py · scripts/tests/
- inline-verify-contract.test.sh · scripts/tests/
- low-confidence-output-contract.py · scripts/tests/
SKILL.md (first lines)
# Research Before Answer
<!-- 本檔在契約測試底下:scripts/tests/inline-verify-contract.test.sh + evals/eval.yaml + scripts/tests/{decision-table,low-confidence}-output-contract.py — 改動後先跑 contract,再跑 `cd ~/.claude/skills/research-before-answer && skill-up-run run evals/eval.yaml --output-dir ~/Desktop/projects/.claude/trials/skill-up-cli/eval-runs`,最後用兩個 output contract 檢查該 run 的 report.json;python3 ~/.claude/commands/tests/test_skill_verify_one_shot_callers.py -->
涉及**事實**的問題預設**先查證再回答**,不要用訓練資料編。
## 觸發條件(符合任一即 invoke)
- 具體 repo / 專案 / 套件 / library / framework / SDK
- API / CLI 用法、版本、release notes、deprecation
- 公司、產品、人物、市場近況
- 任何「現狀」「最新」「最近」「這個 X 怎麼用」類問題
- 混合題(框架 + 事實)→ 先查事實部分,再套框架
**不觸發**:純框架 / 原則 / 設計模式 / 概念解釋(用訓練知識即可)。
## 來源選路:先分最新外部題與個人歷史
1. 如果是最新外部事實查核或外部探索,就直接接「外部工具分流」,用網路搜尋、第一手來源或已配置的外部查詢工具。本機 memory、wiki、session、報告與歷史收錄不作探索入口,也不作搜尋失敗的替代;收錄內容無法代表最新外部資訊。
2. 如果同時問「我能不能用」,就並行讀目前帳號、設定或即時資格回應;「我的」不因此觸發個人歷史檢索。外部功能現況與本人資格分開舉證。
3. 如果是個人歷史、既有決策或經驗回顧,就接「個人資料層」。混合題只對回顧部分查本機紀錄,最新外部部分仍走第 1 步。
完成條件:每個待答問題已分到外部現況、本人現況或個人歷史,選定來源後再查詢。
### 個人資料層(只用於歷史/決策/經驗回顧)
- **wiki** (`~/.claude/wiki/`): 個人經驗/偏好/踩過的坑
- 寫/改 entity 前:(1) `cat ~/.claude/wiki/_schema.md` 確認格式 (2) `grep -ri "<keyword>" ~/.claude/memory/` 撈既有 reference / project / feedback memory,不要只憑當次對話
- **session memory** (`~/.claude/memory/`, canonical 由 `autoMemoryDirectory` setting 指定): hand-curated reference / project / feedback / user 4 類 .md + 兩層 index 結構(MEMORY.md + `_index_*.md` cluster files,2026-05-07 起)
- Step 0:**query 要回顧個人歷史(「我之前 X 怎處理」「我有沒有寫過」)→ 並行查 wiki 與 memory**,用既有散文/session 檢索路由列出 hit file,補捕 MEMORY.md 沒列 pointer 但 file 還在的 standalone reference。只有「我的 X setup」「我這台機器」時,依上一段讀目前設定,不啟動本段。
- Step 1:`cat ~/.claude/memory/MEMORY.md` 看索引(含 `### Cluster indexes` + `### Standalone reference` 兩段)
- Step 2:MEMORY.md 看到相關 cluster pointer → `Read ~/.claude/memory/_index_<topic>.md` 看 sub-entries
- Step 3:drill 進具體 topic file 取細節(**注意**:cluster index 內每 entry 的 1 行 description 通常已足夠形成 informed opinion,不要無腦 Read 對應 topic file 浪費 context)
- Cluster 結構是動態的(每次重新 `ls _index_*.md` 拿當下狀態,不要記住固定 cluster list),規則見 `feedback_memory_cluster_maintenance.md`
### 外部工具分流
針對問題核心選工具,不要泛泛「搜相關資料」:
| 問題類型 | 工具 |
|---|---|
| SDK / library 用法 | Context7 (`mcp__context7__*`) |
| GitHub repo / issue / PR | `gh` CLI |
| 套件(npm / pypi / crates) | registry search 或 WebSearch |
| 市場 / 人物 / 公司動態 | WebSearch、Exa |
| 深度多輪研究 | `Skill(deep-research)` 或 `Workflow({name:"deep-research-paced"})` |
分流後,如果本次研究需要社群評價、實際使用經驗、跨平台評論或公開網頁資料,且 Monid 能補上資料缺口,就在任何 Monid 呼叫前讀 [Monid 贈額試用](references/monid-opt-in.md)。使用者已批准在剩餘原始贈額內跨任務直接使用,不逐次詢問;照 reference 查價、核餘額,贈額不足就退出並移除入口。不為耗贈額增加查詢;當次拒用、資料已足或不需外查時沿原路。下方搜尋配對、正文抓取與來源核對規則照常適用。
### 搜尋 layer:同 query 一輪 nav + WS(2026-06-01 結案保留,agent_type 範圍化)
任何「給 query 找 URL」場景,一輪搜尋保留同 query 的 **LCU Google SERP + WebSearch**:
1. 依目前 LCU server 的 initialization instructions 與 tool descriptors,在 `mcp__lcu__js` 建立自己的 Google 搜尋分頁。`createBrowserTab`/`goto` 操作碼保留完整的 `https://www.google.com/search?q=<URL-encoded query>` 字面值,實際導航並讀回頁面;只印 URL 不算搜尋。
2. 確認 LCU provider 沒有 isError,且頁面讀回有可用的搜尋結果,再在另一則訊息 call `WebSearch`,query 使用同一個原字串。未載入/失敗時停止並回報,不自動啟動 OBU、Cua 或 Agent Chrome。
3. 交叉比對兩份真實結果;收尾只關自己的搜尋分頁,不處理使用者其他分頁。正式 host 的 Stop/SubagentStop 收尾不代替成功讀頁的證據。
LCU 只改變 browser 入口;不取消同 query 配對、官方來源核對或成功 ticket 的要求。
**規則(2026-05-11 ticket model)**:
- 每張 nav 給一張 query-specific ticket,每次成功 WebSearch 消耗一張同 query ticket
- **順序**:先 navigate 再 WebSearch(不是嚴格同 message 並行 — `PreToolUse` hook fire 時 nav 必須已寫進 transcript,所以拆兩個 message 比較穩)
- **被 block 的 WS 不消耗 ticket**(retry-friendly:補 nav 後可直接 retry 同 query WS)
- **同 query 跑兩次成功 WS 會被擋**(結果一樣浪費 quota;要再跑請補新 nav 表達明確意圖)
- **不同 query 不共用 ticket**(每個 query 自己配對自己的 nav)
**強制範圍(2026-06-01 結案)**:hook 只硬擋兩種 context — **main session** 跟 **`parallel-search` agent**;其他所有 fan-out subagent(deep-research-paced 的 Search / Verify agent 等)一律**豁免**、WebSearch 自由(否則上百個平行小兵被迫各開 chrome 會塞爆真實瀏覽器,實證見 trial review)。
**派 subagent 做配對搜尋 → 用 `parallel-search` agent**:`Agent(subagent_type:'parallel-search')` 或 workflow `agent(prompt, {agentType:'parallel-search'})`。丟一個 query,它用自己的正式 LCU 呼叫讀 Google SERP,再把 SERP + WebSearch 兩段原始結果並列回來、自己關分頁,**不合成留給呼叫者**。如果派工後端無法提供正式 LCU MCP 與 host identity,就沿用可提供這些能力的原生 subagent 路徑;兩者都不可用時停止並回報,不用 Bash shared-client 假造正式接線。
Hook: `~/.claude/hooks/websearch-parallel-enforce.sh`(agent_type gate:main + `parallel-search` 強制、其餘 subagent 豁免;subagent 走 `agent_id` → 自己 transcript 的 redirect)。覺得不好用 → 移除 `settings.json` PreToolUse `WebSearch` matcher。
SERP 抽取 JS pattern 跟試用背景見 `~/.claude/memory/reference_search_tool_comparison_2026_05_10.md` + `feedback_websearch_misses_official_docs.md` + `feedback_parallel_decision_by_structural_failure.md`。
### URL 內容抓取
先看這次抓頁面要拿來做什麼,再選工具。`WebFetch` 回的不是原文:頁面先交給小模型照你的 prompt 改寫成回答。它回 200、讀起來通順,細節卻可能被改掉或漏掉(實例:從相對日期推錯年份、讀錯表格欄位、憑空加一段「官方回應」),而且這種錯不會命中下面任何退路條件——「回傳看起來完整」不是判斷依據。
**先判斷是否為使用者直接交付的 X/Twitter 研究連結**(`/status/` 貼文或 X 長文;不是日報/workflow 批次來源)。如果是,就走以下路線,不套用下方「exit 75/1 才升瀏覽器」的退路條件:
1. 以 LCU MCP(`mcp__lcu__js`)開啟指定連結,等待實際內容載入,讀回貼文、附帶或連到的 X 長文、程式碼與外部連結;只操作任務指定或自己建立的分頁。`x-fetch` 回成功仍可能只有長文入口,所以不先跑腳本來決定是否開瀏覽器。
2. 如果研究需要留言、作者串文或引用,就補跑 X/Twitter 抓取退路(見 WIRING.md「非官方內容抓取」),把回件當補充,不當全量討論。
3. 對照研究問題確認所需正文、程式碼與來源連結已讀到;缺少的項目明寫缺口,不以 exit 0 或頁面載入成功當作完整。LCU 不可用時停止並回報;登入、CAPTCHA 與核准照既有權限邊界處理。取得內容後接來源查證,答案成稿後接「交付前 inline 自查(R1–R3)」。
**公開 HTML 研究頁(文章、產品官網、HTML 文件/表格)預設先用 Firecrawl**,取得 Markdown 後再查證與分析。先分流:需要本人登入狀態、庫存或視覺/互動的頁面走正式 LCU;Reddit 沿用專用腳本;官方原生 Markdown 直接讀;直接交付的 X 研究連結走上方路線。日報/workflow 的既有批次腳本不因這條研究規則自動改接服務。
1. 用正式 LCU MCP 開啟 https://www.firecrawl.dev/app/playground?endpoint=scrape,使用既有帳號的 Scrape 與 Markdown 格式。需要現況時把 Max age 設為 0;回件未提供快取證據時,不宣稱已證明即時抓取。只送指定公開 URL,不傳登入 cookies、私人檔案或憑證;不選 Summary、Query 或模型 JSON extraction。新登入/權限、額外 premium 或付款確認依既有核准邊界處理。
2. 確認結果的 sourceURL 對應本次 URL(允許已確認的官方重新導向),讀回 Markdown 與 statusCode/creditsUsed,存至 scratchpad 再 Read;不要為取得內容反覆下載到 Downloads,也不要把前一頁殘留的 Success 當本次成功。核對研究所需正文、程式碼、表格條件與來源連結;缺項仍須補讀。
3. 如果 Firecrawl 拒絕、沒有自己的結果、額度不足或缺研究所需內容,就接下方網址抓取退路(見 WIRING.md「非官方內容抓取」);把 Firecrawl 缺口記清楚,不重複扣額重試。LCU 未連線時回報這個阻塞,公開頁仍可用既有腳本取得內容;不得啟動其他瀏覽器後端。腳本也失敗時,沿下方正式 LCU 升級規則處理。取得內容後接來源查證與「交付前 inline 自查(R1–R3)」。
Firecrawl 的 fallback、Reddit 與既有日報/workflow 批次來源沿用以下路線:
- **要讀整篇、研究一篇文章,或要引用頁面上的數字/日期/原句** → 不用 WebFetch。用網址抓取退路(見 WIRING.md「非官方內容抓取」)把正文存到 `<scratchpad>/<名稱>.md`(輸出已是正文 markdown;不要印到畫面上,長頁會吃掉 context),再用 Read 讀。長文先 `grep -n '^#'` 看標題,按段落範圍讀。寫給使用者的數字、日期、引文都從這個檔取,附行號。
- **只是導航**(找連結、確認頁面還在、判斷該讀哪一頁哪一段)→ 可用 `WebFetch`(快、省 token)。它的回答只用來決定下一步;要寫成事實就回上一條抓原文。
**WebFetch 拿 4xx/5xx 或內容明顯不夠(403 body / "Forbidden" / 亂碼 / < 200 字模板 / "Please enable JavaScript")→ 必須立刻 fallback,不要回覆「官網沒爬到」「403 抓不到」就跳過——fallback 是 mandatory 不是 optional(踩坑紀錄 [[feedback_webfetch_fallback_must_trigger]])。** 兩段退路階梯:
🔌 接線點:非官方內容抓取 — 見 WIRING.md
2. 如果腳本 exit 75/1 或仍缺研究所需內容,就升 LCU MCP(`mcp__lcu__js`)— 建立自己的任務分頁,導航指定 URL 並讀回實際內容;如果遇到 CAPTCHA、登入或核准,就按既有權限邊界回報。LCU 不可用時停止,不改走 OBU/Agent Chrome,也不把連線失敗當內容不存在。
常見觸發:
- reddit.com 整域 hardcoded refuse
- 站需 cookie / 登入 wall
- JS-only 內容 server-side fetch 拿不到
- WebFetch 抓回來但 incomplete(亂碼 / 模板 / 空白)
如果頁面是 SPA,就在抽取前依 LCU 的當次 API 說明等待實際內容,再讀回;不拿傳輸成功代替頁面就緒。
公開 HTML 研究頁先走上方 Firecrawl;如果失敗或缺內容,就接網址抓取退路(見 WIRING.md「非官方內容抓取」),exit 75/1 或仍缺關鍵內容時以正式 LCU 補讀。需要本人登入狀態、視覺/互動或直接交付 X 研究連結時已先分流;既有批次腳本維持原路。
### 執行模式
- **淺題**(單次查):沿「來源選路」直接查選定來源;最新外部題不額外讀 wiki index。搜尋層只負責找到候選 URL,找到後接「URL 內容抓取」讀過原頁再作答;LCU 不可用時直接走網址抓取退路(見 WIRING.md「非官方內容抓取」)/`gh`/registry,不要退成只剩 WebSearch——SERP 摘要不是頁面(2026-10-15 skill-up:LCU 失敗後 7 個線上題全部停在 WebSearch、0 次抓頁,全 FAIL)。
- **深題**(多輪研究):派**背景 subagent**(`run_in_background: true`),**main session 繼續做其他工作、不要用 `sleep` 空轉輪詢**;背景 agent 完成會自動送 task-notification,收到才 merge(禁止 `Bash sleep 60` 類 poll、也不要 Read 未完成的 output 檔)
- **個人歷史**:查 wiki/memory;如果要找對話原文,就走 session 檢索路由。
- **外部搜尋受阻或沒答案**:如果已有原文 URL,就接「URL 內容抓取」;否則依既有授權換已配置的外部來源類型。仍受阻時回報具體缺口,不改查本機歷史收錄,也不把未找到當成不存在。
- **混合題**:外部現況、本人目前資格與個人歷史分開查、分開標出處;歷史紀錄不能佐證外部現況。From GGGODLIN/gggodlin-cc-harness, MIT.
More from GGGODLIN/gggodlin-cc-harness
- 0.674score
write-pr-description
GGGODLIN
Use when a pull request title or description needs drafting or revising — before running `gh pr create`, `gh pr edit --body`, or any other command that opens…
SkillAFreshness: A★ 72Claude Code +9 - 0.674score
review-implement
GGGODLIN
Use after a spec-backed implementation reaches closeout and before shipping when a post-implementation scope or YAGNI review is needed, or when the user…
SkillAFreshness: A★ 72Claude Code +9 - 0.674score
workflow-hardening
GGGODLIN
Use when writing or designing any inline/dynamic Claude Code Workflow script, including short single-pass scripts, Ultracode or multi-agent orchestration…
SkillAFreshness: A★ 72Claude Code +9 - 0.674score
handoff-impl
GGGODLIN
跨 session 實作委外信道(handoff 單在 ~/.claude/handoffs/*.md,發單 session 驗收、另一 session 實作;信道預設手動搬單,自動接力屬未穩定實驗路徑、僅使用者明確要求實驗才走)。Use when 使用者說「開 handoff 單」「把這個實作交給 GPT /…
SkillAFreshness: A★ 72Claude Code +9 - 0.674score
implement
GGGODLIN
Use when a spec or ticket set is ready to build and the user says implement / 開工 / 照 ticket 做 / start building, or the local pipeline reaches its…
SkillAFreshness: A★ 72Claude Code +9 - 0.674score
e2e-contract
GGGODLIN
Use when e2e-route 已選派文件/補丁行為確認或既有契約回歸工作,或使用者手動點名 /e2e-contract;包含同題確認案例、重跑已確認案例與改選工具。Do not use for 從自然語言 E2E 任務自行選用(先用 e2e-route)、普通探索固化、單元或純 API…
SkillAFreshness: A★ 72Claude Code +9 - 0.674score
check-my-stack
GGGODLIN
Evaluate whether a popular or hyped agent/dev tool is worth adopting or borrowing from, measured against the user's OWN existing stack — never in the abstract.
SkillAFreshness: A★ 72Claude Code +9 - 0.674score
to-spec
GGGODLIN
Turn the current conversation into a spec — no interview, just synthesis of what was already discussed.
SkillAFreshness: A★ 72Claude Code +9 - 0.674score
gate-authoring
GGGODLIN
Use when 使用者要「寫 / 改 / 加一個 hook」「設計 gate / detector / tripwire」「動 settings.json hooks 段」——涵蓋全域 ~/.claude/hooks/、任一 repo 專案級 .claude/hooks/、任何 settings.json /…
SkillAFreshness: A★ 72Claude Code +9 - 0.674score
agent-authoring
GGGODLIN
建立或修改 subagent 定義檔(~/.claude/agents/*.md 或專案 .claude/agents/*.md)前必讀的流程 skill——frontmatter 欄位語意、tools 欄陷阱、載入時機、上線前 smoke test。觸發:「建 / 寫 / 加一個 agent」「改 agent…
SkillAFreshness: A★ 72Claude Code +9 - 0.674score
agent-dispatch
GGGODLIN
Run one repo's ticket batch in a terminal worker inside a target worktree through Herdr — Claude Code by default, or Codex CLI or pi when the user picks that…
SkillAFreshness: A★ 72Claude Code +9 - 0.674score
mutation-testing
GGGODLIN
Use when a coding agent just wrote tests and quality needs validation, when suspecting existing tests are green-but-hollow (test theater = passes but doesn't…
SkillAFreshness: A★ 72Claude Code +9
Signals
- Stars
- 72
- Forks
- 5
- Open issues
- 0
- Last commit (this folder)
- Oct 18, 2026 (10 days ago)
- Last release
- Oct 19, 2026 (9 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/GGGODLIN/gggodlin-cc-harness
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from GGGODLIN
- 0.674score
gate-authoring
GGGODLIN
Use when 使用者要「寫 / 改 / 加一個 hook」「設計 gate / detector / tripwire」「動 settings.json hooks 段」——涵蓋全域 ~/.claude/hooks/、任一 repo 專案級 .claude/hooks/、任何 settings.json /…
SkillAFreshness: A★ 72Claude Code +9 - 0.674score
e2e-contract
GGGODLIN
Use when e2e-route 已選派文件/補丁行為確認或既有契約回歸工作,或使用者手動點名 /e2e-contract;包含同題確認案例、重跑已確認案例與改選工具。Do not use for 從自然語言 E2E 任務自行選用(先用 e2e-route)、普通探索固化、單元或純 API…
SkillAFreshness: A★ 72Claude Code +9 - 0.674score
check-my-stack
GGGODLIN
Evaluate whether a popular or hyped agent/dev tool is worth adopting or borrowing from, measured against the user's OWN existing stack — never in the abstract.
SkillAFreshness: A★ 72Claude Code +9 - 0.674score
agent-authoring
GGGODLIN
建立或修改 subagent 定義檔(~/.claude/agents/*.md 或專案 .claude/agents/*.md)前必讀的流程 skill——frontmatter 欄位語意、tools 欄陷阱、載入時機、上線前 smoke test。觸發:「建 / 寫 / 加一個 agent」「改 agent…
SkillAFreshness: A★ 72Claude Code +9 - 0.674score
agent-dispatch
GGGODLIN
Run one repo's ticket batch in a terminal worker inside a target worktree through Herdr — Claude Code by default, or Codex CLI or pi when the user picks that…
SkillAFreshness: A★ 72Claude Code +9 - 0.674score
handoff-impl
GGGODLIN
跨 session 實作委外信道(handoff 單在 ~/.claude/handoffs/*.md,發單 session 驗收、另一 session 實作;信道預設手動搬單,自動接力屬未穩定實驗路徑、僅使用者明確要求實驗才走)。Use when 使用者說「開 handoff 單」「把這個實作交給 GPT /…
SkillAFreshness: A★ 72Claude Code +9
Cite this page
research-before-answer skill. Agent Mart. https://agentmart.dev/skills/gggodlin-research-before-answer (last updated 2026-10-24)