Grades are a hygiene check, not a security guarantee.

Claude Code, Skill

Ego Decision Layer

多步线性浏览器任务(连续点击、翻页、搜索表单提交、导航跳转)的默认入口:用 ego-decision-layer 一条命令让决策层在单个 ego-browser 进程内闭环决策(默认 System One / Jev,可换本地 OpenAI 兼容后端;browser automation / multi-step click chain / form submit / navigation),不再每步退回大模型思考。单步动作、精确 DOM/选择器、批量抓取仍走 ego-browser 原生 API;也可把官方 ego-browser 技能入口接管成路

Compatibility: Not stated.

Grade B

Minor issues only, no Medium or High. Worth a quick look at the findings below before installing.

Graded by PlugVetRubric v2

Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.

PERMISSION_DELETE_FILES NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST SECRETS_PATH_DOTENV OBFUSCATION_MINIFIED_PAYLOAD SECRETS_ENV_READ

Why this grade

  • PERMISSION_DELETE_FILES Low

    Contains a call that can delete files.

    bench/test-handoff-prompt.mjs, line 104 fs.rmSync(HOME, { recursive: true, force: true });

  • NETWORK_NO_FIXED_HOST Low

    Makes a network call whose host is not written as a fixed address.

    bench/baseline-engine.mjs, line 58 const res = await fetch(endpoint, {

  • NETWORK_UNNAMED_HOST Low

    Calls a fixed host that the description does not name.

    bench/baseline-engine.mjs, line 58 const res = await fetch(endpoint, {

  • SECRETS_PATH_DOTENV Low

    Mentions a .env file.

    bench/verify-protocol.md, line 19 | 文本模型 | 两栈同一个:opencode zen `https://opencode.ai/zen/v1`,`minimax-m3`(A 通过调用方传参显式指定同一 baseUrl/model/key 与 `x-opencode-session` 头,B 读 `jev-ultrafast/.env`) |

  • OBFUSCATION_MINIFIED_PAYLOAD Low

    Contains a very long line with almost no spaces in a script or style file.

    bench/test-update.mjs, line 40 write(path.join(clone,'collision.txt'),'local note');write(path.join(source,'collision.txt'),'remote file');git(source,'add','.');git(source,'commit','-m','remote collision');git(s

  • SECRETS_ENV_READ Note

    Reads an environment variable whose name contains KEY, SECRET, TOKEN, PASSWORD or CREDENTIAL.

    bench/baseline-engine.mjs, line 23 process.env.TYPESAFE_API_KEY_FILE,

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.

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.

    PERMISSION_DELETE_FILES

    bench/test-handoff-prompt.mjs, line 104

    fs.rmSync(HOME, { recursive: true, force: true });

    bench/test-no-bh-dependency.mjs, line 102

    fs.rmSync(root, { recursive: true, force: true });

    bench/test-rename-self.mjs, line 31

    fs.rmSync(root, { recursive: true, force: true });

    Show more

    bench/test-rename-self.mjs, line 141

    fs.rmSync(root, { recursive: true, force: true });

    bench/test-route-trace.mjs, line 43

    fs.rmSync(root, { recursive: true, force: true });

    bench/test-route-trace.mjs, line 205

    fs.rmSync(a + ".bak");

    bench/test-route-trace.mjs, line 267

    fs.rmSync(root, { recursive: true, force: true });

    bench/test-update.mjs, line 38

    n(clone,'local.txt'),'utf8'),'keep');});fs.unlinkSync(path.join(clone,'local.txt'));

  • Install and update

    Pass

    No install-time script found, and dependencies are pinned or absent.

  • Network

    Concern

    can reach a host that is not written as a fixed address. can reach api.typesafe.ai. The description does not name that host.

    NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST

    bench/baseline-engine.mjs, line 58

    const res = await fetch(endpoint, {

    bench/baseline-engine.mjs, line 167

    const res = await fetch(`${cfg.baseUrl.replace(/\/+$/, "")}/chat/completions`, {

    bench/fix-baseline-engine.mjs, line 58

    const res = await fetch(endpoint, {

    Show more

    bench/fix-baseline-engine.mjs, line 167

    const res = await fetch(`${cfg.baseUrl.replace(/\/+$/, "")}/chat/completions`, {

    bench/probe-raw.js, line 27

    const res = await fetch("https://api.typesafe.ai/v1/systemone", {

    bench/scroll-baseline-engine.mjs, line 58

    const res = await fetch(endpoint, {

    bench/scroll-baseline-engine.mjs, line 167

    const res = await fetch(`${cfg.baseUrl.replace(/\/+$/, "")}/chat/completions`, {

    bench/verify.sh, line 47

    if command -v curl >/dev/null 2>&1 && ! curl -sf --max-time 2 http://127.0.0.1:8099/c.html >/dev/null 2>&1; then

    examples/bench/arm-b-step.js, line 19

    const res = await fetch(`${gw.baseUrl}/chat/completions`, {

    AGENTS.md, line 59

    | 不能起服务、不能访问 loopback | `server.listen()` 回调不触发;`fetch("http://127.0.0.1:…")` 挂起后 exit 0;外部 HTTPS 正常 |

    README.md, line 668

    运行时不能起服务也不能访问 loopback(`fetch("http://127.0.0.1:...")` 会挂起后 exit 0)。

    SKILL.md, line 415

    `fetch("http://127.0.0.1:…")` 会挂起后 exit 0。外部 HTTPS `fetch()` 正常。

  • Secrets

    Concern

    reads a credential or environment file.

    SECRETS_ENV_READ SECRETS_PATH_DOTENV

    bench/baseline-engine.mjs, line 23

    process.env.TYPESAFE_API_KEY_FILE,

    bench/baseline-engine.mjs, line 32

    if (process.env.TYPESAFE_API_KEY) return process.env.TYPESAFE_API_KEY;

    bench/verify-protocol.md, line 19

    | 文本模型 | 两栈同一个:opencode zen `https://opencode.ai/zen/v1`,`minimax-m3`(A 通过调用方传参显式指定同一 baseUrl/model/key 与 `x-opencode-session` 头,B 读 `jev-ultrafast/.env`) |

    Show more

    bench/fix-baseline-engine.mjs, line 23

    process.env.TYPESAFE_API_KEY_FILE,

    bench/fix-baseline-engine.mjs, line 32

    if (process.env.TYPESAFE_API_KEY) return process.env.TYPESAFE_API_KEY;

    bench/lib.mjs, line 73

    "缺少文本模型配置:把 .env(含 TEXT_MODEL_BASE_URL / TEXT_MODEL / TEXT_MODEL_API_KEY)放到 " +

    bench/scroll-baseline-engine.mjs, line 23

    process.env.TYPESAFE_API_KEY_FILE,

    bench/scroll-baseline-engine.mjs, line 32

    if (process.env.TYPESAFE_API_KEY) return process.env.TYPESAFE_API_KEY;

    bench/test-credential-chain.mjs, line 25

    process.env.TYPESAFE_API_KEY_FILE = explicit;

    bench/test-credential-chain.mjs, line 26

    delete process.env.TYPESAFE_API_KEY; // 避免真实环境变量干扰

    bench/test-update.mjs, line 16

    const run=(file,args,cwd=root,extra={})=>spawnSync(file,args,{cwd,env:{...env,...extra},encoding:'utf8',timeout:15000});

  • Agent instructions

    Pass

    No instruction to ignore earlier instructions or to hide a step.

  • Obfuscation

    Concern

    contains a minified payload.

    OBFUSCATION_MINIFIED_PAYLOAD

    bench/test-update.mjs, line 40

    write(path.join(clone,'collision.txt'),'local note');write(path.join(source,'collision.txt'),'remote file');git(source,'add','.');git(source,'commit','-m','remote collision');git(s

  • 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 e18567ee0c73. can delete files. can reach a host that is not written as a fixed address. can reach api.typesafe.ai. The description does not name that host. reads a credential or environment file. contains a minified payload.

Date and source

Date checked:

View source

github.com

Commit graded: e18567ee0c7394be27f066d6317abfab866f4386

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.

Read how this letter is chosen