Grades are a hygiene check, not a security guarantee.

Codex, Plugin

Llmwiki Lite Codex Plugin

这是与旧 llmwiki-research 架构完全分离的轻量版科研与项目知识助手,同一份源码同时支持 Codex、Claude Code 和 opencode。

Compatibility: Not stated.

Grade D

Two or more Medium findings, or a High. Only try it in a sandbox.

Graded by PlugVetRubric v2

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

NETWORK_HOST_FROM_INPUT SECRETS_PATH_CREDENTIAL

Why this grade

  • NETWORK_HOST_FROM_INPUT High

    A file takes a URL or endpoint as input and has no fixed host list.

    plugins/llmwiki-lite/scripts/git_web.py, line 814 def fetch(repo, payload):

  • SECRETS_PATH_CREDENTIAL Medium

    Mentions a credential store path (~/.ssh, id_rsa, .npmrc, .aws/credentials, credentials.json, .netrc).

    plugins/llmwiki-lite/scripts/research_sources.py, line 40 *capture.DEFAULT_EXCLUDE_PATTERNS, '*.p12', '*.pfx', 'id_rsa*', 'id_ed25519*',

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.

    PERMISSION_DELETE_FILES

    desktop/run_native_acceptance.py, line 76

    subprocess.run(["git", "-C", str(source), *command], check=True,

    desktop/run_native_acceptance.py, line 87

    process = subprocess.Popen([*command, "--port", "0"], cwd=root, creationflags=flags)

    desktop/run_native_acceptance.py, line 91

    repeated = subprocess.run(command, cwd=root, timeout=8, creationflags=flags)

    Show more

    desktop/run_native_acceptance.py, line 97

    subprocess.run([os.environ.get("NODE", "node"), str(Path(__file__).with_name("native_acceptance.cjs")),

    desktop/run_native_acceptance.py, line 107

    process = subprocess.Popen(command, cwd=root, creationflags=flags)

    desktop/run_native_acceptance.py, line 112

    subprocess.run([os.environ.get("NODE", "node"), str(Path(__file__).with_name("native_acceptance.cjs")),

    plugins/llmwiki-lite/scripts/git_recovery.py, line 355

    shutil.rmtree(recovery_dir, ignore_errors=True)

    plugins/llmwiki-lite/scripts/git_service.py, line 307

    return subprocess.run([git_exe, '-c', 'diff.autoRefreshIndex=false'] + args, **kwargs)

    plugins/llmwiki-lite/scripts/research_sources.py, line 216

    proc = subprocess.Popen(argv, shell=False, stdin=subprocess.PIPE if input_data is not None else subprocess.DEVNULL,

  • Install and update

    Concern

    dependencies are not pinned.

    INSTALL_UNPINNED

    requirements.txt, line 6

    pypdf>=3.0.0

  • Network

    Serious

    accepts a host from input, with no fixed list in this file.

    NETWORK_HOST_FROM_INPUT

    plugins/llmwiki-lite/scripts/git_web.py, line 814

    def fetch(repo, payload):

    plugins/llmwiki-lite/scripts/git_web.py, line 1009

    result = fetch(repo, data)

    plugins/llmwiki-lite/scripts/static/code.js, line 90

    const response = await fetch(url.href, {

    Show more

    plugins/llmwiki-lite/scripts/static/document-editor.js, line 7

    const response = await fetch(url, data === undefined ? {signal: controller.signal} : {

    plugins/llmwiki-lite/scripts/static/knowledge-maintenance.js, line 14

    const res = await fetch(url, payload ? {method:'POST', headers:{'Content-Type':'application/json','X-Notebook-Request':'1'},body:JSON.stringify(payload)} : {});

    plugins/llmwiki-lite/scripts/static/literature-catalog.js, line 17

    const response = await fetch(api + action, {method:'POST', headers:{'Content-Type':'application/json','X-Literature-Request':'1'}, body:JSON.stringify(data)});

    plugins/llmwiki-lite/scripts/static/literature-catalog.js, line 38

    const response=await fetch(url);

    plugins/llmwiki-lite/scripts/static/literature-catalog.js, line 101

    try {const response=await fetch(api+'collection');const value=await response.json();if(!response.ok)throw new Error(value.error?.message||'状态不可用');

    plugins/llmwiki-lite/scripts/static/progress.js, line 49

    const response=await fetch(url,payload===undefined?{cache:'no-store

  • Secrets

    Concern

    reads a credential or environment file.

    SECRETS_PATH_CREDENTIAL SECRETS_PATH_DOTENV

    plugins/llmwiki-lite/scripts/knowledge_maintenance.py, line 202

    re.search(r"(?i)(^\.env|credential|secret|token|private[-_]key)", p)

    plugins/llmwiki-lite/scripts/llmwiki_core.py, line 101

    ".env",

    plugins/llmwiki-lite/scripts/research_sources.py, line 40

    *capture.DEFAULT_EXCLUDE_PATTERNS, '*.p12', '*.pfx', 'id_rsa*', 'id_ed25519*',

    Show more

    plugins/llmwiki-lite/scripts/research_capture.py, line 50

    DEFAULT_EXCLUDE_PATTERNS = (".env", ".env.*", "*.pem", "*.key", "**/secrets/**")

    .gitignore, line 10

    # Local development files

  • Agent instructions

    Pass

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

  • Obfuscation

    Concern

    contains an encoded blob in a file that should be readable.

    OBFUSCATION_ENCODED_BLOB

    plugins/llmwiki-lite/docs/acceptance-hook-closure-2026-09-23.html, line 1

    <!doctype html>

    plugins/llmwiki-lite/docs/acceptance-hook-closure-2026-09-23.html, line 17

    <section><h2>页面证据</h2><p class="sub">点击图片可放大查看自动化测试的原始截图。日期、任务名和项目名均为临时测试数据。</p><div class="shots"><div class="shot"><header>01 · 待审批<span>Agent 已交付,但还没有 Done</span></header><a hre

  • 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 20051df21ce1. can delete files. dependencies are not pinned. accepts a host from input, with no fixed list in this file. reads a credential or environment file. contains an encoded blob in a file that should be readable.

Date and source

Date checked:

View source

github.com

Commit graded: 20051df21ce1b7c91f7b9f1baa5e4f29af1dc4b5

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