Source profileQuality 98/100Review permissions

Aperivue/medsci-skills/skills/make-figures/SKILL.md

make-figures

Generate publication-ready figures and visual abstracts for medical research papers. Supports ROC curves, forest plots, CONSORT/STARD/PRISMA flow diagrams, calibration plots, Kaplan-Meier curves, Bland-Altman plots, confusion matrices, pipeline diagrams, and journal-specific visual/graphical abstracts (python-pptx template-based).

Source repository stars
237
Declared platforms
0
Static risk flags
2
Last source update
2026-08-05
Source checked
2026-08-06

Decision brief

What it does—and where it fits

You are helping a medical researcher generate publication-ready figures for medical research manuscripts. Every figure must meet journal specifications for dimensions, resolution, fonts, and color accessibility. Produce clean, data-focused visuals with no chartjunk.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/Aperivue/medsci-skills --skill "skills/make-figures"
    Safe inspection promptEditorial

    Inspect the Agent Skill "make-figures" from https://github.com/Aperivue/medsci-skills/blob/8b39515657a0e0a575d91b1b00b6f3df4f7bb90f/skills/make-figures/SKILL.md at commit 8b39515657a0e0a575d91b1b00b6f3df4f7bb90f. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Default workflow when AI images are not allowed

      1. SMART Servier Medical Art — https://smart.servier.com/, CC BY 4.0, free, 3,000+ vector medical icons (anatomy, organs, ethnicity-specific human figures, drugs, devices). Commercial / journal use allowed. Required attribution (1 line in figure legend OR methods): Anatomical ic…

      SMART Servier Medical Art — https://smart.servier.com/, CC BY 4.0, free, 3,000+ vector medical icons (anatomy, organs, ethnicity-specific human figures, drugs, devices). Commercial / journal use allowed. Required attrib…NIAID BioArt (https://bioart.niaid.nih.gov) — public domain (US Govt), microbiology / immunology / lab-tech focus.BioRender (https://www.biorender.com) — institutional license usually required; use the exported "Publication-ready" PNG/TIFF and cite per BioRender publication policy.
    2. 02

      Workflow

      1. Check journal template. Look for an official PPTX template in ${CLAUDESKILLDIR}/references/visualabstracttemplates/{journal}.pptx. If no journal-specific template exists, use medscidefault.pptx. 2. Extract content from the manuscript: - Title: Full article title - Hypothesis/…

      Check journal template. Look for an official PPTX template inExtract content from the manuscript:Title: Full article title
    3. 03

      Step 1: Specify

      Before specifying figure type, read ${CLAUDESKILLDIR}/references/designprinciples.md — identify (1) the one-sentence key message, (2) audience and reading-time budget, and (3) whether a figure is the right vehicle (vs a small table or in-line text). The five strategies in that f…

      --study-type : One of: diagnostic-accuracy, ai-validation, meta-analysis, dta-meta-analysis, observational-cohort, rct, case-report. When set, auto-generate the full figure set from the Study-Type Figure Sets table belo…--data-dir : Directory containing analysis outputs (CSVs, analysisoutputs.md). Default: current working directory.Figure type (from the supported types below) — skipped when --study-type is provided
    4. 04

      Step 2: Configure

      1. Load the figure style file:

      Load the figure style file:Look up journal-specific dimensions from ${CLAUDESKILLDIR}/references/figurespecs.md.Set the colorblind-safe palette (Wong palette by default).
    5. 05

      Step 3: Generate

      Create the figure using Python (matplotlib/seaborn as primary, with specialized libraries as needed).

      Create the figure using Python (matplotlib/seaborn as primary, with specialized libraries as needed).Script structure: python """ Figure: {description} Date: {YYYY-MM-DD} Target: {journal} Dimensions: {width} x {height} inches @ {DPI} DPI """ import numpy as np import matplotlib.pyplot as plt import osstylepath = os.path.join(os.environ.get('CLAUDESKILLDIR', '.'), '../analyze-stats/references/style/figurestyle.mplstyle') if os.path.exists(stylepath): plt.style.use(stylepath)

    Permission review

    Static risk signals and limitations

    Runs scripts

    medium · line 140

    The documentation asks the agent to run terminal commands or scripts.

    python ${CLAUDE_SKILL_DIR}/scripts/generate_visual_abstract.py \

    Runs scripts

    medium · line 175

    The documentation asks the agent to run terminal commands or scripts.

    python ${CLAUDE_SKILL_DIR}/scripts/generate_visual_abstract.py \

    Reads files

    low · line 270

    The documentation asks the agent to read local files, directories, or repositories.

    Load the figure style file:

    Reads files

    low · line 346

    The documentation asks the agent to read local files, directories, or repositories.

    Read the corresponding rubric file:

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score98/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars237SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    Aperivue/medsci-skills
    Skill path
    skills/make-figures/SKILL.md
    Commit
    8b39515657a0e0a575d91b1b00b6f3df4f7bb90f
    License
    MIT
    Collected
    2026-08-06
    Default branch
    main
    View the original SKILL.md

    Make-Figures Skill

    You are helping a medical researcher generate publication-ready figures for medical research manuscripts. Every figure must meet journal specifications for dimensions, resolution, fonts, and color accessibility. Produce clean, data-focused visuals with no chartjunk.

    Credits

    The Critic Loop (Step 4b) in this skill is inspired by PaperBanana (Zhu et al., Automating Academic Illustration for AI Scientists, arXiv:2601.23265, 2025) and by prior self-refinement research — Self-Refine (Madaan et al., 2023), Reflexion (Shinn et al., 2023), and Constitutional AI (Anthropic, 2022). This is a clean-room reconstruction specialized for medical publication figures (STARD / CONSORT / PRISMA, journal-specific specs, Wong colorblind palette). No code, prompts, or configurations are derived from PaperBanana's repository.

    Communication Rules

    • Communicate with the user in their preferred language.
    • All figure text (labels, legends, annotations) must be in English.
    • Medical terminology is always in English.

    Data Privacy Check

    Before reading any data file, check whether it might contain Protected Health Information (PHI):

    1. If *_deidentified.* files exist in the working directory, use those preferentially.
    2. If only raw CSV/Excel files exist (no *_deidentified.* counterpart), warn the user (ask in the user's preferred language):

      "Does this data contain patient identifiers (names, national ID / RRN, contact details, etc.)? If so, please de-identify it first with the /deidentify skill."

    3. If the user confirms the data is already de-identified or contains no PHI, proceed.

    Reference Files

    • Figure specifications: ${CLAUDE_SKILL_DIR}/references/figure_specs.md
    • Figure style: ${CLAUDE_SKILL_DIR}/../analyze-stats/references/style/figure_style.mplstyle (or project's CLAUDE.md if available)
    • Project data: See CLAUDE.md for data locations under 2_Data/

    Read figure_specs.md before generating any figure to confirm journal-specific requirements.


    Journal AI-Image Policies (CRITICAL — check BEFORE generation)

    Synced with the user's global rule ~/.claude/rules/journal-ai-image-policies.md. The table below is the local copy used during autonomous workflow; the global rule is authoritative when conflicts arise.

    Journal familyPolicy on AI-generated imagesDisclosure required
    JACC family (incl. JACC: Asia, JACC Imaging, JACC EP, JACC BTS)Prohibited without prior Editor-in-Chief permission (JACC pathway, PMC10167500)Cover-letter pre-submission inquiry + ICMJE-style declaration
    NEJMAI image generation prohibitedN/A
    Radiology / Radiology AIAllowed with disclosureManuscript disclosure block
    Nature familyAllowed with disclosure + license checkMethods + figure legend
    Lancet familyDisclosure required, generation discouragedManuscript disclosure
    Default (target unknown)Treat as prohibited until confirmedN/A

    Hard rule: For JACC, NEJM, or any "unknown" target journal, never use Gemini / DALL-E / Midjourney / Stable Diffusion / Nano Banana to create images that will appear in figures, Central Illustrations, or graphical abstracts. AI text-editing of the manuscript prose remains acceptable subject to standard disclosure.

    Default workflow when AI images are not allowed

    1. SMART Servier Medical Arthttps://smart.servier.com/, CC BY 4.0, free, 3,000+ vector medical icons (anatomy, organs, ethnicity-specific human figures, drugs, devices). Commercial / journal use allowed. Required attribution (1 line in figure legend OR methods):

      Anatomical icons modified from SMART Servier Medical Art (CC BY 4.0).

    2. NIAID BioArt (https://bioart.niaid.nih.gov) — public domain (US Govt), microbiology / immunology / lab-tech focus.
    3. BioRender (https://www.biorender.com) — institutional license usually required; use the exported "Publication-ready" PNG/TIFF and cite per BioRender publication policy.
    4. For "diseased" variants not directly available (e.g., calcified vessel from a clean vessel): reuse the healthy asset and overlay disease markers via matplotlib scatter / Circle / PathPatch. Keeps the entire pipeline non-AI and reproducible.

    Asset directory convention

    manuscript/figures/_assets_servier/      # CC BY 4.0 source PNGs
    manuscript/figures/_assets_servier/CITATION.md   # source URL + download date per asset
    manuscript/figures/_assets_data/         # data-driven raster (R / matplotlib heat maps, KM, etc.)
    manuscript/figures/_legacy/              # archived prior versions
    

    Composition scripts should load only from _assets_servier/ and _assets_data/. If a script imports from _assets_ai/, treat it as a policy violation for JACC/NEJM/unknown targets.

    When a figure is produced by a data-driven .py/.R script (ROC, forest, KM, calibration, heat maps), lint that script before finalizing with the /analyze-stats code-quality gate (check_generated_code.py {script} --strict): it catches a missing plotting seed for any bootstrapped CI band, a hardcoded absolute data path, or a hand-typed data literal that should have been read from the analysis CSV.

    Decoration vs information

    Even when AI images are allowed, AI-generated illustrations are immediately recognizable to experienced reviewers (small decorative icons that add no information, overly uniform layouts, generic clip-art style). For high-impact submissions, prefer Servier / BioArt / BioRender + matplotlib overlays over AI.


    DPI and Resolution Guide

    OutputMinimum DPINotes
    Journal halftone (photos, screenshots)300Standard for most journals
    Journal line art (diagrams, graphs)600Required by Radiology, most Elsevier journals
    Poster presentation150-200Lower is acceptable for large-format prints
    Screen/web only72-150Not for print submission

    Practical workflow for screen captures:

    • Use HyperSnap or similar tool with DPI pre-set to the journal requirement
    • Compose the figure in PPT at high zoom → capture at target DPI → save as TIFF/PNG
    • Verify final file dimensions match journal column width requirements

    Visual Abstract / Graphical Abstract

    Many journals now require or strongly encourage visual abstracts. European Radiology made graphical abstracts mandatory for all Original Articles from first revision (Jan 2025). Submitting one voluntarily signals effort and can improve editorial impression.

    Journal Requirements

    StatusExample Journals
    MandatoryEuropean Radiology (from 1st revision, all Original Articles)
    EncouragedAbdominal Radiology, JCO, Annals of Internal Medicine
    VoluntaryMost other journals — improves social media visibility

    Check the target journal profile (write-paper/references/journal_profiles/) for specific visual abstract requirements before starting.

    Workflow

    1. Check journal template. Look for an official PPTX template in ${CLAUDE_SKILL_DIR}/references/visual_abstract_templates/{journal}.pptx. If no journal-specific template exists, use medsci_default.pptx.
    2. Extract content from the manuscript:
      • Title: Full article title
      • Hypothesis/Question: Derived from Key Point 1 or study objective (max 1 sentence)
      • Methodology: Brief flowchart or ≤3 bullets, <6 words each
      • Visual element: Study's own figure (ROC curve, flow diagram, representative image)
      • Badges: Patient cohort (N=...) | Modality/organ | Single/Multi-center
      • Main finding: Derived from Key Point 3 (<20 words)
      • Citation: Journal (year) Authors; DOI
    3. Select visual element (priority order — no API needed for top options):
      1. Study's own figures (ROC, flow diagram, representative image) — always preferred
      2. Free illustration from Servier Medical Art or NIAID BioArt (see ${CLAUDE_SKILL_DIR}/references/medical_illustration_sources.md)
      3. Manual drawing in PPT/Keynote/Figma
      4. AI generation via generate_image.py --style medical (only if GEMINI_API_KEY set)
    4. Generate using the script:
      python ${CLAUDE_SKILL_DIR}/scripts/generate_visual_abstract.py \
        --template medsci_default \
        --title "Article Title" \
        --hypothesis "Research question" \
        --methods "Method 1|Method 2|Method 3" \
        --finding "Main finding statement" \
        --citation "Eur Radiol (2026) Author A et al; DOI:..." \
        --visual figures/fig1_roc_curve.png \
        --badges "N=450|CT chest|Multi-center" \
        --output figures/visual_abstract.pptx
      
    5. Review with user. Open the PPTX to verify layout and content. Iterate.
    6. Export. PPTX is the primary deliverable. For PNG: open in PowerPoint/Keynote → export, or use LibreOffice CLI (soffice --headless --convert-to png).

    Design Principles

    • One page, landscape (16:9) or per journal template specification
    • Three sections: Study question → Key method → Main result
    • Use the study's actual figures rather than generic graphics
    • Minimize text — let visuals carry the message
    • Every visual element must serve a purpose (no decorative clip-art)

    Available Templates

    TemplateFileUse When
    MedSci Defaultmedsci_default.pptxAny journal without an official template
    JACC Central Illustrationjacc_central_illustration.pptxJACC family journals (use --type central-illustration)

    Using a journal's own template. Several journals publish one — European Radiology requires a graphical abstract from first revision and supplies EURA-GA-Jan2025.pptx. We do not redistribute them: a template you may download is not a template we may ship. Use yours directly instead:

    python ${CLAUDE_SKILL_DIR}/scripts/generate_visual_abstract.py \
      --template /absolute/path/to/EURA-GA-Jan2025.pptx  ...
    

    --template takes an absolute path to any .pptx. The script locates the fields by their text content rather than by shape name, so a journal's own template works unmodified. If the path does not exist it falls back to medsci_default.pptx.

    To add a new journal template: see ${CLAUDE_SKILL_DIR}/references/visual_abstract_templates/template_guide.md.


    Central Illustration vs Visual Abstract

    A Central Illustration (CI) is not a Visual Abstract (VA). They serve different purposes and follow different rules. JACC family journals (JACC, JACC: Asia, JACC: Cardiovascular Imaging, JACC: Heart Failure, JACC: CardioOncology, JACC: Clinical Electrophysiology, JACC: Basic to Translational Science) require a Central Illustration with every Original Article. Reference: Fuster V, Mann DL. JACC. 2019;74(22):2816–2820.

    AspectCentral IllustrationVisual Abstract
    PurposeSingle key finding / take-home messageMethods + Results pictorial summary
    Where in paperEnd of Results / start of DiscussionBeginning of paper
    Methods contentNoneRequired
    AudienceCardiovascular clinicians + journal-issue readersBroad including non-specialists / social media
    Used byAll JACC family + JACC: AsiaOriginally JACC: Basic to Translational Science
    Text densityMinimal (graphical priority)More allowed (methods labels)
    Bar graphsOK if they capture entire messageAvoid — use ↑↓ arrows
    Default complexity1–3 visual zonesQ→M→R three blocks

    Fuster-Mann five rules (CI must pass all)

    1. Know the message. One finding, not study design + multiple findings.
    2. Convey graphically, not textually. Even a simple KM curve is OK.
    3. Avoid using too much text. Replace with icons or arrows.
    4. Avoid secondary messages. ≤ 5 seconds for a viewer to state the main finding.
    5. Simplicity is superior. Default to fewer panels.

    Full guidance and validation thresholds: ${CLAUDE_SKILL_DIR}/references/jacc_central_illustration_principles.md.

    CI mode invocation

    python ${CLAUDE_SKILL_DIR}/scripts/generate_visual_abstract.py \
      --type central-illustration \
      --visual figures/central_illustration_v2.png \
      --citation "FirstAuthor Last et al. Journal Name 2026; vol(issue):pages." \
      --output submission/jacc_asia/central_illustration.pptx \
      --ci-zones 3 --ci-label-words 22 --ci-numerical-points 2 \
      --ci-raw-text "warranty drops to 3 years in age 45+ with cardiometabolic burden; MASLD HR 1.77"
    

    CI mode validates before rendering and rejects (exit 2) if any of: zones > 3, label words > 30, numerical points > 4, or methodology terms (cohort flow / inclusion / exclusion / study design / enrollment / randomized / sample size / CONSORT / PRISMA / STARD) appear in --ci-raw-text. Override individual rules with --ci-allow {zones|words|numerical|methods} only when you have a defensible reason.

    The JACC submission PPTX is a 10×7.5 in slide with 4 placeholders (citation textbox, content picture, footer textbox reserved, JACC logo). The red border + blue "CENTRAL ILLUSTRATION:" header are applied by JACC editorial after acceptance — authors submit only the content figure + citation.


    Workflow

    Step 1: Specify

    Before specifying figure type, read ${CLAUDE_SKILL_DIR}/references/design_principles.md — identify (1) the one-sentence key message, (2) audience and reading-time budget, and (3) whether a figure is the right vehicle (vs a small table or in-line text). The five strategies in that file shift Step 1 from "which chart fits the data" to "what should the reader remember 10 seconds later." Skip only when the figure is mandated by a reporting guideline (e.g., PRISMA / CONSORT flow), and even then apply the cognitive-load checklist.

    For reporting-guideline figures, also load ${CLAUDE_SKILL_DIR}/references/reporting_guideline_figure_map.md — the 14-row table tells you which guideline mandates which figures and whether this skill ships an official template (✅), generic flow only (⚠️), or needs manual production (❌). Critical for AI-extension guidelines (CONSORT-AI, STARD-AI, TRIPOD+AI, CLAIM 2024, DECIDE-AI).

    For medical AI / engineering pipeline figures (DICOM workflow, annotation pipeline, federated learning topology, model architecture), also load ${CLAUDE_SKILL_DIR}/references/pipeline_concepts_medical_ai.md — canonical layouts, required annotations, and tool selection per type.

    Optional flags:

    • --study-type <type>: One of: diagnostic-accuracy, ai-validation, meta-analysis, dta-meta-analysis, observational-cohort, rct, case-report. When set, auto-generate the full figure set from the Study-Type Figure Sets table below without prompting for individual figure types.
    • --data-dir <path>: Directory containing analysis outputs (CSVs, _analysis_outputs.md). Default: current working directory.

    Ask the user for:

    1. Figure type (from the supported types below) — skipped when --study-type is provided
    2. Data source (file path, DataFrame, or manual values)
    3. Target journal (for dimension/font requirements)
    4. Panel layout (single panel, multi-panel, or let you decide)
    5. Any special requests (annotations, highlights, reference lines)
    6. Study type (if not passed via --study-type): determines the required figure set

    If the user provides enough context, infer missing parameters and confirm before proceeding.

    Step 2: Configure

    1. Load the figure style file:
      import matplotlib.pyplot as plt
      import os
      style_path = os.path.join(os.environ.get('CLAUDE_SKILL_DIR', '.'), '../analyze-stats/references/style/figure_style.mplstyle')
      if os.path.exists(style_path):
          plt.style.use(style_path)
      
    2. Look up journal-specific dimensions from ${CLAUDE_SKILL_DIR}/references/figure_specs.md.
    3. Set the colorblind-safe palette (Wong palette by default).
    4. Configure font sizes per element type (title, axis label, tick label, legend, annotation).

    Step 3: Generate

    Create the figure using Python (matplotlib/seaborn as primary, with specialized libraries as needed).

    Script structure:

    """
    Figure: {description}
    Date: {YYYY-MM-DD}
    Target: {journal}
    Dimensions: {width} x {height} inches @ {DPI} DPI
    """
    import numpy as np
    import matplotlib.pyplot as plt
    import os
    
    style_path = os.path.join(os.environ.get('CLAUDE_SKILL_DIR', '.'), '../analyze-stats/references/style/figure_style.mplstyle')
    if os.path.exists(style_path):
        plt.style.use(style_path)
    
    # Wong colorblind-safe palette
    WONG = ['#000000', '#E69F00', '#56B4E9', '#009E73',
            '#F0E442', '#0072B2', '#D55E00', '#CC79A7']
    
    np.random.seed(42)
    

    Step 4: Review

    Present the figure to the user and ask:

    • Does the layout work?
    • Are labels and annotations correct?
    • Any adjustments to colors, sizing, or emphasis?

    Iterate until the user approves.

    Step 4b: Critic Loop (self-critique before final export)

    Before Step 5 Export, run the automated Critic Loop. This is two stages — deterministic quantitative checks via Python, then qualitative review by Claude itself — and the combined output tells us whether to re-render or hand off to the user.

    Stage 1: Quantitative checks (critic_figure.py)

    python ${CLAUDE_SKILL_DIR}/scripts/critic_figure.py \
        figures/fig1_stard.png \
        --type stard \
        --spec-min-dpi 600 \
        --spec-width-in 7.0 \
        --source-text figures/fig1_stard.txt \   # optional: expected strings for OCR coverage
        --out figures/fig1_stard.critique.json
    

    This produces a JSON report covering:

    • DPI and physical width vs. journal spec
    • Dominant-color breakdown and out-of-Wong-palette fraction
    • OCR-detected word count, minimum text height, and (if a source-text file was provided) source-word coverage

    Stage 2: Qualitative review (Claude session)

    1. Use the Read tool to load the generated PNG.
    2. Read the corresponding rubric file:
      • Flow diagrams: ${CLAUDE_SKILL_DIR}/references/critic_rubrics/flow_diagram.md (sections A–G; section G adds cognitive-load and template-fidelity checks)
      • Data plots: ${CLAUDE_SKILL_DIR}/references/critic_rubrics/data_plot.md (sections A–G; section G adds calibration / fairness / colorblind+redundant / dataset-flow / decision-curve checks for medical AI papers)
      • For PRISMA / CONSORT / STARD / STROBE specifically, also read ${CLAUDE_SKILL_DIR}/references/flow_diagram_lessons.md — five production lessons covering official-template fidelity, PDF export fidelity (VML fallback), docx XML escape, sequential placeholder mapping, and frozen-version sync with the manuscript.
      • For AI-extension guidelines (CONSORT-AI, STARD-AI, TRIPOD+AI, CLAIM 2024, DECIDE-AI), also read ${CLAUDE_SKILL_DIR}/references/reporting_guideline_figure_map.md — the row for the target guideline lists mandatory figures and which ones this skill cannot template (production path documented per row).
      • For medical-AI pipeline / DICOM / federated / architecture figures, also read ${CLAUDE_SKILL_DIR}/references/pipeline_concepts_medical_ai.md.
    3. Read the _why.md design notes in ${CLAUDE_SKILL_DIR}/references/exemplar_diagrams/{type}/ — hierarchy, whitespace, typography, emphasis, colour. They are the anchors. Where a rendered exemplar is bundled (template_output*.png, produced by this skill's own R script), Read 1–2 of those too; the figures cropped from published papers were removed in 2026-07 because an MIT-licensed package cannot redistribute them (see that directory's README). If you have your own exemplars locally, point the loop at them — they stay on your machine. For a non-flow data plot (forest, ROC, KM, calibration), read the matching anatomy model in ${CLAUDE_SKILL_DIR}/references/exemplar_plots/ (e.g., forest_plot.md).
    4. Score every rubric item as PASS / PARTIAL / FAIL with a one-line note, using the format at the bottom of the rubric file.
    5. Emit a "Required edits before next render" list of concrete source-code changes (D2 node renames, count corrections, matplotlib parameter tweaks).

    Refinement loop

    • If all items are PASS → proceed to Step 5 Export with critic_pass: yes.
    • If any item is FAIL → apply the required edits to the source (D2 file or matplotlib script), re-render, and re-run Stage 1 + Stage 2. Default maximum is T=2 rounds; the user may request up to T=3.
    • If after the max rounds some items remain PARTIAL, proceed with critic_pass: partial and record the residual items in the manifest's critic_notes field.

    Record the final state in _figure_manifest.md (see the manifest format below) so downstream steps (/write-paper Phase 2 embedding and Phase 7 DOCX build) and future critic passes can see the history.

    Step 5: Export

    Save final outputs:

    • PDF (vector format, preferred for journal submission)
    • PNG (300 DPI raster, for review and presentation)
    • TIFF (if the journal requires it, 300 DPI LZW compression)

    Name files descriptively: fig1_roc_curve.pdf, fig2_consort_flow.pdf, etc.

    For PPTX outputs (visual abstract, central illustration, or any deck the figure will live in): run the Mac-compatibility validator before delivery. PowerPoint Mac silently drops TIFF, renders <a:sp3d> 3-D bevels as red outlines that PDF export does not show, and refuses to open files whose app.xml slide count disagrees with the actual slide XML files. This script catches all four classes of defect codified in ~/.claude/rules/pptx-mac-compatibility.md:

    python ${CLAUDE_SKILL_DIR}/scripts/validate_pptx_mac_compat.py \
        figures/visual_abstract.pptx \
        --json figures/visual_abstract.mac_compat.json \
        --strict
    

    Exit code 1 means at least one FAIL — fix per the fix: field in the JSON report and re-render the PPTX before delivery. Exit code 0 with WARN is acceptable. Skip this step when the figure is PNG/PDF only (no PPTX).

    Step 6: Design QC Checklist

    Before delivering the final figure, verify all items:

    • Font: Sans-serif (Arial/Helvetica), minimum 7pt, axis labels ≥ 9pt
    • Color: Wong/Okabe-Ito colorblind-safe palette used
    • Colorblind test: Would the figure work for deuteranopia? (no red-green only distinctions)
    • Grayscale test: Information preserved when printed in black & white
    • Alignment: All elements on a consistent grid; panels aligned
    • Vector output: PDF/SVG saved (not just PNG)
    • Resolution: ≥ 300 DPI for raster elements, ≥ 600 DPI for line art
    • Journal specs: Dimensions, font, and format match target journal requirements
    • No chartjunk: No 3D effects, unnecessary gridlines, gradient fills, or decorative elements
    • Caption: Drafted with key finding, abbreviations, statistical details, and sample size

    Study-Type Figure Sets

    When the study type is known (from /write-paper Phase 0 or user specification), auto-detect and generate the complete required figure set without asking for each figure individually.

    Study Type (Guideline)Required Figures
    Diagnostic accuracy (STARD)STARD flow diagram, ROC curve, confusion matrix, calibration plot
    AI validation (TRIPOD+AI / CLAIM)Flow diagram, ROC curve, confusion matrix, calibration plot, feature importance or SHAP, Grad-CAM (if imaging)
    Meta-analysis (PRISMA)PRISMA flow diagram, forest plot, funnel plot
    DTA meta-analysis (PRISMA-DTA)PRISMA flow diagram, paired forest plot (Se + Sp), SROC curve, Deeks funnel plot
    Observational cohort (STROBE)Flow diagram, Kaplan-Meier curves (if survival endpoint)
    RCT (CONSORT)CONSORT flow diagram, primary endpoint figure
    Case report / series (CARE)Clinical timeline figure (exemplar_plots/clinical_timeline.md), annotated multimodality imaging panel when visually load-bearing (exemplar_plots/imaging_panel.md); for a series, an all-cases summary table

    The manifest is mandatory. After generating all figures, write figures/_figure_manifest.md — one row per figure (Figure | Path | Type | Tool | Critic | Rounds | Description) plus a ## Critic notes section recording any residual PARTIAL items and why they were accepted. It is consumed by /write-paper Phase 2 (figure embedding) and Phase 7 (DOCX build); verify it exists and is non-empty before finishing. Format and field definitions: ${CLAUDE_SKILL_DIR}/references/figure_manifest.md.

    Flow diagram generation rule. STARD / CONSORT / PRISMA / STROBE flow diagrams MUST use the standardized R pipeline scripts/generate_flow_diagram.R (DiagrammeR + Graphviz dot + rsvg) — the single canonical tool for all four. Do NOT use matplotlib FancyBboxPatch (manual coordinates break when text changes, and patches distort when embedded in DOCX). Do NOT use D2 for new flow diagrams (weak font control, overlap needs manual post-processing). Numbers in labels must be CSV-derived, or hand-written only when the value lives in a commit-tracked data artifact.

    Read on demand:

    FileRead it whenCost if read blindly
    references/flow_diagram_recipe.mdyou are generating a STARD / CONSORT / PRISMA / STROBE flow diagram~2,200 tokens — a ROC curve or forest plot needs none of it
    references/figure_manifest.mdyou are writing _figure_manifest.md~700 tokens of output format

    Tool Selection Guide

    Choose the right tool for each figure type. Using matplotlib for flow diagrams leads to hard-coded coordinates that break when text changes — use auto-layout tools instead.

    Data Visualization → matplotlib/seaborn (this skill)

    Best for figures where data drives the layout. This skill handles these directly:

    TypeUse CaseKey Library
    ROC CurveDiagnostic accuracymatplotlib, sklearn
    Forest PlotMeta-analysismatplotlib
    Calibration PlotPrediction modelmatplotlib
    KM CurveSurvival analysislifelines, matplotlib
    Bland-AltmanAgreementmatplotlib
    Confusion MatrixClassificationseaborn
    Box/Violin PlotGroup comparisonseaborn
    Bar ChartCategorical comparisonmatplotlib
    HeatmapCorrelation/agreementseaborn

    Flow Diagrams → Dedicated Tools (NOT matplotlib)

    Flow diagrams require auto-layout engines. Do NOT use matplotlib patches with manual coordinates — this causes the "absolute coordinate hell" problem where changing one box breaks all downstream positions.

    TypeRecommended ToolWhy
    STROBE (cohort / cross-sectional)scripts/generate_flow_diagram.R --type strobeSingle canonical tool; auto-layout; vector PDF + 300/600 dpi PNG
    CONSORT (RCT)scripts/generate_flow_diagram.R --type consortSame pipeline; monochrome Arial default
    PRISMA 2020 (SR/MA)scripts/generate_flow_diagram.R --type prismaFaithfully implements PRISMA 2020 structure; avoids PRISMA2020 R package's webshot-based raster PDF issue
    STARD (DTA)scripts/generate_flow_diagram.R --type stardSame pipeline; supports 2x2 reference-standard split
    Pipeline DiagramD2 (legacy)Until pipeline-diagram support is added to the R script

    R workflow for flow diagrams: See the "R flow diagram recipe" above in the Flow diagram generation rule. Key points: YAML config → Rscript scripts/generate_flow_diagram.R --type <t> --config <yaml> --out <prefix> → PDF + 300/600 dpi PNG. Templates in references/exemplar_diagrams/{strobe,consort,prisma,stard}/template_input.yaml.

    Official Reporting Guideline Templates → templates/official/

    When a journal requires the canonical, statement-issued template (rather than the auto-laid-out R version), use the bundled official files in templates/official/{prisma2020,consort2010,stard2015,spirit2013}/.

    GuidelineWhat shipsWhen to use
    PRISMA 2020Locally built .pptx (4 variants) + fill_prisma_template.pyReviewer asks for the official PRISMA 2020 layout, or you want editable PowerPoint instead of an R-rendered PDF.
    STROBE (cohort)Parametric .pptx builder build_strobe_template.py (single-script, takes YAML config)Cohort/case-control study Figure 1 when co-authors want PowerPoint they can hand-edit. Auto-fits text, content-fits slide, dashed-border exclusion side-branches with strictly-horizontal connectors. Optional left-side phase column (omit stages: for the plain STROBE convention; include it for the PRISMA-style Identification/Screening/Inclusion/Analysis column). Pair with generate_flow_diagram.R --type strobe for the vector PDF/TIFF submission file.
    CONSORT 2025Official .docx flow diagram + checklistRCT submissions to journals that mandate the consort-spirit.org template.
    STARD 2015Official .pdf flow diagram + .docx checklistDiagnostic accuracy studies; flow diagram is fixed PDF, checklist is editable.
    SPIRIT 2025Official .docx participant timeline + checklistTrial protocols.

    Refresh / fill workflow:

    # Refresh from canonical sources (CC-BY 4.0 / public-statement licenses)
    bash ${CLAUDE_SKILL_DIR}/scripts/fetch_official_templates.sh
    
    # Build PRISMA 2020 .pptx (one-time; site blocks programmatic .docx fetch)
    python3 ${CLAUDE_SKILL_DIR}/scripts/build_prisma2020_template.py \
        --variant new \
        --out ${CLAUDE_SKILL_DIR}/templates/official/prisma2020/PRISMA_2020_flow_new_v1.pptx
    
    # Fill counts — positional 10-tuple matching most SR/MA workflows:
    #   n_db, n_dup, n_screened, n_screen_excluded,
    #   n_sought, n_assessed, n_excl_r1, n_excl_r2, n_excl_r3, n_studies
    python3 ${CLAUDE_SKILL_DIR}/scripts/fill_prisma_template.py \
        --template ${CLAUDE_SKILL_DIR}/templates/official/prisma2020/PRISMA_2020_flow_new_v1.pptx \
        --counts "315,122,186,7,111,204,102,84,3,15" \
        --out fig1_prisma_filled.pptx
    
    # Or use full JSON mapping for studies with non-standard PRISMA splits
    python3 ${CLAUDE_SKILL_DIR}/scripts/fill_prisma_template.py \
        --template ${CLAUDE_SKILL_DIR}/templates/official/prisma2020/PRISMA_2020_flow_new_v1.pptx \
        --counts-file my_counts.json \
        --out fig1_prisma_filled.pptx
    
    # STROBE — parametric single-script builder (cohort study; spine structure varies per study).
    # YAML schema: stages, spine (id/stage/text), exclusions (after/text). Consecutive same-stage
    # rows share one phase label automatically. Stage box fills auto-pick readable text color.
    python3 ${CLAUDE_SKILL_DIR}/scripts/build_strobe_template.py \
        --config figures/figure1_strobe.yaml \
        --out    figures/figure1_strobe.pptx
    

    The builder checks that the exclusion cascade closes — the count in a spine box, minus the exclusions declared after it, must equal the next spine box (A - Σ(exclusions after A) == B), for every link that declares an exclusion. It warns loudly on any imbalance and, with --strict-cascade, refuses to build. This catches the figure-image arithmetic drift that text-grep and prose gates miss (a dropped exclusion leaving the figure short of the analytic N). Run scripts/_strobe_cascade.py --config figure1_strobe.yaml --strict to check a config without rebuilding the diagram.

    For STROBE the canonical KJR/Radiology/BMJ submission flow is:

    1. Render the vector submission file via the auto-fitting Graphviz path: Rscript ${CLAUDE_SKILL_DIR}/scripts/generate_flow_diagram.R --type strobe --config figures/figure1_strobe_graphviz.yaml --out figures/figure1
    2. Build the editable PowerPoint companion via build_strobe_template.py so co-authors and senior reviewers can adjust prose/positioning before sign-off.
    3. Re-export the final PPTX to PDF/TIFF only after co-author edits are integrated.

    See templates/official/NOTES.md for licenses, attribution, and refresh notes.

    Visual / Graphical Abstracts → python-pptx Template Generator

    TypeRecommended Tool
    Visual Abstract (any journal)generate_visual_abstract.py with PPTX template
    Visual element illustrationStudy's own figures (preferred), or free libraries (Servier/NIAID)
    Medical IllustrationSee ${CLAUDE_SKILL_DIR}/references/medical_illustration_sources.md

    See the Visual Abstract section above for the full workflow.

    Hybrid Workflow (recommended for publication)

    Data plots:    matplotlib/seaborn → PDF + PNG (this skill)
    Flow diagrams: generate_flow_diagram.R (DiagrammeR + rsvg) → PDF + 300/600 dpi PNG
    Final assembly: pandoc or python-docx (auto-embedded in DOCX)
    

    Supported Figure Types (matplotlib/seaborn)

    TypeUse CaseKey LibraryOutput
    ROC CurveDiagnostic accuracymatplotlib, sklearnSingle/multi-model ROC with AUC
    Forest PlotMeta-analysismatplotlibEffect sizes with CIs, diamond summary
    Calibration PlotPrediction modelmatplotlibObserved vs predicted with Hosmer-Lemeshow
    KM CurveSurvival analysislifelines, matplotlibWith risk table, log-rank p
    Bland-AltmanAgreementmatplotlibWith mean diff, +/-1.96 SD limits
    Confusion MatrixClassificationseabornHeatmap with percentages
    Box/Violin PlotGroup comparisonseabornWith individual data points
    Pipeline DiagramMethods figureD2 (preferred) or matplotlibProcessing/workflow steps
    Bar ChartCategorical comparisonmatplotlibWith error bars (CI or SD)
    HeatmapCorrelation/agreementseabornColor-coded matrix

    Figure Type Templates

    ROC Curve

    from sklearn.metrics import roc_curve, auc
    
    fig, ax = plt.subplots(figsize=(3.5, 3.5))
    fpr, tpr, _ = roc_curve(y_true, y_score)
    roc_auc = auc(fpr, tpr)
    ax.plot(fpr, tpr, color=WONG[5], lw=1.5,
            label=f'Model (AUC = {roc_auc:.3f})')
    ax.plot([0, 1], [0, 1], 'k--', lw=0.8, alpha=0.5)
    ax.set(xlabel='1 - Specificity', ylabel='Sensitivity',
           xlim=[-0.02, 1.02], ylim=[-0.02, 1.02])
    ax.legend(loc='lower right', frameon=False)
    
    • For multiple models: use distinct Wong palette colors, include AUC + 95% CI in legend.
    • For comparison: report DeLong p-value in annotation.

    Forest Plot

    • Horizontal layout: effect sizes as squares (sized by weight), CIs as lines.
    • Diamond at bottom for pooled estimate.
    • Vertical dashed line at null effect (OR=1 or MD=0).
    • Axis label: "Favours A | Favours B" or appropriate.
    • Include heterogeneity stats (I-squared, p) below the diamond.

    Flow Diagrams (STROBE / CONSORT / PRISMA / STARD)

    Single canonical tool: scripts/generate_flow_diagram.R (see the R flow diagram recipe above). Do not fall back to matplotlib for flow diagrams — manual coordinates break when text changes and patches distort in DOCX. D2 remains a documented legacy fallback only when R is unavailable.

    Layout invariants:

    • Rectangular boxes with rounded corners for stages; notes (shape: note) for exclusion side-boxes.
    • Vertical top-down flow by default; horizontal only when the manuscript layout demands it.
    • Every box label contains the count (e.g., "Assessed for eligibility\n(n = 450)").
    • Numbers are CSV-derived (numerical-safety) — author the YAML from an R/Python script that reads the upstream data, or cite the source file in a comment when a literal value is unavoidable.
    • Follow the official template layout from each guideline.
    • Use relative positioning — never hard-code absolute y-coordinates. Calculate each box position from the previous box's bottom edge plus a consistent gap constant.
    • Define gap constants at the top of the script (e.g., GAP_SMALL = 1.5, GAP_BRANCH = 2.2).
    • Avoid magic number padding in arrow endpoints — use named constants.

    D2 approach (legacy fallback — use only when R is unavailable; the R script above is canonical):

    d2 --layout elk --theme 0 flow.d2 output.svg
    # Then: open SVG in Figma → grid-snap → font swap → export PDF
    

    Caption ↔ flow-SSOT reconciliation (before Step 5 Export). The flow-diagram config (the YAML/script that generate_flow_diagram.R consumes) is the single source of truth for participant counts. A hand-written Figure 1 caption drifts from it whenever the cohort is re-locked but the caption is not — the classic "caption says n = 1,284 analytic, diagram box says n = 998" defect, which surfaces only at submission. Re-derive the caption counts from the flow config and reconcile:

    python3 ${CLAUDE_SKILL_DIR}/scripts/derive_figure_legend_counts.py \
      --flow-config figures/figure1_strobe_graphviz.yaml \
      --manuscript manuscript/index.qmd \
      --out qc/figure_legend_counts.json --strict
    

    Any n = N in the caption that is not a box count in the flow config is a MISMATCH (stale caption) — update the caption from the config, never the reverse. This pairs with numerical-safety's "re-derive prose counts every revision" rule and with /sync-submission's cross-document N checks. (The reconciler is stdlib-only and parses the config as text, so it works regardless of the flow tool.)

    Calibration Plot

    • 45-degree reference line (perfect calibration).
    • Grouped observed vs predicted with error bars.
    • Report Hosmer-Lemeshow statistic and Brier score in annotation.
    • Optional: histogram of predicted probabilities at the bottom.

    Kaplan-Meier Curve

    • Step function with distinct colors per group.
    • Censoring marks as small vertical ticks.
    • Number-at-risk table below the plot (aligned with x-axis ticks).
    • Log-rank p-value in annotation.
    • Median survival with 95% CI if applicable.

    Bland-Altman Plot

    • X-axis: mean of two measurements.
    • Y-axis: difference between measurements.
    • Horizontal lines: mean difference (solid), +/-1.96 SD (dashed).
    • Annotate the mean diff and limits of agreement values.
    • Optional: proportional bias check (regression line through points).

    Confusion Matrix

    • Heatmap with both counts and percentages in each cell.
    • Row-normalized percentages preferred (sensitivity per class).
    • Clear axis labels: "Predicted" (x) and "Actual" (y).
    • Use sequential colormap (Blues or Greens), not diverging.

    Box/Violin Plot

    • Show individual data points (jittered) overlaid on box or violin.
    • Mark median and mean distinctly.
    • Statistical annotation brackets with significance stars.
    • Stars: * p<0.05, ** p<0.01, *** p<0.001, ns for non-significant.

    Pipeline Diagram

    • Horizontal or vertical flow of processing stages.
    • Boxes: rounded rectangles with stage name and brief description.
    • Arrows: labeled with data counts or transformation type.
    • Color-code stages by category (data collection, processing, validation).
    • Keep text minimal; use supplementary caption for details.

    Bar Chart

    • Error bars: 95% CI (preferred) or SD, stated in caption.
    • Individual data points overlaid if n < 30.
    • Horizontal orientation for many categories.
    • Sort by value (descending) unless order is meaningful.

    Heatmap

    • Annotate cells with values.
    • Use sequential colormap for correlation (coolwarm diverging if centered at zero).
    • Mask diagonal for correlation matrices.
    • Cluster rows/columns if appropriate.

    Style Rules

    Colors

    Wong colorblind-safe palette (default):

    WONG = ['#000000', '#E69F00', '#56B4E9', '#009E73',
            '#F0E442', '#0072B2', '#D55E00', '#CC79A7']
    

    Sequential palettes (for heatmaps):

    • Positive values: Blues or Greens
    • Diverging (centered at 0): coolwarm or RdBu_r
    • Agreement matrices: YlOrRd

    Rules:

    • Never use red-green only distinctions.
    • Use line style (solid, dashed, dotted) in addition to color for line plots.
    • Use marker shape in addition to color for scatter plots.

    Typography

    ElementFont SizeWeight
    Figure title (if any)10 ptBold
    Axis label9 ptRegular
    Tick label8 ptRegular
    Legend text8 ptRegular
    Annotation8 ptRegular
    Panel label (A, B, C)12 ptBold
    • Font family: Arial or Helvetica (sans-serif).
    • Panel labels: uppercase bold letter, top-left of each panel.

    Layout

    • Minimize white space while maintaining readability.
    • Align multi-panel figures on a grid.
    • Consistent axis ranges across comparable panels.
    • No figure titles in the plot itself (title goes in the caption below).

    Statistical Annotations

    • Significance stars: * p<0.05, ** p<0.01, *** p<0.001
    • Place above comparison brackets.
    • Report exact p-value in the figure legend or caption, not in the plot.
    • For AUC, correlation, or agreement: display in the legend with 95% CI.

    Journal Specifications

    Default dimensions (override from figure_specs.md if journal-specific):

    • Single column: 3.5 in (88 mm) width
    • 1.5 column: 5.0 in (127 mm) width
    • Double column: 7.0 in (178 mm) width
    • Full page: 7.0 x 9.5 in (178 x 241 mm)
    • DPI: 300 minimum for halftone, 600 for line art
    • File formats: PDF (vector, preferred) + PNG (300 DPI)
    • No chartjunk: no 3D effects, no unnecessary gridlines, no decorative elements, no gradient fills

    Multi-Panel Figures

    For composite figures with multiple panels:

    fig, axes = plt.subplots(nrows, ncols, figsize=(width, height))
    
    # Label each panel
    for ax, label in zip(axes.flat, 'ABCDEFGH'):
        ax.text(-0.15, 1.05, label, transform=ax.transAxes,
                fontsize=12, fontweight='bold', va='top')
    

    Common layouts:

    • 2-panel horizontal: figsize=(7.0, 3.5), 1 row x 2 cols
    • 2-panel vertical: figsize=(3.5, 7.0), 2 rows x 1 col
    • 2x2 grid: figsize=(7.0, 7.0), 2 rows x 2 cols
    • 3-panel: figsize=(7.0, 3.0), 1 row x 3 cols

    Use plt.tight_layout() or fig.subplots_adjust() for spacing.


    Caption Writing

    After generating each figure, draft a caption following these rules:

    1. First sentence: Describe what the figure shows (type + key finding).
    2. Subsequent sentences: Define abbreviations, explain symbols, state sample sizes.
    3. Statistical details: Note the test used and significance threshold.
    4. Format: "Figure {N}. {Caption text}" -- no bold, no title case.

    Example:

    Figure 1. Receiver operating characteristic curves comparing the diagnostic performance of the multi-agent pipeline (blue) and single-agent baseline (orange) for identifying incorrect Anki flashcard content. The area under the curve was 0.92 (95% CI: 0.89-0.95) for the multi-agent pipeline and 0.84 (95% CI: 0.80-0.88) for the single-agent baseline (DeLong test, p = 0.003). The dashed diagonal line represents chance performance.


    Skill Interactions

    WhenCallPurpose
    Need statistical values for plot/analyze-statsGet computed values (AUC, CI, p-values)
    Flow diagram for manuscript/write-paper Phase 2Coordinate with Tables & Figures plan
    Caption review/write-paper Phase 7Final polish pass

    Error Handling

    • If data is insufficient for the requested figure type, explain what is needed and ask the user.
    • If a figure exceeds journal dimension limits, resize and report the adjustment.
    • If text overlaps in the figure, try tight_layout(), reduce font size, or adjust spacing.
    • Never fabricate data points. If sample data is needed for a template demo, explicitly label it as "example data."

    CLI Tools Available

    ImageMagick, Ghostscript, FFmpeg are installed and can be used for post-processing:

    # Figure DPI/format conversion for journal submission
    magick input.png -density 300 -units PixelsPerInch output.tiff
    magick input.png -resize 1200x -quality 95 output.jpg
    
    # CMYK conversion (some print journals require this)
    magick input.png -colorspace CMYK output.tiff
    

    Portal-ready TIFF (SNAPP .png-not-accepted / 25 MB cap)

    A raw magick ... output.tiff keeps the alpha channel (transparent regions print black on many production pipelines) and stays uncompressed (a 600-dpi RGBA TIFF blows past a portal's 25 MB cap). export_portal_tiff.py does the flatten-and-compress a human otherwise does by hand and verifies the result is pixel-identical to that white-flatten before handing it over — use it when a portal accepts only .tiff/.jpeg/.eps (Springer Nature SNAPP) or caps figure size (JACC: Asia):

    python3 scripts/export_portal_tiff.py --in figure.png --out figure.tiff --max-mb 25
    # LZW-compressed, RGBA→RGB white-flattened, pixel-identity-verified; exit 1 if still over the cap
    
    # Multi-panel figure assembly (A/B/C/D panels)
    magick montage panelA.png panelB.png panelC.png panelD.png \
      -tile 2x2 -geometry +10+10 -density 300 combined.png
    
    # Animated figure (GIF from frame sequence)
    ffmpeg -framerate 2 -i frame_%03d.png -vf "scale=800:-1" output.gif
    
    # Video from figure sequence (for supplementary materials)
    ffmpeg -framerate 1 -i slide_%03d.png -c:v libx264 -pix_fmt yuv420p supplementary_video.mp4
    

    AI Image Generation (Optional)

    AI illustration is a supplementary option, not a requirement. Visual abstracts and figures can be completed without any API key using study figures and free illustration libraries.

    If GEMINI_API_KEY is set, the generate_image.py script can generate illustrations:

    python ${CLAUDE_SKILL_DIR}/scripts/generate_image.py \
      "Clean medical illustration of a CT-guided lung biopsy procedure, \
       flat vector style, white background, no text" \
      --output output.png --aspect 16:9
    

    Use for: procedural schematics, anatomical illustrations, pipeline diagrams. Always review AI output against the AI-Generated Figure Warning section above.

    If GEMINI_API_KEY is not set, guide the user to free illustration resources: see ${CLAUDE_SKILL_DIR}/references/medical_illustration_sources.md.

    Language

    • Code and figure text: English
    • Communication with user: Match user's preferred language
    • Medical terms: English only

    Anti-Hallucination

    • Never fabricate references. All citations must be verified via /search-lit with confirmed DOI or PMID. Mark unverified references as [UNVERIFIED - NEEDS MANUAL CHECK].
    • Never invent clinical definitions, diagnostic criteria, or guideline recommendations. If uncertain, flag with [VERIFY] and ask the user.
    • Never fabricate numerical results — compliance percentages, scores, effect sizes, or sample sizes must come from actual data or analysis output.
    • If a reporting guideline item, journal policy, or clinical standard is uncertain, state the uncertainty rather than guessing.

    Global-rule references

    Some passages in this skill cite a path of the form ~/.claude/rules/<name>.md. Those are the maintainer's personal global rules, kept outside this repository. They are not shipped with this skill and will not exist on your machine; they appear only as provenance for where a convention came from. If one of them looks like it is standing in for an instruction you actually need, that is a bug — please open an issue, because the instruction belongs here.

    Alternatives

    Compare before choosing

    Computed 9424

    Borda/AI-Rig

    review

    Multi-agent code review of local Python files, directories, or the current git diff covering architecture, tests, performance, docs, lint, security, and API design. Scope: Python source files in local working tree. Python-file-free targets (pure JS/TS/Go/Rust projects) are out of scope. TRIGGER when: user asks to review local Python files, a directory, or the current git diff/working-tree changes, with no GitHub PR number involved; phrases: "review this", "review my changes", "code review this d

    Computed 8924

    Borda/AI-Rig

    review

    Multi-agent code review of GitHub Pull Requests (Python source, documentation (Markdown/RST), and CI/CD config PRs) covering architecture, tests, performance, docs, lint, security, and API design. TRIGGER when: user provides a GitHub PR number (e.g. 42, #42) and asks to review/audit/check it, or provides a saved review-report path with --reply to draft a contributor-facing comment; phrases: 'review PR 123', 'audit this pull request', 'look at PR #42', 'draft a reply for this review report'. SKIP

    Computed 8832,785

    K-Dense-AI/scientific-agent-skills

    pydeseq2

    Differential gene expression analysis for bulk RNA-seq with PyDESeq2, including formulaic designs, Wald tests, FDR correction, LFC shrinkage, and result visualization.

    Computed 88295

    jaechang-hits/SciAgent-Skills

    pymoo

    Python framework for single- and multi-objective optimization with evolutionary algorithms. Define vectorized objectives and constraints; solve with NSGA-II, NSGA-III, MOEA/D, GAs, or differential evolution. Analyze Pareto fronts, visualize trade-offs, customize operators and callbacks. For engineering design, hyperparameter search, and conflicting objectives. Alternatives: scipy.optimize (single-objective, gradient), platypus, jMetalPy (Java).