feat(skills): add clinical-case-report skill#581
feat(skills): add clinical-case-report skill#581syedali254 wants to merge 13 commits intonexu-io:mainfrom
Conversation
Adds a new healthcare skill for generating structured medical case presentations (SOAP format, conference, and ward rounds). Files added: - SKILL.md — od: frontmatter + full agent workflow instructions - references/checklist.md — P0/P1/P2 medical accuracy validation - references/case-formats.md — SOAP, conference, and rounds formats - examples/example-stemi.html — inferior STEMI with cardiogenic shock Fills the healthcare vertical gap in the current skill catalog. Includes physiologically consistent vitals, labs, and an evidence-based management plan using real clinical guidelines.
|
Hi @syedali254! 🎉 Thanks for the contribution — adding healthcare coverage to the skill catalog is a great direction. I will run a deep review and get back to you within 24h. Thanks for making open-design better! |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1ebb73c1e8
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| @@ -0,0 +1,676 @@ | |||
| <!DOCTYPE html> | |||
There was a problem hiding this comment.
Move skill example to the path the gallery resolver reads
The new skill ships its only demo at examples/example-stemi.html, but the example API used by the Examples gallery only resolves <skillDir>/example.html, assets/template.html (+ optional slides), or assets/index.html (see apps/daemon/src/server.ts /api/skills/:id/example). Because none of those files exist for this skill, the endpoint returns 404 and users cannot preview this skill card before running it. Rename/copy this file to skills/clinical-case-report/example.html (or provide one of the supported asset paths) so the gallery can render it.
Useful? React with 👍 / 👎.
lefarcen
left a comment
There was a problem hiding this comment.
Hi @syedali254, thanks for this healthcare skill contribution! 🏥
I've reviewed the complete skill package (agent instructions, example HTML, references, and checklist). The structure is solid and the STEMI example demonstrates good medical detail. However, there are 4 must-fix safety and accuracy issues that need addressing before this can ship:
- Missing prescribing safety gates — the skill instructs agents to generate specific drug doses without checking allergies, renal function, pregnancy, or regional protocols
- Overly rigid physiologic rules — some "must follow" constraints don't match real clinical variability and may force incorrect data
- Wrong TIMI score scale — the example uses the UA/NSTEMI scale (0-7) for a STEMI case
- Overly narrow PHI definition — the checklist only blocks "names" but clinical cases can identify patients through dates, locations, rare conditions, etc.
See inline comments below for concrete fixes. Once these are addressed, this will be a strong addition to the skill catalog.
— open-design team
|
|
||
| ### Step 5 — Write the management plan | ||
|
|
||
| The plan must be: |
There was a problem hiding this comment.
P1 — Prescribing safety gate missing
The workflow instructs agents to write specific drug names, doses, routes, and frequencies, but doesn't require checking:
- Allergies
- Renal/hepatic function
- Pregnancy status
- Weight (for weight-based dosing)
- Anticoagulation/bleeding risk
- Regional protocols
- Contraindications
In a medical skill, this can produce unsafe authoritative treatment plans.
Concrete fix:
Add a safety paragraph at the end of Step 5:
### Important — Prescribing Safety
Generated plans must:
- Be marked as educational/simulated, not a substitute for clinician judgment
- Use "per local formulary/protocol" language when required patient variables (weight, renal function, allergies) are missing
- List key contraindications and unknowns before medication recommendations
- Never claim a plan is "definitive" or "standard of care" without full patient context| If the user has not provided specific values, generate values that are | ||
| internally consistent with the diagnosis: | ||
|
|
||
| **Consistency rules (must follow):** |
There was a problem hiding this comment.
P1 — Overly absolute physiologic rules
These "must follow" rules don't match real clinical variability:
- Pneumonia does not always require temperature >38°C (afebrile pneumonia exists)
- Shock can be bradycardic (beta-blocker, spinal shock) or medication-blunted
- Early STEMI may have initially normal troponin
- CK-MB is not universally required or preferred (hs-troponin is now standard in many settings)
These absolute rules may force the model to invent or "correct" plausible user-provided data.
Concrete fix:
Reframe as typical consistency checks and preserve user data:
**Consistency checks (typical patterns):**
- A patient in shock **typically** has: HR >100, SBP <90, raised lactate — but medication, age, or shock type can alter this
- **Preserve all user-provided values** — if the user says SBP is 110 in a shock case, keep it and explain the atypical presentation
- If generating values, explain atypical presentations rather than forcing canonical numbers| (RCA) based on inferior lead involvement. | ||
| </p> | ||
|
|
||
| <div class="risk-score"> |
There was a problem hiding this comment.
P1 — Wrong TIMI score scale for STEMI
The example states "TIMI Risk Score: 6 / 7" but the 0-7 TIMI scale is for UA/NSTEMI, not STEMI. This undermines the skill's risk-stratification guidance.
For STEMI, either:
- Use the STEMI-specific TIMI score (which has different components and scale), OR
- Use another appropriate ACS risk tool (GRACE, Killip only), OR
- Omit the numeric TIMI score if not fully derived with component breakdown
Concrete fix:
Replace line 509-511 with:
<strong>Killip Class: III</strong> — Acute pulmonary oedema present.
|
<strong>Shock Index: 1.27</strong> (HR/SBP — normal <0.7)(Remove the TIMI score or recalculate it using the STEMI-specific version with component details.)
| - [ ] Vital signs are internally consistent (shocked patient has low SBP AND high HR AND raised lactate) | ||
| - [ ] Assessment contains a clearly stated primary diagnosis | ||
| - [ ] Plan is present and directly addresses the primary diagnosis | ||
| - [ ] No real patient names or identifying information included |
There was a problem hiding this comment.
P1 — PHI definition too narrow
The P0 item says "No real patient names or identifying information" but clinical cases can identify patients through:
- Medical record numbers
- Exact dates and locations
- Rare condition combinations
- Occupation, family details, verbatim story details
- Images or scans
Even without names, these constitute Protected Health Information.
Concrete fix:
Expand the P0 item:
- [ ] No real patient identifiers (direct or indirect): no names, MRNs, exact dates, locations, images, rare condition combos, occupation details, or verbatim stories from real cases
- [ ] All data is synthetic, de-identified, or clearly fictional
- [ ] If based on a real case, apply formal de-identification before use|
|
||
| --- | ||
|
|
||
| ## Format Selection Guide |
There was a problem hiding this comment.
P2 — Format selection guide ambiguous
Line 90 maps "rounds" → SOAP, but line 92 maps "ward round" → Brief Rounds. This can make the skill choose a long SOAP report when the user wants a fast handover, or vice versa.
Concrete fix:
Distinguish clearly:
| "case presentation", "formal rounds", "clinic" | SOAP |
| "daily review", "ward round", "handover", "ICU", "post-call" | Brief Rounds || Patient meets STEMI criteria. Door-to-balloon time target: <90 minutes. | ||
| </div> | ||
|
|
||
| <table> |
There was a problem hiding this comment.
P2 — Table accessibility and troponin units
The vital signs and lab tables lack <caption> and scope="col" attributes for accessibility. Also, "high-sensitivity Troponin I" is reported in ng/mL with a conventional-looking reference range; hs-troponin is more typically ng/L with a much lower cutoff.
Concrete fix:
- Add
<caption>Vital Signs</caption>inside<table>(line 286) - Add
<caption>Laboratory Results</caption>(line 398) - Add
scope="col"to all<th>elements - Either relabel as "Troponin I (conventional)" or use hs-troponin units consistently (
2400 ng/Lwith reference<40 ng/L)
mrcfps
left a comment
There was a problem hiding this comment.
@syedali254 thanks for adding the clinical-case-report skill — the structure and reference materials are a thoughtful start. I reviewed the changed skill package and the existing safety threads, and I’m leaving one additional blocking integration issue so the new skill can be previewed from the catalog once those safety fixes land.
Generated by Looper 0.5.6 · runner=reviewer · agent=opencode| @@ -0,0 +1,676 @@ | |||
| <!DOCTYPE html> | |||
There was a problem hiding this comment.
Blocking — make the shipped example discoverable by the skill preview endpoint
The new static example lives at skills/clinical-case-report/examples/example-stemi.html, but the daemon’s /api/skills/:id/example resolver only serves <skillDir>/example.html, <skillDir>/assets/template.html (optionally with assets/example-slides.html), or <skillDir>/assets/index.html. Because this skill does not add any of those supported files, opening the Examples/gallery preview for clinical-case-report will return the resolver’s 404 even though the PR includes a complete HTML example. Please move or copy this file to skills/clinical-case-report/example.html (or add one of the supported assets/... fallbacks) so the new skill’s preview works from the catalog.
- Add prescribing safety gate (Step 5) — warns about missing allergy,
renal, weight, and pregnancy context before drug recommendations
- Soften physiologic rules from 'must follow' to 'typical patterns' —
acknowledges afebrile pneumonia, beta-blocker-blunted shock, etc.
- Preserve user-provided values even if atypical for the diagnosis
- Remove incorrect TIMI 0-7 score (UA/NSTEMI scale) from STEMI example;
retain Killip Class III and Shock Index 1.27
- Fix troponin units: hs-troponin reported as 2400 ng/L (ref <40 ng/L)
instead of conventional 2.4 ng/mL
- Add table accessibility: <caption> and scope='col' on vital signs
and laboratory results tables
- Expand PHI checklist item to cover indirect identifiers (MRNs, dates,
locations, rare conditions, occupation, verbatim stories)
- Disambiguate format selection guide ('ward round' maps to Brief Rounds,
'formal rounds' maps to SOAP)
- Add example.html at skill root for /api/skills/:id/example resolver
mrcfps
left a comment
There was a problem hiding this comment.
@syedali254 thanks for the quick follow-up on the safety and preview feedback — the new root example and the softened guidance are moving this in a better direction. I found one remaining blocking safety mismatch in the shipped example, plus a couple of follow-up consistency items so the reference files actually guide generated outputs. 🏥
Generated by Looper 0.5.6 · runner=reviewer · agent=opencode| </div> | ||
|
|
||
| <div class="plan-block"> | ||
| <div class="plan-title">2. Antiplatelet and Anticoagulation</div> |
There was a problem hiding this comment.
Blocking — keep the shipped example aligned with the new prescribing-safety gate
The updated skill now requires generated plans to list key contraindications and unknowns before medication recommendations when relevant patient data is missing, but this example moves directly into aspirin, ticagrelor, heparin, norepinephrine, furosemide, beta-blocker, and ACE-inhibitor dosing without a safety/unknowns block. Because example.html is the catalog preview and examples/example-stemi.html mirrors it, this still teaches the exact unsafe output pattern the new SKILL.md guidance is trying to prevent.
Please add a short Medication safety checks / unknowns block before this antiplatelet/anticoagulation section (and mirror it in examples/example-stemi.html) that explicitly confirms the known items already present, such as allergies and renal function, and calls out missing or protocol-dependent items such as bleeding risk/current anticoagulants, weight-based/protocol dosing, hepatic function, and any drug-specific contraindications. Where those details are not provided, keep the recommendation at per local formulary/protocol rather than giving a fully specific dose.
| - [ ] HPI is written as a chronological prose narrative | ||
| - [ ] HPI includes at least one timeline marker (e.g. "2 hours prior to presentation") | ||
| - [ ] Vital signs are present and physiologically plausible | ||
| - [ ] Vital signs are internally consistent (shocked patient has low SBP AND high HR AND raised lactate) |
There was a problem hiding this comment.
Non-blocking — make the checklist match the softened shock guidance
This P0 checklist item still says a shocked patient must have low SBP and high HR and raised lactate. That conflicts with the updated SKILL.md guidance, which now correctly notes that beta-blockers, age, and shock type can make shock presentations atypical. If agents use this checklist literally, they may still rewrite or reject plausible user-provided values even though the main instructions say to preserve them.
Please soften this to something like: Shock physiology is supported by vitals/labs, or atypical findings are preserved and explicitly explained in the assessment.
|
|
||
| --- | ||
|
|
||
| ## Step-by-step workflow |
There was a problem hiding this comment.
Non-blocking — explicitly wire the new references into the workflow
The PR adds references/case-formats.md and references/checklist.md, but the step-by-step workflow never tells the agent to read or apply either file. Other skills in this repository make those reference reads explicit, and without that instruction the format-selection table and P0 safety checklist can be skipped during normal generation.
Please add an early workflow step that reads references/case-formats.md before choosing SOAP/conference/brief rounds, and runs references/checklist.md before emitting the final HTML artifact.
lefarcen
left a comment
There was a problem hiding this comment.
Hi @syedali254, great work addressing the review feedback! 🎉
✅ Resolved:
- Prescribing safety gates — added at SKILL.md:139 with educational footer guidance
- TIMI score — removed the incorrect UA/NSTEMI scale; example now uses Killip + Shock Index
- PHI definition — expanded to cover direct and indirect identifiers
- Preview integration —
example.htmladded at the skill root (mrcfps's issue)
The physiologic rules in SKILL.md were softened to allow clinical variability (good!), but references/checklist.md:9 still has a hard P0 rule: "shocked patient has low SBP AND high HR AND raised lactate." This contradicts the more nuanced guidance in SKILL.md (shock can be bradycardic, medication-blunted, etc.).
Suggested fix: Soften the checklist P0 rule to match SKILL.md — change it to a consistency check rather than an absolute requirement. For example: "Vital signs are internally consistent with the diagnosis (allowing for clinical variability like bradycardic shock, afebrile pneumonia, etc.)."
This is non-blocking — the skill is in much better shape now. The maintainer will make the final call on whether to merge as-is or wait for the checklist tweak.
— open-design team
|
All review feedback addressed across 3 follow-up commits. The checklist P0 rule is also softened now to match SKILL.md. Ready for re-review when you get a chance! |
mrcfps
left a comment
There was a problem hiding this comment.
@syedali254 thanks for continuing to tighten the clinical-case-report skill — the fallback translations, preview file, and softened checklist updates are helpful. I found one remaining blocking safety mismatch in the shipped example that should be resolved before merge. 🏥
Generated by Looper 0.5.6 · runner=reviewer · agent=opencode| </div> | ||
|
|
||
| <div class="plan-block"> | ||
| <div class="plan-title">2. Antiplatelet and Anticoagulation</div> |
There was a problem hiding this comment.
Blocking — keep the catalog example aligned with the prescribing-safety gate
The new SKILL.md prescribing-safety guidance requires generated plans to list key contraindications and unknowns before medication recommendations when relevant patient data is missing, and to fall back to per local formulary/protocol when required variables such as weight, renal function, allergies, or bleeding risk are not available. This example still jumps directly from the revascularisation plan into specific aspirin, ticagrelor, heparin, norepinephrine, furosemide, beta-blocker, and ACE-inhibitor recommendations without a preceding medication-safety/unknowns block.
That matters because skills/clinical-case-report/example.html is the root preview served from the catalog, so it teaches the exact output shape users and agents will copy. Even though the example includes allergies and renal function, it still omits other protocol-dependent safety inputs like bleeding risk/current anticoagulants, weight-based or local-protocol dosing, hepatic function, and drug-specific contraindications before giving precise doses.
Please add a short Medication safety checks / unknowns block before this antiplatelet/anticoagulation section, and mirror the same fix in skills/clinical-case-report/examples/example-stemi.html, that explicitly confirms the known safety inputs and calls out any missing or protocol-dependent items. Where those inputs are not provided, keep the medication recommendation at per local formulary/protocol rather than presenting a fully specific dose.
|
Hi @syedali254! 👋 Thanks for the updates — the checklist softening (commit aa22b5e) addresses one of the non-blocking items nicely. However, mrcfps's blocking issue from this comment is not yet resolved:
The current Could you add that block? Once that's in, we'll be good to go! — open-design team |
lefarcen
left a comment
There was a problem hiding this comment.
Hi @syedali254 — thanks for the follow-up! You've addressed the two non-blocking findings (checklist vital signs softened ✅, i18n entries added ✅), but mrcfps's blocking finding from their last review is still unaddressed:
"Please add a short Medication safety checks / unknowns block before this antiplatelet/anticoagulation section (and mirror it in
examples/example-stemi.html) that explicitly confirms the known items already present, such as allergies and renal function, and calls out missing or protocol-dependent items such as bleeding risk/current anticoagulants, weight-based/protocol dosing, hepatic function, and any drug-specific contraindications."
The current example.html (and examples/example-stemi.html) still jump directly from section 1 (revascularisation) to section 2 (antiplatelet/anticoagulation) without that safety gate. This is the blocker — the example needs to show the workflow that the updated SKILL.md now requires.
Once that safety block is in both example files, we'll be ready for maintainer sign-off!
|
Added the medication safety block before section 2 in both files — it lists what's known (allergies, eGFR, anticoagulants), calls out the unknowns (weight, bleeding risk, hepatic function), and defers weight-based dosing to local formulary. |
lefarcen
left a comment
There was a problem hiding this comment.
Thanks for the quick fix @syedali254 — the medication safety checks block is now present in both example.html and examples/example-stemi.html before the antiplatelet section. Looks good.
All prior blocking issues are resolved. mrcfps may want to re-review the current head, but from my side the PR is now aligned with the prescribing-safety guidance. 🏥
mrcfps
left a comment
There was a problem hiding this comment.
@syedali254 thanks for the quick follow-up and for adding the medication-safety block — that’s the right direction. I found one remaining blocking consistency issue in the new safety block, plus one non-blocking checklist alignment item so the new safety rule is enforced during generation. 🏥
Generated by Looper 0.5.6 · runner=reviewer · agent=opencode| <div class="plan-block" style="border-left:3px solid #e6a817;padding-left:12px;"> | ||
| <div class="plan-title" style="color:#b07a00;">⚠ Medication Safety Checks — confirm before prescribing</div> | ||
| <ul> | ||
| <li><strong>Known (from this case):</strong> No documented drug allergies; eGFR 48 mL/min/1.73m² (moderate CKD — dose-adjust renally cleared drugs); no current anticoagulants documented</li> |
There was a problem hiding this comment.
Blocking — make the safety block use this case’s actual demographics and renal data
This newly added medication-safety block says the known data includes eGFR 48 mL/min/1.73m² (moderate CKD...), but the same example’s lab table reports eGFR 72 mL/min/1.73m² with creatinine 98 µmol/L, and the header/HPI identify the patient as a 58-year-old male while this block later says age 67. Because this section is specifically meant to guard prescribing safety, stale renal function and age values can lead users or agents to apply the wrong renal-dose assumptions and undermines the consistency of the shipped catalog example.
Please update the block to match the case data — e.g. eGFR 72 mL/min/1.73m²; renal function currently preserved, monitor around contrast/acute illness and patient is male, age 58 — and adjust any CKD/dose-adjust wording accordingly.
| <div class="plan-block" style="border-left:3px solid #e6a817;padding-left:12px;"> | ||
| <div class="plan-title" style="color:#b07a00;">⚠ Medication Safety Checks — confirm before prescribing</div> | ||
| <ul> | ||
| <li><strong>Known (from this case):</strong> No documented drug allergies; eGFR 48 mL/min/1.73m² (moderate CKD — dose-adjust renally cleared drugs); no current anticoagulants documented</li> |
There was a problem hiding this comment.
Blocking — mirror the same safety-data correction in the example copy
This mirrored example has the same newly added safety block with eGFR 48 mL/min/1.73m² (moderate CKD...), while its investigation table still shows eGFR 72 mL/min/1.73m² and creatinine 98 µmol/L; the patient is also introduced as 58 years old, not 67. Since this file is the concrete STEMI example agents and reviewers may copy from, the medication-safety section should not introduce contradictory renal or demographic facts.
Please make the same correction here as in the root preview: use the case’s actual eGFR/age and change the renal-safety wording so it no longer claims moderate CKD or renal dose-adjustment unless the rest of the case is updated to support that.
| - [ ] Plan is present and directly addresses the primary diagnosis | ||
| - [ ] No real patient identifiers (direct or indirect): no names, MRNs, exact dates, locations, images, rare condition combos, occupation details, or verbatim stories from real cases | ||
| - [ ] All data is synthetic, de-identified, or clearly fictional | ||
| - [ ] If based on a real case, apply formal de-identification before use |
There was a problem hiding this comment.
Non-blocking — add the new prescribing-safety gate to the P0 checklist
SKILL.md now makes prescribing safety mandatory before medication recommendations: label the plan as educational/simulated, use per local formulary/protocol when key variables are missing, list contraindications/unknowns, and include the disclaimer. The P0 checklist here adds de-identification checks, but it still does not require those prescribing-safety checks, so an agent could pass the checklist while emitting a medication plan that violates the new Step 5 safety rules.
Please add one or two P0 checklist items next to the de-identification requirements that explicitly cover the medication-safety block and local-protocol fallback when weight, renal/hepatic function, allergies, pregnancy status, anticoagulation, or bleeding risk are unknown. It would also help to qualify the later “drug names, doses, routes, and frequencies” P1 item so specificity does not override missing safety context.
|
Hi @syedali254! 👋 mrcfps caught an important data consistency issue in the medication safety block: the block says eGFR 48 and age 67, but the lab table shows eGFR 72 and the header says age 58. Please update the medication safety block in BOTH files to match the actual case data (eGFR 72, age 58) and adjust the wording (e.g. "renal function currently preserved" instead of "moderate CKD") — that way the safety checks align with the rest of the example. |
lefarcen
left a comment
There was a problem hiding this comment.
Hi @syedali254! 👋
Perfect — the safety block data now matches the case facts (eGFR 72, age 58), and the P0 checklist additions ensure the prescribing-safety gate is enforced during generation.
All of mrcfps's blocking findings are resolved. The examples are now internally consistent and aligned with the skill's safety guidance.
Looks good to me; deferring final approval to a maintainer.
|
Hi @syedali254! 👋 Verified the fix on head 502ecb4 — the medication safety block now has the correct patient data (eGFR 72, age 58, renal function "currently preserved"), and both example files are updated. The P0 checklist also has the prescribing-safety check now. All of mrcfps's findings are addressed. The PR is aligned with the prescribing-safety guidance. Deferring final approval to a maintainer. |
mrcfps
left a comment
There was a problem hiding this comment.
@syedali254 thanks for continuing to tighten the clinical-case-report skill and for addressing the prior safety-block inconsistencies. I found one remaining prescribing-safety consistency issue in the shipped examples that should be fixed before merge. 🏥
Generated by Looper 0.5.6 · runner=reviewer · agent=opencode| <ul> | ||
| <li>Hold IV fluids until right-sided leads reviewed — if RV infarct | ||
| present, cautious fluid challenge 250mL normal saline</li> | ||
| <li>If MAP <65mmHg despite fluids: commence Norepinephrine |
There was a problem hiding this comment.
Blocking — keep weight-based vasoactive dosing behind the safety gate
The new medication-safety block at skills/clinical-case-report/example.html:594 says weight is not provided and that weight-based dosing should follow local formulary/protocol once weight is confirmed, but this plan still gives a norepinephrine dosing range here (0.05–0.5 mcg/kg/min) without that same protocol/weight-confirmation guard. Because the checklist now makes this prescribing-safety gate a P0 requirement for medication plans, the root preview example can still teach agents to emit weight-based drug dosing after explicitly saying weight is missing.
Please change this line to defer the vasoactive dose to local protocol until weight/concentration are confirmed, for example: If MAP <65mmHg despite fluids: commence norepinephrine infusion per local vasoactive-infusion protocol once weight and concentration are confirmed, titrate to MAP ≥65mmHg.
| <ul> | ||
| <li>Hold IV fluids until right-sided leads reviewed — if RV infarct | ||
| present, cautious fluid challenge 250mL normal saline</li> | ||
| <li>If MAP <65mmHg despite fluids: commence Norepinephrine |
There was a problem hiding this comment.
Blocking — mirror the norepinephrine safety wording in the STEMI example copy
This mirrored example has the same safety block declaring that weight is not provided and weight-based dosing should defer to local formulary/protocol, but the cardiogenic-shock plan still provides Norepinephrine infusion 0.05–0.5 mcg/kg/min here. Since this file is the concrete STEMI example users and agents may copy from, it should not contradict the newly added prescribing-safety requirement in the same artifact.
Please make the same update as the root preview: replace the explicit norepinephrine range with wording that starts norepinephrine per local vasoactive-infusion protocol only after weight and concentration are confirmed, then titrates to the MAP goal.
|
Hi @syedali254! 👋 mrcfps caught one more prescribing-safety consistency issue: the medication safety block says weight is not provided, but the plan still gives a weight-based norepinephrine range ( Please update those lines to defer the norepinephrine dose to local protocol until weight is confirmed — that way the examples fully align with the safety-block guidance. — open-design team |
|
Fixed in both files norepinephrine line now defers to local vasoactive-infusion protocol once weight and concentration are confirmed, consistent with the safety block above it. |
|
Hi @syedali254! 👋 mrcfps found one more consistency issue: the medication safety block says weight is not provided and defers weight-based dosing to local protocol, but the norepinephrine line still shows Could you update that line in both example files to defer to local vasoactive-infusion protocol until weight/concentration are confirmed? Once that's aligned, the safety block will be fully consistent with the medication recommendations. |
|
Already done in the latest commit the norepinephrine line now defers to local protocol. Should be visible on head b181c28. |
lefarcen
left a comment
There was a problem hiding this comment.
All blocking findings resolved — the norepinephrine line now correctly defers to local vasoactive-infusion protocol instead of specifying a weight-based range when weight is not available. The fix is consistent across both example files and aligns with the prescribing-safety gate. 🏥
mrcfps
left a comment
There was a problem hiding this comment.
@syedali254 thanks for continuing to iterate on the clinical-case-report skill and tightening the prescribing-safety guidance. I found two remaining safety/workflow issues in the new skill package that should be fixed before merge. 🏥
Generated by Looper 0.5.6 · runner=reviewer · agent=opencode|
|
||
| --- | ||
|
|
||
| ## Step-by-step workflow |
There was a problem hiding this comment.
Blocking — wire the shipped references into the workflow
This skill adds references/case-formats.md and references/checklist.md, but the step-by-step workflow starts here without telling the agent to read either file before choosing the case format or before emitting the HTML. The daemon only lists side files in the skill preamble when their paths are referenced from SKILL.md, so these new reference files are otherwise just passive files in the folder and the P0 checklist/de-identification rules will not reliably run.
Please add explicit workflow steps that reference both files by path, for example: read references/case-formats.md before building the narrative to choose SOAP vs conference vs rounds, and run references/checklist.md before emitting with all P0 items passing.
| <div class="plan-block"> | ||
| <div class="plan-title">6. Secondary Prevention (commence post-stabilisation)</div> | ||
| <ul> | ||
| <li>Beta-blocker: Bisoprolol 1.25mg PO once daily — initiate within |
There was a problem hiding this comment.
Blocking — strengthen the beta-blocker safety gate for this shock case
The example is an inferior STEMI complicated by cardiogenic shock/Killip III, but this secondary-prevention line still teaches starting bisoprolol within 24 hours once only SBP and HR thresholds are met. In a STEMI patient with cardiogenic shock or acute pulmonary oedema, early beta-blockade can worsen haemodynamics; SBP >100 and HR <110 are not enough to establish that shock has resolved.
Please change this recommendation to defer beta-blocker initiation until the patient is truly stabilised, for example after shock/pulmonary oedema have resolved, the patient is off vasopressors/inotropes, euvolemic, and has no bradycardia/heart block or other contraindications.
|
mrcfps found two additional safety/workflow issues on head b181c28:
Please address these two findings. |
|
Both fixed in 35cb5e3 added Step 0 to explicitly load the reference files before the workflow starts, Step 7 to block on P0 items before emitting, and rewrote the bisoprolol line to defer until shock is fully resolved and off pressors. Good catches. |
mrcfps
left a comment
There was a problem hiding this comment.
@syedali254 thanks for the continued iteration on the clinical-case-report skill — the safety checks and reference workflow are much stronger now. I found one remaining workflow-formatting issue that keeps the final checklist step from being rendered as an actual instruction, so I’m requesting one small fix before merge. 🏥
Generated by Looper 0.5.6 · runner=reviewer · agent=opencode| <section data-od-id="assessment">...</section> | ||
| <section data-od-id="plan">...</section> | ||
|
|
||
| ### Step 7 — Self-check against `references/checklist.md` |
There was a problem hiding this comment.
Blocking — close the HTML code fence before Step 7
The new Step 7 is currently added immediately after the sample <section data-od-id="plan">...</section> line, but the preceding ```html fence is never closed. That means Markdown will render ### Step 7 — Self-check against references/checklist.md and the two checklist-enforcement sentences as part of the code sample instead of as workflow instructions. This matters because the previous fix is intended to make the P0 checklist mandatory before emitting the artifact; as rendered, that instruction is easy for the skill runner/agent to miss or treat as inert example text.
Please add a closing triple-backtick line right after <section data-od-id="plan">...</section> and before ### Step 7, so Step 7 is a real heading and the P0 checklist requirement is active prose in the skill workflow.
lefarcen
left a comment
There was a problem hiding this comment.
Verified both fixes on head 35cb5e3:
-
✅ Beta-blocker safety gate — Both example files now defer bisoprolol until shock resolved, off vasopressors/inotropes, euvolaemic, no bradycardia/heart block, SBP >100mmHg and HR <110bpm. This correctly addresses mrcfps's concern about early beta-blockade in cardiogenic shock.
-
✅ Workflow reference wiring — Step 0 explicitly reads both
references/case-formats.mdandreferences/checklist.md, and Step 7 blocks on P0 checklist items before emitting. The reference files are now actively wired into the workflow.
All blocking findings from mrcfps's 6th review are now resolved. The skill workflow and examples are aligned with the prescribing-safety and medical-accuracy guidance.
|
fixed in 54ade12 added the closing triple-backtick after the last |
lefarcen
left a comment
There was a problem hiding this comment.
Verified the Markdown fence fix on head 54ade12:
✅ Workflow formatting — Added closing triple-backtick after <section data-od-id="plan">...</section> and before ### Step 7. Step 7 now renders as an active workflow heading with prose instructions, making the P0 checklist gate enforcement clear and actionable.
All blocking findings from mrcfps's 7th review are resolved. The skill workflow and examples are now fully aligned with the prescribing-safety and medical-accuracy guidance.
mrcfps
left a comment
There was a problem hiding this comment.
@syedali254 thanks for the steady iteration on this clinical-case-report skill — the reference workflow and prescribing-safety gates are much stronger now. I found one remaining clinical safety issue in the shipped example, plus a smaller privacy-checklist consistency item to align the examples with the new P0 gate. 🏥
Generated by Looper 0.5.6 · runner=reviewer · agent=opencode| <div class="plan-block"> | ||
| <div class="plan-title">4. Respiratory / Oxygenation</div> | ||
| <ul> | ||
| <li>Supplemental O₂ via non-rebreather mask — titrate to SpO₂ ≥94%</li> |
There was a problem hiding this comment.
Blocking — avoid routine high-flow oxygen for a normoxic STEMI example
This case lists SpO₂ 94% on room air in the vitals table and the HPI explicitly says there is no dyspnoea, but this plan teaches starting a non-rebreather mask and titrating to ≥94%. In ACS/STEMI examples, routine supplemental/high-flow oxygen when the patient is not hypoxaemic can be harmful and is not the main-path recommendation; because this is a healthcare skill example, generated management plans can copy that unsafe pattern.
Please change this oxygen line, and the identical line in skills/clinical-case-report/examples/example-stemi.html, to use oxygen only for hypoxaemia or respiratory distress per local protocol, with the lowest-flow device needed to meet the target. For example, reserve non-rebreather/CPAP escalation for worsening pulmonary oedema or SpO₂ below the local threshold.
| </p> | ||
|
|
||
| <p style="margin-top:14px"><strong>Social History:</strong> | ||
| Works as an accountant. Lives with wife and two adult children. |
There was a problem hiding this comment.
Non-blocking — make the example match the de-identification checklist
The new P0 checklist at references/checklist.md:14 says generated cases should not include indirect identifiers such as occupation details, but this Social History still includes a specific occupation and household composition. Even though this sample is fictional, the example is what future skill runs will imitate, so it weakens the de-identification rule you just added.
Please generalize this line in both example copies, for example to “works in an office role; lives with family/supports at home,” or remove nonessential occupation/household detail so the examples model the checklist gate consistently.
|
Hey @syedali254, mrcfps found 2 more items on head 54ade12:
Both findings apply to |
…r de-identification
|
Both fixed in 63b0ee5. Oxygen is now only started if SpO₂ <94% or respiratory distress is present .lowest-flow device to target 94–98%, with a note that routine high-flow in normoxic STEMI can worsen ischaemia. Non-rebreather/CPAP escalation is reserved for worsening SpO₂ or distress. Social history now says "works in an office role; lives with family and has good home supports" no occupation or household specifics |
lefarcen
left a comment
There was a problem hiding this comment.
Verified both fixes on head 63b0ee5:
✅ Oxygen therapy safety (BLOCKING) — Both example files now correctly reserve supplemental O₂ for hypoxaemia (SpO₂ <94%) or respiratory distress, using the lowest-flow device to maintain SpO₂ 94–98%. The plan explicitly states "do not give routine high-flow oxygen in normoxic STEMI (may worsen ischaemia)", which directly addresses mrcfps's concern about contraindicated routine high-flow oxygen for a normoxic patient (SpO₂ 94% on room air, no dyspnoea).
✅ De-identification compliance (NON-BLOCKING) — Social History now says "Works in an office role. Lives with family and has good home supports." Both example files generalized the occupation and household details to comply with the P0 checklist rule against indirect identifiers.
All blocking findings from mrcfps's 8th review are resolved. The examples now align with current ACS management guidelines and the skill's de-identification requirements. 🏥
lefarcen
left a comment
There was a problem hiding this comment.
Verified both fixes on head 63b0ee5:
-
✅ Oxygen therapy — Both example files now reserve supplemental O₂ for actual hypoxaemia (SpO₂ <94%) or respiratory distress, using the lowest-flow device to target 94–98%. Routine high-flow oxygen for normoxic STEMI is correctly flagged as potentially harmful. Non-rebreather/CPAP escalation is reserved for worsening SpO₂ or distress.
-
✅ De-identification — Social History in both examples now uses generic wording ("works in an office role; lives with family and has good home supports") instead of specific occupation/household details, aligning with the P0 checklist de-identification rule.
All blocking findings from mrcfps's 8th review are now resolved. The skill is aligned with the clinical safety guidance and de-identification requirements.
mrcfps
left a comment
There was a problem hiding this comment.
@syedali254 thanks for the continued iteration on the clinical-case-report skill — the safety guidance and example fixes are much stronger now. I found two remaining blocking consistency issues in the current skill package, plus one smaller example-data mismatch to clean up. 🏥
Generated by Looper 0.5.6 · runner=reviewer · agent=opencode| ## P0 — Must Pass Before Emitting Artifact | ||
|
|
||
| - [ ] Chief complaint is clearly stated in the opening line | ||
| - [ ] HPI is written as a chronological prose narrative |
There was a problem hiding this comment.
Blocking — make the P0 checklist format-aware
The new workflow now requires every P0 item in references/checklist.md to pass before emitting an artifact, but this P0 item requires a chronological HPI for every output. That conflicts with the changed format guide in references/case-formats.md, where the Brief Rounds format selected for "daily review", "ward round", "handover", "ICU", or "post-call" explicitly says not to include a full HPI or examination.
This matters because Brief Rounds is one of the skill’s supported main paths, but the current gates make it impossible to produce a compliant brief-rounds artifact: the agent must either add an HPI and violate the format, or omit it and fail Step 7’s P0 check. Please make the HPI/timeline checks conditional on SOAP/Conference outputs, and add Brief Rounds-specific P0 checks such as ID line, interval events/current status, active problems, and plan-by-problem.
| </p> | ||
|
|
||
| <div class="risk-score"> | ||
| <strong>Killip Class: III</strong> — Acute pulmonary oedema present. |
There was a problem hiding this comment.
Blocking — correct the Killip class for cardiogenic shock
This example’s assessment diagnoses "Inferior STEMI complicated by cardiogenic shock" and the surrounding changed content supports shock with SBP 88, tachycardia, elevated lactate, prolonged capillary refill, and vasopressor/CCU planning, but the displayed risk score still says Killip Class: III — Acute pulmonary oedema present. Killip III is pulmonary oedema; cardiogenic shock is Killip IV.
Because this is a shipped healthcare skill example, an incorrect risk classification can be copied into generated case reports and understate severity in the primary educational artifact. Please change this to Killip Class: IV — Cardiogenic shock (or remove the cardiogenic-shock diagnosis/findings if that was not intended) in both skills/clinical-case-report/example.html and skills/clinical-case-report/examples/example-stemi.html.
|
|
||
| <p style="margin-top:14px"><strong>Social History:</strong> | ||
| Works in an office role. Lives with family and has good home supports. | ||
| Ex-smoker — 10 cigarettes/day, 30 pack-years. |
There was a problem hiding this comment.
Non-blocking — keep smoking status internally consistent
The HPI for this same example says the patient has a 30 pack-year smoking history with 10 cigarettes/day, ongoing, but this Social History line now says Ex-smoker — 10 cigarettes/day, 30 pack-years. Those two changed lines describe different smoking statuses.
This matters for the example’s clinical consistency and for future generated reports that use it as a pattern. Please pick one status and apply it consistently in both the HPI and Social History, and mirror the same fix in skills/clinical-case-report/examples/example-stemi.html.
…shock; smoking status consistent
lefarcen
left a comment
There was a problem hiding this comment.
Re-reviewed head b6b4f35 and verified all three findings from mrcfps's 9th review are resolved:
Blocking fixes verified:
-
✅ P0 checklist now format-aware (
references/checklist.md:7-8) — HPI requirement is now conditional:- SOAP/Conference: chronological HPI mandatory
- Brief Rounds: HPI not required; ID line + interval events + active problems + plan-by-problem suffice
This resolves the prior conflict where Brief Rounds format could not pass the P0 gate.
-
✅ Killip class corrected (
example.html:512+examples/example-stemi.html:512) — Changed from Killip III (pulmonary oedema) to Killip IV (Cardiogenic shock), aligning with the diagnosis and shock physiology (SBP 88, elevated lactate, vasopressor planning).
Non-blocking fix verified:
- ✅ Smoking status now internally consistent — Both HPI and Social History now say current smoker (10 cigarettes/day, 30 pack-years); prior mismatch (HPI: ongoing / Social History: Ex-smoker) is resolved.
All blocking issues from mrcfps's 9 iterations are now addressed. The skill's safety gates, reference workflow, and example consistency are solid. Deferring final approval to maintainer.
lefarcen
left a comment
There was a problem hiding this comment.
Hey @syedali254, thanks for the quick follow-up on mrcfps's 9th review! I verified all three fixes on head b6b4f35:
✅ P0 checklist format-awareness — the checklist now makes HPI requirements conditional: "SOAP / Conference format only" branch keeps chronological HPI, "Brief Rounds format only" branch removes HPI requirement and adds Brief Rounds-specific P0 items (ID line, interval events, active problems, plan-by-problem). This resolves the conflicting requirements.
✅ Killip class — changed from "Killip Class: III — Acute pulmonary oedema" to "Killip Class: IV — Cardiogenic shock (hypotension + end-organ hypoperfusion)" in both example files. Correct classification for this shocked case.
✅ Smoking status — changed from "Ex-smoker" to "Current smoker — 10 cigarettes/day, 30 pack-years" in both example files' Social History, now consistent with HPI's "30 pack-year smoking history, 10 cigarettes/day, ongoing".
All 9 iterations of mrcfps's findings are now resolved. The skill package is clinically accurate, workflow-sound, and format-complete. 🏥
mrcfps
left a comment
There was a problem hiding this comment.
@syedali254 thanks for continuing to refine the clinical-case-report skill — the example and checklist fixes are much stronger now. I found one remaining workflow conflict in the skill instructions that still blocks one supported format. 🏥
Generated by Looper 0.5.6 · runner=reviewer · agent=opencode| > characterised by [quality, severity, radiation]. Associated symptoms | ||
| > include [list]. Pertinent negatives include [list]." | ||
|
|
||
| The HPI must be chronological. Include timeline markers |
There was a problem hiding this comment.
Blocking — make the main workflow conditional for Brief Rounds
The checklist was updated to skip HPI for Brief Rounds, and references/case-formats.md says Brief Ward Rounds must not include a full HPI or examination. However, the main skill workflow still unconditionally runs Step 2 and says The HPI must be chronological with timeline markers. Because Step 0 only tells the agent to read the format reference, this later required step can override the Brief Rounds format and force a full HPI into daily review, ward round, handover, ICU, or post-call outputs.
This matters because Brief Rounds is a supported trigger path in the changed skill, but the current instructions still make that path internally inconsistent: following Step 2 violates the format reference, while following the reference violates Step 2. Please make Step 2 format-aware (for example, For SOAP/Conference outputs, write a chronological HPI...; for Brief Rounds, skip full HPI/examination and use ID line + interval events/current status + active problems + plan-by-problem) and update the What you will produce section if needed so it does not require full HPI/exam for every format.
There was a problem hiding this comment.
Fixed in 7570a69. Step 2 is now format-conditional SOAP/Conference gets the full chronological HPI with timeline markers, Brief Rounds skips it and uses ID line + interval events/current status + active problems + plan-by-problem instead. Updated "What you will produce" to show both paths so the output expectations match the format selected in Step 0.
|
Hi @syedali254! 👋 mrcfps found one more workflow conflict on head b6b4f35: The P0 checklist is now format-aware (✅ SOAP/Conference requires HPI, Brief Rounds skips it), but Step 2 in SKILL.md still unconditionally says "The HPI must be chronological" — that forces a full HPI into Brief Rounds outputs and violates the format reference. Please make Step 2 format-conditional (e.g., "For SOAP/Conference: write chronological HPI...; for Brief Rounds: use ID line + interval events + active problems instead") so the workflow aligns with the checklist and format guide. — open-design team |
lefarcen
left a comment
There was a problem hiding this comment.
Verified the workflow fix on head 7570a69:
✅ Step 2 now format-conditional — SOAP/Conference outputs get the full chronological HPI with timeline markers ("The HPI must be chronological. Include timeline markers..."), while Brief Rounds outputs skip the full HPI/examination and use ID line + interval events/current status + active problems + plan-by-problem instead. The "What you will produce" section also reflects both paths.
This resolves the conflict between the P0 checklist (which was already format-aware) and the main workflow Step 2 (which was forcing HPI on all formats). Brief Rounds format can now pass the P0 check without violating the format reference.
All 10 iterations of mrcfps's findings are now resolved. The skill is workflow-sound and format-complete. 🏥
lefarcen
left a comment
There was a problem hiding this comment.
Hey @syedali254! ✅ Verified the fix on head 7570a69.
Step 2 is now format-conditional:
- SOAP/Conference → full chronological HPI with timeline markers ✅
- Brief Rounds → skip full HPI/examination, use ID line + interval events + active problems + plan-by-problem ✅
"What you will produce" section also updated to show both paths explicitly ✅
This resolves mrcfps's 10th review finding — the skill can now correctly generate Brief Rounds outputs without forcing an HPI that violates the format. All 10 iterations of mrcfps's blocking findings are now addressed. The skill package is clinically accurate, workflow-sound, and format-complete. 🏥
mrcfps
left a comment
There was a problem hiding this comment.
@syedali254 thanks for continuing to refine the clinical-case-report skill. I reviewed the current head across the skill workflow, reference checklist and format guide, examples, and fallback i18n entries; the prior workflow/safety issues are addressed: Brief Rounds is now format-conditional, prescribing-safety gates are wired into the examples/checklist, and the STEMI sample is internally consistent after the medication, oxygen, Killip, and de-identification fixes. Nice work tightening this up 🏥
Generated by Looper 0.5.6 · runner=reviewer · agent=opencode
What
Adds
clinical-case-report— a new healthcare skill that generates structured medical case presentations for clinical rounds, conferences, and ward documentation.Why
The current skill catalog has 31 skills covering SaaS, marketing, and operations — zero healthcare coverage. Healthcare professionals and medical students are a real use case for AI-assisted document generation.
I have domain context: I built a multi-agent clinical triage system using XGBoost and LangGraph (github.com/syedali254/agentic-clinical-intelligence), so I can verify medical accuracy personally.
Files added
SKILL.md— od: frontmatter + full agent workflow instructionsreferences/checklist.md— P0/P1/P2 medical accuracy validationreferences/case-formats.md— SOAP, conference, and rounds formatsexamples/example-stemi.html— Inferior STEMI with cardiogenic shockSkill metadata
mode: prototypescenario: healthcareplatform: desktopfidelity: high-fidelityMedical accuracy
Next
Happy to add more healthcare skills (patient dashboard, research poster, clinical protocol) based on feedback from this one.