skills/good-question/SKILL.md
Use when a researcher is choosing, framing, refining, or stress-testing a research question, hypothesis, thesis topic, project idea, grant direction, paper angle, or stalled research direction.
npx skillsauth add jaimeparker/stable-jarvis good-questionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Help a researcher turn a vague interest, literature gap, rough idea, failed project, or proposal draft into a strong scientific question. Do not merely list ideas; shape questions until they are important, tractable, falsifiable, and easy to defend to a skeptical colleague.
This skill is deployed as a first-class skill within the stable-jarvis project (位于 skills/good-question/). It interoperates with the existing research toolchain.
When the workflow calls for "enhanced retrieval" (增强检索), use the following stable-jarvis native tools instead of generic web search. Choose based on what evidence is needed:
| Retrieval need | Tool | How to invoke |
|---------------|------|--------------|
| Find recent papers on a topic | arxiv-search | python skills/arxiv-search/arxiv_search.py "query" --max-papers N |
| Discover papers matching a research profile | paper-finder | python skills/paper-finder/find_papers.py --profile ... |
| Search your Zotero library by keyword | mcp__zotero-mcp__search_library | MCP call with title/author/keyword |
| Semantic search across your Zotero library | mcp__zotero-mcp__semantic_search | MCP call with natural language query |
| Keyword search across your Obsidian vault | mcp__obsidian__search_notes | MCP call with query and search limits |
| Semantic search across your Obsidian vault | obsidian-semantic-search | python skills/obsidian-semantic-search/scripts/search.py "query" --top-k N |
| Web research for current literature or field context | web-research or exa-search | Invoke the corresponding skill |
| Previously completed deep paper analysis | paper-deep-reader output | Read outputs/deep-reader/{item_key}/report.md |
For semantic search over Obsidian, always check index freshness first (build_index.py --stats) before searching. The index at temp/obsidian/embeddings.json is shared with paper-deep-reader — if a deep read was just completed, the index is likely current.
The tools above map to three complementary knowledge sources. Follow this tiered approach — exhaust closer sources before reaching outward:
Tier 1 — Obsidian Vault (primary): This is your curated cyber brain. Search exhaustively with multiple query angles before moving on. Use mcp__obsidian__search_notes for keyword search and obsidian-semantic-search for conceptual search. Follow [[wikilinks]] trails between notes. Read every relevant note in full.
Tier 2 — Zotero Library (secondary): Bridges your notes to published literature. Use mcp__zotero-mcp__search_library for keyword search, mcp__zotero-mcp__semantic_search for conceptual discovery, and mcp__zotero-mcp__get_content for full-text reading.
Tier 3 — Web Search (complement): Use web-research, exa-search, or arxiv-search when (a) the user requests current literature, (b) Obsidian + Zotero return insufficient results for a decisive claim, (c) the field is fast-moving and curated sources may be outdated, or (d) you need to verify whether a claimed literature gap genuinely exists. Web search results feed into the analysis body; they do not need separate listing in the final card.
When the user invokes good-question after completing a paper-deep-reader analysis, the deep-reader output provides a rich starting point that should be consumed directly rather than starting the workflow from zero.
Detection: Check whether outputs/deep-reader/{item_key}/ exists and contains:
report.md — the full deep-reading reportgood-question-bridge.json — structured bridge file (generated by paper-deep-reader Phase 8)zotero_kb.json — Zotero knowledge base search resultsmeta.json — paper metadataConsumption:
good-question-bridge.json exists, load it directly. It contains pre-extracted stated limitations, implied weaknesses, future directions, and personal insights — these map to the "Has a candidate idea" starting state in the workflow (Step 1 diagnosis)report.md exists, read the "局限性与未来方向" (Limitations & Future Directions) and "个人评价与启发" (Personal Insights) sections — these become the candidate ideaszotero_kb.json and obsidian_kb.json (if present) provide pre-built Domain Brief material — do not rebuild from scratch. Use these to identify what related work already exists and what gaps are genuinemeta.json provides the source paper's title, authors, arxiv ID — use this to establish what has already been done (the deep-reader paper itself), so candidate questions are positioned beyond itWorkflow shortcut: When bridge files are detected, the workflow compresses:
Good Question Cards and all intermediate analysis are written to two locations:
Obsidian vault (primary, for knowledge persistence):
00 Inbox/Research Questions/{paper_title_short} - Research Question.md[[wikilinks]] to link back to:
[[{paper_title} Deep Reading Report]]outputs/ directory (for process archival and debugging):
outputs/good-question/{item_key or date}/
domain-brief.md — compact Domain Brief with evidence ledgercandidates.md — all candidate questions with scores and lens annotationsshortlist.md — ranked shortlist with repair/rejection noteseditor-desk-gate.md — desk-reject checks for top candidatesgood-question-cards.md — final Good Question Cardsitem_key for cross-referencingInfer the mode from the user request, or use the named mode if the user asks for one.
| Mode | Use when | Behavior | |---|---|---| | Mentor | The user is early, uncertain, or writing a thesis/opening topic | Ask at most one clarifying question, then help them compare options without shame | | Reviewer | The user asks to stress-test, criticize, or find weaknesses | Lead with the strongest rejection risks and repair paths | | Collaborator | The user wants to act soon or has data/resources ready | Convert the best question into a two-week pilot and decision gate | | Grant | The user is writing a proposal, fund, or pitch | Emphasize audience, milestones, risk, success criteria, and kill criteria |
Use good-question to decide what should be asked, tested, falsified, or killed. Use good-story, when it is available, to decide how existing evidence, figures, drafts, abstracts, or results should be organized into an honest scientific narrative.
This boundary is a routing preference, not a capability reduction. If good-story is not available, good-question may still handle story-adjacent requests such as paper angles, proposal pitches, significance framing, abstract direction, or high-impact positioning. In that fallback mode, keep the answer question-first: clarify the claim, stake, evidence, assumptions, falsifier, reviewer risk, and next test. Label full narrative, figure-order, or prose-craft advice as provisional rather than pretending this skill is a complete writing-story framework.
For ambiguous requests:
good-question first.good-story first if it is available; otherwise answer with good-question as a question-and-evidence fallback.good-story for story spine and evidence map if that skill is available.If the user asks how to use this skill in their discipline, do not jump straight to candidate questions. Ask for field, current confusion, data/resources, target output, who should care, hard constraints, and biggest worry. Then recommend a mode and provide one reusable prompt for their field. For ecology, remote sensing, AI4Science, social science, biomedicine, humanities, or engineering systems, consult the domain adapters at references/domain-adapters.md.
Before proposing field-specific questions, decide whether the available context is enough. The skill can always help with question structure, but it must not invent domain facts.
Proceed without retrieval only when:
Enter enhanced retrieval before ideation when any trigger is true:
Enhanced retrieval means:
Domain Brief with source-backed, inference, and unknown claims.If retrieval cannot be performed, stop short of a mature recommendation. Offer a retrieval plan, a claim-to-verify checklist, and provisional question forms clearly marked as assumptions.
Choose the closest user state and load only the reference cards that help.
| User state | First move | References |
|---|---|---|
| No clear direction | Build an important-problems list and scan messy fields | references/hamming-nielsen-research-taste.md, references/peters-question-development.md |
| Has a broad area but no question | Challenge assumptions and generate question variants | references/problematization.md, references/orchestra-lenses.md, references/fischbach-problem-picking.md |
| Has a candidate idea | Score interest, feasibility, falsifiability, and decision branches | references/alon-problem-choice.md, references/fischbach-problem-picking.md |
| Needs mechanism or experiment design | Generate competing hypotheses and discriminating tests | references/platt-strong-inference.md |
| Has a proposal, grant, or paper angle | Stress-test value, risk, and evaluation; hand off to story framing only when another story skill is available and the question is already defensible | references/heilmeier-catechism.md |
| Project is stuck or failed | Reframe through boundary conditions, what changed, and cloud pivots | references/alon-problem-choice.md, references/orchestra-lenses.md |
| Needs current or field-specific grounding | Build a compact evidence brief before ideation | references/domain-brief-template.md |
| Has existing data but no thesis question | Convert resources into comparable, falsifiable options | references/alon-problem-choice.md, references/fischbach-problem-picking.md, references/question-patterns.md |
| Field has familiar evidence norms | Load a lightweight domain adapter after the brief | references/domain-adapters.md |
Extract or ask for:
When evidence is thin, say which claims are assumptions and which are grounded in user-provided or retrieved evidence.
If references/domain-brief-template.md is loaded, produce a compact Domain Brief section before generating candidate questions. Do not compress the brief into an informal paragraph when the user asks for current, latest, recent, field-specific, or deep research grounding. Include source links or citations, live uncertainties, dominant assumptions, and evidence gaps.
For current, latest, recent, field-specific, or deep research requests, the Domain Brief must include this explicit evidence ledger:
**Evidence ledger**
- Source-backed:
- Inference:
- Unknown / needs verification:
Use this evidence discipline whenever field claims matter:
Do not claim a literature gap, consensus, reviewer expectation, or "latest" trend without sources. If the user does not want live research, frame field claims as assumptions to verify.
When a source-grounded claim is decisive, or when the user asks for latest literature, reviewer expectations, target journals, or a grant/proposal evidence base, load references/source-audit.md. Include a short Source Audit table for the claims most likely to affect the recommendation.
Generate 5-10 candidate questions using a mix of these lenses:
For each candidate, include one sentence for the question and one sentence for the hidden assumption or tension it attacks.
Score promising candidates from 1-5:
| Criterion | Meaning | |---|---| | Importance | Consequence for theory, practice, policy, or method | | Feasibility | Can produce credible evidence with available resources | | Falsifiability | Has observable results that could weaken or kill the idea | | Evidence leverage | A small pilot can change belief meaningfully | | Originality | Challenges assumptions or combines fields non-trivially | | Downside learning | Even a negative result teaches something publishable or useful |
Drop or park candidates that fail any kill rule:
Before finalizing, load references/question-patterns.md when candidates still look like topics, methods, or gaps. Load references/editor-desk-reject.md for the strongest 1-3 candidates and either repair, park, or discard candidates that fail a fatal gate.
For the top 1-3 questions, output this card:
## Good Question Card
**Working title:** ...
**Research question:** ...
**Why it matters:** ...
**Core assumption challenged:** ...
**Competing hypotheses:** H1 ...; H2 ...; H3 ...
**Discriminating observation or experiment:** ...
**What would falsify it:** ...
**Two-week pilot:** ...
**Data/resources needed:** ...
**Strongest reviewer objection:** ...
**Best next action:** ...
**Preliminary:**
Obsidian:
- [[Note Name 1]] — 为什么必读
- [[Note Name 2]] — 为什么必读
Zotero:
- Paper Title (Author, Year) — 为什么必读
If the user writes in Chinese, prefer this localized card:
## 好问题卡
**暂定题目:** ...
**核心研究问题:** ...
**为什么值得做:** ...
**它挑战了什么默认假设:** ...
**竞争性解释:** H1 ...;H2 ...;H3 ...
**关键判别证据或实验:** ...
**什么结果会推翻它:** ...
**两周内可做的 pilot:** ...
**需要的数据/资源:** ...
**最强评审质疑:** ...
**下一步动作:** ...
**Preliminary:**
Obsidian:
- [[笔记名称 1]] — 为什么必读
- [[笔记名称 2]] — 为什么必读
Zotero:
- 论文标题 (作者, 年份) — 为什么必读
If the user only needs brainstorming, stop after ranked cards. If they need execution, turn the best card into a short pilot plan with milestones and decision gates.
Load reference cards on demand:
references/alon-problem-choice.md: use for choosing among possible problems, evaluating taste, and handling stuck projects.references/fischbach-problem-picking.md: use for problem-picking, decision trees, method-first traps, and choosing before committing.references/platt-strong-inference.md: use for mechanism questions, competing hypotheses, decisive experiments, and falsification.references/problematization.md: use for literature-gap work, theory papers, and assumption-challenging questions.references/heilmeier-catechism.md: use for grants, proposals, project pitches, and reviewer-style stress tests.references/hamming-nielsen-research-taste.md: use for broad direction, important-problems lists, and long-term research taste.references/peters-question-development.md: use for turning literature clusters into clear research questions.references/orchestra-lenses.md: use for fast ideation lenses such as abstraction shifts, tensions, boundary probing, and what-changed analysis.references/domain-brief-template.md: use before ideation when current, field-specific, or source-grounded customization is needed.references/source-audit.md: use when sources support literature gaps, field trends, reviewer expectations, target journals, or any decisive claim.references/domain-adapters.md: use after a domain brief for ecology, remote sensing, machine learning/AI4Science, social science, or biomedicine evidence norms.references/question-patterns.md: use to rewrite weak topics, gaps, methods, and project activities into stronger questions.references/editor-desk-reject.md: use as a final skeptical gate before recommending top questions.See the upstream repository for worked examples: https://github.com/Rimagination/good-question/tree/main/examples
Prefer this order:
Keep the tone constructive but demanding. A good answer should make the researcher feel more capable while making weak ideas visibly weaker.
development
# Mao Semantic Search Search Mao Zedong Selected Works by conceptual meaning using vector embeddings. Builds a local embedding index over all 230 articles across 5 volumes, then performs cosine similarity search at query time. ## When to Use - User asks a thematic/conceptual question about Mao's works ("What did Mao say about guerrilla warfare?") - Keyword search over the .md files is insufficient - User wants to find passages related to a concept without knowing exact terminology - As a pre-
research
精读文献。快速泛读请用paper-quick-read。
data-ai
泛读:快速概览Zotero库中的文献,单轮LLM生成摘要级Markdown报告,并上传为Zotero Note。深度精读请用paper-deep-reader。
tools
# Obsidian Semantic Search Search Obsidian vault notes by conceptual meaning, not just keywords. Builds a local embedding index over all vault notes (per-section chunking), then performs cosine similarity search at query time. ## When to Use - User asks a fuzzy/conceptual question about their own notes ("What papers discuss exploration in RL?") - Keyword search (`mcp__obsidian__search_notes`) returns too many or too few results - User wants to find notes related to a concept without knowing e