Claude Code, Skill
omowright
Playwright-shaped browser automation for AI agents.
Compatibility: Not stated.
Grade D
Two or more Medium findings, or a High. Only try it in a sandbox.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
INSTALL_REMOTE_SCRIPT PERMISSION_SHELL_UNDECLARED NETWORK_HOST_FROM_INPUT OBFUSCATION_MINIFIED_PAYLOAD
Why this grade
- INSTALL_REMOTE_SCRIPT High
Fetches a script from the network and runs it (a pipe to a shell, or an install hook with a URL).
src/bsk/install-cli.js, line 16
return { command: "sh", args: ["-c", `curl -fsSL ${INSTALL_SH} | sh`], env }; - PERMISSION_SHELL_UNDECLARED Medium
Runs shell commands that the manifest or description does not mention.
skills/omowright/references/eval-kernel.md, line 86
fs.rmSync(prof, { recursive: true, force: true }); - NETWORK_HOST_FROM_INPUT Medium
A file takes a URL or endpoint as input and has no fixed host list.
skills/omowright/references/stealth.md, line 25
curl -s -m 2 http://127.0.0.1:9242/json/version # Browser info -> an instance is alive - OBFUSCATION_MINIFIED_PAYLOAD Medium
Contains a very long line with almost no spaces in a script or style file.
src/core.js, line 130
})();`,PageConsole=class{#e;constructor(xn){this.#e=xn}async logs(xn={}){return await this.#e.evaluate(xn=>window.__omowrightConsole?.drain(xn)??[],xn)}async clear(){await this.#e.
Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.
If you think this grade is wrong, email [email protected] with the entry link and your evidence. We aim to acknowledge within two working days and decide within seven. If we confirm an error, we aim to correct it within 24 hours of confirming it. These are aims, not guarantees.
Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.
What was checked
Plain notes from the hygiene checks.
Permissions
Concern
can delete files. requests shell access. No manifest field names shell or command execution.
PERMISSION_SHELL_UNDECLARED PERMISSION_DELETE_FILES
skills/omowright/references/eval-kernel.md, line 86
fs.rmSync(prof, { recursive: true, force: true });
skills/omowright/references/eval-kernel.md, line 95
fs.rmSync(profile, { recursive: true, force: true });
skills/omowright/references/eval-kernel.md, line 12
`connectPipe` (which uses `child_process.spawn` without detaching) lost a
Install and update
Serious
install fetches a script from the network.
INSTALL_REMOTE_SCRIPT
src/bsk/install-cli.js, line 16
return { command: "sh", args: ["-c", `curl -fsSL ${INSTALL_SH} | sh`], env };
package.json, line 5
ws
Network
Serious
accepts a host from input, with no fixed list in this file.
NETWORK_HOST_FROM_INPUT
skills/omowright/references/stealth.md, line 25
curl -s -m 2 http://127.0.0.1:9242/json/version # Browser info -> an instance is alive
src/core.js, line 93
n={}){let qn=await this.#p(Vn),Jn=await fetch(xn,{headers:qn});if((Jn.status===401||Jn
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_UNCONFIRMED
src/bsk/daemon-info.js, line 90
const status = await runToExit(bskBin, ["status", "--json"], { env: { ...env, BSK_HOME: home }, timeoutMs, label: "bsk status" });
src/bsk/install-cli.js, line 21
const child = spawn(command, args, { env: { ...process.env, ...env }, stdio: ["ignore", "pipe", "pipe"], windowsHide: true });
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Concern
contains a minified payload.
OBFUSCATION_MINIFIED_PAYLOAD
src/core.js, line 130
})();`,PageConsole=class{#e;constructor(xn){this.#e=xn}async logs(xn={}){return await this.#e.evaluate(xn=>window.__omowrightConsole?.drain(xn)??[],xn)}async clear(){await this.#e.
src/core.js, line 131
`)}`:Vn}var init_errors$3=__esmMin((()=>{})),TRACKING_PARAMS,init_tracking_params=__esmMin((()=>{TRACKING_PARAMS=new Set([`utm_source`,`utm_medium`,`utm_campaign`,`utm_term`,`utm_c
src/core.js, line 132
`,`\r`]],[{key:`Escape`,code:`Escape`,keyCode:27,keyCodeWithoutLocation:27,text:``,location:0},[`Esc`]],[{key:`Delete`,code:`Delete`,keyCode:46,keyCodeWithoutLocation:46,text:``,lo
Show more
src/core.js, line 240
})()`)}function collectTrackedSessionIds(xn,jn){let Vn=new Set;jn&&Vn.add(jn);for(let jn of xn.frameManager.frames.values())Vn.add(jn.sessionId);return Vn}async function waitForNav
src/core.js, line 681
}`,Vn)}finally{let jn=await resolveActionSessionId(xn,qn).catch(()=>null);jn&&await xn.cdp.send(`Runtime.releaseObject`,{objectId:qn.objectId},jn).catch(()=>{})}}async function dra
src/core.js, line 1303
}`,arguments:[{value:{...jn,nth:Yn}}],executionContextId:Vn.isolatedContextId,returnByValue:!1,awaitPromise:!1,userGesture:!1},qn);if(Qn.objectId)return{objectId:Qn.objectId,frameI
src/core.js, line 1482
}`,arguments:[{value:Vn}],executionContextId:jn,returnByValue:!0,awaitPromise:!1,userGesture:!1},xn);if(Jn)throw Error(Jn.text??`Role selector count failed`);return Number(qn.value
Licence
Pass
A licence file is present (LICENSE).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit a3f0c2b54fc4. can delete files. requests shell access. No manifest field names shell or command execution. install fetches a script from the network. accepts a host from input, with no fixed list in this file. reads a credential or environment file. contains a minified payload.
Date and source
Date checked:
github.com
Commit graded: a3f0c2b54fc41804beca7eb6ab26ee54804742a9
This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.