From research-workspace
Operate research-hub workflows for literature discovery, source ingest into Zotero/Obsidian/NotebookLM, dashboard inspection, and vault maintenance.
How this skill is triggered — by the user, by Claude, or both
Slash command
/research-workspace:research-hubThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
research-hub turns Zotero, Obsidian, and NotebookLM into an AI-operable research workspace. It works best with any two of the three tools, and unlocks the full loop when all three are connected.
research-hub turns Zotero, Obsidian, and NotebookLM into an AI-operable research workspace. It works best with any two of the three tools, and unlocks the full loop when all three are connected.
This is a runtime-backed skill. The SKILL.md instructions teach the
AI workflow, but the actual search, Zotero writes, Obsidian vault
updates, NotebookLM bundle/upload/download, dashboard, and MCP tools
come from the research-hub Python CLI.
Before running any workflow command from this skill, check the runtime:
research-hub describe --json
research-hub doctor
If research-hub is not found, the host has loaded the skill
instructions but the executable runtime is missing. This can happen
after a marketplace/manual skill install without the Python package.
Stop and tell them:
This skill needs the
research-hubCLI. Please run:pip install research-hub-pipeline research-hub setup --persona researcher # or analyst | humanities | internalThen re-run your request. If you only need to compare papers, sharpen a research question, or build a project / paper memory file (no automated search, no NotebookLM upload), a lightweight prompt-only skill may be enough; this workflow needs the CLI for tool execution.
If doctor runs but reports missing Zotero credentials, missing
NotebookLM auth, or no supported LLM CLI, adapt instead of pretending
the full path is ready:
import-folder, sample/dashboard mode, or ask
the user to set ZOTERO_API_KEY / ZOTERO_LIBRARY_ID.--no-nlm, then
ask the user to complete research-hub notebooklm login --auto-detect.claude, codex, gemini, opencode, aichat,
cursor, or a custom adapter) or add --no-fit-check and clearly
state that relevance filtering was skipped.Do not invent or simulate research-hub output if the CLI is
missing.
Default language policy: answer the user in their language. Generate durable research notes, metadata, and citations in English unless the user explicitly asks for another language.
For AI hosts such as Claude Code, Codex, Gemini CLI, Cursor, OpenClaw, Hermes, or generic API clients, use this sequence unless the user gives a narrower command:
Capability check:
research-hub describe --json
research-hub doctor
First safe literature run, without NotebookLM:
research-hub auto "TOPIC" --max-papers 3 --no-nlm
If the run stops before search because no relevance judge is on PATH, choose one of these explicit paths:
research-hub auto "TOPIC" --max-papers 3 --no-nlm --no-fit-check
research-hub auto "TOPIC" --max-papers 3 --no-nlm --llm-cli codex
research-hub auto "TOPIC" --max-papers 3 --no-nlm --llm-cli gemini
Add NotebookLM only after the local Zotero/Obsidian path works:
research-hub notebooklm login --auto-detect
research-hub notebooklm bundle --cluster <slug>
research-hub notebooklm upload --cluster <slug>
research-hub notebooklm generate --cluster <slug> --type brief
research-hub notebooklm download --cluster <slug>
For machine-readable automation, prefer commands with --json when
available, or use the MCP/REST surfaces exposed by research-hub serve.
This protocol is intentionally staged: verify runtime first, ingest a small cluster second, then add browser-dependent NotebookLM work last.
| User setup | Recommended path |
|---|---|
| Zotero + Obsidian + NotebookLM | research-hub auto "topic" |
| Zotero + Obsidian only | research-hub auto "topic" --no-nlm, zotero backfill, Obsidian dashboard output |
| Obsidian + NotebookLM only | research-hub import-folder <folder> --cluster <slug>, then NotebookLM bundle/upload |
| Zotero + NotebookLM only | Zotero-backed search and NotebookLM operations |
| No accounts yet | research-hub dashboard --sample |
pip install research-hub-pipeline[playwright,secrets]
research-hub setup
research-hub doctor
For local files without Zotero:
pip install research-hub-pipeline[import,secrets]
research-hub setup --persona analyst
research-hub import-folder ./papers --cluster my-local-review
research-hub dashboard --sample
research-hub plan "TOPIC"
research-hub auto "TOPIC" --no-nlm
research-hub serve --dashboard
Use --no-nlm for first-run smoke tests or when NotebookLM browser automation is not configured.
Two-phase interactive flow when you want a human / AI in the loop on which papers actually belong in a cluster. Replaces the auto one-shot ingest when topic boundaries are fuzzy.
research-hub discover new --cluster project-topic --query "agent-based modeling flood adaptation"
# → emits search results + a fit-check scoring prompt; stashes state
# Run the fit-check prompt through your AI of choice, paste the scores back
research-hub discover continue --cluster project-topic --scores scores.json
# → applies scores, emits papers_input.json for ingest
research-hub fit-check {emit|apply|audit|drift} exposes the underlying gates separately when you want to re-score an existing cluster or audit drift over time. discover variants emits a query-variation prompt to widen recall before fit-check narrows it.
research-hub import-folder ./sources --cluster project-topic
research-hub serve --dashboard
research-hub crystal emit --cluster project-topic
research-hub notebooklm login --auto-detect
research-hub notebooklm bundle --cluster project-topic
research-hub notebooklm upload --cluster project-topic
research-hub notebooklm generate --cluster project-topic --type brief
research-hub notebooklm download --cluster project-topic
Generate or refresh per-cluster synthesis pages in the Obsidian vault (uses cluster memory + paper summaries to produce a navigable overview note).
research-hub synthesize --cluster project-topic
research-hub synthesize --cluster project-topic --graph-colors # also paint the graph view
Run synthesize after paper-summarize has filled the per-paper notes; the synthesis page reads from those.
Maintain a structured memory registry per cluster — durable notes the AI can reload across sessions without re-reading every paper.
research-hub memory list --cluster project-topic
research-hub memory read --cluster project-topic
research-hub memory emit --cluster project-topic # AI extraction prompt
research-hub memory apply --cluster project-topic --payload memory.json
Use memory emit/apply to refresh the registry after a major round of new papers; use read from another session to reload context cheaply.
research-hub doctor --autofix
research-hub tidy
research-hub clusters rebind --emit
research-hub cleanup --all
For MCP hosts:
{ "mcpServers": { "research-hub": { "command": "research-hub", "args": ["serve"] } } }
Install host-specific files for hosts with known default skill directories:
research-hub install --platform claude-code
research-hub install --platform cursor
research-hub install --platform codex
research-hub install --platform gemini
For Hermes, OpenClaw, or other hosts with SKILL.md/rules support,
copy the relevant skills/<name>/ directories manually or inline this
file into the host's instructions. Use MCP/REST for tool calls when no
installer target exists.
ai-research-skills or copying SKILL.md
installed the research-hub CLI; check the runtime explicitly.research-hub doctor when setup state is uncertain.import-folder for non-academic or internal documents.npx claudepluginhub wenyuchiou/ai-research-skills --plugin research-workspaceFills per-paper Key Findings, Methodology, and Relevance sections in both Obsidian and Zotero after research-hub ingests cited papers. Invokes an LLM on each abstract; keeps Obsidian and Zotero in sync.
Materializes academic papers, personal reading, and web sources into local references/ directory for downstream writing phases. Enforces phase gate to block tools until brainstorm is complete.
Discovers, filters, and deep-reads academic papers via Scholar Inbox API and NotebookLM. Use for browsing today's papers, getting recommendations, rating/collecting, and asking questions about papers.