$npx -y skills add Yuan1z0825/nature-skills --skill nature-figureCreate, revise, audit, and export submission-grade scientific figures for Nature-family and other high-impact venues in Python (matplotlib/seaborn) or R (ggplot2/patchwork/ComplexHeatmap), including multi-panel plots, figures4papers-style work, and journal-ready SVG/PDF/TIFF outp
| 1 | # Nature Figure Making — Router |
| 2 | |
| 3 | This skill is split into two layers: |
| 4 | |
| 5 | - A **static layer** under `static/` that holds versioned, reusable content fragments (the figure contract and default stance, plus a per-backend quick-start for Python and R). |
| 6 | - A **dynamic layer** (this file plus `manifest.yaml`) that detects the plotting backend and loads only the fragment needed for the current job. The large design, API, pattern, and QA material lives in on-demand references. |
| 7 | |
| 8 | Do not try to apply the figure logic from memory or from this router. Always load fragments from disk as described below. |
| 9 | |
| 10 | ## Routing protocol |
| 11 | |
| 12 | Follow these steps every time the skill is invoked. |
| 13 | |
| 14 | ### 0. Check for the OpenRouter AI-schematic route |
| 15 | |
| 16 | If the user explicitly asks to generate a manuscript schematic, graphical abstract, mechanism diagram, concept illustration, or paper schematic with OpenRouter, GPT Image 2, an image-generation API, or similar wording, do **not** ask "Python or R?". This is a non-plotting AI-schematic route. |
| 17 | |
| 18 | For this route: |
| 19 | |
| 20 | 1. Read [manifest.yaml](manifest.yaml) and the `always_load` files. |
| 21 | 2. Read [references/openrouter-image-generation.md](references/openrouter-image-generation.md). |
| 22 | 3. Use [scripts/generate_openrouter_schematic.py](scripts/generate_openrouter_schematic.py) when the user wants a real API call or a reproducible payload. |
| 23 | 4. Treat output as a draft schematic / graphical abstract, not as a quantitative data panel. Do not invent experimental values, author logos, institutional marks, or unsupported mechanisms. |
| 24 | |
| 25 | Only continue to the Python/R backend gate for plotting, charting, data visualization, or manuscript figure assembly tasks that are not explicit OpenRouter AI image-generation requests. |
| 26 | |
| 27 | ### 1. Load the manifest and the core layer |
| 28 | |
| 29 | Read [manifest.yaml](manifest.yaml). It declares the `backend` axis, the allowed values, and the file paths each value maps to. |
| 30 | |
| 31 | Also read every file listed under `always_load` (`static/core/contract.md` and `static/core/stance.md`). These hold the figure contract, the backend gate, the missing-runtime rule, the privacy rule, and the default operating stance that apply to every figure job. |
| 32 | |
| 33 | ### 2. Resolve the backend — a blocking gate |
| 34 | |
| 35 | Backend selection blocks plotting tasks, but it should not annoy the same user forever. Decide the `backend` value in this order: |
| 36 | |
| 37 | 1. If the current request explicitly chooses Python or R, use that backend and save it with `scripts/nature_figure_backend.py set python` or `scripts/nature_figure_backend.py set r`. |
| 38 | 2. If the request provides a clearly language-specific input file/workflow, use that backend and save it. |
| 39 | 3. Otherwise run `scripts/nature_figure_backend.py get`. If it returns `python` or `r`, use the saved preference. |
| 40 | 4. If no saved preference exists, ask exactly one concise question — **Python or R? I will remember this as your default.** — and stop. After the user answers, save the answer before proceeding. |
| 41 | |
| 42 | - `python` — matplotlib / seaborn. |
| 43 | - `r` — ggplot2 / patchwork / ComplexHeatmap. |
| 44 | |
| 45 | Do not guess or choose a backend by aesthetics alone. Only recommend a backend when the user explicitly asks you to choose; then use `references/backend-selection.md`, state the reason, save the selected backend, and proceed. Once selected, the backend is **exclusive** for all drawing, previewing, exporting, and visual QA (see `core/contract.md`). This gate does not apply to the explicit OpenRouter AI-schematic route above. |
| 46 | |
| 47 | ### 3. Load the matching backend fragment |
| 48 | |
| 49 | After the backend is resolved, Read the mapped fragment (`static/fragments/backend/python.md` or `static/fragments/backend/r.md`). It carries the backend-only execution rule and the publication quick-start (rcParams/theme and export helper). Do **not** load the other backend's fragment. |
| 50 | |
| 51 | ### 4. Build the figure using the loaded material |
| 52 | |
| 53 | Apply the loaded material in this order: |
| 54 | |
| 55 | 1. Figure contract (`core/contract.md`) — write the core conclusion, map the e |