zm-image2-ppt-generator@0.1.0
CAUTION· install onlyPublisher claims: "ZM Image2PPT 视觉幻灯片生成。用于根据 Markdown 大纲或 slides_plan.json 生成视觉化幻灯片图片、HTML viewer 和 16:9 PPTX;正式项目需配合 ZM PPT/Deck 正式生产流程使用。" Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Nothing executable in the bundle ran; the trace covers the install step only.- Tested
- every file read, file written and host contacted by what ran
- Not tested
- use of the skill by an agent
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (1 scenario; nothing executable in the bundle ran; the trace covers the install step only) on 2026-11-12 and scored it 78/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Access to sensitive file paths; Access to sensitive file paths; Access to sensitive file paths. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 1 scenarios · 0 deviationsStatic findings
4. ~/.claude/skills/gpt-image2-ppt-skills/.env -- default Claude Code installFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.print_info "已备份现有 .env 到 /tmp/gpt-image2-ppt.env.bak"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# 备份用户的 .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.print("Warning: No .env file found, using system environment variables")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Path(__file__).parent / ".env",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- 脚本**不会**向上递归读取项目目录的 `.env`,避免误吃无关密钥Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- Pro: no OPENAI_API_KEY needed in this skill's .env; reuses codex auth.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.2. <script_dir>/.env -- the skill's own .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# 并安装 Python 依赖、引导配置 .env。Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Path.home() / ".claude" / "skills" / "gpt-image2-ppt-skills" / ".env",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.> **安全提示**:脚本只从 `<script_dir>/.env`、`~/.codex/skills/.../.env`、`~/.claude/skills/.../.env`、`~/skills/.../.env` 与显式 `GPT_IMAGE2_PPT_ENV` 加载凭据,**不会**向上递归读取项目目录里的 `.env`,避免误吃无关密钥。Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# .env 加载由顶层入口(generate_ppt.py 的 find_and_load_env)统一负责。Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# 仅当你走 API 直连模式时,再编辑对应目录下的 .env 填入 API_KEYFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.cp "$SKILL_DIR/.env" "/tmp/gpt-image2-ppt.env.bak"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# - Reads scoped .env files only (skill dir, ~/.claude/skills/.../, ~/skills/.../)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.3. video_workflow project .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."""Load .env from explicit, scoped locations only.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Find and load .env file from multiple locations.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- 默认后端 `openai`,需在 scoped 位置(`<script_dir>/.env`、`~/.codex/skills/.../.env`、`~/.claude/skills/.../.env` 或 `$GPT_IMAGE2_PPT_ENV`)配 `OPENAI_API_KEY`Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.3. ~/.codex/skills/gpt-image2-ppt-skills/.env -- Codex installFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [ -f "$SKILL_DIR/.env" ]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# 本模块不调 load_dotenv(),避免 import 时无意识加载父目录 / cwd 的 .env,Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Path(__file__).parent / ".env",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.Path.home() / ".claude/skills/gpt-image2-ppt-skills/.env",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out." 或装本机 libreoffice:sudo apt-get install -y libreoffice"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.inspect = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.raise ValueError("缺少 VISION_BASE_URL(请在 .env 里配置)")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.raise ValueError("缺少 VISION_API_KEY(请在 .env 里配置)")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.raise ValueError("缺少 OPENAI_API_KEY,请在 .env 中配置")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose." - pip install pdf2image && sudo apt-get install -y poppler-utils"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell." - 本机:sudo apt-get install -y libreoffice\n"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# 与 SKILL.md 声明的"scoped .env loading"保持一致。Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# 找 .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
2 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim jerryxn: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.