find-cohort-gap — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited find-cohort-gap (Agent Skill) and scored it 91/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 1 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} is the classic direct prompt-injection phrasing. Placed in a skill body that the agent reads as trusted instructions, it tries to make the agent abandon its prior rules and follow whatever comes next — a full system-prompt override.
ignore/disregard/forget … previous instructions sentence.Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Output directory: user-specified (default: current working directory).
The cohort does not have to be one this skill has heard of. Route on what the user actually has.
| The user has… | Do this |
|---|---|
| A named public cohort (NHIS, UK Biobank, KNHANES, …) | Fill the profile from published documentation. Cite the source for every field. |
| A codebook / data dictionary / CSV export of their own registry or EMR extract | Run the input adapter below. This is the common case — an institutional registry or single-centre export that no public documentation describes. |
| A review, guideline, or preprint defining the clinical domain | Attach it as domain context (--context), as a file or a URL. |
python3 "${CLAUDE_SKILL_DIR}/scripts/build_cohort_profile.py" \
--codebook data_dictionary.csv \
--context narrative_review.pdf --context https://example.org/guideline \
--cohort-name "Institutional CT registry" --out-dir .Formats: .csv / .tsv / .json / .md / .txt (stdlib), .xlsx (needs openpyxl), .pdf (needs pdftotext). A .csv is auto-detected as a codebook (rows are variables) or a data export (the header row is the variable list). Writes cohort_profile.md + cohort_profile.json (+ context_extract.md).
Do not read the codebook yourself and summarise it. A paraphrased, merged, or invented variable poisons every downstream claim — the intersection matrix, the feasibility gate, and eventually the manuscript's Methods. The adapter enumerates variables verbatim with provenance (file:row). Read cohort_profile.md; do not re-derive it.
The adapter infers, and shows its work for, the variable cluster map, serial / repeated-measure groups (evidence for P1 Longitudinal Advantage), and endpoint candidates (evidence for P2 Endpoint Upgrade). A variable matching no cluster keyword is left unclassified — review those, since the lexicon is not exhaustive.
A codebook does not state any of the following; each is emitted as [UNKNOWN - ask the user]:
Collect these from the user before Phase 2, because a guessed N flows into the Phase 5 feasibility gate and makes it pass or fail for a reason unrelated to the cohort. Also confirm the setting (institution type, country, population type) and any special strengths the variable names cannot reveal — registry linkage, biobank availability, a distinctive population.
Gate: Present the cohort profile summary, including the [UNKNOWN] list and the unclassified variables. Confirm before proceeding.
Profile the intended PI or corresponding author to find topic-expertise alignment. If no PI is specified, skip this phase and use variable clusters alone in Phase 2.
/search-lit'sE-utilities script: bash "${CLAUDE_SKILL_DIR}/../search-lit/references/pubmed_eutils.sh" search "AuthorLastName AuthorFirstInitial[Author]" 30 Extract top keyword clusters from titles/abstracts.
editor), subspecialty focus areas, preferred journal tiers.
Output: PI profile card (name, affiliation, top keywords, society roles, preferred journals).
Cross cohort variable clusters with PI expertise to generate candidate topics.
Create a matrix: rows = DB variable clusters, columns = PI keyword clusters. Score each cell 0-3:
[this analysis] with [a different exposure/outcome] in a similar cohort?" If yes, substituting the PI's specialty variable creates a viable candidate.
cohort, E exposure/predictor variable(s), C comparison group, O outcome (preferably hard endpoint).
Before saturation scanning, identify the intended first author's department/specialty. The primary exposure variable must belong to that discipline (e.g., radiology first author → imaging variable as the primary exposure). Kill candidates where the primary exposure is outside the first author's discipline — a strong PI match alone is insufficient if the first author cannot claim ownership of the core variable.
Gate: Present the intersection matrix and top 20 candidates (post-discipline filter). User selects 8-12 for saturation scanning.
For each selected candidate, determine how saturated the literature is.
For each candidate:
(exposure terms) AND (outcome terms) AND (cohort OR longitudinal OR prospective)/search-lit E-utilities.this with serial/repeated measurements?"** — and check whether a meta-analysis exists. Grade:
| Papers | Longitudinal papers | MA exists? | Grade | Interpretation |
|---|---|---|---|---|
| 0-2 | 0 | No | Blue Ocean | First report possible. Verify the topic has audience interest. |
| 3-10 | 0 | No | Green Field | Optimal zone — established interest, longitudinal gap wide open. |
| 11-30 | 0 | No | Green Field (upgraded from Yellow) | As above. |
| 1-30 | 1+ | No | Yellow | Viable only with very specific angle (unique population, novel endpoint). |
| >30 | Any | No | Yellow (borderline Red) | As above. |
| Any | Any | Yes, outdated (>5 yr) or limited scope | Yellow | As above. |
| Any | Any | Yes, recent | Red | Avoid unless doing NMA or using truly unique data. |
For each candidate, articulate 2-3 potential clinical implications of the findings. If you cannot state why a clinician or policymaker would care about the result, the topic fails regardless of gap score.
Output: Saturation table with grade, paper count, longitudinal gap status, and "So What" statement for each candidate.
Gate: Present saturation results. User selects 3-5 finalists for deep scoring.
Apply the 6-Pattern framework to each finalist. Score each pattern 0 or 1.
Read the detailed rubric at ${CLAUDE_SKILL_DIR}/references/pattern_scoring_rubric.md and score each finalist on P1 Longitudinal Advantage, P2 Endpoint Upgrade, P3 Cohort Uniqueness, P4 PI-Topic Alignment (skip if no PI specified), P5 Comparison Table Gaps (3+ features unique to THIS STUDY in the table below), and P6 Complementary Design.
For each finalist, build a table comparing the top 3-5 existing papers against THIS STUDY, one row per feature (design, N, serial data, hard endpoint, population, ethnicity, subgroup analysis, …) — the rubric's P5 lists the construction steps and differentiator categories. Cite existing papers only with a /search-lit-confirmed DOI or PMID; otherwise mark the reference [UNVERIFIED - NEEDS MANUAL CHECK].
| Total Score | Recommendation |
|---|---|
| 5-6 | Top-tier journal target (Lancet sub, JACC, J Hepatol level) |
| 3-4 | Specialty journal target (solid publication) |
| 0-2 | Restructure or kill — find a stronger angle before proceeding |
Gate: Present scoring results and comparison tables. User approves final ranking.
For each scored finalist, verify practical feasibility.
statistically significant (power depends on the number of events, not N — check the event count first), so focus on effect size thresholds (e.g., HR >1.2 or <0.8 for clinical relevance)
if serial data, assess the attrition pattern (MCAR/MAR/MNAR)
follow-up — cancer outcomes minimum 5 years, CVD events minimum 3 years, mortality minimum 5 years
strategy (diagnosis + prescription + visit frequency + special codes)
source with [VERIFY] and ask the user.
additional approvals needed for data linkage?
mechanism → higher journal interest; established mechanism → needs stronger methodological novelty
Output: Feasibility report for each finalist with Go/Conditional/No-Go status.
| Rank | Topic (PICO) | Saturation | 6-Pattern Score | Feasibility | Target Journal | Timeline |
|------|--------------|------------|-----------------|-------------|----------------|----------|
| 1 | ... | Green (0 longitudinal) | 5/6 | Go | JACC | 6 months |
| 2 | ... | Blue (0 papers) | 3/6 | Conditional | Radiology | 8 months |Fill every section of the template at ${CLAUDE_SKILL_DIR}/references/onepager_template.md; give the target journal with its rationale (PI alignment, scope match, gap fit). Save one-pagers as markdown files: {output_dir}/gap_proposal_{rank}_{short_topic}.md
Downstream: output feeds into /design-study → /write-paper.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.