zotero-notes
The `/zotero-notes` command batch imports papers from a specified Zotero collection and generates or updates structured reading notes, preferably storing them in an Obsidian vault's `Sources/Papers/` directory or falling back to a markdown file in the working directory. Use this command to systematically convert Zotero library items into detailed research notes with standardized sections including claims, methods, evidence, strengths, limitations, and cross-references to other knowledge within a research project.
mkdir -p ~/.claude/commands && curl -fsSL https://raw.githubusercontent.com/Galaxy-Dawn/claude-scholar/HEAD/commands/zotero-notes.md -o ~/.claude/commands/zotero-notes.mdzotero-notes.md
# /zotero-notes - Zotero to Obsidian Reading Notes
Read papers from the Zotero collection "$collection" and create or update detailed reading notes.
## Default target
- **Preferred target**: the bound Obsidian project knowledge base (`Sources/Papers/*.md`)
- **Fallback target**: `reading-notes-{collection}.md` in the working directory if the current repo is not bound to Obsidian
## Workflow
### Step 0: Resolve whether the current repo is Obsidian-bound
1. If `.claude/project-memory/registry.yaml` exists for the current repo, treat the bound vault as the primary output target.
2. If the repo is a research project but not yet bound, bootstrap it first.
3. If there is no bound project context, fall back to a plain markdown output in the working directory.
4. Treat this command as an explicit agent-first ingestion pass under `$zotero-obsidian-bridge`.
### Step 1: Load papers from Zotero
1. Call `mcp__zotero__zotero_get_collections` to find the matching collection.
2. Call `mcp__zotero__zotero_get_collection_items` to list the papers.
3. For each item, call:
- `mcp__zotero__zotero_get_item_metadata`
- `mcp__zotero__zotero_get_item_fulltext` when a PDF is available
- `mcp__zotero__zotero_get_annotations` when helpful
- `mcp__zotero__zotero_get_notes` when helpful
4. If MCP transport fails but a local `zotero-mcp` checkout is available, use the local Python fallback instead of stopping the pass.
5. Treat Zotero `webpage` items as weak-source inputs unless they clearly expose full paper metadata and useful full text. Abstract-only or placeholder pages must stay `To-Read` and cannot support `Knowledge` or `Writing` claims.
### Step 2: Create/update the canonical paper note
If the project is Obsidian-bound, create or update one canonical note per paper under `Sources/Papers/`.
Each detailed note should contain:
- `Claim`
- `Research question`
- `Method`
- `Evidence`
- `Strengths`
- `Limitation`
- `Direct relevance to repo`
- `Relation to other papers`
- `Knowledge links`
- `Optional downstream hooks`
- canonical `Evidence Record` with `Source type` and `Claim strength` when the paper has reusable claims
Recommended frontmatter fields:
- `title`, `authors`, `year`, `venue`, `doi`, `url`, `citekey`, `zotero_key`
- `keywords`, `concepts`, `methods`
- `related_papers`, `linked_knowledge`, `argument_claims`, `argument_methods`, `argument_gaps`, `paper_relationships`
Prefer updating the existing note over creating a sibling note.
### Step 3: Collection coverage and synthesis
After the paper-note pass:
- update a collection inventory note when the source is a named collection
- record item -> canonical note mapping and coverage counts such as `16 / 16`
- verify coverage against expected Zotero keys, DOI values, or arXiv IDs when the user supplied them
- label abstract-only and webpage-placeholder items separately in the inventory
- synthesize durable literature knowledge under `Knowledge/`, for example:
- `Knowledge/Literature Overview.md`
- `Knowledge/Method Taxonomy.md`
- `Knowledge/Research Gaps.md`
Prefer updating existing canonical knowledge notes over creating parallel summaries.
### Step 4: Refresh the default literature canvas
After batch note creation or substantial note updates, refresh:
```bash
python3 "${CLAUDE_PLUGIN_ROOT}/skills/obsidian-literature-workflow/scripts/build_literature_canvas.py" --cwd "$PWD"
```
This rebuilds `Maps/literature.canvas` from paper-note and knowledge-note links.
### Step 5: Optional synthesis outputs
- If `format=comparison` and promoted claims pass the evidence gate, also update `Writing/comparison-matrix.md`.
- If the paper batch already supports a thematic synthesis and promoted claims pass the evidence gate, update `Writing/related-work-draft.md`.
If not, write only a coverage warning or claim map.
### Step 6: Minimal write-back
Always update:
- today's `Daily/YYYY-MM-DD.md`
- repo-local binding summary when project state changes
### Step 7: Final response
Include:
- collection size and coverage summary
- created / updated note paths
- optional `obsidian://open` links
- optional `obsidian open ...` suggestions when CLI is available
## Fallback behavior
If the repo is not bound to Obsidian:
- create `reading-notes-{collection}.md`
- if `format=comparison` and promoted claims pass the evidence gate, also create `comparison-matrix.md`
## Notes
- Zotero remains the source of truth for collection structure, metadata, attachments, PDF full text, and annotations.
- Obsidian remains the durable project knowledge surface for reading notes, project relevance, and cross-note linking.
- Default bridge targets are `Sources/Papers/` and `Knowledge/`.
- Do not dump raw full text into Obsidian paper notes.
- Do not create `Concepts/` or `Datasets/` trees by default.
- Refresh `Maps/literature.canvas` by default after a substantial Zotero ingestion pass.
- Treat `Experiments/` and `Results/` as later project workflows, not the default Zotero-import destination.
- Do not let abstract-only or webpage-placeholder items support durable claims.Expert code review specialist. Proactively reviews code for quality, security, and maintainability. Use immediately after writing or modifying code. MUST BE USED for all code changes.
Use this agent when the user provides a Kaggle competition URL or asks to learn from Kaggle winning solutions. Examples:
Use this agent when the user asks to "conduct literature review", "search for papers", "analyze research papers", "identify research gaps", "review related work", or mentions starting a research project. This agent integrates with Zotero for automated paper collection, organization, and full-text analysis. Examples:
Use this agent when the user provides a research paper (PDF/DOCX/arXiv link) or asks to learn writing patterns from papers, extract venue-specific writing signals, study paper structure, or mine rebuttal strategies. The agent writes extracted knowledge into the active installed paper-miner writing memory for ml-paper-writing. It does not maintain project-specific writing memory.
Use this agent when the user asks to "write rebuttal", "respond to reviewers", "analyze review comments", or needs help with academic paper review response. This agent specializes in systematic rebuttal writing with professional tone and structured responses.
Test-driven development guide for writing tests first, implementing the smallest passing change, and keeping verification tight. Use when the user explicitly wants TDD or when a task should be driven by failing tests before code.
Run a blocker-first post-experiment workflow: validate evidence, produce strict statistical analysis when possible, and generate a decision-oriented results report only when the analysis bundle is sufficient. Uses results-analysis + results-report as a gated two-stage workflow.
Commit changes following Conventional Commits format (local only, no push).