Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add benjibromberg/zotero-context --skill enrich-zotero-abstractsgit clone --depth 1 https://github.com/benjibromberg/zotero-contextWrote 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.
[](https://agentmods.dev/skills/benjibromberg/zotero-context/enrich-zotero-abstracts)<a href="https://agentmods.dev/skills/benjibromberg/zotero-context/enrich-zotero-abstracts"><img src="https://agentmods.dev/badge/skills/benjibromberg/zotero-context/enrich-zotero-abstracts/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.
<a href="https://agentmods.dev/skills/benjibromberg/zotero-context/enrich-zotero-abstracts"><img src="https://agentmods.dev/badge/skills/benjibromberg/zotero-context/enrich-zotero-abstracts.svg" alt="Reviewed on agentmods" width="80" height="20"></a>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.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00060 | $0.00848 |
| Opus 5 | $0.00030 | $0.00424 |
| Sonnet 5 | $0.00012 | $0.00170 |
| Haiku 4.5 | $0.00006 | $0.00085 |
Grade A, and why
enrich-zotero-abstracts 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 12d 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.
How it starts
The opening of the file, as written. The whole thing — 98 lines — stays where its author put it; the contents beside it link to each section on GitHub.
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.
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.
- 12d ago First seen · 98 lines · 60 tokens per session scan A dc4a76361e0c
enrich-zotero-abstracts is a skill published in the GitHub repository benjibromberg/zotero-context (1 stars, last pushed 4mo ago), licensed MIT. It adds 60 tokens to every session and 848 once invoked, about $0.0003 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-31.
Other skills, from other repositories
meta-tags-optimizer
Optimize title tags, meta descriptions, Open Graph, and Twitter cards for maximum click-through rate. Generates multiple A/B test variations with character counting and SERP preview. Use when asked to "optimize title tag", "write meta description", "improve CTR", "Open Graph tags", "fix my meta tags", "social media…
google-ads-audit
Google Ads account audit and business context setup. Use for account-health audits and business-context setup. Trigger on "audit my ads", "ads audit", "set up my ads", "onboard", "account overview", "how's my account", "ads health check", "what should I fix in my ads", or when the user is new to NotFair and hasn't run…
sxo
Search Experience Optimization (SXO) — the bridge between SEO and UX/CRO. Audits the full journey from the SERP click to the on-page goal: SERP click-through factors (title/meta/rich results that win the click), then post-click experience signals that keep users and drive conversions — above-the-fold relevance and…
critical-code-reviewer
Rigorously review code or pull requests for correctness, security, accessibility, maintainability, tests, and edge cases. Use when users request a critical code review, want a guided walkthrough of findings, need implementer-facing feedback, or want to prepare, create, or submit a GitHub pull request review.
shiny-bslib
Build modern Shiny dashboards and applications using bslib (Bootstrap 5). Use when creating new Shiny apps, modernizing legacy apps (fluidPage, fluidRow/column, tabsetPanel, wellPanel, shinythemes), or working with bslib page layouts, grid systems, cards, value boxes, navigation, sidebars, filling layouts, theming…
elixir-idioms
OTP/BEAM patterns and Elixir idioms — GenServer, Supervisor, Task, Registry, pattern matching, with chains, pipes. Use when designing processes or debugging BEAM issues.