# Zotero Library Curator

> Produce a read-only Zotero cleanup audit for duplicate DOIs, missing tags, collection placement, and tag hygiene. Use only when the user explicitly asks for a Zotero audit or preview cleanup plan. Never perform CRUD; hand approved changes to zotero-skills and report when Zotero connectivity is unavailable.

- Skill: `steven65026502/zotero-library-curator` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add steven65026502/zotero-library-curator`
- Raw SKILL.md: https://api.skillmd.com/api/skills/steven65026502/zotero-library-curator/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: steven65026502 (https://skillmd.com/u/steven65026502)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/steven65026502/zotero-library-curator

---


# zotero-library-curator

Sit one layer above the standalone `zotero-skills` skill. This skill
**reads** the Zotero library, runs **audit + hygiene checks**, and emits
**preview plans**. It does NOT perform the changes itself.

For any actual create / update / delete operation, defer to:

- The standalone **`zotero-skills`** skill (full CRUD, dual local/web API
  routing); or
- The **`research-hub zotero` CLI** (`backfill --tags --notes [--apply]`,
  etc., which is preview-first by default).

## Prerequisite check (do this first)

Reading the Zotero library requires a connection. The skill works in
two modes:

1. **Read-only audit / preview** — needs **either** `zotero-skills`
   (Zotero local API) **or** the `research-hub zotero` CLI to
   inspect items.
2. **Apply cleanup** — out of scope for this skill; hand the approved plan to
   `zotero-skills` in a separate mutating task.

Before running, verify at least one read path is callable in the current host:

```bash
research-hub doctor 2>/dev/null  # if research-hub CLI installed
# Also check the current host's registered skills for zotero-skills.
```

If **neither** is available, the user installed only the marketplace
plugin without the CLI and without the standalone `zotero-skills`
skill. Stop and tell them:

> This skill audits a Zotero library, which needs Zotero connectivity
> via one of:
>
> - The standalone `zotero-skills` skill (handles Zotero local API).
>   Install it through the current host's supported skill installer if absent.
> - **Or** the `research-hub` CLI: `pip install research-hub-pipeline`
>
> Either path needs Zotero configured (local API on port 23119, or
> Zotero Web API key). Once one is set up, re-run your audit request.

## When to use

Trigger phrases:

- "Audit my Zotero library."
- "Find duplicate DOIs in Zotero."
- "Find Zotero items missing required tags."
- "Propose a tag hygiene cleanup plan."
- "Generate a Zotero cleanup preview before I apply anything."
- "Which Zotero collections are bloated / under-used?"

Not for:

- Adding, editing, or deleting items — defer to `zotero-skills` skill.
- Backfilling tags/notes on items already in research-hub clusters —
  use `research-hub zotero backfill` (already preview-first).
- Cluster-level operations — use `research-hub clusters` commands.
- Searching the library for a specific paper — use `zotero-skills`
  search, not the curator.

## Inputs

In priority order:

1. **research-hub cluster registry** (`.research_hub/clusters.yaml`) —
   to know which Zotero collections belong to which research clusters.
2. **Zotero library state via local API** (fast, read-only) — list
   items, list collections, list tags. Use `zotero-skills` `READ
   Operations` patterns directly; don't reinvent.
3. **research-hub dedup index** (`.research_hub/dedup_index.json`) —
   precomputed DOI/title hash table; far cheaper than a fresh scan.
4. **Optional**: backfill report from `research-hub zotero backfill`
   (saved to `.research_hub/backfill-*.md`) — historical state of
   prior cleanups.

## Audit checks

Five checks: duplicate DOI scan, orphan-tag scan, cross-collection cluster mismatch, tag hygiene report, collection bloat / sparsity. Pick the relevant subset for each user request.

Full check details + suggested fixes for each: `references/audit-checks.md`.

## Output discipline

Always emit a **preview plan**, never apply. The report has 5 sections that map 1:1 onto the audit checks (skip a section if its check returned no findings) plus a "Suggested follow-ups" section listing concrete CLI commands for the user to run.

Full report template: `references/report-template.md`.

If the report has 0 issues, emit a single OK line and stop.

## Token-saving behavior

- Read the dedup index first; only hit the Zotero local API for items
  not in the index.
- Cap full-library scans at 100 items per audit run unless the user
  explicitly says "full library".
- Don't quote item titles back if a DOI / Zotero key is enough.
- Cache the report in `.research_hub/curator-<timestamp>.md` if the
  user asks "save this report".

## What NOT to do

- **Do NOT call any Zotero create / update / delete endpoint.** That's
  zotero-skills' or research-hub's job, with explicit user `--apply`.
- **Do NOT** rename tags directly — propose, then defer to manual
  review or `zotero-skills` batch update.
- **Do NOT** trash duplicate items automatically — propose, then defer
  to `research-hub zotero backfill --apply` or manual delete.
- **Do NOT** redocument the zotero-skills CRUD primitives — link to
  them. The whole point of this skill is to be the **layer above**.

## See also

- `references/audit-checks.md` — full details for each of the 5 audit checks
- `references/report-template.md` — full curation-report preview template

