@brainpilot/skills 0.0.6 → 0.0.7

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 (285) hide show
  1. package/package.json +2 -2
  2. package/skills/01_Meta-Skills/academic-research-hub/SKILL.md +108 -0
  3. package/skills/01_Meta-Skills/academic-research-hub/scripts/requirements.txt +17 -0
  4. package/skills/01_Meta-Skills/academic-research-hub/scripts/research.py +781 -0
  5. package/skills/01_Meta-Skills/beautiful-log/SKILL.md +64 -0
  6. package/skills/01_Meta-Skills/beautiful-log/scripts/beautiful_log.py +274 -0
  7. package/skills/01_Meta-Skills/ethoclaw-daily-paper/SKILL.md +130 -0
  8. package/skills/01_Meta-Skills/ethoclaw-daily-paper/assets/config.template.yaml +54 -0
  9. package/skills/01_Meta-Skills/ethoclaw-daily-paper/assets/top5_digest_template.md +5 -0
  10. package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/build_top5_digest.py +300 -0
  11. package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/common.py +137 -0
  12. package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/merge_results.py +106 -0
  13. package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/run_pipeline.py +177 -0
  14. package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/search_arxiv.py +162 -0
  15. package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/search_pubmed.py +202 -0
  16. package/skills/01_Meta-Skills/ethoclaw-normalize-tabular/SKILL.md +173 -0
  17. package/skills/01_Meta-Skills/ethoclaw-normalize-tabular/scripts/normalize_data.py +874 -0
  18. package/skills/01_Meta-Skills/ethoclaw-pdf-research/SKILL.md +134 -0
  19. package/skills/01_Meta-Skills/ethoclaw-pdf-research/references/confirmation-prompts.md +31 -0
  20. package/skills/01_Meta-Skills/ethoclaw-pdf-research/references/output-patterns.md +45 -0
  21. package/skills/01_Meta-Skills/ethoclaw-pdf-research/scripts/build_markdown_deliverables.py +41 -0
  22. package/skills/01_Meta-Skills/ethoclaw-pdf-research/scripts/build_research_log.py +84 -0
  23. package/skills/01_Meta-Skills/ethoclaw-pdf-research/scripts/build_summary_md.py +63 -0
  24. package/skills/01_Meta-Skills/ethoclaw-pdf-research/scripts/extract_pdf_bundle.py +140 -0
  25. package/skills/01_Meta-Skills/experiment-controller/SKILL.md +140 -0
  26. package/skills/01_Meta-Skills/knowledge-graph-builder/SKILL.md +366 -0
  27. package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/entity_resolution.py +120 -0
  28. package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/extraction_prompt_template.txt +19 -0
  29. package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/graph_query.py +106 -0
  30. package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/hypothesis_cli_reference.py +42 -0
  31. package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/new_data_source_template.py +116 -0
  32. package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/requirements.txt +15 -0
  33. package/skills/01_Meta-Skills/method-design/SKILL.md +61 -0
  34. package/skills/01_Meta-Skills/multi-search-engine/SKILL.md +119 -0
  35. package/skills/01_Meta-Skills/research-idea/SKILL.md +65 -0
  36. package/skills/05_EEG_ERP/eeg-skill/SKILL.md +197 -0
  37. package/skills/05_EEG_ERP/meg-skill/SKILL.md +188 -0
  38. package/skills/05_EEG_ERP/meg-skill/scripts/time_frequency.py +223 -0
  39. package/skills/05_EEG_ERP/mne-eeg-tool/SKILL.md +165 -0
  40. package/skills/05_EEG_ERP/mne-eeg-tool/scripts/eeg_pipeline_reference.py +231 -0
  41. package/skills/05_EEG_ERP/seed-iv-skill/SKILL.md +184 -0
  42. package/skills/05_EEG_ERP/seed-iv-skill/scripts/classify_seed_iv.py +154 -0
  43. package/skills/05_EEG_ERP/seed-iv-skill/scripts/extract_seed_iv_features.py +190 -0
  44. package/skills/05_EEG_ERP/seed-iv-skill/scripts/validate_seed_iv.py +102 -0
  45. package/skills/05_EEG_ERP/seed-vig-skill/SKILL.md +182 -0
  46. package/skills/05_EEG_ERP/seed-vig-skill/scripts/classify_seed_vig.py +165 -0
  47. package/skills/05_EEG_ERP/seed-vig-skill/scripts/extract_seed_vig_features.py +185 -0
  48. package/skills/05_EEG_ERP/seed-vig-skill/scripts/validate_seed_vig.py +88 -0
  49. package/skills/06_fMRI_Neuroimaging/abcd-skill/SKILL.md +308 -0
  50. package/skills/06_fMRI_Neuroimaging/abcd-skill/scripts/abcd_qc_summary.py +449 -0
  51. package/skills/06_fMRI_Neuroimaging/abcd-skill/scripts/extract_abcd_phenotype.py +292 -0
  52. package/skills/06_fMRI_Neuroimaging/abcd-skill/scripts/reorganize_abcd.py +387 -0
  53. package/skills/06_fMRI_Neuroimaging/abide-skill/SKILL.md +302 -0
  54. package/skills/06_fMRI_Neuroimaging/abide-skill/scripts/abide_qc_summary.py +317 -0
  55. package/skills/06_fMRI_Neuroimaging/abide-skill/scripts/extract_abide_phenotype.py +267 -0
  56. package/skills/06_fMRI_Neuroimaging/abide-skill/scripts/reorganize_abide.py +387 -0
  57. package/skills/06_fMRI_Neuroimaging/adhd200-skill/SKILL.md +244 -0
  58. package/skills/06_fMRI_Neuroimaging/adhd200-skill/scripts/adhd200_qc_summary.py +98 -0
  59. package/skills/06_fMRI_Neuroimaging/adhd200-skill/scripts/extract_adhd200_phenotype.py +134 -0
  60. package/skills/06_fMRI_Neuroimaging/adhd200-skill/scripts/reorganize_adhd200.py +206 -0
  61. package/skills/06_fMRI_Neuroimaging/adni-skill/SKILL.md +358 -0
  62. package/skills/06_fMRI_Neuroimaging/adni-skill/scripts/generate_adni_task_files.py +1305 -0
  63. package/skills/06_fMRI_Neuroimaging/adni-skill/scripts/generate_vqa_from_tasks.py +766 -0
  64. package/skills/06_fMRI_Neuroimaging/adni-skill/scripts/reorganize_adni.py +491 -0
  65. package/skills/06_fMRI_Neuroimaging/aibl-skill/SKILL.md +295 -0
  66. package/skills/06_fMRI_Neuroimaging/aibl-skill/scripts/aibl_qc_summary.py +260 -0
  67. package/skills/06_fMRI_Neuroimaging/aibl-skill/scripts/extract_aibl_phenotype.py +365 -0
  68. package/skills/06_fMRI_Neuroimaging/aibl-skill/scripts/reorganize_aibl.py +394 -0
  69. package/skills/06_fMRI_Neuroimaging/aomic-skill/SKILL.md +292 -0
  70. package/skills/06_fMRI_Neuroimaging/aomic-skill/scripts/aomic_qc_summary.py +258 -0
  71. package/skills/06_fMRI_Neuroimaging/aomic-skill/scripts/extract_aomic_phenotype.py +284 -0
  72. package/skills/06_fMRI_Neuroimaging/aomic-skill/scripts/reorganize_aomic.py +322 -0
  73. package/skills/06_fMRI_Neuroimaging/asl-skill/SKILL.md +168 -0
  74. package/skills/06_fMRI_Neuroimaging/asl-skill/scripts/compute_cbf.py +224 -0
  75. package/skills/06_fMRI_Neuroimaging/bids-organizer/SKILL.md +241 -0
  76. package/skills/06_fMRI_Neuroimaging/bold5000-skill/SKILL.md +186 -0
  77. package/skills/06_fMRI_Neuroimaging/bold5000-skill/scripts/bold5000_qc_summary.py +96 -0
  78. package/skills/06_fMRI_Neuroimaging/bold5000-skill/scripts/extract_bold5000_stimulus.py +125 -0
  79. package/skills/06_fMRI_Neuroimaging/bold5000-skill/scripts/reorganize_bold5000.py +102 -0
  80. package/skills/06_fMRI_Neuroimaging/camcan-skill/SKILL.md +213 -0
  81. package/skills/06_fMRI_Neuroimaging/camcan-skill/scripts/camcan_qc_summary.py +131 -0
  82. package/skills/06_fMRI_Neuroimaging/camcan-skill/scripts/extract_camcan_phenotype.py +145 -0
  83. package/skills/06_fMRI_Neuroimaging/camcan-skill/scripts/validate_camcan.py +141 -0
  84. package/skills/06_fMRI_Neuroimaging/cobre-skill/SKILL.md +201 -0
  85. package/skills/06_fMRI_Neuroimaging/cobre-skill/scripts/cobre_qc_summary.py +95 -0
  86. package/skills/06_fMRI_Neuroimaging/cobre-skill/scripts/extract_cobre_phenotype.py +104 -0
  87. package/skills/06_fMRI_Neuroimaging/cobre-skill/scripts/reorganize_cobre.py +140 -0
  88. package/skills/06_fMRI_Neuroimaging/conn-tool/SKILL.md +180 -0
  89. package/skills/06_fMRI_Neuroimaging/dcm2nii/SKILL.md +189 -0
  90. package/skills/06_fMRI_Neuroimaging/dmt-har-med-skill/SKILL.md +183 -0
  91. package/skills/06_fMRI_Neuroimaging/dmt-har-med-skill/scripts/dmt_har_med_qc_summary.py +96 -0
  92. package/skills/06_fMRI_Neuroimaging/dmt-har-med-skill/scripts/extract_dmt_har_med_phenotype.py +121 -0
  93. package/skills/06_fMRI_Neuroimaging/dmt-har-med-skill/scripts/reorganize_dmt_har_med.py +125 -0
  94. package/skills/06_fMRI_Neuroimaging/dwi-skill/SKILL.md +359 -0
  95. package/skills/06_fMRI_Neuroimaging/fmri-skill/SKILL.md +371 -0
  96. package/skills/06_fMRI_Neuroimaging/fmriprep-tool/SKILL.md +228 -0
  97. package/skills/06_fMRI_Neuroimaging/freesurfer-tool/SKILL.md +286 -0
  98. package/skills/06_fMRI_Neuroimaging/freesurfer-tool/scripts/freesurfer_processor.py +145 -0
  99. package/skills/06_fMRI_Neuroimaging/fsl-tool/SKILL.md +208 -0
  100. package/skills/06_fMRI_Neuroimaging/hbn-skill/SKILL.md +271 -0
  101. package/skills/06_fMRI_Neuroimaging/hbn-skill/scripts/extract_hbn_phenotype.py +107 -0
  102. package/skills/06_fMRI_Neuroimaging/hbn-skill/scripts/hbn_qc_summary.py +96 -0
  103. package/skills/06_fMRI_Neuroimaging/hbn-skill/scripts/reorganize_hbn.py +150 -0
  104. package/skills/06_fMRI_Neuroimaging/hcpa-skill/SKILL.md +210 -0
  105. package/skills/06_fMRI_Neuroimaging/hcpa-skill/scripts/extract_hcpa_phenotype.py +146 -0
  106. package/skills/06_fMRI_Neuroimaging/hcpa-skill/scripts/hcpa_qc_summary.py +120 -0
  107. package/skills/06_fMRI_Neuroimaging/hcpa-skill/scripts/reorganize_hcpa.py +155 -0
  108. package/skills/06_fMRI_Neuroimaging/hcpd-skill/SKILL.md +210 -0
  109. package/skills/06_fMRI_Neuroimaging/hcpd-skill/scripts/extract_hcpd_phenotype.py +148 -0
  110. package/skills/06_fMRI_Neuroimaging/hcpd-skill/scripts/hcpd_qc_summary.py +125 -0
  111. package/skills/06_fMRI_Neuroimaging/hcpd-skill/scripts/reorganize_hcpd.py +146 -0
  112. package/skills/06_fMRI_Neuroimaging/hcpep-skill/SKILL.md +215 -0
  113. package/skills/06_fMRI_Neuroimaging/hcpep-skill/scripts/extract_hcpep_phenotype.py +157 -0
  114. package/skills/06_fMRI_Neuroimaging/hcpep-skill/scripts/hcpep_qc_summary.py +143 -0
  115. package/skills/06_fMRI_Neuroimaging/hcpep-skill/scripts/reorganize_hcpep.py +146 -0
  116. package/skills/06_fMRI_Neuroimaging/hcppipeline-tool/SKILL.md +217 -0
  117. package/skills/06_fMRI_Neuroimaging/hcpya-skill/SKILL.md +214 -0
  118. package/skills/06_fMRI_Neuroimaging/hcpya-skill/scripts/extract_hcpya_phenotype.py +190 -0
  119. package/skills/06_fMRI_Neuroimaging/hcpya-skill/scripts/hcpya_qc_summary.py +152 -0
  120. package/skills/06_fMRI_Neuroimaging/hcpya-skill/scripts/reorganize_hcpya.py +203 -0
  121. package/skills/06_fMRI_Neuroimaging/ixi-skill/SKILL.md +198 -0
  122. package/skills/06_fMRI_Neuroimaging/ixi-skill/scripts/ixi_qc_summary.py +137 -0
  123. package/skills/06_fMRI_Neuroimaging/ixi-skill/scripts/reorganize_ixi.py +190 -0
  124. package/skills/06_fMRI_Neuroimaging/mnd-skill/SKILL.md +191 -0
  125. package/skills/06_fMRI_Neuroimaging/mnd-skill/scripts/extract_mnd_phenotype.py +143 -0
  126. package/skills/06_fMRI_Neuroimaging/mnd-skill/scripts/mnd_qc_summary.py +120 -0
  127. package/skills/06_fMRI_Neuroimaging/mnd-skill/scripts/validate_mnd.py +107 -0
  128. package/skills/06_fMRI_Neuroimaging/mschallenge-skill/SKILL.md +203 -0
  129. package/skills/06_fMRI_Neuroimaging/mschallenge-skill/scripts/analyze_lesions.py +119 -0
  130. package/skills/06_fMRI_Neuroimaging/mschallenge-skill/scripts/longitudinal_lesion.py +148 -0
  131. package/skills/06_fMRI_Neuroimaging/mschallenge-skill/scripts/mschallenge_qc_summary.py +132 -0
  132. package/skills/06_fMRI_Neuroimaging/mschallenge-skill/scripts/validate_mschallenge.py +116 -0
  133. package/skills/06_fMRI_Neuroimaging/nibabel-skill/SKILL.md +184 -0
  134. package/skills/06_fMRI_Neuroimaging/nibabel-skill/scripts/atlas_coordinate_reference.py +61 -0
  135. package/skills/06_fMRI_Neuroimaging/nibabel-skill/scripts/freesurfer_io_reference.py +34 -0
  136. package/skills/06_fMRI_Neuroimaging/nibabel-skill/scripts/nifti_inspection_reference.py +35 -0
  137. package/skills/06_fMRI_Neuroimaging/nifd-skill/SKILL.md +205 -0
  138. package/skills/06_fMRI_Neuroimaging/nifd-skill/scripts/extract_nifd_phenotype.py +132 -0
  139. package/skills/06_fMRI_Neuroimaging/nifd-skill/scripts/nifd_qc_summary.py +111 -0
  140. package/skills/06_fMRI_Neuroimaging/nifd-skill/scripts/validate_nifd.py +111 -0
  141. package/skills/06_fMRI_Neuroimaging/nii2dcm/SKILL.md +143 -0
  142. package/skills/06_fMRI_Neuroimaging/nilearn-tool/SKILL.md +266 -0
  143. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/connectome_reference.py +65 -0
  144. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/denoise_timeseries_reference.py +58 -0
  145. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/hierarchical_parcellation_reference.py +53 -0
  146. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/kmeans_parcellation_reference.py +53 -0
  147. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/preprocess_bold_reference.py +76 -0
  148. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/rest_dictlearning_reference.py +56 -0
  149. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/rest_ica_reference.py +59 -0
  150. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/second_level_glm_reference.py +58 -0
  151. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/spacenet_classifier_reference.py +59 -0
  152. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/svm_classifier_reference.py +60 -0
  153. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/task_glm_reference.py +63 -0
  154. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/zalff_summary_reference.py +109 -0
  155. package/skills/06_fMRI_Neuroimaging/nsd-skill/SKILL.md +210 -0
  156. package/skills/06_fMRI_Neuroimaging/nsd-skill/scripts/extract_nsd_stimulus.py +171 -0
  157. package/skills/06_fMRI_Neuroimaging/nsd-skill/scripts/nsd_qc_summary.py +142 -0
  158. package/skills/06_fMRI_Neuroimaging/nsd-skill/scripts/validate_nsd.py +142 -0
  159. package/skills/06_fMRI_Neuroimaging/oasis-skill/SKILL.md +205 -0
  160. package/skills/06_fMRI_Neuroimaging/oasis-skill/scripts/extract_oasis_phenotype.py +126 -0
  161. package/skills/06_fMRI_Neuroimaging/oasis-skill/scripts/oasis_qc_summary.py +115 -0
  162. package/skills/06_fMRI_Neuroimaging/oasis-skill/scripts/validate_oasis.py +119 -0
  163. package/skills/06_fMRI_Neuroimaging/pet-skill/SKILL.md +173 -0
  164. package/skills/06_fMRI_Neuroimaging/pet-skill/scripts/compute_suvr.py +202 -0
  165. package/skills/06_fMRI_Neuroimaging/pnc-skill/SKILL.md +206 -0
  166. package/skills/06_fMRI_Neuroimaging/pnc-skill/scripts/extract_pnc_phenotype.py +136 -0
  167. package/skills/06_fMRI_Neuroimaging/pnc-skill/scripts/pnc_qc_summary.py +116 -0
  168. package/skills/06_fMRI_Neuroimaging/pnc-skill/scripts/validate_pnc.py +120 -0
  169. package/skills/06_fMRI_Neuroimaging/ppmi-skill/SKILL.md +209 -0
  170. package/skills/06_fMRI_Neuroimaging/ppmi-skill/scripts/extract_ppmi_phenotype.py +138 -0
  171. package/skills/06_fMRI_Neuroimaging/ppmi-skill/scripts/ppmi_qc_summary.py +111 -0
  172. package/skills/06_fMRI_Neuroimaging/ppmi-skill/scripts/validate_ppmi.py +117 -0
  173. package/skills/06_fMRI_Neuroimaging/qsiprep-tool/SKILL.md +320 -0
  174. package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/SKILL.md +215 -0
  175. package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/scripts/extract_rest_mdd_phenotype.py +132 -0
  176. package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/scripts/harmonize_sites.py +152 -0
  177. package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/scripts/rest_mdd_qc_summary.py +124 -0
  178. package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/scripts/validate_rest_mdd.py +103 -0
  179. package/skills/06_fMRI_Neuroimaging/smri-skill/SKILL.md +302 -0
  180. package/skills/06_fMRI_Neuroimaging/tcp-skill/SKILL.md +204 -0
  181. package/skills/06_fMRI_Neuroimaging/tcp-skill/scripts/extract_tcp_phenotype.py +139 -0
  182. package/skills/06_fMRI_Neuroimaging/tcp-skill/scripts/tcp_qc_summary.py +111 -0
  183. package/skills/06_fMRI_Neuroimaging/tcp-skill/scripts/validate_tcp.py +99 -0
  184. package/skills/06_fMRI_Neuroimaging/ucla-cnp-skill/SKILL.md +217 -0
  185. package/skills/06_fMRI_Neuroimaging/ucla-cnp-skill/scripts/extract_ucla_cnp_phenotype.py +145 -0
  186. package/skills/06_fMRI_Neuroimaging/ucla-cnp-skill/scripts/ucla_cnp_qc_summary.py +111 -0
  187. package/skills/06_fMRI_Neuroimaging/ucla-cnp-skill/scripts/validate_ucla_cnp.py +113 -0
  188. package/skills/06_fMRI_Neuroimaging/ukb-skill/SKILL.md +310 -0
  189. package/skills/06_fMRI_Neuroimaging/ukb-skill/scripts/build_ukb_survival.py +210 -0
  190. package/skills/06_fMRI_Neuroimaging/ukb-skill/scripts/extract_ukb_cases.py +308 -0
  191. package/skills/06_fMRI_Neuroimaging/ukb-skill/scripts/extract_ukb_phenotype.py +232 -0
  192. package/skills/06_fMRI_Neuroimaging/ukb-skill/scripts/ukb_qc_summary.py +158 -0
  193. package/skills/06_fMRI_Neuroimaging/wmh-segmentation/SKILL.md +133 -0
  194. package/skills/07_Computational_Modeling/detrending/SKILL.md +118 -0
  195. package/skills/07_Computational_Modeling/dictlearning/SKILL.md +122 -0
  196. package/skills/07_Computational_Modeling/filtering/SKILL.md +121 -0
  197. package/skills/07_Computational_Modeling/glm/SKILL.md +153 -0
  198. package/skills/07_Computational_Modeling/hierarchical/SKILL.md +121 -0
  199. package/skills/07_Computational_Modeling/ica/SKILL.md +122 -0
  200. package/skills/07_Computational_Modeling/kmeans/SKILL.md +119 -0
  201. package/skills/07_Computational_Modeling/run_models/SKILL.md +427 -0
  202. package/skills/07_Computational_Modeling/spacenet/SKILL.md +122 -0
  203. package/skills/07_Computational_Modeling/svm/SKILL.md +120 -0
  204. package/skills/08_Computational_Neuroscience/brain_gnn/SKILL.md +183 -0
  205. package/skills/08_Computational_Neuroscience/dipy-tool/SKILL.md +239 -0
  206. package/skills/08_Computational_Neuroscience/dipy-tool/scripts/dti_metrics_reference.py +70 -0
  207. package/skills/08_Computational_Neuroscience/dipy-tool/scripts/load_and_mask_reference.py +76 -0
  208. package/skills/08_Computational_Neuroscience/dipy-tool/scripts/roi_stats_reference.py +59 -0
  209. package/skills/08_Computational_Neuroscience/fm_app/SKILL.md +195 -0
  210. package/skills/08_Computational_Neuroscience/neurostorm/SKILL.md +151 -0
  211. package/skills/13_Visualization/brain-visualization/SKILL.md +191 -0
  212. package/skills/13_Visualization/brain-visualization/scripts/connectome_reference.py +108 -0
  213. package/skills/13_Visualization/brain-visualization/scripts/freesurfer_ply_reference.py +54 -0
  214. package/skills/13_Visualization/brain-visualization/scripts/zalff_summary_reference.py +116 -0
  215. package/skills/13_Visualization/ethoclaw-paper-figure-layout/SKILL.md +78 -0
  216. package/skills/13_Visualization/ethoclaw-paper-figure-layout/assets/naturecomm_figures.tex +74 -0
  217. package/skills/13_Visualization/ethoclaw-paper-figure-layout/scripts/layout_results_foldered.py +579 -0
  218. package/skills/14_Writing/overleaf-skill/SKILL.md +184 -0
  219. package/skills/14_Writing/overleaf-skill/scripts/install.sh +30 -0
  220. package/skills/14_Writing/paper-writing/SKILL.md +146 -0
  221. package/skills/14_Writing/paper-writing/scripts/data_statement_templates.py +164 -0
  222. package/skills/14_Writing/paper-writing/scripts/figure_templates.py +315 -0
  223. package/skills/14_Writing/paper-writing/scripts/nature_figure_style.py +214 -0
  224. package/skills/14_Writing/paper-writing/scripts/section_phrasebank.py +246 -0
  225. package/skills/16_Animal_Behavior/deeplabcut/SKILL.md +154 -0
  226. package/skills/16_Animal_Behavior/deeplabcut/references/3d-pose.md +89 -0
  227. package/skills/16_Animal_Behavior/deeplabcut/references/maDLC.md +123 -0
  228. package/skills/16_Animal_Behavior/deeplabcut/references/modelzoo.md +98 -0
  229. package/skills/16_Animal_Behavior/deeplabcut/references/standard-pipeline.md +165 -0
  230. package/skills/16_Animal_Behavior/deeplabcut/references/utilities.md +146 -0
  231. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/SKILL.md +274 -0
  232. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/report_template_en.html +112 -0
  233. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/report_template_en.md +21 -0
  234. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/cluster-section.md +5 -0
  235. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/heatmap-section.md +5 -0
  236. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/integrated-interpretation.md +3 -0
  237. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/overview.md +3 -0
  238. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/project-summary.md +3 -0
  239. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/radar-section.md +5 -0
  240. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/raw-trajectory.md +3 -0
  241. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/sample-check.md +3 -0
  242. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/single-subject-section.md +3 -0
  243. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/stats-section.md +5 -0
  244. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/epm.md +52 -0
  245. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/fst.md +37 -0
  246. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/nor.md +39 -0
  247. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/oft.md +43 -0
  248. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/tcst.md +45 -0
  249. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/tst.md +36 -0
  250. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/input-types.md +59 -0
  251. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/interpretation-guardrails.md +45 -0
  252. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/metadata-schema.md +57 -0
  253. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/report-sections.md +86 -0
  254. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/section-selection-rules.md +169 -0
  255. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/scripts/build_report_manifest.py +27 -0
  256. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/scripts/render_report.py +34 -0
  257. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/scripts/report_utils.py +1121 -0
  258. package/skills/16_Animal_Behavior/ethoclaw-animal-grounding/SKILL.md +390 -0
  259. package/skills/16_Animal_Behavior/ethoclaw-animal-grounding/reference_code.py +98 -0
  260. package/skills/16_Animal_Behavior/ethoclaw-animal-pose-estimation/SKILL.md +336 -0
  261. package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/README.md +21 -0
  262. package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/SKILL.md +41 -0
  263. package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/batch_kinematic_generator.py +663 -0
  264. package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/config.json +19 -0
  265. package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/generate_kinematic_parameter.py +401 -0
  266. package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/kinematic_generator.py +265 -0
  267. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-clustermap-generate/SKILL.md +72 -0
  268. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-clustermap-generate/references/config.example.toml +56 -0
  269. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-clustermap-generate/scripts/cluster_all_params.py +232 -0
  270. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-clustermap-generate/scripts/cluster_all_params_from_config.py +236 -0
  271. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-radar-generate/SKILL.md +68 -0
  272. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-radar-generate/references/notes.md +5 -0
  273. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-radar-generate/scripts/plot_h5_radar.py +513 -0
  274. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/SKILL.md +52 -0
  275. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/config.toml +81 -0
  276. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/references/stats-rule.md +18 -0
  277. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/scripts/h5_inspect.py +79 -0
  278. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/scripts/h5_violin_batch.py +624 -0
  279. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/scripts/h5_violin_stats.py +438 -0
  280. package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/SKILL.md +280 -0
  281. package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/core_scripts/heatmap_trajectory.py +790 -0
  282. package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/core_scripts/heatmap_velocity.py +855 -0
  283. package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/reference_data/reference_2d.csv +101 -0
  284. package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/reference_data/reference_2d.h5 +0 -0
  285. package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/reference_data/reference_data_readme.md +126 -0
@@ -0,0 +1,286 @@
1
+ ---
2
+ name: freesurfer-tool
3
+ description: "Use this skill whenever the user wants to process structural MRI data (T1w, T2w, FLAIR, etc.) with FreeSurfer, especially for cortical/subcortical segmentation, surface reconstruction, parcellation, cortical thickness, volume statistics, or full recon-all pipeline. Triggers include: 'freesurfer', 'recon-all', 'segment MRI', 'FreeSurfer processing', 'cortical segmentation', 'subcortical segmentation', 'run recon-all', 'freesurfer T1', 'process brain MRI with freesurfer', 'aseg aparc', or any request to run FreeSurfer on NIfTI MRI data for research analysis."
4
+ license: MIT License (NeuroClaw custom skill – freely modifiable within the project)
5
+ layer: base
6
+ skill_type: tool
7
+ dependencies:
8
+ - claw-shell
9
+ ---
10
+ # FreeSurfer Tool
11
+
12
+ ## Overview
13
+
14
+ FreeSurfer is the gold-standard open-source suite for automated reconstruction of the brain’s cortical surface from structural MRI, including skull-stripping, intensity normalization, Talairach registration, cortical parcellation (Desikan-Killiany / Destrieux atlases), subcortical segmentation (`aseg`), surface mesh generation, cortical thickness estimation, and statistics.
15
+
16
+ This skill serves as the **NeuroClaw interface-layer wrapper** for FreeSurfer and strictly follows the hierarchical design:
17
+
18
+ 1. Check whether FreeSurfer is installed (`recon-all --version`, `$FREESURFER_HOME` environment variable).
19
+ 2. If not found → immediately invoke `dependency-planner` to plan and (after user confirmation) install the latest stable FreeSurfer release + license setup.
20
+ 3. Collect and confirm: input NIfTI file(s), subject ID, output `SUBJECTS_DIR`, desired stages/flags (e.g. `-all`, `-autorecon1..3`, `-T2`, `-FLAIR`, `-parallel`).
21
+ 4. Generate a clear, numbered execution plan including exact shell commands.
22
+ 5. Present plan, estimated runtime, disk/RAM requirements, and risks → wait for explicit user confirmation (“YES” / “execute” / “proceed”).
23
+ 6. On confirmation → delegate **all** shell command execution to the `claw-shell` skill (environment setup, `recon-all` invocation, logging, progress monitoring).
24
+ 7. Report completion status, log location, output directory, and next steps.
25
+
26
+ **Key design principle (2026 update)**: No direct `subprocess.run()` calls for long-running FreeSurfer commands. All shell execution is routed through `claw-shell` for centralized logging, timeout handling, real-time output streaming, and interruption safety.
27
+
28
+ **Research use only.**
29
+
30
+ ## Quick Reference (Common Use Cases)
31
+
32
+ | Task | Recommended `recon-all` flags / approach |
33
+ |-----------------------------------|-------------------------------------------------------------------|
34
+ | Full pipeline (most common) | `-all` |
35
+ | Fast subcortical + basic surfaces | `-autorecon1 -autorecon2 -autorecon3` |
36
+ | Cortical surfaces & parcellation | `-autorecon2 -autorecon3` (after `autorecon1` completed) |
37
+ | Improve pial surface with T2 | `-T2 T2w.nii.gz` |
38
+ | Use FLAIR for better segmentation | `-FLAIR FLAIR.nii.gz` |
39
+ | Enable multi-core acceleration | `-parallel -openmp 8` (or match available cores) |
40
+ | Resume interrupted run | Omit `-i` and `-all`, specify stages only |
41
+ | Generate statistics only | `-stats` |
42
+
43
+ ## Installation Check & Setup
44
+
45
+ Installation is **fully delegated** to `dependency-planner`.
46
+
47
+ When FreeSurfer is not detected:
48
+ - Call `dependency-planner` with request:
49
+ "Install latest stable FreeSurfer (8.1.0 or newer) on current OS, including license.txt setup"
50
+ - After user confirms the installation plan → `dependency-planner` handles download, package install, license placement
51
+ - This skill then verifies `$FREESURFER_HOME` and `recon-all` availability
52
+
53
+ **Prerequisites**:
54
+ - `dependency-planner` (mandatory for installation)
55
+ - `claw-shell` (mandatory for command execution)
56
+ - Valid FreeSurfer academic license (free registration required)
57
+ - ≥16 GB RAM recommended (32 GB+ strongly preferred for `-all`)
58
+
59
+ ## Agent Reference Rule
60
+
61
+ When the agent needs FreeSurfer processing implementation code, it should first consult the curated snippet in `skills/freesurfer-tool/scripts/` instead of copying from the embedded wrapper below.
62
+
63
+ Reference snippet available:
64
+ - `scripts/freesurfer_processor.py` -> recon-all pipeline orchestration: environment setup, stage selection, parallel flags, claw-shell delegation
65
+
66
+ Example:
67
+ ```bash
68
+ python skills/freesurfer-tool/scripts/freesurfer_processor.py \
69
+ --input-mri sub-001_T1w.nii.gz \
70
+ --subjid sub-001 \
71
+ --subjects-dir /data/freesurfer_output \
72
+ --stages all \
73
+ --extra-flags "-T2 T2.nii.gz -parallel -openmp 12"
74
+ ```
75
+
76
+ ## NeuroClaw recommended wrapper script
77
+
78
+ ```python
79
+ # freesurfer_processor.py
80
+ import argparse
81
+ import os
82
+ import sys
83
+ from pathlib import Path
84
+ from datetime import datetime
85
+
86
+ # In real NeuroClaw: these would be agent tool calls
87
+ def check_freesurfer_installed():
88
+ # Simulate check via claw-shell
89
+ # Real impl: call claw-shell with "recon-all --version"
90
+ return False, "FreeSurfer not found (simulation mode)"
91
+
92
+ def delegate_to_claw_shell(commands, purpose, log_tag):
93
+ print(f"[Delegating to claw-shell] Purpose: {purpose}")
94
+ print(f"Log tag: {log_tag}")
95
+ print("Commands to execute:")
96
+ for cmd in commands:
97
+ print(" " + cmd)
98
+ # Real implementation: agent/tool call to claw-shell
99
+ # e.g. tool_call("claw-shell", commands=commands, log_tag=log_tag, capture_output=True, timeout="24h")
100
+
101
+ def main():
102
+ parser = argparse.ArgumentParser(description="NeuroClaw FreeSurfer Processor")
103
+ parser.add_argument("--input-mri", required=True, help="Path to T1w (or other) NIfTI file")
104
+ parser.add_argument("--subjid", required=True, help="Subject ID (e.g. sub-001)")
105
+ parser.add_argument("--subjects-dir", required=True, help="Output SUBJECTS_DIR path")
106
+ parser.add_argument("--stages", default="all", help="all / autorecon1 / autorecon2 / autorecon3 / stats / comma-separated stages")
107
+ parser.add_argument("--extra-flags", default="", help="Additional flags, e.g. '-T2 T2.nii.gz -FLAIR FLAIR.nii.gz -parallel -openmp 12'")
108
+ parser.add_argument("--plan-only", action="store_true", help="Show plan without execution")
109
+ args = parser.parse_args()
110
+
111
+ installed, version_info = check_freesurfer_installed()
112
+ if not installed:
113
+ print("FreeSurfer not detected on system.")
114
+ print("→ Invoking dependency-planner to install FreeSurfer and set up license.")
115
+ print("Please complete the dependency-planner confirmation flow first.")
116
+ sys.exit(1)
117
+
118
+ print("FreeSurfer detected:", version_info)
119
+
120
+ subjects_dir = Path(args.subjects_dir).resolve()
121
+ print(f"\nProcessing plan for subject: {args.subjid}")
122
+ print(f"Input MRI : {args.input_mri}")
123
+ print(f"Output dir : {subjects_dir}")
124
+ print(f"Stages : {args.stages}")
125
+ if args.extra_flags:
126
+ print(f"Extra flags : {args.extra_flags}")
127
+
128
+ # Build shell commands
129
+ commands = []
130
+ # 1. Set environment
131
+ fs_home = "/usr/local/freesurfer" # typical default; adjust if needed
132
+ commands.append(f"export FREESURFER_HOME={fs_home}")
133
+ commands.append(f"source $FREESURFER_HOME/SetUpFreeSurfer.sh")
134
+
135
+ # 2. recon-all command
136
+ recon_cmd = [
137
+ "recon-all",
138
+ "-subjid", args.subjid,
139
+ "-i", args.input_mri
140
+ ]
141
+
142
+ if args.stages == "all":
143
+ recon_cmd.append("-all")
144
+ elif "," in args.stages:
145
+ for stage in args.stages.split(","):
146
+ stage = stage.strip()
147
+ if stage:
148
+ recon_cmd.append(f"-{stage}")
149
+ else:
150
+ recon_cmd.append(f"-{args.stages}")
151
+
152
+ if args.extra_flags:
153
+ recon_cmd.extend(args.extra_flags.split())
154
+
155
+ # Recommend parallel execution if not disabled
156
+ if "-parallel" not in args.extra_flags and "-openmp" not in args.extra_flags:
157
+ recon_cmd.extend(["-parallel", "-openmp", "8"])
158
+
159
+ commands.append(" ".join(recon_cmd))
160
+
161
+ log_tag = f"freesurfer_{args.subjid}_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
162
+
163
+ print("\nExecution plan (to be run via claw-shell):")
164
+ for i, cmd in enumerate(commands, 1):
165
+ print(f"Step {i}: {cmd}")
166
+
167
+ print(f"\nEstimated runtime: 4–24 hours (full -all), 1–4 hours (segmentation stages only)")
168
+ print(f"Disk usage: ~2–5 GB per subject")
169
+ print(f"Logs will be captured by claw-shell under tag: {log_tag}")
170
+
171
+ if args.plan_only:
172
+ print("\nPlan-only mode — no execution performed.")
173
+ return
174
+
175
+ confirm = input("\nExecute now? Type YES to proceed: ").strip().upper()
176
+ if confirm != "YES":
177
+ print("Aborted by user.")
178
+ return
179
+
180
+ print("\nDelegating pipeline execution to claw-shell skill...")
181
+ delegate_to_claw_shell(
182
+ commands=commands,
183
+ purpose=f"FreeSurfer processing for subject {args.subjid} ({args.stages})",
184
+ log_tag=log_tag
185
+ )
186
+
187
+ print(f"→ Execution handed over to claw-shell.")
188
+ print(f"→ Check logs using tag: {log_tag}")
189
+ print(f"→ Final outputs will be in: {subjects_dir / args.subjid}")
190
+
191
+ if __name__ == "__main__":
192
+ main()
193
+ ```
194
+
195
+ ## Important Notes & Limitations
196
+
197
+ - All actual shell command execution is delegated to `claw-shell` (no direct `subprocess` calls for `recon-all`).
198
+ - Full `-all` pipeline is very long-running → `claw-shell` should support background/detached mode or long timeouts.
199
+ - Input must be NIfTI (`.nii` or `.nii.gz`); convert DICOM first using `dcm2nii` skill.
200
+ - Output follows standard FreeSurfer structure: `$SUBJECTS_DIR/<subjid>`.
201
+ - Windows users: strongly recommended to use WSL2 (installation handled by `dependency-planner`).
202
+ - License check: skill assumes `license.txt` is already in place after `dependency-planner` run.
203
+
204
+ ## When to Call This Skill
205
+
206
+ - User provides structural MRI (NIfTI) and wants automated FreeSurfer processing.
207
+ - Any mention of `recon-all`, `aseg`, `aparc`, cortical thickness, surface reconstruction, or FreeSurfer statistics.
208
+
209
+ ## Complementary / Related Skills
210
+
211
+ - `dependency-planner` → install FreeSurfer + license
212
+ - `claw-shell` → safe execution of long-running shell commands
213
+ - `conda-env-manager` → manage Python environment for post-processing FreeSurfer outputs
214
+
215
+ ## Reference
216
+
217
+ Official site: https://surfer.nmr.mgh.harvard.edu
218
+ Latest stable release (as of 2026): FreeSurfer 8.1.0 or newer
219
+ License registration: https://surfer.nmr.mgh.harvard.edu/registration.html
220
+ Documentation: https://surfer.nmr.mgh.harvard.edu/fswiki/FreeSurferWiki
221
+
222
+ Custom NeuroClaw skill created to integrate FreeSurfer safely into the hierarchical skill structure.
223
+
224
+ Curated reference snippet in this skill:
225
+ - `skills/freesurfer-tool/scripts/freesurfer_processor.py`
226
+
227
+ ## Post-Execution Verification (Harness Integration)
228
+
229
+ After FreeSurfer processing completes, this skill **automatically invokes harness-core's VerificationRunner** to validate output integrity:
230
+
231
+ **Integrated verification checks**:
232
+
233
+ ```python
234
+ from skills.harness_core import VerificationRunner, AuditLogger
235
+
236
+ verifier = VerificationRunner(task_type="freesurfer_processing")
237
+
238
+ # 1. Brain-extracted anatomy files
239
+ verifier.add_check("brain_extraction",
240
+ checker=lambda: verify_brain_extraction(subjects_dir, subjid),
241
+ severity="error"
242
+ )
243
+
244
+ # 2. Cortical surface files (white, pial)
245
+ verifier.add_check("surface_reconstruction",
246
+ checker=lambda: verify_surface_files(subjects_dir, subjid),
247
+ severity="error"
248
+ )
249
+
250
+ # 3. Cortical thickness bounds (1–4 mm range)
251
+ verifier.add_check("thickness_bounds",
252
+ checker=lambda: verify_cortical_thickness_range(subjects_dir, subjid),
253
+ severity="warning"
254
+ )
255
+
256
+ # 4. parcellation labels (aparc/aseg)
257
+ verifier.add_check("parcellation",
258
+ checker=lambda: verify_aparc_aseg(subjects_dir, subjid),
259
+ severity="error"
260
+ )
261
+
262
+ # 5. Statistics file completeness
263
+ verifier.add_check("statistics",
264
+ checker=lambda: verify_stats_files(subjects_dir, subjid),
265
+ severity="warning"
266
+ )
267
+
268
+ report = verifier.run(subjects_dir)
269
+
270
+ # Log verification results
271
+ logger = AuditLogger(log_file=f"{subjects_dir}/{subjid}/freesurfer_verification.jsonl")
272
+ logger.log_validation(
273
+ task_name="freesurfer_processing",
274
+ subject_id=subjid,
275
+ checks_passed=len([r for r in report.results if r.passed]),
276
+ total_checks=len(report.results)
277
+ )
278
+ ```
279
+
280
+ **Output**: `{SUBJECTS_DIR}/{subjid}/freesurfer_verification.jsonl` (structured audit log with JSONL format)
281
+
282
+ ---
283
+
284
+ Created At: 2026-03-19 20:00 HKT
285
+ Last Updated At: 2026-04-05 02:03 HKT
286
+ Author: chengwang96
@@ -0,0 +1,145 @@
1
+ """FreeSurfer Processor Reference - recon-all pipeline orchestration.
2
+
3
+ Distilled from the NeuroClaw freesurfer-tool SKILL.md.
4
+ Agent should consult this script instead of copying from SKILL.md directly.
5
+
6
+ Usage:
7
+ python skills/freesurfer-tool/scripts/freesurfer_processor.py \
8
+ --input-mri sub-001_T1w.nii.gz \
9
+ --subjid sub-001 \
10
+ --subjects-dir /data/freesurfer_output \
11
+ --stages all \
12
+ --extra-flags "-T2 T2.nii.gz -parallel -openmp 12"
13
+
14
+ # Plan only (no execution):
15
+ python skills/freesurfer-tool/scripts/freesurfer_processor.py \
16
+ --input-mri sub-001_T1w.nii.gz \
17
+ --subjid sub-001 \
18
+ --subjects-dir /data/freesurfer_output \
19
+ --plan-only
20
+ """
21
+
22
+ import argparse
23
+ import sys
24
+ from pathlib import Path
25
+ from datetime import datetime
26
+
27
+
28
+ def check_freesurfer_installed():
29
+ """Check if FreeSurfer is available on the system."""
30
+ # Simulate check via claw-shell
31
+ # Real impl: call claw-shell with "recon-all --version"
32
+ return False, "FreeSurfer not found (simulation mode)"
33
+
34
+
35
+ def delegate_to_claw_shell(commands, purpose, log_tag):
36
+ """Delegate command execution to claw-shell."""
37
+ print(f"[Delegating to claw-shell] Purpose: {purpose}")
38
+ print(f"Log tag: {log_tag}")
39
+ print("Commands to execute:")
40
+ for cmd in commands:
41
+ print(" " + cmd)
42
+ # Real implementation: agent/tool call to claw-shell
43
+ # e.g. tool_call("claw-shell", commands=commands, log_tag=log_tag, capture_output=True, timeout="24h")
44
+
45
+
46
+ def build_recon_all_command(args):
47
+ """Build the recon-all command from arguments."""
48
+ commands = []
49
+
50
+ # 1. Set environment
51
+ fs_home = "/usr/local/freesurfer" # typical default; adjust if needed
52
+ commands.append(f"export FREESURFER_HOME={fs_home}")
53
+ commands.append("source $FREESURFER_HOME/SetUpFreeSurfer.sh")
54
+
55
+ # 2. recon-all command
56
+ recon_cmd = [
57
+ "recon-all",
58
+ "-subjid", args.subjid,
59
+ "-i", args.input_mri,
60
+ ]
61
+
62
+ if args.stages == "all":
63
+ recon_cmd.append("-all")
64
+ elif "," in args.stages:
65
+ for stage in args.stages.split(","):
66
+ stage = stage.strip()
67
+ if stage:
68
+ recon_cmd.append(f"-{stage}")
69
+ else:
70
+ recon_cmd.append(f"-{args.stages}")
71
+
72
+ if args.extra_flags:
73
+ recon_cmd.extend(args.extra_flags.split())
74
+
75
+ # Recommend parallel execution if not disabled
76
+ if "-parallel" not in args.extra_flags and "-openmp" not in args.extra_flags:
77
+ recon_cmd.extend(["-parallel", "-openmp", "8"])
78
+
79
+ commands.append(" ".join(recon_cmd))
80
+ return commands
81
+
82
+
83
+ def main():
84
+ parser = argparse.ArgumentParser(description="NeuroClaw FreeSurfer Processor")
85
+ parser.add_argument("--input-mri", required=True, help="Path to T1w (or other) NIfTI file")
86
+ parser.add_argument("--subjid", required=True, help="Subject ID (e.g. sub-001)")
87
+ parser.add_argument("--subjects-dir", required=True, help="Output SUBJECTS_DIR path")
88
+ parser.add_argument("--stages", default="all",
89
+ help="all / autorecon1 / autorecon2 / autorecon3 / stats / comma-separated stages")
90
+ parser.add_argument("--extra-flags", default="",
91
+ help="Additional flags, e.g. '-T2 T2.nii.gz -FLAIR FLAIR.nii.gz -parallel -openmp 12'")
92
+ parser.add_argument("--plan-only", action="store_true", help="Show plan without execution")
93
+ args = parser.parse_args()
94
+
95
+ installed, version_info = check_freesurfer_installed()
96
+ if not installed:
97
+ print("FreeSurfer not detected on system.")
98
+ print("-> Invoking dependency-planner to install FreeSurfer and set up license.")
99
+ print("Please complete the dependency-planner confirmation flow first.")
100
+ sys.exit(1)
101
+
102
+ print("FreeSurfer detected:", version_info)
103
+
104
+ subjects_dir = Path(args.subjects_dir).resolve()
105
+ print(f"\nProcessing plan for subject: {args.subjid}")
106
+ print(f"Input MRI : {args.input_mri}")
107
+ print(f"Output dir : {subjects_dir}")
108
+ print(f"Stages : {args.stages}")
109
+ if args.extra_flags:
110
+ print(f"Extra flags : {args.extra_flags}")
111
+
112
+ commands = build_recon_all_command(args)
113
+ log_tag = f"freesurfer_{args.subjid}_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
114
+
115
+ print("\nExecution plan (to be run via claw-shell):")
116
+ for i, cmd in enumerate(commands, 1):
117
+ print(f"Step {i}: {cmd}")
118
+
119
+ print(f"\nEstimated runtime: 4-24 hours (full -all), 1-4 hours (segmentation stages only)")
120
+ print(f"Disk usage: ~2-5 GB per subject")
121
+ print(f"Logs will be captured by claw-shell under tag: {log_tag}")
122
+
123
+ if args.plan_only:
124
+ print("\nPlan-only mode - no execution performed.")
125
+ return
126
+
127
+ confirm = input("\nExecute now? Type YES to proceed: ").strip().upper()
128
+ if confirm != "YES":
129
+ print("Aborted by user.")
130
+ return
131
+
132
+ print("\nDelegating pipeline execution to claw-shell skill...")
133
+ delegate_to_claw_shell(
134
+ commands=commands,
135
+ purpose=f"FreeSurfer processing for subject {args.subjid} ({args.stages})",
136
+ log_tag=log_tag,
137
+ )
138
+
139
+ print(f"-> Execution handed over to claw-shell.")
140
+ print(f"-> Check logs using tag: {log_tag}")
141
+ print(f"-> Final outputs will be in: {subjects_dir / args.subjid}")
142
+
143
+
144
+ if __name__ == "__main__":
145
+ main()
@@ -0,0 +1,208 @@
1
+ ---
2
+ name: fsl-tool
3
+ description: "Use this skill whenever the user wants to process neuroimaging data with FSL (FMRIB Software Library), covering structural MRI, functional MRI (fMRI), and diffusion MRI (dMRI/DTI). Triggers include: 'use FSL', 'FSL processing', 'fsl_anat', 'FEAT', 'MELODIC', 'eddy', 'bedpostx', 'probtrackx', 'BET', 'FAST', 'FLIRT', 'FNIRT', 'run FSL pipeline'. This skill is the NeuroClaw interface-layer wrapper for FSL: checks installation, generates execution plan with concrete shell commands, waits for explicit confirmation, then routes all commands through claw-shell."
4
+ license: MIT License (NeuroClaw custom skill – freely modifiable within the project)
5
+ layer: base
6
+ skill_type: tool
7
+ dependencies:
8
+ - claw-shell
9
+ ---
10
+ # FSL Tool
11
+
12
+ ## Overview
13
+
14
+ FSL is a comprehensive library of analysis tools for MRI, fMRI, and diffusion brain imaging. This skill provides a safe, unified interface for the three core modalities in NeuroClaw:
15
+
16
+ - Structural MRI (T1w, T2w, FLAIR)
17
+ - Functional MRI (task-based and resting-state)
18
+ - Diffusion MRI (DTI / dMRI)
19
+
20
+ **Workflow**:
21
+
22
+ 1. Check if FSL is installed (`fslversion`).
23
+ 2. If not installed → call `dependency-planner` to generate installation plan.
24
+ 3. Analyze input files and propose concrete shell commands with parameter explanations.
25
+ 4. Present full numbered plan + estimated time + risks.
26
+ 5. Wait for explicit user confirmation (“YES”, “execute”, “proceed”).
27
+ 6. Execute all commands safely via `claw-shell`.
28
+ 7. Summarize outputs and suggest next steps.
29
+
30
+ **Research use only.**
31
+
32
+ ## Core Modalities and Common Shell Commands
33
+
34
+ ### 1. Structural MRI
35
+ ```bash
36
+ # One-click structural preprocessing (strongly recommended)
37
+ fsl_anat -i T1w.nii.gz -o T1w_anat --clobber
38
+ # -i : input T1w file
39
+ # -o : output folder name
40
+ # --clobber : overwrite existing files (commonly used)
41
+
42
+ # Brain extraction (BET)
43
+ bet T1w.nii.gz T1w_brain -m -f 0.5
44
+ # -m : output brain mask (_mask.nii.gz)
45
+ # -f : brain extraction threshold (0.3~0.7; 0.5 is usually stable)
46
+
47
+ # Tissue segmentation + bias correction
48
+ fast -t 1 -n 3 -H 0.1 -I 4 -l 20.0 -o T1w_fast T1w_brain
49
+ # -t 1 : T1-weighted image
50
+ # -n 3 : 3 tissue classes (GM, WM, CSF)
51
+ # -H 0.1 : bias field correction strength
52
+
53
+ # Linear + nonlinear registration to MNI152
54
+ flirt -in T1w_brain -ref $FSLDIR/data/standard/MNI152_T1_2mm_brain -out T1w_to_MNI -omat T1w_to_MNI.mat -dof 12
55
+ fnirt --in=T1w_brain --aff=T1w_to_MNI.mat --cout=T1w_to_MNI_warp --config=T1_2_MNI152_2mm
56
+
57
+ # Subcortical segmentation
58
+ first -i T1w_brain -o T1w_first -b
59
+ ```
60
+
61
+ ### 2. Functional MRI
62
+ ```bash
63
+ # Motion correction
64
+ mcflirt -in bold.nii.gz -out bold_mcf -plots -refvol 0
65
+
66
+ # Task-based fMRI full analysis (FEAT)
67
+ feat design.fsf
68
+
69
+ # Resting-state ICA
70
+ melodic -i bold_mcf.nii.gz -o melodic_output --report --nobet --bgthreshold=10 --tr=2.0 --mmthresh=0.5 --dim=30
71
+
72
+ # Automatic denoising (FIX)
73
+ fix melodic_output -c $FSLDIR/training_files/Standard.RData -m -f 20
74
+ ```
75
+
76
+ ### 3. Diffusion MRI
77
+ ```bash
78
+ # Distortion and eddy current correction
79
+ topup --imain=AP_PA_b0.nii.gz --datain=acqparams.txt --out=topup_results --fout=field --iout=b0_unwarped
80
+ eddy --imain=dwi.nii.gz --mask=dwi_brain_mask.nii.gz --acqp=acqparams.txt --index=index.txt \
81
+ --bvecs=bvecs --bvals=bvals --topup=topup_results --out=eddy_corrected --very_verbose
82
+
83
+ # Tensor fitting
84
+ dtifit -k eddy_corrected.nii.gz -m dwi_brain_mask.nii.gz -r bvecs -b bvals -o dtifit
85
+
86
+ # Multi-fiber modeling
87
+ bedpostx bedpostx_input -n 3 -w 1 -b 1000
88
+
89
+ # Automated major tract extraction
90
+ xtract -bpx bedpostx_input.bedpostX -out xtract_results -str $FSLDIR/data/xtract/tracts.txt
91
+ ```
92
+
93
+ ## Quick Reference
94
+
95
+ | Modality | Task | Main Command | Typical Time |
96
+ |--------------|-----------------------------|-------------------------------|-------------------|
97
+ | Structural | Full preprocessing | `fsl_anat` | 10–40 min |
98
+ | Structural | Brain extraction | `bet` | 1–3 min |
99
+ | Structural | Tissue segmentation | `fast` | 5–15 min |
100
+ | Functional | Motion correction | `mcflirt` | 2–10 min |
101
+ | Functional | Task GLM | `feat` | 15–90 min |
102
+ | Functional | Resting-state ICA | `melodic` | 20–120 min |
103
+ | Diffusion | Preprocessing | `topup + eddy` | 30–180 min |
104
+ | Diffusion | Tensor metrics | `dtifit` | 5–20 min |
105
+ | Diffusion | Tractography | `probtrackx2 / xtract` | 30 min – 24 h+ |
106
+
107
+ ## Installation
108
+
109
+ Use `dependency-planner` skill with one of the following requests:
110
+ - “Install latest FSL on Ubuntu using official installer”
111
+ - “Install FSL via conda-forge in a new environment”
112
+
113
+ After installation, verify with:
114
+ ```bash
115
+ fslversion
116
+ echo $FSLDIR
117
+ ```
118
+
119
+ ## Important Notes & Limitations
120
+
121
+ - All actual execution is routed through `claw-shell`.
122
+ - Long-running commands (bedpostx, probtrackx, group FEAT, etc.) run safely in the `claw` tmux session.
123
+ - Always consider running `fsl_anat` first for structural data — it handles BET + FAST + registration automatically.
124
+ - Input must be NIfTI format. Use `dcm2nii` skill first if starting from DICOM.
125
+ - Monitor progress with `tail -f` on the log file provided by claw-shell.
126
+
127
+ ## When to Call This Skill
128
+
129
+ - After `dcm2nii` conversion
130
+ - When any FSL preprocessing, registration, segmentation or advanced analysis is needed
131
+ - Before feeding quantitative results into `paper-writing` or `experiment-controller`
132
+
133
+ ## Complementary / Related Skills
134
+
135
+ - `dependency-planner`
136
+ - `claw-shell`
137
+
138
+ ## More Advanced Features
139
+
140
+ For less common tools (ASL, FABBER, VBM, PALM, custom scripting, etc.), please refer to the official FSL documentation:
141
+ - Official FSL Website: https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/
142
+ - Structural tools: https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/Structural
143
+ - Functional tools: https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FEAT
144
+ - Diffusion tools: https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FDT
145
+ - Full tool list: https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FSL
146
+
147
+ You may use the `multi-search-engine`, `academic-research-hub`, or `arxiv-cli-tools` skill anytime to find the latest FSL tutorials or example pipelines.
148
+
149
+ ## Post-Execution Verification (Harness Integration)
150
+
151
+ After FSL processing completes, this skill **automatically invokes harness-core's VerificationRunner** to validate output integrity:
152
+
153
+ **Integrated verification checks**:
154
+
155
+ ```python
156
+ from skills.harness_core import VerificationRunner, AuditLogger
157
+
158
+ verifier = VerificationRunner(task_type="fsl_processing")
159
+
160
+ # 1. Brain extraction quality (BET)
161
+ verifier.add_check("brain_extraction",
162
+ checker=lambda: verify_bet_output(output_dir),
163
+ severity="error"
164
+ )
165
+
166
+ # 2. FSL output files existence
167
+ verifier.add_check("output_files",
168
+ checker=lambda: verify_output_files(output_dir),
169
+ severity="error"
170
+ )
171
+
172
+ # 3. Data integrity (NaN/Inf checks)
173
+ verifier.add_check("data_integrity",
174
+ checker=lambda: verify_no_nan_inf(output_dir),
175
+ severity="error"
176
+ )
177
+
178
+ # 4. Registration quality metrics
179
+ verifier.add_check("registration_quality",
180
+ checker=lambda: verify_registration_quality(output_dir),
181
+ severity="warning"
182
+ )
183
+
184
+ # 5. Tensor metrics bounds (for DTI/DWI)
185
+ verifier.add_check("tensor_bounds",
186
+ checker=lambda: verify_fa_md_bounds(output_dir),
187
+ severity="warning"
188
+ )
189
+
190
+ report = verifier.run(output_dir)
191
+
192
+ # Log verification results
193
+ logger = AuditLogger(log_file=f"{output_dir}/fsl_verification.jsonl")
194
+ logger.log_validation(
195
+ task_name="fsl_processing",
196
+ checks_passed=len([r for r in report.results if r.passed]),
197
+ total_checks=len(report.results),
198
+ output_path=output_dir
199
+ )
200
+ ```
201
+
202
+ **Output**: `{output_dir}/fsl_verification.jsonl` (structured audit log with JSONL format)
203
+
204
+ ---
205
+
206
+ Created At: 2026-03-25 00:00 HKT
207
+ Last Updated At: 2026-04-05 02:03 HKT
208
+ Author: chengwang96