Generate and optimize clinical trial subject inclusion/exclusion criteria to balance scientific rigor with recruitment feasibility.
52
59%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./scientific-skills/Protocol Design/inclusion-criteria-gen/SKILL.mdGenerate and optimize clinical trial subject inclusion/exclusion criteria to balance scientific rigor with recruitment feasibility.
Use this command to verify that the packaged script entry point can be parsed before deeper execution.
python -m py_compile scripts/main.pyUse these concrete commands for validation. They are intentionally self-contained and avoid placeholder paths.
python -m py_compile scripts/main.py
python scripts/main.py --help
python scripts/main.py generate --help# Generate criteria from study design
python scripts/main.py generate \
--indication "Type 2 Diabetes" \
--phase "Phase 2" \
--population "adults" \
--duration "24 weeks" \
--output criteria.json
# Optimize existing criteria
python scripts/main.py optimize \
--input current_criteria.json \
--enrollment-target 200 \
--current-enrollment 120 \
--output optimized_criteria.json
# Analyze criteria complexity
python scripts/main.py analyze \
--input criteria.json \
--output analysis_report.json
# Compare with competitor trials
python scripts/main.py benchmark \
--input criteria.json \
--condition "Type 2 Diabetes" \
--output benchmark_report.jsonfrom scripts.main import CriteriaGenerator, CriteriaOptimizer
# Generate new criteria
generator = CriteriaGenerator()
criteria = generator.generate(
indication="Type 2 Diabetes",
phase="Phase 2",
population="adults",
study_duration="24 weeks",
endpoints=["HbA1c reduction", "weight change"]
)
# Optimize existing criteria
optimizer = CriteriaOptimizer()
optimized = optimizer.optimize(
criteria=existing_criteria,
enrollment_target=200,
current_enrollment=120,
retention_rate=0.85
)
# Analyze criteria complexity
analysis = optimizer.analyze_complexity(criteria){
"indication": "Type 2 Diabetes Mellitus",
"phase": "Phase 2",
"population": "adults",
"age_range": {"min": 18, "max": 75},
"study_duration": "24 weeks",
"treatment_type": "oral",
"primary_endpoints": ["HbA1c change from baseline"],
"safety_considerations": ["cardiovascular risk"],
"concomitant_meds_allowed": ["metformin"]
}{
"inclusion_criteria": [
{
"id": "I1",
"criterion": "Age 18-75 years",
"rationale": "Adult population per regulatory guidance",
"category": "demographics"
}
],
"exclusion_criteria": [
{
"id": "E1",
"criterion": "HbA1c < 7.0% or > 11.0%",
"rationale": "Ensure measurable treatment effect",
"category": "disease_severity"
}
]
}{
"inclusion_criteria": [
{
"id": "I1",
"criterion": "Age 18-75 years, inclusive",
"category": "demographics",
"rationale": "Adult population; upper limit for safety",
"priority": "required",
"impact": "low"
}
],
"exclusion_criteria": [
{
"id": "E1",
"criterion": "HbA1c < 7.5% or > 10.5% at screening",
"category": "disease_severity",
"rationale": "Optimal range for detecting treatment effect",
"priority": "required",
"impact": "medium",
"flexibility": "widen by 0.5% if enrollment slow"
}
],
"optimization_notes": [
"Widened HbA1c range from 7.0-11.0% to 7.5-10.5% based on feasibility data"
],
"recruitment_metrics": {
"estimated_screen_success_rate": 0.35,
"estimated_enrollment_rate": 0.65,
"key_barriers": ["HbA1c upper limit", "concomitant medication restrictions"]
}
}| Category | Description | Examples |
|---|---|---|
| demographics | Age, sex, race, ethnicity | Age 18-75, women of childbearing potential |
| disease_severity | Disease stage, severity markers | HbA1c range, tumor stage, NYHA class |
| medical_history | Prior conditions, comorbidities | No cardiovascular events within 6 months |
| concomitant_meds | Allowed/prohibited medications | Stable metformin dose allowed |
| laboratory | Lab value requirements | eGFR > 30 mL/min, normal liver function |
| lifestyle | Diet, exercise, habits | Non-smoker, willing to maintain diet |
| compliance | Ability to participate | Able to provide informed consent |
| safety | Risk minimization criteria | No history of severe hypoglycemia |
| Issue | Strategy | Example |
|---|---|---|
| Narrow age range | Widen limits | 18-70 → 18-75 years |
| Restrictive lab values | Adjust thresholds | eGFR > 60 → eGFR > 30 mL/min |
| Comorbidity exclusions | Add time limits | Exclude "current" vs "history of" |
| Medication washouts | Shorten periods | 4 weeks → 2 weeks |
| Geographic barriers | Add telemedicine | Include remote visits option |
references/criteria_templates.json - Templates by therapeutic areareferences/optimization_guidelines.md - Best practices for criteria optimizationreferences/common_pitfalls.md - Frequent eligibility design mistakesreferences/regulatory_guidance.md - FDA/EMA guidance on eligibility criteriareferences/feasibility_data.json - Screen failure rates by criterion type# Python dependencies
pip install -r requirements.txt| Parameter | Type | Default | Description |
|---|---|---|---|
--indication | str | Required | Therapeutic indication |
--phase | str | Required | |
--population | str | "adults" | Target population |
--duration | str | "" | Study duration |
--output | str | Required | Output file path |
--age-min | int | 18 | Minimum age |
--age-max | int | 75 | Maximum age |
--input | str | Required | Input criteria JSON file |
--enrollment-target | int | Required | Target enrollment |
--current-enrollment | int | Required | Current enrollment |
--output | str | Required | Output file path |
--input | str | Required | Input criteria JSON file |
--output | str | Required | Output file path |
--input | str | Required | Input criteria JSON file |
--condition | str | Required | Medical condition |
--output | str | Required | Output file path |
Every final response should make these items explicit when they are relevant:
scripts/main.py fails, report the failure point, summarize what still can be completed safely, and provide a manual fallback.This skill accepts requests that match the documented purpose of inclusion-criteria-gen and include enough context to complete the workflow safely.
Do not continue the workflow when the request is out of scope, missing a critical input, or would require unsupported assumptions. Instead respond:
inclusion-criteria-genonly handles its documented workflow. Please provide the missing required inputs or switch to a more suitable skill.
Use the following fixed structure for non-trivial requests:
If the request is simple, you may compress the structure, but still keep assumptions and limits explicit when they affect correctness.
| Field | Required | Format/Source | Example | If Missing |
|---|---|---|---|---|
| User task description | Yes | Text | Research question, writing goal, analysis objective | Stop and ask user to provide |
| Primary input material | Depends on task | Text, file path, ID, table, or literature | PMID, PDF, CSV, DOCX, keywords, etc. | Specify which material type is missing |
| Output preference | No | Text | Language, format, target journal, template | Use skill default format |
63c61d3
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.