zotero-notes

zotero-notes is a command for Claude Code from Galaxy-Dawn/claude-scholar. It costs 29 tokens per session (1,307 once invoked), scanned A, original, MIT.

A command that reads papers from a Zotero collection and creates or updates detailed reading notes in an Obsidian project knowledge base or Markdown file. Zotero manages research references, while Obsidian stores linked notes.

In plain words
What is it for?
Use it to build reading notes for a collection of papers, either inside an Obsidian research project or in a local file.
Why use it?
It reduces the manual work of turning saved papers into consistent notes and uses abstracts when full paper text is unavailable.

Command for Claude Code

Written for Claude Code: ${CLAUDE_PLUGIN_ROOT} variable. Also seen: $skill-name invocation.

Runs only inside its plugin — its command needs a path that Claude Code sets for a plugin’s own hooks and for nothing else. Install the plugin, not this.

Part of the claude-scholar plugin — 45 skills, 34 commands, 6 agents, 5 hooks shipped together

Good fit Use it to build reading notes for a collection of papers, either inside an Obsidian research project or in a local file.

Compare 6 commands from other repositories ↓
About the project

Claude Scholar is a semi-automated research assistant for academic research and software development, supporting literature review, coding, experiments, reporting, writing, and project knowledge management. Computer science and AI researchers use it across the research workflow with several coding-agent platforms; the catalogue contains its skills, commands, agents, hooks, plugin, and instruction.

Galaxy-Dawn/claude-scholar · 5,407 stars · on GitHub

Install

Getting it into your agent

This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.

Claude Code
/plugin marketplace add Galaxy-Dawn/claude-scholar
Claude Code
/plugin install claude-scholar

Made for: Claude Code.

Or install claude-scholar, the plugin that ships this one along with the rest of its 45 skills, 34 commands, 6 agents, 5 hooks.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for zotero-notes

README.md
[![agentmods](https://agentmods.dev/badge/commands/galaxy-dawn/claude-scholar/zotero-notes/github.svg)](https://agentmods.dev/commands/galaxy-dawn/claude-scholar/zotero-notes)
Your own site
<a href="https://agentmods.dev/commands/galaxy-dawn/claude-scholar/zotero-notes"><img src="https://agentmods.dev/badge/commands/galaxy-dawn/claude-scholar/zotero-notes/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for zotero-notes

Your own site · 80×15
<a href="https://agentmods.dev/commands/galaxy-dawn/claude-scholar/zotero-notes"><img src="https://agentmods.dev/badge/commands/galaxy-dawn/claude-scholar/zotero-notes.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 29 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 1,307 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00029 $0.01307
Opus 5 $0.00015 $0.00654
Sonnet 5 $0.00006 $0.00261
Haiku 4.5 $0.00003 $0.00131

Measured 10d ago against content hash 77dfbc590e0f, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-09, from the pricing page.

Security

Grade A, and why

zotero-notes scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

commands/zotero-notes.md · 129 lines

How it starts

The opening of the file, as written. The whole thing — 129 lines — stays where its author put it; the contents beside it link to each section on GitHub.

/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

Read the full file on GitHub · 129 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 10d ago First seen · 129 lines · 29 tokens per session scan A 77dfbc590e0f

Subscribe to this mod's changes

zotero-notes is a command published in the GitHub repository Galaxy-Dawn/claude-scholar (5,407 stars, last pushed 13d ago), licensed MIT. It adds 29 tokens to every session and 1,307 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.