{"id":"485ea5b7-a6f4-4dfc-9a8c-f8b67f9424b0","shortId":"CAAYDE","kind":"skill","title":"fill-protocol","tagline":"Fill institutional Word form templates (.doc/.docx) for IRB protocols, ethics applications, grant proposals, and other structured research documents while preserving the original styles, table layouts, fonts, and page geometry. Pairs with write-protocol — write-protocol drafts th","description":"# Fill-Protocol Skill\n\nYou are helping a researcher populate an institutional Word form (IRB protocol,\nethics application, grant proposal, etc.) without breaking the original document\nformatting. This skill is the formatting counterpart to `write-protocol`: where\n`write-protocol` drafts content, `fill-protocol` lays that content into the\ninstitutional template.\n\n## Why This Skill Exists\n\nRecreating institutional forms from scratch with `python-docx` reliably destroys\ntable layouts, page breaks, and font consistency. The only safe approach is to\n**open the existing template** and replace cell/paragraph text in place. This\nskill enforces that pattern.\n\n## Core Principles (Do Not Violate)\n\n1. **Open the existing template — never create from scratch.** Use\n   `Document(template_path)`, not `Document()`.\n2. **Convert .doc → .docx via LibreOffice headless** before any editing.\n   `pandoc -f doc` is not supported; `textutil` corrupts table structure.\n3. **Match cells by left-label text**, not row/column coordinates. Templates\n   evolve and coordinate matching breaks silently.\n4. **Apply `cantSplit` to every filled row** so a row never breaks across pages.\n5. **For CJK languages, set the `eastAsia` font attribute**, not just\n   `run.font.name`. Hangul/Kanji/Hanzi will render in fallback fonts otherwise.\n6. **Validate** every fill operation: report unmatched labels, count empty cells,\n   and surface mismatches before saving.\n\n## Dependencies\n\nIf the template is already `.docx`, **LibreOffice is not required** — only the\nthree Python packages below. LibreOffice is needed only when the template is a\nlegacy `.doc` and must be converted first.\n\n```bash\n# Python libraries (always required)\npip install --user docxtpl python-docx pyyaml\n\n# LibreOffice (only for legacy .doc input; ~700 MB on macOS)\nbrew install --cask libreoffice              # macOS\nsudo apt-get install -y libreoffice           # Debian/Ubuntu\nsudo dnf install -y libreoffice               # Fedora\nsudo pacman -S --needed libreoffice-fresh     # Arch\n```\n\n### Bundled setup script\n\nThe skill ships a `setup.sh` that detects what is missing and installs only\nthose parts, with a confirmation prompt before each step:\n\n```bash\nbash setup.sh check     # report what's installed (read-only)\nbash setup.sh install   # install missing pieces (asks before each)\n```\n\n### Auto-install behavior (for Claude as the caller)\n\nWhen invoking this skill on behalf of a user:\n\n1. **Before calling `doc_to_docx.py`**, run `bash setup.sh check`. If\n   LibreOffice is missing, **ask the user** before installing — the cask is\n   ~700 MB and proceeding silently is unfriendly.\n2. **Skip LibreOffice entirely** if the template is already `.docx`. Only\n   surface the install prompt when a `.doc` is encountered.\n3. **Never** pass `--yes` to `setup.sh install` unless the user has explicitly\n   authorized unattended installation in this session.\n4. If the user declines installation, fall back to asking them to convert\n   the `.doc` manually (open in Word/LibreOffice/Pages → Save As → .docx) and\n   then re-run with the converted file.\n\n## Workflow\n\n### Step 1 — Convert legacy .doc to .docx (if needed)\n\n```bash\npython scripts/doc_to_docx.py path/to/template.doc path/to/template.docx\n```\n\n### Step 2 — Inspect the template structure\n\n```bash\npython scripts/inspect_template.py path/to/template.docx\n```\n\nThis lists every table, every cell (with row/column coordinates and content\npreview), and every top-level paragraph. Use this output to identify the labels\nyou will match against in your YAML content file.\n\n### Step 3 — Author a content YAML\n\nThe YAML supports three fill modes. All keys are optional.\n\n```yaml\nprotections:\n  korean_font: \"맑은 고딕\"   # CJK font (set to \"Noto Sans CJK KR\", \"SimSun\",\n                              # \"MS Mincho\", etc. for other locales)\n  cant_split: true            # Apply <w:cantSplit/> to every filled row\n\n  # Readability options (see \"Readability\" section below for full semantics)\n  blank_between_paragraphs: true            # default true — Enter between \\n\\n chunks\n  blank_around_section_header: true         # default true — Enter above/below filled sections\n  blank_around_all_section_headers: false   # default false — opt-in; also touches untouched sections\n\n# Mode 1 — table key/value (left-label cell → right value cell)\ntable_kv:\n  \"Study Title\": \"Multi-center prospective validation of ...\"\n  \"Principal Investigator\": \"Last, First (Department)\"\n  \"연구 목적\": \"본 연구는 ...\"\n\n# Mode 2 — section replacement (find numbered header, replace until next header)\nsection_replace:\n  \"1. Background\":\n    \"Hepatocellular carcinoma is the third leading cause of ...\"\n  \"4. 연구 배경 및 이론적 근거\":\n    \"...\"\n\n# Mode 3 — single paragraph in-place text replacement\nparagraph_replace:\n  \"Title:\":\n    \"Title: Multi-center prospective validation of ...\"\n```\n\n### Readability — three blank-line knobs\n\nAll blank paragraphs inserted by these options use a forced single-line height\n(`<w:spacing w:line=\"240\" w:before=\"0\" w:after=\"0\"/>`) so the gap is exactly\none body-text line — never inflates the document's apparent line spacing.\n\n| Option | Default | What it does | When to flip |\n|---|---|---|---|\n| `blank_between_paragraphs` | `true` | Inserts a blank line between every `\\n\\n`-split chunk inside `section_replace` | Disable only for forms where every line must be packed tight |\n| `blank_around_section_header` | `true` | Wraps each header that you `section_replace` with a blank above and a blank below | Disable when the template style already adds visual gaps via `space_before/after` |\n| `blank_around_all_section_headers` | `false` | After all fills, scans every numbered header (`\\d+\\.\\s+`) — including ones you didn't replace — and adds blank lines around them | Enable when uniform readability matters more than form fidelity. **Default off because IRB / public-document submissions favor template fidelity over visual consistency** (page count stability, boilerplate untouched, reviewer-expected layout) |\n| `normalize_page_breaks` | `true` | On save, converts dangling empty paragraphs whose sole content is `<w:br w:type=\"page\"/>` into a `<w:pageBreakBefore/>` attribute on the next content paragraph. Prevents visible blank pages when the preceding content (e.g. an abstract table) grows or shrinks and pushes the empty paragraph onto a page of its own, causing the break to land one page later. | Disable only if your template intentionally relies on the empty-paragraph-as-separator pattern for spacing |\n\nThe third option exists because `section_replace` only touches sections you\nlist in the YAML. If a template has 18 numbered sections and you only fill 12,\nthe other 6 stay tight against their content — visually inconsistent. Turn the\nopt-in on for documents where you'd rather the consistency than the fidelity.\n\n### Step 4 — Run the fill\n\n```bash\npython scripts/fill_form.py \\\n  --template path/to/template.docx \\\n  --content  content.yaml \\\n  --output   path/to/filled.docx\n```\n\nThe CLI prints `[OK]` / `[MISS]` for every fill operation and a summary at the\nend. Investigate any `[MISS]` before submitting.\n\n### Step 5 — Visual verification\n\n```bash\nsoffice --headless --convert-to pdf path/to/filled.docx\n```\n\nOpen the PDF and visually confirm: page count is sensible, no table row was\nsplit across pages, no font fell back to Times New Roman, all required fields\nare populated.\n\n## Python API\n\n```python\nfrom fill_form import FormFiller\n\nfiller = FormFiller(\"template.docx\", korean_font=\"맑은 고딕\")\n\n# Fill table cells\nfiller.fill_table_kv(\"Study Title\", \"...\")\nfiller.fill_table_kv(\"연구 목적\", \"...\")\n\n# Replace section content (header to next header)\nfiller.replace_paragraphs_after(\"4. Background\", new_content)\n\n# Replace a single paragraph\nfiller.replace_paragraph_matching(\"Title:\", \"Title: ...\")\n\n# Validate and save\nwarnings = filler.validate()\nfor w in warnings:\n    print(w)\nfiller.save(\"filled.docx\")\n```\n\n## Anti-Patterns (Do Not Do)\n\n| Anti-pattern | Consequence |\n|---|---|\n| `Document()` then rebuild table | Loss of header logo, custom margins, footer placeholders, and page numbering |\n| `pandoc -f doc -t docx` | \"Unknown input format doc\" — pandoc does not parse .doc |\n| `textutil -convert docx` | Table cell merging is dropped or corrupted |\n| `cell.text = \"value\"` (single assignment) | Run-level styles (bold, color, eastAsia font) are erased |\n| Coordinate-based matching `table.cell(2, 1)` | Silent breakage when the template adds or reorders rows |\n| `run.font.name` alone for Hangul | Hangul characters render in the default Western font |\n\n## Companion Skills\n\n- `write-protocol` — drafts the scientific content (Background, Study Design,\n  Sample Size, Statistical Plan) that `fill-protocol` then renders into the form\n- `hwp-pipeline` — converts Korean Hangul .hwp / .hwpx files; chain it before\n  `fill-protocol` when the institutional form is distributed in HWP format\n- `check-reporting` — validates that the filled protocol satisfies CONSORT /\n  STARD / TRIPOD / CLAIM checklists before submission\n- `calc-sample-size` — produces the sample size text that `fill-protocol` slots\n  into the corresponding section\n\n## Files\n\n- `scripts/doc_to_docx.py` — LibreOffice headless wrapper for .doc → .docx\n- `scripts/inspect_template.py` — reports tables, cells, and paragraphs\n- `scripts/fill_form.py` — the `FormFiller` library and CLI entry point\n- `examples/` — worked examples for IRB, ethics waiver, and grant templates\n- `references/best_practices.md` — formatting notes (cantSplit, eastAsia,\n  multi-line cell text)\n\n## Known Limitations\n\n- **HWP / HWPX input is not handled directly** — chain with `hwp-pipeline` to\n  convert HWP → HWPX → DOCX first.\n- **Merged cells**: filling a label cell that participates in a vertical merge\n  may overwrite the merged region's content. Test on a copy first.\n- **Embedded form fields** (Word's content controls): not yet supported. Plain\n  paragraph and table cell content only.\n- **Right-to-left scripts** (Arabic, Hebrew): untested.\n\n## Anti-Hallucination\n\n- **Never fabricate references.** All citations must be verified via `/search-lit` with confirmed DOI or PMID. Mark unverified references as `[UNVERIFIED - NEEDS MANUAL CHECK]`.\n- **Never invent clinical definitions, diagnostic criteria, or guideline recommendations.** If uncertain, flag with `[VERIFY]` and ask the user.\n- **Never fabricate numerical results** — compliance percentages, scores, effect sizes, or sample sizes must come from actual data or analysis output.\n- If a reporting guideline item, journal policy, or clinical standard is uncertain, state the uncertainty rather than guessing.","tags":["fill","protocol","medsci","skills","aperivue","agent-skills","biostatistics","claude-code","claude-skills","clinical-research","diagnostic-accuracy","irb-protocol"],"capabilities":["skill","source-aperivue","skill-fill-protocol","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/fill-protocol","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 (10,649 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:29.561Z","embedding":null,"createdAt":"2026-05-13T12:57:44.623Z","updatedAt":"2026-05-18T18:56:29.561Z","lastSeenAt":"2026-05-18T18:56:29.561Z","tsv":"'/search-lit':1445 '1':144,392,490,639,681,1217 '12':980 '18':973 '2':159,419,504,669,1216 '3':179,439,548,698 '4':197,457,691,1009,1122 '5':211,1043 '6':230,983 '700':298,412 'above/below':620 'abstract':913 'across':209,1069 'actual':1492 'add':816,844,1223 'alon':1228 'alreadi':251,427,815 'also':634 'alway':282 'analysi':1495 'anti':1149,1155,1434 'anti-hallucin':1433 'anti-pattern':1148,1154 'api':1085 'appar':751 'appli':198,587 'applic':14,60 'approach':121 'apt':309 'apt-get':308 'arab':1430 'arch':328 'around':613,624,791,823,847 'ask':371,404,466,1474 'assign':1200 'attribut':219,897 'author':451,549 'auto':375 'auto-instal':374 'back':464,1074 'background':682,1123,1248 'base':1213 'bash':279,354,355,365,397,498,509,1013,1046 'before/after':821 'behalf':388 'behavior':377 'blank':601,612,623,719,723,762,768,790,804,808,822,845,905 'blank-lin':718 'bodi':743 'body-text':742 'boilerpl':875 'bold':1205 'break':65,114,195,208,883,931 'breakag':1219 'brew':302 'bundl':329 'calc':1305 'calc-sample-s':1304 'call':394 'caller':382 'cant':584 'cantsplit':199,1357 'carcinoma':684 'cask':304,410 'caus':689,929 'cell':181,240,518,645,648,1101,1191,1333,1362,1385,1389,1422 'cell.text':1197 'cell/paragraph':130 'center':655,712 'chain':1273,1373 'charact':1232 'check':357,399,1289,1458 'check-report':1288 'checklist':1301 'chunk':611,775 'citat':1440 'cjk':213,569,575 'claim':1300 'claud':379 'cli':1023,1341 'clinic':1461,1505 'color':1206 'come':1490 'companion':1239 'complianc':1481 'confirm':349,1059,1447 'consequ':1157 'consist':117,871,1004 'consort':1297 'content':85,91,523,545,551,893,901,910,988,1018,1114,1125,1247,1402,1413,1423 'content.yaml':1019 'control':1414 'convert':160,277,469,486,491,887,1050,1188,1267,1379 'convert-to':1049 'coordin':189,193,521,1212 'coordinate-bas':1211 'copi':1406 'core':139 'correspond':1320 'corrupt':176,1196 'count':238,873,1061 'counterpart':75 'creat':150 'criteria':1464 'custom':1166 'd':835,1001 'dangl':888 'data':1493 'debian/ubuntu':314 'declin':461 'default':605,617,629,755,858,1236 'definit':1462 'depart':663 'depend':246 'design':1250 'destroy':110 'detect':338 'diagnost':1463 'didn':840 'direct':1372 'disabl':779,810,937 'distribut':1284 'dnf':316 'doc':161,171,273,296,436,471,493,1175,1181,1186,1328 'doc/.docx':9 'doc_to_docx.py':395 'document':21,68,154,158,749,864,998,1158 'docx':108,162,252,290,428,478,495,1177,1189,1329,1382 'docxtpl':287 'doi':1448 'draft':41,84,1244 'drop':1194 'e.g':911 'eastasia':217,1207,1358 'edit':168 'effect':1484 'embed':1408 'empti':239,889,921,947 'empty-paragraph-as-separ':946 'enabl':849 'encount':438 'end':1036 'enforc':136 'enter':607,619 'entir':422 'entri':1342 'eras':1210 'etc':63,580 'ethic':13,59,1349 'everi':201,232,515,517,526,589,771,784,832,1028 'evolv':191 'exact':740 'exampl':1344,1346 'exist':99,126,147,957 'expect':879 'explicit':450 'f':170,1174 'fabric':1437,1478 'fall':463 'fallback':227 'fals':628,630,827 'favor':866 'fedora':320 'fell':1073 'fidel':857,868,1007 'field':1081,1410 'file':487,546,1272,1322 'fill':2,4,44,87,202,233,557,590,621,830,979,1012,1029,1088,1099,1257,1277,1294,1315,1386 'fill-protocol':1,43,86,1256,1276,1314 'filled.docx':1147 'filler':1092 'filler.fill':1102,1107 'filler.replace':1119,1130 'filler.save':1146 'filler.validate':1139 'find':672 'first':278,662,1383,1407 'flag':1470 'flip':761 'font':29,116,218,228,566,570,1072,1096,1208,1238 'footer':1168 'forc':731 'form':7,56,102,782,856,1089,1263,1282,1409 'format':69,74,1180,1287,1355 'formfil':1091,1093,1338 'fresh':327 'full':599 'gap':738,818 'geometri':32 'get':310 'grant':15,61,1352 'grow':915 'guess':1514 'guidelin':1466,1500 'hallucin':1435 'handl':1371 'hangul':1230,1231,1269 'hangul/kanji/hanzi':223 'header':615,627,674,678,793,797,826,834,1115,1118,1164 'headless':165,1048,1325 'hebrew':1431 'height':735 'help':49 'hepatocellular':683 'hwp':1265,1270,1286,1366,1376,1380 'hwp-pipelin':1264,1375 'hwpx':1271,1367,1381 'identifi':535 'import':1090 'in-plac':701 'includ':837 'inconsist':990 'inflat':747 'input':297,1179,1368 'insert':725,766 'insid':776 'inspect':505 'instal':285,303,311,317,343,361,367,368,376,408,432,445,453,462 'institut':5,54,94,101,1281 'intent':942 'invent':1460 'investig':660,1037 'invok':384 'irb':11,57,861,1348 'item':1501 'journal':1502 'key':560 'key/value':641 'knob':721 'known':1364 'korean':565,1095,1268 'kr':576 'kv':650,1104,1109 'label':185,237,537,644,1388 'land':933 'languag':214 'last':661 'later':936 'lay':89 'layout':28,112,880 'lead':688 'left':184,643,1428 'left-label':183,642 'legaci':272,295,492 'level':529,1203 'librari':281,1339 'libreoffic':164,253,263,292,305,313,319,326,401,421,1324 'libreoffice-fresh':325 'limit':1365 'line':720,734,745,752,769,785,846,1361 'list':514,965 'local':583 'logo':1165 'loss':1162 'maco':301,306 'manual':472,1457 'margin':1167 'mark':1451 'match':180,194,540,1132,1214 'matter':853 'may':1396 'mb':299,413 'merg':1192,1384,1395,1399 'mincho':579 'mismatch':243 'miss':341,369,403,1026,1039 'mode':558,638,668,697 'ms':578 'multi':654,711,1360 'multi-cent':653,710 'multi-lin':1359 'must':275,786,1441,1489 'n':609,610,772,773 'need':265,324,497,1456 'never':149,207,440,746,1436,1459,1477 'new':1077,1124 'next':677,900,1117 'normal':881 'note':1356 'noto':573 'number':673,833,974,1172 'numer':1479 'ok':1025 'one':741,838,934 'onto':923 'open':124,145,473,1054 'oper':234,1030 'opt':632,994 'opt-in':631,993 'option':562,593,728,754,956 'origin':25,67 'otherwis':229 'output':533,1020,1496 'overwrit':1397 'pack':788 'packag':261 'pacman':322 'page':31,113,210,872,882,906,925,935,1060,1070,1171 'pair':33 'pandoc':169,1173,1182 'paragraph':530,603,700,706,724,764,890,902,922,948,1120,1129,1131,1335,1419 'pars':1185 'part':346 'particip':1391 'pass':441 'path':156 'path/to/filled.docx':1021,1053 'path/to/template.doc':501 'path/to/template.docx':502,512,1017 'pattern':138,951,1150,1156 'pdf':1052,1056 'percentag':1482 'piec':370 'pip':284 'pipelin':1266,1377 'place':133,703 'placehold':1169 'plain':1418 'plan':1254 'pmid':1450 'point':1343 'polici':1503 'popul':52,1083 'preced':909 'preserv':23 'prevent':903 'preview':524 'princip':659 'principl':140 'print':1024,1144 'proceed':415 'produc':1308 'prompt':350,433 'propos':16,62 'prospect':656,713 'protect':564 'protocol':3,12,37,40,45,58,79,83,88,1243,1258,1278,1295,1316 'public':863 'public-docu':862 'push':919 'python':107,260,280,289,499,510,1014,1084,1086 'python-docx':106,288 'pyyaml':291 'rather':1002,1512 're':482 're-run':481 'read':363 'read-on':362 'readabl':592,595,716,852 'rebuild':1160 'recommend':1467 'recreat':100 'refer':1438,1453 'references/best_practices.md':1354 'region':1400 'reli':943 'reliabl':109 'render':225,1233,1260 'reorder':1225 'replac':129,671,675,680,705,707,778,801,842,960,1112,1126 'report':235,358,1290,1331,1499 'requir':256,283,1080 'research':20,51 'result':1480 'review':878 'reviewer-expect':877 'right':646,1426 'right-to-left':1425 'roman':1078 'row':203,206,591,1066,1226 'row/column':188,520 'run':396,483,1010,1202 'run-level':1201 'run.font.name':222,1227 'safe':120 'sampl':1251,1306,1310,1487 'san':574 'satisfi':1296 'save':245,476,886,1137 'scan':831 'scientif':1246 'score':1483 'scratch':104,152 'script':331,1429 'scripts/doc_to_docx.py':500,1323 'scripts/fill_form.py':1015,1336 'scripts/inspect_template.py':511,1330 'section':596,614,622,626,637,670,679,777,792,800,825,959,963,975,1113,1321 'see':594 'semant':600 'sensibl':1063 'separ':950 'session':456 'set':215,571 'setup':330 'setup.sh':336,356,366,398,444 'ship':334 'shrink':917 'silent':196,416,1218 'simsun':577 'singl':699,733,1128,1199 'single-lin':732 'size':1252,1307,1311,1485,1488 'skill':46,71,98,135,333,386,1240 'skill-fill-protocol' 'skip':420 'slot':1317 'soffic':1047 'sole':892 'source-aperivue' 'space':753,820,953 'split':585,774,1068 'stabil':874 'standard':1506 'stard':1298 'state':1509 'statist':1253 'stay':984 'step':353,489,503,547,1008,1042 'structur':19,178,508 'studi':651,1105,1249 'style':26,814,1204 'submiss':865,1303 'submit':1041 'sudo':307,315,321 'summari':1033 'support':174,555,1417 'surfac':242,430 'tabl':27,111,177,516,640,649,914,1065,1100,1103,1108,1161,1190,1332,1421 'table.cell':1215 'templat':8,95,127,148,155,190,249,269,425,507,813,867,941,971,1016,1222,1353 'template.docx':1094 'test':1403 'text':131,186,704,744,1312,1363 'textutil':175,1187 'th':42 'third':687,955 'three':259,556,717 'tight':789,985 'time':1076 'titl':652,708,709,1106,1133,1134 'top':528 'top-level':527 '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' 'touch':635,962 'tripod':1299 'true':586,604,606,616,618,765,794,884 'turn':991 'unattend':452 'uncertain':1469,1508 'uncertainti':1511 'unfriend':418 'uniform':851 'unknown':1178 'unless':446 'unmatch':236 'untest':1432 'untouch':636,876 'unverifi':1452,1455 'use':153,531,729 'user':286,391,406,448,460,1476 'valid':231,657,714,1135,1291 'valu':647,1198 'verif':1045 'verifi':1443,1472 'vertic':1394 'via':163,819,1444 'violat':143 'visibl':904 'visual':817,870,989,1044,1058 'w':1141,1145 'waiver':1350 'warn':1138,1143 'western':1237 'whose':891 'without':64 'word':6,55,1411 'word/libreoffice/pages':475 'work':1345 'workflow':488 'wrap':795 'wrapper':1326 'write':36,39,78,82,1242 'write-protocol':35,38,77,81,1241 'y':312,318 'yaml':544,552,554,563,968 'yes':442 'yet':1416 '고딕':568,1098 '근거':696 '맑은':567,1097 '목적':665,1111 '및':694 '배경':693 '본':666 '연구':664,692,1110 '연구는':667 '이론적':695","prices":[{"id":"8ff52508-9cf5-451b-ba63-4944211a2b50","listingId":"485ea5b7-a6f4-4dfc-9a8c-f8b67f9424b0","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:44.623Z"}],"sources":[{"listingId":"485ea5b7-a6f4-4dfc-9a8c-f8b67f9424b0","source":"github","sourceId":"Aperivue/medsci-skills/fill-protocol","sourceUrl":"https://github.com/Aperivue/medsci-skills/tree/main/skills/fill-protocol","isPrimary":false,"firstSeenAt":"2026-05-13T12:57:44.623Z","lastSeenAt":"2026-05-18T18:56:29.561Z"}],"details":{"listingId":"485ea5b7-a6f4-4dfc-9a8c-f8b67f9424b0","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Aperivue","slug":"fill-protocol","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":"838e06bc6bea6843928453c64e192a34b37e99d0","skill_md_path":"skills/fill-protocol/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Aperivue/medsci-skills/tree/main/skills/fill-protocol"},"layout":"multi","source":"github","category":"medsci-skills","frontmatter":{"name":"fill-protocol","description":"Fill institutional Word form templates (.doc/.docx) for IRB protocols, ethics applications, grant proposals, and other structured research documents while preserving the original styles, table layouts, fonts, and page geometry. Pairs with write-protocol — write-protocol drafts the scientific content, fill-protocol renders it into the institutional template. Korean-aware (CJK eastAsia font enforcement, table cantSplit) but works for any language template."},"skills_sh_url":"https://skills.sh/Aperivue/medsci-skills/fill-protocol"},"updatedAt":"2026-05-18T18:56:29.561Z"}}