{"id":"332de6c7-0ec0-4c3f-9902-64cd18a0d561","shortId":"jvsFnw","kind":"skill","title":"lit-sync","tagline":"Sync research references from .bib files to Zotero library + Obsidian literature notes. Extract cross-cutting concept notes when enough literature accumulates. Works after /search-lit or standalone.","description":"# Literature Sync: Zotero + Obsidian Pipeline\n\nTakes the `.bib` output of `/search-lit` (or any user-specified .bib file) and\nsynchronizes the references into the Zotero library and Obsidian literature notes.\nWhen enough literature notes accumulate, extracts cross-cutting concept notes.\n\n## Communication Rules\n\n- Communicate with the user in their preferred language (typically Korean).\n- Note template headings (`서지 정보`, `핵심 내용`, `내 생각`, `관련 노트`), vault\n  folder paths (`02 연구/문헌/`, `02 연구/개념노트/`), and Obsidian-side conventions\n  are preserved as literal template content because they match the user's existing vault.\n\n## When to Use\n\n- After `/search-lit` completes — sync the produced .bib into Zotero + Obsidian.\n- Bulk-register references from an existing .bib into Zotero + Obsidian.\n- Tidy the `references/` folder inside a project workspace.\n- On explicit concept-extraction request → extract cross-cutting concepts from existing literature notes.\n\n## Prerequisites\n\n- **Project owner only** — `/lit-sync` is an owner-scoped operation per `docs/zotero_policy.md`. Collaborators consume the committed `manuscript/_src/refs.bib` snapshot read-only.\n- Zotero desktop 7.x + Better BibTeX plugin installed.\n- Better BibTeX \"Keep updated\" auto-export configured to `<project>/manuscript/_src/refs.bib` (owner setup checklist in `docs/zotero_policy.md` §Setup).\n- Zotero MCP server available (skip the Zotero phase if not connected; auto-export refresh still fires once Zotero is reopened).\n- Obsidian CLI or direct file writing to the Obsidian vault.\n- Obsidian vault path: configured in user's environment (e.g., `$OBSIDIAN_VAULT`).\n\n## Artifact Contract\n\nPer `docs/artifact_contract.md`, `/lit-sync` is the **sole writer** of:\n\n| Artifact | Writer | Readers |\n|---|---|---|\n| `manuscript/_src/refs.bib` | `/lit-sync` (via Better BibTeX auto-export trigger) | `/write-paper`, `/verify-refs`, `/render` |\n| `references/zotero_collection.json` | `/lit-sync` | `/verify-refs`, `/sync-submission` |\n\nDirect hand edits to `refs.bib` are drift — revert on sight.\n\n## Pipeline Overview\n\n```\n.bib file (or /search-lit output)\n    │\n    ▼ Phase 1: Parse\n    Extract DOI, PMID, title, authors, journal, year\n    │\n    ▼ Phase 2: Zotero Sync (owner)\n    Dedupe → zotero_add_by_doi → place in collection → pin citekey\n    │\n    ▼ Phase 2.5: refs.bib snapshot refresh\n    Trigger Better BibTeX auto-export → verify manuscript/_src/refs.bib mtime updated\n    │\n    ▼ Phase 3: Obsidian Literature Notes\n    Create 02 연구/문헌/{citekey}.md (empty note OK — fill later with highlights)\n    │\n    ▼ Phase 4: Concept Extraction (conditional)\n    ≥10 literature notes → scan for cross-cutting concepts → propose concept notes\n```\n\n---\n\n## Phase 1: Parse BibTeX\n\n### Input\n\nThe user-specified .bib file path, or the .bib just produced by `/search-lit`.\n\n### Process\n\n```python\n# Parse .bib entries with regex.\n# Extract per entry:\n#   - citekey (e.g., Kim_2024_Validation)\n#   - doi\n#   - pmid\n#   - title\n#   - authors (first + last minimum)\n#   - journal\n#   - year\n#   - volume, number, pages (if present)\n```\n\nLog any parse failures and skip those entries.\n\n---\n\n## Phase 2: Zotero Sync\n\n### Step 2.1: Determine project collection\n\nIdentify the project from the current working directory or from an explicit user\noverride. Reuse an existing collection key if one is recorded; otherwise create a\nnew collection.\n\n**Collection mapping**: Check existing Zotero collections for the current project.\nIf no collection exists, create one with `zotero_create_collection`. Record the\ncollection key for future use.\n\n### Step 2.2: Dedupe + add\n\nFor each entry:\n\n1. Use `zotero_search_items` to search by DOI or title — if already present, skip.\n2. Otherwise call `zotero_add_by_doi` (when a DOI is available) or\n   `zotero_add_by_url` (falling back to the PubMed URL when no DOI is available).\n3. Use `zotero_manage_collections` to place the item in the project collection.\n\n### Step 2.3: Result report\n\n```\nZotero Sync:\n  Added:     8 papers (new)\n  Skipped:   3 papers (already in library)\n  Failed:    1 paper (no DOI/PMID)\n  Collection: RFA-Meta (TZQEP4NH)\n```\n\nIf the Zotero MCP is not connected, skip this entire phase and proceed to Phase 3.\n\nAlways write `references/zotero_collection.json` in the project workspace:\n\n```json\n{\n  \"schema_version\": 1,\n  \"status\": \"synced\",\n  \"collection\": \"RFA-Meta\",\n  \"collection_key\": \"TZQEP4NH\",\n  \"added\": 8,\n  \"skipped\": 3,\n  \"failed\": 1\n}\n```\n\nIf Zotero is unavailable, write the same file with `status: \"skipped\"` and a\nhuman-readable `reason`.\n\n---\n\n## Phase 2.5: refs.bib snapshot refresh\n\nBetter 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.\n\n### Step 2.5.1: Resolve path\n\nRead `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.\n\n### Step 2.5.1b: Precondition assertion (early-exit, do NOT poll)\n\nBefore 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.\n\n1. **BBT auto-export registered.** `~/Zotero/better-bibtex/read-only.json` must be a non-empty JSON list. Check with:\n\n   ```bash\n   python3 -c 'import json,sys,pathlib; p=pathlib.Path.home()/\".zotero\"/\"zotero\"/\"Profiles\"; \\\n     f=pathlib.Path.home()/\"Zotero\"/\"better-bibtex\"/\"read-only.json\"; \\\n     sys.exit(0 if f.exists() and json.loads(f.read_text() or \"[]\") else 1)'\n   ```\n\n   Or equivalent shell: `[ -s ~/Zotero/better-bibtex/read-only.json ] && [ \"$(jq 'length' ~/Zotero/better-bibtex/read-only.json)\" -gt 0 ]`.\n\n   On failure print:\n\n   > Phase 2.5 skipped: BBT auto-export not configured (`~/Zotero/better-bibtex/read-only.json` is empty or missing). Set up \"Keep updated\" auto-export per `docs/zotero_policy.md` §Setup, then re-run `/lit-sync`.\n\n2. **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:\n\n   > Phase 2.5 skipped: target snapshot `<path>` not found. Configure BBT auto-export with \"On Change\" to the SSOT path, then re-run.\n\nIn either early-exit, set `refs_bib_refreshed: false` + `reason: \"precondition:<which>\"` in the Step 2.5.3 JSON and return control to the caller. `/verify-refs` treats `refs_bib_refreshed: false` as an unverified snapshot — downstream skills (`/write-paper`, `/render`) block until the precondition is resolved.\n\nRationale (2026-04-24 Phase 1B-b dry-run): on a machine with BBT installed but no auto-export registered, the original Step 2.5.2 polled for 10s then emitted a generic \"mtime unchanged\" WARN that did not point at the actual cause. Findings: `~/.local/cache/phase1b_b_dryrun/findings.md`.\n\n### Step 2.5.2: Verify refresh\n\nAfter Phase 2 adds items:\n\n1. Capture `stat -f \"%m\" manuscript/_src/refs.bib` before Zotero writes.\n2. Wait up to 10s (Better BibTeX debounce). Poll mtime.\n3. If mtime unchanged after 10s:\n   - Prompt user to check Zotero is running and BBT export is \"Keep updated\".\n   - If BBT auto-export path is wrong, print the expected path (`<project>/manuscript/_src/refs.bib`) and refer to `docs/zotero_policy.md` §Setup.\n   - As last resort, offer manual export: `File → Export Library → Better BibTeX → target path`.\n4. Once mtime advances, grep for the newly added citekeys. All must be present; if any is missing, report as failure (do NOT fabricate entries).\n\n### Step 2.5.3: Record in zotero_collection.json\n\nAppend to the JSON written in Step 2.3:\n\n```json\n{\n  \"refs_bib_path\": \"manuscript/_src/refs.bib\",\n  \"refs_bib_mtime\": \"2026-04-24T14:32:11Z\",\n  \"refs_bib_refreshed\": true,\n  \"citekeys_verified\": [\"Kim_2024_Validation\", \"...\"]\n}\n```\n\nIf refresh failed, set `refs_bib_refreshed: false` and include `reason`. `/verify-refs` uses this flag to decide whether the snapshot is trustworthy.\n\n---\n\n## Phase 3: Obsidian Literature Notes\n\n### Step 3.1: Check existing literature notes\n\n```bash\nls \"$VAULT/02 연구/문헌/\" | grep -v \"📊\" | wc -l\n```\n\n### Step 3.2: Create literature notes\n\nFor each .bib entry, create `02 연구/문헌/{citekey}.md`.\n**Skip if the file already exists** (never overwrite).\n\n#### Template\n\n```markdown\n---\nnotetype: literature\ncitekey: \"{citekey}\"\ntitle: \"{title}\"\nauthors: \"{authors}\"\njournal: \"{journal}\"\nyear: {year}\ndoi: \"{doi}\"\npmid: \"{pmid}\"\ncreated: \"{today}\"\ntags:\n  - type/literature\n  - _unread\n---\n\n# {title}\n\n## 서지 정보\n- **저자**: {authors}\n- **저널**: {journal}{volume_issue_pages}\n- **연도**: {year}\n- **DOI**: [{doi}](https://doi.org/{doi})\n{pmid_line}\n\n## 핵심 내용 (내 언어로)\n\n\n\n## 내 생각\n\n\n\n## 관련 노트\n- [[🗺️ 연구 종합]]\n- [[🗺️ 논문과 리뷰]]\n-\n-\n```\n\n**Rules:**\n- `notetype: literature` — compatible with the Zotero Integration template.\n- `_unread` tag — change to `_read` later after the user reads the PDF in Zotero and adds highlights.\n- Leave `## 핵심 내용` and `## 내 생각` blank — the user fills these in personally.\n- `## 관련 노트` contains 2 hub links + 2 empty slots (reserved for later concept-note linking).\n- If a PMID is available, add a PubMed link.\n\n### Step 3.3: Result report\n\n```\nObsidian Literature Notes:\n  Created:   8 notes (new)\n  Skipped:   3 notes (already exist)\n  Location:  02 연구/문헌/\n  Total in vault: 12 literature notes\n```\n\n---\n\n## Phase 4: Concept Extraction (conditional)\n\n### Trigger condition\n\nRun this phase only when there are **≥10** literature notes in the vault.\nIf fewer exist, print a status message like \"N literature notes — concept extraction\nunlocks at ≥10\" and stop.\n\n### Step 4.1: Cross-cutting concept scan\n\nRead all files under `02 연구/문헌/*.md`:\n1. Extract keywords from each paper's title, journal, and tags.\n2. Extract major concepts from the .bib entry titles.\n3. Identify **concepts that co-occur across ≥3 literature notes**.\n\n### Step 4.2: Filtering (5 exclusion rules)\n\nExclude from concept candidates:\n- Model names (GPT-4, Claude, etc.).\n- Dataset names (MedQA, ImageNet, etc.).\n- Journal names.\n- Institution names.\n- Generic technique names (too unspecific).\n\nWhatever remains becomes a concept-note candidate.\n\n### Step 4.3: Draft concept note\n\nCreate `02 연구/개념노트/{concept name}.md`:\n\n```markdown\n---\ntitle: \"{concept name}\"\ntype: concept\ntags:\n  - 🧠개념\n  - {domain tag}\naliases:\n  - {English/Korean alternative name}\nrelated_papers:\n  - \"[[{lit-note-1}]]\"\n  - \"[[{lit-note-2}]]\"\n  - \"[[{lit-note-3}]]\"\nstatus: 🌱Seedling\n---\n\n# {concept name}\n\n## 정의 (My Understanding)\n> TODO: write in your own words\n\n## 왜 중요한가\n{why the concept matters in this domain — AI supplies a draft}\n\n## 논문별 관점\n- **[[{lit-note-1}]]**: {this paper's angle}\n- **[[{lit-note-2}]]**: {a different angle}\n- **[[{lit-note-3}]]**: {comparison / complement}\n\n## 관련 개념\n- [[{another concept}]]\n\n## 열린 질문\n- {open question 1}\n- {open question 2}\n\n## 관련 노트\n- [[🗺️ 연구 종합]]\n- [[{related project hub}]]\n- [[{lit-note-1}]]\n- [[{lit-note-2}]]\n```\n\n**Key rules:**\n- Keep the `## 정의` section as a `> TODO` marker — the 2nd-layer note only becomes\n  meaningful once the user writes the definition in their own words.\n- `status` always starts at `🌱Seedling`.\n- At least 4 wikilinks under `## 관련 노트` (vault convention).\n\n### Step 4.4: Propose to the user\n\n```\nConcept-note candidates (≥3 papers cross-referenced):\n  1. {Concept A} (4 papers)\n  2. {Concept B} (3 papers)\n  3. {Concept C} (5 papers)\n\nCreate? (all / selected / skip)\n```\n\nCreate only after user confirmation. **Auto-draft but always confirm.**\n\n---\n\n## Standalone Modes\n\nThis skill can run without a fresh .bib file.\n\n### Concept extraction only\nOn an explicit concept-extraction request, scan existing\n`02 연구/문헌/*.md` and run only Phase 4.\n\n### References tidy\nOn a \"tidy this project's references\" request, locate `.bib` files inside the\nworkspace and run Phase 1–3.\n\n### Zotero sync only\nOn a \"sync Zotero\" request, diff the Zotero collection against the `.bib` file\nand add whatever is missing.\n\n### PMID-list ingestion (no .bib)\nWhen the user supplies a list of PMIDs (e.g., from a HANDOFF or a colleague), resolve\nPMIDs to DOIs via PubMed esummary first, then enter Phase 2 with the DOIs:\n\n```bash\nPMIDS=\"12345,67890,...\"\ncurl -s \"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=${PMIDS}&retmode=json\" \\\n  | jq -r '.result | to_entries[] | select(.key != \"uids\") | \"\\(.value.uid)\\t\\(.value.elocationid)\\t\\(.value.title)\"'\n```\n\nFor each resolved DOI call `zotero_add_by_doi` (auto-dedup by DOI). For items\nalready in the library (returned as \"skipped\" or detected via `zotero_search_items`\nby DOI), use `zotero_manage_collections` to attach them to the project collection\n**without re-adding** — re-adding by URL/PubMed-URL would bypass DOI dedup and\ncreate duplicates. Record both `added` and `existing` items in\n`references/zotero_collection.json`.\n\nIf a PMID has no DOI in PubMed (rare; older papers, non-indexed), fall back to\n`zotero_add_by_url` with the PubMed URL and mark the entry as `no_doi: true`.\n\n---\n\n## Safety Rules\n\n1. **Never overwrite literature notes** — the user may have added highlights or\n   personal notes.\n2. **Never auto-fill `## 정의` of a concept note** — keep the TODO marker; the\n   essence of the 2nd-layer note is the user's own wording.\n3. **Skip Zotero for entries without a DOI** — ask the user to add those manually.\n4. **Gracefully skip Zotero when the MCP is not connected** — Obsidian notes are\n   created independently; but do NOT hand-edit `refs.bib` to compensate (violates artifact contract).\n5. **Always record the collection key** — report the key to the user when a new\n   collection is created.\n6. **Never write `refs.bib` directly.** Only Better BibTeX auto-export may write that file. If auto-export is broken, fix the Zotero setup rather than writing the file from this skill.\n7. **Owner-only execution.** 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.\n\n## Anti-Hallucination\n\n- **Never fabricate DOIs, PMIDs, or citation metadata.** All bibliographic data must come from the .bib file or API responses.\n- **Never auto-fill the \"정의 (My Understanding)\" section** of concept notes. This must be written by the user.\n- **Never overwrite existing literature notes.** User highlights and annotations may be present.\n- If a DOI lookup fails, report the failure rather than guessing the metadata.","tags":["lit","sync","medsci","skills","aperivue","agent-skills","biostatistics","claude-code","claude-skills","clinical-research","diagnostic-accuracy","irb-protocol"],"capabilities":["skill","source-aperivue","skill-lit-sync","topic-agent-skills","topic-biostatistics","topic-claude-code","topic-claude-skills","topic-clinical-research","topic-diagnostic-accuracy","topic-irb-protocol","topic-literature-review","topic-manuscript","topic-medical-ai","topic-medical-research","topic-meta-analysis"],"categories":["medsci-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Aperivue/medsci-skills/lit-sync","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Aperivue/medsci-skills","source_repo":"https://github.com/Aperivue/medsci-skills","install_from":"skills.sh"}},"qualityScore":"0.499","qualityRationale":"deterministic score 0.50 from registry signals: · indexed on github topic:agent-skills · 98 github stars · SKILL.md body (14,608 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:56:30.235Z","embedding":null,"createdAt":"2026-05-13T12:57:45.299Z","updatedAt":"2026-05-18T18:56:30.235Z","lastSeenAt":"2026-05-18T18:56:30.235Z","tsv":"'-04':930,1100 '-24':931,1101 '-4':1419 '/.local/cache/phase1b_b_dryrun/findings.md':974 '/entrez/eutils/esummary.fcgi?db=pubmed&id=$':1765 '/lit-sync':174,262,272,284,835 '/manuscript/_src/refs.bib':209,1034 '/render':282,921 '/search-lit':28,41,127,302,397 '/sync-submission':286 '/verify-refs':281,285,908,1125 '/write-paper':280,920 '/zotero/better-bibtex/read-only.json':753,798,801,816 '0':784,803 '02':98,101,350,1166,1313,1371,1450,1670 '1':305,380,506,579,614,629,747,793,984,1375,1475,1515,1541,1555,1617,1698,1883 '10':367,1336,1357 '10s':719,957,997,1008 '11z':1104 '12':1319 '12345':1759 '1b':934 '1b-b':933 '2':315,436,521,836,981,993,1274,1277,1386,1479,1523,1544,1559,1622,1753,1897 '2.1':440 '2.2':500 '2.3':563,1090 '2.5':330,648,733,808,863 '2.5.1':681,706,847 '2.5.2':724,954,976 '2.5.3':900,1079 '2024':411,1112 '2026':929,1099 '2nd':1572,1916 '2nd-layer':1571,1915 '3':345,549,573,603,627,1003,1137,1308,1395,1403,1483,1530,1612,1625,1627,1699,1925 '3.1':1142 '3.2':1157 '3.3':1297 '32':1103 '4':363,1053,1323,1595,1620,1678,1940 '4.1':1361 '4.2':1407 '4.3':1445 '4.4':1603 '5':1409,1630,1967 '6':1985 '67890':1760 '7':194,2018 '8':569,625,1304 'abort':731,2037 'absent':691 'access':2032 'accumul':25,65 'across':1402 'actual':673,971 'ad':568,624,1061,1827,1830,1842,1892 'add':321,502,525,535,982,1256,1292,1717,1788,1866,1937 'advanc':1056 'ai':1506 'alias':1466 'alreadi':518,575,1175,1310,1798 'altern':1468 'alway':604,1589,1645,1968 'angl':1519,1526 'annot':2101 'anoth':1535 'anti':2053 'anti-hallucin':2052 'api':2072 'append':1083 'artifact':258,268,1965 'ask':1933 'assert':709 'attach':1818 'author':311,416,1187,1188,1206 'auto':205,228,277,338,657,750,812,826,872,948,1025,1642,1792,1900,1994,2002,2076 'auto-dedup':1791 'auto-draft':1641 'auto-export':204,227,276,337,656,749,811,825,871,947,1024,1993,2001 'auto-fil':1899,2075 'avail':219,532,548,1291 'b':707,935,1624 'back':539,695,1863 'bash':764,1147,1757 'bbt':748,810,856,870,943,1017,1023 'becom':1438,1576 'better':196,200,274,335,652,780,998,1049,1991 'better-bibtex':779 'bib':8,38,47,132,143,299,388,393,401,687,843,892,911,1093,1097,1106,1119,1163,1392,1656,1690,1714,1726,2069 'bibliograph':2063 'bibtex':197,201,275,336,382,653,781,999,1050,1992 'blank':1264 'block':922 'broken':2005 'bulk':137 'bulk-regist':136 'bypass':1834 'c':766,1629 'call':523,1786 'caller':907 'candid':1415,1443,1611 'captur':985 'caus':972 'chang':667,876,1243 'check':474,762,1012,1143 'checklist':212 'citat':2060 'citekey':328,353,408,1062,1109,1169,1183,1184 'claud':1420 'cli':238 'co':1400 'co-occur':1399 'collabor':183,2029 'colleagu':1741 'collect':326,443,461,471,472,477,484,491,494,553,561,583,617,621,1711,1816,1823,1971,1982 'come':2066 'commit':186 'communic':72,74 'comparison':1531 'compat':1235 'compens':1963 'complement':1532 'complet':128 'concept':20,70,158,165,364,375,377,1284,1324,1353,1365,1389,1397,1414,1441,1447,1453,1458,1461,1486,1501,1536,1609,1618,1623,1628,1658,1665,1905,2084 'concept-extract':157,1664 'concept-not':1283,1440,1608 'condit':366,1326,1328 'configur':207,250,815,869 'confirm':1640,1646 'connect':226,594,1949 'consum':184,678 'contain':1273 'content':114 'contract':259,1966 'control':904 'convent':108,1601 'creat':349,468,486,490,1158,1165,1197,1303,1449,1632,1636,1838,1953,1984 'cross':18,68,163,373,1363,1615 'cross-cut':17,67,162,372,1362 'cross-referenc':1614 'curl':1761 'current':449,480,2025 'cut':19,69,164,374,1364 'data':2064 'dataset':1422 'debounc':1000 'decid':1130 'dedup':319,501,1793,1836 'default':688 'definit':1583 'desktop':193 'detect':1806 'determin':441 'diff':1708 'differ':1525 'direct':240,287,1989 'directori':451 'disk':851 'docs/artifact_contract.md':261 'docs/zotero_policy.md':182,214,829,1038 'doi':308,323,413,514,527,530,546,1193,1194,1214,1215,1217,1745,1756,1785,1790,1795,1812,1835,1853,1879,1932,2057,2107 'doi.org':1216 'doi/pmid':582 'domain':1464,1505 'downstream':676,918 'draft':1446,1509,1643 'dri':937 'drift':293 'dry-run':936 'duplic':1839 'e.g':255,409,1735 'earli':711,888 'early-exit':710,887 'edit':289,1960 'either':729,886 'els':792 'emit':699,959 'empti':355,759,818,853,1278 'english/korean':1467 'enough':23,62 'enter':717,1751 'entir':597 'entri':402,407,434,505,1077,1164,1393,1773,1876,1929 'environ':254 'equival':795 'essenc':1912 'esummari':1748 'etc':1421,1426 'eutils.ncbi.nlm.nih.gov':1764 'eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=$':1763 'even':852 'exclud':1412 'exclus':1410 'execut':2022 'exist':121,142,167,460,475,485,839,849,1144,1176,1311,1344,1669,1844,2095 'exit':712,889 'expect':1032 'explicit':156,455,1663 'export':206,229,278,339,658,751,813,827,873,949,1018,1026,1045,1047,1995,2003 'extract':16,66,159,161,307,365,405,1325,1354,1376,1387,1659,1666 'f':776,987 'f.exists':786 'f.read':789 'fabric':1076,2056 'fail':578,628,730,1116,2109 'failur':430,805,860,1073,2112 'fall':538,694,1862 'fals':894,913,1121 'fewer':1343 'file':9,48,241,300,389,637,1046,1174,1369,1657,1691,1715,1999,2014,2070 'fill':358,1267,1901,2077 'filter':1408 'find':973 'fire':232 'first':417,1749 'fix':2006 'flag':1128,2041 'folder':96,150 'found':868 'fresh':1655 'futur':497 'generic':961,1431 'gpt':1418 'grace':1941 'grep':1057,1152 'gt':802 'guess':2115 'hallucin':2054 'hand':288,1959 'hand-edit':1958 'handoff':1738 'head':86 'highlight':361,1257,1893,2099 'hub':1275,1551 'human':644 'human-read':643 'identifi':444,1396 'imagenet':1425 'import':767 'includ':1123 'independ':1954 'index':1861 'ingest':1724 'input':383 'insid':151,1692 'instal':199,944 'instead':737 'institut':1429 'instruct':736,2039 'integr':1239 'issu':1210 'item':510,557,983,1797,1810,1845 'journal':312,420,1189,1190,1208,1383,1427 'jq':799,1769 'json':611,760,768,901,1086,1091,1768 'json.loads':788 'keep':202,654,823,1020,1562,1907 'key':462,495,622,1560,1775,1972,1975 'keyword':1377 'kim':410,1111 'korean':83 'l':1155 'languag':81 'last':418,1041 'later':359,1246,1282 'layer':1573,1917 'least':1594 'leav':1258 'legaci':692 'length':800 'librari':12,56,577,1048,1801 'like':1349 'line':1219 'link':1276,1286,1295 'list':761,1723,1732 'lit':2,1473,1477,1481,1513,1521,1528,1553,1557 'lit-not':1472,1476,1480,1512,1520,1527,1552,1556 'lit-sync':1 'liter':112 'literatur':14,24,31,59,63,168,347,368,1139,1145,1159,1182,1234,1301,1320,1337,1351,1404,1886,2096 'locat':1312,1689 'log':427 'lookup':2108 'loop':721 'ls':1148 'm':988 'machin':941 'major':1388 'manag':552,1815 'manual':1044,1939 'manuscript':2047 'manuscript/_src/refs.bib':187,271,341,661,689,697,989,1095 'map':473 'mark':1874 'markdown':1180,1456 'marker':1569,1910 'match':117 'matter':1502 'may':1890,1996,2102 'mcp':217,591,1946 'md':354,1170,1374,1455,1673 'meaning':1577 'medqa':1424 'messag':1348 'meta':586,620 'metadata':2061,2117 'migrat':704 'minimum':419 'miss':820,1070,1720 'mode':1648 'model':1416 'mtime':342,962,1002,1005,1055,1098 'must':754,848,1064,2065,2087 'n':1350 'name':1417,1423,1428,1430,1433,1454,1459,1469,1487 'never':745,1177,1884,1898,1986,2055,2074,2093 'new':470,571,1306,1981,2042 'newli':1060 'non':758,1860 'non-empti':757 'non-index':1859 'normal':659 'note':15,21,60,64,71,84,169,348,356,369,378,1140,1146,1160,1285,1302,1305,1309,1321,1338,1352,1405,1442,1448,1474,1478,1482,1514,1522,1529,1554,1558,1574,1610,1887,1896,1906,1918,1951,2085,2097 'notetyp':1181,1233 'notifi':2049 'number':423 'obsidian':13,34,58,106,135,146,237,245,247,256,346,1138,1300,1950 'obsidian-sid':105 'occur':1401 'offer':1043 'ok':357,855 'older':1857 'one':464,487 'open':1539,1542 'oper':180 'origin':952 'otherwis':467,522 'output':39,303 'overrid':457 'overview':298 'overwrit':858,1178,1885,2094 'owner':172,178,210,318,2020,2051 'owner-on':2019 'owner-scop':177 'p':771 'page':424,1211 'paper':570,574,580,1380,1471,1517,1613,1621,1626,1631,1858 'pars':306,381,400,429 'path':97,249,390,683,844,880,1027,1033,1052,1094 'pathlib':770 'pathlib.path.home':772,777 'pdf':1252 'per':181,260,406,828,2033 'person':1270,1895 'phase':223,304,314,329,344,362,379,435,598,602,647,669,732,807,862,932,980,1136,1322,1331,1677,1697,1752 'pin':327 'pipelin':35,297 'place':324,555 'placehold':2044 'plugin':198 'pmid':309,414,1195,1196,1218,1289,1722,1734,1743,1758,1766,1850,2058 'pmid-list':1721 'point':968 'poll':715,720,955,1001 'precondit':708,727,896,925 'prefer':80 'prerequisit':170 'present':426,519,1066,2104 'preserv':110 'print':806,861,1030,1345 'proceed':600 'process':398 'produc':131,395 'profil':775 'project':153,171,442,446,481,560,609,693,1550,1685,1822 'prompt':1009 'propos':376,1604 'pubm':542,1294,1747,1855,1871 'python':399 'python3':765 'question':1540,1543 'r':1770 'rare':1856 'rather':2010,2113 'rational':928 're':833,883,1826,1829 're-ad':1825,1828 're-run':832,882 'read':190,684,1245,1250,1367 'read-on':189 'read-only.json':782 'readabl':645 'reader':270 'reason':646,895,1124 'recommend':702 'record':466,492,1080,1840,1969 'ref':891,910,1092,1096,1105,1118 'refer':6,52,139,149,1036,1679,1687 'referenc':1616 'reference_manager.required':2035 'references/zotero_collection.json':283,606,1847 'refresh':230,333,651,660,893,912,978,1107,1115,1120 'refs.bib':291,331,649,838,1961,1988 'regex':404 'regist':138,752,950 'relat':1470,1549 'remain':1437 'reopen':236 'report':565,1071,1299,1973,2110 'request':160,1667,1688,1707 'research':5 'reserv':1280 'resolv':682,746,841,927,1742,1784 'resort':1042 'respons':2073 'result':564,1298,1771 'retmod':1767 'return':903,1802 'reus':458 'revert':294 'rfa':585,619 'rfa-meta':584,618 'rule':73,1232,1411,1561,1882 'run':834,884,938,1015,1329,1652,1675,1696 'safeti':1881 'scan':370,1366,1668 'schema':612 'scope':179 'search':509,512,1809 'second':663 'section':1565,2082 'seedl':1485,1592 'select':1634,1774 'server':218 'set':821,890,1117 'setup':211,215,735,830,1039,2009 'shell':796 'side':107 'sight':296 'skill':677,919,1650,2017 'skill-lit-sync' 'skip':220,432,520,572,595,626,640,809,864,1171,1307,1635,1804,1926,1942 'slot':1279 'snapshot':188,332,650,672,866,917,1133 'sole':265 'source-aperivue' 'specifi':46,387 'ssot':703,879 'ssot.yaml':685,2034 'standalon':30,1647 'start':1590 'stat':986 'status':615,639,1347,1484,1588 'step':439,499,562,680,705,723,846,899,953,975,1078,1089,1141,1156,1296,1360,1406,1444,1602 'still':231 'stop':1359 'suppli':1507,1730 'sync':3,4,32,129,317,438,567,616,1701,1705 'synchron':50 'sys':769 'sys.exit':783 't14':1102 'tag':1199,1242,1385,1462,1465 'take':36 'target':837,865,1051 'techniqu':1432 'templat':85,113,1179,1240 'text':790 'tidi':147,1680,1683 'timeout':742 'titl':310,415,516,1185,1186,1202,1382,1394,1457 'today':1198 'todo':1491,1568,1909 'topic':2043 'topic-agent-skills' 'topic-biostatistics' 'topic-claude-code' 'topic-claude-skills' 'topic-clinical-research' 'topic-diagnostic-accuracy' 'topic-irb-protocol' 'topic-literature-review' 'topic-manuscript' 'topic-medical-ai' 'topic-medical-research' 'topic-meta-analysis' 'total':1316 'treat':909 'trigger':279,334,1327 'true':1108,1880 'trustworthi':1135 'truth.refs':686,842 'type':1460 'type/literature':1200 'typic':82 'tzqep4nh':587,623 'uid':1776 'unavail':633 'unchang':963,1006 'understand':1490,2081 'unlock':1355 'unread':1201,1241 'unspecif':1435 'unverifi':916 'updat':203,343,655,674,824,1021 'url':537,543,1868,1872 'url/pubmed-url':1832 'use':125,498,507,550,1126,1813 'user':45,77,119,252,386,456,1010,1249,1266,1580,1607,1639,1729,1889,1921,1935,1978,2026,2092,2098 'user-specifi':44,385 'v':1153 'valid':412,1113 'value.elocationid':1779 'value.title':1781 'value.uid':1777 'vault':95,122,246,248,257,1318,1341,1600 'vault/02':1149 'verifi':340,670,725,977,1110 'version':613 'via':273,1746,1807 'violat':1964 'volum':422,1209 'wait':739,994 'warn':701,964 'wc':1154 'whatev':1436,1718 'whether':1131 'wikilink':1596 'within':662 'without':1653,1824,1930 'word':1496,1587,1924 'work':26,450 'workspac':154,610,1694 'would':1833 'write':242,605,634,992,1492,1581,1987,1997,2012 'writer':266,269 'written':1087,2089 'wrong':1029 'x':195 'year':313,421,1191,1192,1213 'zotero':11,33,55,134,145,192,216,222,234,316,320,437,476,489,508,524,534,551,566,590,631,666,773,774,778,991,1013,1238,1254,1700,1706,1710,1787,1808,1814,1865,1927,1943,2008,2031 'zotero_collection.json':1082 '개념':1463,1534 '개념노트':103,1452 '관련':93,1226,1271,1533,1545,1598 '관점':1511 '내':91,1222,1224,1262 '내용':90,1221,1260 '노트':94,1227,1272,1546,1599 '논문과':1230 '논문별':1510 '리뷰':1231 '문헌':100,352,1151,1168,1315,1373,1672 '생각':92,1225,1263 '서지':87,1203 '언어로':1223 '연구':99,102,351,1150,1167,1228,1314,1372,1451,1547,1671 '연도':1212 '열린':1537 '왜':1497 '저널':1207 '저자':1205 '정보':88,1204 '정의':1488,1564,1902,2079 '종합':1229,1548 '중요한가':1498 '질문':1538 '핵심':89,1220,1259","prices":[{"id":"4201c5bc-622b-4f5c-a018-d9f5aaedd0bb","listingId":"332de6c7-0ec0-4c3f-9902-64cd18a0d561","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Aperivue","category":"medsci-skills","install_from":"skills.sh"},"createdAt":"2026-05-13T12:57:45.299Z"}],"sources":[{"listingId":"332de6c7-0ec0-4c3f-9902-64cd18a0d561","source":"github","sourceId":"Aperivue/medsci-skills/lit-sync","sourceUrl":"https://github.com/Aperivue/medsci-skills/tree/main/skills/lit-sync","isPrimary":false,"firstSeenAt":"2026-05-13T12:57:45.299Z","lastSeenAt":"2026-05-18T18:56:30.235Z"}],"details":{"listingId":"332de6c7-0ec0-4c3f-9902-64cd18a0d561","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Aperivue","slug":"lit-sync","github":{"repo":"Aperivue/medsci-skills","stars":98,"topics":["agent-skills","biostatistics","claude-code","claude-skills","clinical-research","diagnostic-accuracy","irb-protocol","literature-review","manuscript","medical-ai","medical-research","meta-analysis","physician-researcher","prisma","pubmed","radiology","reporting-guidelines","strobe","systematic-review","tripod-ai"],"license":"other","html_url":"https://github.com/Aperivue/medsci-skills","pushed_at":"2026-05-17T20:50:52Z","description":"Claude Code skills for medical research — literature search, reporting guidelines, statistical analysis, publication figures. Built by a physician-researcher, tested on real publications. MIT licensed.","skill_md_sha":"235d8cc975cb4245849264fafd2e2bf76eb1b74c","skill_md_path":"skills/lit-sync/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Aperivue/medsci-skills/tree/main/skills/lit-sync"},"layout":"multi","source":"github","category":"medsci-skills","frontmatter":{"name":"lit-sync","description":"Sync research references from .bib files to Zotero library + Obsidian literature notes. Extract cross-cutting concept notes when enough literature accumulates. Works after /search-lit or standalone."},"skills_sh_url":"https://skills.sh/Aperivue/medsci-skills/lit-sync"},"updatedAt":"2026-05-18T18:56:30.235Z"}}