{"data":{"skill":{"slug":"caffeinelabs-extension-user-approval","name":"extension-user-approval","icon":"📦","repo":"https://github.com/caffeinelabs/skills/tree/main/skills/extension-user-approval/","status":"approved","author":"caffeinelabs","authorVersion":null,"skillstoreRevision":null},"audit":{"id":"bc040050-d301-440e-bdff-9b6299a9bab3","skill_id":"0b90d15f-8209-4ff5-86e0-62811886106e","version":1,"content_hash":"v2:1bf22d3f5624f0760cf4b4337c7dfa2efb3bd403:48124db6274c25f69f63bf2e7acbc80ee42834cd07ab801ce1e2b7a1e00a4873:c01d7398916f95645b0c6f330bd4e986b46c659ce449a968827a7ec303a3b1a1:fbe10eaa5fe0a01e07a7107c9b78eb3b","risk_level":"safe","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"The static command, network, and filesystem findings are false positives caused by Markdown code fences, inline code formatting, a documentation URL, and a relative documentation link. I found no prompt injection or malicious intent in SKILL.md.","remediation":[],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":25,"line_start":25},{"file":"SKILL.md","line_end":51,"line_start":27},{"file":"SKILL.md","line_end":55,"line_start":51},{"file":"SKILL.md","line_end":98,"line_start":55},{"file":"SKILL.md","line_end":100,"line_start":98},{"file":"SKILL.md","line_end":109,"line_start":100},{"file":"SKILL.md","line_end":110,"line_start":109},{"file":"SKILL.md","line_end":117,"line_start":110},{"file":"SKILL.md","line_end":118,"line_start":117},{"file":"SKILL.md","line_end":119,"line_start":118},{"file":"SKILL.md","line_end":119,"line_start":119}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":13,"line_start":13}]},{"factor":"filesystem","evidence":[{"file":"SKILL.md","line_end":23,"line_start":23}]}],"critical_findings":[],"high_findings":[],"medium_findings":[],"low_findings":[],"dangerous_patterns":[],"files_scanned":1,"total_lines":142,"audit_model":"codex","audited_at":"2026-07-09T13:29:32.147+00:00","created_at":"2026-07-09T15:22:54.214486+00:00","static_findings":[{"id":"external_commands:SKILL.md:25:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"There is a prefabricated module `mo:caffeineai-user-approval/approval` that cannot be modified. It p","category":"external_commands","line_end":25,"severity":"medium","line_start":25},{"id":"external_commands:SKILL.md:27:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```mo:caffeineai-user-approval/approval","category":"external_commands","line_end":51,"severity":"medium","line_start":27},{"id":"external_commands:SKILL.md:51:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","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":"```motoko filepath=src/backend/main.mo","category":"external_commands","line_end":98,"severity":"medium","line_start":55},{"id":"external_commands:SKILL.md:98:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":100,"severity":"medium","line_start":98},{"id":"external_commands:SKILL.md:100:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"On `initState`, existing admins are automatically approved. All other users are pending.","category":"external_commands","line_end":109,"severity":"medium","line_start":100},{"id":"external_commands:SKILL.md:109:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Check approval status (`isCallerApproved`)","category":"external_commands","line_end":110,"severity":"medium","line_start":109},{"id":"external_commands:SKILL.md:110:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- If not approved, show option to request approval (`requestApproval`)","category":"external_commands","line_end":117,"severity":"medium","line_start":110},{"id":"external_commands:SKILL.md:117:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- List all users with their approval status (`listApprovals`)","category":"external_commands","line_end":118,"severity":"medium","line_start":117},{"id":"external_commands:SKILL.md:118:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Approve or reject users (`setApproval`)","category":"external_commands","line_end":119,"severity":"medium","line_start":118},{"id":"external_commands:SKILL.md:119:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- View and assign user roles (using `getCallerUserRole` and `assignCallerUserRole`)","category":"external_commands","line_end":119,"severity":"medium","line_start":119},{"id":"network:SKILL.md:13:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"User approval extension for [Caffeine AI](https://caffeine.ai?utm_source=caffeine-skill&utm_medium=r","category":"network","line_end":13,"severity":"low","line_start":13},{"id":"filesystem:SKILL.md:23:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"Prerequisite: You must follow [extension-authorization](../extension-authorization/SKILL.md) first, ","category":"filesystem","line_end":23,"severity":"high","line_start":23}],"finding_verdicts":[{"id":"external_commands:SKILL.md:25:ruby-shell-backtick-execution","reason":"Line 25 uses inline Markdown code to name a Motoko module import path. It is documentation text, not Ruby backtick execution or a shell command.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:SKILL.md:27:ruby-shell-backtick-execution","reason":"Lines 27-51 are a Markdown code fence containing Motoko module interface documentation. No command execution path or shell invocation is present.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:51:ruby-shell-backtick-execution","reason":"Lines 51-55 include Markdown fence delimiters and a heading before another Motoko example. These backticks format documentation and do not execute commands.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:55:ruby-shell-backtick-execution","reason":"Lines 55-98 are a fenced Motoko example for backend integration. The content is static instructional code, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:98:ruby-shell-backtick-execution","reason":"Lines 98-100 close a Markdown code fence and continue prose documentation. The backticks are formatting markers with no runtime behavior.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:SKILL.md:100:ruby-shell-backtick-execution","reason":"Line 100 uses inline Markdown code to name initState in prose. It documents initialization behavior and does not invoke a shell.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:109:ruby-shell-backtick-execution","reason":"Line 109 uses inline Markdown code for the isCallerApproved function name. This is a frontend checklist item, not command execution.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:110:ruby-shell-backtick-execution","reason":"Line 110 uses inline Markdown code for the requestApproval function name. It is a UI flow instruction and contains no shell syntax.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:117:ruby-shell-backtick-execution","reason":"Line 117 uses inline Markdown code for the listApprovals function name. It documents an admin dashboard action without executing commands.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:118:ruby-shell-backtick-execution","reason":"Line 118 uses inline Markdown code for the setApproval function name. It is documentation for an admin operation, not shell execution.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:119:ruby-shell-backtick-execution","reason":"Line 119 uses inline Markdown code for role-related function names. It is descriptive text and does not create an external command path.","verdict":"false_positive","confidence":0.94},{"id":"network:SKILL.md:13:hardcoded-url","reason":"Line 13 contains a Markdown link to the Caffeine AI website. It is a documentation reference and does not make a network request.","verdict":"false_positive","confidence":0.9},{"id":"filesystem:SKILL.md:23:path-traversal-sequence","reason":"Line 23 links to a sibling skill document using a relative Markdown path. It is a prerequisite reference, not filesystem traversal code.","verdict":"false_positive","confidence":0.93}],"semantic_findings":[],"subject_marketplace_commit_sha":null,"subject_content_hash":null,"subject_tree_hash":null,"subject_plugin_path":null,"audit_payload_hash":null,"confirmed_risk_level":null,"scanner_version":null,"policy_version":null,"subject":{"marketplaceCommitSha":null,"contentHash":null,"treeHash":null,"pluginPath":null,"auditPayloadHash":null},"scannerVersion":null,"policyVersion":null},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"not_attestable","url":null,"status":null,"reason":"confirmed_risk_level does not match the canonical trust resolver"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"safe","confirmedFindingCount":0,"capabilityReviewCount":0,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":false}}