{"data":{"skill":{"slug":"zhanlincui-algorithmic-art","name":"algorithmic-art","icon":"📦","repo":"https://github.com/ZhanlinCui/Ultimate-Agent-Skills-Collection/tree/main/algorithmic-art","status":"approved","author":"ZhanlinCui","authorVersion":null,"skillstoreRevision":null},"audit":{"id":"76d9a5c7-84f9-4959-878c-53166d5acfc7","skill_id":"53389573-e85b-4db0-a29c-418a996a7116","version":4,"content_hash":"v2:64ca8af0f54a325752f08bd54e52151061ea659a:3bc4092c09804853186524c826bc0621b940bb6122c05b84496dff95388e6eef:ebecc474ab8395cc094f5bde04c6c4cd195576d356256b6cd366c82da0aef8ec:c8ac1d191838bfc452064fe34c7d53d8","risk_level":"medium","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"Most execution and reconnaissance detections are false positives from Markdown fences, inline file names, CSS, comments, and JavaScript RegExp.exec. The real risks are external CDN and font loads in generated artifacts, plus a trust risk from a community skill requiring Anthropic-branded output.","remediation":[{"issue":"External CDN and font dependencies","severity":"low","suggestion":"Vendor p5.js and fonts with the skill or clearly disclose that generated artifacts load cdnjs and Google Fonts."},{"issue":"Anthropic branding in community-generated artifacts","severity":"medium","suggestion":"Replace mandatory Anthropic branding with neutral styling or require clear attribution that the artifact is user-generated and not official."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":109,"line_start":109},{"file":"SKILL.md","line_end":141,"line_start":136},{"file":"SKILL.md","line_end":147,"line_start":141},{"file":"SKILL.md","line_end":159,"line_start":147},{"file":"SKILL.md","line_end":189,"line_start":159},{"file":"SKILL.md","line_end":199,"line_start":189},{"file":"SKILL.md","line_end":215,"line_start":199},{"file":"SKILL.md","line_end":223,"line_start":215},{"file":"SKILL.md","line_end":229,"line_start":223},{"file":"SKILL.md","line_end":275,"line_start":229},{"file":"SKILL.md","line_end":300,"line_start":275},{"file":"SKILL.md","line_end":313,"line_start":300},{"file":"SKILL.md","line_end":319,"line_start":313},{"file":"templates/generator_template.js","line_end":133,"line_start":133}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":280,"line_start":280},{"file":"templates/viewer.html","line_end":23,"line_start":23},{"file":"templates/viewer.html","line_end":24,"line_start":24},{"file":"templates/viewer.html","line_end":25,"line_start":25},{"file":"templates/viewer.html","line_end":26,"line_start":26}]},{"factor":"scripts","evidence":[{"file":"templates/generator_template.js","line_end":133,"line_start":133}]}],"critical_findings":[],"high_findings":[],"medium_findings":[{"title":"Community Skill Requires Anthropic-Branded Output","locations":[{"file":"SKILL.md","line_end":124,"line_start":112},{"file":"templates/viewer.html","line_end":7,"line_start":3}],"confidence":0.82,"description":"The community skill repeatedly directs generated artifacts to keep Anthropic branding, including fixed colors, fonts, and layout. This can make generated outputs appear officially affiliated when the source is a third-party skill.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"The branding instructions are explicit in SKILL.md and viewer.html. The risk is trust and attribution confusion rather than code execution."}],"low_findings":[{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":280,"line_start":280}],"confidence":0.82,"description":"<script src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.7.0/p5.min.js\"></script>","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The instructions require generated HTML to load p5.js from cdnjs. This creates an external browser dependency and supply-chain risk."},{"title":"Hardcoded URL","locations":[{"file":"templates/viewer.html","line_end":23,"line_start":23}],"confidence":0.86,"description":"<script src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.7.0/p5.min.js\"></script>","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The viewer template loads p5.js from cdnjs at runtime. That external request is a real dependency even if the source is a common public CDN."},{"title":"Hardcoded URL","locations":[{"file":"templates/viewer.html","line_end":24,"line_start":24}],"confidence":0.78,"description":"<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The template preconnects to Google Fonts. This creates an external browser connection and exposes basic request metadata."},{"title":"Hardcoded URL","locations":[{"file":"templates/viewer.html","line_end":25,"line_start":25}],"confidence":0.78,"description":"<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The template preconnects to fonts.gstatic.com. This is a real third-party network dependency for generated artifacts."},{"title":"Hardcoded URL","locations":[{"file":"templates/viewer.html","line_end":26,"line_start":26}],"confidence":0.78,"description":"<link href=\"https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600&family=Lora:wght@400;5","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The template loads CSS from Google Fonts. That external font request is legitimate but still carries privacy and availability risk."}],"dangerous_patterns":[],"files_scanned":3,"total_lines":1227,"audit_model":"codex","audited_at":"2026-07-08T12:17:39.677+00:00","created_at":"2026-07-08T14:54:44.340859+00:00","static_findings":[{"id":"external_commands:SKILL.md:109:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"1. **Read** `templates/viewer.html` using the Read tool","category":"external_commands","line_end":109,"severity":"medium","line_start":109},{"id":"external_commands:SKILL.md:136:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":141,"severity":"medium","line_start":136},{"id":"external_commands:SKILL.md:141:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":147,"severity":"medium","line_start":141},{"id":"external_commands:SKILL.md:147:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":159,"severity":"medium","line_start":147},{"id":"external_commands:SKILL.md:159:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":189,"severity":"medium","line_start":159},{"id":"external_commands:SKILL.md:189:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":199,"severity":"medium","line_start":189},{"id":"external_commands:SKILL.md:199:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":215,"severity":"medium","line_start":199},{"id":"external_commands:SKILL.md:215:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"2. **Single HTML Artifact** - Self-contained interactive generative art built from `templates/viewer","category":"external_commands","line_end":223,"severity":"medium","line_start":215},{"id":"external_commands:SKILL.md:223:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**REMINDER: `templates/viewer.html` should have already been read (see STEP 0). Use that file as the","category":"external_commands","line_end":229,"severity":"medium","line_start":223},{"id":"external_commands:SKILL.md:229:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"The `templates/viewer.html` file is the foundation. It contains the exact structure and styling need","category":"external_commands","line_end":275,"severity":"medium","line_start":229},{"id":"external_commands:SKILL.md:275:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```html","category":"external_commands","line_end":300,"severity":"medium","line_start":275},{"id":"external_commands:SKILL.md:300:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":313,"severity":"medium","line_start":300},{"id":"external_commands:SKILL.md:313:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```html","category":"external_commands","line_end":319,"severity":"medium","line_start":313},{"id":"network:SKILL.md:280:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"<script src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.7.0/p5.min.js\"></script>","category":"network","line_end":280,"severity":"low","line_start":280},{"id":"blocker:SKILL.md:3:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"description: Creating algorithmic art using p5.js with seeded randomness and interactive parameter e","category":"blocker","line_end":3,"severity":"low","line_start":3},{"id":"blocker:SKILL.md:48:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- **Avoid redundancy**: Each algorithmic aspect should be mentioned once. Avoid repeating concepts a","category":"blocker","line_end":48,"severity":"low","line_start":48},{"id":"blocker:SKILL.md:86:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"**The algorithmic philosophy should be 4-6 paragraphs long.** Fill it with poetic computational phil","category":"blocker","line_end":86,"severity":"low","line_start":86},{"id":"blocker:SKILL.md:167:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"To express the philosophy through code, avoid thinking \"which pattern should I use?\" and instead thi","category":"blocker","line_end":167,"severity":"low","line_start":167},{"id":"blocker:SKILL.md:83:network-reconnaissance","file":"SKILL.md","pattern":"Network reconnaissance","snippet":"- **PURE GENERATIVE ART**: This is about making LIVING ALGORITHMS, not static images with randomness","category":"blocker","line_end":84,"severity":"low","line_start":83},{"id":"scripts:templates/generator_template.js:133:python-exec-function","file":"templates/generator_template.js","pattern":"Python exec() function","snippet":"const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);","category":"scripts","line_end":133,"severity":"high","line_start":133},{"id":"external_commands:templates/generator_template.js:133:process-exec","file":"templates/generator_template.js","pattern":"Process exec","snippet":"const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);","category":"external_commands","line_end":133,"severity":"high","line_start":133},{"id":"blocker:templates/generator_template.js:62:system-reconnaissance","file":"templates/generator_template.js","pattern":"System reconnaissance","snippet":"// - Grid structures","category":"blocker","line_end":62,"severity":"low","line_start":62},{"id":"network:templates/viewer.html:23:hardcoded-url","file":"templates/viewer.html","pattern":"Hardcoded URL","snippet":"<script src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.7.0/p5.min.js\"></script>","category":"network","line_end":23,"severity":"low","line_start":23},{"id":"network:templates/viewer.html:24:hardcoded-url","file":"templates/viewer.html","pattern":"Hardcoded URL","snippet":"<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">","category":"network","line_end":24,"severity":"low","line_start":24},{"id":"network:templates/viewer.html:25:hardcoded-url","file":"templates/viewer.html","pattern":"Hardcoded URL","snippet":"<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>","category":"network","line_end":25,"severity":"low","line_start":25},{"id":"network:templates/viewer.html:26:hardcoded-url","file":"templates/viewer.html","pattern":"Hardcoded URL","snippet":"<link href=\"https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600&family=Lora:wght@400;5","category":"network","line_end":26,"severity":"low","line_start":26},{"id":"blocker:templates/viewer.html:117:system-reconnaissance","file":"templates/viewer.html","pattern":"System reconnaissance","snippet":"border: 1px solid var(--anthropic-light-gray);","category":"blocker","line_end":117,"severity":"low","line_start":117},{"id":"blocker:templates/viewer.html:545:system-reconnaissance","file":"templates/viewer.html","pattern":"System reconnaissance","snippet":"// Reset to current seed if invalid","category":"blocker","line_end":546,"severity":"low","line_start":545}],"finding_verdicts":[{"id":"external_commands:SKILL.md:109:ruby-shell-backtick-execution","reason":"The backticks only mark inline Markdown around templates/viewer.html and Read tool instructions. There is no shell command or Ruby execution.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:136:ruby-shell-backtick-execution","reason":"This line opens a JavaScript fenced example for seeded randomness. The Markdown fence is not executable shell or Ruby code.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:141:ruby-shell-backtick-execution","reason":"This is the closing Markdown fence for a JavaScript example. It does not invoke a process or interpreter.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:147:ruby-shell-backtick-execution","reason":"This line opens a Markdown code block showing a JavaScript params object. It is documentation, not command execution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:159:ruby-shell-backtick-execution","reason":"This is a Markdown code fence terminator after an example params object. No shell or Ruby execution is present.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:189:ruby-shell-backtick-execution","reason":"This line opens a fenced JavaScript example for p5.js setup and draw functions. It is static documentation.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:199:ruby-shell-backtick-execution","reason":"This is the closing Markdown fence for the p5.js example. It has no command execution behavior.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:215:ruby-shell-backtick-execution","reason":"The backticks format templates/viewer.html as an inline file name in prose. No executable command or interpolation is used.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:223:ruby-shell-backtick-execution","reason":"The backticks format a template file name inside a reminder. This is documentation text, not a shell invocation.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:229:ruby-shell-backtick-execution","reason":"The line references templates/viewer.html with Markdown inline code formatting. It does not execute external commands.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:275:ruby-shell-backtick-execution","reason":"This line opens an HTML fenced code example. Markdown fencing is not Ruby shell backtick execution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:300:ruby-shell-backtick-execution","reason":"This is the closing Markdown fence for an HTML example. It cannot launch a process.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:313:ruby-shell-backtick-execution","reason":"This line opens a fenced HTML example for sidebar controls. It is documentation text rather than executable shell syntax.","verdict":"false_positive","confidence":0.97},{"id":"network:SKILL.md:280:hardcoded-url","reason":"The instructions require generated HTML to load p5.js from cdnjs. This creates an external browser dependency and supply-chain risk.","verdict":"confirmed","severity":"low","confidence":0.82},{"id":"blocker:SKILL.md:3:system-reconnaissance","reason":"The description names seeded randomness, flow fields, and particle systems as art concepts. It does not request system enumeration.","verdict":"false_positive","confidence":0.95},{"id":"blocker:SKILL.md:48:system-reconnaissance","reason":"The line tells the model to avoid redundant writing about algorithmic concepts. It contains no host or environment discovery instruction.","verdict":"false_positive","confidence":0.94},{"id":"blocker:SKILL.md:86:system-reconnaissance","reason":"The line describes the desired length and style of an algorithmic philosophy document. It does not instruct reconnaissance.","verdict":"false_positive","confidence":0.94},{"id":"blocker:SKILL.md:167:system-reconnaissance","reason":"The word pattern appears in a creative coding prompt about expressing a philosophy. It is not about probing a computer system.","verdict":"false_positive","confidence":0.94},{"id":"blocker:SKILL.md:83:network-reconnaissance","reason":"The line uses the phrase living algorithms as an artistic goal. It does not describe network discovery, scanning, or collection.","verdict":"false_positive","confidence":0.94},{"id":"scripts:templates/generator_template.js:133:python-exec-function","reason":"The code calls JavaScript RegExp.exec on a hex color string. It is not Python exec and does not evaluate arbitrary code.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:templates/generator_template.js:133:process-exec","reason":"The exec token is a regular expression method call in JavaScript. It does not spawn a process or run an external command.","verdict":"false_positive","confidence":0.99},{"id":"blocker:templates/generator_template.js:62:system-reconnaissance","reason":"The line is a comment listing grid structures as possible art data structures. It contains no system reconnaissance behavior.","verdict":"false_positive","confidence":0.96},{"id":"network:templates/viewer.html:23:hardcoded-url","reason":"The viewer template loads p5.js from cdnjs at runtime. That external request is a real dependency even if the source is a common public CDN.","verdict":"confirmed","severity":"low","confidence":0.86},{"id":"network:templates/viewer.html:24:hardcoded-url","reason":"The template preconnects to Google Fonts. This creates an external browser connection and exposes basic request metadata.","verdict":"confirmed","severity":"low","confidence":0.78},{"id":"network:templates/viewer.html:25:hardcoded-url","reason":"The template preconnects to fonts.gstatic.com. This is a real third-party network dependency for generated artifacts.","verdict":"confirmed","severity":"low","confidence":0.78},{"id":"network:templates/viewer.html:26:hardcoded-url","reason":"The template loads CSS from Google Fonts. That external font request is legitimate but still carries privacy and availability risk.","verdict":"confirmed","severity":"low","confidence":0.78},{"id":"blocker:templates/viewer.html:117:system-reconnaissance","reason":"The line is a CSS border declaration using a theme variable. It has no relationship to system reconnaissance.","verdict":"false_positive","confidence":0.98},{"id":"blocker:templates/viewer.html:545:system-reconnaissance","reason":"The line is a comment about resetting an invalid seed input. It does not collect or inspect host system information.","verdict":"false_positive","confidence":0.97}],"semantic_findings":[{"title":"Community Skill Requires Anthropic-Branded Output","severity":"medium","locations":[{"file":"SKILL.md","line_end":124,"line_start":112},{"file":"templates/viewer.html","line_end":7,"line_start":3}],"confidence":0.82,"description":"The community skill repeatedly directs generated artifacts to keep Anthropic branding, including fixed colors, fonts, and layout. This can make generated outputs appear officially affiliated when the source is a third-party skill.","confidence_reasoning":"The branding instructions are explicit in SKILL.md and viewer.html. The risk is trust and attribution confusion rather than code execution."}],"subject_marketplace_commit_sha":null,"subject_content_hash":null,"subject_tree_hash":null,"subject_plugin_path":null,"audit_payload_hash":null,"confirmed_risk_level":null,"scanner_version":null,"policy_version":null,"subject":{"marketplaceCommitSha":null,"contentHash":null,"treeHash":null,"pluginPath":null,"auditPayloadHash":null},"scannerVersion":null,"policyVersion":null},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"not_attestable","url":null,"status":null,"reason":"confirmed_risk_level does not match the canonical trust resolver"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"medium","confirmedFindingCount":1,"capabilityReviewCount":5,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":false}}