{"data":{"skill":{"slug":"agentspace-so-wan-2-7","name":"wan-2-7","icon":"📦","repo":"https://github.com/agentspace-so/runcomfy-agent-skills/tree/main/wan-2-7/","status":"approved","author":"agentspace-so","authorVersion":null,"skillstoreRevision":1},"audit":{"id":"08a41ad1-2bff-4e52-a6ab-68f3764d8e15","skill_id":"97af70ea-8e1e-49b2-b6c4-3c7c7e56b961","version":8,"content_hash":"v3:3e4b6c31a74a3bd1a291c98cf585d720cb9fbc88:0c38b830e5a8273b62e61069161af937441dc0bedd5567da8032ebec88e6f6b9:488cc712067a56e5655d035e27a0606b1a98a310bfda4bc537060f700f305202:736b696c6c732f6167656e7473706163652d736f2f77616e2d322d37:a9d80fd346f9cd9c69e919e6b9cfbbc6","risk_level":"medium","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"Most static backtick findings are Markdown formatting false positives, but the skill does document real RunComfy CLI execution and a hosted API workflow. I confirmed the external command and outbound network risks, found no prompt injection attempt, and found no malicious hidden-file behavior.","remediation":[{"issue":"External CLI commands are required for generation.","severity":"medium","suggestion":"Show the exact RunComfy command, destination service, and output directory before execution. Require explicit user approval before running installs, login, or generation commands."},{"issue":"Prompts and media references are processed by a third-party service.","severity":"medium","suggestion":"Warn users not to submit confidential prompts, private audio, or restricted media URLs unless their organization approves RunComfy data handling."},{"issue":"Credential handling depends on local RunComfy CLI behavior.","severity":"low","suggestion":"Document token storage and recommend environment tokens for CI. Do not read, print, or copy the token file from the skill workflow."},{"issue":"The placeholder audio URL resembles a path traversal pattern to static scanners.","severity":"low","suggestion":"Replace https://.../voiceover.mp3 with a neutral placeholder such as an example.com media URL."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":7,"line_start":7},{"file":"SKILL.md","line_end":10,"line_start":10},{"file":"SKILL.md","line_end":25,"line_start":23},{"file":"SKILL.md","line_end":31,"line_start":25},{"file":"SKILL.md","line_end":43,"line_start":31},{"file":"SKILL.md","line_end":44,"line_start":43},{"file":"SKILL.md","line_end":45,"line_start":44},{"file":"SKILL.md","line_end":45,"line_start":45},{"file":"SKILL.md","line_end":53,"line_start":49},{"file":"SKILL.md","line_end":54,"line_start":53},{"file":"SKILL.md","line_end":55,"line_start":54},{"file":"SKILL.md","line_end":55,"line_start":55},{"file":"SKILL.md","line_end":56,"line_start":56},{"file":"SKILL.md","line_end":57,"line_start":57},{"file":"SKILL.md","line_end":59,"line_start":58},{"file":"SKILL.md","line_end":60,"line_start":59},{"file":"SKILL.md","line_end":66,"line_start":60},{"file":"SKILL.md","line_end":70,"line_start":66},{"file":"SKILL.md","line_end":74,"line_start":70},{"file":"SKILL.md","line_end":83,"line_start":74},{"file":"SKILL.md","line_end":87,"line_start":83},{"file":"SKILL.md","line_end":95,"line_start":87},{"file":"SKILL.md","line_end":103,"line_start":95},{"file":"SKILL.md","line_end":105,"line_start":103},{"file":"SKILL.md","line_end":107,"line_start":105},{"file":"SKILL.md","line_end":121,"line_start":107},{"file":"SKILL.md","line_end":122,"line_start":121},{"file":"SKILL.md","line_end":131,"line_start":122},{"file":"SKILL.md","line_end":135,"line_start":131},{"file":"SKILL.md","line_end":137,"line_start":135},{"file":"SKILL.md","line_end":139,"line_start":137},{"file":"SKILL.md","line_end":143,"line_start":139},{"file":"SKILL.md","line_end":147,"line_start":143},{"file":"SKILL.md","line_end":151,"line_start":147},{"file":"SKILL.md","line_end":177,"line_start":151},{"file":"SKILL.md","line_end":177,"line_start":177},{"file":"SKILL.md","line_end":181,"line_start":181},{"file":"SKILL.md","line_end":184,"line_start":182},{"file":"SKILL.md","line_end":184,"line_start":184}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":13,"line_start":13},{"file":"SKILL.md","line_end":19,"line_start":19},{"file":"SKILL.md","line_end":78,"line_start":78},{"file":"SKILL.md","line_end":173,"line_start":173},{"file":"SKILL.md","line_end":177,"line_start":177}]},{"factor":"filesystem","evidence":[{"file":"SKILL.md","line_end":78,"line_start":78},{"file":"SKILL.md","line_end":181,"line_start":181},{"file":"SKILL.md","line_end":181,"line_start":181}]}],"critical_findings":[],"high_findings":[],"medium_findings":[{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":10,"line_start":10}],"confidence":0.88,"description":"instead. Calls `runcomfy run wan-ai/wan-2-7/text-to-video` through","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The skill states it calls the local RunComfy CLI for Wan 2.7 video generation. That is real external command execution and sends work to a hosted service."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":25,"line_start":23}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The fenced snippet runs npx to install a skill globally from a GitHub source. Global package or skill installation is external command execution with supply-chain impact."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":44,"line_start":43}],"confidence":0.86,"description":"1. **RunComfy CLI** — `npm i -g @runcomfy/cli`","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The prerequisite tells users to install the RunComfy CLI globally with npm. Installing global packages can execute package lifecycle code and modifies the host environment."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":45,"line_start":44}],"confidence":0.82,"description":"2. **RunComfy account** — `runcomfy login` opens a browser device-code flow.","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The prerequisite tells users to run the RunComfy login command, which launches an authentication flow and changes local credential state. It is legitimate but still external command execution."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":70,"line_start":66}],"confidence":0.9,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The default invocation runs the RunComfy CLI with user prompt input and an output directory. This is intended behavior, but it is real local command execution."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":83,"line_start":74}],"confidence":0.9,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The audio-driven example runs the RunComfy CLI with prompt and audio URL inputs. It is intended behavior, but it combines local command execution with remote media processing."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":95,"line_start":87}],"confidence":0.9,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The literal-control example runs the RunComfy CLI and passes user-controlled generation settings. This is real external command execution even though the command is documented."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":177,"line_start":177}],"confidence":0.93,"description":"The skill invokes `runcomfy run wan-ai/wan-2-7/text-to-video` with a JSON body matching the schema. ","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The prose confirms the skill invokes the RunComfy CLI, posts to the model API, polls the request, and downloads results. That confirms the external command and network workflow."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":181,"line_start":181}],"confidence":0.78,"description":"- **Token storage**: `runcomfy login` writes the API token to `~/.config/runcomfy/token.json` with m","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The line confirms the login command writes an API token to a local config path. It documents a credential-changing command, so the external command usage is security-sensitive."},{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":177,"line_start":177}],"confidence":0.92,"description":"The skill invokes `runcomfy run wan-ai/wan-2-7/text-to-video` with a JSON body matching the schema. ","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The line identifies the concrete RunComfy model API endpoint and output download domains. This is intended behavior, but it is real outbound network traffic."},{"title":"Third-Party Prompt and Media Transfer","locations":[{"file":"SKILL.md","line_end":177,"line_start":177},{"file":"SKILL.md","line_end":183,"line_start":183}],"confidence":0.9,"description":"The skill sends the prompt body to RunComfy hosted Model API and says external media URLs are fetched by RunComfy model servers. Users could expose confidential prompts, audio, or private media URLs to a third party.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"The workflow explicitly describes posting requests to RunComfy and server-side fetching of supplied URLs. This is clear privacy and data-handling risk, although it is documented and expected."}],"low_findings":[],"dangerous_patterns":[],"files_scanned":1,"total_lines":186,"audit_model":"codex","audited_at":"2026-07-09T08:17:54.409+00:00","created_at":"2026-07-16T12:27:57.295471+00:00","static_findings":[{"id":"external_commands:SKILL.md:7:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"audio-driven lip-sync via `audio_url`, smoother transitions, prompt","category":"external_commands","line_end":7,"severity":"medium","line_start":7},{"id":"external_commands:SKILL.md:10:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"instead. Calls `runcomfy run wan-ai/wan-2-7/text-to-video` through","category":"external_commands","line_end":10,"severity":"medium","line_start":10},{"id":"external_commands:SKILL.md:23:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":25,"severity":"medium","line_start":23},{"id":"external_commands:SKILL.md:25:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":31,"severity":"medium","line_start":25},{"id":"external_commands:SKILL.md:31:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Lip-sync video to an audio track you supply | **Wan 2.7** (`audio_url`) |","category":"external_commands","line_end":43,"severity":"medium","line_start":31},{"id":"external_commands:SKILL.md:43:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"1. **RunComfy CLI** — `npm i -g @runcomfy/cli`","category":"external_commands","line_end":44,"severity":"medium","line_start":43},{"id":"external_commands:SKILL.md:44:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"2. **RunComfy account** — `runcomfy login` opens a browser device-code flow.","category":"external_commands","line_end":45,"severity":"medium","line_start":44},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"3. **CI / containers** — set `RUNCOMFY_TOKEN=<token>` instead of `runcomfy login`.","category":"external_commands","line_end":45,"severity":"medium","line_start":45},{"id":"external_commands:SKILL.md:49:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"### `wan-ai/wan-2-7/text-to-video`","category":"external_commands","line_end":53,"severity":"medium","line_start":49},{"id":"external_commands:SKILL.md:53:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `prompt` | string | yes | — | Up to ~5000 chars / ~1500 tokens. |","category":"external_commands","line_end":54,"severity":"medium","line_start":53},{"id":"external_commands:SKILL.md:54:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `audio_url` | string | no | — | WAV/MP3, 3–30s, ≤15MB. **Drives lip-sync.** Omit → background musi","category":"external_commands","line_end":55,"severity":"medium","line_start":54},{"id":"external_commands:SKILL.md:55:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `aspect_ratio` | enum | no | `16:9` | `16:9`, `9:16`, `1:1`, `4:3`, `3:4`. |","category":"external_commands","line_end":55,"severity":"medium","line_start":55},{"id":"external_commands:SKILL.md:56:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `resolution` | enum | no | `1080p` | `720p` or `1080p`. |","category":"external_commands","line_end":56,"severity":"medium","line_start":56},{"id":"external_commands:SKILL.md:57:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `duration` | enum | no | `5` | 2–15 (whole seconds). |","category":"external_commands","line_end":57,"severity":"medium","line_start":57},{"id":"external_commands:SKILL.md:58:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `negative_prompt` | string | no | — | Up to 500 chars. Concrete issues to avoid. |","category":"external_commands","line_end":59,"severity":"medium","line_start":58},{"id":"external_commands:SKILL.md:59:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `enable_prompt_expansion` | bool | no | true | Auto-rewrites short prompts. Disable for literal co","category":"external_commands","line_end":60,"severity":"medium","line_start":59},{"id":"external_commands:SKILL.md:60:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `seed` | int | no | — | 0..2^31-1. Reuse for variants. |","category":"external_commands","line_end":66,"severity":"medium","line_start":60},{"id":"external_commands:SKILL.md:66:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":70,"severity":"medium","line_start":66},{"id":"external_commands:SKILL.md:70:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":74,"severity":"medium","line_start":70},{"id":"external_commands:SKILL.md:74:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":83,"severity":"medium","line_start":74},{"id":"external_commands:SKILL.md:83:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":87,"severity":"medium","line_start":83},{"id":"external_commands:SKILL.md:87:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":95,"severity":"medium","line_start":87},{"id":"external_commands:SKILL.md:95:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":103,"severity":"medium","line_start":95},{"id":"external_commands:SKILL.md:103:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Use `negative_prompt` for concrete issues.** Good: \"no subtitles, no watermark, no flicker\". Bad (","category":"external_commands","line_end":105,"severity":"medium","line_start":103},{"id":"external_commands:SKILL.md:105:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Prompt expansion is on by default.** Short prompts get auto-rewritten by the model. For terse / li","category":"external_commands","line_end":107,"severity":"medium","line_start":105},{"id":"external_commands:SKILL.md:107:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Audio specs matter.** `audio_url` must be 3–30s, ≤15MB, WAV/MP3. Out-of-range files reject. Match ","category":"external_commands","line_end":121,"severity":"medium","line_start":107},{"id":"external_commands:SKILL.md:121:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| **Lip-synced ads with custom voiceover** | `audio_url` accepts your track |","category":"external_commands","line_end":122,"severity":"medium","line_start":121},{"id":"external_commands:SKILL.md:122:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| **Multi-language dub variants** | Same prompt, different `audio_url` per language |","category":"external_commands","line_end":131,"severity":"medium","line_start":122},{"id":"external_commands:SKILL.md:131:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":135,"severity":"medium","line_start":131},{"id":"external_commands:SKILL.md:135:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":137,"severity":"medium","line_start":135},{"id":"external_commands:SKILL.md:137:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Lip-synced spokesperson (with `audio_url`):**","category":"external_commands","line_end":139,"severity":"medium","line_start":137},{"id":"external_commands:SKILL.md:139:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":143,"severity":"medium","line_start":139},{"id":"external_commands:SKILL.md:143:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":147,"severity":"medium","line_start":143},{"id":"external_commands:SKILL.md:147:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":151,"severity":"medium","line_start":147},{"id":"external_commands:SKILL.md:151:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":177,"severity":"medium","line_start":151},{"id":"external_commands:SKILL.md:177:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"The skill invokes `runcomfy run wan-ai/wan-2-7/text-to-video` with a JSON body matching the schema. ","category":"external_commands","line_end":177,"severity":"medium","line_start":177},{"id":"external_commands:SKILL.md:181:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Token storage**: `runcomfy login` writes the API token to `~/.config/runcomfy/token.json` with m","category":"external_commands","line_end":181,"severity":"medium","line_start":181},{"id":"external_commands:SKILL.md:182:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Input boundary**: the user prompt is passed as a JSON string to the CLI via `--input`. The CLI d","category":"external_commands","line_end":184,"severity":"medium","line_start":182},{"id":"external_commands:SKILL.md:184:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Outbound endpoints**: only `model-api.runcomfy.net` (request submission) and `*.runcomfy.net` / ","category":"external_commands","line_end":184,"severity":"medium","line_start":184},{"id":"network:SKILL.md:13:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"homepage: https://www.runcomfy.com","category":"network","line_end":13,"severity":"low","line_start":13},{"id":"network:SKILL.md:19:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"[runcomfy.com](https://www.runcomfy.com/?utm_source=skills.sh&utm_medium=skill&utm_campaign=wan-2-7)","category":"network","line_end":19,"severity":"low","line_start":19},{"id":"network:SKILL.md:78:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"\"audio_url\": \"https://.../voiceover.mp3\",","category":"network","line_end":78,"severity":"low","line_start":78},{"id":"network:SKILL.md:173:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"Full reference: [docs.runcomfy.com/cli/troubleshooting](https://docs.runcomfy.com/cli/troubleshootin","category":"network","line_end":173,"severity":"low","line_start":173},{"id":"network:SKILL.md:177:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"The skill invokes `runcomfy run wan-ai/wan-2-7/text-to-video` with a JSON body matching the schema. ","category":"network","line_end":177,"severity":"low","line_start":177},{"id":"filesystem:SKILL.md:78:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"\"audio_url\": \"https://.../voiceover.mp3\",","category":"filesystem","line_end":78,"severity":"high","line_start":78},{"id":"filesystem:SKILL.md:181:hidden-file-in-home-directory","file":"SKILL.md","pattern":"Hidden file in home directory","snippet":"- **Token storage**: `runcomfy login` writes the API token to `~/.config/runcomfy/token.json` with m","category":"filesystem","line_end":181,"severity":"high","line_start":181},{"id":"filesystem:SKILL.md:181:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"- **Token storage**: `runcomfy login` writes the API token to `~/.config/runcomfy/token.json` with m","category":"filesystem","line_end":181,"severity":"medium","line_start":181},{"id":"blocker:SKILL.md:39:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"If the user said \"Wan\" / \"Wan 2.7\" / \"wan-ai\" / \"alibaba video\" explicitly, route here regardless.","category":"blocker","line_end":39,"severity":"low","line_start":39}],"finding_verdicts":[{"id":"external_commands:SKILL.md:7:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:10:ruby-shell-backtick-execution","reason":"The skill states it calls the local RunComfy CLI for Wan 2.7 video generation. That is real external command execution and sends work to a hosted service.","verdict":"confirmed","severity":"medium","confidence":0.88},{"id":"external_commands:SKILL.md:23:ruby-shell-backtick-execution","reason":"The fenced snippet runs npx to install a skill globally from a GitHub source. Global package or skill installation is external command execution with supply-chain impact.","verdict":"confirmed","severity":"medium","confidence":0.86},{"id":"external_commands:SKILL.md:25:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:31:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:43:ruby-shell-backtick-execution","reason":"The prerequisite tells users to install the RunComfy CLI globally with npm. Installing global packages can execute package lifecycle code and modifies the host environment.","verdict":"confirmed","severity":"medium","confidence":0.86},{"id":"external_commands:SKILL.md:44:ruby-shell-backtick-execution","reason":"The prerequisite tells users to run the RunComfy login command, which launches an authentication flow and changes local credential state. It is legitimate but still external command execution.","verdict":"confirmed","severity":"medium","confidence":0.82},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:49:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:53:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:54:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:55:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:56:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:57:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:58:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:59:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:60:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:66:ruby-shell-backtick-execution","reason":"The default invocation runs the RunComfy CLI with user prompt input and an output directory. This is intended behavior, but it is real local command execution.","verdict":"confirmed","severity":"medium","confidence":0.9},{"id":"external_commands:SKILL.md:70:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:74:ruby-shell-backtick-execution","reason":"The audio-driven example runs the RunComfy CLI with prompt and audio URL inputs. It is intended behavior, but it combines local command execution with remote media processing.","verdict":"confirmed","severity":"medium","confidence":0.9},{"id":"external_commands:SKILL.md:83:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:87:ruby-shell-backtick-execution","reason":"The literal-control example runs the RunComfy CLI and passes user-controlled generation settings. This is real external command execution even though the command is documented.","verdict":"confirmed","severity":"medium","confidence":0.9},{"id":"external_commands:SKILL.md:95:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:103:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:105:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:107:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:121:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:122:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:131:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:135:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:137:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:139:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:143:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:147:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:151:ruby-shell-backtick-execution","reason":"The match is Markdown inline code, a table field name, or a fenced prompt example rather than executable code. No shell command is being invoked at this location.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:177:ruby-shell-backtick-execution","reason":"The prose confirms the skill invokes the RunComfy CLI, posts to the model API, polls the request, and downloads results. That confirms the external command and network workflow.","verdict":"confirmed","severity":"medium","confidence":0.93},{"id":"external_commands:SKILL.md:181:ruby-shell-backtick-execution","reason":"The line confirms the login command writes an API token to a local config path. It documents a credential-changing command, so the external command usage is security-sensitive.","verdict":"confirmed","severity":"medium","confidence":0.78},{"id":"external_commands:SKILL.md:182:ruby-shell-backtick-execution","reason":"The line explains that prompt input is passed as JSON and is not shell-expanded. It discusses the input boundary rather than instructing a shell command.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:184:ruby-shell-backtick-execution","reason":"The line lists outbound endpoint names in Markdown code formatting. It does not contain a shell command or dynamic command execution.","verdict":"false_positive","confidence":0.86},{"id":"network:SKILL.md:13:hardcoded-url","reason":"The URL is homepage metadata for RunComfy, not an unrequested network call. It is a documentation link rather than executable behavior.","verdict":"false_positive","confidence":0.86},{"id":"network:SKILL.md:19:hardcoded-url","reason":"The URLs are Markdown links to the provider, model page, and GitHub repository. They document the skill source and service rather than performing network activity.","verdict":"false_positive","confidence":0.86},{"id":"network:SKILL.md:78:hardcoded-url","reason":"The value is a placeholder audio URL in an example, not a hardcoded destination controlled by the skill. The broader third-party media transfer risk is covered separately.","verdict":"false_positive","confidence":0.86},{"id":"network:SKILL.md:173:hardcoded-url","reason":"The URL points to RunComfy troubleshooting documentation. It is a reference link and does not cause the agent to contact that endpoint.","verdict":"false_positive","confidence":0.86},{"id":"network:SKILL.md:177:hardcoded-url","reason":"The line identifies the concrete RunComfy model API endpoint and output download domains. This is intended behavior, but it is real outbound network traffic.","verdict":"confirmed","severity":"medium","confidence":0.92},{"id":"filesystem:SKILL.md:78:path-traversal-sequence","reason":"The match comes from the ellipsis in the placeholder URL https://.../voiceover.mp3. It is not a filesystem path and does not traverse directories.","verdict":"false_positive","confidence":0.86},{"id":"filesystem:SKILL.md:181:hidden-file-in-home-directory","reason":"The line documents the RunComfy CLI credential path and states the token file uses owner-only permissions. It is not hidden malicious file access by the skill itself.","verdict":"false_positive","confidence":0.86},{"id":"filesystem:SKILL.md:181:hidden-file-access","reason":"The line documents the RunComfy CLI credential path and states the token file uses owner-only permissions. It is not hidden malicious file access by the skill itself.","verdict":"false_positive","confidence":0.86},{"id":"blocker:SKILL.md:39:system-reconnaissance","reason":"The line routes explicit Wan 2.7 model requests to this skill. It does not inspect the host, enumerate system data, or ask the agent to perform reconnaissance.","verdict":"false_positive","confidence":0.86}],"semantic_findings":[{"title":"Third-Party Prompt and Media Transfer","severity":"medium","locations":[{"file":"SKILL.md","line_end":177,"line_start":177},{"file":"SKILL.md","line_end":183,"line_start":183}],"confidence":0.9,"description":"The skill sends the prompt body to RunComfy hosted Model API and says external media URLs are fetched by RunComfy model servers. Users could expose confidential prompts, audio, or private media URLs to a third party.","confidence_reasoning":"The workflow explicitly describes posting requests to RunComfy and server-side fetching of supplied URLs. This is clear privacy and data-handling risk, although it is documented and expected."}],"subject_marketplace_commit_sha":"3e4b6c31a74a3bd1a291c98cf585d720cb9fbc88","subject_content_hash":"0c38b830e5a8273b62e61069161af937441dc0bedd5567da8032ebec88e6f6b9","subject_tree_hash":"488cc712067a56e5655d035e27a0606b1a98a310bfda4bc537060f700f305202","subject_plugin_path":"skills/agentspace-so/wan-2-7","audit_payload_hash":"a9d80fd346f9cd9c69e919e6b9cfbbc6","confirmed_risk_level":null,"scanner_version":null,"policy_version":null,"subject":{"marketplaceCommitSha":"3e4b6c31a74a3bd1a291c98cf585d720cb9fbc88","contentHash":"0c38b830e5a8273b62e61069161af937441dc0bedd5567da8032ebec88e6f6b9","treeHash":"488cc712067a56e5655d035e27a0606b1a98a310bfda4bc537060f700f305202","pluginPath":"skills/agentspace-so/wan-2-7","auditPayloadHash":"a9d80fd346f9cd9c69e919e6b9cfbbc6"},"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":10,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":true}}