xuzhougeng/figure-composer
Compose or improve a publication-grade multi-panel scientific figure from a claim, concrete data paths, or an existing image. Use for figure outlining, parallel panel rendering, exact-grid composition, visual inspection, and adversarial figure review. Use figure-style for one standalone plot and paper-narrative for whole-paper figure ordering.
npx skills add https://github.com/xuzhougeng/wisp-science --skill figure-composer
Load figure-style with this skill. The sidecar provides pure geometry,
composition, task-building, and review-schema helpers. It does not call models,
delegate Agents, resolve artifacts, or inspect images from Python.
Require a one-sentence claim, target width in millimetres, and concrete
project-relative or absolute data paths. Never use artifact ids as paths. For an
existing figure, inspect the real image with view_image and write the outline
yourself; pixels cannot reveal the source data path.
figure_outline_schema(). Put real paths indata_path; use null for schematics.
a the conceptual hook and panel b the primary evidence. Use a12-column grid and one row per sub-claim.
panel_task(...).delegate_tasks is advertised, submit the independent panel tasks as onebatch. Grant each task the minimum advertised capabilities needed, normally
visualization plus project_read. Require a concrete PNG filename in each
output schema. If delegation is unavailable, render the panels sequentially
with python.
compose_figure(...). Do not pass placeholdermarkers to the composer.
compose_crops(...) with Pillow to save temporary crop files, then callview_image on the composite and every crop. Fix seams, clipped labels,
aliases, empty space, and misplaced panel letters before review.
composite_review_task(...). Delegate itwith image_inspection, project_read, and reasoning when those capability
ids are advertised; otherwise perform the review in the current Agent.
rounds or when there are no blockers and at most two major findings.
{
"claim": "Treatment restores the disease-associated trajectory.",
"width_mm": 180,
"ncol": 12,
"row_heights_mm": [42, 60],
"panels": [
{
"letter": "a",
"role": "schematic",
"row": 0,
"col": 0,
"colspan": 12,
"chart_family": "study schematic",
"message": "The experiment tests trajectory rescue.",
"data_path": null,
"ask": "Show cohorts, treatment, sampling, and comparison."
},
{
"letter": "b",
"role": "primary",
"row": 1,
"col": 0,
"colspan": 12,
"chart_family": "trajectory plot",
"message": "Treatment moves cells toward the healthy trajectory.",
"data_path": "results/trajectory.csv",
"ask": "Plot disease, treated, and healthy cells with confidence bands."
}
]
}
delegate_tasks only as an explicit Wisp tool; never call delegation frompython.
view_image only on a concrete local image file.run_in_context only whena deterministic render or preprocessing job is long enough to require a
persisted Run; Agent delegation itself is not a Run.
Take xuzhougeng/figure-composer from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.