{"data":{"skill":{"slug":"screenci-playwright-cli","name":"playwright-cli","icon":"📦","repo":"https://github.com/screenci/screenci/tree/main/skills/playwright-cli/","status":"approved","author":"screenci","authorVersion":null,"skillstoreRevision":null},"audit":{"id":"7e3635ef-8e1e-4698-80fb-f93cd123dd65","skill_id":"dd55b2f5-59a7-4f47-8456-e84f70b5cfc5","version":2,"content_hash":"v2:c8087c390737c925f044151a66c0aaa504351b63:4f2ffa3ea48b77e2f9ed3df687f2d6f923af0b3118af5547f276addc469e013a:2a6b571d31654d0424bdc024ab547d8e3bed1d135b0139a6f8a638b90b2a1149:06bdc27e506bfa9eb7c9f61f564e5efa","risk_level":"high","is_blocked":false,"safe_to_publish":false,"analysis_status":"ok","agent_auto_install_policy":"confirmation_required","manual_install_policy":"allowed","summary":"Most static hits are Markdown backticks or documented example URLs, not hidden code execution. Confirmed risks remain because the skill directs agents to run Playwright CLI and package-manager commands, including browser actions, JavaScript evaluation, file snapshots, and a global npm install. No prompt injection attempt was found in SKILL.md.","remediation":[{"issue":"Broad package manager commands are allowed.","severity":"high","suggestion":"Restrict allowed tools to the exact npm or npx commands required, and pin package versions instead of using @latest."},{"issue":"Global installation modifies the host environment.","severity":"medium","suggestion":"Prefer project-local, pinned dependencies or require user confirmation before installing packages globally."},{"issue":"Browser automation examples can act on real websites and submit form data.","severity":"medium","suggestion":"Warn users to use staging sites and test credentials before running click, fill, or submit workflows against live services."},{"issue":"playwright-cli eval can run arbitrary page-context JavaScript.","severity":"medium","suggestion":"Limit examples to read-only inspections and caution against evaluating untrusted or state-changing scripts."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":20,"line_start":20},{"file":"SKILL.md","line_end":21,"line_start":21},{"file":"SKILL.md","line_end":29,"line_start":29},{"file":"SKILL.md","line_end":30,"line_start":30},{"file":"SKILL.md","line_end":49,"line_start":38},{"file":"SKILL.md","line_end":53,"line_start":49},{"file":"SKILL.md","line_end":73,"line_start":53},{"file":"SKILL.md","line_end":77,"line_start":73},{"file":"SKILL.md","line_end":83,"line_start":77},{"file":"SKILL.md","line_end":89,"line_start":83},{"file":"SKILL.md","line_end":96,"line_start":89},{"file":"SKILL.md","line_end":100,"line_start":96},{"file":"SKILL.md","line_end":110,"line_start":100},{"file":"SKILL.md","line_end":112,"line_start":110},{"file":"SKILL.md","line_end":115,"line_start":112},{"file":"SKILL.md","line_end":120,"line_start":115},{"file":"SKILL.md","line_end":126,"line_start":120},{"file":"SKILL.md","line_end":132,"line_start":126},{"file":"SKILL.md","line_end":136,"line_start":132},{"file":"SKILL.md","line_end":145,"line_start":136},{"file":"SKILL.md","line_end":149,"line_start":145},{"file":"SKILL.md","line_end":158,"line_start":149},{"file":"SKILL.md","line_end":162,"line_start":158},{"file":"SKILL.md","line_end":164,"line_start":162},{"file":"SKILL.md","line_end":166,"line_start":164},{"file":"SKILL.md","line_end":170,"line_start":166},{"file":"SKILL.md","line_end":172,"line_start":170},{"file":"SKILL.md","line_end":176,"line_start":172},{"file":"SKILL.md","line_end":184,"line_start":176}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":12,"line_start":12},{"file":"SKILL.md","line_end":42,"line_start":42},{"file":"SKILL.md","line_end":56,"line_start":56},{"file":"SKILL.md","line_end":57,"line_start":57},{"file":"SKILL.md","line_end":90,"line_start":90},{"file":"SKILL.md","line_end":92,"line_start":92},{"file":"SKILL.md","line_end":177,"line_start":177}]}],"critical_findings":[],"high_findings":[{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":172,"line_start":170}],"confidence":0.93,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The npm install -g command fetches and installs @playwright/cli@latest globally, which can execute package lifecycle code and modifies the host environment. The unpinned latest version increases supply-chain risk."},{"title":"Broad Package Manager Command Permission","locations":[{"file":"SKILL.md","line_end":7,"line_start":4}],"confidence":0.88,"description":"The allowed-tools front matter permits Bash(npx:*) and Bash(npm:*). This grants package manager execution beyond the specific commands shown, which can install or run arbitrary package code if invoked.","review_kind":"security","source_category":"semantic","source_severity":"high","confidence_reasoning":"The permission block explicitly grants wildcard npm and npx command access. This is a broader tool authorization risk than the individual Markdown command examples."}],"medium_findings":[{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":49,"line_start":38}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The block instructs running playwright-cli commands that open a browser, navigate to a URL, click, type, and close. These are intended operations but still allow browser automation against live pages, so the external-command risk is real."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":73,"line_start":53}],"confidence":0.9,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"This command block lists many playwright-cli actions, including fill, click, and eval against page or element context. It is intended but can operate on live web apps and execute page-context JavaScript."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":83,"line_start":77}],"confidence":0.78,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"This block instructs command-line navigation and key presses in an active browser session. It is expected functionality, but agents running it can change browser state on a live page."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":110,"line_start":100}],"confidence":0.82,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"This block runs playwright-cli snapshot commands that write page state to files and inspect selectors. It is legitimate but still performs external CLI operations and filesystem output."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":120,"line_start":115}],"confidence":0.84,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The commands redirect raw snapshots to local files and run diff. This is intended for comparison, but it is real command execution with local file writes."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":132,"line_start":126}],"confidence":0.8,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"This block instructs snapshot and click commands using page refs. It is core browser automation and can trigger actions in an active page."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":145,"line_start":136}],"confidence":0.82,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"This block clicks CSS, role, and test-id locators through the CLI. The commands are legitimate but can perform actions on live web applications."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":158,"line_start":149}],"confidence":0.83,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"This block creates, lists, and closes named browser sessions from the CLI, including closing all sessions. It is expected behavior but uses external commands to manage browser processes."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":166,"line_start":164}],"confidence":0.76,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The npx command executes a local playwright-cli binary from project dependencies. --no-install reduces supply-chain exposure, but running local package binaries is still external command execution."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":184,"line_start":176}],"confidence":0.88,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"This block opens a form page, fills email and password-like values, clicks a control, and snapshots the result. Even as an example, it demonstrates commands that can submit data to live pages."}],"low_findings":[],"dangerous_patterns":[],"files_scanned":1,"total_lines":187,"audit_model":"codex","audited_at":"2026-07-08T08:26:01.249+00:00","created_at":"2026-07-08T08:38:57.594584+00:00","static_findings":[{"id":"external_commands:SKILL.md:20:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Use `playwright-cli` to inspect a live page and discover the real flow, stable","category":"external_commands","line_end":20,"severity":"medium","line_start":20},{"id":"external_commands:SKILL.md:21:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"selectors, and cookie/consent steps before authoring a ScreenCI `.screenci.ts`","category":"external_commands","line_end":21,"severity":"medium","line_start":21},{"id":"external_commands:SKILL.md:29:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`hide()` block, preferably a stable locator such as","category":"external_commands","line_end":29,"severity":"medium","line_start":29},{"id":"external_commands:SKILL.md:30:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`getByRole('button', { name: /accept|accept all|allow all|agree|ok/i })`.","category":"external_commands","line_end":30,"severity":"medium","line_start":30},{"id":"external_commands:SKILL.md:38:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":49,"severity":"medium","line_start":38},{"id":"external_commands:SKILL.md:49:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":53,"severity":"medium","line_start":49},{"id":"external_commands:SKILL.md:53:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":73,"severity":"medium","line_start":53},{"id":"external_commands:SKILL.md:73:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":77,"severity":"medium","line_start":73},{"id":"external_commands:SKILL.md:77:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":83,"severity":"medium","line_start":77},{"id":"external_commands:SKILL.md:83:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":89,"severity":"medium","line_start":83},{"id":"external_commands:SKILL.md:89:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":96,"severity":"medium","line_start":89},{"id":"external_commands:SKILL.md:96:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":100,"severity":"medium","line_start":96},{"id":"external_commands:SKILL.md:100:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":110,"severity":"medium","line_start":100},{"id":"external_commands:SKILL.md:110:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":112,"severity":"medium","line_start":110},{"id":"external_commands:SKILL.md:112:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"The global `--raw` option strips page status and generated code, returning only","category":"external_commands","line_end":115,"severity":"medium","line_start":112},{"id":"external_commands:SKILL.md:115:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":120,"severity":"medium","line_start":115},{"id":"external_commands:SKILL.md:120:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":126,"severity":"medium","line_start":120},{"id":"external_commands:SKILL.md:126:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":132,"severity":"medium","line_start":126},{"id":"external_commands:SKILL.md:132:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":136,"severity":"medium","line_start":132},{"id":"external_commands:SKILL.md:136:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":145,"severity":"medium","line_start":136},{"id":"external_commands:SKILL.md:145:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":149,"severity":"medium","line_start":145},{"id":"external_commands:SKILL.md:149:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":158,"severity":"medium","line_start":149},{"id":"external_commands:SKILL.md:158:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":162,"severity":"medium","line_start":158},{"id":"external_commands:SKILL.md:162:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"If global `playwright-cli` is not available, try a local version:","category":"external_commands","line_end":164,"severity":"medium","line_start":162},{"id":"external_commands:SKILL.md:164:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":166,"severity":"medium","line_start":164},{"id":"external_commands:SKILL.md:166:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":170,"severity":"medium","line_start":166},{"id":"external_commands:SKILL.md:170:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":172,"severity":"medium","line_start":170},{"id":"external_commands:SKILL.md:172:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":176,"severity":"medium","line_start":172},{"id":"external_commands:SKILL.md:176:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":184,"severity":"medium","line_start":176},{"id":"network:SKILL.md:12:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"(https://github.com/microsoft/playwright-cli), Copyright (c) Microsoft Corporation,","category":"network","line_end":12,"severity":"low","line_start":12},{"id":"network:SKILL.md:42:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"playwright-cli goto https://playwright.dev","category":"network","line_end":42,"severity":"low","line_start":42},{"id":"network:SKILL.md:56:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"playwright-cli open https://example.com/","category":"network","line_end":56,"severity":"low","line_start":56},{"id":"network:SKILL.md:57:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"playwright-cli goto https://playwright.dev","category":"network","line_end":57,"severity":"low","line_start":57},{"id":"network:SKILL.md:90:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"> playwright-cli goto https://example.com","category":"network","line_end":90,"severity":"low","line_start":90},{"id":"network:SKILL.md:92:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- Page URL: https://example.com/","category":"network","line_end":92,"severity":"low","line_start":92},{"id":"network:SKILL.md:177:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"playwright-cli open https://example.com/form","category":"network","line_end":177,"severity":"low","line_start":177},{"id":"blocker:SKILL.md:143:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"# test id","category":"blocker","line_end":144,"severity":"low","line_start":143}],"finding_verdicts":[{"id":"external_commands:SKILL.md:20:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:21:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:29:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:30:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:38:ruby-shell-backtick-execution","reason":"The block instructs running playwright-cli commands that open a browser, navigate to a URL, click, type, and close. These are intended operations but still allow browser automation against live pages, so the external-command risk is real.","verdict":"confirmed","severity":"medium","confidence":0.86},{"id":"external_commands:SKILL.md:49:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:53:ruby-shell-backtick-execution","reason":"This command block lists many playwright-cli actions, including fill, click, and eval against page or element context. It is intended but can operate on live web apps and execute page-context JavaScript.","verdict":"confirmed","severity":"medium","confidence":0.9},{"id":"external_commands:SKILL.md:73:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:77:ruby-shell-backtick-execution","reason":"This block instructs command-line navigation and key presses in an active browser session. It is expected functionality, but agents running it can change browser state on a live page.","verdict":"confirmed","severity":"medium","confidence":0.78},{"id":"external_commands:SKILL.md:83:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:89:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:96:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:100:ruby-shell-backtick-execution","reason":"This block runs playwright-cli snapshot commands that write page state to files and inspect selectors. It is legitimate but still performs external CLI operations and filesystem output.","verdict":"confirmed","severity":"medium","confidence":0.82},{"id":"external_commands:SKILL.md:110:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:112:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:115:ruby-shell-backtick-execution","reason":"The commands redirect raw snapshots to local files and run diff. This is intended for comparison, but it is real command execution with local file writes.","verdict":"confirmed","severity":"medium","confidence":0.84},{"id":"external_commands:SKILL.md:120:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:126:ruby-shell-backtick-execution","reason":"This block instructs snapshot and click commands using page refs. It is core browser automation and can trigger actions in an active page.","verdict":"confirmed","severity":"medium","confidence":0.8},{"id":"external_commands:SKILL.md:132:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:136:ruby-shell-backtick-execution","reason":"This block clicks CSS, role, and test-id locators through the CLI. The commands are legitimate but can perform actions on live web applications.","verdict":"confirmed","severity":"medium","confidence":0.82},{"id":"external_commands:SKILL.md:145:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:149:ruby-shell-backtick-execution","reason":"This block creates, lists, and closes named browser sessions from the CLI, including closing all sessions. It is expected behavior but uses external commands to manage browser processes.","verdict":"confirmed","severity":"medium","confidence":0.83},{"id":"external_commands:SKILL.md:158:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:162:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:164:ruby-shell-backtick-execution","reason":"The npx command executes a local playwright-cli binary from project dependencies. --no-install reduces supply-chain exposure, but running local package binaries is still external command execution.","verdict":"confirmed","severity":"medium","confidence":0.76},{"id":"external_commands:SKILL.md:166:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:170:ruby-shell-backtick-execution","reason":"The npm install -g command fetches and installs @playwright/cli@latest globally, which can execute package lifecycle code and modifies the host environment. The unpinned latest version increases supply-chain risk.","verdict":"confirmed","severity":"high","confidence":0.93},{"id":"external_commands:SKILL.md:172:ruby-shell-backtick-execution","reason":"The snippet is Markdown prose or a code fence delimiter using backticks, not Ruby or shell backtick execution. It does not execute commands by itself.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:176:ruby-shell-backtick-execution","reason":"This block opens a form page, fills email and password-like values, clicks a control, and snapshots the result. Even as an example, it demonstrates commands that can submit data to live pages.","verdict":"confirmed","severity":"medium","confidence":0.88},{"id":"network:SKILL.md:12:hardcoded-url","reason":"This is a documentation or public example URL, not a hidden network request from executable code. Network navigation is user-directed through the CLI examples.","verdict":"false_positive","confidence":0.92},{"id":"network:SKILL.md:42:hardcoded-url","reason":"This is a documentation or public example URL, not a hidden network request from executable code. Network navigation is user-directed through the CLI examples.","verdict":"false_positive","confidence":0.92},{"id":"network:SKILL.md:56:hardcoded-url","reason":"This is a documentation or public example URL, not a hidden network request from executable code. Network navigation is user-directed through the CLI examples.","verdict":"false_positive","confidence":0.92},{"id":"network:SKILL.md:57:hardcoded-url","reason":"This is a documentation or public example URL, not a hidden network request from executable code. Network navigation is user-directed through the CLI examples.","verdict":"false_positive","confidence":0.92},{"id":"network:SKILL.md:90:hardcoded-url","reason":"This is a documentation or public example URL, not a hidden network request from executable code. Network navigation is user-directed through the CLI examples.","verdict":"false_positive","confidence":0.92},{"id":"network:SKILL.md:92:hardcoded-url","reason":"This is a documentation or public example URL, not a hidden network request from executable code. Network navigation is user-directed through the CLI examples.","verdict":"false_positive","confidence":0.92},{"id":"network:SKILL.md:177:hardcoded-url","reason":"This is a documentation or public example URL, not a hidden network request from executable code. Network navigation is user-directed through the CLI examples.","verdict":"false_positive","confidence":0.92},{"id":"blocker:SKILL.md:143:system-reconnaissance","reason":"The snippet is a comment label for a Playwright test-id selector example. It is not system reconnaissance and does not collect host or environment data.","verdict":"false_positive","confidence":0.92}],"semantic_findings":[{"title":"Broad Package Manager Command Permission","severity":"high","locations":[{"file":"SKILL.md","line_end":7,"line_start":4}],"confidence":0.88,"description":"The allowed-tools front matter permits Bash(npx:*) and Bash(npm:*). This grants package manager execution beyond the specific commands shown, which can install or run arbitrary package code if invoked.","confidence_reasoning":"The permission block explicitly grants wildcard npm and npx command access. This is a broader tool authorization risk than the individual Markdown command examples."}],"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":"high","confirmedFindingCount":1,"capabilityReviewCount":11,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"confirmation_required","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":false}}