{"data":{"skill":{"slug":"halt-catch-fire-product-photography","name":"product-photography","icon":"📦","repo":"https://github.com/halt-catch-fire/skills/tree/main/guides/photo/product-photography/","status":"approved","author":"halt-catch-fire","authorVersion":null,"skillstoreRevision":null},"audit":{"id":"8f2ac7bb-a157-4976-ae40-a133810e404d","skill_id":"3dc489d4-7e24-4088-9760-c50c894291a8","version":1,"content_hash":"30765d3ff641aa608d0c7c1caf9c2674","risk_level":"medium","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"The skill is a product photography guide that intentionally relies on the belt CLI and external image-generation services. Most static hits are Markdown fence false positives, but real CLI execution, external install commands, hardcoded service links, and possible upload of local product images remain relevant risks.","remediation":[{"issue":"External CLI and service dependency","severity":"medium","suggestion":"State clearly that belt commands send prompts, job metadata, and possibly assets to third-party model services. Recommend reviewing vendor terms before use."},{"issue":"Remote installation instructions","severity":"medium","suggestion":"Pin installation guidance to a reviewed release or checksum where possible, and warn users before running npx or remote install steps."},{"issue":"Local image inputs may contain confidential product assets","severity":"medium","suggestion":"Add a privacy note advising users not to upload unreleased products, customer data, trademarks, or confidential images without approval."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":7,"line_start":7},{"file":"SKILL.md","line_end":15,"line_start":15},{"file":"SKILL.md","line_end":25,"line_start":17},{"file":"SKILL.md","line_end":34,"line_start":25},{"file":"SKILL.md","line_end":39,"line_start":34},{"file":"SKILL.md","line_end":52,"line_start":39},{"file":"SKILL.md","line_end":58,"line_start":52},{"file":"SKILL.md","line_end":71,"line_start":58},{"file":"SKILL.md","line_end":76,"line_start":71},{"file":"SKILL.md","line_end":82,"line_start":76},{"file":"SKILL.md","line_end":88,"line_start":82},{"file":"SKILL.md","line_end":94,"line_start":88},{"file":"SKILL.md","line_end":99,"line_start":94},{"file":"SKILL.md","line_end":105,"line_start":99},{"file":"SKILL.md","line_end":110,"line_start":105},{"file":"SKILL.md","line_end":180,"line_start":110},{"file":"SKILL.md","line_end":206,"line_start":180},{"file":"SKILL.md","line_end":212,"line_start":206},{"file":"SKILL.md","line_end":216,"line_start":212},{"file":"SKILL.md","line_end":220,"line_start":216},{"file":"SKILL.md","line_end":224,"line_start":220},{"file":"SKILL.md","line_end":228,"line_start":224},{"file":"SKILL.md","line_end":232,"line_start":228},{"file":"SKILL.md","line_end":236,"line_start":232},{"file":"SKILL.md","line_end":240,"line_start":236},{"file":"SKILL.md","line_end":244,"line_start":240},{"file":"SKILL.md","line_end":248,"line_start":244},{"file":"SKILL.md","line_end":252,"line_start":248},{"file":"SKILL.md","line_end":269,"line_start":252},{"file":"SKILL.md","line_end":286,"line_start":269},{"file":"SKILL.md","line_end":290,"line_start":286},{"file":"SKILL.md","line_end":292,"line_start":290}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":11,"line_start":11},{"file":"SKILL.md","line_end":15,"line_start":15}]}],"critical_findings":[],"high_findings":[],"medium_findings":[{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":7,"line_start":7}],"confidence":0.86,"description":"> **Install the belt CLI skill:** `npx skills add belt-sh/cli`","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The line instructs users to run npx to install an external CLI skill. This is a real external command dependency, even though it is documented rather than hidden."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":25,"line_start":17}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The bash block runs belt login and belt app run against an external image model. This can execute a local CLI and transmit prompt content to a third-party service."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":39,"line_start":34}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The bash block runs belt app run with a prompt for image generation. The command is intentional, but it is still an external CLI execution path."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":58,"line_start":52}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The bash block runs belt app run for a marketplace packshot prompt. This is a real external command and network-backed generation workflow."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":76,"line_start":71}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The bash block runs belt app run for lifestyle product generation. It invokes an external CLI with user-supplied commercial prompt content."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":88,"line_start":82}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The bash block runs belt app run against falai/flux-dev-lora. This is a genuine external command to a third-party model app."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":99,"line_start":94}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The bash block runs belt app run for close-up product generation. The command is expected for the skill, but it remains an external execution dependency."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":110,"line_start":105}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The bash block runs belt app run for a collection shot prompt. It executes the belt CLI and sends prompt data outside the local environment."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":206,"line_start":180}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The bash block contains several belt app run commands with --no-wait. These commands submit multiple image generation jobs to external services."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":269,"line_start":252}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The bash block runs belt app run for generation, image-to-image editing, and upscaling. It includes local image filenames that may be uploaded by the external CLI."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":290,"line_start":286}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The bash block instructs users to run npx skills add for related external skills. This is a real external install command pattern."},{"title":"Potential Upload of Proprietary Product Images","locations":[{"file":"SKILL.md","line_end":268,"line_start":260}],"confidence":0.78,"description":"The image editing and upscaling workflow passes local image filenames to belt app run. If belt uploads those files to external model services, users may expose unreleased product imagery or brand assets.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"The cited workflow uses image inputs with an external CLI-backed model app. The file upload behavior is inferred from the image-to-image and upscaler commands, so confidence is high but not absolute."}],"low_findings":[{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":11,"line_start":11}],"confidence":0.84,"description":"Create professional product images with AI via [inference.sh](https://inference.sh) CLI.","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The skill explicitly depends on inference.sh as an external service. This is a legitimate product link, but users should know prompts and generated assets may leave their environment."},{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":15,"line_start":15}],"confidence":0.84,"description":"> Requires inference.sh CLI (`belt`). [Install instructions](https://raw.githubusercontent.com/infer","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The skill links to raw GitHub install instructions for the required CLI. This is an external network dependency and supply-chain touchpoint."}],"dangerous_patterns":[],"files_scanned":1,"total_lines":294,"audit_model":"codex","audited_at":"2026-07-03T13:13:02.295+00:00","created_at":"2026-07-03T13:31:00.833859+00:00","static_findings":[],"finding_verdicts":[],"semantic_findings":[],"subject_marketplace_commit_sha":null,"subject_content_hash":null,"subject_tree_hash":null,"subject_plugin_path":null,"audit_payload_hash":null,"confirmed_risk_level":null,"scanner_version":null,"policy_version":null,"subject":{"marketplaceCommitSha":null,"contentHash":null,"treeHash":null,"pluginPath":null,"auditPayloadHash":null},"scannerVersion":null,"policyVersion":null},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"not_attestable","url":null,"status":null,"reason":"confirmed_risk_level does not match the canonical trust resolver"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"medium","confirmedFindingCount":1,"capabilityReviewCount":13,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":false}}