medsci-skills 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (702) hide show
  1. package/LICENSE +50 -0
  2. package/README.md +602 -0
  3. package/README_FIRST.md +27 -0
  4. package/bin/medsci-skills.js +159 -0
  5. package/installers/install-macos.command +19 -0
  6. package/installers/install-windows.cmd +26 -0
  7. package/installers/install-windows.ps1 +17 -0
  8. package/installers/install.py +218 -0
  9. package/metadata/skills_catalog.json +452 -0
  10. package/package.json +48 -0
  11. package/skills/academic-aio/SKILL.md +408 -0
  12. package/skills/academic-aio/references/case_studies/kjr_mllm_2025.md +82 -0
  13. package/skills/academic-aio/references/checklists/AIO_GENERAL.md +354 -0
  14. package/skills/academic-aio/references/journal_summarybox_templates.yaml +126 -0
  15. package/skills/academic-aio/references/oac_funding_checklist.yaml +129 -0
  16. package/skills/academic-aio/references/reporting_guideline_mapping.md +39 -0
  17. package/skills/academic-aio/references/schema_markup_templates/CodeRepository.jsonld +32 -0
  18. package/skills/academic-aio/references/schema_markup_templates/Dataset.jsonld +36 -0
  19. package/skills/academic-aio/references/schema_markup_templates/Person.jsonld +30 -0
  20. package/skills/academic-aio/references/schema_markup_templates/README.md +43 -0
  21. package/skills/academic-aio/references/schema_markup_templates/ScholarlyArticle.jsonld +55 -0
  22. package/skills/academic-aio/scripts/batch_metadata_audit.py +169 -0
  23. package/skills/academic-aio/scripts/validate_schema.py +118 -0
  24. package/skills/academic-aio/skill.yml +36 -0
  25. package/skills/academic-aio/templates/aio_audit_checklist.md.j2 +108 -0
  26. package/skills/add-journal/SKILL.md +482 -0
  27. package/skills/add-journal/skill.yml +33 -0
  28. package/skills/analyze-stats/SKILL.md +598 -0
  29. package/skills/analyze-stats/references/analysis_guides/missing_data.md +109 -0
  30. package/skills/analyze-stats/references/analysis_guides/nhis_icd10_mapping.md +247 -0
  31. package/skills/analyze-stats/references/analysis_guides/propensity_score.md +132 -0
  32. package/skills/analyze-stats/references/analysis_guides/regression.md +115 -0
  33. package/skills/analyze-stats/references/analysis_guides/repeated_measures.md +160 -0
  34. package/skills/analyze-stats/references/analysis_guides/survey_weighted.md +366 -0
  35. package/skills/analyze-stats/references/analysis_guides/test_selection.md +86 -0
  36. package/skills/analyze-stats/references/style/figure_style.mplstyle +69 -0
  37. package/skills/analyze-stats/references/style/theme_publication.R +147 -0
  38. package/skills/analyze-stats/references/table-standards/journal-profiles/ajr.yaml +51 -0
  39. package/skills/analyze-stats/references/table-standards/journal-profiles/european_radiology.yaml +55 -0
  40. package/skills/analyze-stats/references/table-standards/journal-profiles/jama.yaml +66 -0
  41. package/skills/analyze-stats/references/table-standards/journal-profiles/lancet.yaml +57 -0
  42. package/skills/analyze-stats/references/table-standards/journal-profiles/nejm.yaml +51 -0
  43. package/skills/analyze-stats/references/table-standards/journal-profiles/radiology.yaml +66 -0
  44. package/skills/analyze-stats/references/table-standards/table-standards.md +287 -0
  45. package/skills/analyze-stats/references/table-standards/table-types/diagnostic_accuracy.md +36 -0
  46. package/skills/analyze-stats/references/table-standards/table-types/meta_analysis.md +58 -0
  47. package/skills/analyze-stats/references/table-standards/table-types/model_comparison.md +36 -0
  48. package/skills/analyze-stats/references/table-standards/table-types/regression_results.md +50 -0
  49. package/skills/analyze-stats/references/table-standards/table-types/table1_demographics.md +51 -0
  50. package/skills/analyze-stats/references/table-standards/tool-comparison.md +79 -0
  51. package/skills/analyze-stats/references/templates/agreement_analysis.py +436 -0
  52. package/skills/analyze-stats/references/templates/dca_plot.R +237 -0
  53. package/skills/analyze-stats/references/templates/diagnostic_accuracy.py +401 -0
  54. package/skills/analyze-stats/references/templates/dta_meta_analysis.R +384 -0
  55. package/skills/analyze-stats/references/templates/forest_plot.py +412 -0
  56. package/skills/analyze-stats/references/templates/likert_summary.py +356 -0
  57. package/skills/analyze-stats/references/templates/meta_analysis.R +365 -0
  58. package/skills/analyze-stats/references/templates/propensity_score.py +478 -0
  59. package/skills/analyze-stats/references/templates/regression.py +425 -0
  60. package/skills/analyze-stats/references/templates/repeated_measures.py +434 -0
  61. package/skills/analyze-stats/references/templates/sample_size.R +382 -0
  62. package/skills/analyze-stats/references/templates/survey_weighted_analysis.py +411 -0
  63. package/skills/analyze-stats/references/templates/survival_analysis.py +325 -0
  64. package/skills/analyze-stats/references/templates/table1_demographics.py +287 -0
  65. package/skills/analyze-stats/scripts/check_generated_code.py +335 -0
  66. package/skills/analyze-stats/skill.yml +38 -0
  67. package/skills/analyze-stats/tests/fixtures/gen_bad.R +16 -0
  68. package/skills/analyze-stats/tests/fixtures/gen_bad.py +24 -0
  69. package/skills/analyze-stats/tests/fixtures/gen_clean.py +21 -0
  70. package/skills/analyze-stats/tests/test_generated_code.sh +59 -0
  71. package/skills/analyze-stats/tests/test_survival_template.sh +53 -0
  72. package/skills/author-strategy/SKILL.md +117 -0
  73. package/skills/author-strategy/analyze_patterns.py +303 -0
  74. package/skills/author-strategy/fetch_pubmed.py +374 -0
  75. package/skills/author-strategy/skill.yml +34 -0
  76. package/skills/batch-cohort/SKILL.md +223 -0
  77. package/skills/batch-cohort/references/base_template_knhanes.R +210 -0
  78. package/skills/batch-cohort/references/batch_template_generator.R +222 -0
  79. package/skills/batch-cohort/references/variable_coding_registry.md +136 -0
  80. package/skills/batch-cohort/skill.yml +35 -0
  81. package/skills/calc-sample-size/SKILL.md +491 -0
  82. package/skills/calc-sample-size/references/formulas.md +655 -0
  83. package/skills/calc-sample-size/references/observational_cohort.md +49 -0
  84. package/skills/calc-sample-size/skill.yml +51 -0
  85. package/skills/check-reporting/SKILL.md +534 -0
  86. package/skills/check-reporting/references/LICENSES.md +41 -0
  87. package/skills/check-reporting/references/checklists/AMSTAR2.md +54 -0
  88. package/skills/check-reporting/references/checklists/ARRIVE_2.md +234 -0
  89. package/skills/check-reporting/references/checklists/CARE.md +102 -0
  90. package/skills/check-reporting/references/checklists/CLAIM_2024.md +128 -0
  91. package/skills/check-reporting/references/checklists/CLEAR.md +113 -0
  92. package/skills/check-reporting/references/checklists/CONSORT.md +86 -0
  93. package/skills/check-reporting/references/checklists/COSMIN_RoB.md +136 -0
  94. package/skills/check-reporting/references/checklists/GRRAS.md +61 -0
  95. package/skills/check-reporting/references/checklists/MI_CLEAR_LLM.md +167 -0
  96. package/skills/check-reporting/references/checklists/MOOSE.md +85 -0
  97. package/skills/check-reporting/references/checklists/NOS.md +88 -0
  98. package/skills/check-reporting/references/checklists/PRISMA_2020.md +135 -0
  99. package/skills/check-reporting/references/checklists/PRISMA_DTA.md +36 -0
  100. package/skills/check-reporting/references/checklists/PRISMA_P.md +56 -0
  101. package/skills/check-reporting/references/checklists/PROBAST.md +75 -0
  102. package/skills/check-reporting/references/checklists/PROBAST_AI.md +130 -0
  103. package/skills/check-reporting/references/checklists/QUADAS2.md +77 -0
  104. package/skills/check-reporting/references/checklists/QUADAS_C.md +131 -0
  105. package/skills/check-reporting/references/checklists/ROBINS_E.md +179 -0
  106. package/skills/check-reporting/references/checklists/ROBINS_I.md +87 -0
  107. package/skills/check-reporting/references/checklists/ROBIS.md +114 -0
  108. package/skills/check-reporting/references/checklists/ROB_ME.md +126 -0
  109. package/skills/check-reporting/references/checklists/RoB2.md +79 -0
  110. package/skills/check-reporting/references/checklists/RoB_NMA.md +96 -0
  111. package/skills/check-reporting/references/checklists/SPIRIT.md +112 -0
  112. package/skills/check-reporting/references/checklists/SQUIRE_2.md +68 -0
  113. package/skills/check-reporting/references/checklists/STARD.md +129 -0
  114. package/skills/check-reporting/references/checklists/STARD_AI.md +211 -0
  115. package/skills/check-reporting/references/checklists/STROBE.md +80 -0
  116. package/skills/check-reporting/references/checklists/SWiM.md +33 -0
  117. package/skills/check-reporting/references/checklists/TRIPOD.md +157 -0
  118. package/skills/check-reporting/references/checklists/TRIPOD_AI.md +140 -0
  119. package/skills/check-reporting/references/step4c_registration_timing.md +93 -0
  120. package/skills/check-reporting/references/step4d_prisma_figure_audit.md +137 -0
  121. package/skills/check-reporting/scripts/check_checklist_exists.py +183 -0
  122. package/skills/check-reporting/scripts/check_checklist_version.py +168 -0
  123. package/skills/check-reporting/scripts/check_framework_naming.py +206 -0
  124. package/skills/check-reporting/scripts/check_prisma_figure.py +209 -0
  125. package/skills/check-reporting/scripts/prisma_cascade_check.py +274 -0
  126. package/skills/check-reporting/skill.yml +41 -0
  127. package/skills/check-reporting/tests/fixtures/framework_bad.md +8 -0
  128. package/skills/check-reporting/tests/fixtures/framework_clean.md +7 -0
  129. package/skills/check-reporting/tests/test_checklist_fail_fast.sh +77 -0
  130. package/skills/check-reporting/tests/test_checklist_version.sh +72 -0
  131. package/skills/check-reporting/tests/test_framework_naming.sh +45 -0
  132. package/skills/check-reporting/tests/test_prisma_cascade.sh +104 -0
  133. package/skills/clean-data/SKILL.md +180 -0
  134. package/skills/clean-data/references/cleaning_patterns.md +299 -0
  135. package/skills/clean-data/references/profiling_template.py +304 -0
  136. package/skills/clean-data/scripts/check_structural_zero.py +174 -0
  137. package/skills/clean-data/skill.yml +35 -0
  138. package/skills/clean-data/tests/fixtures/smoking.csv +8 -0
  139. package/skills/clean-data/tests/test_structural_zero.sh +49 -0
  140. package/skills/cross-national/SKILL.md +264 -0
  141. package/skills/cross-national/skill.yml +37 -0
  142. package/skills/define-variables/SKILL.md +146 -0
  143. package/skills/define-variables/references/common_definitions.md +190 -0
  144. package/skills/define-variables/skill.yml +34 -0
  145. package/skills/define-variables/templates/variable_operationalization.md +64 -0
  146. package/skills/deidentify/SKILL.md +203 -0
  147. package/skills/deidentify/deidentify.py +1224 -0
  148. package/skills/deidentify/locales/_template.json +45 -0
  149. package/skills/deidentify/locales/au.json +43 -0
  150. package/skills/deidentify/locales/ca.json +44 -0
  151. package/skills/deidentify/locales/cn.json +47 -0
  152. package/skills/deidentify/locales/de.json +48 -0
  153. package/skills/deidentify/locales/fr.json +48 -0
  154. package/skills/deidentify/locales/in.json +48 -0
  155. package/skills/deidentify/locales/jp.json +48 -0
  156. package/skills/deidentify/locales/kr.json +48 -0
  157. package/skills/deidentify/locales/uk.json +45 -0
  158. package/skills/deidentify/locales/us.json +43 -0
  159. package/skills/deidentify/references/date_shift_guide.md +82 -0
  160. package/skills/deidentify/references/hipaa_18_identifiers.md +48 -0
  161. package/skills/deidentify/references/korean_phi_patterns.md +135 -0
  162. package/skills/deidentify/skill.yml +43 -0
  163. package/skills/deidentify/tests/README.md +26 -0
  164. package/skills/deidentify/tests/test_clean.csv +16 -0
  165. package/skills/deidentify/tests/test_edge_cases.csv +11 -0
  166. package/skills/deidentify/tests/test_phi_korean.csv +11 -0
  167. package/skills/design-ai-benchmarking/SKILL.md +214 -0
  168. package/skills/design-ai-benchmarking/references/benchmark_export_schema.json +69 -0
  169. package/skills/design-ai-benchmarking/references/elicitation_rubric_template.md +37 -0
  170. package/skills/design-ai-benchmarking/skill.yml +38 -0
  171. package/skills/design-study/SKILL.md +298 -0
  172. package/skills/design-study/skill.yml +33 -0
  173. package/skills/fill-icmje-coi/SKILL.md +216 -0
  174. package/skills/fill-icmje-coi/scripts/fill_icmje_coi.py +140 -0
  175. package/skills/fill-icmje-coi/skill.yml +35 -0
  176. package/skills/fill-icmje-coi/templates/icmje_coi_seed_synthetic.docx +0 -0
  177. package/skills/fill-protocol/SKILL.md +248 -0
  178. package/skills/fill-protocol/examples/example_irb_template.yaml +53 -0
  179. package/skills/fill-protocol/references/best_practices.md +121 -0
  180. package/skills/fill-protocol/scripts/doc_to_docx.py +111 -0
  181. package/skills/fill-protocol/scripts/fill_form.py +611 -0
  182. package/skills/fill-protocol/scripts/inspect_template.py +61 -0
  183. package/skills/fill-protocol/setup.sh +162 -0
  184. package/skills/fill-protocol/skill.yml +37 -0
  185. package/skills/find-cohort-gap/SKILL.md +309 -0
  186. package/skills/find-cohort-gap/references/cohort_profile_template.md +93 -0
  187. package/skills/find-cohort-gap/references/onepager_template.md +84 -0
  188. package/skills/find-cohort-gap/references/pattern_scoring_rubric.md +169 -0
  189. package/skills/find-cohort-gap/references/saturation_query_templates.md +143 -0
  190. package/skills/find-cohort-gap/skill.yml +35 -0
  191. package/skills/find-journal/POLICY.md +87 -0
  192. package/skills/find-journal/SKILL.md +340 -0
  193. package/skills/find-journal/references/journal_profiles/AJNR.md +29 -0
  194. package/skills/find-journal/references/journal_profiles/AJR.md +30 -0
  195. package/skills/find-journal/references/journal_profiles/Abdominal_Radiology.md +30 -0
  196. package/skills/find-journal/references/journal_profiles/Academic_Radiology.md +30 -0
  197. package/skills/find-journal/references/journal_profiles/Annals_of_Internal_Medicine.md +33 -0
  198. package/skills/find-journal/references/journal_profiles/Artificial_Intelligence_in_Medicine.md +28 -0
  199. package/skills/find-journal/references/journal_profiles/BMC_Medicine.md +31 -0
  200. package/skills/find-journal/references/journal_profiles/British_Journal_of_Radiology.md +39 -0
  201. package/skills/find-journal/references/journal_profiles/CVIR.md +30 -0
  202. package/skills/find-journal/references/journal_profiles/Chest.md +39 -0
  203. package/skills/find-journal/references/journal_profiles/Clinical_Radiology.md +30 -0
  204. package/skills/find-journal/references/journal_profiles/Clinical_and_Molecular_Hepatology.md +32 -0
  205. package/skills/find-journal/references/journal_profiles/Diabetes_Metabolism_Journal.md +36 -0
  206. package/skills/find-journal/references/journal_profiles/Diagnostic_and_Interventional_Radiology.md +32 -0
  207. package/skills/find-journal/references/journal_profiles/Endocrinology_and_Metabolism.md +37 -0
  208. package/skills/find-journal/references/journal_profiles/European_Journal_of_Preventive_Cardiology.md +39 -0
  209. package/skills/find-journal/references/journal_profiles/European_Radiology.md +29 -0
  210. package/skills/find-journal/references/journal_profiles/Hepatology_Communications.md +40 -0
  211. package/skills/find-journal/references/journal_profiles/Hepatology_International.md +37 -0
  212. package/skills/find-journal/references/journal_profiles/IEEE_JBHI.md +28 -0
  213. package/skills/find-journal/references/journal_profiles/IEEE_TMI.md +28 -0
  214. package/skills/find-journal/references/journal_profiles/INSI.md +29 -0
  215. package/skills/find-journal/references/journal_profiles/Investigative_Radiology.md +25 -0
  216. package/skills/find-journal/references/journal_profiles/JACC_Advances.md +41 -0
  217. package/skills/find-journal/references/journal_profiles/JACC_Asia.md +30 -0
  218. package/skills/find-journal/references/journal_profiles/JACR.md +28 -0
  219. package/skills/find-journal/references/journal_profiles/JAMA.md +40 -0
  220. package/skills/find-journal/references/journal_profiles/JAMA_Network_Open.md +30 -0
  221. package/skills/find-journal/references/journal_profiles/JCSM.md +39 -0
  222. package/skills/find-journal/references/journal_profiles/JKMS.md +32 -0
  223. package/skills/find-journal/references/journal_profiles/JMIR.md +29 -0
  224. package/skills/find-journal/references/journal_profiles/JMIR_Medical_Education.md +29 -0
  225. package/skills/find-journal/references/journal_profiles/JNIS.md +35 -0
  226. package/skills/find-journal/references/journal_profiles/JVIR.md +31 -0
  227. package/skills/find-journal/references/journal_profiles/Journal_of_Biomedical_Informatics.md +29 -0
  228. package/skills/find-journal/references/journal_profiles/Journal_of_Clinical_Endocrinology_and_Metabolism.md +40 -0
  229. package/skills/find-journal/references/journal_profiles/Journal_of_Magnetic_Resonance_Imaging.md +30 -0
  230. package/skills/find-journal/references/journal_profiles/Journal_of_Nuclear_Medicine.md +31 -0
  231. package/skills/find-journal/references/journal_profiles/Journal_of_Stroke.md +32 -0
  232. package/skills/find-journal/references/journal_profiles/KJR.md +38 -0
  233. package/skills/find-journal/references/journal_profiles/Korean_Circulation_Journal.md +38 -0
  234. package/skills/find-journal/references/journal_profiles/Korean_Journal_of_Internal_Medicine.md +36 -0
  235. package/skills/find-journal/references/journal_profiles/Lancet_Diabetes_and_Endocrinology.md +40 -0
  236. package/skills/find-journal/references/journal_profiles/Lancet_Gastroenterology_and_Hepatology.md +49 -0
  237. package/skills/find-journal/references/journal_profiles/Lancet_Infectious_Diseases.md +38 -0
  238. package/skills/find-journal/references/journal_profiles/Lancet_Neurology.md +39 -0
  239. package/skills/find-journal/references/journal_profiles/Lancet_Oncology.md +40 -0
  240. package/skills/find-journal/references/journal_profiles/Lancet_Psychiatry.md +38 -0
  241. package/skills/find-journal/references/journal_profiles/Lancet_Public_Health.md +30 -0
  242. package/skills/find-journal/references/journal_profiles/Lancet_Respiratory_Medicine.md +39 -0
  243. package/skills/find-journal/references/journal_profiles/Liver_International.md +33 -0
  244. package/skills/find-journal/references/journal_profiles/Medical_Image_Analysis.md +28 -0
  245. package/skills/find-journal/references/journal_profiles/NEJM.md +33 -0
  246. package/skills/find-journal/references/journal_profiles/Nature_Machine_Intelligence.md +31 -0
  247. package/skills/find-journal/references/journal_profiles/Nature_Medicine.md +39 -0
  248. package/skills/find-journal/references/journal_profiles/Neuroradiology.md +31 -0
  249. package/skills/find-journal/references/journal_profiles/Nutrition_Metabolism_and_Cardiovascular_Diseases.md +39 -0
  250. package/skills/find-journal/references/journal_profiles/PLOS_Medicine.md +32 -0
  251. package/skills/find-journal/references/journal_profiles/RYAI.md +28 -0
  252. package/skills/find-journal/references/journal_profiles/Radiology.md +29 -0
  253. package/skills/find-journal/references/journal_profiles/Skeletal_Radiology.md +31 -0
  254. package/skills/find-journal/references/journal_profiles/Stroke.md +37 -0
  255. package/skills/find-journal/references/journal_profiles/The_BMJ.md +31 -0
  256. package/skills/find-journal/references/journal_profiles/The_Lancet.md +31 -0
  257. package/skills/find-journal/references/journal_profiles/The_Lancet_Digital_Health.md +29 -0
  258. package/skills/find-journal/references/journal_profiles/World_Journal_of_Hepatology.md +53 -0
  259. package/skills/find-journal/references/journal_profiles/npj_Digital_Medicine.md +29 -0
  260. package/skills/find-journal/skill.yml +34 -0
  261. package/skills/fulltext-retrieval/SKILL.md +174 -0
  262. package/skills/fulltext-retrieval/fetch_oa.py +433 -0
  263. package/skills/fulltext-retrieval/pdf_to_md.py +160 -0
  264. package/skills/fulltext-retrieval/skill.yml +41 -0
  265. package/skills/generate-codebook/SKILL.md +155 -0
  266. package/skills/generate-codebook/references/codebook_schema.md +76 -0
  267. package/skills/generate-codebook/scripts/generate_codebook.py +278 -0
  268. package/skills/generate-codebook/skill.yml +35 -0
  269. package/skills/generate-codebook/tests/test_generate_codebook.sh +76 -0
  270. package/skills/grant-builder/SKILL.md +251 -0
  271. package/skills/grant-builder/skill.yml +34 -0
  272. package/skills/humanize/SKILL.md +251 -0
  273. package/skills/humanize/references/ai_patterns.md +571 -0
  274. package/skills/humanize/skill.yml +33 -0
  275. package/skills/intake-project/SKILL.md +264 -0
  276. package/skills/intake-project/skill.yml +34 -0
  277. package/skills/lit-sync/SKILL.md +448 -0
  278. package/skills/lit-sync/references/locale/ko/note_templates.md +110 -0
  279. package/skills/lit-sync/skill.yml +52 -0
  280. package/skills/lit-sync/tests/test_poll_logic.sh +92 -0
  281. package/skills/ma-scout/SKILL.md +640 -0
  282. package/skills/ma-scout/references/project_readme_template.md +95 -0
  283. package/skills/ma-scout/references/project_readme_template_ko.md +82 -0
  284. package/skills/ma-scout/skill.yml +33 -0
  285. package/skills/make-figures/SKILL.md +957 -0
  286. package/skills/make-figures/references/critic_rubrics/data_plot.md +166 -0
  287. package/skills/make-figures/references/critic_rubrics/flow_diagram.md +169 -0
  288. package/skills/make-figures/references/design_principles.md +181 -0
  289. package/skills/make-figures/references/exemplar_diagrams/README.md +65 -0
  290. package/skills/make-figures/references/exemplar_diagrams/consort/README.md +15 -0
  291. package/skills/make-figures/references/exemplar_diagrams/consort/template_input.yaml +37 -0
  292. package/skills/make-figures/references/exemplar_diagrams/consort/template_output.pdf +0 -0
  293. package/skills/make-figures/references/exemplar_diagrams/consort/template_output.png +0 -0
  294. package/skills/make-figures/references/exemplar_diagrams/consort/template_output_600.png +0 -0
  295. package/skills/make-figures/references/exemplar_diagrams/other/other_02.meta.yaml +4 -0
  296. package/skills/make-figures/references/exemplar_diagrams/other/other_02.png +0 -0
  297. package/skills/make-figures/references/exemplar_diagrams/other/other_02_why.md +13 -0
  298. package/skills/make-figures/references/exemplar_diagrams/pipeline/README.md +15 -0
  299. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_01.meta.yaml +4 -0
  300. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_01.png +0 -0
  301. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_01_why.md +13 -0
  302. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_03.meta.yaml +4 -0
  303. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_03.png +0 -0
  304. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_03_why.md +13 -0
  305. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_04.meta.yaml +4 -0
  306. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_04.png +0 -0
  307. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_04_why.md +13 -0
  308. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_05.meta.yaml +4 -0
  309. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_05.png +0 -0
  310. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_05_why.md +13 -0
  311. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_06.meta.yaml +4 -0
  312. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_06.png +0 -0
  313. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_06_why.md +13 -0
  314. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_07.meta.yaml +4 -0
  315. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_07.png +0 -0
  316. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_07_why.md +13 -0
  317. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_08.meta.yaml +4 -0
  318. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_08.png +0 -0
  319. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_08_why.md +13 -0
  320. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_09.meta.yaml +4 -0
  321. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_09.png +0 -0
  322. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_09_why.md +13 -0
  323. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_10.meta.yaml +4 -0
  324. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_10.png +0 -0
  325. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_10_why.md +13 -0
  326. package/skills/make-figures/references/exemplar_diagrams/prisma/README.md +15 -0
  327. package/skills/make-figures/references/exemplar_diagrams/prisma/template_input.yaml +47 -0
  328. package/skills/make-figures/references/exemplar_diagrams/prisma/template_output.pdf +0 -0
  329. package/skills/make-figures/references/exemplar_diagrams/prisma/template_output.png +0 -0
  330. package/skills/make-figures/references/exemplar_diagrams/prisma/template_output_600.png +0 -0
  331. package/skills/make-figures/references/exemplar_diagrams/stard/README.md +15 -0
  332. package/skills/make-figures/references/exemplar_diagrams/stard/template_input.yaml +40 -0
  333. package/skills/make-figures/references/exemplar_diagrams/stard/template_output.pdf +0 -0
  334. package/skills/make-figures/references/exemplar_diagrams/stard/template_output.png +0 -0
  335. package/skills/make-figures/references/exemplar_diagrams/stard/template_output_600.png +0 -0
  336. package/skills/make-figures/references/exemplar_diagrams/strobe/template_input.yaml +43 -0
  337. package/skills/make-figures/references/exemplar_diagrams/strobe/template_input_pptx.yaml +43 -0
  338. package/skills/make-figures/references/exemplar_diagrams/strobe/template_output.pdf +0 -0
  339. package/skills/make-figures/references/exemplar_diagrams/strobe/template_output.png +0 -0
  340. package/skills/make-figures/references/exemplar_diagrams/strobe/template_output.pptx +0 -0
  341. package/skills/make-figures/references/exemplar_diagrams/strobe/template_output_600.png +0 -0
  342. package/skills/make-figures/references/figure_specs.md +291 -0
  343. package/skills/make-figures/references/flow_diagram_lessons.md +164 -0
  344. package/skills/make-figures/references/jacc_central_illustration_principles.md +91 -0
  345. package/skills/make-figures/references/medical_illustration_sources.md +98 -0
  346. package/skills/make-figures/references/pipeline_concepts_medical_ai.md +240 -0
  347. package/skills/make-figures/references/reporting_guideline_figure_map.md +104 -0
  348. package/skills/make-figures/references/visual_abstract_templates/european_radiology.pptx +0 -0
  349. package/skills/make-figures/references/visual_abstract_templates/jacc_central_illustration.pptx +0 -0
  350. package/skills/make-figures/references/visual_abstract_templates/medsci_default.pptx +0 -0
  351. package/skills/make-figures/references/visual_abstract_templates/template_guide.md +114 -0
  352. package/skills/make-figures/scripts/build_jacc_template.py +77 -0
  353. package/skills/make-figures/scripts/build_prisma2020_template.py +371 -0
  354. package/skills/make-figures/scripts/build_strobe_template.py +351 -0
  355. package/skills/make-figures/scripts/critic_figure.py +264 -0
  356. package/skills/make-figures/scripts/derive_figure_legend_counts.py +138 -0
  357. package/skills/make-figures/scripts/extract_exemplar_from_pdf.py +186 -0
  358. package/skills/make-figures/scripts/fetch_official_templates.sh +88 -0
  359. package/skills/make-figures/scripts/fill_prisma_template.py +142 -0
  360. package/skills/make-figures/scripts/generate_flow_diagram.R +133 -0
  361. package/skills/make-figures/scripts/generate_image.py +99 -0
  362. package/skills/make-figures/scripts/generate_visual_abstract.py +438 -0
  363. package/skills/make-figures/scripts/validate_pptx_mac_compat.py +233 -0
  364. package/skills/make-figures/skill.yml +52 -0
  365. package/skills/make-figures/templates/official/NOTES.md +62 -0
  366. package/skills/make-figures/templates/official/consort2010/CONSORT_2025_editable_checklist.docx +0 -0
  367. package/skills/make-figures/templates/official/consort2010/CONSORT_2025_flow_diagram.docx +0 -0
  368. package/skills/make-figures/templates/official/prisma2020/PRISMA_2020_flow_new_v1.pptx +0 -0
  369. package/skills/make-figures/templates/official/prisma2020/PRISMA_2020_flow_new_v2.pptx +0 -0
  370. package/skills/make-figures/templates/official/prisma2020/PRISMA_2020_flow_updated_v2.pptx +0 -0
  371. package/skills/make-figures/templates/official/spirit2013/SPIRIT_2025_editable_checklist.docx +0 -0
  372. package/skills/make-figures/templates/official/spirit2013/SPIRIT_2025_participant_timeline.docx +0 -0
  373. package/skills/make-figures/templates/official/stard2015/STARD_2015_checklist.docx +0 -0
  374. package/skills/make-figures/templates/official/stard2015/STARD_2015_flow_diagram.pdf +0 -0
  375. package/skills/make-figures/tests/fixtures/figure1_flow.yaml +8 -0
  376. package/skills/make-figures/tests/fixtures/manuscript_ok.md +9 -0
  377. package/skills/make-figures/tests/fixtures/manuscript_stale.md +4 -0
  378. package/skills/make-figures/tests/test_legend_reconcile.sh +36 -0
  379. package/skills/manage-project/SKILL.md +358 -0
  380. package/skills/manage-project/references/pre_submission_checklist.md +53 -0
  381. package/skills/manage-project/references/project_state_template.json +37 -0
  382. package/skills/manage-project/references/scaffold_templates.md +118 -0
  383. package/skills/manage-project/references/status_output_format.md +44 -0
  384. package/skills/manage-project/references/timeline_example.md +20 -0
  385. package/skills/manage-project/skill.yml +36 -0
  386. package/skills/manage-project/templates/SSOT.yaml.template +41 -0
  387. package/skills/manage-refs/LICENSE.zotero-mcp +21 -0
  388. package/skills/manage-refs/NOTICE.md +29 -0
  389. package/skills/manage-refs/SKILL.md +289 -0
  390. package/skills/manage-refs/citation_styles/README.md +40 -0
  391. package/skills/manage-refs/citation_styles/american-journal-of-roentgenology.csl +211 -0
  392. package/skills/manage-refs/citation_styles/cardiovascular-and-interventional-radiology.csl +19 -0
  393. package/skills/manage-refs/citation_styles/european-radiology.csl +19 -0
  394. package/skills/manage-refs/citation_styles/journal-of-cachexia-sarcopenia-and-muscle.csl +150 -0
  395. package/skills/manage-refs/citation_styles/journal-of-korean-medical-science-strict.csl +533 -0
  396. package/skills/manage-refs/citation_styles/journal-of-korean-medical-science.csl +16 -0
  397. package/skills/manage-refs/citation_styles/korean-journal-of-radiology.csl +155 -0
  398. package/skills/manage-refs/citation_styles/nature.csl +189 -0
  399. package/skills/manage-refs/citation_styles/nlm-citation-sequence.csl +535 -0
  400. package/skills/manage-refs/citation_styles/radiology.csl +228 -0
  401. package/skills/manage-refs/citation_styles/springer-basic-brackets.csl +187 -0
  402. package/skills/manage-refs/citation_styles/springer-vancouver-brackets.csl +276 -0
  403. package/skills/manage-refs/citation_styles/vancouver-superscript.csl +536 -0
  404. package/skills/manage-refs/citation_styles/vancouver.csl +535 -0
  405. package/skills/manage-refs/references/REFERENCE_STYLE_SPECS.md +59 -0
  406. package/skills/manage-refs/references/check_xref_symptoms.md +35 -0
  407. package/skills/manage-refs/scripts/_vendor_citation_writer.py +600 -0
  408. package/skills/manage-refs/scripts/check_citation_keys.py +112 -0
  409. package/skills/manage-refs/scripts/check_csl_render.py +102 -0
  410. package/skills/manage-refs/scripts/check_xref.py +633 -0
  411. package/skills/manage-refs/scripts/fill_journal_abbrev.py +104 -0
  412. package/skills/manage-refs/scripts/inject_zotero_cwyw.py +133 -0
  413. package/skills/manage-refs/scripts/md_marker_convert.py +193 -0
  414. package/skills/manage-refs/scripts/pre_submission_gate.sh +238 -0
  415. package/skills/manage-refs/scripts/render_pandoc.sh +88 -0
  416. package/skills/manage-refs/skill.yml +70 -0
  417. package/skills/manage-refs/tests/fixtures/pre_submission_gate/README.md +32 -0
  418. package/skills/manage-refs/tests/fixtures/pre_submission_gate/manuscript.md +10 -0
  419. package/skills/manage-refs/tests/fixtures/pre_submission_gate/refs.bib +34 -0
  420. package/skills/manage-refs/tests/fixtures/pre_submission_gate/run.sh +117 -0
  421. package/skills/manage-refs/tests/test_vN_docx_check.sh +145 -0
  422. package/skills/meta-analysis/SKILL.md +739 -0
  423. package/skills/meta-analysis/references/LICENSES.md +21 -0
  424. package/skills/meta-analysis/references/PROSPERO_template.md +221 -0
  425. package/skills/meta-analysis/references/ai_pre_screening_template.py +245 -0
  426. package/skills/meta-analysis/references/checklists/JBI_Case_Series.md +45 -0
  427. package/skills/meta-analysis/references/checklists/NOS.md +88 -0
  428. package/skills/meta-analysis/references/checklists/PRISMA_DTA.md +36 -0
  429. package/skills/meta-analysis/references/checklists/PROBAST.md +75 -0
  430. package/skills/meta-analysis/references/checklists/QUADAS2.md +77 -0
  431. package/skills/meta-analysis/references/checklists/ROBINS_I.md +87 -0
  432. package/skills/meta-analysis/references/checklists/RoB2.md +79 -0
  433. package/skills/meta-analysis/references/data_integrity_checklist.md +57 -0
  434. package/skills/meta-analysis/references/icmje_coi_guide.md +181 -0
  435. package/skills/meta-analysis/references/phase10_recovery.md +136 -0
  436. package/skills/meta-analysis/references/phase4_km_composite.md +58 -0
  437. package/skills/meta-analysis/references/phase6_statistical_synthesis.md +148 -0
  438. package/skills/meta-analysis/references/phase9_circulation.md +84 -0
  439. package/skills/meta-analysis/references/post_submission_release_ops.md +41 -0
  440. package/skills/meta-analysis/references/r_templates.md +132 -0
  441. package/skills/meta-analysis/references/review_orchestration.md +40 -0
  442. package/skills/meta-analysis/references/submission_package_drift.md +71 -0
  443. package/skills/meta-analysis/scripts/check_pool_consistency.py +201 -0
  444. package/skills/meta-analysis/scripts/cohort_overlap_check.py +242 -0
  445. package/skills/meta-analysis/scripts/dta_extraction_qc.py +137 -0
  446. package/skills/meta-analysis/scripts/screening_reconcile.py +160 -0
  447. package/skills/meta-analysis/skill.yml +47 -0
  448. package/skills/meta-analysis/templates/FINAL_POOL_LOCK.yaml.template +70 -0
  449. package/skills/meta-analysis/templates/extraction_form_v2.md +129 -0
  450. package/skills/meta-analysis/templates/supplementary_8file_checklist.md +94 -0
  451. package/skills/meta-analysis/tests/test_pool_consistency.sh +123 -0
  452. package/skills/orchestrate/SKILL.md +501 -0
  453. package/skills/orchestrate/references/dialogue_nodes.md +196 -0
  454. package/skills/orchestrate/references/report_template.md +109 -0
  455. package/skills/orchestrate/references/report_template_ko.md +88 -0
  456. package/skills/orchestrate/skill.yml +44 -0
  457. package/skills/peer-review/SKILL.md +381 -0
  458. package/skills/peer-review/references/aczel_2021_reviewer2_patterns.md +88 -0
  459. package/skills/peer-review/references/domain-probes/ai_overclaiming.md +47 -0
  460. package/skills/peer-review/references/domain-probes/narrative_review.md +44 -0
  461. package/skills/peer-review/references/domain-probes/observational_confounding.md +48 -0
  462. package/skills/peer-review/references/domain-probes/radiomics.md +38 -0
  463. package/skills/peer-review/references/domain-probes/sr_ma.md +87 -0
  464. package/skills/peer-review/references/domain-probes/survival_prognostic.md +68 -0
  465. package/skills/peer-review/references/exemplar_reviews/README.md +43 -0
  466. package/skills/peer-review/references/exemplar_reviews/ai_overclaiming.md +47 -0
  467. package/skills/peer-review/references/exemplar_reviews/calibration_missing.md +44 -0
  468. package/skills/peer-review/references/exemplar_reviews/data_leakage.md +48 -0
  469. package/skills/peer-review/references/exemplar_reviews/reference_standard_validity.md +45 -0
  470. package/skills/peer-review/references/narrative_review_audit.md +67 -0
  471. package/skills/peer-review/references/reviewer_calibration/README.md +34 -0
  472. package/skills/peer-review/references/reviewer_calibration/compliance_floor.md +52 -0
  473. package/skills/peer-review/references/reviewer_profiles/AJR.md +82 -0
  474. package/skills/peer-review/references/reviewer_profiles/EURE.md +64 -0
  475. package/skills/peer-review/references/reviewer_profiles/INSI.md +57 -0
  476. package/skills/peer-review/references/reviewer_profiles/KJR.md +100 -0
  477. package/skills/peer-review/references/reviewer_profiles/README.md +32 -0
  478. package/skills/peer-review/references/reviewer_profiles/RYAI.md +86 -0
  479. package/skills/peer-review/skill.yml +39 -0
  480. package/skills/present-paper/SKILL.md +675 -0
  481. package/skills/present-paper/references/critic_rubrics/slide.md +155 -0
  482. package/skills/present-paper/references/generate_pptx_templates.py +604 -0
  483. package/skills/present-paper/references/medical_presentation_templates.md +277 -0
  484. package/skills/present-paper/references/slide_design_principles.md +202 -0
  485. package/skills/present-paper/references/slide_visual_styles/nature_lancet.md +168 -0
  486. package/skills/present-paper/references/workflow-checklist.md +109 -0
  487. package/skills/present-paper/scripts/extract_pdf_figures.py +243 -0
  488. package/skills/present-paper/scripts/inject_pronunciation_notes.py +178 -0
  489. package/skills/present-paper/scripts/inject_speaker_notes.py +133 -0
  490. package/skills/present-paper/scripts/strip_notes_for_sharing.py +140 -0
  491. package/skills/present-paper/scripts/trim_caption.py +271 -0
  492. package/skills/present-paper/skill.yml +41 -0
  493. package/skills/present-paper/templates/build_pptx_nature_lancet.py +688 -0
  494. package/skills/publish-skill/SKILL.md +370 -0
  495. package/skills/publish-skill/references/license-compatibility-matrix.md +132 -0
  496. package/skills/publish-skill/references/pii-patterns.md +130 -0
  497. package/skills/publish-skill/scripts/audit_skill.sh +278 -0
  498. package/skills/publish-skill/skill.yml +35 -0
  499. package/skills/render-pdf-doc/SKILL.md +146 -0
  500. package/skills/render-pdf-doc/references/known_pitfalls.md +53 -0
  501. package/skills/render-pdf-doc/references/pandoc_korean_cheatsheet.md +77 -0
  502. package/skills/render-pdf-doc/scripts/check_deps.sh +42 -0
  503. package/skills/render-pdf-doc/scripts/infer_colwidths.py +164 -0
  504. package/skills/render-pdf-doc/scripts/render_pdf.sh +98 -0
  505. package/skills/render-pdf-doc/skill.yml +57 -0
  506. package/skills/render-pdf-doc/templates/anchor-doc.md +27 -0
  507. package/skills/render-pdf-doc/templates/anchor-doc_ko.md +25 -0
  508. package/skills/render-pdf-doc/templates/briefing-handout.md +33 -0
  509. package/skills/render-pdf-doc/templates/briefing-handout_ko.md +31 -0
  510. package/skills/render-pdf-doc/templates/proposal-cover.md +33 -0
  511. package/skills/render-pdf-doc/templates/proposal-cover_ko.md +31 -0
  512. package/skills/render-pdf-doc/templates/reference-table.md +22 -0
  513. package/skills/render-pdf-doc/templates/reference-table_ko.md +20 -0
  514. package/skills/replicate-study/SKILL.md +150 -0
  515. package/skills/replicate-study/references/harmonization_3country.csv +47 -0
  516. package/skills/replicate-study/references/harmonization_knhanes_nhanes.csv +68 -0
  517. package/skills/replicate-study/references/methodology_extraction_template.md +134 -0
  518. package/skills/replicate-study/skill.yml +37 -0
  519. package/skills/review-paper/SKILL.md +104 -0
  520. package/skills/review-paper/references/macro_skeleton.md +6 -0
  521. package/skills/review-paper/skill.yml +25 -0
  522. package/skills/revise/SKILL.md +515 -0
  523. package/skills/revise/references/r2r_voice.md +346 -0
  524. package/skills/revise/skill.yml +43 -0
  525. package/skills/search-lit/SKILL.md +443 -0
  526. package/skills/search-lit/references/parse_pubmed.py +326 -0
  527. package/skills/search-lit/references/pubmed_eutils.sh +111 -0
  528. package/skills/search-lit/skill.yml +46 -0
  529. package/skills/self-review/SKILL.md +1045 -0
  530. package/skills/self-review/references/domain-probes/ai_overclaiming.md +47 -0
  531. package/skills/self-review/references/domain-probes/narrative_review.md +44 -0
  532. package/skills/self-review/references/domain-probes/observational_confounding.md +48 -0
  533. package/skills/self-review/references/domain-probes/radiomics.md +38 -0
  534. package/skills/self-review/references/domain-probes/sr_ma.md +87 -0
  535. package/skills/self-review/references/domain-probes/survival_prognostic.md +68 -0
  536. package/skills/self-review/references/exemplar_findings/README.md +43 -0
  537. package/skills/self-review/references/exemplar_findings/cohort_arithmetic_mismatch.md +35 -0
  538. package/skills/self-review/references/exemplar_findings/estimand_drift_posthoc_primary.md +39 -0
  539. package/skills/self-review/references/exemplar_findings/scope_overreach_cross_sectional.md +35 -0
  540. package/skills/self-review/references/exemplar_findings/unadjusted_confounder.md +36 -0
  541. package/skills/self-review/references/panel_review_template.md +177 -0
  542. package/skills/self-review/scripts/check_artifact_coverage.py +301 -0
  543. package/skills/self-review/scripts/check_claim_artifact.py +248 -0
  544. package/skills/self-review/scripts/check_classical_style.py +185 -0
  545. package/skills/self-review/scripts/check_cohort_arithmetic.py +481 -0
  546. package/skills/self-review/scripts/check_confounding_completeness.py +287 -0
  547. package/skills/self-review/scripts/check_panel_diversity.py +336 -0
  548. package/skills/self-review/scripts/check_reference_adequacy.py +392 -0
  549. package/skills/self-review/scripts/check_reviewer_team_consistency.py +412 -0
  550. package/skills/self-review/scripts/check_scope_coherence.py +177 -0
  551. package/skills/self-review/skill.yml +47 -0
  552. package/skills/self-review/tests/fixtures/claim_manuscript.md +17 -0
  553. package/skills/self-review/tests/fixtures/claim_prereg.md +6 -0
  554. package/skills/self-review/tests/fixtures/cohort_bad.md +21 -0
  555. package/skills/self-review/tests/fixtures/cohort_clean.md +21 -0
  556. package/skills/self-review/tests/fixtures/cohort_partition.csv +5 -0
  557. package/skills/self-review/tests/fixtures/coverage_analysis/31_delong_nested_added_value.csv +3 -0
  558. package/skills/self-review/tests/fixtures/coverage_analysis/table1_demographics.csv +3 -0
  559. package/skills/self-review/tests/fixtures/coverage_clean.md +13 -0
  560. package/skills/self-review/tests/fixtures/coverage_manuscript.md +11 -0
  561. package/skills/self-review/tests/fixtures/panel_collapse.json +27 -0
  562. package/skills/self-review/tests/fixtures/panel_good.json +32 -0
  563. package/skills/self-review/tests/fixtures/panel_monoculture.json +32 -0
  564. package/skills/self-review/tests/fixtures/refadeq_letter.md +13 -0
  565. package/skills/self-review/tests/fixtures/refadeq_original_fixed.md +42 -0
  566. package/skills/self-review/tests/fixtures/refadeq_original_uncited.md +40 -0
  567. package/skills/self-review/tests/fixtures/scope_bad.md +9 -0
  568. package/skills/self-review/tests/fixtures/scope_clean.md +8 -0
  569. package/skills/self-review/tests/fixtures/scope_surrogate.md +8 -0
  570. package/skills/self-review/tests/fixtures/style_bad.md +13 -0
  571. package/skills/self-review/tests/fixtures/style_clean.md +11 -0
  572. package/skills/self-review/tests/fixtures/table1_by_exposure.csv +11 -0
  573. package/skills/self-review/tests/test_artifact_coverage.sh +44 -0
  574. package/skills/self-review/tests/test_claim_artifact.sh +50 -0
  575. package/skills/self-review/tests/test_classical_style.sh +44 -0
  576. package/skills/self-review/tests/test_cohort_arithmetic.sh +49 -0
  577. package/skills/self-review/tests/test_confounding_completeness.sh +66 -0
  578. package/skills/self-review/tests/test_panel_diversity.sh +55 -0
  579. package/skills/self-review/tests/test_panel_mode.sh +69 -0
  580. package/skills/self-review/tests/test_reference_adequacy.sh +68 -0
  581. package/skills/self-review/tests/test_reviewer_team_consistency.sh +138 -0
  582. package/skills/self-review/tests/test_scope_coherence.sh +46 -0
  583. package/skills/setup-medsci/SKILL.md +110 -0
  584. package/skills/setup-medsci/references/setup-checklist.md +51 -0
  585. package/skills/setup-medsci/skill.yml +30 -0
  586. package/skills/sync-submission/SKILL.md +382 -0
  587. package/skills/sync-submission/scripts/author_registry_example.yaml +36 -0
  588. package/skills/sync-submission/scripts/blind_sweep.py +203 -0
  589. package/skills/sync-submission/scripts/check_asset_anonymization.py +300 -0
  590. package/skills/sync-submission/scripts/check_cross_artifact_stale.py +211 -0
  591. package/skills/sync-submission/scripts/cover_letter_drift_check.py +451 -0
  592. package/skills/sync-submission/scripts/cross_document_n_check.py +486 -0
  593. package/skills/sync-submission/scripts/detect_copy_divergence.py +136 -0
  594. package/skills/sync-submission/scripts/preflight_gate.py +458 -0
  595. package/skills/sync-submission/scripts/scope_drift_check.py +362 -0
  596. package/skills/sync-submission/scripts/sync_submission.py +169 -0
  597. package/skills/sync-submission/skill.yml +43 -0
  598. package/skills/sync-submission/tests/fixtures/copy_ok.md +5 -0
  599. package/skills/sync-submission/tests/fixtures/copy_stale.md +5 -0
  600. package/skills/sync-submission/tests/fixtures/ssot.md +5 -0
  601. package/skills/sync-submission/tests/test_asset_anonymization.sh +99 -0
  602. package/skills/sync-submission/tests/test_copy_divergence.sh +44 -0
  603. package/skills/sync-submission/tests/test_cross_artifact_stale.sh +80 -0
  604. package/skills/sync-submission/tests/test_cross_document_n.sh +132 -0
  605. package/skills/sync-submission/tests/test_preflight_gate.sh +112 -0
  606. package/skills/sync-submission/tests/test_scope_drift.sh +122 -0
  607. package/skills/sync-submission/tests/test_vN_docx_assertion.sh +51 -0
  608. package/skills/verify-refs/SKILL.md +177 -0
  609. package/skills/verify-refs/references/manual_checkpoint_guide.md +100 -0
  610. package/skills/verify-refs/scripts/verify_cli.sh +62 -0
  611. package/skills/verify-refs/scripts/verify_refs.py +782 -0
  612. package/skills/verify-refs/skill.yml +44 -0
  613. package/skills/verify-refs/tests/fixtures/pagination_placeholder.bib +17 -0
  614. package/skills/verify-refs/tests/test_pagination_placeholder.sh +42 -0
  615. package/skills/version-dataset/SKILL.md +143 -0
  616. package/skills/version-dataset/references/manifest_schema.md +72 -0
  617. package/skills/version-dataset/scripts/version_dataset.py +242 -0
  618. package/skills/version-dataset/skill.yml +35 -0
  619. package/skills/version-dataset/tests/test_version_dataset.sh +52 -0
  620. package/skills/write-paper/SKILL.md +1148 -0
  621. package/skills/write-paper/references/exemplar_methods/README.md +38 -0
  622. package/skills/write-paper/references/exemplar_methods/ai_validation_tripod_claim.md +47 -0
  623. package/skills/write-paper/references/exemplar_methods/diagnostic_accuracy_stard.md +50 -0
  624. package/skills/write-paper/references/exemplar_methods/observational_cohort_strobe.md +43 -0
  625. package/skills/write-paper/references/journal_profiles/AJNR.md +185 -0
  626. package/skills/write-paper/references/journal_profiles/AJR.md +149 -0
  627. package/skills/write-paper/references/journal_profiles/Abdominal_Radiology.md +139 -0
  628. package/skills/write-paper/references/journal_profiles/Academic_Radiology.md +90 -0
  629. package/skills/write-paper/references/journal_profiles/Annals_of_Internal_Medicine.md +150 -0
  630. package/skills/write-paper/references/journal_profiles/Artificial_Intelligence_in_Medicine.md +82 -0
  631. package/skills/write-paper/references/journal_profiles/British_Journal_of_Radiology.md +161 -0
  632. package/skills/write-paper/references/journal_profiles/CVIR.md +157 -0
  633. package/skills/write-paper/references/journal_profiles/Chest.md +270 -0
  634. package/skills/write-paper/references/journal_profiles/Clinical_Radiology.md +160 -0
  635. package/skills/write-paper/references/journal_profiles/Clinical_and_Molecular_Hepatology.md +147 -0
  636. package/skills/write-paper/references/journal_profiles/Diabetes_Metabolism_Journal.md +163 -0
  637. package/skills/write-paper/references/journal_profiles/Diagnostic_and_Interventional_Radiology.md +216 -0
  638. package/skills/write-paper/references/journal_profiles/Endocrinology_and_Metabolism.md +167 -0
  639. package/skills/write-paper/references/journal_profiles/European_Journal_of_Preventive_Cardiology.md +192 -0
  640. package/skills/write-paper/references/journal_profiles/European_Radiology.md +159 -0
  641. package/skills/write-paper/references/journal_profiles/Hepatology_Communications.md +110 -0
  642. package/skills/write-paper/references/journal_profiles/Hepatology_International.md +106 -0
  643. package/skills/write-paper/references/journal_profiles/IEEE_TMI.md +180 -0
  644. package/skills/write-paper/references/journal_profiles/INSI.md +163 -0
  645. package/skills/write-paper/references/journal_profiles/Investigative_Radiology.md +86 -0
  646. package/skills/write-paper/references/journal_profiles/JACC_Advances.md +197 -0
  647. package/skills/write-paper/references/journal_profiles/JACC_Asia.md +168 -0
  648. package/skills/write-paper/references/journal_profiles/JACR.md +87 -0
  649. package/skills/write-paper/references/journal_profiles/JAMA.md +188 -0
  650. package/skills/write-paper/references/journal_profiles/JAMA_Network_Open.md +170 -0
  651. package/skills/write-paper/references/journal_profiles/JCSM.md +266 -0
  652. package/skills/write-paper/references/journal_profiles/JKMS.md +201 -0
  653. package/skills/write-paper/references/journal_profiles/JMIR.md +88 -0
  654. package/skills/write-paper/references/journal_profiles/JMIR_Medical_Education.md +86 -0
  655. package/skills/write-paper/references/journal_profiles/JNIS.md +227 -0
  656. package/skills/write-paper/references/journal_profiles/JVIR.md +158 -0
  657. package/skills/write-paper/references/journal_profiles/Journal_of_Clinical_Endocrinology_and_Metabolism.md +191 -0
  658. package/skills/write-paper/references/journal_profiles/Journal_of_Stroke.md +176 -0
  659. package/skills/write-paper/references/journal_profiles/KJR.md +185 -0
  660. package/skills/write-paper/references/journal_profiles/Korean_Circulation_Journal.md +184 -0
  661. package/skills/write-paper/references/journal_profiles/Korean_Journal_of_Internal_Medicine.md +178 -0
  662. package/skills/write-paper/references/journal_profiles/Lancet_Gastroenterology_and_Hepatology.md +127 -0
  663. package/skills/write-paper/references/journal_profiles/Liver_International.md +165 -0
  664. package/skills/write-paper/references/journal_profiles/Medical_Image_Analysis.md +147 -0
  665. package/skills/write-paper/references/journal_profiles/NEJM.md +147 -0
  666. package/skills/write-paper/references/journal_profiles/Nature_Medicine.md +181 -0
  667. package/skills/write-paper/references/journal_profiles/Neuroradiology.md +151 -0
  668. package/skills/write-paper/references/journal_profiles/Nutrition_Metabolism_and_Cardiovascular_Diseases.md +184 -0
  669. package/skills/write-paper/references/journal_profiles/PLOS_Medicine.md +166 -0
  670. package/skills/write-paper/references/journal_profiles/RYAI.md +124 -0
  671. package/skills/write-paper/references/journal_profiles/Radiology.md +173 -0
  672. package/skills/write-paper/references/journal_profiles/Skeletal_Radiology.md +135 -0
  673. package/skills/write-paper/references/journal_profiles/Stroke.md +210 -0
  674. package/skills/write-paper/references/journal_profiles/The_BMJ.md +121 -0
  675. package/skills/write-paper/references/journal_profiles/The_Lancet.md +112 -0
  676. package/skills/write-paper/references/journal_profiles/The_Lancet_Digital_Health.md +104 -0
  677. package/skills/write-paper/references/journal_profiles/World_Journal_of_Hepatology.md +106 -0
  678. package/skills/write-paper/references/journal_profiles/npj_Digital_Medicine.md +93 -0
  679. package/skills/write-paper/references/paper_types/ai_validation.md +270 -0
  680. package/skills/write-paper/references/paper_types/animal_study.md +194 -0
  681. package/skills/write-paper/references/paper_types/case_report.md +237 -0
  682. package/skills/write-paper/references/paper_types/cross_national.md +328 -0
  683. package/skills/write-paper/references/paper_types/letter.md +127 -0
  684. package/skills/write-paper/references/paper_types/meta_analysis.md +181 -0
  685. package/skills/write-paper/references/paper_types/nhis_cohort.md +297 -0
  686. package/skills/write-paper/references/paper_types/original_article.md +221 -0
  687. package/skills/write-paper/references/paper_types/technical_note.md +131 -0
  688. package/skills/write-paper/references/section_guides/discussion.md +155 -0
  689. package/skills/write-paper/references/section_guides/introduction.md +108 -0
  690. package/skills/write-paper/references/section_guides/methods.md +144 -0
  691. package/skills/write-paper/references/section_guides/results.md +113 -0
  692. package/skills/write-paper/references/section_guides/step7_1_classical_qc.md +67 -0
  693. package/skills/write-paper/references/section_guides/step7_4a_audit_recovery.md +74 -0
  694. package/skills/write-paper/references/section_guides/title_abstract.md +123 -0
  695. package/skills/write-paper/references/section_templates/methods_statistical.md +147 -0
  696. package/skills/write-paper/scripts/check_placeholders.py +182 -0
  697. package/skills/write-paper/skill.yml +48 -0
  698. package/skills/write-paper/tests/test_placeholders.sh +107 -0
  699. package/skills/write-protocol/SKILL.md +243 -0
  700. package/skills/write-protocol/references/ethics_checklist.md +150 -0
  701. package/skills/write-protocol/references/protocol_template.md +304 -0
  702. package/skills/write-protocol/skill.yml +34 -0
@@ -0,0 +1,640 @@
1
+ ---
2
+ name: ma-scout
3
+ description: Meta-analysis topic discovery and feasibility assessment. Professor-first (profile → gap) or Topic-first (question → gap → co-author). Pre-protocol phase from idea to ranked topic list.
4
+ triggers: ma-scout, MA 주제 찾기, professor MA, 메타분석 주제, MA gap, topic-first MA, 트렌드 MA, meta-analysis topic, 교수님 분석, 연구 분석
5
+ tools: Read, Write, Edit, Bash, Grep, Glob
6
+ model: opus
7
+ ---
8
+
9
+ # MA Scout Skill
10
+
11
+ You are helping a medical researcher discover meta-analysis topics.
12
+ Two modes are available depending on the starting point.
13
+
14
+ This skill handles the **pre-protocol phase** — from idea to ranked topic list.
15
+ For actual MA execution (PROSPERO, screening, analysis), hand off to `/meta-analysis`.
16
+
17
+ ## Mode Selection
18
+
19
+ Determine the mode from user input:
20
+
21
+ | Signal | Mode |
22
+ |--------|------|
23
+ | Professor name or profile URL provided | **A: Professor-first** |
24
+ | Clinical question, keyword, trend, or "find me a topic" | **B: Topic-first** |
25
+ | Both supplied (e.g., "this topic with this professor") | **A** (topic as filter) |
26
+
27
+ If ambiguous, ask the user whether to search by professor (supervisor-first) or by
28
+ topic (question-first).
29
+
30
+ ## Communication Rules
31
+
32
+ - Communicate with the user in their preferred language (typically Korean).
33
+ - Research questions, PICO/PIRD, and README content in English.
34
+ - Medical terminology always in English.
35
+
36
+ ---
37
+
38
+ ## Inputs
39
+
40
+ ### Mode A: Professor-first
41
+ - Professor name (native-language + English)
42
+ - Profile URL (ScholarWorks, SKKU Faculty, Google Scholar, ORCID)
43
+ - PubMed author link (preferably with cauthor_id for disambiguation)
44
+ - Known specialty (e.g., "thoracic imaging", "abdominal imaging")
45
+ - Affiliation history (e.g., "Hospital A → Hospital B → retired")
46
+ - Minimum required: **name + at least one profile URL or PubMed link**
47
+
48
+ ### Mode B: Topic-first
49
+ - Clinical question or keyword (e.g., "AI for lung-nodule malignancy prediction", "dual-energy CT body composition")
50
+ - Radiology subspecialty scope (e.g., thoracic, abdominal, neuro)
51
+ - MA type preference (DTA, prognostic, intervention — optional)
52
+ - Desired role: solo first author / co-first / supervisor-matched
53
+ - Minimum required: **clinical question or keyword**
54
+
55
+ ---
56
+
57
+ ## Workflow
58
+
59
+ > **Mode A (Professor-first):** Phase 0 → 1 → 2 → 3 → 4 → 5
60
+ > **Mode B (Topic-first):** T-Phase 0 → T-1 → T-2 → T-3 → T-4 → T-5
61
+ > Phase 2 (MA Gap Analysis) and Phase 4 (README template) are shared between both modes.
62
+
63
+ ---
64
+
65
+ # ═══════════════════════════════════════════
66
+ # MODE A: PROFESSOR-FIRST WORKFLOW
67
+ # ═══════════════════════════════════════════
68
+
69
+ ### Phase 0: Disambiguation & Context Confirmation
70
+
71
+ **Goal:** Resolve author identity before any search, and confirm user's relationship context.
72
+
73
+ **CRITICAL — Do this BEFORE any PubMed search:**
74
+
75
+ 1. **Resolve full English name first:**
76
+ - If cauthor_id is provided → fetch that specific PMID page to get full name + affiliation
77
+ - NEVER start with initials-only search (e.g., "Ha HK") — common Korean initials cause massive contamination
78
+ - First search must be `"[Full Name]"[Author]` (e.g., `"Ha Hyun Kwon"[Author]`)
79
+
80
+ 2. **Confirm affiliation chain with user:**
81
+ - Ask the user whether `{detected affiliation}` matches the professor's history,
82
+ and request the user's relationship to the professor so topic proposals can be
83
+ tuned accordingly.
84
+ - This prevents wrong-institution assumptions
85
+ - Skip only if user already provided explicit affiliation history
86
+
87
+ 3. **Profile URL fallback chain** (Scopus requires auth, so plan alternatives):
88
+ - 1st: PubMed full name search (always works)
89
+ - 2nd: Google Scholar profile (WebSearch `"[Full Name]" radiology scholar`)
90
+ - 3rd: ResearchGate profile (WebSearch `"[Full Name]" researchgate radiology`)
91
+ - 4th: ScholarWorks / SKKU / university faculty page (if URL provided)
92
+ - Last: Scopus/ScienceDirect (often fails due to auth — do NOT rely on it)
93
+
94
+ ---
95
+
96
+ ### Phase 1: Profile Exploration (E-utilities API)
97
+
98
+ **Goal:** Identify the professor's 5-6 distinct research pillars using PubMed E-utilities API.
99
+
100
+ **CRITICAL — Use E-utilities API, NOT WebFetch for PubMed:**
101
+ - Scripts: `~/.claude/skills/search-lit/references/pubmed_eutils.sh` + `parse_pubmed.py`
102
+ - Rate limit: 350ms between calls (100ms with NCBI_API_KEY)
103
+ - These are faster, more reliable, and return structured data (JSON/XML)
104
+
105
+ **Step 1 — Total publication count + PMID list:**
106
+ ```bash
107
+ bash ~/.claude/skills/search-lit/references/pubmed_eutils.sh search \
108
+ '"[Full Name]"[Author]' 200 \
109
+ | python3 ~/.claude/skills/search-lit/references/parse_pubmed.py esearch
110
+ ```
111
+
112
+ **Step 2 — Fetch metadata for MeSH-based clustering (parallel):**
113
+ ```bash
114
+ # Get PMIDs from Step 1, then fetch summaries
115
+ bash ~/.claude/skills/search-lit/references/pubmed_eutils.sh fetch_json \
116
+ "PMID1,PMID2,..." \
117
+ | python3 ~/.claude/skills/search-lit/references/parse_pubmed.py esummary
118
+ ```
119
+
120
+ **Step 3 — Topic-specific counts (launch 4-5 searches in parallel via Bash):**
121
+ ```bash
122
+ # Run these in parallel Bash calls
123
+ bash ~/.claude/skills/search-lit/references/pubmed_eutils.sh search \
124
+ '"[Full Name]"[Author] AND "keyword1"' 5
125
+ bash ~/.claude/skills/search-lit/references/pubmed_eutils.sh search \
126
+ '"[Full Name]"[Author] AND "keyword2"' 5
127
+ # ... repeat for each suspected pillar keyword
128
+ ```
129
+
130
+ **Step 4 — MeSH term extraction for automatic pillar clustering:**
131
+ ```bash
132
+ # Fetch full XML for top-cited papers to extract MeSH headings
133
+ bash ~/.claude/skills/search-lit/references/pubmed_eutils.sh fetch \
134
+ "PMID1,PMID2,...,PMID20" \
135
+ | python3 -c "
136
+ import sys, xml.etree.ElementTree as ET
137
+ from collections import Counter
138
+ root = ET.fromstring(sys.stdin.read())
139
+ mesh_counts = Counter()
140
+ for article in root.findall('.//PubmedArticle'):
141
+ for mh in article.findall('.//MeshHeading/DescriptorName'):
142
+ mesh_counts[mh.text] += 1
143
+ for term, count in mesh_counts.most_common(30):
144
+ print(f'{count:3d} {term}')
145
+ "
146
+ ```
147
+ → Top MeSH terms reveal natural research pillars (e.g., "Colonography, Computed Tomographic" = CTC pillar).
148
+
149
+ **Step 5 — Google Scholar profile (parallel with PubMed calls):**
150
+ - WebSearch: `"[Full Name]" radiology scholar google` for h-index, citation data
151
+
152
+ **Output: Pillar Summary Table**
153
+
154
+ | Pillar | Domain | Representative keywords | MeSH terms | Est. # papers |
155
+ |--------|--------|-------------------------|-----------|---------------|
156
+ | 1 | ... | ... | ... | ~N+ |
157
+
158
+ ---
159
+
160
+ ### Phase 2: MA Gap Analysis (Multi-Source)
161
+
162
+ **Goal:** For each pillar, determine if a viable MA topic exists using PubMed + Consensus + Scholar Gateway + bioRxiv.
163
+
164
+ For each pillar (run in parallel using meta-analyst agents):
165
+
166
+ #### 2a. PubMed E-utilities — Existing MAs + Primary studies
167
+
168
+ ```bash
169
+ # Existing MAs (structured count)
170
+ bash ~/.claude/skills/search-lit/references/pubmed_eutils.sh search \
171
+ '[pillar keywords] AND ("meta-analysis"[pt] OR "systematic review"[pt])' 50
172
+
173
+ # Primary studies with extractable outcomes
174
+ bash ~/.claude/skills/search-lit/references/pubmed_eutils.sh search \
175
+ '[pillar keywords] AND ("sensitivity" OR "specificity" OR "accuracy" OR "prognosis" OR "outcome")' 50
176
+ ```
177
+
178
+ #### 2b. Consensus MCP — Semantic MA gap detection
179
+
180
+ Use `mcp__claude_ai_Consensus__search` to find existing SRs/MAs that PubMed keyword search might miss:
181
+ ```
182
+ query: "systematic review OR meta-analysis [pillar topic] [imaging modality]"
183
+ ```
184
+ Consensus returns citation-ranked results — check if any highly-cited MA already covers the proposed scope.
185
+ **Limit:** max 3 Consensus calls per Phase 2 batch (rate limit).
186
+
187
+ #### 2c. Scholar Gateway — Semantic similarity search
188
+
189
+ Use `mcp__claude_ai_Scholar_Gateway__semanticSearch` for:
190
+ - Finding MAs with different terminology (e.g., "pooled analysis" instead of "meta-analysis")
191
+ - Detecting scope-overlapping MAs that use different keywords
192
+ - Identifying methodological review papers that partially cover the topic
193
+
194
+ #### 2d. bioRxiv/medRxiv — In-press competition detection
195
+
196
+ Use `mcp__claude_ai_bioRxiv__search_preprints` to catch:
197
+ - MAs posted as preprints but not yet indexed in PubMed
198
+ - Ongoing SR/MA protocols shared as preprints
199
+ - Very recent primary studies that could change feasibility
200
+
201
+ ```
202
+ query: "[pillar keywords] meta-analysis OR systematic review"
203
+ server: "medrxiv" (for clinical topics)
204
+ ```
205
+
206
+ #### 2e. Assessment matrix
207
+
208
+ | Factor | Criteria |
209
+ |--------|----------|
210
+ | MA gap | 0 existing = best, 1-3 = check scope overlap, >5 = saturated |
211
+ | Primary k | ≥8 for DTA, ≥6 for prognostic (minimum), ≥15 ideal |
212
+ | Recency | Last MA >5 years old = update opportunity |
213
+ | Competition | Check 2024-2026 for very recent MAs that block entry |
214
+
215
+ #### 2f. PROSPERO competition check (MANDATORY)
216
+
217
+ - Search PROSPERO via WebSearch: `site:crd.york.ac.uk/prospero [topic keywords]`
218
+ - Also try WebFetch: `https://www.crd.york.ac.uk/prospero/#searchadvanced`
219
+ - Look for registered-but-unpublished protocols that could block entry
220
+ - If PROSPERO match found → flag as 🚫 competition risk in ranking
221
+
222
+ #### 2g. Realistic k estimation
223
+
224
+ - Raw PubMed hit count is NOT the real k — most studies lack 2x2 data or HR
225
+ - Apply conservative discount: **k_realistic ≈ raw_count × 0.15–0.30** for DTA topics
226
+ - Flag if k_realistic < 8 (DTA) or < 6 (prognostic) as ⚠️ feasibility risk
227
+ - Report both raw and realistic estimates, e.g., `estimated k: ~130 (raw) → ~20–40 (extractable DTA data)`
228
+
229
+ #### 2h. Niche subtopic discovery (if pillar appears saturated)
230
+
231
+ - AI/radiomics angle on a classical topic
232
+ - Specific modality comparison (e.g., CEUS vs MRI)
233
+ - Treatment response (vs diagnosis which is often saturated)
234
+ - Specific subpopulation or disease subtype
235
+ - Use Consensus to check if the niche angle has already been covered
236
+
237
+ ---
238
+
239
+ ### Phase 3: Topic Ranking
240
+
241
+ **Goal:** Rank all viable topics by composite score.
242
+
243
+ Score each candidate on 5 criteria (★1-5):
244
+
245
+ | Criteria | Weight | Description |
246
+ |----------|--------|-------------|
247
+ | **Professor fit** | Highest | Core area of the professor's career, publication count, distinctive contribution |
248
+ | **MA gap** | High | No prior MA > ≥5 yr since last MA > recent MA exists |
249
+ | **Feasibility (k)** | High | Number of includable studies and extractability of 2×2 or HR data |
250
+ | **Clinical impact** | Medium | Whether the topic directly informs clinical decision-making |
251
+ | **Execution ease** | Medium | Completable from literature alone; difficulty of managing heterogeneity |
252
+
253
+ **Output: Ranked Topic Table**
254
+
255
+ | Rank | Topic | Professor's Pillar | Prior MA | Estimated k (raw→realistic) | PROSPERO competition | Verdict |
256
+ |------|-------|--------------------|----------|-----------------------------|----------------------|---------|
257
+ | 1 | ... | ... | 0 | ~98 → 15–30 | None | ✅ Best fit |
258
+
259
+ ---
260
+
261
+ ### Phase 4: Folder & README Scaffolding
262
+
263
+ **Goal:** Create project folders and README for each viable topic.
264
+
265
+ 1. **Folder location:** `{working_dir}/ma-scout/{initials}_{professor_name}/`
266
+ 2. **Naming convention:** `{NN}_{topic_slug}/` (within professor folder)
267
+ - Professor folder: `{initials}_{name}` (e.g., `KDK_Kim`, `LKS_Lee`)
268
+ - NN: sequential number within professor (01, 02, ...)
269
+ - topic_slug: English, underscore-separated
270
+ - Check existing folders with `ls` before creating
271
+
272
+ 3. **README.md template (PROSPERO-ready):**
273
+ Load the bilingual template block from
274
+ `${CLAUDE_SKILL_DIR}/references/project_readme_template.md` and copy it into
275
+ `{topic_folder}/README.md`. The reference covers both supervised (Mode A) and
276
+ solo-mode (Mode B, no supervisor) variants and contains the PICO/PIRD frame,
277
+ preliminary search, target journal table, and backward-planned timeline.
278
+
279
+ ---
280
+
281
+ ### Phase 5: Output Summary
282
+
283
+ **Goal:** Persist findings for the user.
284
+
285
+ 1. Save the ranked topic table and README files to the working directory.
286
+ 2. Summarize: total topics scanned, viable topics found, recommended next steps.
287
+ 3. Suggest the user save results to their project management system (e.g., `/manage-project`).
288
+
289
+ ---
290
+
291
+ ## Niche Topic Discovery Heuristics
292
+
293
+ When all major pillars are saturated (>5 prior MAs), try these angles:
294
+
295
+ 1. **"First MA" rule:** Professor's most unique/niche subtopic where MA = 0
296
+ 2. **AI/radiomics overlay:** Classical imaging topic + AI approach = new MA angle
297
+ 3. **Treatment response:** Diagnosis MAs saturated → treatment monitoring MA often open
298
+ 4. **Modality comparison:** Head-to-head (e.g., CEUS vs MRI) often underserved
299
+ 5. **Guideline gap:** Professor authored guidelines → MA supporting/updating those guidelines
300
+ 6. **Geographic/population niche:** Regional population-specific MA (e.g., parasitic diseases, TB)
301
+ 7. **Temporal update:** Last MA >5 years old + significant new primary studies since
302
+
303
+ ---
304
+
305
+ ## Quality Gates
306
+
307
+ Before finalizing a topic as viable:
308
+
309
+ - [ ] **Author identity confirmed** — full name resolved via E-utilities efetch, no initials-only contamination
310
+ - [ ] **Affiliation confirmed** with user (or from reliable source)
311
+ - [ ] Confirmed MA = 0 or last MA >5 years (via PubMed E-utilities, not assumption)
312
+ - [ ] **Cross-validated via Consensus/Scholar Gateway** — no hidden MAs with different terminology
313
+ - [ ] **bioRxiv/medRxiv checked** — no preprint MA in progress
314
+ - [ ] Confirmed k_realistic ≥ 8 (DTA) or ≥ 6 (prognostic) after discount
315
+ - [ ] **PROSPERO searched** — no registered competing protocol found
316
+ - [ ] No 2024-2026 competing MA in press (check PubMed + preprints)
317
+ - [ ] Professor's publication record demonstrates clear authority in this area
318
+ - [ ] Research question is specific enough for PROSPERO registration
319
+ - [ ] **README contains:** complete PICO/PIRD, PubMed search strategy, Embase draft, target journal with IF, timeline
320
+
321
+ ---
322
+
323
+ ## Handoff
324
+
325
+ After MA Scout completes:
326
+ - To **`/meta-analysis`**: When a topic is approved and ready for PROSPERO protocol (README has PICO + search strategy ready)
327
+ - To **`manage-project`**: When project folder needs full scaffolding
328
+ - To **`search-lit`**: When deeper preliminary search is needed before committing
329
+ - To **`/analyze-stats`**: When feasibility requires power/sample-size calculation for the estimated k
330
+
331
+ ---
332
+
333
+ ## Parallel Execution Strategy
334
+
335
+ For efficiency, launch multiple agents and API calls in parallel:
336
+
337
+ **Phase 0 (Identity):**
338
+ 1. E-utilities esearch: `"[Full Name]"[Author]` → total count + PMIDs (FIRST)
339
+ 2. E-utilities efetch: top 20 PMIDs → MeSH terms → automatic pillar clustering
340
+
341
+ **Phase 1 (Profile — all parallel):**
342
+ 3. Bash × 4-5: E-utilities esearch with topic-specific filters (parallel Bash calls)
343
+ 4. WebSearch: Google Scholar profile
344
+ 5. WebFetch: any provided profile URLs (skip Scopus)
345
+
346
+ **Phase 2 (MA Gap — multi-source parallel):**
347
+ 6. Up to 4 meta-analyst agents in parallel, each covering 1-2 pillars
348
+ 7. Each agent runs ALL of:
349
+ - E-utilities esearch: existing MA count + primary study count
350
+ - Consensus MCP: semantic MA search (max 3 calls total across all agents)
351
+ - Scholar Gateway: scope-overlap check
352
+ - bioRxiv/medRxiv: preprint MA detection
353
+ - PROSPERO: competition check (WebSearch)
354
+ 8. Each agent reports: raw k, realistic k (15-30% discount), all sources checked
355
+
356
+ **Phase 3 (Ranking):** Sequential, uses Phase 2 outputs.
357
+
358
+ **Phase 4 (Scaffolding):** Sequential, creates folders + PROSPERO-ready READMEs.
359
+
360
+ Total (Mode A): 5-8 parallel agents per professor, ~8-12 minutes per professor.
361
+
362
+ ### Mode B Parallel Strategy
363
+
364
+ **T-Phase 0:** Sequential (user interaction for scope clarification).
365
+
366
+ **T-Phase 1 (Landscape — all angles in parallel):**
367
+ 1. Per angle: Bash (PubMed MA count) + Bash (primary k) + Consensus + bioRxiv + PROSPERO
368
+ 2. 3-5 angles × 5 sources = 15-25 parallel calls
369
+
370
+ **T-Phase 2 (Deep-dive):** Same as Mode A Phase 2, only for viable angles (typically 1-2).
371
+
372
+ **T-Phase 4 (Co-author — if needed):**
373
+ 3. Bash: PubMed author frequency search
374
+ 4. WebSearch: Google Scholar profiles for top candidates
375
+
376
+ Total (Mode B): ~5-8 minutes per topic scan (faster than Mode A — no profile exploration).
377
+
378
+ ### Known Pitfalls (from 3 professor analyses)
379
+ - Common Korean/Asian initials (e.g., "Lee KS", "Kim DK") return 300+ papers with massive contamination. Always use full name first.
380
+ - Scopus/ScienceDirect → 403 or redirect to login. Never rely on Scopus as primary data source.
381
+ - Raw PubMed counts overestimate by 3-7x. ~130 hits often means 20-40 with extractable DTA data.
382
+ - Professor may have moved institutions. Don't assume affiliation without verification.
383
+ - **Consensus rate limit:** Max 3 batch calls. If rate-limited, wait 30s and retry once.
384
+ - **E-utilities rate limit:** 350ms between calls (100ms with NCBI_API_KEY). Scripts handle this automatically.
385
+ - **bioRxiv MCP:** Use `server: "medrxiv"` for clinical topics, `server: "biorxiv"` for preclinical.
386
+
387
+ ---
388
+
389
+ # ═══════════════════════════════════════════
390
+ # MODE B: TOPIC-FIRST WORKFLOW
391
+ # ═══════════════════════════════════════════
392
+
393
+ ### T-Phase 0: Topic Clarification & Scope
394
+
395
+ **Goal:** Refine the user's clinical question into a searchable, PROSPERO-registrable scope.
396
+
397
+ 1. **Parse the input** — extract:
398
+ - Disease/condition (e.g., "lung nodule", "hepatocellular carcinoma")
399
+ - Imaging modality or intervention (e.g., "dual-energy CT", "AI CAD")
400
+ - Outcome type: DTA (Se/Sp), prognostic (HR/OR), intervention (RR/MD), dosimetry
401
+ - Population specifics (e.g., "screening setting", "cirrhotic patients")
402
+
403
+ 2. **Expand to neighboring angles** — propose 3-5 variations:
404
+ ```
405
+ user input: "AI for lung nodule malignancy prediction"
406
+ → variant 1: AI vs radiologist for lung nodule malignancy prediction (DTA)
407
+ → variant 2: Radiomics for lung nodule malignancy (DTA)
408
+ → variant 3: Deep learning for incidental pulmonary nodule management (prognostic)
409
+ → variant 4: AI-assisted Lung-RADS upgrade accuracy (DTA)
410
+ → variant 5: Low-dose CT AI for lung cancer screening (DTA)
411
+ ```
412
+
413
+ 3. **User selects 1-3 angles** to investigate further.
414
+
415
+ ---
416
+
417
+ ### T-Phase 1: Landscape Scan (Multi-Source)
418
+
419
+ **Goal:** For each selected angle, rapidly assess the MA landscape.
420
+
421
+ **Run all angles in parallel. For each angle:**
422
+
423
+ #### 1a. PubMed — Existing MA count
424
+ ```bash
425
+ bash ~/.claude/skills/search-lit/references/pubmed_eutils.sh search \
426
+ '[topic keywords] AND ("meta-analysis"[pt] OR "systematic review"[pt])' 50
427
+ ```
428
+
429
+ #### 1b. PubMed — Primary study pool
430
+ ```bash
431
+ bash ~/.claude/skills/search-lit/references/pubmed_eutils.sh search \
432
+ '[topic keywords] AND ("sensitivity" OR "specificity" OR "hazard" OR "outcome")' 100
433
+ ```
434
+
435
+ #### 1c. Consensus MCP — Semantic MA discovery
436
+ ```
437
+ query: "systematic review [topic] [modality]"
438
+ ```
439
+ Check for MAs using different terminology.
440
+
441
+ #### 1d. bioRxiv/medRxiv — Preprint competition
442
+ ```
443
+ query: "[topic] meta-analysis"
444
+ server: "medrxiv"
445
+ ```
446
+
447
+ #### 1e. PROSPERO — Registered protocols
448
+ WebSearch: `site:crd.york.ac.uk/prospero [topic keywords]`
449
+
450
+ **Output: Landscape Summary Table**
451
+
452
+ | Variant | Existing MAs | Primary k (raw) | k (realistic) | PROSPERO | Preprint MA | Verdict |
453
+ |---------|--------------|-----------------|---------------|----------|-------------|---------|
454
+ | 1 | 3 | 120 | 18-36 | 1 | 0 | ⚠️ Competitive |
455
+ | 2 | 0 | 85 | 13-25 | 0 | 0 | ✅ Optimal |
456
+
457
+ ---
458
+
459
+ ### T-Phase 2: Feasibility Deep-Dive
460
+
461
+ **Goal:** For viable angles (MA ≤ 2, no PROSPERO conflict), run full gap analysis.
462
+
463
+ This phase uses the **same Phase 2 (MA Gap Analysis)** as Mode A — steps 2a through 2h.
464
+ The only difference: no "Professor fit" to evaluate, so focus on:
465
+ - **Gap certainty** — are existing MAs truly non-overlapping with proposed scope?
466
+ - **k quality** — are primary studies heterogeneous enough to warrant MA, or too uniform?
467
+ - **User's domain fit** — does this align with user's radiology AI / imaging expertise?
468
+
469
+ ---
470
+
471
+ ### T-Phase 3: Topic Ranking (Topic-first weights)
472
+
473
+ **Goal:** Rank viable topics with weights adjusted for topic-first approach.
474
+
475
+ | Criteria | Weight | Description |
476
+ |----------|--------|-------------|
477
+ | **MA gap** | Highest | No existing MA > update opportunity > saturated |
478
+ | **Feasibility (k)** | Highest | k_realistic ≥ 8 (DTA) or ≥ 6 (prognostic) |
479
+ | **User domain fit** | High | Does it match the user's area of expertise? |
480
+ | **Clinical impact** | Medium | Potential to change guidelines; directly tied to clinical decisions |
481
+ | **Co-author availability** | Medium | Access to a domain expert (existing relationship or easy to reach) |
482
+ | **Execution ease** | Medium | Can be done solo vs requires expert interpretation |
483
+
484
+ **Output: Ranked Topic Table**
485
+
486
+ | Rank | Topic | Existing MAs | Est. k | PROSPERO | Co-author needed | Overall |
487
+ |------|-------|--------------|--------|----------|------------------|---------|
488
+ | 1 | ... | 0 | 25 | None | Optional | ✅ Optimal |
489
+
490
+ ---
491
+
492
+ ### T-Phase 4: Co-Author Matching (Optional)
493
+
494
+ **Goal:** If the user wants a senior co-author, find candidates.
495
+
496
+ **Strategy 1 — Existing network (memory-based):**
497
+ - Check memory files for professors with overlapping expertise
498
+ - Cross-reference existing professor folders in the working directory
499
+ - Best match = professor whose pillar naturally covers this topic
500
+
501
+ **Strategy 2 — PubMed reverse search:**
502
+ ```bash
503
+ # Find prolific authors in this specific topic
504
+ bash ~/.claude/skills/search-lit/references/pubmed_eutils.sh search \
505
+ '[topic keywords] AND ("{user_country}"[Affiliation])' 100
506
+ ```
507
+ Then:
508
+ - E-utilities efetch → extract author frequency from results
509
+ - Top 5 most-published authors in this niche = potential co-authors
510
+ - Cross-check Google Scholar for h-index and recent activity
511
+
512
+ **Strategy 3 — Self-led (no senior co-author):**
513
+ - Viable when: user has 2+ published MAs, topic is methodologically straightforward
514
+ - Still need 2nd reviewer (junior colleague or peer) — flag this in README
515
+ - Corresponding author = user
516
+
517
+ **Output:** Co-author recommendation table or a "solo-viable" judgment.
518
+
519
+ ---
520
+
521
+ ### T-Phase 5: Folder & README Scaffolding (Topic-first)
522
+
523
+ **Goal:** Create project folder and PROSPERO-ready README.
524
+
525
+ 1. **Folder location:** `{working_dir}/ma-scout/TOPIC/`
526
+ - Topic-first projects use `TOPIC/` prefix (not professor initials)
527
+ - Naming: `{NN}_{Topic_Abbreviation}/` (e.g., `01_AI_Lung_Nodule_DTA/`)
528
+ - If co-author matched later, can be moved under professor folder
529
+
530
+ 2. **README.md template:** Same PROSPERO-ready template as Mode A Phase 4 (see
531
+ `references/project_readme_template.md`), with these changes:
532
+ - `Supervisor:` → `Lead: {user_name}` or `Lead: {user_name} + {co-author}`
533
+ - Drop the supervisor-area row; use `Domain: {subspecialty}` instead.
534
+ - Rename `Professor's Authority` → `Team Expertise` (user's credentials + co-author if any)
535
+ - Timeline: drop the supervisor-proposal step → start directly at PROSPERO registration.
536
+
537
+ **Timeline template (self-led):**
538
+ | Step | Expected timing | Precondition |
539
+ |------|-----------------|--------------|
540
+ | PROSPERO registration | {YYYY-MM} | topic confirmed |
541
+ | Search complete | +1 week | PROSPERO registration |
542
+ | Screening complete | +2 weeks | 2nd reviewer secured |
543
+ | Data extraction | +3 weeks | screening consensus |
544
+ | Analysis + draft | +5 weeks | data lock |
545
+ | Co-author review | +7 weeks | draft complete |
546
+ | Submission | +8 weeks | final approval |
547
+
548
+ 3. **Summary:** Same as Mode A Phase 5 — save ranked results and recommend next steps.
549
+
550
+ ---
551
+
552
+ ### Topic Discovery Heuristics (Mode B specific)
553
+
554
+ When the user asks for topic suggestions without a specific idea:
555
+
556
+ 1. **Trend scan** — Search recent high-IF radiology journals for "gap in the literature" + "meta-analysis needed":
557
+ ```bash
558
+ bash ~/.claude/skills/search-lit/references/pubmed_eutils.sh search \
559
+ '"no meta-analysis" AND "radiology"[Journal] AND 2024:2026[dp]' 30
560
+ ```
561
+
562
+ 2. **Guideline update gaps** — New guidelines (ACR, ESR, RSNA) often cite lack of MA evidence:
563
+ - Consensus search: `"practice guideline" AND "insufficient evidence" AND [radiology subspecialty]`
564
+
565
+ 3. **AI + classical imaging** — Overlay AI/DL/radiomics on well-studied classical topics:
566
+ - Many classical DTA topics have 10+ MAs, but AI angle has 0-1
567
+
568
+ 4. **Korean/Asian population** — Population-specific MA for diseases with geographic variation:
569
+ - TB, NTM, parasitic diseases, gastric cancer, liver fluke, HBV-related HCC
570
+
571
+ 5. **Technology adoption** — New modalities with growing evidence but no synthesis:
572
+ - Photon-counting CT, abbreviated MRI, contrast-enhanced mammography, AI CAD
573
+
574
+ 6. **Cross-subspecialty** — Topics spanning two subspecialties often fall through MA cracks:
575
+ - Cardiac + thoracic (coronary CT + lung screening), neuro + MSK (spine imaging)
576
+
577
+ ---
578
+
579
+ ### Quality Gates (Mode B specific)
580
+
581
+ Before finalizing a topic-first MA as viable:
582
+
583
+ - [ ] Clinical question refined to PICO/PIRD (not just a keyword)
584
+ - [ ] MA gap confirmed via PubMed + Consensus + Scholar Gateway + bioRxiv (all 4 sources)
585
+ - [ ] k_realistic ≥ 8 (DTA) or ≥ 6 (prognostic) after 15-30% discount
586
+ - [ ] PROSPERO searched — no competing registered protocol
587
+ - [ ] No 2024-2026 competing MA in press or preprint
588
+ - [ ] User's domain expertise sufficient for clinical interpretation (or co-author identified)
589
+ - [ ] 2nd reviewer identified or plan to recruit
590
+ - [ ] README contains: complete PICO/PIRD, PubMed + Embase search strategy, target journal with IF, timeline
591
+ - [ ] If self-led: user has ≥ 2 published MAs (otherwise, recommend co-author)
592
+
593
+ ---
594
+
595
+ ## Phase 6: Pre-Proposal Pipeline (Post-Scout)
596
+
597
+ After MA Scout identifies viable topics, run the **pre-proposal pipeline** to prepare
598
+ a "ready-to-propose" package before contacting the professor.
599
+
600
+ ### Pipeline Steps
601
+
602
+ 1. **Search Execution** — E-utilities with broadened synonyms (retmax=200)
603
+ - Primary search: `[topic] AND [outcome keywords]`
604
+ - Existing MA search: `[topic] AND ("meta-analysis"[pt] OR "systematic review"[pt])`
605
+
606
+ 2. **Metadata Collection** — `fetch_json` → `esummary` (batch 40-50 PMIDs)
607
+
608
+ 3. **Title-Based Triage** — Classify as INCLUDE / MAYBE / EXCLUDE
609
+ - CRITICAL: Check for existing MAs within results (initial scout may miss them)
610
+ - Separate bronchoscopic vs percutaneous (30% contamination in CBCT topics)
611
+ - Flag professor's own papers (authority evidence)
612
+ - Flag retracted papers
613
+
614
+ 4. **PRISMA Flow Draft** — Identification → Screening → Eligibility → Included (estimated)
615
+
616
+ 5. **Gap Re-assessment** — Update MA count, re-position if needed:
617
+ - MA=0 → "first MA" | MA=1 (>5yr) → "update MA" | MA≥3 (recent) → skip/niche
618
+
619
+ 6. **Output Files**:
620
+ - `candidates.md` — full triage table + PRISMA flow + gap finding
621
+ - `README.md` — updated Preliminary Search section with actual numbers
622
+
623
+ ### Parallel Execution
624
+ - Launch up to 4 agents per wave (each topic independent)
625
+ - Each agent: search → fetch → triage → write files → ~5-10 min
626
+ - 21 topics completed in ~1 hour with 16 parallel agents
627
+
628
+ ### Professor Contact Package
629
+ The pre-proposal gives the professor:
630
+ - Candidate count + gap evidence (e.g., "MA = 0, 35 studies to include")
631
+ - Clear role description (e.g., "independent screening review + discussion only")
632
+ - Urgency of PROSPERO pre-registration to secure the topic
633
+
634
+ ## Anti-Hallucination
635
+
636
+ - **Never fabricate publication counts, h-index, or pillar classifications.** All numbers must come from PubMed E-utilities API output.
637
+ - **Never fabricate existing MA counts.** Always verify via PubMed search + PROSPERO check before claiming "MA = 0".
638
+ - **Never invent professor expertise or affiliation.** Confirm with user before proceeding.
639
+ - **k_realistic must use the 15-30% discount.** Raw PubMed counts overestimate by 3-7x. Always report both raw and realistic estimates.
640
+ - If PubMed returns 0 or Consensus/Scholar Gateway is unavailable, state the limitation rather than guessing.