ecological-agent-skills 3.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 (217) hide show
  1. package/AGENT_CONTEXT.md +191 -0
  2. package/CATALOG.md +329 -0
  3. package/LICENSE +692 -0
  4. package/README.md +347 -0
  5. package/bin/install.mjs +168 -0
  6. package/docs/comparison-with-alternatives.md +38 -0
  7. package/docs/global-examples-index.md +103 -0
  8. package/docs/repository-statistics.md +101 -0
  9. package/docs/theoretical-foundations.md +188 -0
  10. package/environment.yaml +106 -0
  11. package/examples/community/arctic_tundra_vegetation_example.md +247 -0
  12. package/examples/community/bird_landuse_example.md +63 -0
  13. package/examples/community/phytoplankton_reservoir_example.md +60 -0
  14. package/examples/community/reef_fish_indopacific_example.md +221 -0
  15. package/examples/impact/baci_road_example.md +57 -0
  16. package/examples/impact/ecosystem_services_atlantic_forest.md +83 -0
  17. package/examples/impact/forest_loss_borneo_timeseries_example.md +225 -0
  18. package/examples/occupancy/puma_camera_example.md +61 -0
  19. package/examples/occupancy/snow_leopard_himalayas_example.md +204 -0
  20. package/examples/reproducible/whittaker_biome_sdm_example.md +406 -0
  21. package/examples/sdm/anteater_cerrado_example.md +69 -0
  22. package/examples/sdm/jaguar_amazon_example.md +80 -0
  23. package/examples/sdm/koala_climate_change_example.md +170 -0
  24. package/examples/sdm/wolf_recolonization_europe_example.md +193 -0
  25. package/package.json +43 -0
  26. package/renv.lock +194 -0
  27. package/skills/SKILL_INDEX.json +1020 -0
  28. package/skills/acoustic-monitoring/SKILL.md +163 -0
  29. package/skills/acoustic-monitoring/examples/example-prompts.md +100 -0
  30. package/skills/acoustic-monitoring/examples/temperate_forest_birds_example.md +285 -0
  31. package/skills/acoustic-monitoring/resources/acoustic-indices-reference.md +93 -0
  32. package/skills/acoustic-monitoring/resources/soundscape-ecology-guide.md +90 -0
  33. package/skills/acoustic-monitoring/resources/species-id-tools-comparison.md +89 -0
  34. package/skills/acoustic-monitoring/scripts/batch_species_detection.py +360 -0
  35. package/skills/acoustic-monitoring/scripts/compute_acoustic_indices.R +235 -0
  36. package/skills/acoustic-monitoring/scripts/compute_acoustic_indices.py +374 -0
  37. package/skills/biostatistics-workbench/SKILL.md +140 -0
  38. package/skills/biostatistics-workbench/examples/example-prompts.md +39 -0
  39. package/skills/biostatistics-workbench/resources/effect-size-reference.md +81 -0
  40. package/skills/biostatistics-workbench/resources/glm-family-link-reference.md +47 -0
  41. package/skills/biostatistics-workbench/resources/test-selection-guide.md +93 -0
  42. package/skills/biostatistics-workbench/scripts/glm_pipeline.R +78 -0
  43. package/skills/biostatistics-workbench/scripts/glm_pipeline.py +210 -0
  44. package/skills/camera-trap-processing/SKILL.md +159 -0
  45. package/skills/camera-trap-processing/examples/example-prompts.md +103 -0
  46. package/skills/camera-trap-processing/examples/leopard_serengeti_example.md +231 -0
  47. package/skills/camera-trap-processing/resources/activity-patterns-reference.md +113 -0
  48. package/skills/camera-trap-processing/resources/camtrapR-workflow-guide.md +130 -0
  49. package/skills/camera-trap-processing/resources/detection-event-definition-guide.md +89 -0
  50. package/skills/camera-trap-processing/scripts/estimate_activity.R +169 -0
  51. package/skills/camera-trap-processing/scripts/process_camtrap_data.R +179 -0
  52. package/skills/camera-trap-processing/scripts/process_camtrap_data.py +192 -0
  53. package/skills/community-ecology-ordination/SKILL.md +133 -0
  54. package/skills/community-ecology-ordination/examples/example-prompts.md +35 -0
  55. package/skills/community-ecology-ordination/resources/dissimilarity-metric-guide.md +53 -0
  56. package/skills/community-ecology-ordination/resources/nmds-interpretation-guide.md +104 -0
  57. package/skills/community-ecology-ordination/scripts/__pycache__/community_analysis.cpython-311.pyc +0 -0
  58. package/skills/community-ecology-ordination/scripts/community_analysis.R +143 -0
  59. package/skills/community-ecology-ordination/scripts/community_analysis.py +231 -0
  60. package/skills/ecological-data-foundation/SKILL.md +129 -0
  61. package/skills/ecological-data-foundation/examples/example-prompts.md +40 -0
  62. package/skills/ecological-data-foundation/resources/coordinate-cleaning-flags.md +66 -0
  63. package/skills/ecological-data-foundation/resources/darwin-core-glossary.md +91 -0
  64. package/skills/ecological-data-foundation/resources/data-citation-guide.md +265 -0
  65. package/skills/ecological-data-foundation/resources/gbif-data-citation-guide.md +193 -0
  66. package/skills/ecological-data-foundation/resources/qa-checklist.md +83 -0
  67. package/skills/ecological-data-foundation/scripts/__pycache__/clean_occurrences.cpython-311.pyc +0 -0
  68. package/skills/ecological-data-foundation/scripts/__pycache__/download_from_ebird.cpython-311.pyc +0 -0
  69. package/skills/ecological-data-foundation/scripts/__pycache__/download_from_inat.cpython-311.pyc +0 -0
  70. package/skills/ecological-data-foundation/scripts/__pycache__/download_from_iucn.cpython-311.pyc +0 -0
  71. package/skills/ecological-data-foundation/scripts/__pycache__/download_from_obis.cpython-311.pyc +0 -0
  72. package/skills/ecological-data-foundation/scripts/clean_occurrences.R +230 -0
  73. package/skills/ecological-data-foundation/scripts/clean_occurrences.py +268 -0
  74. package/skills/ecological-data-foundation/scripts/download_from_ebird.R +251 -0
  75. package/skills/ecological-data-foundation/scripts/download_from_ebird.py +364 -0
  76. package/skills/ecological-data-foundation/scripts/download_from_gbif.R +315 -0
  77. package/skills/ecological-data-foundation/scripts/download_from_gbif.py +407 -0
  78. package/skills/ecological-data-foundation/scripts/download_from_inat.R +238 -0
  79. package/skills/ecological-data-foundation/scripts/download_from_inat.py +304 -0
  80. package/skills/ecological-data-foundation/scripts/download_from_iucn.R +273 -0
  81. package/skills/ecological-data-foundation/scripts/download_from_iucn.py +344 -0
  82. package/skills/ecological-data-foundation/scripts/download_from_obis.R +248 -0
  83. package/skills/ecological-data-foundation/scripts/download_from_obis.py +318 -0
  84. package/skills/ecological-impact-assessment/SKILL.md +123 -0
  85. package/skills/ecological-impact-assessment/examples/example-prompts.md +32 -0
  86. package/skills/ecological-impact-assessment/resources/baci-design-guide.md +55 -0
  87. package/skills/ecological-impact-assessment/resources/fragmentation-metrics-reference.md +86 -0
  88. package/skills/ecological-impact-assessment/resources/pressure-index-template.md +78 -0
  89. package/skills/ecological-impact-assessment/resources/study-design-guide.md +168 -0
  90. package/skills/ecological-impact-assessment/scripts/baci_analysis.R +161 -0
  91. package/skills/ecological-impact-assessment/scripts/fragmentation_analysis.py +141 -0
  92. package/skills/ecological-impact-assessment/scripts/power_analysis_baci.R +274 -0
  93. package/skills/ecosystem-services-assessment/SKILL.md +125 -0
  94. package/skills/ecosystem-services-assessment/examples/example-prompts.md +24 -0
  95. package/skills/ecosystem-services-assessment/resources/es-indicator-reference.md +45 -0
  96. package/skills/ecosystem-services-assessment/resources/invest-parameter-guide.md +86 -0
  97. package/skills/ecosystem-services-assessment/resources/rusle-coefficients.md +88 -0
  98. package/skills/ecosystem-services-assessment/scripts/__pycache__/compute_es.cpython-311.pyc +0 -0
  99. package/skills/ecosystem-services-assessment/scripts/compute_es.py +189 -0
  100. package/skills/ecosystem-services-assessment/scripts/tradeoff_analysis.R +161 -0
  101. package/skills/environmental-time-series/SKILL.md +125 -0
  102. package/skills/environmental-time-series/examples/example-prompts.md +33 -0
  103. package/skills/environmental-time-series/resources/anomaly-indices-reference.md +88 -0
  104. package/skills/environmental-time-series/resources/bfast-parameter-guide.md +69 -0
  105. package/skills/environmental-time-series/scripts/__pycache__/recovery_trajectory.cpython-311.pyc +0 -0
  106. package/skills/environmental-time-series/scripts/__pycache__/trend_analysis.cpython-311.pyc +0 -0
  107. package/skills/environmental-time-series/scripts/recovery_trajectory.R +305 -0
  108. package/skills/environmental-time-series/scripts/recovery_trajectory.py +178 -0
  109. package/skills/environmental-time-series/scripts/trend_analysis.R +192 -0
  110. package/skills/environmental-time-series/scripts/trend_analysis.py +184 -0
  111. package/skills/geoprocessing-for-ecology/SKILL.md +123 -0
  112. package/skills/geoprocessing-for-ecology/examples/example-prompts.md +32 -0
  113. package/skills/geoprocessing-for-ecology/resources/crs-reference.md +62 -0
  114. package/skills/geoprocessing-for-ecology/resources/global-predictor-sources.md +331 -0
  115. package/skills/geoprocessing-for-ecology/resources/resampling-methods.md +57 -0
  116. package/skills/geoprocessing-for-ecology/scripts/__pycache__/download_predictors.cpython-311.pyc +0 -0
  117. package/skills/geoprocessing-for-ecology/scripts/download_predictors.R +239 -0
  118. package/skills/geoprocessing-for-ecology/scripts/download_predictors.py +379 -0
  119. package/skills/geoprocessing-for-ecology/scripts/stack_and_extract.R +224 -0
  120. package/skills/geoprocessing-for-ecology/scripts/stack_and_extract.py +172 -0
  121. package/skills/landscape-connectivity/SKILL.md +170 -0
  122. package/skills/landscape-connectivity/examples/example-prompts.md +96 -0
  123. package/skills/landscape-connectivity/examples/jaguar_mesoamerica_corridor_example.md +271 -0
  124. package/skills/landscape-connectivity/resources/circuitscape-parameter-guide.md +155 -0
  125. package/skills/landscape-connectivity/resources/graph-theory-for-ecology.md +134 -0
  126. package/skills/landscape-connectivity/resources/resistance-surface-guide.md +141 -0
  127. package/skills/landscape-connectivity/scripts/connectivity_analysis.py +387 -0
  128. package/skills/landscape-connectivity/scripts/connectivity_metrics.R +274 -0
  129. package/skills/landscape-connectivity/scripts/resistance_surface.R +239 -0
  130. package/skills/model-validation-and-uncertainty/SKILL.md +131 -0
  131. package/skills/model-validation-and-uncertainty/examples/example-prompts.md +30 -0
  132. package/skills/model-validation-and-uncertainty/resources/extrapolation-risk-guide.md +236 -0
  133. package/skills/model-validation-and-uncertainty/resources/metric-selection-guide.md +52 -0
  134. package/skills/model-validation-and-uncertainty/resources/threshold-selection-guide.md +64 -0
  135. package/skills/model-validation-and-uncertainty/scripts/__pycache__/validate_model.cpython-311.pyc +0 -0
  136. package/skills/model-validation-and-uncertainty/scripts/extrapolation_risk.R +315 -0
  137. package/skills/model-validation-and-uncertainty/scripts/validate_model.py +226 -0
  138. package/skills/model-validation-and-uncertainty/scripts/validate_sdm.R +162 -0
  139. package/skills/occupancy-and-detection/SKILL.md +126 -0
  140. package/skills/occupancy-and-detection/examples/example-prompts.md +33 -0
  141. package/skills/occupancy-and-detection/resources/detection-history-format.md +100 -0
  142. package/skills/occupancy-and-detection/resources/occupancy-study-design.md +47 -0
  143. package/skills/occupancy-and-detection/scripts/__pycache__/occupancy_analysis.cpython-311.pyc +0 -0
  144. package/skills/occupancy-and-detection/scripts/occupancy_analysis.R +160 -0
  145. package/skills/occupancy-and-detection/scripts/occupancy_analysis.py +159 -0
  146. package/skills/population-viability-analysis/SKILL.md +161 -0
  147. package/skills/population-viability-analysis/examples/african_elephant_pva_example.md +266 -0
  148. package/skills/population-viability-analysis/examples/example-prompts.md +95 -0
  149. package/skills/population-viability-analysis/resources/extinction-risk-thresholds.md +128 -0
  150. package/skills/population-viability-analysis/resources/matrix-model-guide.md +139 -0
  151. package/skills/population-viability-analysis/resources/sensitivity-elasticity-reference.md +182 -0
  152. package/skills/population-viability-analysis/scripts/matrix_pva.R +258 -0
  153. package/skills/population-viability-analysis/scripts/pva_analysis.py +442 -0
  154. package/skills/population-viability-analysis/scripts/stochastic_pva.R +353 -0
  155. package/skills/predictive-modeling-best-practices/SKILL.md +136 -0
  156. package/skills/predictive-modeling-best-practices/examples/example-prompts.md +58 -0
  157. package/skills/predictive-modeling-best-practices/resources/collinearity-decision-tree.md +65 -0
  158. package/skills/predictive-modeling-best-practices/resources/sampling-bias-correction.md +267 -0
  159. package/skills/predictive-modeling-best-practices/resources/spatial-cv-guide.md +73 -0
  160. package/skills/predictive-modeling-best-practices/scripts/__pycache__/spatial_cv.cpython-311.pyc +0 -0
  161. package/skills/predictive-modeling-best-practices/scripts/collinearity_check.R +112 -0
  162. package/skills/predictive-modeling-best-practices/scripts/spatial_cv.py +182 -0
  163. package/skills/reproducible-ecology-pipeline/SKILL.md +139 -0
  164. package/skills/reproducible-ecology-pipeline/examples/example-prompts.md +35 -0
  165. package/skills/reproducible-ecology-pipeline/resources/directory-structure-template.md +94 -0
  166. package/skills/reproducible-ecology-pipeline/resources/params-yaml-template.yaml +84 -0
  167. package/skills/reproducible-ecology-pipeline/resources/reproducibility-checklist-template.md +66 -0
  168. package/skills/reproducible-ecology-pipeline/scripts/generate_file_manifest.py +110 -0
  169. package/skills/reproducible-ecology-pipeline/scripts/init_project.sh +53 -0
  170. package/skills/spatial-prioritization/SKILL.md +162 -0
  171. package/skills/spatial-prioritization/examples/biodiversity_hotspot_prioritization_example.md +289 -0
  172. package/skills/spatial-prioritization/examples/example-prompts.md +93 -0
  173. package/skills/spatial-prioritization/resources/cost-surface-reference.md +130 -0
  174. package/skills/spatial-prioritization/resources/marxan-vs-prioritizr-comparison.md +125 -0
  175. package/skills/spatial-prioritization/resources/prioritizr-formulation-guide.md +188 -0
  176. package/skills/spatial-prioritization/resources/representation-targets-guide.md +186 -0
  177. package/skills/spatial-prioritization/scripts/prioritization_sensitivity.R +320 -0
  178. package/skills/spatial-prioritization/scripts/run_prioritization.R +336 -0
  179. package/skills/species-distribution-modeling/SKILL.md +139 -0
  180. package/skills/species-distribution-modeling/examples/example-prompts.md +36 -0
  181. package/skills/species-distribution-modeling/resources/algorithm-comparison.md +25 -0
  182. package/skills/species-distribution-modeling/resources/calibration-area-guide.md +71 -0
  183. package/skills/species-distribution-modeling/resources/climate-scenario-preparation.md +170 -0
  184. package/skills/species-distribution-modeling/resources/maxent-calibration-guide.md +211 -0
  185. package/skills/species-distribution-modeling/resources/sdm-checklist.md +37 -0
  186. package/skills/species-distribution-modeling/scripts/predict_distribution.R +236 -0
  187. package/skills/species-distribution-modeling/scripts/predict_distribution.py +286 -0
  188. package/skills/species-distribution-modeling/scripts/prepare_future_layers.R +351 -0
  189. package/skills/species-distribution-modeling/scripts/project_scenarios.R +220 -0
  190. package/skills/species-distribution-modeling/scripts/run_ensemble_sdm.R +99 -0
  191. package/skills/species-distribution-modeling/scripts/sdm_pipeline.py +318 -0
  192. package/skills/species-distribution-modeling/scripts/tune_maxnet.R +344 -0
  193. package/templates/SKILL_TEMPLATE.md +225 -0
  194. package/templates/checklists/data-submission-checklist.md +38 -0
  195. package/templates/checklists/post-analysis-checklist.md +55 -0
  196. package/templates/checklists/pre-analysis-checklist.md +31 -0
  197. package/templates/prompts/debug-skill.md +47 -0
  198. package/templates/prompts/invoke-skill.md +34 -0
  199. package/templates/prompts/invoke-workflow.md +45 -0
  200. package/templates/reports/technical-report-template.md +80 -0
  201. package/templates/scripts/logger_setup.R +79 -0
  202. package/templates/scripts/logger_setup.py +119 -0
  203. package/templates/scripts/params_loader.R +28 -0
  204. package/templates/scripts/params_loader.py +38 -0
  205. package/workflows/analyze-community-structure/WORKFLOW.md +72 -0
  206. package/workflows/analyze-environmental-change/WORKFLOW.md +73 -0
  207. package/workflows/assess-ecological-impact/WORKFLOW.md +75 -0
  208. package/workflows/assess-ecosystem-services/WORKFLOW.md +68 -0
  209. package/workflows/assess-landscape-connectivity/WORKFLOW.md +84 -0
  210. package/workflows/build-fire-risk-map/WORKFLOW.md +79 -0
  211. package/workflows/produce-technical-report/WORKFLOW.md +113 -0
  212. package/workflows/run-camera-trap-occupancy/WORKFLOW.md +87 -0
  213. package/workflows/run-conservation-prioritization/WORKFLOW.md +89 -0
  214. package/workflows/run-multispecies-screening/WORKFLOW.md +197 -0
  215. package/workflows/run-occupancy-analysis/WORKFLOW.md +74 -0
  216. package/workflows/run-population-viability/WORKFLOW.md +90 -0
  217. package/workflows/run-sdm-study/WORKFLOW.md +99 -0
@@ -0,0 +1,1020 @@
1
+ {
2
+ "skills": [
3
+ {
4
+ "skill_id": "biostatistics-workbench",
5
+ "display_name": "Biostatistics Workbench",
6
+ "version": "1.0.0",
7
+ "domain": [
8
+ "statistics",
9
+ "GLM",
10
+ "GLMM",
11
+ "hypothesis testing",
12
+ "model selection"
13
+ ],
14
+ "trigger_keywords": [
15
+ "statistical test",
16
+ "GLM",
17
+ "GLMM",
18
+ "mixed model",
19
+ "linear model",
20
+ "effect size",
21
+ "confidence interval",
22
+ "AIC",
23
+ "model selection",
24
+ "normality test",
25
+ "assumption check",
26
+ "regression",
27
+ "ANOVA",
28
+ "p-value",
29
+ "overdispersion",
30
+ "residual diagnostics"
31
+ ],
32
+ "min_inputs": {
33
+ "response_variable": "required",
34
+ "predictor_variables": "required",
35
+ "random_effects_structure": "conditional",
36
+ "study_design_description": "recommended"
37
+ },
38
+ "primary_outputs": [
39
+ "model_summary.txt",
40
+ "model_selection_table.csv",
41
+ "assumption_diagnostics/",
42
+ "effect_sizes.csv",
43
+ "stats_report.md"
44
+ ],
45
+ "depends_on_skills": [
46
+ "ecological-data-foundation"
47
+ ],
48
+ "called_by_workflows": [
49
+ "assess-ecological-impact",
50
+ "analyze-community-structure",
51
+ "run-occupancy-analysis"
52
+ ],
53
+ "decision_points": {
54
+ "n_min_glm": 20,
55
+ "n_recommended_glm": 50,
56
+ "action_if_overdispersion": "switch to negative binomial or quasi family",
57
+ "action_if_residuals_fail": "transform response or use non-parametric alternative"
58
+ },
59
+ "skill_md_path": "skills/biostatistics-workbench/SKILL.md"
60
+ },
61
+ {
62
+ "skill_id": "community-ecology-ordination",
63
+ "display_name": "Community Ecology Ordination",
64
+ "version": "1.0.0",
65
+ "domain": [
66
+ "community ecology",
67
+ "ordination",
68
+ "multivariate",
69
+ "diversity",
70
+ "beta diversity"
71
+ ],
72
+ "trigger_keywords": [
73
+ "species composition",
74
+ "community structure",
75
+ "NMDS",
76
+ "PCA ordination",
77
+ "PERMANOVA",
78
+ "beta diversity",
79
+ "alpha diversity",
80
+ "species richness",
81
+ "Bray-Curtis",
82
+ "assemblage",
83
+ "species matrix",
84
+ "diversity index",
85
+ "indicator species",
86
+ "cluster analysis",
87
+ "dissimilarity"
88
+ ],
89
+ "min_inputs": {
90
+ "species_site_matrix_csv": "required",
91
+ "site_environmental_metadata_csv": "recommended",
92
+ "grouping_variable": "recommended"
93
+ },
94
+ "primary_outputs": [
95
+ "ordination_plot.png",
96
+ "diversity_metrics.csv",
97
+ "beta_diversity_matrix.csv",
98
+ "permanova_results.txt",
99
+ "cluster_dendrogram.png",
100
+ "community_report.md"
101
+ ],
102
+ "depends_on_skills": [
103
+ "ecological-data-foundation"
104
+ ],
105
+ "called_by_workflows": [
106
+ "analyze-community-structure"
107
+ ],
108
+ "decision_points": {
109
+ "n_sites_min": 5,
110
+ "n_sites_recommended": 10,
111
+ "nmds_stress_max_acceptable": 0.2,
112
+ "action_if_stress_above_threshold": "increase NMDS dimensions to 3 or reduce species set",
113
+ "action_if_permanova_r2_low": "report effect size and discuss ecological significance"
114
+ },
115
+ "skill_md_path": "skills/community-ecology-ordination/SKILL.md"
116
+ },
117
+ {
118
+ "skill_id": "ecological-data-foundation",
119
+ "display_name": "Ecological Data Foundation",
120
+ "version": "1.0.0",
121
+ "domain": [
122
+ "data cleaning",
123
+ "occurrence records",
124
+ "data validation",
125
+ "QA",
126
+ "Darwin Core"
127
+ ],
128
+ "trigger_keywords": [
129
+ "clean data",
130
+ "validate records",
131
+ "occurrence data",
132
+ "duplicate removal",
133
+ "coordinate cleaning",
134
+ "outlier detection",
135
+ "data preparation",
136
+ "data ingestion",
137
+ "merge datasets",
138
+ "standardise fields",
139
+ "GBIF download",
140
+ "Darwin Core",
141
+ "data quality",
142
+ "flagged records",
143
+ "taxonomic harmonisation",
144
+ "data foundation",
145
+ "iNaturalist",
146
+ "eBird",
147
+ "OBIS",
148
+ "IUCN Red List",
149
+ "occurrence download",
150
+ "biodiversity data",
151
+ "marine occurrence",
152
+ "conservation status"
153
+ ],
154
+ "min_inputs": {
155
+ "raw_occurrence_or_survey_data": "required",
156
+ "data_dictionary_or_protocol": "recommended",
157
+ "environmental_layers": "optional",
158
+ "existing_metadata_record": "optional"
159
+ },
160
+ "primary_outputs": [
161
+ "data_clean.csv",
162
+ "qa_report.md",
163
+ "schema.yaml",
164
+ "metadata.xml",
165
+ "flagged_records.csv",
166
+ "occurrences_raw_GBIF_{species}_{date}.csv",
167
+ "occurrences_raw_iNat_{species}_{date}.csv",
168
+ "occurrences_raw_eBird_{species}_{date}.csv",
169
+ "occurrences_raw_OBIS_{species}_{date}.csv",
170
+ "iucn_status_{species}.csv",
171
+ "iucn_habitats_{species}.csv",
172
+ "download_metadata_{source}_{species}.txt"
173
+ ],
174
+ "depends_on_skills": [],
175
+ "called_by_workflows": [
176
+ "run-sdm-study",
177
+ "run-occupancy-analysis",
178
+ "assess-ecological-impact",
179
+ "analyze-community-structure",
180
+ "analyze-environmental-change",
181
+ "assess-ecosystem-services",
182
+ "run-multispecies-screening"
183
+ ],
184
+ "decision_points": {
185
+ "n_records_min_for_sdm": 30,
186
+ "action_if_duplicates_exceed_20pct": "investigate source bias before proceeding",
187
+ "action_if_coordinates_fail_cleaning": "flag and exclude; document in qa_report.md"
188
+ },
189
+ "skill_md_path": "skills/ecological-data-foundation/SKILL.md"
190
+ },
191
+ {
192
+ "skill_id": "ecological-impact-assessment",
193
+ "display_name": "Ecological Impact Assessment",
194
+ "version": "1.0.0",
195
+ "domain": [
196
+ "BACI",
197
+ "impact assessment",
198
+ "fragmentation",
199
+ "landscape ecology",
200
+ "pressure index"
201
+ ],
202
+ "trigger_keywords": [
203
+ "BACI",
204
+ "before after control impact",
205
+ "impact assessment",
206
+ "disturbance effect",
207
+ "land use change",
208
+ "fragmentation",
209
+ "landscape metrics",
210
+ "pressure index",
211
+ "threat index",
212
+ "intervention effect",
213
+ "management effectiveness",
214
+ "before after comparison",
215
+ "control impact"
216
+ ],
217
+ "min_inputs": {
218
+ "indicator_time_series_csv": "required",
219
+ "disturbance_event_date": "required",
220
+ "land_cover_maps": "conditional",
221
+ "pressure_layers": "optional"
222
+ },
223
+ "primary_outputs": [
224
+ "baci_results.csv",
225
+ "fragmentation_metrics.csv",
226
+ "pressure_index.tif",
227
+ "impact_synthesis.md",
228
+ "impact_plots/"
229
+ ],
230
+ "depends_on_skills": [
231
+ "ecological-data-foundation",
232
+ "geoprocessing-for-ecology"
233
+ ],
234
+ "called_by_workflows": [
235
+ "assess-ecological-impact"
236
+ ],
237
+ "decision_points": {
238
+ "n_sites_min_per_group": 5,
239
+ "n_time_periods_min": 3,
240
+ "action_if_baci_ns": "compute post-hoc power; report effect size with CI",
241
+ "action_if_permdisp_significant": "report PERMDISP alongside PERMANOVA; discuss heterogeneity"
242
+ },
243
+ "skill_md_path": "skills/ecological-impact-assessment/SKILL.md"
244
+ },
245
+ {
246
+ "skill_id": "ecosystem-services-assessment",
247
+ "display_name": "Ecosystem Services Assessment",
248
+ "version": "1.0.0",
249
+ "domain": [
250
+ "ecosystem services",
251
+ "InVEST",
252
+ "trade-offs",
253
+ "land cover",
254
+ "PES"
255
+ ],
256
+ "trigger_keywords": [
257
+ "ecosystem services",
258
+ "ES assessment",
259
+ "InVEST",
260
+ "carbon stock",
261
+ "water yield",
262
+ "soil erosion",
263
+ "biodiversity service",
264
+ "trade-off analysis",
265
+ "PES",
266
+ "payments for ecosystem services",
267
+ "ES mapping",
268
+ "ES valuation",
269
+ "natural capital",
270
+ "RUSLE",
271
+ "habitat quality",
272
+ "pollination service"
273
+ ],
274
+ "min_inputs": {
275
+ "land_cover_map": "required",
276
+ "biophysical_data": "required",
277
+ "study_area_polygon": "required",
278
+ "socioeconomic_data": "optional"
279
+ },
280
+ "primary_outputs": [
281
+ "es_indicator_maps/",
282
+ "es_summary_table.csv",
283
+ "tradeoff_matrix.csv",
284
+ "tradeoff_plot.png",
285
+ "es_report.md"
286
+ ],
287
+ "depends_on_skills": [
288
+ "ecological-data-foundation",
289
+ "geoprocessing-for-ecology"
290
+ ],
291
+ "called_by_workflows": [
292
+ "assess-ecosystem-services"
293
+ ],
294
+ "decision_points": {
295
+ "land_cover_accuracy_min": 85,
296
+ "action_if_accuracy_below": "perform uncertainty analysis; include classification error in ES estimates",
297
+ "action_if_invest_nodata_exceeds_30pct": "check CRS and extent alignment before rerunning"
298
+ },
299
+ "skill_md_path": "skills/ecosystem-services-assessment/SKILL.md"
300
+ },
301
+ {
302
+ "skill_id": "environmental-time-series",
303
+ "display_name": "Environmental Time Series Analysis",
304
+ "version": "1.0.0",
305
+ "domain": [
306
+ "time series",
307
+ "trend detection",
308
+ "BFAST",
309
+ "remote sensing",
310
+ "anomaly detection"
311
+ ],
312
+ "trigger_keywords": [
313
+ "time series",
314
+ "trend analysis",
315
+ "NDVI trend",
316
+ "EVI",
317
+ "LST",
318
+ "Mann-Kendall",
319
+ "BFAST",
320
+ "breakpoint",
321
+ "structural change",
322
+ "anomaly detection",
323
+ "seasonal decomposition",
324
+ "recovery trajectory",
325
+ "regime shift",
326
+ "temporal trend",
327
+ "pixel-wise trend",
328
+ "Sen slope",
329
+ "STL decomposition"
330
+ ],
331
+ "min_inputs": {
332
+ "time_indexed_variable": "required",
333
+ "time_series_frequency": "required",
334
+ "disturbance_event_date": "conditional",
335
+ "baseline_period": "recommended"
336
+ },
337
+ "primary_outputs": [
338
+ "trend_results.csv",
339
+ "seasonal_decomposition.png",
340
+ "breakpoints.csv",
341
+ "anomaly_series.csv",
342
+ "recovery_metrics.csv",
343
+ "timeseries_report.md"
344
+ ],
345
+ "depends_on_skills": [
346
+ "ecological-data-foundation",
347
+ "geoprocessing-for-ecology"
348
+ ],
349
+ "called_by_workflows": [
350
+ "analyze-environmental-change",
351
+ "build-fire-risk-map"
352
+ ],
353
+ "decision_points": {
354
+ "n_time_steps_min": 10,
355
+ "action_if_autocorrelation_detected": "apply pre-whitening before Mann-Kendall test",
356
+ "action_if_bfast_breakpoints_exceed_5": "increase h parameter; check for artefacts"
357
+ },
358
+ "skill_md_path": "skills/environmental-time-series/SKILL.md"
359
+ },
360
+ {
361
+ "skill_id": "geoprocessing-for-ecology",
362
+ "display_name": "Geoprocessing for Ecology",
363
+ "version": "1.0.0",
364
+ "domain": [
365
+ "geoprocessing",
366
+ "CRS",
367
+ "raster",
368
+ "vector",
369
+ "spatial extraction",
370
+ "remote sensing"
371
+ ],
372
+ "trigger_keywords": [
373
+ "reproject",
374
+ "CRS",
375
+ "coordinate reference system",
376
+ "clip raster",
377
+ "mask raster",
378
+ "spatial extraction",
379
+ "extract values",
380
+ "buffer",
381
+ "raster stack",
382
+ "resample",
383
+ "spatial join",
384
+ "overlay",
385
+ "geoprocessing",
386
+ "GeoTIFF",
387
+ "shapefile",
388
+ "GDAL",
389
+ "study area mask",
390
+ "crop raster",
391
+ "align rasters"
392
+ ],
393
+ "min_inputs": {
394
+ "occurrence_or_sample_points": "required",
395
+ "study_area_polygon": "required",
396
+ "environmental_rasters": "required",
397
+ "land_cover_layer": "optional"
398
+ },
399
+ "primary_outputs": [
400
+ "layers_reprojected/",
401
+ "predictors_stack.tif",
402
+ "points_with_env.csv",
403
+ "study_area_buffered.gpkg",
404
+ "spatial_qa_report.md",
405
+ "worldclim/wc2.1_{res}m_bio_{1..19}.tif",
406
+ "chelsa/CHELSA_bio{1..19}.tif",
407
+ "era5/era5_land_temp_precip_monthly.nc",
408
+ "predictor_metadata.csv"
409
+ ],
410
+ "depends_on_skills": [
411
+ "ecological-data-foundation"
412
+ ],
413
+ "called_by_workflows": [
414
+ "run-sdm-study",
415
+ "assess-ecological-impact",
416
+ "assess-ecosystem-services",
417
+ "build-fire-risk-map",
418
+ "run-multispecies-screening"
419
+ ],
420
+ "decision_points": {
421
+ "action_if_crs_mismatch": "reproject all layers to common CRS before any spatial operation",
422
+ "action_if_resolution_mismatch": "resample to coarsest resolution; document choice in decision_log.md",
423
+ "action_if_extent_mismatch": "clip all layers to study area extent"
424
+ },
425
+ "skill_md_path": "skills/geoprocessing-for-ecology/SKILL.md"
426
+ },
427
+ {
428
+ "skill_id": "model-validation-and-uncertainty",
429
+ "display_name": "Model Validation and Uncertainty",
430
+ "version": "1.0.0",
431
+ "domain": [
432
+ "model validation",
433
+ "AUC",
434
+ "calibration",
435
+ "uncertainty",
436
+ "extrapolation risk",
437
+ "MOP"
438
+ ],
439
+ "trigger_keywords": [
440
+ "model performance",
441
+ "AUC",
442
+ "ROC curve",
443
+ "model validation",
444
+ "calibration curve",
445
+ "uncertainty",
446
+ "extrapolation risk",
447
+ "MOP analysis",
448
+ "MESS",
449
+ "ExDet",
450
+ "overfitting",
451
+ "cross-validation performance",
452
+ "TSS",
453
+ "sensitivity",
454
+ "specificity",
455
+ "ensemble uncertainty",
456
+ "prediction interval",
457
+ "bootstrap uncertainty"
458
+ ],
459
+ "min_inputs": {
460
+ "fitted_model_object": "required",
461
+ "validation_dataset": "required",
462
+ "training_cv_predictions": "required",
463
+ "prediction_surface": "conditional"
464
+ },
465
+ "primary_outputs": [
466
+ "performance_metrics.csv",
467
+ "calibration_plot.png",
468
+ "roc_curve.png",
469
+ "sensitivity_report.md",
470
+ "uncertainty_map.tif",
471
+ "validation_report.md"
472
+ ],
473
+ "depends_on_skills": [
474
+ "predictive-modeling-best-practices"
475
+ ],
476
+ "called_by_workflows": [
477
+ "run-sdm-study",
478
+ "run-multispecies-screening",
479
+ "assess-ecosystem-services"
480
+ ],
481
+ "decision_points": {
482
+ "auc_min_acceptable": 0.7,
483
+ "tss_min_acceptable": 0.4,
484
+ "mop_zero_pct_warning_threshold": 30,
485
+ "action_if_auc_below": "revise predictors; expand calibration grid; report as unreliable",
486
+ "action_if_mop_zero_exceeds_threshold": "restrict projection extent; add explicit caveats"
487
+ },
488
+ "skill_md_path": "skills/model-validation-and-uncertainty/SKILL.md"
489
+ },
490
+ {
491
+ "skill_id": "occupancy-and-detection",
492
+ "display_name": "Occupancy and Detection Modeling",
493
+ "version": "1.0.0",
494
+ "domain": [
495
+ "occupancy",
496
+ "detection probability",
497
+ "unmarked",
498
+ "monitoring",
499
+ "imperfect detection"
500
+ ],
501
+ "trigger_keywords": [
502
+ "occupancy model",
503
+ "detection probability",
504
+ "imperfect detection",
505
+ "occupancy estimation",
506
+ "unmarked",
507
+ "MacKenzie",
508
+ "psi",
509
+ "detection history",
510
+ "repeated visits",
511
+ "site occupancy",
512
+ "dynamic occupancy",
513
+ "colonisation",
514
+ "extinction probability",
515
+ "goodness of fit",
516
+ "MacKenzie-Bailey",
517
+ "c-hat"
518
+ ],
519
+ "min_inputs": {
520
+ "detection_history_matrix": "required",
521
+ "site_covariates_csv": "recommended",
522
+ "observation_covariates_csv": "recommended",
523
+ "n_seasons": "conditional"
524
+ },
525
+ "primary_outputs": [
526
+ "occupancy_estimates.csv",
527
+ "detection_estimates.csv",
528
+ "model_selection_table.csv",
529
+ "covariate_effects.csv",
530
+ "gof_report.md",
531
+ "occupancy_map.tif"
532
+ ],
533
+ "depends_on_skills": [
534
+ "ecological-data-foundation"
535
+ ],
536
+ "called_by_workflows": [
537
+ "run-occupancy-analysis"
538
+ ],
539
+ "decision_points": {
540
+ "n_sites_min": 15,
541
+ "n_sites_recommended": 30,
542
+ "n_visits_min": 3,
543
+ "c_hat_threshold": 1.5,
544
+ "action_if_gof_fails": "add detection covariate or relax closure assumption",
545
+ "action_if_c_hat_above_threshold": "use QAICc for model selection; report overdispersion"
546
+ },
547
+ "skill_md_path": "skills/occupancy-and-detection/SKILL.md"
548
+ },
549
+ {
550
+ "skill_id": "predictive-modeling-best-practices",
551
+ "display_name": "Predictive Modeling Best Practices",
552
+ "version": "1.0.0",
553
+ "domain": [
554
+ "predictive modeling",
555
+ "collinearity",
556
+ "cross-validation",
557
+ "hyperparameter tuning",
558
+ "data leakage"
559
+ ],
560
+ "trigger_keywords": [
561
+ "collinearity",
562
+ "VIF",
563
+ "predictor selection",
564
+ "feature selection",
565
+ "cross-validation strategy",
566
+ "spatial CV",
567
+ "block CV",
568
+ "hyperparameter tuning",
569
+ "overfitting",
570
+ "data leakage",
571
+ "sampling bias",
572
+ "background points",
573
+ "pseudo-absence",
574
+ "model design",
575
+ "predictor reduction",
576
+ "ENMeval tuning",
577
+ "regularisation",
578
+ "spatial autocorrelation"
579
+ ],
580
+ "min_inputs": {
581
+ "feature_matrix_csv": "required",
582
+ "target_variable": "required",
583
+ "spatial_coordinates": "recommended",
584
+ "candidate_model_list": "optional"
585
+ },
586
+ "primary_outputs": [
587
+ "cv_strategy.md",
588
+ "collinearity_report.csv",
589
+ "selected_predictors.txt",
590
+ "tuning_results.csv",
591
+ "leakage_audit.md",
592
+ "modeling_plan.md"
593
+ ],
594
+ "depends_on_skills": [
595
+ "ecological-data-foundation",
596
+ "geoprocessing-for-ecology"
597
+ ],
598
+ "called_by_workflows": [
599
+ "run-sdm-study",
600
+ "run-multispecies-screening"
601
+ ],
602
+ "decision_points": {
603
+ "vif_max_acceptable": 10,
604
+ "pearson_correlation_max": 0.7,
605
+ "action_if_vif_above_threshold": "remove predictor with highest VIF iteratively until all below threshold",
606
+ "action_if_spatial_autocorrelation": "use spatial block CV instead of random CV"
607
+ },
608
+ "skill_md_path": "skills/predictive-modeling-best-practices/SKILL.md"
609
+ },
610
+ {
611
+ "skill_id": "reproducible-ecology-pipeline",
612
+ "display_name": "Reproducible Ecology Pipeline",
613
+ "version": "1.0.0",
614
+ "domain": [
615
+ "reproducibility",
616
+ "provenance",
617
+ "audit trail",
618
+ "renv",
619
+ "targets",
620
+ "DVC"
621
+ ],
622
+ "trigger_keywords": [
623
+ "reproducibility",
624
+ "audit trail",
625
+ "data provenance",
626
+ "decision log",
627
+ "file manifest",
628
+ "session info",
629
+ "software environment",
630
+ "renv",
631
+ "targets",
632
+ "DVC",
633
+ "MLflow",
634
+ "parameter manifest",
635
+ "reproducible workflow",
636
+ "version control",
637
+ "project initialisation",
638
+ "checksums",
639
+ "pipeline logging"
640
+ ],
641
+ "min_inputs": {
642
+ "project_directory": "required",
643
+ "analysis_scripts": "recommended",
644
+ "model_parameter_files": "recommended",
645
+ "qa_reports_from_upstream_skills": "recommended"
646
+ },
647
+ "primary_outputs": [
648
+ "reproducibility_checklist.md",
649
+ "parameter_manifest.yaml",
650
+ "decision_log.md",
651
+ "software_environment.txt",
652
+ "data_provenance.md",
653
+ "file_manifest.md"
654
+ ],
655
+ "depends_on_skills": [],
656
+ "called_by_workflows": [
657
+ "run-sdm-study",
658
+ "run-occupancy-analysis",
659
+ "assess-ecological-impact",
660
+ "analyze-community-structure",
661
+ "analyze-environmental-change",
662
+ "assess-ecosystem-services",
663
+ "produce-technical-report"
664
+ ],
665
+ "decision_points": {
666
+ "action_if_not_reproducible_from_params": "complete parameter manifest before finalising any report",
667
+ "action_if_seed_sensitive_results": "document random seed explicitly in parameter_manifest.yaml"
668
+ },
669
+ "skill_md_path": "skills/reproducible-ecology-pipeline/SKILL.md"
670
+ },
671
+ {
672
+ "skill_id": "species-distribution-modeling",
673
+ "display_name": "Species Distribution Modeling",
674
+ "version": "1.0.0",
675
+ "domain": [
676
+ "SDM",
677
+ "ENM",
678
+ "niche modeling",
679
+ "MaxEnt",
680
+ "ensemble modeling"
681
+ ],
682
+ "trigger_keywords": [
683
+ "distribution model",
684
+ "habitat suitability",
685
+ "MaxEnt",
686
+ "niche model",
687
+ "potential distribution",
688
+ "range map",
689
+ "suitable area",
690
+ "ecological niche",
691
+ "ENM",
692
+ "biomod2",
693
+ "ensemble SDM",
694
+ "climate projection",
695
+ "invasion risk",
696
+ "range shift",
697
+ "suitability map",
698
+ "calibration area",
699
+ "occurrence modeling"
700
+ ],
701
+ "min_inputs": {
702
+ "occurrences_csv": "required",
703
+ "predictor_stack_tif": "required",
704
+ "study_area": "required",
705
+ "future_scenarios": "optional"
706
+ },
707
+ "primary_outputs": [
708
+ "suitability_current.tif",
709
+ "suitability_binary.tif",
710
+ "suitability_scenarios/",
711
+ "ensemble_sd.tif",
712
+ "variable_importance.csv",
713
+ "response_curves.png",
714
+ "sdm_report.md"
715
+ ],
716
+ "depends_on_skills": [
717
+ "ecological-data-foundation",
718
+ "geoprocessing-for-ecology",
719
+ "predictive-modeling-best-practices"
720
+ ],
721
+ "called_by_workflows": [
722
+ "run-sdm-study",
723
+ "run-multispecies-screening"
724
+ ],
725
+ "decision_points": {
726
+ "n_occurrences_min": 10,
727
+ "n_occurrences_recommended": 30,
728
+ "auc_min_acceptable": 0.7,
729
+ "action_if_n_below_min": "do not fit model; use literature-based range map with explicit caveat",
730
+ "action_if_auc_below": "revise predictors and expand calibration grid"
731
+ },
732
+ "skill_md_path": "skills/species-distribution-modeling/SKILL.md"
733
+ },
734
+ {
735
+ "skill_id": "camera-trap-processing",
736
+ "display_name": "Camera Trap Processing",
737
+ "version": "1.0.0",
738
+ "domain": [
739
+ "camera traps",
740
+ "wildlife monitoring",
741
+ "activity patterns",
742
+ "occupancy"
743
+ ],
744
+ "trigger_keywords": [
745
+ "camera trap",
746
+ "wildlife camera",
747
+ "detection event",
748
+ "trap night",
749
+ "activity pattern",
750
+ "diel activity",
751
+ "camtrapR",
752
+ "overlap index",
753
+ "RAI",
754
+ "relative activity index",
755
+ "detection history",
756
+ "camera station"
757
+ ],
758
+ "min_inputs": {
759
+ "image_directory": "required",
760
+ "camera_metadata": "required",
761
+ "species_list": "recommended",
762
+ "independence_threshold_min": "optional"
763
+ },
764
+ "primary_outputs": [
765
+ "record_table.csv",
766
+ "detection_history.csv",
767
+ "camera_operation.csv",
768
+ "trap_effort_summary.csv",
769
+ "activity_overlap.csv",
770
+ "activity_plot.png"
771
+ ],
772
+ "depends_on_skills": [
773
+ "ecological-data-foundation",
774
+ "occupancy-and-detection"
775
+ ],
776
+ "called_by_workflows": [],
777
+ "decision_points": {
778
+ "independence_threshold_default_min": 30,
779
+ "min_events_for_activity": 75,
780
+ "min_events_for_RAI": 10,
781
+ "min_trap_nights_per_station": 100
782
+ },
783
+ "skill_md_path": "skills/camera-trap-processing/SKILL.md"
784
+ },
785
+ {
786
+ "skill_id": "acoustic-monitoring",
787
+ "display_name": "Acoustic Monitoring",
788
+ "version": "1.0.0",
789
+ "domain": [
790
+ "bioacoustics",
791
+ "PAM",
792
+ "soundscape ecology",
793
+ "species detection"
794
+ ],
795
+ "trigger_keywords": [
796
+ "acoustic monitoring",
797
+ "soundscape",
798
+ "bioacoustics",
799
+ "acoustic index",
800
+ "ACI",
801
+ "NDSI",
802
+ "BirdNET",
803
+ "passive acoustic",
804
+ "AudioMoth",
805
+ "dawn chorus",
806
+ "species detection",
807
+ "bat detector",
808
+ "acoustic complexity"
809
+ ],
810
+ "min_inputs": {
811
+ "audio_directory": "required",
812
+ "recording_metadata": "recommended",
813
+ "species_list": "optional",
814
+ "location_coordinates": "recommended"
815
+ },
816
+ "primary_outputs": [
817
+ "acoustic_indices_timeseries.csv",
818
+ "indices_summary.csv",
819
+ "detections_filtered.csv",
820
+ "species_list.csv",
821
+ "soundscape_plot.png"
822
+ ],
823
+ "depends_on_skills": [
824
+ "ecological-data-foundation",
825
+ "environmental-time-series"
826
+ ],
827
+ "called_by_workflows": [],
828
+ "decision_points": {
829
+ "min_confidence_threshold": 0.7,
830
+ "min_recording_hours_for_richness": 48,
831
+ "ndsi_disturbance_threshold": -0.3,
832
+ "snr_exclusion_threshold_db": 10
833
+ },
834
+ "skill_md_path": "skills/acoustic-monitoring/SKILL.md"
835
+ },
836
+ {
837
+ "skill_id": "landscape-connectivity",
838
+ "display_name": "Landscape Connectivity",
839
+ "version": "1.0.0",
840
+ "domain": [
841
+ "landscape ecology",
842
+ "connectivity",
843
+ "corridors",
844
+ "Circuitscape",
845
+ "graph theory"
846
+ ],
847
+ "trigger_keywords": [
848
+ "habitat connectivity",
849
+ "wildlife corridor",
850
+ "Circuitscape",
851
+ "IIC",
852
+ "dPC",
853
+ "resistance surface",
854
+ "least-cost path",
855
+ "stepping stone",
856
+ "fragmentation",
857
+ "patch importance",
858
+ "betweenness centrality",
859
+ "landscape graph"
860
+ ],
861
+ "min_inputs": {
862
+ "habitat_patches": "required",
863
+ "dispersal_distance_m": "required",
864
+ "landcover_raster": "recommended",
865
+ "resistance_table": "recommended"
866
+ },
867
+ "primary_outputs": [
868
+ "patch_metrics.csv",
869
+ "landscape_summary.csv",
870
+ "resistance_combined.tif",
871
+ "connectivity_graph.png",
872
+ "pinchpoints.tif"
873
+ ],
874
+ "depends_on_skills": [
875
+ "geoprocessing-for-ecology",
876
+ "ecological-impact-assessment"
877
+ ],
878
+ "called_by_workflows": [],
879
+ "decision_points": {
880
+ "min_patches_for_graph": 3,
881
+ "sensitivity_dmax_values": [
882
+ 500,
883
+ 1000,
884
+ 2000,
885
+ 5000
886
+ ],
887
+ "min_iic_pc_for_connectivity": 0.01,
888
+ "pinchpoint_percentile": 95
889
+ },
890
+ "skill_md_path": "skills/landscape-connectivity/SKILL.md"
891
+ },
892
+ {
893
+ "skill_id": "population-viability-analysis",
894
+ "display_name": "Population Viability Analysis",
895
+ "version": "1.0.0",
896
+ "domain": [
897
+ "PVA",
898
+ "population dynamics",
899
+ "matrix models",
900
+ "extinction risk",
901
+ "IUCN"
902
+ ],
903
+ "trigger_keywords": [
904
+ "PVA",
905
+ "population viability",
906
+ "Leslie matrix",
907
+ "Lefkovitch matrix",
908
+ "lambda",
909
+ "quasi-extinction",
910
+ "IUCN criterion",
911
+ "extinction probability",
912
+ "elasticity",
913
+ "sensitivity",
914
+ "stochastic PVA",
915
+ "MVP",
916
+ "minimum viable population"
917
+ ],
918
+ "min_inputs": {
919
+ "vital_rates_csv": "required",
920
+ "initial_population_size": "recommended",
921
+ "time_horizon_years": "optional",
922
+ "quasi_extinction_threshold": "optional"
923
+ },
924
+ "primary_outputs": [
925
+ "lambda_summary.csv",
926
+ "sensitivity_elasticity.csv",
927
+ "stochastic_pva_results.csv",
928
+ "extinction_curve.csv",
929
+ "iucn_criterion_e.csv",
930
+ "trajectory_plot.png"
931
+ ],
932
+ "depends_on_skills": [
933
+ "biostatistics-workbench",
934
+ "occupancy-and-detection"
935
+ ],
936
+ "called_by_workflows": [],
937
+ "decision_points": {
938
+ "min_years_vital_rates": 3,
939
+ "cv_threshold_stochastic_required": 0.3,
940
+ "lambda_rapid_decline": 0.95,
941
+ "default_quasi_ext_threshold": 50,
942
+ "default_t_max_years": 100
943
+ },
944
+ "skill_md_path": "skills/population-viability-analysis/SKILL.md"
945
+ },
946
+ {
947
+ "skill_id": "spatial-prioritization",
948
+ "display_name": "Spatial Prioritization",
949
+ "version": "1.0.0",
950
+ "domain": [
951
+ "conservation planning",
952
+ "prioritizr",
953
+ "Marxan",
954
+ "Zonation",
955
+ "ILP",
956
+ "protected areas"
957
+ ],
958
+ "trigger_keywords": [
959
+ "conservation planning",
960
+ "Marxan",
961
+ "Zonation",
962
+ "prioritizr",
963
+ "30x30",
964
+ "irreplaceability",
965
+ "BLM",
966
+ "boundary length modifier",
967
+ "protected area design",
968
+ "minimum set",
969
+ "systematic conservation",
970
+ "representation target"
971
+ ],
972
+ "min_inputs": {
973
+ "planning_unit_raster": "required",
974
+ "feature_rasters": "required",
975
+ "representation_targets": "required",
976
+ "cost_layer": "recommended",
977
+ "locked_in_areas": "optional",
978
+ "locked_out_areas": "optional"
979
+ },
980
+ "primary_outputs": [
981
+ "solution.tif",
982
+ "feature_representation.csv",
983
+ "cost_summary.csv",
984
+ "irreplaceability.tif",
985
+ "blm_calibration.csv",
986
+ "portfolio_frequency.tif",
987
+ "prioritization_map.png"
988
+ ],
989
+ "depends_on_skills": [
990
+ "species-distribution-modeling",
991
+ "ecosystem-services-assessment",
992
+ "landscape-connectivity"
993
+ ],
994
+ "called_by_workflows": [],
995
+ "decision_points": {
996
+ "default_target": 0.3,
997
+ "max_iterations_before_target_relax": 1000,
998
+ "pct_targets_met_for_acceptance": 80,
999
+ "irreplaceability_restoration_threshold": 0.8,
1000
+ "blm_calibration_values": [
1001
+ 0,
1002
+ 0.001,
1003
+ 0.01,
1004
+ 0.05,
1005
+ 0.1,
1006
+ 0.5,
1007
+ 1.0
1008
+ ]
1009
+ },
1010
+ "skill_md_path": "skills/spatial-prioritization/SKILL.md"
1011
+ }
1012
+ ],
1013
+ "_metadata": {
1014
+ "repository": "ecological-agent-skills",
1015
+ "index_version": "1.0.0",
1016
+ "last_updated": "2026-03-05",
1017
+ "total_skills": 17,
1018
+ "total_workflows": 13
1019
+ }
1020
+ }