{"data":{"skill":{"slug":"prime-skills-codex-pet","name":"codex-pet","icon":"📦","repo":"https://github.com/prime-skills/runcomfy-agent-skills/tree/fca19ae084c2ae4667f5c8affbb99da5103d5832/codex-pet","status":"approved","author":"prime-skills","authorVersion":null,"skillstoreRevision":1},"audit":{"id":"5f0008c9-a73e-44ce-b378-5aa779968c9d","skill_id":"9526c9cf-2b6f-4cfa-bc59-c71b135107a0","version":1,"content_hash":"v3:ecf01ea0d94c8cbd4df454171b84d2c2ce76f5f1:00f9db8ad7bd89199be58eb589a16175d44a98eaa40038933106bfa4a9f8dd75:88f96bc7301b4395cba49a87f9307dad2423d79b0eb47c8d170ceb7a661470f2:736b696c6c732f7072696d652d736b696c6c732f636f6465782d706574:2858b7e1ef75b9b1b0f8c273d81be85e","risk_level":"medium","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"All 83 static alerts are false positives involving Markdown, ordinary commands, documentation links, configuration paths, or authentication terminology. One semantic risk remains: customizable names lack path validation before artifact creation and installation. No evidence found of malicious prompt injection or credential theft; the documented workflow sends the source image to RunComfy.","remediation":[{"issue":"Configurable names are used in working and installation paths without directory confinement.","severity":"medium","suggestion":"Allow only simple name characters, reject path separators and parent segments, verify resolved destinations remain inside intended roots, and confirm before overwriting files."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":7,"line_start":7},{"file":"SKILL.md","line_end":13,"line_start":13},{"file":"SKILL.md","line_end":15,"line_start":15},{"file":"SKILL.md","line_end":28,"line_start":28},{"file":"SKILL.md","line_end":32,"line_start":30},{"file":"SKILL.md","line_end":36,"line_start":32},{"file":"SKILL.md","line_end":40,"line_start":36},{"file":"SKILL.md","line_end":40,"line_start":40},{"file":"SKILL.md","line_end":45,"line_start":41},{"file":"SKILL.md","line_end":47,"line_start":45},{"file":"SKILL.md","line_end":47,"line_start":47},{"file":"SKILL.md","line_end":49,"line_start":49},{"file":"SKILL.md","line_end":55,"line_start":51},{"file":"SKILL.md","line_end":93,"line_start":55},{"file":"SKILL.md","line_end":94,"line_start":93},{"file":"SKILL.md","line_end":94,"line_start":94},{"file":"SKILL.md","line_end":95,"line_start":95},{"file":"SKILL.md","line_end":105,"line_start":100},{"file":"SKILL.md","line_end":105,"line_start":105},{"file":"SKILL.md","line_end":129,"line_start":111},{"file":"SKILL.md","line_end":135,"line_start":129},{"file":"SKILL.md","line_end":145,"line_start":135},{"file":"SKILL.md","line_end":153,"line_start":145},{"file":"SKILL.md","line_end":202,"line_start":153},{"file":"SKILL.md","line_end":210,"line_start":202},{"file":"SKILL.md","line_end":224,"line_start":210},{"file":"SKILL.md","line_end":228,"line_start":224},{"file":"SKILL.md","line_end":237,"line_start":228},{"file":"SKILL.md","line_end":241,"line_start":237},{"file":"SKILL.md","line_end":246,"line_start":241},{"file":"SKILL.md","line_end":256,"line_start":246},{"file":"SKILL.md","line_end":273,"line_start":256},{"file":"SKILL.md","line_end":273,"line_start":273},{"file":"SKILL.md","line_end":274,"line_start":274},{"file":"SKILL.md","line_end":275,"line_start":275},{"file":"SKILL.md","line_end":276,"line_start":276},{"file":"SKILL.md","line_end":282,"line_start":282},{"file":"SKILL.md","line_end":284,"line_start":284},{"file":"SKILL.md","line_end":292,"line_start":292},{"file":"SKILL.md","line_end":303,"line_start":298},{"file":"SKILL.md","line_end":303,"line_start":303},{"file":"SKILL.md","line_end":315,"line_start":309},{"file":"SKILL.md","line_end":315,"line_start":315},{"file":"SKILL.md","line_end":326,"line_start":320},{"file":"SKILL.md","line_end":330,"line_start":326},{"file":"SKILL.md","line_end":330,"line_start":330},{"file":"SKILL.md","line_end":334,"line_start":334},{"file":"SKILL.md","line_end":338,"line_start":338},{"file":"SKILL.md","line_end":342,"line_start":342},{"file":"SKILL.md","line_end":345,"line_start":343}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":20,"line_start":20},{"file":"SKILL.md","line_end":26,"line_start":26},{"file":"SKILL.md","line_end":47,"line_start":47},{"file":"SKILL.md","line_end":114,"line_start":114},{"file":"SKILL.md","line_end":322,"line_start":322},{"file":"SKILL.md","line_end":334,"line_start":334}]},{"factor":"filesystem","evidence":[{"file":"SKILL.md","line_end":114,"line_start":114},{"file":"SKILL.md","line_end":342,"line_start":342},{"file":"SKILL.md","line_end":7,"line_start":7},{"file":"SKILL.md","line_end":28,"line_start":28},{"file":"SKILL.md","line_end":36,"line_start":36},{"file":"SKILL.md","line_end":47,"line_start":47},{"file":"SKILL.md","line_end":105,"line_start":105},{"file":"SKILL.md","line_end":242,"line_start":242},{"file":"SKILL.md","line_end":282,"line_start":282},{"file":"SKILL.md","line_end":292,"line_start":292},{"file":"SKILL.md","line_end":330,"line_start":330},{"file":"SKILL.md","line_end":334,"line_start":334},{"file":"SKILL.md","line_end":342,"line_start":342},{"file":"SKILL.md","line_end":347,"line_start":347}]},{"factor":"env_access","evidence":[{"file":"SKILL.md","line_end":16,"line_start":16},{"file":"SKILL.md","line_end":49,"line_start":49}]}],"critical_findings":[],"high_findings":[],"medium_findings":[{"title":"Configurable Names Can Escape Artifact Directories","locations":[{"file":"SKILL.md","line_end":117,"line_start":112},{"file":"SKILL.md","line_end":244,"line_start":229}],"confidence":0.94,"description":"PET_NAME is appended to working and installation paths without rejecting separators or parent segments. A crafted name can redirect artifact writes outside intended roots and overwrite matching filenames.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"Both paths directly interpolate the configurable name without validation or containment checks. The default name is safe; exploitation requires a crafted replacement."}],"low_findings":[],"dangerous_patterns":[],"files_scanned":1,"total_lines":348,"audit_model":"codex","audited_at":"2026-11-01T14:40:57.533+00:00","created_at":"2026-11-01T15:47:27.123261+00:00","static_findings":[{"id":"external_commands:SKILL.md:7:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"into `${CODEX_HOME:-$HOME/.codex}/pets/<name>/` and Codex picks it up","category":"external_commands","line_end":7,"severity":"medium","line_start":7},{"id":"external_commands:SKILL.md:13:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`runcomfy run openai/gpt-image-2/edit` to produce a canonical Codex","category":"external_commands","line_end":13,"severity":"medium","line_start":13},{"id":"external_commands:SKILL.md:15:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"ImageMagick micro-transforms — no Codex Pro, no `$imagegen`, no","category":"external_commands","line_end":15,"severity":"medium","line_start":15},{"id":"external_commands:SKILL.md:28:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Codex Pet generator on RunComfy.** Turn one source image into a Codex-compatible custom Codex Pet ","category":"external_commands","line_end":28,"severity":"medium","line_start":28},{"id":"external_commands:SKILL.md:30:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":32,"severity":"medium","line_start":30},{"id":"external_commands:SKILL.md:32:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":36,"severity":"medium","line_start":32},{"id":"external_commands:SKILL.md:36:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"OpenAI Codex Pets (released May 2026) are pixel-art animated companions that float over your desktop","category":"external_commands","line_end":40,"severity":"medium","line_start":36},{"id":"external_commands:SKILL.md:40:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `pet.json` — manifest with `id`, `displayName`, `description`, `spritesheetPath`.","category":"external_commands","line_end":40,"severity":"medium","line_start":40},{"id":"external_commands:SKILL.md:41:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `spritesheet.webp` — Codex Pet sprite atlas, **1536x1872** PNG or WebP, 8 columns x 9 rows of 192x","category":"external_commands","line_end":45,"severity":"medium","line_start":41},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"## Why this Codex Pet skill (vs OpenAI's official `hatch-pet`)","category":"external_commands","line_end":47,"severity":"medium","line_start":45},{"id":"external_commands:SKILL.md:47:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"OpenAI ships an official [`hatch-pet`](https://github.com/openai/skills/blob/main/skills/.curated/ha","category":"external_commands","line_end":47,"severity":"medium","line_start":47},{"id":"external_commands:SKILL.md:49:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**This Codex Pet skill is a drop-in alternative that runs via the RunComfy CLI**: a single `RUNCOMFY","category":"external_commands","line_end":49,"severity":"medium","line_start":49},{"id":"external_commands:SKILL.md:51:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"This skill follows the same pattern Codex's built-in Codex Pets use: **one canonical pose, replicate","category":"external_commands","line_end":55,"severity":"medium","line_start":51},{"id":"external_commands:SKILL.md:55:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- You want a custom Codex Pet but don't have Codex Pro / `$imagegen`.","category":"external_commands","line_end":93,"severity":"medium","line_start":55},{"id":"external_commands:SKILL.md:93: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":94,"severity":"medium","line_start":93},{"id":"external_commands:SKILL.md:94:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"2. **RunComfy account** — `runcomfy login`. CI alternative: `RUNCOMFY_TOKEN=<token>`.","category":"external_commands","line_end":94,"severity":"medium","line_start":94},{"id":"external_commands:SKILL.md:95:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"3. **ImageMagick** — `brew install imagemagick` (macOS) or `apt-get install imagemagick` (Linux). Pr","category":"external_commands","line_end":95,"severity":"medium","line_start":95},{"id":"external_commands:SKILL.md:100:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"1. **Canonical Codex Pet** — single `runcomfy run openai/gpt-image-2/edit` call producing one 1024x1","category":"external_commands","line_end":105,"severity":"medium","line_start":100},{"id":"external_commands:SKILL.md:105:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"6. **Manifest + install** — write `pet.json`, copy both files into `${CODEX_HOME:-$HOME/.codex}/pets","category":"external_commands","line_end":105,"severity":"medium","line_start":105},{"id":"external_commands:SKILL.md:111:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":129,"severity":"medium","line_start":111},{"id":"external_commands:SKILL.md:129:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":135,"severity":"medium","line_start":129},{"id":"external_commands:SKILL.md:135:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":145,"severity":"medium","line_start":135},{"id":"external_commands:SKILL.md:145:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":153,"severity":"medium","line_start":145},{"id":"external_commands:SKILL.md:153:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":202,"severity":"medium","line_start":153},{"id":"external_commands:SKILL.md:202:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":210,"severity":"medium","line_start":202},{"id":"external_commands:SKILL.md:210:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":224,"severity":"medium","line_start":210},{"id":"external_commands:SKILL.md:224:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":228,"severity":"medium","line_start":224},{"id":"external_commands:SKILL.md:228:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":237,"severity":"medium","line_start":228},{"id":"external_commands:SKILL.md:237:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":241,"severity":"medium","line_start":237},{"id":"external_commands:SKILL.md:241:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":246,"severity":"medium","line_start":241},{"id":"external_commands:SKILL.md:246:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":256,"severity":"medium","line_start":246},{"id":"external_commands:SKILL.md:256:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Demand the magenta `#FF00FF` chroma-key explicitly** in every Codex Pet base prompt. GPT Image 2 o","category":"external_commands","line_end":273,"severity":"medium","line_start":256},{"id":"external_commands:SKILL.md:273:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Bigger idle bob**: change `shift:0:-1` to `shift:0:-2` in row 0.","category":"external_commands","line_end":273,"severity":"medium","line_start":273},{"id":"external_commands:SKILL.md:274:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Faster running cycle**: increase the horizontal shifts in row 1 (e.g. `shift:3:0` instead of `sh","category":"external_commands","line_end":274,"severity":"medium","line_start":274},{"id":"external_commands:SKILL.md:275:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Higher jump**: change row 4's peak from `shift:0:-8` to `shift:0:-12`.","category":"external_commands","line_end":275,"severity":"medium","line_start":275},{"id":"external_commands:SKILL.md:276:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Stronger head tilt** in review: change `rotate:-2` / `rotate:2` to `rotate:-4` / `rotate:4`.","category":"external_commands","line_end":276,"severity":"medium","line_start":276},{"id":"external_commands:SKILL.md:282:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**What is a Codex Pet?** OpenAI Codex Pets are pixel-art animated companions launched May 2026 that ","category":"external_commands","line_end":282,"severity":"medium","line_start":282},{"id":"external_commands:SKILL.md:284:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Why use this Codex Pet skill instead of `hatch-pet`?** Official `hatch-pet` requires the Codex-int","category":"external_commands","line_end":284,"severity":"medium","line_start":284},{"id":"external_commands:SKILL.md:292:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**How do I install my Codex Pet?** Copy `pet.json` and `spritesheet.webp` into `${CODEX_HOME:-$HOME/","category":"external_commands","line_end":292,"severity":"medium","line_start":292},{"id":"external_commands:SKILL.md:298:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Can I add custom poses or replace rows?** Yes — modify the `build_row` calls in step 3. The atlas ","category":"external_commands","line_end":303,"severity":"medium","line_start":298},{"id":"external_commands:SKILL.md:303:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **GPT Image 2 doesn't output alpha** — the magenta chroma-key + post-process is a workaround. If t","category":"external_commands","line_end":303,"severity":"medium","line_start":303},{"id":"external_commands:SKILL.md:309: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":315,"severity":"medium","line_start":309},{"id":"external_commands:SKILL.md:315:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| 65 | bad input JSON for the Codex Pet call / schema mismatch (e.g. `size: \"1024_1024\"` instead of ","category":"external_commands","line_end":315,"severity":"medium","line_start":315},{"id":"external_commands:SKILL.md:320:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`magick` (ImageMagick) returns 0 on a clean Codex Pet atlas; non-zero indicates a missing input fram","category":"external_commands","line_end":326,"severity":"medium","line_start":320},{"id":"external_commands:SKILL.md:326:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"1. The skill calls `runcomfy run openai/gpt-image-2/edit` once with the user's source image and a ti","category":"external_commands","line_end":330,"severity":"medium","line_start":326},{"id":"external_commands:SKILL.md:330:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"5. A `pet.json` manifest is written; both files are copied into `${CODEX_HOME:-$HOME/.codex}/pets/<n","category":"external_commands","line_end":330,"severity":"medium","line_start":330},{"id":"external_commands:SKILL.md:334:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"The 9-row Codex Pet atlas spec — column counts, frame counts, cell dimensions — comes from OpenAI's ","category":"external_commands","line_end":334,"severity":"medium","line_start":334},{"id":"external_commands:SKILL.md:338:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Not a Codex client. Not a `hatch-pet` replacement when `$imagegen` is available — official `hatch-pe","category":"external_commands","line_end":338,"severity":"medium","line_start":338},{"id":"external_commands:SKILL.md:342: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":342,"severity":"medium","line_start":342},{"id":"external_commands:SKILL.md:343:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Input boundary**: Codex Pet prompts are passed as JSON via `--input`. The CLI does NOT shell-exp","category":"external_commands","line_end":345,"severity":"medium","line_start":343},{"id":"external_commands:SKILL.md:345:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Outbound endpoints**: only `model-api.runcomfy.net` and `*.runcomfy.net` / `*.runcomfy.com`.","category":"external_commands","line_end":345,"severity":"medium","line_start":345},{"id":"external_commands:SKILL.md:127:shell-command-substitution","file":"SKILL.md","pattern":"Shell command substitution","snippet":"BASE=$(ls \"${RUN_DIR}/decoded/\"*.png | head -1)","category":"external_commands","line_end":127,"severity":"medium","line_start":127},{"id":"external_commands:SKILL.md:179:shell-command-substitution","file":"SKILL.md","pattern":"Shell command substitution","snippet":"i=$((i+1))","category":"external_commands","line_end":179,"severity":"medium","line_start":179},{"id":"external_commands:SKILL.md:183:shell-command-substitution","file":"SKILL.md","pattern":"Shell command substitution","snippet":"i=$((i+1))","category":"external_commands","line_end":183,"severity":"medium","line_start":183},{"id":"external_commands:SKILL.md:111:template-literal-with-command-substitution","file":"SKILL.md","pattern":"Template literal with command substitution","snippet":"```bash","category":"external_commands","line_end":129,"severity":"medium","line_start":111},{"id":"external_commands:SKILL.md:153:template-literal-with-command-substitution","file":"SKILL.md","pattern":"Template literal with command substitution","snippet":"```bash","category":"external_commands","line_end":202,"severity":"medium","line_start":153},{"id":"network:SKILL.md:20:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"homepage: https://www.runcomfy.com","category":"network","line_end":20,"severity":"low","line_start":20},{"id":"network:SKILL.md:26:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"[runcomfy.com](https://www.runcomfy.com/?utm_source=skills.sh&utm_medium=skill&utm_campaign=codex-pe","category":"network","line_end":26,"severity":"low","line_start":26},{"id":"network:SKILL.md:47:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"OpenAI ships an official [`hatch-pet`](https://github.com/openai/skills/blob/main/skills/.curated/ha","category":"network","line_end":47,"severity":"low","line_start":47},{"id":"network:SKILL.md:114:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"SOURCE_URL=\"https://.../source.png\"","category":"network","line_end":114,"severity":"low","line_start":114},{"id":"network:SKILL.md:322: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":322,"severity":"low","line_start":322},{"id":"network:SKILL.md:334:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"The 9-row Codex Pet atlas spec — column counts, frame counts, cell dimensions — comes from OpenAI's ","category":"network","line_end":334,"severity":"low","line_start":334},{"id":"filesystem:SKILL.md:114:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"SOURCE_URL=\"https://.../source.png\"","category":"filesystem","line_end":114,"severity":"high","line_start":114},{"id":"filesystem:SKILL.md:342: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":342,"severity":"high","line_start":342},{"id":"filesystem:SKILL.md:7:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"into `${CODEX_HOME:-$HOME/.codex}/pets/<name>/` and Codex picks it up","category":"filesystem","line_end":7,"severity":"medium","line_start":7},{"id":"filesystem:SKILL.md:28:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"**Codex Pet generator on RunComfy.** Turn one source image into a Codex-compatible custom Codex Pet ","category":"filesystem","line_end":28,"severity":"medium","line_start":28},{"id":"filesystem:SKILL.md:36:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"OpenAI Codex Pets (released May 2026) are pixel-art animated companions that float over your desktop","category":"filesystem","line_end":36,"severity":"medium","line_start":36},{"id":"filesystem:SKILL.md:47:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"OpenAI ships an official [`hatch-pet`](https://github.com/openai/skills/blob/main/skills/.curated/ha","category":"filesystem","line_end":47,"severity":"medium","line_start":47},{"id":"filesystem:SKILL.md:105:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"6. **Manifest + install** — write `pet.json`, copy both files into `${CODEX_HOME:-$HOME/.codex}/pets","category":"filesystem","line_end":105,"severity":"medium","line_start":105},{"id":"filesystem:SKILL.md:242:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"DEST=\"${CODEX_HOME:-$HOME/.codex}/pets/${PET_NAME}\"","category":"filesystem","line_end":242,"severity":"medium","line_start":242},{"id":"filesystem:SKILL.md:282:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"**What is a Codex Pet?** OpenAI Codex Pets are pixel-art animated companions launched May 2026 that ","category":"filesystem","line_end":282,"severity":"medium","line_start":282},{"id":"filesystem:SKILL.md:292:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"**How do I install my Codex Pet?** Copy `pet.json` and `spritesheet.webp` into `${CODEX_HOME:-$HOME/","category":"filesystem","line_end":292,"severity":"medium","line_start":292},{"id":"filesystem:SKILL.md:330:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"5. A `pet.json` manifest is written; both files are copied into `${CODEX_HOME:-$HOME/.codex}/pets/<n","category":"filesystem","line_end":330,"severity":"medium","line_start":330},{"id":"filesystem:SKILL.md:334:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"The 9-row Codex Pet atlas spec — column counts, frame counts, cell dimensions — comes from OpenAI's ","category":"filesystem","line_end":334,"severity":"medium","line_start":334},{"id":"filesystem:SKILL.md:342: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":342,"severity":"medium","line_start":342},{"id":"filesystem:SKILL.md:347:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"- **Local install path**: the final Codex Pet writes to `${CODEX_HOME:-$HOME/.codex}/pets/<pet-name>","category":"filesystem","line_end":347,"severity":"medium","line_start":347},{"id":"env_access:SKILL.md:16:generic-api-secret-keys","file":"SKILL.md","pattern":"Generic API/secret keys","snippet":"OPENAI_API_KEY required, only RUNCOMFY_TOKEN. Triggers on \"codex pet\",","category":"env_access","line_end":16,"severity":"high","line_start":16},{"id":"env_access:SKILL.md:49:generic-api-secret-keys","file":"SKILL.md","pattern":"Generic API/secret keys","snippet":"**This Codex Pet skill is a drop-in alternative that runs via the RunComfy CLI**: a single `RUNCOMFY","category":"env_access","line_end":49,"severity":"high","line_start":49},{"id":"blocker:SKILL.md:59:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- You said \"codex pet\", \"/hatch\", \"make me a codex pet\", \"spritesheet.webp\", \"desktop pet for codex\"","category":"blocker","line_end":59,"severity":"low","line_start":59},{"id":"blocker:SKILL.md:121:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"\\\"prompt\\\": \\\"Generate one canonical Codex digital pet sprite based on the input image. EXAGGERATED ","category":"blocker","line_end":121,"severity":"low","line_start":121},{"id":"blocker:SKILL.md:258:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"**Forbid the chroma-key color in the pet itself.** Add: \"The pet itself must not use the chroma-key ","category":"blocker","line_end":258,"severity":"low","line_start":258},{"id":"blocker:SKILL.md:262:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"**Forbid the wrong styles.** \"No polished illustration, no painterly render, no anime key art, no 3D","category":"blocker","line_end":262,"severity":"low","line_start":262},{"id":"blocker:SKILL.md:303:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- **GPT Image 2 doesn't output alpha** — the magenta chroma-key + post-process is a workaround. If t","category":"blocker","line_end":303,"severity":"low","line_start":303}],"finding_verdicts":[{"id":"external_commands:SKILL.md:7:ruby-shell-backtick-execution","reason":"The backticks format a documented installation path in Markdown. They do not execute a shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:13:ruby-shell-backtick-execution","reason":"This is an inline Markdown example of the intended RunComfy generation command, not executable backtick substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:15:ruby-shell-backtick-execution","reason":"The backticks identify the imagegen skill in descriptive prose. No shell execution occurs at this location.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:28:ruby-shell-backtick-execution","reason":"Inline backticks mark artifact filenames and the expected local installation path. They are Markdown formatting, not command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:30:ruby-shell-backtick-execution","reason":"This opens a Markdown code fence containing a skill installation example. The fence itself is not executable shell syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:32:ruby-shell-backtick-execution","reason":"This closes a Markdown code fence before explanatory prose. No backtick execution is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:36:ruby-shell-backtick-execution","reason":"The paragraph documents the custom asset directory using inline code formatting. It contains no executable backtick expression.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:40:ruby-shell-backtick-execution","reason":"The backticks label the manifest filename and field names. These are documentation identifiers, not commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:41:ruby-shell-backtick-execution","reason":"This documents a sprite filename and atlas dimensions. Inline code and subsequent headings do not execute commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","reason":"The heading formats the comparison skill name as inline code. No shell or Ruby interpreter is invoked.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:47:ruby-shell-backtick-execution","reason":"The backticks appear inside a documentation link and around a skill identifier. This is Markdown, not backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:49:ruby-shell-backtick-execution","reason":"The paragraph lists required tools, token terminology, and output filenames. Its inline backticks do not execute those identifiers.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:51:ruby-shell-backtick-execution","reason":"This is explanatory prose about ImageMagick transforms and skill selection. Adjacent Markdown delimiters are not shell substitutions.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:55:ruby-shell-backtick-execution","reason":"The matched span is documentation covering use cases, animation specifications, and prerequisites. The backticks are Markdown formatting.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:93:ruby-shell-backtick-execution","reason":"The npm command documents installation of the named CLI dependency. Inline backticks are not execution, and no malicious installation behavior is evidenced here.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:94:ruby-shell-backtick-execution","reason":"Login and token assignment are documented authentication prerequisites. The placeholder is not a secret, and the backticks only format examples.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:95:ruby-shell-backtick-execution","reason":"The package manager commands describe installing ImageMagick for the workflow. They are ordinary dependency examples, not backtick substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:100:ruby-shell-backtick-execution","reason":"The numbered pipeline overview names the intended model call and output operations. Inline code formatting does not execute them.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:105:ruby-shell-backtick-execution","reason":"This documents writing the manifest and installing assets. The backticks around filenames and paths are not executable shell expressions.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:111:ruby-shell-backtick-execution","reason":"A Markdown fence encloses the intended RunComfy generation example. Its only command substitution selects a local PNG, without evaluating its contents.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:129:ruby-shell-backtick-execution","reason":"This closes the generation code fence and introduces normalization instructions. It is not executable backtick syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:135:ruby-shell-backtick-execution","reason":"The fenced commands perform expected ImageMagick normalization with quoted file arguments. No executable backtick substitution appears.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:145:ruby-shell-backtick-execution","reason":"The matched delimiters separate a code example from explanatory prose. They are Markdown fences, not a shell execution construct.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:153:ruby-shell-backtick-execution","reason":"This fence contains deterministic image transformation helpers and fixed animation recipes. The backticks are not interpreted as shell command execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:202:ruby-shell-backtick-execution","reason":"This is a closing Markdown code fence followed by animation documentation. No backtick execution is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:210:ruby-shell-backtick-execution","reason":"The fenced ImageMagick commands combine known row strips and convert the result to WebP. The fence is not command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:224:ruby-shell-backtick-execution","reason":"This closes the atlas code example before the manifest section. The matched backticks are Markdown delimiters.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:228:ruby-shell-backtick-execution","reason":"A Markdown fence contains a heredoc that writes the expected manifest. There is no executable backtick substitution in the example.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:237:ruby-shell-backtick-execution","reason":"This closes the manifest example before installation instructions. It is Markdown formatting, not shell execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:241:ruby-shell-backtick-execution","reason":"This is a Markdown fence around ordinary directory creation and asset copying. The separate name-confinement issue is recorded as a semantic finding.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:246:ruby-shell-backtick-execution","reason":"The line closes a Markdown code fence after installation commands. It does not invoke a shell.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:256:ruby-shell-backtick-execution","reason":"The inline code contains a hexadecimal chroma-key color. It is image-generation guidance, not a command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:273:ruby-shell-backtick-execution","reason":"The backticks format numeric shift specifications for animation tuning. They do not execute shell code.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:274:ruby-shell-backtick-execution","reason":"This documents alternative horizontal shift values. The inline specifications are data consumed by the animation helper, not shell expressions.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:275:ruby-shell-backtick-execution","reason":"The inline values describe jump offsets. Markdown backticks around those values are not command execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:276:ruby-shell-backtick-execution","reason":"The inline values specify small rotation angles for image transforms. There is no shell substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:282:ruby-shell-backtick-execution","reason":"The FAQ formats output filenames and their local directory as inline code. No command is executed by this text.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:284:ruby-shell-backtick-execution","reason":"This comparison paragraph names skills and an authentication variable. Backticks are used only for Markdown identifiers.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:292:ruby-shell-backtick-execution","reason":"The FAQ describes copying two output files into the local asset directory. Inline backticks do not execute that description.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:298:ruby-shell-backtick-execution","reason":"The paragraph references an animation helper and fixed frame counts. Its code formatting and nearby color identifiers are not executable backticks.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:303:ruby-shell-backtick-execution","reason":"The inline code contains alternative chroma-key colors. These are harmless image-processing parameters, not commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:309:ruby-shell-backtick-execution","reason":"This introduces a documented exit-code table for the CLI. Markdown formatting does not execute the command name or table values.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:315:ruby-shell-backtick-execution","reason":"The table contrasts valid and invalid image size strings. They are JSON parameter examples, not shell commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:320:ruby-shell-backtick-execution","reason":"The paragraph explains ImageMagick exit status and links troubleshooting documentation. Backticks only format command identifiers.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:326:ruby-shell-backtick-execution","reason":"The workflow summary names the intended RunComfy call and subsequent local transformations. Inline code is not executable backtick syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:330:ruby-shell-backtick-execution","reason":"This summarizes manifest creation and installation using formatted filenames and paths. No backtick execution is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:334:ruby-shell-backtick-execution","reason":"The credits link to a reference skill and name alternative processing tools. The backticks are Markdown formatting, not shell substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:338:ruby-shell-backtick-execution","reason":"The paragraph states product boundaries and references skill names. It contains no executable backtick expression.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:342:ruby-shell-backtick-execution","reason":"The security section documents login, a token storage path, and an environment variable. Inline backticks do not execute or disclose credentials.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:343:ruby-shell-backtick-execution","reason":"The matched text discusses JSON input and external image risks. No backtick execution appears; the prose is not proof of CLI implementation safety.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:345:ruby-shell-backtick-execution","reason":"The inline code lists documented service domains. Domain names inside Markdown backticks do not execute commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:127:shell-command-substitution","reason":"The fixed ls and head pipeline selects a generated local PNG. Its output is assigned to a variable, not evaluated as code.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:179:shell-command-substitution","reason":"This is arithmetic expansion incrementing a locally initialized frame counter. It does not execute a command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:183:shell-command-substitution","reason":"This increments the local frame counter while filling unused cells. Arithmetic expansion is not command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:111:template-literal-with-command-substitution","reason":"The matched block is fenced Bash, not a JavaScript template literal. Its command substitution only selects a local output image.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:153:template-literal-with-command-substitution","reason":"This is fenced Bash containing numeric counter increments and image transforms. No JavaScript template literal or dynamic command evaluation exists.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:20:hardcoded-url","reason":"The URL is a homepage metadata value for the documented provider. It does not send data or execute a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:26:hardcoded-url","reason":"These are provider and documentation links with static campaign parameters. No credential or local data transfer is specified.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:47:hardcoded-url","reason":"The GitHub URL cites a reference skill. It is a documentation link, not an exfiltration destination.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:114:hardcoded-url","reason":"The URL is an obvious placeholder for the user-selected source image. It does not identify a hidden external collection endpoint.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:322:hardcoded-url","reason":"This link points to provider troubleshooting documentation with a static campaign query. It contains no secret or data-upload instruction.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:334:hardcoded-url","reason":"The GitHub link credits the reference atlas specification. No network execution or data transfer is attached to the citation.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:114:path-traversal-sequence","reason":"The dots occur in an illustrative HTTPS URL, not a filesystem parent-directory segment. The separate configurable-name confinement issue is recorded semantically.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:342:hidden-file-in-home-directory","reason":"This documents the provider CLI's normal credential location and a stated restrictive file mode. No unrelated credential access or credential theft is instructed.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:SKILL.md:7:hidden-file-access","reason":"The hidden directory is the intended Codex custom asset location. The description does not request access to unrelated hidden files.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:28:hidden-file-access","reason":"The documented hidden path is the explicit output installation directory. Its presence alone does not indicate unauthorized filesystem access.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:36:hidden-file-access","reason":"The paragraph describes where custom Codex assets are stored. It contains no instruction to inspect hidden credentials or unrelated configuration.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:47:hidden-file-access","reason":"The hidden-looking component is .curated inside a GitHub documentation URL. It is not a local hidden-file access.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:105:hidden-file-access","reason":"The pipeline explicitly installs generated assets in the configured Codex directory. The hidden parent directory is normal application storage.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:242:hidden-file-access","reason":"Using the Codex custom asset root is expected installation behavior, not suspicious hidden-file access. Missing name validation is assessed separately as a semantic risk.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:SKILL.md:282:hidden-file-access","reason":"The FAQ names the documented local asset directory. It does not read or expose unrelated hidden files.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:292:hidden-file-access","reason":"Copying generated assets to the documented Codex directory serves the requested installation. The hidden-directory name alone is not a security threat.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:330:hidden-file-access","reason":"This workflow summary describes installation into expected application storage. There is no instruction to read hidden secrets.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:334:hidden-file-access","reason":"The .curated path belongs to a cited GitHub URL. It does not access a hidden file on the host.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:342:hidden-file-access","reason":"The text describes standard provider login storage and an environment-variable alternative. No instruction reads or discloses unrelated tokens.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:SKILL.md:347:hidden-file-access","reason":"The path is the documented output destination for generated assets. Its hidden application directory does not itself imply unauthorized access.","verdict":"false_positive","confidence":0.99},{"id":"env_access:SKILL.md:16:generic-api-secret-keys","reason":"The description says an OpenAI API key is not required and names the provider token requirement. No secret value or unauthorized environment access appears.","verdict":"false_positive","confidence":0.99},{"id":"env_access:SKILL.md:49:generic-api-secret-keys","reason":"The paragraph lists authentication prerequisites for the explicitly named service. It contains no credential value, harvesting command, or unrelated secret access.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:59:system-reconnaissance","reason":"The line lists user phrases that trigger the skill. It performs no host enumeration or system reconnaissance.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:121:system-reconnaissance","reason":"The prompt describes the requested sprite style, proportions, and background. It contains no system discovery instruction.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:258:system-reconnaissance","reason":"This advises excluding the chroma-key color from the subject. It is image-generation guidance, not host reconnaissance.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:262:system-reconnaissance","reason":"The quoted text excludes unwanted rendering styles. It does not request system information or override audit instructions.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:303:system-reconnaissance","reason":"This limitation explains background removal and alternative chroma-key colors. No system probing behavior is present.","verdict":"false_positive","confidence":0.99}],"semantic_findings":[{"title":"Configurable Names Can Escape Artifact Directories","severity":"medium","locations":[{"file":"SKILL.md","line_end":117,"line_start":112},{"file":"SKILL.md","line_end":244,"line_start":229}],"confidence":0.94,"description":"PET_NAME is appended to working and installation paths without rejecting separators or parent segments. A crafted name can redirect artifact writes outside intended roots and overwrite matching filenames.","confidence_reasoning":"Both paths directly interpolate the configurable name without validation or containment checks. The default name is safe; exploitation requires a crafted replacement."}],"subject_marketplace_commit_sha":"ecf01ea0d94c8cbd4df454171b84d2c2ce76f5f1","subject_content_hash":"00f9db8ad7bd89199be58eb589a16175d44a98eaa40038933106bfa4a9f8dd75","subject_tree_hash":"88f96bc7301b4395cba49a87f9307dad2423d79b0eb47c8d170ceb7a661470f2","subject_plugin_path":"skills/prime-skills/codex-pet","audit_payload_hash":"2858b7e1ef75b9b1b0f8c273d81be85e","confirmed_risk_level":"medium","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"ecf01ea0d94c8cbd4df454171b84d2c2ce76f5f1","contentHash":"00f9db8ad7bd89199be58eb589a16175d44a98eaa40038933106bfa4a9f8dd75","treeHash":"88f96bc7301b4395cba49a87f9307dad2423d79b0eb47c8d170ceb7a661470f2","pluginPath":"skills/prime-skills/codex-pet","auditPayloadHash":"2858b7e1ef75b9b1b0f8c273d81be85e"},"scannerVersion":"3.0.0","policyVersion":"skillstore-security-audit-policy-v1"},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"issued","url":"/api/skills/prime-skills-codex-pet/audits/1/attestation","status":"active"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"medium","confirmedFindingCount":1,"capabilityReviewCount":0,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"active","verificationState":"not_verified"},"isLatest":true}}