Zotero Taxonomy Curator
ganzoth/zotero-taxonomy-curator
Domain-configurable Zotero-to-Obsidian literature curation and paper close-reading skill.
A skill your agent uses when references in a .bib file (often from /search-lit) should land in Zotero and Obsidian.
$ npx skills add Aperivue/medsci-skills --skill lit-sync -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Aperivue/medsci-skills lit-sync --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Aperivue/medsci-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/lit-sync .claude/skills/lit-sync && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "lit-sync" agent skill from https://github.com/Aperivue/medsci-skills/tree/main/skills/lit-sync into .claude/skills/lit-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lit-sync", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Aperivue/medsci-skills/tree/main/skills/lit-syncType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Aperivue/medsci-skills --skill lit-sync -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Aperivue/medsci-skills lit-sync --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Aperivue/medsci-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/lit-sync .agents/skills/lit-sync && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "lit-sync" agent skill from https://github.com/Aperivue/medsci-skills/tree/main/skills/lit-sync into .agents/skills/lit-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lit-sync", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Aperivue/medsci-skills --skill lit-sync -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Aperivue/medsci-skills lit-sync --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Aperivue/medsci-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/lit-sync .cursor/skills/lit-sync && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "lit-sync" agent skill from https://github.com/Aperivue/medsci-skills/tree/main/skills/lit-sync into .cursor/skills/lit-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lit-sync", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Aperivue/medsci-skills.git --path skills/lit-sync--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Aperivue/medsci-skills --skill lit-sync -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Aperivue/medsci-skills lit-sync --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Aperivue/medsci-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/lit-sync .gemini/skills/lit-sync && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "lit-sync" agent skill from https://github.com/Aperivue/medsci-skills/tree/main/skills/lit-sync into .gemini/skills/lit-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lit-sync", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Aperivue/medsci-skills lit-syncInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Aperivue/medsci-skills --skill lit-sync -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Aperivue/medsci-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/lit-sync .github/skills/lit-sync && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "lit-sync" agent skill from https://github.com/Aperivue/medsci-skills/tree/main/skills/lit-sync into .github/skills/lit-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lit-sync", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Aperivue/medsci-skills --skill lit-sync -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Aperivue/medsci-skills lit-sync --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Aperivue/medsci-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/lit-sync .opencode/skills/lit-sync && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "lit-sync" agent skill from https://github.com/Aperivue/medsci-skills/tree/main/skills/lit-sync into .opencode/skills/lit-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lit-sync", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
lit-syncA skill your agent uses when references in a .bib file (often from /search-lit) should land in Zotero and Obsidian.
Lit Sync is an agent skill from Aperivue/medsci-skills. Use when references in a .bib file (often from /search-lit) should land in Zotero and Obsidian. Syncs them to the Zotero library, writes Obsidian literature notes and extracts cross-cutting concept notes once enough accumulate. A folder of PDFs is /obsidian-paper-vault.
Its SKILL.md is about 4.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 14 other files, including scripts and reference files (for example `references/bbt_lookup.md`, `references/concept_note_template.md` and `references/fulltext_report.md`).
It sits in Research & Science, covering Citation management. It works with Obsidian, Zotero and LaTeX. The repository describes itself as: Agent Skills for medical research — literature search, reporting-guideline & citation checks, statistics, publication figures, submission. Works with Claude Code, Codex, Cursor &… The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 3b14ae2. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Shell and Python), which the agent can run.
Shell commands in SKILL.md call:
curlpython3jqFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
doi.orgeutils.ncbi.nlm.nih.govFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Lit Sync loads about 4.6k tokens when it runs, and up to ~6.5k if it reads all its reference files. Until then it costs about 70 tokens; SKILL.md has 2,190 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from Aperivue/medsci-skills at commit 3b14ae2, republished under its MIT licence (© Aperivue). 2,190 words, ~4,602 tokens.
.claude/skills/lit-sync/SKILL.md (or your agent's skills folder). This skill also uses 9 other files; get the full folder from GitHub.Takes the .bib output of /search-lit (or any user-specified .bib file), synchronizes the
references into the Zotero library and Obsidian literature notes, and extracts cross-cutting
concept notes once enough literature notes accumulate.
manuscript/_src/refs.bib snapshot
read-only. If the current user is a collaborator (no Zotero access per SSOT.yaml
reference_manager.required_for), abort with instructions to flag [@NEW:topic] placeholders in
the manuscript and notify the owner.<project>/manuscript/_src/refs.bib.$OBSIDIAN_VAULT)./lit-sync is the sole writer of manuscript/_src/refs.bib (via the Better BibTeX auto-export
trigger), references/zotero_collection.json, and references/fulltext_retrieval.json (Phase 2.7).
NEVER write refs.bib directly — not even to compensate for a missing Zotero connection —
because only Better BibTeX's export keeps it in step with the library; if auto-export is broken, fix
the Zotero setup. Direct hand edits to refs.bib are drift — revert on sight.
Parse the user-specified .bib file, or the references/library.bib just produced by
/search-lit, with regex. Extract per entry: citekey, doi, pmid, title, authors (first + last
minimum), journal, year, and volume/number/pages if present. Log any parse failures and skip those
entries. All bibliographic data in later phases comes from these entries or from API responses.
A parsed citekey is not yet a library key: /search-lit candidate keys (Kim_2024_Validation) are
provisional, and Better BibTeX mints the real key when Phase 2 adds the item. Never compose a key;
Step 3.2 §Citekey provenance says where the note's key comes from.
If the Zotero MCP is not connected, skip this phase (still write the Step 2.3 file with
status: "skipped") and proceed to Phase 3.
Identify the project from the current working directory or an explicit user override. Reuse a
recorded collection key; otherwise check existing Zotero collections for the project and, if none
exists, create one with zotero_create_collection. Record the collection key, and report it to the
user when a new collection is created.
For each entry:
zotero_search_items to search by DOI or title — if already present, skip.
This search-first step is what prevents duplicates; zotero_add_by_doi does not
dedupe by itself (it fetches CrossRef and creates the item), so never skip the search.zotero_add_by_doi (when a DOI is available) or zotero_add_by_url (the PubMed
URL, when only a PMID is available). An entry with neither DOI nor PMID is not added: count it
as failed and ask the user to add it manually.zotero_add_by_doi accepts an attach_mode argument that governs the OA child-PDF
attach attempt at add time (the installed server treats linked_url as "bookmark the
PDF URL"; other values download/import). Exact accepted values are server-version-specific —
verify against the connected server. Do not use zotero_add_from_file to attach a PDF to
an item added here: it has no parent-item argument and would create a duplicate parent item.zotero_manage_collections to place the item in the project collection.Zotero Sync:
Added: 8 papers (new)
Skipped: 3 papers (already in library)
Failed: 1 paper (no DOI/PMID)
Collection: RFA-Meta (TZQEP4NH)Always write references/zotero_collection.json in the project workspace:
{
"schema_version": 1,
"status": "synced",
"collection": "RFA-Meta",
"collection_key": "TZQEP4NH",
"added": 8,
"skipped": 3,
"failed": 1
}If Zotero is unavailable, write the same file with status: "skipped" and a
human-readable reason.
Better BibTeX "Keep updated" auto-export normally refreshes manuscript/_src/refs.bib within
seconds of a Zotero change. This phase verifies the snapshot actually updated before downstream
skills consume it.
Read SSOT.yaml → truth.refs_bib. Default: manuscript/_src/refs.bib. If absent (legacy project), fall back to manuscript/_src/refs.bib and emit a WARN recommending SSOT migration.
Before entering the 10s polling loop in Step 2.5.2, verify both preconditions. If either fails, abort Phase 2.5 with setup instructions instead of waiting for a timeout that will never resolve.
Better BibTeX is answering. Probe the running plugin, not a file on disk:
curl -s -m 5 -o /dev/null -w "%{http_code}" \
http://127.0.0.1:23119/better-bibtex/json-rpc # expect 200A non-200 means Zotero is closed or BBT has not finished starting. Retry once after Zotero's window is up; BBT registers its endpoint a few seconds after the app does.
⚠️ Do not gate on ~/Zotero/better-bibtex/read-only.json. Current BBT releases keep
auto-export registrations in their own store, so that file is routinely [] on a healthy
install; treating it as "not configured" skips this phase on working setups, which is how a
stale refs.bib and an invented citekey reach a manuscript.
On failure print:
Phase 2.5 skipped: Better BibTeX did not answer on
127.0.0.1:23119(HTTP<code>). Open Zotero, wait for it to finish loading, then re-run/lit-sync.
Target refs.bib exists. The resolved truth.refs_bib path from Step 2.5.1 must exist on disk (even empty is OK — BBT will overwrite). On failure print:
Phase 2.5 skipped: target snapshot
<path>not found. Configure BBT auto-export with "On Change" to the SSOT path, then re-run.
In either early-exit, set refs_bib_refreshed: false + reason: "precondition:<which>" in the
Step 2.5.3 JSON, tell the user, and return control to the caller. Nothing downstream enforces this
flag, so telling the user is what stands between a stale refs.bib and a manuscript.
After Phase 2 adds items:
stat -f "%m" manuscript/_src/refs.bib before Zotero writes.<project>/manuscript/_src/refs.bib).File → Export Library → Better BibTeX → target path.Append to the JSON written in Step 2.3:
{
"refs_bib_path": "manuscript/_src/refs.bib",
"refs_bib_mtime": "2026-04-24T14:32:11Z",
"refs_bib_refreshed": true,
"citekeys_verified": ["smithDeepLearningRadiology2024", "..."]
}If refresh failed, set refs_bib_refreshed: false and include reason.
Run only when the user asks for full text (e.g. "download the PDFs", "fetch full
text", or a worklist supplied with that intent). Default /lit-sync stays metadata-only
and network-light — do not auto-run this phase. Runs after items are in Zotero (Phase 2)
and the snapshot is verified (Phase 2.5), before Obsidian notes (Phase 3).
Offer both routes below and reconcile them in one report. Retrieve full text only through them: never automate authenticated browser sessions, never bypass paywalls or access controls, and never hard-code institutional proxies, credentials, or hosts into this skill. Route what neither reaches to institutional access, interlibrary loan, or author contact.
Delegate to the /fulltext-retrieval engine (do not re-implement the OA cascade or
import its code; invoke it by path):
ENGINE="${CLAUDE_SKILL_DIR}/../fulltext-retrieval/fetch_oa.py"
python3 "$ENGINE" <worklist> -o pdfs/ -e <contact-email> --report pdfs/retrieval_report.json<worklist> is the DOI/PMID(/Title) list — the Phase-1 .bib DOIs, a worklist supplied in
Standalone Modes, or the project collection's DOIs. Output: pdfs/*.pdf for /meta-analysis and
pdf_to_md.py, plus pdfs/retrieval_report.json (schema 2: retrieval status/source,
source_identity, and file_sha256). Keep the distinction between having a file and assessing its
identity.
Emit ${CLAUDE_SKILL_DIR}/../fulltext-retrieval/references/find_available_pdf.js
for the user to paste into Zotero (Tools → Developer → Run JavaScript) with the project
collection selected. It triggers Zotero's own addAvailablePDF/addAvailablePDFs, which
reuse the user's OpenURL resolver / institutional proxy — so it typically retrieves more
than OA-only, while no credentials or institutional identifiers enter this skill. The
no-code equivalent is right-click → "Find Available PDF". Record its {attached, missing} summary
from the printed JSON.
Merge Route A's pdfs/retrieval_report.json (and the user-reported Route B summary) into
references/fulltext_retrieval.json, and append a short fulltext counts block to
references/zotero_collection.json. Read ${CLAUDE_SKILL_DIR}/references/fulltext_report.md
before writing them — it has the schema and the identity-evidence rules (a retrieved file is not
a verified paper; a consistent status is advisory; unassessed items go to
identity_review_needed).
Detect the vault's existing layout before creating notes. If the vault already uses a folder
structure (including a Korean one), honor it — never silently rename a user's folders. For a new
or unclear vault, default to the English folders Literature/ and Concepts/ with the English
templates (Step 3.2, Step 4.3). For a Korean-structured vault, or a user who prefers Korean notes, use the Korean
folder layout and Korean-heading templates in
${CLAUDE_SKILL_DIR}/references/locale/ko/note_templates.md (and the vault's own hub-note names).
# Default English layout; substitute the vault's existing folder if one is present
# (e.g. "02 연구/문헌/" for a Korean-structured vault — see references/locale/ko/note_templates.md).
ls "$VAULT/Literature/" | grep -v "📊" | wc -lFor each .bib entry, create Literature/{citekey}.md (or the vault's existing literature folder).
Skip if the file already exists — never overwrite, because the user may have added highlights
or personal notes.
A note's filename and citekey: field assert that Zotero has an entry with that key. [@key] in a
manuscript, [[key]] between notes, and the Zotero Integration plugin's {{citekey}}.md all depend
on it, and a key that resolves to nothing still looks correct. So the key is read, never
composed:
refs.bib entry, or ask Better BibTeX
(item.search over json-rpc — see ${CLAUDE_SKILL_DIR}/references/bbt_lookup.md).zotero_add_by_doi) and let BBT mint
the key. Phase 2 owns that step for a reason: a note written ahead of its library entry
has no key to be right about.citekey: "" and the tag
_needs-citekey. An empty field is recoverable; an invented one is not, because nothing
downstream can tell it apart from a real key.Verify before finishing:
python3 "${CLAUDE_SKILL_DIR}/scripts/check_citekey_provenance.py" --vault "$VAULT" --bib "$REFS_BIB"INVENTED means the note's key is absent but its DOI resolves to a real key; fix it here.
MISMATCH means the key is real but the note's DOI is the library's DOI for another key, so it
cites another paper; rename to the suggested key (known limit: a note DOI spelled differently from
the library's, e.g. quoted or braced, never raises it). UNPARSED means a literature note's
frontmatter never closes, so its key was not read. With --strict these three exit 1, and a scan
that finds no literature note exits 2. Match notes to papers by DOI, never by key (AMBIGUOUS, UNUSABLE, NO_IDENTIFIER: see the script's
--help), and search the full library (--live) before importing anything it reports missing.
---
notetype: literature
citekey: "{citekey}"
title: "{title}"
authors: "{authors}"
journal: "{journal}"
year: {year}
doi: "{doi}"
pmid: "{pmid}"
created: "{today}"
tags:
- type/literature
- _unread
---
# {title}
## Bibliographic info
- **Authors**: {authors}
- **Journal**: {journal}{volume_issue_pages}
- **Year**: {year}
- **DOI**: [{doi}](https://doi.org/{doi})
{pmid_line}
## Key points (in my own words)
## My thoughts
## Related notes
- [[Research Hub]]
- [[Papers & Reviews]]
-
-Rules:
notetype: literature — compatible with the Zotero Integration template._unread tag — change to _read later after the user reads the PDF in Zotero and adds highlights.## Key points and ## My thoughts blank — the user fills these in personally.## Related notes contains 2 hub links + 2 empty slots (reserved for later concept-note linking).Obsidian Literature Notes:
Created: 8 notes (new)
Skipped: 3 notes (already exist)
Location: Literature/
Total in vault: 12 literature notesRun this phase only when there are ≥10 literature notes in the vault. If fewer exist, print a status message like "N literature notes — concept extraction unlocks at ≥10" and stop.
Read all files under Literature/*.md (or the vault's existing literature folder), extract
keywords from each paper's title, journal, and tags and major concepts from the .bib entry titles,
and identify concepts that co-occur across ≥3 literature notes.
Exclude from concept candidates: model names (GPT-4, Claude, etc.), dataset names (MedQA, ImageNet, etc.), journal names, institution names, and generic technique names (too unspecific). Whatever remains becomes a concept-note candidate.
Create Concepts/{concept name}.md (or the vault's existing concept-note folder) from the
template in ${CLAUDE_SKILL_DIR}/references/concept_note_template.md (Korean-structured vault:
the concept template in references/locale/ko/note_templates.md).
Key rules:
## Definition — keep the > TODO marker; the 2nd-layer note only becomes
meaningful once the user writes the definition in their own words.status always starts at 🌱Seedling.## Related notes (vault convention).Concept-note candidates (≥3 papers cross-referenced):
1. {Concept A} (4 papers)
2. {Concept B} (3 papers)
3. {Concept C} (5 papers)
Create? (all / selected / skip)Auto-draft, but create only after user confirmation.
This skill can run without a fresh .bib file.
On an explicit concept-extraction request, scan existing Literature/*.md (or the vault's existing
literature folder) and run only Phase 4.
On a "tidy this project's references" request, locate .bib files inside the workspace and run
Phase 1–3.
On a "sync Zotero" request, diff the Zotero collection against the .bib file and add whatever is
missing.
When the user supplies a list of PMIDs (e.g., from a HANDOFF or a colleague), resolve PMIDs to DOIs via PubMed esummary first, then enter Phase 2 with the DOIs:
PMIDS="12345,67890,..."
curl -s "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=${PMIDS}&retmode=json" \
| jq -r '.result | to_entries[] | select(.key != "uids") | "\(.value.uid)\t\(.value.elocationid)\t\(.value.title)"'For items already in the library (found by the Step 2.2 search), use zotero_manage_collections to
attach them to the project collection without re-adding — re-adding by URL/PubMed-URL would
bypass the search dedup and create duplicates. Record both added and existing items in
references/zotero_collection.json. If a PMID has no DOI in PubMed (older or non-indexed papers),
fall back to zotero_add_by_url with the PubMed URL and mark the entry no_doi: true.
When the user supplies a worklist file (a .tsv/.csv/.md table with a DOI column,
optional PMID/Title, or a plain DOI-per-line list — e.g. an SR include set), enter
Phase 2 directly from it: resolve any PMID-only rows to DOIs (esummary above), then run the
search-first dedupe + add loop. The same worklist file feeds Phase 2.7 Route A
(fetch_oa.py reads .tsv/.csv/.md/plain natively), so no reformatting is needed.
© Aperivue, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 9 other files (scripts, references) in skills/lit-sync of Aperivue/medsci-skills.
Open the folder on GitHubat commit 3b14ae2
Lit Sync next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Lit Sync this skillAperivue/medsci-skills | 329 | — | ~4.6k | Automated safety check: Pass | MIT | |
| Zotero Taxonomy Curatorganzoth/zotero-taxonomy-curator | 159 | — | ~2.3k | Automated safety check: Pass | MIT | |
| Citation Skillswentorai/research-plugins | 298 | 1 repos | ~812 | Automated safety check: Pass | MIT | |
| Deeppapernote917Dhj/DeepPaperNote | 1.2k | 1 repos | ~5.9k | Automated safety check: Pass | MIT | |
| Zoterocongcongwang0122/zotero-skill | 200 | — | ~1.6k | Automated safety check: Pass | None | |
| Bib Search Citationbahayonghang/academic-writing-skills | 497 | — | ~2.3k | Automated safety check: Pass | None |
ganzoth/zotero-taxonomy-curator
Domain-configurable Zotero-to-Obsidian literature curation and paper close-reading skill.
wentorai/research-plugins
22 citation management skills. An agent skill from wentorai/research-plugins.
917Dhj/DeepPaperNote
Generate a high-quality deep-reading note for a single paper and write it into an Obsidian-style vault.
congcongwang0122/zotero-skill
Use Zotero Desktop to enable/probe the local API, search a local Zotero library, list items/collections/tags, export BibTeX, insert citation keys into LaTeX or Markdown drafts, read indexed full…
bahayonghang/academic-writing-skills
Search and cite from local BibTeX/BibLaTeX .bib libraries, including Zotero exports.
PiaoyangGuohai1/cli-anything-zotero
Full-featured CLI for Zotero reference management. An agent skill from PiaoyangGuohai1/cli-anything-zotero.
Aperivue/medsci-skills
A skill your agent uses when validating or evaluating a trained medical-imaging model.
Aperivue/medsci-skills
A skill your agent uses when turning a folder of research PDFs into Obsidian notes, even if Obsidian is not named.
Aperivue/medsci-skills
A skill your agent uses when building or auditing a radiomics or tabular clinical-ML prediction model with a classical learner (LASSO, SVM, random forest, XGBoost and similar).
Aperivue/medsci-skills
A skill your agent uses when checking whether a manuscript's references are real.
Aperivue/medsci-skills
A skill your agent uses when a clinical CSV/Excel dataset needs profiling and cleaning before analysis (missing values, outliers, duplicates, type mismatches).
Aperivue/medsci-skills
A skill your agent uses when checking a radiology or medical AI study design before drafting or submission.
Categories
A skill your agent uses when references in a .bib file (often from /search-lit) should land in Zotero and Obsidian. Lit Sync is an agent skill from Aperivue/medsci-skills.bib file (often from /search-lit) should land in Zotero and Obsidian.
Lit Sync fits situations like: references in a .bib file (often from /search-lit) should land in Zotero and Obsidian; tasks that involve Citation management.
Run `npx skills add Aperivue/medsci-skills --skill lit-sync -a claude-code`. Or copy the skill folder (skills/lit-sync in Aperivue/medsci-skills) into .claude/skills/lit-sync in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Aperivue/medsci-skills --skill lit-sync -a codex`. Or copy the skill folder (skills/lit-sync in Aperivue/medsci-skills) into .agents/skills/lit-sync in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Aperivue/medsci-skills --skill lit-sync -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/lit-sync, .gemini/skills/lit-sync, .github/skills/lit-sync and .opencode/skills/lit-sync in your project.
Going by SKILL.md and its folder, Lit Sync needs a shell and Python for the scripts in its folder and the command-line tools its instructions call (curl, python3 and jq). Our summary lists: Python 3; A Bash shell.
SKILL.md names 2 domains. In commands or code: doi.org and eutils.ncbi.nlm.nih.gov; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Lit Sync is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.6k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.9k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Lit Sync: Zotero Taxonomy Curator (ganzoth/zotero-taxonomy-curator, 159 stars), Citation Skills (wentorai/research-plugins, 298 stars), Deeppapernote (917Dhj/DeepPaperNote, 1.2k stars) and Zotero (congcongwang0122/zotero-skill, 200 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Aperivue (a GitHub organization) maintains it in Aperivue/medsci-skills, which has 329 GitHub stars. The repository holds 54 skills in this directory. The repository was last updated on October 5, 2026.
Source: Aperivue/medsci-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.