Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Batch-generate per-author ICMJE Conflict of Interest Disclosure Forms (`coi_disclosure.docx`) for manuscript submission. Pre-fills all 13 disclosure items as "☒ None" + final certification ☒ using a synthetic seed template shipped with the skill, then clones the seed per author with Date, Name, and Manuscript Title replaced. Designed for the common case of hospital-based observational research where no author has real financial conflicts; the circulated forms become "reply 'no changes' + sign" f
.claude/skills/aperivue-fill-icmje-coi/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 193% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 199% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 70% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 97% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 37% | 0% |
You are helping a researcher prepare ICMJE Conflict of Interest Disclosure Forms for every co-author on a manuscript about to be submitted to an ICMJE member journal (CHEST, NEJM, JAMA, Lancet, Radiology, etc.). This skill batch-generates one personalized .docx per author from a synthetic all-None seed shipped with the skill, avoiding 10–20 minutes of repetitive Word clicking per author.
The official ICMJE coi_disclosure.docx puts every field inside Word Content Controls (Structured Document Tags, a.k.a. SDTs). Naive python-docx manipulation of cell.text silently ignores SDT content, so the straightforward programmatic approach does not work. The historical workaround was to open the template in Word and manually fill each author's form (21 authors × 13 checkboxes × 2 clicks = ~500 clicks). This skill replaces that by operating directly on word/document.xml inside the docx zip and doing literal-string replacement — but that requires the target strings to already exist in the seed, so the skill ships a pre-filled synthetic seed.
Effect: a full author roster auto-fills in seconds from the synthetic seed, with zero Word clicks.
already-populated seed. Creating Content Controls programmatically is fragile and Word-version-dependent.
directory contains icmje_coi_seed_synthetic.docx with all PII scrubbed (synthetic name, title, date; metadata reset to ICMJE / Anonymous). Real-person seeds leak PII through both document.xml and docProps.
script only replaces Date/Name/Title. If any author has a real disclosure, they must edit in Word manually — the skill's purpose is the common all-None case.
13 × "None" in document.xml. The script runs this check implicitly by preserving the seed structure; a post-generation grep is cheap insurance.
Skip this skill when:
in Word; this skill does not help)
guidelines first
Ask the user (or extract from conversation):
[(1, "Author One"), (2, "Author Two"), ...]submission/{journal}/icmje_forms/Present the intake back to the user for confirmation (Gate 1 — user approval) before generating anything. Explicitly name which authors will get all-None forms and remind that anyone with a real disclosure must instead fill their own form in Word.
Invoke the script with the synthetic seed that ships with this skill:
bashpython3 ${SKILL_DIR}/scripts/fill_icmje_coi.py \ --seed ${SKILL_DIR}/templates/icmje_coi_seed_synthetic.docx \ --seed-name "Placeholder Author" \ --seed-title "Placeholder Manuscript Title" \ --seed-date "January 1, 2000" \ --new-title "{exact manuscript title}" \ --new-date "{submission date}" \ --out-dir {out_dir} \ --authors '[[1,"Author One"],[2,"Author Two"],...]'
The script exits nonzero if any seed string is not found, preventing silent failures.
For each generated docx, confirm:
Placeholder Author, Placeholder Manuscript Title, January 1, 2000)Verification one-liner:
bashfor f in {out_dir}/*.docx; do python3 -c " import zipfile, sys xml = zipfile.ZipFile('$f').read('word/document.xml').decode() assert xml.count('☒') == 14, 'bad ☒ count' assert xml.count('None') == 13, 'bad None count' assert 'Placeholder' not in xml, 'seed leak' print('✓ $f') " done
Present verification results to user (Gate 2 — user review) before handing off files.
Provide the user with circulation copy to send with each personalized form (write it in the co-authors' preferred language — Korean is common for Korean co-authors):
> Please review the attached ICMJE COI form. > - If the contents are correct, sign and reply with a PDF. > - If a change is needed, edit/check the relevant item, sign, and reply. > - If there are no changes at all, reply "no changes" and return the signed PDF separately.
All 6–21 authors can be emailed in one gws gmail draft batch (Gate 3 — user approves batch send before actually dispatching).
If the user wants a custom seed (e.g., different default wording, pre-filled items 2/3 with a common grant), generate it once as follows:
templates/icmje_coi_seed_synthetic.docx in Word{project}/submission/{journal}/ or alocal private seeds directory (outside this repo)
--seed /path/to/custom.docx to the script along with the new seedvalues for --seed-name, --seed-title, --seed-date
Do NOT commit custom seeds that contain real author names to the public medsci-skills repo. Keep them in private per-project directories or a local private seeds directory (outside this repo).
The shipped templates/icmje_coi_seed_synthetic.docx was derived from the official ICMJE coi_disclosure.docx through the following steps:
https://www.icmje.org/downloads/coi_disclosure.docx)January 1, 2000Placeholder AuthorPlaceholder Manuscript TitledocProps/core.xml metadata: creator=ICMJE, lastModifiedBy=Anonymous, dates=2000-01-01docProps/app.xml Company/Manager fieldsNo real author's disclosure data is embedded. The file is safe to redistribute.
verbatim from the manuscript's title page or the user's author list.
seed unchanged. If the user asks whether the script "handled the disclosures," the honest answer is "it cloned the seed's ☒ None entries; no author-specific disclosure reasoning happened."
the seed must be pre-filled with all-None ☒ + text.
altering the seed structure, stop and escalate to the user; Word-generated SDT XML is the ground truth.
promote a custom seed, verify by unzip -p seed.docx docProps/core.xml that no real names remain in metadata before committing.
| Skill | Relationship | |---|---| | write-paper | Completes the manuscript whose title is used as input | | find-journal | Identifies whether the target journal requires ICMJE form | | add-journal | Journal profile records whether ICMJE form is required | | revise | After revision, updated title may require re-generating forms |
BMJ ICMJE derivative, etc.) — only the canonical ICMJE form
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | pass→pass | 7,637 | 7,772 | +2% | 1 | 1 | 0% | 1,198 | 3,662 | +206% | 0 | 0 | — |
case-01 | fail→fail | 6,571 | 7,713 | +17% | 1 | 1 | 0% | 471 | 2,961 | +529% | 0 | 0 | — |
case-02 | fail→fail | 16,406 | 13,986 | -15% | 1 | 1 | 0% | 838 | 5,202 | +521% | 0 | 0 | — |
case-03 | fail→fail | 28,834 | 8,648 | -70% | 1 | 1 | 0% | 5,856 | 3,139 | -46% | 0 | 0 | — |
case-04 | fail→pass | 16,376 | 8,774 | -46% | 1 | 1 | 0% | 1,357 | 3,978 | +193% | 0 | 0 | — |
case-05 | fail→pass | 7,040 | 6,728 | -4% | 1 | 1 | 0% | 1,150 | 3,434 | +199% | 0 | 0 | — |
case-07 | fail→pass | 18,064 | 11,426 | -37% | 1 | 1 | 0% | 2,782 | 4,718 | +70% | 0 | 0 | — |
case-08 | fail→pass | 13,336 | 6,372 | -52% | 1 | 1 | 0% | 1,731 | 3,416 | +97% | 0 | 0 | — |
case-09 | fail→pass | 18,019 | 11,680 | -35% | 1 | 1 | 0% | 3,410 | 4,664 | +37% | 0 | 0 | — |
case-10 | fail→pass | 14,599 | 7,257 | -50% | 1 | 1 | 0% | 2,347 | 3,629 | +55% | 0 | 0 | — |
case-11 | fail→pass | 11,154 | 5,833 | -48% | 1 | 1 | 0% | 1,780 | 3,526 | +98% | 0 | 0 | — |
case-22 | fail→pass | 10,464 | 5,647 | -46% | 1 | 1 | 0% | 1,925 | 3,524 | +83% | 0 | 0 | — |
case-12 | fail→pass | 5,847 | 4,368 | -25% | 1 | 1 | 0% | 1,174 | 3,379 | +188% | 0 | 0 | — |
case-13 | pass→pass | 14,521 | 7,795 | -46% | 1 | 1 | 0% | 2,506 | 3,646 | +45% | 0 | 0 | — |
case-14 | fail→pass | 7,967 | 5,495 | -31% | 1 | 1 | 0% | 1,614 | 3,450 | +114% | 0 | 0 | — |
case-15 | fail→pass | 12,885 | 7,959 | -38% | 1 | 1 | 0% | 2,177 | 3,749 | +72% | 0 | 0 | — |
case-16 | fail→pass | 16,114 | 10,017 | -38% | 1 | 1 | 0% | 2,164 | 4,038 | +87% | 0 | 0 | — |
case-17 | fail→pass | 14,426 | 5,861 | -59% | 1 | 1 | 0% | 2,412 | 3,509 | +45% | 0 | 0 | — |
case-18 | fail→pass | 19,694 | 7,514 | -62% | 1 | 1 | 0% | 4,023 | 3,687 | -8% | 0 | 0 | — |
case-19 | fail→pass | 9,837 | 11,257 | +14% | 1 | 1 | 0% | 1,634 | 4,665 | +185% | 0 | 0 | — |
case-20 | pass→pass | 10,619 | 4,014 | -62% | 1 | 1 | 0% | 1,636 | 3,078 | +88% | 0 | 0 | — |
case-21 | fail→pass | 5,995 | 10,646 | +78% | 1 | 1 | 0% | 961 | 4,294 | +347% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +73 percentage points is the difference between those two pass rates over the 19 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.