Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add dylanroscover/Embody --skill glsl-shadersgit clone --depth 1 https://github.com/dylanroscover/EmbodyWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/dylanroscover/embody/glsl-shaders)<a href="https://agentmods.dev/skills/dylanroscover/embody/glsl-shaders"><img src="https://agentmods.dev/badge/skills/dylanroscover/embody/glsl-shaders/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/dylanroscover/embody/glsl-shaders"><img src="https://agentmods.dev/badge/skills/dylanroscover/embody/glsl-shaders.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00076 | $0.02489 |
| Opus 5.5 | $0.00030 | $0.00996 |
| Sonnet 5.5 | $0.00015 | $0.00498 |
| Haiku 4.5 | $0.00008 | $0.00249 |
Grade A, and why
glsl-shaders scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 19d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 72 lines — stays where its author put it; the contents beside it link to each section on GitHub.
GLSL Shaders
Three hosts: glslTOP/glslmultiTOP (pixels, or compute over an image), glslMAT (vertex + pixel over geometry), glslPOP (compute over points; the POP side lives in /pop-networks). Every function and parameter below compiled live on TD 2025.33230 (probed 2026-09-25). Anything you add beyond them: check the parameter with describe_op_type and the function with the docked info DAT before trusting it.
The docked-DAT contract
- Creating a
glslTOP/glslmultiTOPdocks<name>_pixel,<name>_compute,<name>_info, withpixeldat/computedatalready pointing at them. AglslMATdocks<name>_vertex,<name>_pixel,<name>_info(vdat/pdat). AglslPOPdocks<name>_computeand<name>_info. - Name the operator at creation (
glsl_<purpose>): dock names and the*datreferences are snapshots taken then and do not follow a later rename. - Write the shader INTO the docked DAT (
set_dat_content/edit_dat_content). Delete the dock you do not use (_computefor a pixel shader) so it does not ship as dead weight. One exception: several GLSL ops running identical code point at ONE shared DAT and differ by uniforms (tdxn-economy.md). create_ophugs the docks under the host; anexecute_pythonbuild must place them itself (/create-operator).- Read compile results from
<name>_info:op.errors()says only "Compile failed".get_op_errorsreturns them asshaderErrors, and every DAT write to a shader rides back_effects.new_shader_errors. Fix those before building further.
What TD gives you (never redeclare, never paste an alternative)
- No
#versionline: TD injects one, and writing your own fails with "'#version' : must occur first in shader".texture(), nevertexture2D()("function not supported in this version; use texture() instead"). - Inputs:
sTD2DInputs[i],sTD3DInputs[i],sTD2DArrayInputs[i],sTDCubeInputs[i], indexed per TYPE, not per connector.TD_NUM_2D_INPUTS(and the 3D/array/cube twins) bound a loop and guard a dynamic index.uTD2DInfos[i].resanduTDOutputInfo.resare(1/w, 1/h, w, h).vUV.stis the 0-1 texture coordinate when there is no custom vertex shader.uTDPassis the multi-pass index,uTDCurrentDepththe 3D slice. - Lookups:
sTDNoiseMap(256x256 random),sTDSineLookup. - Functions:
TDOutputSwizzle(vec4)on EVERY color you write out (channel order is wrong without it),TDDither,TDPerlinNoise(vec2|vec3|vec4)andTDSimplexNoise(vec2|vec3|vec4)(both in -1..1, available in TOP, MAT and glslPOP shaders on this build),TDHSVToRGB,TDRGBToHSV,TDRotateOnAxis(rad, axis),TDRotateX/Y/Z(rad). - Compute in a
glslTOP(mode=compute): declarelayout(local_size_x = 8, local_size_y = 8) in;, write withTDImageStoreOutput(0, ivec3(gl_GlobalInvocationID.xy, 0), TDOutputSwizzle(color)), read the output back withTDImageLoadOutput(0, ivec3(...)). glslTOPhas exactly 3 input connectors.glslmultiTOPtakes more and adds POP buffer reads (buffer0pop,buffer0attr,buffer0name->TDBuffer_<Name>(idx)in the shader). Reach forglslmultiTOPwhenever you need a fourth input or a POP attribute.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 19d ago First seen · 72 lines · 76 tokens per session scan A e11fe0ca61d6
glsl-shaders is a skill published in the GitHub repository dylanroscover/Embody (199 stars, last pushed yesterday), licensed MIT. It adds 76 tokens to every session and 2,489 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-27.
Other skills, from other repositories
python-api
This skill should be used when writing, editing, or debugging Python code that runs inside TouchDesigner — scripts, expressions, DAT callbacks, Extensions, or one-off snippets passed to executepythonscript — or whenever there is uncertainty about a td class's methods, members, or module-level API. Trigger phrases…
agentcore-investigation
Investigate Bedrock AgentCore runtime sessions via CloudWatch Logs Insights — resolve session/trace IDs, query OTEL spans, filter noise, build timelines. Use when debugging AgentCore agent sessions, tracing tool calls, or analyzing latency.
x-reader
Read source URLs from X/Twitter, articles, YouTube, Bilibili, podcasts, WeChat, Xiaohongshu, Telegram, RSS, and the open web. Use when the user provides a link and wants the original content, evidence, transcript, summary, or source-grounded analysis.
debug
This skill should be used when the user runs /touchdesigner:debug or asks to debug, investigate, or find TouchDesigner node errors — trigger phrases include "debug my TouchDesigner project", "why is this node broken", "find errors in TD", "investigate node errors", "what's wrong with /project1/geo1", or "fix this…
jmcomic
Search, browse, inspect album-specific or site-wide comments, list favorite folders, browse, add, and delete favorites, and download manga from JMComic (18comic), obtain the latest Android APK from hect0x7/JMComic-APK, and invoke the upstream jm-view-server jms command for local reading. Use for manga discovery…
quantum-vqls
A runnable guide to the variational quantum linear solver (VQLS), a quantum method that estimates a solution to a system of linear equations by optimizing a parameterized circuit. It uses Qiskit and reports the numerical residual and why optimization stopped.