Enrich zotero abstracts
Skill benjibromberg/zotero-context/skills/enrich-zotero-abstracts
Use when the user wants to fix or fill in missing Zotero abstracts, when they say "fix abstracts", "fill missing abstracts", "/zotero-context:enrich-zotero-abstracts", or when reviewing items with thin abstractNote fieldsFrom its SKILL.md
npx -y skills add benjibromberg/zotero-context --skill enrich-zotero-abstractsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- reads credentialsReads from 2 credential sources: `.env` and 1 more.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 2 commands, including `.zotero-context/bin/search_items.py --no-abstract --limit 50 --output summary` and 1 more.
SKILL.md
3.2 KB, 737 tokens by cl100k_base, as published. Nobody here has run it
Enrich Zotero Abstracts
Overview
Find Zotero items with empty or short abstracts in the configured libraries, web-search for plausible abstract content, present each candidate to the user for approval, and write back to Zotero with version-conflict protection. Items updated this way receive a claude-enriched-YYYY-MM-DD tag for traceability.
When to Use
- User says "fix abstracts", "fill missing abstracts", "/zotero-context:enrich-zotero-abstracts"
- User wants to make a library more useful for downstream search
Prerequisites
/zotero-context:setup-zotero-referenceshas been run in this repo (.zotero-context/config.jsonexists).ZOTERO_API_KEYwith write scope is set in.env— the local Zotero API is read-only for item modification.
Workflow
Step 1: List candidates
.zotero-context/bin/search_items.py --no-abstract --limit 50 --output summary
This returns items where abstractNote is missing or shorter than 50 characters, as a JSON summary with title, creators, year, DOI, url, abstract, and tags fields.
Step 2: For each candidate (one at a time)
Show the user:
Title: <title>
Authors: <creators>
Year: <year>
DOI/URL: <doi or url>
Current abstract: <abstractNote, "(empty)" if blank>
Search the web for an abstract? [y/n/skip-rest]
If yes, web-search using DOI > URL > "title authors year" as the anchor. Quote a candidate abstract back to the user (clearly attributed to the source).
Proposed abstract (from <source URL>):
<text>
Apply this to the Zotero item? [y/edit/n]
If edit, let the user revise inline. If y, proceed to Step 3.
Step 3: Apply
.zotero-context/bin/enrich_abstract.py \
--key <key> \
--abstract "<text>" \
--lib <library id> \
--type {user|group}
Watch for the result:
{"status":"ok",...}— success.{"status":"conflict",...}— the item changed in Zotero between scan and PATCH. Refetch and ask the user whether to retry with the latest data.
Step 4: Report
After all candidates, summarize: N attempted, M enriched, C conflicts, S skipped. List the keys that received the claude-enriched-YYYY-MM-DD tag.
Common Mistakes
- Inventing abstracts from training data instead of web-searching for sourced text. Every proposed abstract must be attributable to a URL.
- Running with
--dry-runfor production usage. Dry-run is for verifying the payload only. - Bulk-applying without per-item user approval. The user must consent to each enrichment.
- Forgetting that
ZOTERO_API_KEYneeds write scope; a read-scope key fails on PATCH.
Verification After Run
After enrichment, the user should see in Zotero (web or desktop):
- Updated
abstractNotefield on each enriched item. - New tag
claude-enriched-YYYY-MM-DDon each enriched item. - No changes to other fields.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.