$npx -y skills add wanshuiyin/ARIS-Movie-Director --skill method-figureGenerate a publication-grade method / architecture / pipeline / workflow figure (a paper or README 'Figure 1') as an AUDITABLE object, not a one-shot prompt. A deterministic JSON blueprint LOCKS the content; an image model (gpt-image-2, baked by the agent via mcp__codex__codex —
| 1 | # method-figure |
| 2 | |
| 3 | Turn "draw our method figure" from a one-shot gamble into the **same audited spiral the framework uses for |
| 4 | comics**: a blueprint is the source of truth, the image model bakes the look, a cross-model panel + a |
| 5 | deterministic diff keep it honest, and the loop converges to a publication-grade figure that is |
| 6 | **reproducible** (re-run the blueprint) and **auditable** (a trace of every round). |
| 7 | |
| 8 | Two things are simultaneously true: (a) gpt-image-2 CAN render a clean Figure-1 with legible labels when |
| 9 | *conditioned on a labeled blueprint* — do not assume it garbles text; (b) on a free prompt it DRIFTS |
| 10 | (renames phases, invents nodes, garbles a token, leaves pasted-looking floating labels). The blueprint + |
| 11 | blind-transcribe-then-hard-diff loop turns (a) into a reliable result and catches (b) every round. |
| 12 | |
| 13 | ```text |
| 14 | system description ─▶ ① BLUEPRINT (JSON content-lock) ── validate_blueprint.py |
| 15 | ▼ |
| 16 | ② CONDITION (white-bg labeled SVG → PNG) + identity sheet (real chibi, optional) ── render_condition.py --png |
| 17 | ▼ |
| 18 | ③ BAKE — agent: mcp__codex__codex(prompt+abs ref paths+out_path, workspace-write, gpt-5.5, config{xhigh}) → gpt-image-2 native PNG ── pickup_image.py --out-existing (sig+size+dims, mtime-bound, HARD-VETO struct/zlib/PIL/SVG, fail-closed) |
| 19 | ▼ |
| 20 | ④ PANEL — Gemini ‖ Codex BLIND-transcribe → content_diff.py (observed ⊖ blueprint) → Claude structural sign-off |
| 21 | ▼ |
| 22 | ⑤ agent reads the diff + the panel blockers → re-bake re-asserting the locked labels |
| 23 | ▼ |
| 24 | converged? ─ no ─▶ ③ (bounded: max_rounds → escalate to human) |
| 25 | │ yes |
| 26 | ▼ |
| 27 | ⑥ APPROVE → figure.png + blueprint.json + trace.jsonl |
| 28 | ``` |
| 29 | |
| 30 | ## Constants |
| 31 | - **GENERATOR** = Codex `gpt-5.5`, `config: {model_reasoning_effort: xhigh, include_image_gen_tool: true}` → the native `image_generation` |
| 32 | tool (gpt-image-2). The `gpt-5.5` pin is a single hardcoded COMPAT DEFAULT in the bake sidecar payload |
| 33 | (`run_spiral.py` mirrors `run_comic.py`'s canonical bake plan; a config-driven model override is PLANNED, not |
| 34 | yet implemented). It pins the BAKE only — the panel's Codex reviewer is un-pinned (see PANEL below). |
| 35 | **CRITICAL**: image_gen is produced ONLY via **`mcp__codex__codex`** (the agent tool), NOT |
| 36 | `codex exec`. `codex exec` / over-specified / forbid-list prompts make Codex hand-draw a code fallback |
| 37 | (struct+zlib PNG or SVG/matplotlib) — visually indistinguishable for trivial shapes, useless for a real |
| 38 | method-figure. The working invocation is **`mcp__codex__codex`** with a **dead-simple** prompt + |
| 39 | `sandbox: "workspace-write"` (it must WRITE the out_path) + `model: "gpt-5.5"` + |
| 40 | `config: {model_reasoning_effort: "xhigh", include_image_gen_tool: true}` (the schema has NO top-level effort |
| 41 | param; `config{xhigh}` shorthand below ALWAYS expands to **both** these keys — without `include_image_gen_tool` |
| 42 | codex won't fire its native image tool, it falls back to descriptive text / an SVG renderer) + `cwd: <project>`. |
| 43 | Reference images are passed by **absolute file path inside the prompt** (the schema has NO `-i`); the output |
| 44 | path is a **deterministic abs path** in the prompt. Pick it up with **`pickup_image.py --out-existing`** |
| 45 | (verifies the EXPLICIT out_path: PNG sig + size + dims, `mtime >= request.created_at`) which **HARD-VETOES** |
| 46 | struct/zlib/PIL/`<svg>`/matplotlib markers in the agent transcript (fail-closed; there is **no** 'native sig |
| 47 | wins' override). **Honesty caveat:** as of Jun 2026 native headless persistence is unreliable, so this |
| 48 | fail-closed verifier — not any `sandbox` setting — is the first guard against a non-native bake. But the |
| 49 | HARD-VETO is a **BEST-EFFORT denylist** against the *known* codex-exec hand-draw fallback (struct/zlib/PIL/ |
| 50 | SVG/mat |