Agentic eyes for Godot work: cross-platform screenshot CLI (asset/region/window/screen) to budgeted WebP, TEMP editor viewport bridge under .gdskills/, and Taste Receptor Atlas v2 (~237 micro-receptors × 0–2: hierarchy, contrast, typography×41, affordance, space, color, icon, composition, light/FX, motion-tells, anti-slop, originality, identity). Use when agents must see UI, assets, or the editor — not for in-game screenshot Autoloads. Keywords: agent vision, screenshot, WebP, visual QA, taste receptors, typography, UI review, asset sheet, editor viewport, anti-slop.
npx skills add https://github.com/thedivergentai/Game-Design-Agentic-Skills --skill godot-agent-vision
Host-side eyes for coding agents building Godot projects: capture → budgeted WebP → scored visual review. Not a game Autoload, not an exportable screenshot API.
> Do NOT Load every reference for one task. Load the MANDATORY file for the active mode, then only the rubric axes you are scoring.
addons/_gdskills_agent_vision/ committed — stage, capture, teardown.--keep-bridge on after debugging — skips teardown and dirties the consumer project.--detail only when pixels fail (especially type).SLOP-STACK / TYPE-DISPLAY-HUD-SPLIT).TYPE-DISPLAY-HUD-SPLIT ship blocker; data type is boring on purpose.grim, X11, or editor bridge..gdskills/vision/** — ensure .gdskills/ is gitignored first.| Need | Mode | MANDATORY loads |
|------|------|-----------------|
| Asset files / sheets | asset | capture-modes.md, webp-budgets.md, rubric V6–V8 + originality-sight.md |
| Desktop rectangle | region | capture-modes + budgets + rubric axes in frame |
| Godot/editor/game window | window --title | capture-modes (OS limits!) |
| Full monitor | screen | last resort (secret chrome) |
| Editor 2D/3D pixels | editor | editor-bridge-lifecycle.md |
After capture: Read WebP(s) → score Taste Receptor Atlas (not vibes) → zero-list + ordered fixes keyed to receptor IDs. If any TYPE-* / micro-seam ≤1 for illegibility at 512 short-edge, re-capture --detail or text crop before locking.
pip install -r skills/godot-agent-vision/requirements-vision.txt
# optional macOS window titles:
# pip install pyobjc-framework-Quartz
Requires a display session. Use repo/project venv Python.
> Do NOT Load every script. Call only what the mode needs.
Main CLI: doctor, list-windows, screen, region, window, asset, editor. Prints wrote=, bytes=, budget=short-edge:N|long-edge:N.
Default fit short-edge 512; --detail / --max-edge switches to long-edge cap (1568). Never upscales. Soft re-encode if >1MB.
Single asset or ≤2×2 contact sheet with labels; res:// resolution against --project-root.
Appends .gdskills/ so vision scratch never stages.
Stages TEMP addon, optional --godot launch, handshake wait, WebP encode, teardown + project.godot plugin strip.
@tool EditorPlugin polls request → raw/*.png → doneget_global_rect → Image.get_region)python skills/godot-agent-vision/scripts/capture.py doctor
python skills/godot-agent-vision/scripts/capture.py window --project-root . --title Godot
python skills/godot-agent-vision/scripts/capture.py asset --project-root . --paths res://ui/icons --sheet
python skills/godot-agent-vision/scripts/capture.py editor --project-root . --editor-mode 3d --godot "%GODOT_PATH%"
# typography / OCR / dense layout only:
python skills/godot-agent-vision/scripts/capture.py window --project-root . --title Godot --detail
Default out: {project}/.gdskills/vision/YYYYMMDD-HHMMSS-<mode>[-label].webp
MANDATORY platform landmines: capture-modes.md. MANDATORY budgets: webp-budgets.md.
Stages templates → addons/_gdskills_agent_vision/ → .gdskills/vision/{request,raw,done} → WebP → delete addon + restore enabled=.
MANDATORY: editor-bridge-lifecycle.md. Prefer EditorPlugin over EditorScript (await across RefCounted is unsafe).
MANDATORY primary: taste-receptors.md — 237 micro-receptors across 13 families (HIER, CTRST, TYPE×41, AFF, SPACE, COLOR, ICON, COMP, LIGHT, MOT, SLOP, ORIG, ID), each 0/1/2, grade by % of applicable, hard gates. Routing + V-rollup: vision-review-rubric.md.
| When scoring… | Load |
|---------------|------|
| Any review | MANDATORY taste-receptors.md |
| TYPE-* / HUD numerals / menus | MANDATORY typography-sight.md |
| HIER-* / CTRST-* | hier-contrast-receptors.md |
| SPACE-* / AFF-* | space-affordance-receptors.md |
| COLOR-* / ICON-* | color-icon-receptors.md |
| COMP-* / LIGHT-* / MOT-* | composition-fx-receptors.md |
| SLOP-* / UI cross-check | anti-slop-sight.md, ui-taste-sight.md |
| ORIG-* | originality-sight.md |
| ID-* | identity-sight.md |
mss before DPI-clobbering imports; monitors[0] virtual union can be negative-origin; longest title match for Godot’s path-in-title windows.screencapture CLI attribution breaks under agents — prefer in-process Quartz/mss.grim on wlroots; no silent title grab; portal paths are interactive.res:// resolves against --project-root; missing paths must error loudly — never invent files.await RenderingServer.frame_post_draw safely; EditorScript is RefCounted and can free mid-await.EditorInterface.get_editor_viewport_2d/3d → get_texture().get_image() after ≥1–2 frame waits; set main screen 2D/3D first or texture is stale/empty.get_image() ⇒ missing await or wrong main screen — not proof the GPU is fine.raw/, then done flag; Python waits for size-stable PNG.res://addons/_gdskills_agent_vision/plugin.cfg from [editor_plugins] enabled= and delete the addon — underscore name signals private/temp.get_global_rect → Image.get_region, clamped to bounds.HIER-WEIGHT-MATH); peripheral HUD must read as shape (HIER-PERIPH-READ); contrast is worst-case on plates (CTRST-GRAD-WORST, CTRST-BODY-45).SLOP-STACK=0 / overall F.TYPE-DISPLAY-HUD-SPLIT, TYPE-OPSZ-MATCH, TYPE-NUM-TABULAR/TIMER-STABLE, TYPE-GLYPH-INTEGRITY, TYPE-FACE-CAP — display cuts at HUD size and tabular wobble are zeroes, not “style.”COLOR-ONLY / ICON-SIL).COMP-POWER-CONFLICT); bloom/particles must not replace hierarchy or occlude UI; freeze-frames leak shake/tween artifacts (MOT-*) — sequence capture when peak ambiguous.asset (± sheet) → Read → score COLOR/ICON/ORIG/ID/SLOP (+ TYPE if labels) → fixes.window (else region) → Read → score all applicable atlas families → fixes.editor → teardown → score → fixes.screen (last resort).--detail or text crop → re-score those receptors.> Progressive disclosure: open Official Documentation only for a specific API; load Related Skills when routing to a peer domain — do not preload the whole lattice.
get_editor_viewport_2d/3d, main screen switch before grab.Image captures.save_png, get_region for Control crops.frame_post_draw wait before texture readback..gitignore hygiene before vision scratch.GODOT_PATH patterns when launching editor for bridge captures.Take thedivergentai/godot-agent-vision 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.
The instructions reference pip.
Without those the skill loads but fails at the first command.