{"data":{"skill":{"slug":"heygen-com-three","name":"three","icon":"📦","repo":"https://github.com/heygen-com/hyperframes/tree/main/skills/three/","status":"approved","author":"heygen-com","authorVersion":null,"skillstoreRevision":null},"audit":{"id":"74fe570f-84d7-47cf-85b5-dec52040c52a","skill_id":"2e8ea154-65ec-47c4-a997-dafa762bd365","version":3,"content_hash":"339cb982585cbd9137fc674b314e0a74","risk_level":"medium","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"The skill is a concise Markdown guide for deterministic Three.js rendering inside HyperFrames. Most static findings are false positives caused by Markdown code fences, inline code, documentation links, and prose; the confirmed items are a CDN module import and unpinned npx validation commands. No prompt injection, data exfiltration, or suspicious intent was found.","remediation":[{"issue":"The example imports Three.js from a public CDN.","severity":"low","suggestion":"Prefer a local package import, or document trust and availability requirements for CDN use."},{"issue":"The validation commands use npx without a package version pin.","severity":"medium","suggestion":"Document local installation, or pin the HyperFrames package version before running lint and validate."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":8,"line_start":8},{"file":"SKILL.md","line_end":14,"line_start":14},{"file":"SKILL.md","line_end":16,"line_start":16},{"file":"SKILL.md","line_end":18,"line_start":18},{"file":"SKILL.md","line_end":56,"line_start":22},{"file":"SKILL.md","line_end":58,"line_start":56},{"file":"SKILL.md","line_end":64,"line_start":58},{"file":"SKILL.md","line_end":70,"line_start":64},{"file":"SKILL.md","line_end":75,"line_start":70},{"file":"SKILL.md","line_end":77,"line_start":75},{"file":"SKILL.md","line_end":82,"line_start":77},{"file":"SKILL.md","line_end":87,"line_start":82},{"file":"SKILL.md","line_end":87,"line_start":87},{"file":"SKILL.md","line_end":100,"line_start":97},{"file":"SKILL.md","line_end":104,"line_start":100},{"file":"SKILL.md","line_end":105,"line_start":104},{"file":"SKILL.md","line_end":106,"line_start":105}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":25,"line_start":25},{"file":"SKILL.md","line_end":105,"line_start":105},{"file":"SKILL.md","line_end":106,"line_start":106}]}],"critical_findings":[],"high_findings":[],"medium_findings":[{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":100,"line_start":97}],"confidence":0.68,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"Lines 97-100 instruct users or agents to run npx hyperframes lint and validate. This is legitimate validation guidance, but it executes external package-manager commands in a community skill."}],"low_findings":[{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":25,"line_start":25}],"confidence":0.72,"description":"import * as THREE from \"https://cdn.jsdelivr.net/npm/three@0.181.2/+esm\";","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The example imports executable Three.js code from jsDelivr. It is version-pinned and no exfiltration is shown, but copied output depends on a third-party CDN at runtime."}],"dangerous_patterns":[],"files_scanned":1,"total_lines":107,"audit_model":"codex","audited_at":"2026-07-06T14:56:35.818+00:00","created_at":"2026-07-06T17:32:32.669221+00:00","static_findings":[{"id":"external_commands:SKILL.md:8:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"HyperFrames supports Three.js through its `three` runtime adapter. The adapter does not own your sce","category":"external_commands","line_end":8,"severity":"medium","line_start":8},{"id":"external_commands:SKILL.md:14:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Listen for the `hf-seek` event and render exactly that time.","category":"external_commands","line_end":14,"severity":"medium","line_start":14},{"id":"external_commands:SKILL.md:16:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Avoid `requestAnimationFrame` or `renderer.setAnimationLoop` as the source of truth for render-cri","category":"external_commands","line_end":16,"severity":"medium","line_start":16},{"id":"external_commands:SKILL.md:18:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"The adapter sets `window.__hfThreeTime` and dispatches `new CustomEvent(\"hf-seek\", { detail: { time ","category":"external_commands","line_end":18,"severity":"medium","line_start":18},{"id":"external_commands:SKILL.md:22:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```html","category":"external_commands","line_end":56,"severity":"medium","line_start":22},{"id":"external_commands:SKILL.md:56:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":58,"severity":"medium","line_start":56},{"id":"external_commands:SKILL.md:58:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```css","category":"external_commands","line_end":64,"severity":"medium","line_start":58},{"id":"external_commands:SKILL.md:64:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":70,"severity":"medium","line_start":64},{"id":"external_commands:SKILL.md:70:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```js","category":"external_commands","line_end":75,"severity":"medium","line_start":70},{"id":"external_commands:SKILL.md:75:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":77,"severity":"medium","line_start":75},{"id":"external_commands:SKILL.md:77:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"If several mixers exist, seek all of them from the same `time`.","category":"external_commands","line_end":82,"severity":"medium","line_start":77},{"id":"external_commands:SKILL.md:82:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Camera moves derived from `time`.","category":"external_commands","line_end":87,"severity":"medium","line_start":82},{"id":"external_commands:SKILL.md:87:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Using `Date.now()`, `performance.now()`, or clock deltas to update scene state.","category":"external_commands","line_end":87,"severity":"medium","line_start":87},{"id":"external_commands:SKILL.md:97:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":100,"severity":"medium","line_start":97},{"id":"external_commands:SKILL.md:100:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":104,"severity":"medium","line_start":100},{"id":"external_commands:SKILL.md:104:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- HyperFrames adapter source: `packages/core/src/runtime/adapters/three.ts`.","category":"external_commands","line_end":105,"severity":"medium","line_start":104},{"id":"external_commands:SKILL.md:105:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Three.js `WebGLRenderer` docs: https://threejs.org/docs/pages/WebGLRenderer.html","category":"external_commands","line_end":106,"severity":"medium","line_start":105},{"id":"network:SKILL.md:25:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"import * as THREE from \"https://cdn.jsdelivr.net/npm/three@0.181.2/+esm\";","category":"network","line_end":25,"severity":"low","line_start":25},{"id":"network:SKILL.md:105:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- Three.js `WebGLRenderer` docs: https://threejs.org/docs/pages/WebGLRenderer.html","category":"network","line_end":105,"severity":"low","line_start":105},{"id":"network:SKILL.md:106:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- Three.js `AnimationMixer.setTime()` docs: https://threejs.org/docs/pages/AnimationMixer.html","category":"network","line_end":106,"severity":"low","line_start":106},{"id":"blocker:SKILL.md:16:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- Avoid `requestAnimationFrame` or `renderer.setAnimationLoop` as the source of truth for render-cri","category":"blocker","line_end":16,"severity":"low","line_start":16},{"id":"blocker:SKILL.md:85:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"## Avoid","category":"blocker","line_end":87,"severity":"low","line_start":85}],"finding_verdicts":[{"id":"external_commands:SKILL.md:8:ruby-shell-backtick-execution","reason":"This is prose describing the HyperFrames three adapter and inline Markdown code. It does not execute Ruby, shell, or host commands.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:14:ruby-shell-backtick-execution","reason":"The flagged text is an inline event name in a Markdown bullet. It contains no shell command or dynamic execution path.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:16:ruby-shell-backtick-execution","reason":"The line warns against browser animation APIs as timing sources. It is not a reconnaissance instruction or command execution pattern.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:18:ruby-shell-backtick-execution","reason":"This line documents browser event names and an example CustomEvent call. It does not invoke an external process or shell.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:SKILL.md:22:ruby-shell-backtick-execution","reason":"The backticks are a Markdown fence for an HTML example, not Ruby or shell execution. The example creates a browser Three.js scene and does not run host commands.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:SKILL.md:56:ruby-shell-backtick-execution","reason":"This is the closing Markdown fence for the HTML example. It has no executable command semantics.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:58:ruby-shell-backtick-execution","reason":"This is a Markdown fence for a CSS example. CSS display and sizing rules do not execute shell commands.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:64:ruby-shell-backtick-execution","reason":"This is the closing Markdown fence for the CSS example. It is formatting only.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:70:ruby-shell-backtick-execution","reason":"This is a Markdown fence for a JavaScript snippet. The snippet seeks an AnimationMixer and renders the scene, with no host command execution.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:75:ruby-shell-backtick-execution","reason":"This is the closing Markdown fence for the JavaScript snippet. It is not executable shell content.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:77:ruby-shell-backtick-execution","reason":"The flagged text is inline Markdown around the word time. It is explanatory prose, not command execution.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:82:ruby-shell-backtick-execution","reason":"The line uses inline Markdown for a time variable in a recommended use case. It contains no process launch or shell evaluation.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:87:ruby-shell-backtick-execution","reason":"The line warns against browser timing APIs such as Date.now and performance.now. It is not shell execution or system reconnaissance.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:SKILL.md:97:ruby-shell-backtick-execution","reason":"Lines 97-100 instruct users or agents to run npx hyperframes lint and validate. This is legitimate validation guidance, but it executes external package-manager commands in a community skill.","verdict":"confirmed","severity":"medium","confidence":0.68},{"id":"external_commands:SKILL.md:100:ruby-shell-backtick-execution","reason":"This region contains a closing Markdown fence and a references heading. It does not contain executable shell logic beyond the separately adjudicated validation block.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:104:ruby-shell-backtick-execution","reason":"The flagged text is a backticked repository path in credits. A path reference in Markdown does not execute commands.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:105:ruby-shell-backtick-execution","reason":"The flagged text is a backticked API name in a documentation link. It does not execute Ruby, shell, or host commands.","verdict":"false_positive","confidence":0.96},{"id":"network:SKILL.md:25:hardcoded-url","reason":"The example imports executable Three.js code from jsDelivr. It is version-pinned and no exfiltration is shown, but copied output depends on a third-party CDN at runtime.","verdict":"confirmed","severity":"low","confidence":0.72},{"id":"network:SKILL.md:105:hardcoded-url","reason":"This URL is a reference link to Three.js WebGLRenderer documentation. It is not used for runtime network access or data transfer.","verdict":"false_positive","confidence":0.95},{"id":"network:SKILL.md:106:hardcoded-url","reason":"This URL is a reference link to Three.js AnimationMixer documentation. It is not used for runtime network access or data transfer.","verdict":"false_positive","confidence":0.95},{"id":"blocker:SKILL.md:16:system-reconnaissance","reason":"The line tells authors not to use browser animation loops as the source of truth. It does not request system information or reconnaissance.","verdict":"false_positive","confidence":0.96},{"id":"blocker:SKILL.md:85:system-reconnaissance","reason":"The heading and following bullet list describe rendering practices to avoid. They do not ask the agent to inspect the host system.","verdict":"false_positive","confidence":0.95}],"semantic_findings":[],"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":"safe","confirmedFindingCount":0,"capabilityReviewCount":2,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":false}}