y5-snowies/nourish/shader-skill

Claude Code and agent skill by y5-snowies/nourish

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Install

npx vskill@latest install y5-snowies/nourish/shader-skill

SKILL.md

y5 background shader — skill

Audience: an agent writing a shader bundle for the y5 compositor from a natural-language request. This document is the specification. It is exhaustive: everything you need to emit a correct bundle is here. The example bundles listed at the end are for calibration — read one when you want to see a shape in practice, not to discover what exists.

This folder is self-contained. Everything it refers to is inside it, and every path below is relative to this file:

SKILL.md this document
y5-shader-x86 a prebuilt client for the compositor's gRPC service
shader.proto the service schema, for any other gRPC client
examples/ every bundle referenced below

Resolve the paths against wherever you loaded the skill from. Nothing here reaches outside the folder, so it can be copied anywhere and still work.

Every fact here is checked against the implementation. Where something is parsed but does not work, it says so — those are the traps that cost the most time.


0. Before you write anything

Read first, then build

You are being asked for an effect, and this document is long. Read the sections the request actually needs before emitting a single line — a bundle that has to be corrected three times is slower and more visible to the person waiting than two minutes of reading.

Always read §1 (which form) and §3 (the push block). Then, by what the request involves:

The request mentionsReadOpen
just a background, wallpaper, pattern§1.1, §10examples/aurora
the desktop, "everything", a whole-screen look§5, §5.1examples/mp-grayscale
windows — glow, outline, per-window treatment§5, §6.1examples/tb-window-frost
seeing behind a window: transparency, refraction§7examples/tb-window-chroma
focus, dragging, resizing, "the active window"§6.2, §6.3examples/tb-window-descriptors
the cursor§6.4examples/tb-storage-embers
several stages, blur, bloom, pyramids§2, §11examples/tb-chain-bleed
trails, decay, "leaves a mark", feedback§9.1examples/tb-persist-trail
particles, counters, anything accumulating§9.2examples/tb-storage-embers
barrel/lens/CRT distortion, anything that bends the picture§8examples/mp-crt

Open at least one example of the shape you are about to write. The guide gives you the schema; the example gives you the idiom — how a band loop is actually written, where the sRGB encode goes, what a sensible @prop range looks like. They are short and heavily commented.

Before writing WGSL you should be able to answer, without looking anything up again: single-file or multipass; before- or after-content; which requires; and whether you need to own the band. If any of those is still open, you are not ready — go back to the table.

Then check §12 (the refusals) and §13 (the checklist) before you emit. Most first drafts fail on something in §13.

Reason from the primitives, not from the examples

The examples are idioms, not a catalogue. They show a handful of things people happened to build. They do not describe the boundary of what is possible, and an effect being absent from them means nothing at all.

What you can build is decided by one question: for the pixel you are shading, what do you know? Under windows: world with geometry and textures, at every pixel you hold

  • the position of that pixel, and the whole screen it sits in;
  • every window's rectangle, crop, opacity, kind and descriptor flags — not just the one under

the pixel;

  • every window's texture, samplable at any coordinate you like;
  • when each window opened, was focused, was resized, was moved (§6.3);
  • where the cursor is and what it is holding (§6.4);
  • whatever you computed last frame, if you asked for it (§9);
  • and you decide, per pixel, what the final colour is.

Anything that is a function of those inputs is expressible. That is a very large space, and it includes most things that sound physical:

Sounds like it needs…It does not, because
light from one window falling on anotheryou hold both rectangles and both textures while shading either; brightness added as a function of distance to the emitter is the effect
shadows between windowsdraw order is the occluder order; darken by distance to a rect above
reflections of one window in anothersample the other window's texture at a reflected coordinate
windows reacting to each otherevery window's data is available while shading every pixel
depth, layering, "in front of"the band is an ORDERED list — index is your depth
glow, bleed, spill, refractionresample the composited scene, or the individual windows, however you like

The compositor is a 2D screen-space renderer. Screen-space is the medium, not a compromise — there is no more "real" version of these effects available and none is being approximated away. Do not describe such work as faking, impersonating or approximating; it is the implementation.

Build the whole effect; cost is not your decision

Several sections below talk about what things cost the engine. None of that is a reason to build a smaller effect than the one you were asked for.

The cost material exists for two reasons, neither of which is "prefer something simpler":

  • Declaring accurately is a correctness rule. The loader refuses a pass that reads something it

did not declare. Declaring what you read is not thrift, it is the thing working at all.

  • The techniques in §11 make an ambitious effect affordable — downscale before you blur, run

the widest stage at half rate. They exist so you can build the big version, not so you settle for the small one.

So: build what was asked. Reach for a three-level pyramid, per-window textures, storage buffers, whatever the effect actually needs. If the result is genuinely heavy — a full-resolution multi-pass chain over every window, say — build it anyway and mention in one sentence that it is doing real work and can be scaled back if their machine struggles. That is their call, made while looking at it, not yours made in advance.

Silently substituting a cheaper, weaker effect is the worst outcome available: they get something that does not match what they asked for, and no reason why.

The actual limits

Short, and worth knowing precisely so you never invent a limit that is not here:

  • No z-buffer and no 3D geometry. Windows are flat rectangles in an ordered list. You can use

the order as depth; you cannot get true per-pixel depth or perspective from it.

  • Only what is on screen, in this world. Windows that are off-screen, minimised, on another

world, or that a client has not drawn contribute nothing — they are not in the set.

  • Fixed capacity. 256 entries in the geometry arrays; over that the tail is dropped.
  • Hardware. window_textures needs descriptor indexing; storage needs

fragmentStoresAndAtomics. Both are refused honestly at load, not silently.

  • No client interaction. You are drawing; you cannot move a window, change its size or send it

input. Read the geometry, do not expect to set it.

If a request runs into one of these, say which one and offer the nearest thing that works. If it does not run into one of these, it is buildable — work out the function, do not decline.

Talk about the effect, not the machinery

The person asking wants their desktop to look different. They did not ask about push constants, descriptor indexing, requires, band ordering, or why storage buffers need a device feature. None of that belongs in your reply unless they ask.

  • Say in a sentence or two what you are about to make. Make it. Say whether it worked.
  • Offer the knobs by their labels ("Cursor pull", "Trail persistence"), never by prop name or

slot number, and only the two or three that matter.

  • Mention a technical fact only when it changes what they see or what they must do: an effect

their GPU cannot run, something that only shows while windows are open, a setting that resets when they change resolution.

  • Translate failures. `declares storage, which this GPU cannot write from a fragment shader

(no fragmentStoresAndAtomics)` is a message for you. To them it is "your graphics card can't do this one — I've used a different approach that looks close." Fix it yourself if you can; only surface it if they have a decision to make.

  • Do not paste the manifest, the WGSL, binding tables, or your reasoning about bands and

requirements. If they want to see it, they will ask, and the files are on disk either way.

  • Never call your own work fake. "Impersonating", "faking", "only an approximation" — a

screen-space compositor has no other kind of effect, so that description is both discouraging and untrue. Describe what it does instead: "the fire brightens whatever is near it, so windows next to it pick up the glow."

  • Do not say something is impossible unless it is on the limits list above. If you are unsure,

work out what the shader would have to read at each pixel and check it against that list. Most physically-worded requests are ordinary functions of data you already hold.

The exception is when they are clearly authoring rather than decorating — they name a requires entry, ask why something is slow, or ask how it works. Then match them and use the real terms.

Always tell them how to adjust it themselves

Every @prop you declare becomes a live slider on their desktop. When you finish a shader, hand over the controls — otherwise they have to come back to you to nudge a number, which is a poor trade for both of you.

Say it once, at the end, in plain words. Something like:

You can tune this yourself without me — double-click (or right-click) any empty spot on
the desktop and pick the shader icon, and the sliders appear right there while the effect is
running. They're also in Super+Tab → Settings → Current World if you'd rather have the full
panel.
Try Cursor pull first — that's the one that changes the feel most.
And any time you want a different look entirely, Super+Tab gets you to the shader list —
everything built in is there alongside this one, and switching back and forth costs nothing.

Four things make that useful rather than noise:

  • Name the one or two sliders worth touching first, by their label, and say what each changes

in the picture. A list of nine controls is the same as no guidance.

  • The inline editor is the one to lead with. It floats over the live desktop, so a drag shows

its result immediately; the settings panel shows a small preview pane instead. Mention the settings route second, for people who prefer a real window.

  • Mention Super+Tab as the way out. A user who does not like the effect, or who wants to

compare it against something, should not have to ask you to change it back. Say it once, with the sliders.

  • Say it once, when you hand the work over — not before you start, and not every time you

touch the shader afterwards.

If the effect has no adjustable variables, say so plainly ("this one has no settings — tell me what to change and I'll edit it") rather than sending them to an empty panel.

Both routes edit the same values, they save per world, and they take effect as you drag — no restart, nothing to apply.


1. Decide the form first

There are two kinds of bundle. Choosing wrong is the most common failure.

AskForm
"an animated wallpaper", "a plasma / aurora / gradient background"Single-file. One WGSL file, no manifest.
Anything that reads the desktop, the windows, the cursor, or needs more than one passMultipass. A pipeline.json graph.

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
230
Repository forks
7
7-day trend score
27

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/y5-snowies/nourish/shader-skill/badge)](https://verified-skill.com/skills/y5-snowies/nourish/shader-skill)

Something wrong with this skill or its page? Tell us.