design-taste-frontend
39 findings (30 critical, 5 medium, 3 low, 1 info), mainly command injection, data exfiltration, unauthorized tool use. Most recent scan 2026-10-22.
Second scanner: NVIDIA SkillSpector
Independent static run, no language model, over the same files as the Cisco scan above. How the two scanners compare across the whole corpus: Two scanners, one corpus.
What this skill does
tasteskill v2, the anti-slop frontend skill. Art direction for websites, distilled from a study of 247 curated gallery sites (One Page Love, Awwwards Sites of the Day). Deals researched directions (idea, composition, type, palette, photographs, section blueprints) from a library, enforces a strict no-slop house style with a real-browser inspector, and runs a look-and-fix loop on screenshots. Use this whenever you build, design, redesign, restyle, polish or review a landing page, marketing site, portfolio, product page, one-pager, hero or any public-facing web page, in any stack (HTML/CSS,…
- Package
- 38 files, 2.3 MB
- SKILL.md
- 6331 words, 12+ sections
- Code
- JavaScript (12)
SKILL.md covers: tasteskill v2 · Page or app screen · The run · 1. Read the brief and the project · 2. Write the argument · 3. Draw the direction · 4. Find the idea · 5. Write the words · 6. Build it, still · 7. Gate · 8. Look · 9. Move
Findings
CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:108
await helper.eval((a) => {CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:124
const early = await page.eval(TITLE_SEEN).catch(() => null);CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:125
await page.eval('document.fonts.ready.then(() => true)').catch(() => {});CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:129
const metrics = await page.eval(probe);CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:133
const frameChecks = [await page.eval(frame).catch(() => null)];CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:136
await page.eval(`window.scrollTo({ top: ${i * h}, behavior: 'instant' })`).catch(() => {});CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:140
frameChecks.push(await page.eval(frame).catch(() => null));CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:141
await page.eval('window.__motionSample && window.__motionSample()').catch(() => {});CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:143
const motion = await page.eval('window.__motion ? window.__motion() : null').catch(() => null);CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:145
await page.eval(`window.scrollTo({ top: 0, behavior: 'instant' })`).catch(() => {});CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:147
const after = await page.eval(probe).catch(() => metrics);CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:149
const lay = await page.eval(layout).catch(() => null);CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:150
const appM = appMode ? await page.eval(app).catch(() => null) : null;CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:151
if (appM) appM.colourShare = await helper.eval(colourShare, 'data:image/jpeg;base64,' + frames[0]).catch(() => null);CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:154
const sceneState = w >= 1100 && !appMode ? await page.eval(`[...document.querySelectorAll('section.scene, .scene[data-scene]')].map((s) => ({ id: s.dataset.scene || s.id || 'scene', live: s.classList.contains('is-live'), rest: s.classList.contains('is-rest'), h: Math.round(s.getBoundingClientRect().height) }))`).catch(() => []) : [];CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:170
await page.eval(`window.scrollTo({ top: 0, behavior: 'instant' })`).catch(() => {});CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:177
const y = await page.eval('Math.round(scrollY || document.scrollingElement.scrollTop || 0)').catch(() => -1);CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/inspect.mjs:243
const hidden = await rp.eval(`(() => {CRITICAL Node.js child_process module usage for shell command execution Command Injectionstatic
Pattern detected: from 'node:child_process'
scripts/lib/cdp.mjs:4
import { spawn, spawnSync } from 'node:child_process';CRITICAL Node.js child_process module usage for shell command execution Command Injectionstatic
Pattern detected: spawnSync(
scripts/lib/cdp.mjs:85
try { if (pid) { if (process.platform === 'win32') spawnSync('taskkill', ['/pid', String(pid), '/T', '/F'], { stdio: 'ignore' }); else process.kill(pid, 'SIGKILL'); } } catch {}CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/lib/cdp.mjs:204
async eval(fnOrExpr, arg) {CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/scenes.mjs:55
await helper.eval((a) => {CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/scenes.mjs:70
await page.eval('document.fonts.ready.then(() => true)').catch(() => {});CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/scenes.mjs:72
const scenes = await page.eval(SCENES);CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/scenes.mjs:82
await page.eval(go(Math.round(p.y))).catch(() => {});CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/scenes.mjs:94
await page.eval(go(Math.max(0, scenes[0].top - H))).catch(() => {});CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/scenes.mjs:96
await page.eval(`(() => { window.__f = []; let last = performance.now(); const tick = (t) => { window.__f.push(t - last); last = t; if (window.__f.length < 600) requestAnimationFrame(tick); }; requestAnimationFrame(tick); })()`);CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/scenes.mjs:99
const f = await page.eval('window.__f.slice(2)');CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/scenes.mjs:112
const h = await rp.eval('document.documentElement.scrollHeight');CRITICAL Dangerous code execution functions that can execute arbitrary code Command Injectionstatic
Pattern detected: eval(
scripts/scenes.mjs:114
for (let y = 0, k = 0; y < h && k < 16; y += 900, k++) { await rp.eval(`window.scrollTo(0, ${y})`); await sleep(350); frames.push(await rp.screenshot({ quality: 70 })); labels.push(`reduced motion, screen ${k + 1}`); }MEDIUM Outbound network request primitives in JavaScript/TypeScript Data Exfiltrationstatic
Pattern detected: fetch(
scripts/assets.mjs:187
try { r = await fetch(url, { headers: { 'User-Agent': UA, Accept: 'application/json', ...headers }, signal: AbortSignal.timeout(ms) }); }MEDIUM Outbound network request primitives in JavaScript/TypeScript Data Exfiltrationstatic
Pattern detected: fetch(
scripts/assets.mjs:248
const r = await fetch(url, { headers: { ...headers, Range: `bytes=0-${want - 1}` }, signal: ac.signal, redirect: 'follow' });MEDIUM Outbound network request primitives in JavaScript/TypeScript Data Exfiltrationstatic
Pattern detected: fetch(
scripts/assets.mjs:742
try { r = await fetch(it.image, { headers: imageHeaders(it.image), signal: AbortSignal.timeout(90000) }); }MEDIUM Outbound network request primitives in JavaScript/TypeScript Data Exfiltrationstatic
Pattern detected: fetch(
scripts/assets.mjs:784
try { r = await fetch(it.image, { headers: { 'User-Agent': UA, Accept: 'video/*' }, signal: AbortSignal.timeout(600000) }); }MEDIUM Outbound network request primitives in JavaScript/TypeScript Data Exfiltrationstatic
Pattern detected: fetch(
scripts/assets.mjs:805
const pr = await fetch(it.poster, { headers: imageHeaders(it.poster), signal: AbortSignal.timeout(60000) });LOW Script contacts a destination the documentation never mentions Unauthorized Tool Usestatic
Script contacts or configures 'www.artic.edu' but the skill documentation never visibly mentions it. Undocumented network destinations can indicate behaviour the manifest and description do not disclose.
scripts/assets.mjs:433
LOW Script contacts a destination the documentation never mentions Unauthorized Tool Usestatic
Script contacts or configures 'www.nasa.gov' but the skill documentation never visibly mentions it. Undocumented network destinations can indicate behaviour the manifest and description do not disclose.
scripts/assets.mjs:570
LOW Script contacts a destination the documentation never mentions Unauthorized Tool Usestatic
Script contacts or configures 'x' but the skill documentation never visibly mentions it. Undocumented network destinations can indicate behaviour the manifest and description do not disclose.
scripts/inspect.mjs:53
INFO Skill does not specify a license Policy Violationstatic
Skill manifest does not include a 'license' field. Specifying a license helps users understand usage terms.
SKILL.md
What is in the package
38 files, 2.3 MB. Show the list.
| File | Kind | Size |
|---|---|---|
README.md | doc | 5.2 KB |
SKILL.md | doc | 38 KB |
assets/app.css | data | 16 KB |
assets/base.css | data | 6.4 KB |
assets/base.js | script | 2.1 KB |
assets/charts.js | script | 57 KB |
evals/evals.json | config | 8.0 KB |
library/app.json | config | 72 KB |
library/directions.json | config | 60 KB |
library/heroes.json | config | 106 KB |
library/motions.json | config | 8.8 KB |
library/palettes.json | config | 34 KB |
library/photos.json | config | 157 KB |
library/sections.json | config | 270 KB |
library/sites.json | config | 849 KB |
library/type.json | config | 80 KB |
references/app-screens.md | doc | 83 KB |
references/colour.md | doc | 6.7 KB |
references/copy.md | doc | 9.2 KB |
references/critique.md | doc | 11 KB |
references/imagery.md | doc | 50 KB |
references/layout.md | doc | 18 KB |
references/motion.md | doc | 54 KB |
references/research.md | doc | 24 KB |
references/scenes.md | doc | 9.6 KB |
references/tells.md | doc | 7.2 KB |
references/type.md | doc | 8.3 KB |
scripts/assets.mjs | script | 63 KB |
scripts/draw.mjs | script | 53 KB |
scripts/inspect.mjs | script | 27 KB |
scripts/lint.mjs | script | 11 KB |
scripts/scenes.mjs | script | 8.8 KB |
assets/scenes/stage.css | data | 1.1 KB |
assets/scenes/stage.js | script | 7.3 KB |
scripts/lib/app-draw.mjs | script | 14 KB |
scripts/lib/cdp.mjs | script | 12 KB |
scripts/lib/probe.mjs | script | 79 KB |
scripts/lib/rules.mjs | script | 36 KB |
External hosts referenced
unsplash.com fonts.googleapis.com api.fontshare.com cdn.jsdelivr.net picsum.photos archive.org collectionapi.metmuseum.org www.artic.edu api.artic.edu api.openverse.org commons.wikimedia.org fonts.gstatic.com images-api.nasa.gov members-play.lacoste.com 2xa.studio aardvarkbookclub.com altergresources.com anidachi.com applied-imagination.gpc.consulting aprilleihuanani.com artemartemartem.com beigeforce.com belgrade.klmln.com belgradearbor.rs berd.xyz bleibtgleich.dev blode.co boc.studio brand.squarespace.com builderstable.net
Hostnames that appear in the skill's files. Referencing a host is not a finding; compare against the findings above and the skill's stated purpose.
Environment variables referenced
CHROME_PATH ASSETS_PATH PUPPETEER_EXECUTABLE_PATH USERPROFILE
Package contents recorded 2026-10-22 at commit 6010f91a9935. The scan above ran against the version current at scan time; the two can differ if the skill has since been updated.
What we checked
- Static analyzer. Pattern rules over SKILL.md and bundled files: known-bad commands, exfiltration URLs, secrets, obfuscation.
- Bytecode analyzer.
- Pipeline analyzer.
- Correlation analyzer.
- Behavioral analyzer. Checks what the skill asks the agent to do against what its description claims it does.
- Trigger analyzer. Looks for instructions that fire on conditions the user did not ask for.
What we did not check
- Runtime behaviour. The skill was not executed; findings come from reading its files.
- Anything fetched at install or run time, including remote scripts, package dependencies, and URLs the skill tells the agent to open.
- Content the analyzers cannot read: images, binaries, and some non-English text.
- Known scanner bypass classes. See the methodology and limitations page.
Sources
- Repository: https://github.com/leonxlnx/taste-skill
- Raw scan result: leonxlnx-taste-skill-skills-taste-skill-scan.json
- Badge for your README:
 - Request a re-scan