Skill
Community

zotero-workflow

Install
1
Install the plugin
$
npx claudepluginhub cianos95-dev/claude-command-centre --plugin claude-command-centre

Want just this skill?

Then install: npx claudepluginhub u/[userId]/[slug]

Description

Canonical Zotero library management workflow: plugin sequencing, metadata enrichment, Linter/Cita settings, safety rules, JS verification, and anti-patterns. Use when performing any Zotero operation, enriching metadata, resolving DOIs, deduplicating, syncing to Supabase, or diagnosing library health issues. Trigger with phrases like "enrich Zotero metadata", "resolve DOIs", "run Linter", "Zotero health check", "deduplicate library", "sync to Supabase", "Zotero plugin sequence".

Tool Access

This skill uses the workspace's default tool permissions.

Skill Content

Zotero Workflow

Principle: Plugins first, scripts only where plugins can't reach.

This is the single source of truth for all Zotero operations. Do NOT invent new approaches.

Plugin Sequence (ORDER MATTERS)

Step 1: Cita "Get identifiers" (OpenAlex first, then S2)
  → Finds DOIs by title-matching against academic databases
  → Run on items missing DOI only

Step 2: Linter "Retrieve metadata via identifier and lint"
  → Takes existing DOIs and fetches full metadata from CrossRef
  → Fills journal, abstract, date, volume, issue, pages

Step 3: Zoplicate "Find duplicates"
  → Clean up duplicates introduced or exposed

Step 4: zotero-metadata-sync.py sync --all
  → Push updated metadata to Supabase

NEVER reverse this order. Cita finds DOIs, Linter uses DOIs. Running Linter first wastes API calls.

Linter Settings (CRITICAL)

SettingValueWhy
Update ModeBlank Fields OnlyPrevents overwriting existing good metadata
Allow Change Item TypeOFFPrevents unwanted type conversions
Concurrency20Balance speed and rate limits
Sentence CaseONStandardizes titles
ISO 8601 DatesONStandardizes date format
ISO4 Journal AbbreviationsONStandardizes journal names

WARNING: "All Fields" mode + "Allow Change Item Type" ON will damage your library.

Cita Settings

  • Primary source for DOI resolution: OpenAlex (best psychology/social science coverage)
  • Secondary source: Semantic Scholar (better CS/technical coverage)
  • Skip: Wikidata (slow, rarely adds DOIs others miss)
  • No progress bar: Cita doesn't show progress. Just wait.

JS Console Verification

ALWAYS verify before AND after any batch plugin operation. Run in Tools > Developer > Run JavaScript.

Library health check:

let items = await Zotero.Items.getAll(Zotero.Libraries.userLibraryID, true);
let stats = { total: 0, hasDOI: 0, hasAbstract: 0, hasDate: 0, hasJournal: 0 };
for (let item of items) {
  if (!item.isRegularItem() || item.deleted) continue;
  stats.total++;
  await item.loadAllData();
  if (item.getField('DOI')) stats.hasDOI++;
  if (item.getField('abstractNote')) stats.hasAbstract++;
  if (item.getField('date')) stats.hasDate++;
  try { if (item.getField('publicationTitle')) stats.hasJournal++; } catch(e) {}
}
return JSON.stringify(stats, null, 2);

Active Scripts (3 total — ceiling)

ScriptPurposeWhen to Run
zotero-enrich-abstracts.pyFetch missing abstracts (S2 > OpenAlex > CrossRef)After major imports
zotero-metadata-sync.pySync metadata to SupabaseAfter batch enrichment
zotero-to-supabase.pyUpload PDFs to Supabase storageFor NotebookLM access

All other scripts archived. Do not resurrect.

Anti-Patterns

Anti-PatternWhy It FailedDo This Instead
Custom Python scripts for metadata opsFragile, rate limits, duplicates plugin workLinter + Cita plugins
Swarm/multi-agent Zotero operationsContext explosion, no rollbackSingle-threaded plugin ops
Direct SQLite writesCorrupts databaseNEVER. Use API or plugins
Linter on entire library at onceSlow, no progressSaved searches, ~500-item batches
5+ plugins in one sessionZ7 corrupted L10n. Z8 safer but riskyMax 2 plugin installs per session
"All Fields" Linter modeOverwrites good metadataBlank Fields Only
Custom classification scriptsReinvents AI CollectionUse AI Collection plugin
Custom citation scriptsReinvents CitaUse Cita plugin

Safety Rules

  • Max 2 plugin installs per session
  • NEVER modify intl.locale.requested or general.useragent.locale
  • Claude cannot execute JS in Zotero remotely — guide user through JS console
  • Always verify with JS health check before AND after plugin operations
  • Batch size limit: ~500 items per operation
  • Pilot batch (3 items) before any 10+ item operation

MCP Status

MCPStatusTools
zoteroWorking (read-only, stdio)Search, metadata, fulltext, annotations, collections, tags
seerai-zoteroWorking (HTTP)search_library, import_paper, related_papers, generate_tags, 8 more

Enrichment Source Assessment

SourceViaStrengthUse For
OpenAlexCitaBest social scienceDOI resolution (primary)
Semantic ScholarCita, SeerAIBest CS/technicalDOI resolution (secondary)
CrossRefLinterMost complete per DOIMetadata fill
UnpaywallDOI lookup onlyOA status, PDF linksOA PDF finding
Stats
Stars0
Forks0
Last CommitFeb 24, 2026

Similar Skills