{"data":{"skill":{"slug":"agentspace-so-nano-banana-edit","name":"nano-banana-edit","icon":"📦","repo":"https://github.com/agentspace-so/runcomfy-agent-skills/tree/main/nano-banana-edit/","status":"approved","author":"agentspace-so","authorVersion":null,"skillstoreRevision":null},"audit":{"id":"deac7406-3f31-4324-bad9-8158b4795454","skill_id":"69c2f051-0cac-438a-b37a-ff0358f4f4dd","version":5,"content_hash":"v2:d46e62089a6dfc9e14ea02eebd9b8e2ad2dfe1f4:288b68d636f05f603cb84341e9cfcdc37c9ead143ea55c130667591028586d0c:a8ecc5abdda465a8490ab5a278ec86b6187bfab71ea81e177fb463af5dd6f73c:8e55796e6e3f9967d355b150e8280486","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 findings are false positives caused by Markdown backticks, example URLs, and abbreviated URL placeholders. Confirmed risks include RunComfy CLI execution, global CLI installation, third-party API processing, output downloads, and login side effects. No prompt injection attempt was found.","remediation":[{"issue":"External CLI execution and global installation are required.","severity":"medium","suggestion":"Recommend a pinned RunComfy CLI version, verify the package source, and ask users to confirm before running install or edit commands."},{"issue":"Prompts and image URL references are processed by RunComfy.","severity":"medium","suggestion":"Add a short privacy warning before examples and advise users not to send confidential assets without approval."},{"issue":"RunComfy login stores an API token in the user config directory.","severity":"low","suggestion":"Document token revocation, avoid logging token values, and prefer RUNCOMFY_TOKEN in controlled CI environments."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":10,"line_start":10},{"file":"SKILL.md","line_end":25,"line_start":23},{"file":"SKILL.md","line_end":42,"line_start":25},{"file":"SKILL.md","line_end":43,"line_start":42},{"file":"SKILL.md","line_end":44,"line_start":43},{"file":"SKILL.md","line_end":44,"line_start":44},{"file":"SKILL.md","line_end":52,"line_start":48},{"file":"SKILL.md","line_end":53,"line_start":52},{"file":"SKILL.md","line_end":54,"line_start":53},{"file":"SKILL.md","line_end":55,"line_start":54},{"file":"SKILL.md","line_end":56,"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":58,"line_start":58},{"file":"SKILL.md","line_end":60,"line_start":59},{"file":"SKILL.md","line_end":61,"line_start":60},{"file":"SKILL.md","line_end":67,"line_start":61},{"file":"SKILL.md","line_end":74,"line_start":67},{"file":"SKILL.md","line_end":78,"line_start":74},{"file":"SKILL.md","line_end":87,"line_start":78},{"file":"SKILL.md","line_end":91,"line_start":87},{"file":"SKILL.md","line_end":98,"line_start":91},{"file":"SKILL.md","line_end":102,"line_start":98},{"file":"SKILL.md","line_end":106,"line_start":102},{"file":"SKILL.md","line_end":106,"line_start":106},{"file":"SKILL.md","line_end":132,"line_start":125},{"file":"SKILL.md","line_end":135,"line_start":132},{"file":"SKILL.md","line_end":139,"line_start":135},{"file":"SKILL.md","line_end":143,"line_start":139},{"file":"SKILL.md","line_end":147,"line_start":143},{"file":"SKILL.md","line_end":152,"line_start":147},{"file":"SKILL.md","line_end":177,"line_start":152},{"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":71,"line_start":71},{"file":"SKILL.md","line_end":82,"line_start":82},{"file":"SKILL.md","line_end":95,"line_start":95},{"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":71,"line_start":71},{"file":"SKILL.md","line_end":82,"line_start":82},{"file":"SKILL.md","line_end":95,"line_start":95},{"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":"Calls `runcomfy run google/nano-banana-2/edit` through the local","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The skill states it calls the local RunComfy CLI, which is intentional external command execution on the user machine. The command name is fixed, but users must trust the installed CLI and its network behavior."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":25,"line_start":23}],"confidence":0.82,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The bash block instructs users to run a global skill installation command from a community GitHub source. This is documented setup guidance, but it is still a real supply-chain and external-command exposure."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":43,"line_start":42}],"confidence":0.84,"description":"1. **RunComfy CLI** — `npm i -g @runcomfy/cli`","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The prerequisite asks users to install the RunComfy CLI globally through npm. Installing and later executing a global CLI is a real external-command and package trust risk."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":44,"line_start":43}],"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 asks users to execute runcomfy login, which starts an authentication flow and changes local credential state. This is expected for the service but remains a real command with security impact."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":74,"line_start":67}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The bash example runs runcomfy run with image URLs and an output directory, causing local command execution and remote API activity. The command is fixed, but it writes outputs and contacts RunComfy."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":87,"line_start":78}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The batch edit example runs the RunComfy CLI against multiple image URLs and writes files to an output directory. This is intended behavior, but it is real external command execution."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":98,"line_start":91}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The targeted edit example invokes runcomfy run with user-selected input data and an output directory. The fixed command limits injection risk, but it still executes a local CLI and performs network work."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":177,"line_start":177}],"confidence":0.9,"description":"The skill invokes `runcomfy run google/nano-banana-2/edit` with a JSON body matching the schema. The","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The how-it-works section confirms the skill invokes runcomfy, posts to model-api.runcomfy.net, polls, fetches results, and downloads output. This is intentional external command, network, and file-write behavior."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":181,"line_start":181}],"confidence":0.8,"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 security section documents running runcomfy login and persisting an API token. This is expected CLI behavior, but it is still a command with credential side effects."},{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":177,"line_start":177}],"confidence":0.9,"description":"The skill invokes `runcomfy run google/nano-banana-2/edit` with a JSON body matching the schema. The","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The skill documents posting requests to the RunComfy model API and downloading generated outputs from RunComfy domains. This expected service behavior still transfers user edit data to a third party."},{"title":"Third-Party Image and Prompt Processing","locations":[{"file":"SKILL.md","line_end":184,"line_start":177}],"confidence":0.88,"description":"The skill sends edit prompts and image URL references to the RunComfy model API, and RunComfy fetches user-provided media URLs. Users can expose private creative assets if they provide confidential URLs or prompts.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"Lines 177-184 describe posting to RunComfy, downloading outputs, and remote fetching of image URLs. The behavior is disclosed and expected, so this is a privacy risk rather than evidence of malicious exfiltration."}],"low_findings":[],"dangerous_patterns":[],"files_scanned":1,"total_lines":186,"audit_model":"codex","audited_at":"2026-07-08T00:23:01.784+00:00","created_at":"2026-07-08T01:28:58.992082+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 google/nano-banana-2/edit` through the local","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":42,"severity":"medium","line_start":25},{"id":"external_commands:SKILL.md:42: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":43,"severity":"medium","line_start":42},{"id":"external_commands:SKILL.md:43: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":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":"3. **CI / containers** — set `RUNCOMFY_TOKEN=<token>` instead of `runcomfy login`.","category":"external_commands","line_end":44,"severity":"medium","line_start":44},{"id":"external_commands:SKILL.md:48:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"### `google/nano-banana-2/edit`","category":"external_commands","line_end":52,"severity":"medium","line_start":48},{"id":"external_commands:SKILL.md:52:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `prompt` | string | yes | — | Edit instruction. Lead with preservation, end with the change. |","category":"external_commands","line_end":53,"severity":"medium","line_start":52},{"id":"external_commands:SKILL.md:53:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `image_urls` | array | yes | — | **1–20** publicly-fetchable HTTPS URLs. |","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":"| `number_of_images` | int | no | 1 | 1–4 outputs per call. |","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":"| `seed` | int | no | — | Reproducibility. |","category":"external_commands","line_end":56,"severity":"medium","line_start":55},{"id":"external_commands:SKILL.md:56:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `aspect_ratio` | enum | no | `auto` | `auto` (follows input) or fixed ratios — lock for batch cons","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":"| `resolution` | enum | no | `1K` | `0.5K` / `1K` / `2K` / `4K`. |","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":"| `output_format` | enum | no | `png` | `png` / `jpeg` / `webp`. |","category":"external_commands","line_end":58,"severity":"medium","line_start":58},{"id":"external_commands:SKILL.md:59:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `safety_tolerance` | int | no | 4 | 1 (strict) – 6 (permissive). |","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":"| `limit_generations` | bool | no | — | If true, restricts each round to one output. |","category":"external_commands","line_end":61,"severity":"medium","line_start":60},{"id":"external_commands:SKILL.md:61:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `enable_web_search` | bool | no | false | Web grounding (extra cost / latency). |","category":"external_commands","line_end":67,"severity":"medium","line_start":61},{"id":"external_commands:SKILL.md:67:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":74,"severity":"medium","line_start":67},{"id":"external_commands:SKILL.md:74:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":78,"severity":"medium","line_start":74},{"id":"external_commands:SKILL.md:78:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":87,"severity":"medium","line_start":78},{"id":"external_commands:SKILL.md:87:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":91,"severity":"medium","line_start":87},{"id":"external_commands:SKILL.md:91:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":98,"severity":"medium","line_start":91},{"id":"external_commands:SKILL.md:98:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":102,"severity":"medium","line_start":98},{"id":"external_commands:SKILL.md:102:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Preservation first, change last.** Always lead with `\"Keep [identity / pose / clothing / brand / f","category":"external_commands","line_end":106,"severity":"medium","line_start":102},{"id":"external_commands:SKILL.md:106:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Batch consistency** — when editing a series, lock `aspect_ratio` and `resolution`. Use the same pr","category":"external_commands","line_end":106,"severity":"medium","line_start":106},{"id":"external_commands:SKILL.md:125:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| **A/B variants for ad creative** | Seed lock + multiple `number_of_images` |","category":"external_commands","line_end":132,"severity":"medium","line_start":125},{"id":"external_commands:SKILL.md:132:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":135,"severity":"medium","line_start":132},{"id":"external_commands:SKILL.md:135:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":139,"severity":"medium","line_start":135},{"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":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":177,"severity":"medium","line_start":152},{"id":"external_commands:SKILL.md:177:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"The skill invokes `runcomfy run google/nano-banana-2/edit` with a JSON body matching the schema. The","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=nano-ban","category":"network","line_end":19,"severity":"low","line_start":19},{"id":"network:SKILL.md:71:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"\"image_urls\": [\"https://.../portrait.jpg\"]","category":"network","line_end":71,"severity":"low","line_start":71},{"id":"network:SKILL.md:82:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"\"image_urls\": [\"https://.../sku-1.jpg\", \"https://.../sku-2.jpg\", \"https://.../sku-3.jpg\"],","category":"network","line_end":82,"severity":"low","line_start":82},{"id":"network:SKILL.md:95:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"\"image_urls\": [\"https://.../still-life.jpg\"]","category":"network","line_end":95,"severity":"low","line_start":95},{"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 google/nano-banana-2/edit` with a JSON body matching the schema. The","category":"network","line_end":177,"severity":"low","line_start":177},{"id":"filesystem:SKILL.md:71:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"\"image_urls\": [\"https://.../portrait.jpg\"]","category":"filesystem","line_end":71,"severity":"high","line_start":71},{"id":"filesystem:SKILL.md:82:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"\"image_urls\": [\"https://.../sku-1.jpg\", \"https://.../sku-2.jpg\", \"https://.../sku-3.jpg\"],","category":"filesystem","line_end":82,"severity":"high","line_start":82},{"id":"filesystem:SKILL.md:95:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"\"image_urls\": [\"https://.../still-life.jpg\"]","category":"filesystem","line_end":95,"severity":"high","line_start":95},{"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:38:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"If the user said \"nano banana edit\" / \"edit with nano banana\" explicitly, route here regardless.","category":"blocker","line_end":38,"severity":"low","line_start":38}],"finding_verdicts":[{"id":"external_commands:SKILL.md:10:ruby-shell-backtick-execution","reason":"The skill states it calls the local RunComfy CLI, which is intentional external command execution on the user machine. The command name is fixed, but users must trust the installed CLI and its network behavior.","verdict":"confirmed","severity":"medium","confidence":0.88},{"id":"external_commands:SKILL.md:23:ruby-shell-backtick-execution","reason":"The bash block instructs users to run a global skill installation command from a community GitHub source. This is documented setup guidance, but it is still a real supply-chain and external-command exposure.","verdict":"confirmed","severity":"medium","confidence":0.82},{"id":"external_commands:SKILL.md:25:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:42:ruby-shell-backtick-execution","reason":"The prerequisite asks users to install the RunComfy CLI globally through npm. Installing and later executing a global CLI is a real external-command and package trust risk.","verdict":"confirmed","severity":"medium","confidence":0.84},{"id":"external_commands:SKILL.md:43:ruby-shell-backtick-execution","reason":"The prerequisite asks users to execute runcomfy login, which starts an authentication flow and changes local credential state. This is expected for the service but remains a real command with security impact.","verdict":"confirmed","severity":"medium","confidence":0.82},{"id":"external_commands:SKILL.md:44:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:48:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:52:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:53:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:54:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:55:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:56:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:57:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:58:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:59:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:60:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:61:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:67:ruby-shell-backtick-execution","reason":"The bash example runs runcomfy run with image URLs and an output directory, causing local command execution and remote API activity. The command is fixed, but it writes outputs and contacts RunComfy.","verdict":"confirmed","severity":"medium","confidence":0.86},{"id":"external_commands:SKILL.md:74:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:78:ruby-shell-backtick-execution","reason":"The batch edit example runs the RunComfy CLI against multiple image URLs and writes files to an output directory. This is intended behavior, but it is real external command execution.","verdict":"confirmed","severity":"medium","confidence":0.86},{"id":"external_commands:SKILL.md:87:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:91:ruby-shell-backtick-execution","reason":"The targeted edit example invokes runcomfy run with user-selected input data and an output directory. The fixed command limits injection risk, but it still executes a local CLI and performs network work.","verdict":"confirmed","severity":"medium","confidence":0.86},{"id":"external_commands:SKILL.md:98:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:102:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:106:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:125:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:132:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:135:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:139:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:143:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:147:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:152:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:177:ruby-shell-backtick-execution","reason":"The how-it-works section confirms the skill invokes runcomfy, posts to model-api.runcomfy.net, polls, fetches results, and downloads output. This is intentional external command, network, and file-write behavior.","verdict":"confirmed","severity":"medium","confidence":0.9},{"id":"external_commands:SKILL.md:181:ruby-shell-backtick-execution","reason":"The security section documents running runcomfy login and persisting an API token. This is expected CLI behavior, but it is still a command with credential side effects.","verdict":"confirmed","severity":"medium","confidence":0.8},{"id":"external_commands:SKILL.md:182:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"external_commands:SKILL.md:184:ruby-shell-backtick-execution","reason":"This finding comes from Markdown backticks, code fences, table field names, or prompt text rather than Ruby backtick execution. No evidence shows this specific text is evaluated by a shell.","verdict":"false_positive","confidence":0.92},{"id":"network:SKILL.md:13:hardcoded-url","reason":"This URL is a homepage, documentation link, or abbreviated example image URL in Markdown. It is not a hidden callback, credential exfiltration endpoint, or automatic request by the skill itself.","verdict":"false_positive","confidence":0.9},{"id":"network:SKILL.md:19:hardcoded-url","reason":"This URL is a homepage, documentation link, or abbreviated example image URL in Markdown. It is not a hidden callback, credential exfiltration endpoint, or automatic request by the skill itself.","verdict":"false_positive","confidence":0.9},{"id":"network:SKILL.md:71:hardcoded-url","reason":"This URL is a homepage, documentation link, or abbreviated example image URL in Markdown. It is not a hidden callback, credential exfiltration endpoint, or automatic request by the skill itself.","verdict":"false_positive","confidence":0.9},{"id":"network:SKILL.md:82:hardcoded-url","reason":"This URL is a homepage, documentation link, or abbreviated example image URL in Markdown. It is not a hidden callback, credential exfiltration endpoint, or automatic request by the skill itself.","verdict":"false_positive","confidence":0.9},{"id":"network:SKILL.md:95:hardcoded-url","reason":"This URL is a homepage, documentation link, or abbreviated example image URL in Markdown. It is not a hidden callback, credential exfiltration endpoint, or automatic request by the skill itself.","verdict":"false_positive","confidence":0.9},{"id":"network:SKILL.md:173:hardcoded-url","reason":"This URL is a homepage, documentation link, or abbreviated example image URL in Markdown. It is not a hidden callback, credential exfiltration endpoint, or automatic request by the skill itself.","verdict":"false_positive","confidence":0.9},{"id":"network:SKILL.md:177:hardcoded-url","reason":"The skill documents posting requests to the RunComfy model API and downloading generated outputs from RunComfy domains. This expected service behavior still transfers user edit data to a third party.","verdict":"confirmed","severity":"medium","confidence":0.9},{"id":"filesystem:SKILL.md:71:path-traversal-sequence","reason":"The apparent traversal sequence is the ellipsis in an abbreviated HTTPS example URL. It is not a local filesystem path and does not create a path traversal vector.","verdict":"false_positive","confidence":0.96},{"id":"filesystem:SKILL.md:82:path-traversal-sequence","reason":"The apparent traversal sequence is the ellipsis in an abbreviated HTTPS example URL. It is not a local filesystem path and does not create a path traversal vector.","verdict":"false_positive","confidence":0.96},{"id":"filesystem:SKILL.md:95:path-traversal-sequence","reason":"The apparent traversal sequence is the ellipsis in an abbreviated HTTPS example URL. It is not a local filesystem path and does not create a path traversal vector.","verdict":"false_positive","confidence":0.96},{"id":"filesystem:SKILL.md:181:hidden-file-in-home-directory","reason":"This documents standard RunComfy CLI credential storage under the user config directory with owner-only permissions. No evidence shows the skill reads, modifies, hides, or exfiltrates this file.","verdict":"false_positive","confidence":0.78},{"id":"filesystem:SKILL.md:181:hidden-file-access","reason":"This documents standard RunComfy CLI credential storage under the user config directory with owner-only permissions. No evidence shows the skill reads, modifies, hides, or exfiltrates this file.","verdict":"false_positive","confidence":0.78},{"id":"blocker:SKILL.md:38:system-reconnaissance","reason":"The line is a routing rule for explicit user requests to use this model. It does not perform system reconnaissance, environment probing, or privilege discovery.","verdict":"false_positive","confidence":0.93}],"semantic_findings":[{"title":"Third-Party Image and Prompt Processing","severity":"medium","locations":[{"file":"SKILL.md","line_end":184,"line_start":177}],"confidence":0.88,"description":"The skill sends edit prompts and image URL references to the RunComfy model API, and RunComfy fetches user-provided media URLs. Users can expose private creative assets if they provide confidential URLs or prompts.","confidence_reasoning":"Lines 177-184 describe posting to RunComfy, downloading outputs, and remote fetching of image URLs. The behavior is disclosed and expected, so this is a privacy risk rather than evidence of malicious exfiltration."}],"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":10,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":false}}