{"data":{"skill":{"slug":"agentspace-so-happyhorse-1-0","name":"happyhorse-1-0","icon":"📦","repo":"https://github.com/agentspace-so/runcomfy-agent-skills/tree/main/happyhorse-1-0/","status":"approved","author":"agentspace-so","authorVersion":null,"skillstoreRevision":null},"audit":{"id":"8b30528c-69ba-4264-ba71-6a0017f06745","skill_id":"6dc783c3-c1bb-406b-87c3-27e6ed80b487","version":5,"content_hash":"b8c1bce225ca735ab363c65445a942dc","risk_level":"safe","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"The real risks are the intended RunComfy CLI executions, global setup commands, and the disclosed POST to the RunComfy Model API. Most other static findings are Markdown backtick, REST ellipsis, documentation link, or standard credential-store false positives.","remediation":[{"issue":"Local CLI and package-manager commands are part of normal use.","severity":"medium","suggestion":"Require clear user confirmation before install, login, or generation commands, and document how to verify the RunComfy CLI package."},{"issue":"Prompts and bearer-token authenticated requests are sent to RunComfy.","severity":"medium","suggestion":"Keep the outbound endpoint disclosure prominent and remind users not to submit sensitive prompt data unless approved."},{"issue":"Generated files are downloaded into a user-selected output directory.","severity":"low","suggestion":"Recommend a dedicated output directory and preserve the documented host whitelist and file-size cap."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":10,"line_start":10},{"file":"SKILL.md","line_end":26,"line_start":24},{"file":"SKILL.md","line_end":44,"line_start":26},{"file":"SKILL.md","line_end":45,"line_start":44},{"file":"SKILL.md","line_end":46,"line_start":45},{"file":"SKILL.md","line_end":46,"line_start":46},{"file":"SKILL.md","line_end":54,"line_start":50},{"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":58,"line_start":57},{"file":"SKILL.md","line_end":59,"line_start":58},{"file":"SKILL.md","line_end":65,"line_start":59},{"file":"SKILL.md","line_end":69,"line_start":65},{"file":"SKILL.md","line_end":73,"line_start":69},{"file":"SKILL.md","line_end":82,"line_start":73},{"file":"SKILL.md","line_end":86,"line_start":82},{"file":"SKILL.md","line_end":90,"line_start":86},{"file":"SKILL.md","line_end":92,"line_start":90},{"file":"SKILL.md","line_end":92,"line_start":92},{"file":"SKILL.md","line_end":98,"line_start":98},{"file":"SKILL.md","line_end":104,"line_start":102},{"file":"SKILL.md","line_end":104,"line_start":104},{"file":"SKILL.md","line_end":133,"line_start":126},{"file":"SKILL.md","line_end":137,"line_start":133},{"file":"SKILL.md","line_end":143,"line_start":137},{"file":"SKILL.md","line_end":147,"line_start":143},{"file":"SKILL.md","line_end":152,"line_start":147},{"file":"SKILL.md","line_end":158,"line_start":152},{"file":"SKILL.md","line_end":163,"line_start":158},{"file":"SKILL.md","line_end":169,"line_start":163},{"file":"SKILL.md","line_end":178,"line_start":169},{"file":"SKILL.md","line_end":179,"line_start":178},{"file":"SKILL.md","line_end":180,"line_start":179},{"file":"SKILL.md","line_end":180,"line_start":180},{"file":"SKILL.md","line_end":181,"line_start":181},{"file":"SKILL.md","line_end":182,"line_start":182},{"file":"SKILL.md","line_end":191,"line_start":191},{"file":"SKILL.md","line_end":194,"line_start":192},{"file":"SKILL.md","line_end":194,"line_start":194}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":14,"line_start":14},{"file":"SKILL.md","line_end":20,"line_start":20},{"file":"SKILL.md","line_end":174,"line_start":174},{"file":"SKILL.md","line_end":179,"line_start":179}]},{"factor":"filesystem","evidence":[{"file":"SKILL.md","line_end":180,"line_start":180},{"file":"SKILL.md","line_end":181,"line_start":181},{"file":"SKILL.md","line_end":182,"line_start":182},{"file":"SKILL.md","line_end":191,"line_start":191},{"file":"SKILL.md","line_end":191,"line_start":191}]}],"critical_findings":[],"high_findings":[],"medium_findings":[{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":10,"line_start":10}],"confidence":0.82,"description":"Calls `runcomfy run happyhorse/happyhorse-1-0/text-to-video` through","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The front matter states the skill calls the local RunComfy CLI. That is an intended external command execution path, even though the command target is specific."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":26,"line_start":24}],"confidence":0.78,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The fenced block contains an npx command that installs the skill globally. Running package-manager installation commands is a real supply-chain and system-modification risk."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":45,"line_start":44}],"confidence":0.8,"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 run a global npm install for the RunComfy CLI. This is legitimate setup guidance but still executes external package-manager code."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":46,"line_start":45}],"confidence":0.72,"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 runcomfy login, which invokes a local CLI authentication flow. This is expected behavior but involves local command execution and credential handling."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":69,"line_start":65}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The example invokes runcomfy run with user-supplied prompt data and an output directory. The command is hardcoded, but it still executes a local CLI process."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":82,"line_start":73}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The vertical short example invokes runcomfy run with generation settings and user prompt data. This is intended external command execution through the local CLI."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":90,"line_start":86}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The cheaper test-pass example invokes runcomfy run with user prompt data. The command target is fixed, but it remains a real external command surface."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":179,"line_start":178}],"confidence":0.84,"description":"1. The skill invokes `runcomfy run happyhorse/happyhorse-1-0/text-to-video` with a JSON body matchin","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The how-it-works section explicitly says the skill invokes runcomfy run with a JSON body. That confirms the intended local CLI execution behavior."},{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":179,"line_start":179}],"confidence":0.88,"description":"2. The CLI POSTs to `https://model-api.runcomfy.net/v1/models/happyhorse/happyhorse-1-0/text-to-vide","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The documented CLI POST sends the user bearer token and prompt data to the RunComfy Model API. This is disclosed and expected, but it is a real outbound data flow."}],"low_findings":[],"dangerous_patterns":[],"files_scanned":1,"total_lines":196,"audit_model":"codex","audited_at":"2026-07-07T23:42:37.171+00:00","created_at":"2026-07-08T01:28:57.401544+00:00","static_findings":[{"id":"external_commands:SKILL.md:10:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Calls `runcomfy run happyhorse/happyhorse-1-0/text-to-video` through","category":"external_commands","line_end":10,"severity":"medium","line_start":10},{"id":"external_commands:SKILL.md:24:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":26,"severity":"medium","line_start":24},{"id":"external_commands:SKILL.md:26:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":44,"severity":"medium","line_start":26},{"id":"external_commands:SKILL.md:44: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":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":"2. **RunComfy account** — `runcomfy login` opens a browser device-code flow.","category":"external_commands","line_end":46,"severity":"medium","line_start":45},{"id":"external_commands:SKILL.md:46: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":46,"severity":"medium","line_start":46},{"id":"external_commands:SKILL.md:50:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"### `happyhorse/happyhorse-1-0/text-to-video`","category":"external_commands","line_end":54,"severity":"medium","line_start":50},{"id":"external_commands:SKILL.md:54:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `prompt` | string | yes | — | Up to 2,500 chars. 6 languages (CN/EN/JP/KR/DE/FR). |","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` only. |","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` | int | no | 5 | 3–15 seconds. |","category":"external_commands","line_end":58,"severity":"medium","line_start":57},{"id":"external_commands:SKILL.md:58:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `seed` | int | no | 0 | 0..2^31-1. Reuse for variant comparisons. |","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":"| `watermark` | bool | no | true | Provider watermark. |","category":"external_commands","line_end":65,"severity":"medium","line_start":59},{"id":"external_commands:SKILL.md:65:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":69,"severity":"medium","line_start":65},{"id":"external_commands:SKILL.md:69:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":73,"severity":"medium","line_start":69},{"id":"external_commands:SKILL.md:73:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":82,"severity":"medium","line_start":73},{"id":"external_commands:SKILL.md:82:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":86,"severity":"medium","line_start":82},{"id":"external_commands:SKILL.md:86:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":90,"severity":"medium","line_start":86},{"id":"external_commands:SKILL.md:90:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":92,"severity":"medium","line_start":90},{"id":"external_commands:SKILL.md:92:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"The CLI submits, polls every 2s until terminal, then downloads any `*.runcomfy.net` / `*.runcomfy.co","category":"external_commands","line_end":92,"severity":"medium","line_start":92},{"id":"external_commands:SKILL.md:98:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Camera + shot in plain English.** Front-load the shot: `\"Wide shot. ...\"` / `\"Tracking shot. ...\"`","category":"external_commands","line_end":98,"severity":"medium","line_start":98},{"id":"external_commands:SKILL.md:102:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Multi-shot consistency** — when describing two beats, restate the anchor at each: `\"Shot 1: tall w","category":"external_commands","line_end":104,"severity":"medium","line_start":102},{"id":"external_commands:SKILL.md:104:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Audio direction** — say what you want to hear: `\"distant temple bells, footsteps on wet pavement, ","category":"external_commands","line_end":104,"severity":"medium","line_start":104},{"id":"external_commands:SKILL.md:126:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":133,"severity":"medium","line_start":126},{"id":"external_commands:SKILL.md:133:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":137,"severity":"medium","line_start":133},{"id":"external_commands:SKILL.md:137:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":143,"severity":"medium","line_start":137},{"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":152,"severity":"medium","line_start":147},{"id":"external_commands:SKILL.md:152:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":158,"severity":"medium","line_start":152},{"id":"external_commands:SKILL.md:158:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Audio is in-pass only** — you can't pass external audio to drive lip-sync. For audio-driven lip-","category":"external_commands","line_end":163,"severity":"medium","line_start":158},{"id":"external_commands:SKILL.md:163:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"The `runcomfy` CLI uses sysexits-style codes:","category":"external_commands","line_end":169,"severity":"medium","line_start":163},{"id":"external_commands:SKILL.md:169:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| 65 | bad input JSON / schema mismatch (e.g. `duration: 30` would 422) |","category":"external_commands","line_end":178,"severity":"medium","line_start":169},{"id":"external_commands:SKILL.md:178:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"1. The skill invokes `runcomfy run happyhorse/happyhorse-1-0/text-to-video` with a JSON body matchin","category":"external_commands","line_end":179,"severity":"medium","line_start":178},{"id":"external_commands:SKILL.md:179:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"2. The CLI POSTs to `https://model-api.runcomfy.net/v1/models/happyhorse/happyhorse-1-0/text-to-vide","category":"external_commands","line_end":180,"severity":"medium","line_start":179},{"id":"external_commands:SKILL.md:180:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"3. The Model API returns a `request_id`; the CLI polls `GET .../requests/<id>/status` every 2 second","category":"external_commands","line_end":180,"severity":"medium","line_start":180},{"id":"external_commands:SKILL.md:181:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"4. On terminal status, the CLI fetches `GET .../requests/<id>/result` and downloads any URL whose ho","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":"5. `Ctrl-C` while polling sends `POST .../requests/<id>/cancel` so you don't get billed for GPU you ","category":"external_commands","line_end":182,"severity":"medium","line_start":182},{"id":"external_commands:SKILL.md:191: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":191,"severity":"medium","line_start":191},{"id":"external_commands:SKILL.md:192: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":194,"severity":"medium","line_start":192},{"id":"external_commands:SKILL.md:194: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":194,"severity":"medium","line_start":194},{"id":"network:SKILL.md:14:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"homepage: https://www.runcomfy.com","category":"network","line_end":14,"severity":"low","line_start":14},{"id":"network:SKILL.md:20:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"[runcomfy.com](https://www.runcomfy.com/?utm_source=skills.sh&utm_medium=skill&utm_campaign=happyhor","category":"network","line_end":20,"severity":"low","line_start":20},{"id":"network:SKILL.md:174: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":174,"severity":"low","line_start":174},{"id":"network:SKILL.md:179:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"2. The CLI POSTs to `https://model-api.runcomfy.net/v1/models/happyhorse/happyhorse-1-0/text-to-vide","category":"network","line_end":179,"severity":"low","line_start":179},{"id":"filesystem:SKILL.md:180:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"3. The Model API returns a `request_id`; the CLI polls `GET .../requests/<id>/status` every 2 second","category":"filesystem","line_end":180,"severity":"high","line_start":180},{"id":"filesystem:SKILL.md:181:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"4. On terminal status, the CLI fetches `GET .../requests/<id>/result` and downloads any URL whose ho","category":"filesystem","line_end":181,"severity":"high","line_start":181},{"id":"filesystem:SKILL.md:182:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"5. `Ctrl-C` while polling sends `POST .../requests/<id>/cancel` so you don't get billed for GPU you ","category":"filesystem","line_end":182,"severity":"high","line_start":182},{"id":"filesystem:SKILL.md:191: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":191,"severity":"high","line_start":191},{"id":"filesystem:SKILL.md:191: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":191,"severity":"medium","line_start":191},{"id":"blocker:SKILL.md:40:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"If the user said \"HappyHorse\" / \"happy horse video\" explicitly, route here regardless.","category":"blocker","line_end":40,"severity":"low","line_start":40}],"finding_verdicts":[{"id":"external_commands:SKILL.md:10:ruby-shell-backtick-execution","reason":"The front matter states the skill calls the local RunComfy CLI. That is an intended external command execution path, even though the command target is specific.","verdict":"confirmed","severity":"medium","confidence":0.82},{"id":"external_commands:SKILL.md:24:ruby-shell-backtick-execution","reason":"The fenced block contains an npx command that installs the skill globally. Running package-manager installation commands is a real supply-chain and system-modification risk.","verdict":"confirmed","severity":"medium","confidence":0.78},{"id":"external_commands:SKILL.md:26:ruby-shell-backtick-execution","reason":"The flagged text is a Markdown fence boundary, not executable shell content. The nearby install command is handled by a separate verdict.","verdict":"false_positive","confidence":0.88},{"id":"external_commands:SKILL.md:44:ruby-shell-backtick-execution","reason":"The prerequisite tells users to run a global npm install for the RunComfy CLI. This is legitimate setup guidance but still executes external package-manager code.","verdict":"confirmed","severity":"medium","confidence":0.8},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","reason":"The prerequisite tells users to run runcomfy login, which invokes a local CLI authentication flow. This is expected behavior but involves local command execution and credential handling.","verdict":"confirmed","severity":"medium","confidence":0.72},{"id":"external_commands:SKILL.md:46:ruby-shell-backtick-execution","reason":"This line documents a token environment variable and repeats the login command reference. It does not introduce a separate shell execution path beyond the login finding already covered.","verdict":"false_positive","confidence":0.82},{"id":"external_commands:SKILL.md:50:ruby-shell-backtick-execution","reason":"The backticked text is a RunComfy endpoint identifier in documentation. It is not a shell command or dynamic execution surface.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:SKILL.md:54:ruby-shell-backtick-execution","reason":"The backticked value is a schema field name in a Markdown table. It is not executable code.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:55:ruby-shell-backtick-execution","reason":"The backticked values are aspect-ratio enum names in documentation. They are not shell commands.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:56:ruby-shell-backtick-execution","reason":"The backticked values are resolution enum names in documentation. They are not executable commands.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:57:ruby-shell-backtick-execution","reason":"The backticked value is a duration field name in the input schema. It does not execute code.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:SKILL.md:58:ruby-shell-backtick-execution","reason":"The backticked value is a seed field name in documentation. It is not shell execution.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:SKILL.md:59:ruby-shell-backtick-execution","reason":"The backticked value is a watermark field name in the schema table. It is not executable code.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:SKILL.md:65:ruby-shell-backtick-execution","reason":"The example invokes runcomfy run with user-supplied prompt data and an output directory. The command is hardcoded, but it still executes a local CLI process.","verdict":"confirmed","severity":"medium","confidence":0.86},{"id":"external_commands:SKILL.md:69:ruby-shell-backtick-execution","reason":"The flagged text is a Markdown fence boundary after a command example. It does not add an independent execution path.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:73:ruby-shell-backtick-execution","reason":"The vertical short example invokes runcomfy run with generation settings and user prompt data. This is intended external command execution through the local CLI.","verdict":"confirmed","severity":"medium","confidence":0.86},{"id":"external_commands:SKILL.md:82:ruby-shell-backtick-execution","reason":"The flagged text is a Markdown fence boundary between examples. The actual command example is adjudicated separately.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:86:ruby-shell-backtick-execution","reason":"The cheaper test-pass example invokes runcomfy run with user prompt data. The command target is fixed, but it remains a real external command surface.","verdict":"confirmed","severity":"medium","confidence":0.86},{"id":"external_commands:SKILL.md:90:ruby-shell-backtick-execution","reason":"The flagged text is a Markdown fence boundary before explanatory prose. It is not a command invocation.","verdict":"false_positive","confidence":0.91},{"id":"external_commands:SKILL.md:92:ruby-shell-backtick-execution","reason":"The backticked text describes allowed output URL host patterns. It is not shell syntax or code execution.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:98:ruby-shell-backtick-execution","reason":"The backticked examples are quoted prompt phrases for camera direction. They are not commands.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:SKILL.md:102:ruby-shell-backtick-execution","reason":"The backticked text is a natural-language sample prompt. It is not executable shell content.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:SKILL.md:104:ruby-shell-backtick-execution","reason":"The backticked text is a natural-language audio prompt example. It is not code execution.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:SKILL.md:126:ruby-shell-backtick-execution","reason":"This fenced block contains a sample video prompt, not shell commands. It is documentation for model prompting.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:133:ruby-shell-backtick-execution","reason":"The flagged fence boundary separates sample prompt content. It is not executable code.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:137:ruby-shell-backtick-execution","reason":"This fenced block contains a multi-shot text prompt. It is not a shell command.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:143:ruby-shell-backtick-execution","reason":"The flagged fence boundary separates natural-language prompt examples. It is not executable content.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:147:ruby-shell-backtick-execution","reason":"This fenced block contains a vertical video prompt example. It does not execute code.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:152:ruby-shell-backtick-execution","reason":"The flagged fence boundary follows a sample prompt and precedes limitations. It is not a command.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:158:ruby-shell-backtick-execution","reason":"The backticked value is an input parameter name for a different model. It is not shell execution.","verdict":"false_positive","confidence":0.91},{"id":"external_commands:SKILL.md:163:ruby-shell-backtick-execution","reason":"The backticked word names the RunComfy CLI while explaining exit codes. It is documentation, not a command invocation.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:169:ruby-shell-backtick-execution","reason":"The backticked duration value appears in an exit-code example. It is not executable shell content.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:178:ruby-shell-backtick-execution","reason":"The how-it-works section explicitly says the skill invokes runcomfy run with a JSON body. That confirms the intended local CLI execution behavior.","verdict":"confirmed","severity":"medium","confidence":0.84},{"id":"external_commands:SKILL.md:179:ruby-shell-backtick-execution","reason":"The backticked text is an HTTPS API URL, not a shell command. The outbound network behavior is adjudicated under the network finding for this line.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:180:ruby-shell-backtick-execution","reason":"The backticked strings are request identifiers and HTTP method examples. They do not execute local commands.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:181:ruby-shell-backtick-execution","reason":"The backticked strings describe HTTP result fetching and host suffixes. They are not shell commands.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:182:ruby-shell-backtick-execution","reason":"The backticked strings describe Ctrl-C behavior and an HTTP cancel request. They are not a shell execution path.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:191:ruby-shell-backtick-execution","reason":"This line documents token storage and credential options for the CLI. The login command itself is already covered, and this text is not a new execution path.","verdict":"false_positive","confidence":0.82},{"id":"external_commands:SKILL.md:192:ruby-shell-backtick-execution","reason":"The backticked input flag appears in a statement that the prompt is sent as JSON without shell expansion. This is documentation of an injection mitigation, not execution.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:194:ruby-shell-backtick-execution","reason":"The backticked text lists allowed outbound endpoint hosts. It is not a shell command.","verdict":"false_positive","confidence":0.92},{"id":"network:SKILL.md:14:hardcoded-url","reason":"This is a public homepage URL in front matter. It does not cause network access by itself.","verdict":"false_positive","confidence":0.93},{"id":"network:SKILL.md:20:hardcoded-url","reason":"These are documentation links to RunComfy and GitHub. They are not hidden callbacks or runtime network requests.","verdict":"false_positive","confidence":0.91},{"id":"network:SKILL.md:174:hardcoded-url","reason":"This is a troubleshooting documentation link. It does not transmit user data or trigger runtime network access.","verdict":"false_positive","confidence":0.92},{"id":"network:SKILL.md:179:hardcoded-url","reason":"The documented CLI POST sends the user bearer token and prompt data to the RunComfy Model API. This is disclosed and expected, but it is a real outbound data flow.","verdict":"confirmed","severity":"medium","confidence":0.88},{"id":"filesystem:SKILL.md:180:path-traversal-sequence","reason":"The ... text is an ellipsis in a REST API path example, not a filesystem traversal sequence.","verdict":"false_positive","confidence":0.96},{"id":"filesystem:SKILL.md:181:path-traversal-sequence","reason":"The ... text is an ellipsis in a REST API path example. No local filesystem path traversal is present.","verdict":"false_positive","confidence":0.96},{"id":"filesystem:SKILL.md:182:path-traversal-sequence","reason":"The ... text is an ellipsis in a REST API path example. It is not used as a local file path.","verdict":"false_positive","confidence":0.96},{"id":"filesystem:SKILL.md:191:hidden-file-in-home-directory","reason":"The path is documented token storage under the standard user config directory with mode 0600. There is no evidence of hidden persistence or unauthorized file access.","verdict":"false_positive","confidence":0.86},{"id":"filesystem:SKILL.md:191:hidden-file-access","reason":"The hidden path is a documented CLI credential store, not arbitrary hidden-file reads. The text also offers an environment-token alternative for CI.","verdict":"false_positive","confidence":0.86},{"id":"blocker:SKILL.md:40:system-reconnaissance","reason":"This is a routing rule for explicit HappyHorse user requests. It does not ask the model to inspect system details or perform reconnaissance.","verdict":"false_positive","confidence":0.93}],"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":9,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":false}}