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.
Inputs
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.
Workflow
- Build an outline matching
figure_outline_schema(). Put real paths in
data_path; use null for schematics.
- Make panel
a the conceptual hook and panel b the primary evidence. Use a
12-column grid and one row per sub-claim.
- Build one instruction per panel with
panel_task(...).
- If
delegate_tasks is advertised, submit the independent panel tasks as one
batch. 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 returned paths with
compose_figure(...). Do not pass placeholder
markers to the composer.
- Use
compose_crops(...) with Pillow to save temporary crop files, then call
view_image on the composite and every crop. Fix seams, clipped labels,
aliases, empty space, and misplaced panel letters before review.
- Build one reviewer instruction with
composite_review_task(...). Delegate it
with image_inspection, project_read, and reasoning when those capability
ids are advertised; otherwise perform the review in the current Agent.
- Apply outline revisions and regenerate only affected panels. Stop after three
rounds or when there are no blockers and at most two major findings.
Outline example
{
"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."
}
]
}
Boundaries
- Use
delegate_tasks only as an explicit Wisp tool; never call delegation from
python.
- Use
view_image only on a concrete local image file.
- Keep data preparation in normal project files. Use
run_in_context only when
a deterministic render or preprocessing job is long enough to require a
persisted Run; Agent delegation itself is not a Run.
- Save the accepted composite to a stable project path and report that path.
1---2name: figure-composer3description: 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.4license: Apache-2.05---6
7# Figure composer
8
9Load `figure-style` with this skill. The sidecar provides pure geometry,
10composition, task-building, and review-schema helpers. It does not call models,
11delegate Agents, resolve artifacts, or inspect images from Python.
12
13## Inputs
14
15Require a one-sentence claim, target width in millimetres, and concrete
16project-relative or absolute data paths. Never use artifact ids as paths. For an
17existing figure, inspect the real image with `view_image` and write the outline
18yourself; pixels cannot reveal the source data path.
19
20## Workflow
21
221. Build an outline matching `figure_outline_schema()`. Put real paths in
23 `data_path`; use `null` for schematics.
242. Make panel `a` the conceptual hook and panel `b` the primary evidence. Use a
25 12-column grid and one row per sub-claim.
263. Build one instruction per panel with `panel_task(...)`.
274. If `delegate_tasks` is advertised, submit the independent panel tasks as one
28 batch. Grant each task the minimum advertised capabilities needed, normally
29 `visualization` plus `project_read`. Require a concrete PNG filename in each
30 output schema. If delegation is unavailable, render the panels sequentially
31 with `python`.
325. Compose returned paths with `compose_figure(...)`. Do not pass placeholder
33 markers to the composer.
346. Use `compose_crops(...)` with Pillow to save temporary crop files, then call
35 `view_image` on the composite and every crop. Fix seams, clipped labels,
36 aliases, empty space, and misplaced panel letters before review.
377. Build one reviewer instruction with `composite_review_task(...)`. Delegate it
38 with `image_inspection`, `project_read`, and `reasoning` when those capability
39 ids are advertised; otherwise perform the review in the current Agent.
408. Apply outline revisions and regenerate only affected panels. Stop after three
41 rounds or when there are no blockers and at most two major findings.
42
43## Outline example
44
45```json
46{
47 "claim": "Treatment restores the disease-associated trajectory.",
48 "width_mm": 180,
49 "ncol": 12,
50 "row_heights_mm": [42, 60],
51 "panels": [
52 {
53 "letter": "a",
54 "role": "schematic",
55 "row": 0,
56 "col": 0,
57 "colspan": 12,
58 "chart_family": "study schematic",
59 "message": "The experiment tests trajectory rescue.",
60 "data_path": null,
61 "ask": "Show cohorts, treatment, sampling, and comparison."
62 },
63 {
64 "letter": "b",
65 "role": "primary",
66 "row": 1,
67 "col": 0,
68 "colspan": 12,
69 "chart_family": "trajectory plot",
70 "message": "Treatment moves cells toward the healthy trajectory.",
71 "data_path": "results/trajectory.csv",
72 "ask": "Plot disease, treated, and healthy cells with confidence bands."
73 }
74 ]
75}
76```
77
78## Boundaries
79
80- Use `delegate_tasks` only as an explicit Wisp tool; never call delegation from
81 `python`.
82- Use `view_image` only on a concrete local image file.
83- Keep data preparation in normal project files. Use `run_in_context` only when
84 a deterministic render or preprocessing job is long enough to require a
85 persisted Run; Agent delegation itself is not a Run.
86- Save the accepted composite to a stable project path and report that path.