academic-aio
Use when a medical AI paper should be found and cited by AI search engines and RAG tools. Optimizes the title, abstract, summary…
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.
$ npx -y skills add Aperivue/medsci-skills --skill lit-sync --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/lit-syncContext preview
The summary Claude sees to decide when to auto-load this skill.
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.
name: lit-sync description: 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. metadata: triggers: "lit-sync, 문헌 동기화, 레퍼런스 정리, 개념 노트 추출, lit sync, Zotero 동기화, reference sync, 참고문헌 옵시디언"
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.
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.
configured to `<project>/manuscript/_src/refs.bib`.
reopened).
(e.g., `$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:
1. Use `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. 2. Otherwise call `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.
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. 3. Use `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.
1. **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 r
Created & maintained by Yoojin Nam, MD Department of Radiology and Research Institute of Radiology, University of Ulsan College of Medicine, Asan Medical Center, Seoul, Republic of Korea MedSci Skills is a set of Agent Skills for clinical research: literature
Use when a medical AI paper should be found and cited by AI search engines and RAG tools. Optimizes the title, abstract, summary…
Use when a target journal has no profile yet. Reads the journal's author guidelines and writes a detailed /write-paper profile…
Use when data needs statistical analysis. Runs reproducible Python/R code for Table 1, diagnostic accuracy, agreement,…
Use when analyzing a researcher's publication record from PubMed. Fetches an author's papers, classifies study types and author…
Use when one validated cohort analysis must be repeated across many exposure/outcome pairs. Generates one R/Python script per…