{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "image-prompt-generator",
  "built": "2026-10-26",
  "control_level": 4,
  "control_level_label": "L4 高权限",
  "capabilities": [
    "execute_command",
    "write_file"
  ],
  "required_controls": {
    "agent": [
      "sandbox_recommended",
      "graded_authorization"
    ],
    "admin": [
      "approval_process",
      "rollback_support",
      "full_audit"
    ]
  },
  "evidence": [
    {
      "file": "scripts/",
      "summary": "Executes local scripts or commands: core/cross_domain_generator.py (SKILL.md instructs the agent to execute in the host: from core.cross_doma"
    },
    {
      "file": "本地工作目录",
      "summary": "File I/O and artifact output: extracted_results/elements.db — save_generated_prompt writes to generated_prompts"
    }
  ],
  "verification": {
    "method": "第二遍独立重读 + 换角度反查（不复用第一遍结论）：① 资产面全量清点——find 列出仓库全部 *.py/*.sh/*.js/*.sql 共 15 个可执行文件（.claude 3 + .codex 3 + core 5 + 根 3 + 1 sql），确认无隐藏脚本；os.walk 统计各目录文件数与字节数（.claude/skills 35 文件 320,220B）。② 网络/凭证反向扫——用正则 import (requests|urllib|http|socket|anthropic|openai)|os\\.environ|getenv|API_KEY|api_key|token|secret|\\.env 全仓扫描，命中项仅 .gitignore 的 .env 忽略条目、两份 md 里的 「300+ tokens」「tokenization」 字样，无真实网络/凭证代码。③ 镜像关系实 diff——diff -rq .claude/skills .codex/skills 零输出（逐字节相同），md5sum 抽查 SKILL.md/preprocessor.py/SKILL_ROUTING_GUIDE.md 两端一致；diff .claude/claude.md .codex/codex.md 仅 5 处（10 行）差异。④ 声明 vs 实做交叉核对——把 README/claude.md/路由指南/SKILL.md 里的每处数量声明与 sqlite 实测对账（发现 1246 / 1103+491 / 967 三套数字并存）。⑤ 幽灵依赖反查——对 md 中出现的每个脚本与数据文件名做存在性测试（prompt_tool.py、learner.py、prompt_analyzer.py、facial_features_library.json、module_library.json、extracted_modules.json、universal_elements_library.json 全部 MISSING），并用 grep 确认无 prompt-crafter / prompt-writer 目录。⑥ 写文件与破坏性操作审计——grep open(...,'w'|json.dump|INSERT|UPDATE|DELETE|DROP|os.remove|shutil|os.chdir 全量枚举写点，确认无 rm/shutil 删除、无 DROP TABLE。⑦ 每条 evidence.quote 用 Python 子串比对逐条复核（55/55 命中，0 miss）。",
    "second_pass": [
      {
        "item": "主入口判定（skill.path 该写哪一个）",
        "status": "ok",
        "detail": ".claude/skills/ 下确为 12 个 skill 目录（art-master / design-master / domain-classifier / intelligent-prompt-generator / product-master / prompt-analyzer / prompt-extractor / prompt-generator / prompt-master / prompt-xray / universal-learner / video-master）+ learner.md。定位依据两条：claude.md 项目架构段「**入口**：`.claude/skills/intelligent-prompt-generator/skill.md`」（实测文件名为大写 SKILL.md，属大小写笔误）；路由指南把 portrait domain 与人像请求固定指向 intelligent-prompt-generator。另注 prompt-master 自己标注「⚠️ 旧架构」，故不选它作入口。本条目录已写入 skill.path。"
      },
      {
        "item": ".codex/skills 与 .claude/skills 是否内容相同",
        "status": "ok",
        "detail": "diff -rq .claude/skills .codex/skills 无任何输出（完全一致）；两侧各 35 文件、320,220 字节；md5 抽查 intelligent-prompt-generator/SKILL.md 均为 39dc6f78ad6b580eae2dbdedfcd64bfc、prompt-extractor/preprocessor.py 均为 c8d488bdb22a29334eb15b8025bce14d、SKILL_ROUTING_GUIDE.md 均为 d59be53db785d50d68f6962ab2bacb14。平台差异只在 claude.md vs codex.md：5 处（标题、入口路径 .claude→.codex、两处平台名、一处 「Claude Code 有多强」→「Codex Code 有多强」）。"
      },
      {
        "item": "README/claude.md 宣传的 12 个 skill 是否都存在",
        "status": "discrepancy",
        "detail": "claude.md 与路由指南反复推荐设计类请求调用 `prompt-crafter`（⭐，20万+组合），但 .claude/skills 与 .codex/skills 下都没有 prompt-crafter 目录（grep 命中仅在 README.md/claude.md/codex.md/core/yaml_sampler.py/schema_migration_v1.sql/README_v2.0.md/UPGRADE_GUIDE_v2.0.md 的文本里）。其声称的能力实际由 core/yaml_sampler.py + core/design_bridge.py 实现，并挂在 intelligent-prompt-generator 的 Design 模式下。README 第 33 行另列了 `prompt-writer`，同样不存在，且该行自相矛盾地写「12个专业领域Skills」却列出 13 个名字。"
      },
      {
        "item": "文档引用的脚本/数据文件是否真实存在",
        "status": "discrepancy",
        "detail": "实测 MISSING：prompt_tool.py（prompt-master/skill.md 的 20+ 条 python3 prompt_tool.py ... 命令全部指向它）、prompt_analyzer.py（prompt-analyzer/SKILL.md 的 from prompt_analyzer import analyze_prompt_detail）、learner.py、facial_features_library.json（prompt-master 的旧数据源）、module_library.json、extracted_modules.json（universal-learner 声明的输入）、universal_elements_library.json（element_db.export_library 的输出名）。.gitignore 显示这些被当作「临时开发脚本/大 JSON」排除，即用写作期本机文件而非仓库可交付资产。"
      },
      {
        "item": "元素数量声明三处互相矛盾",
        "status": "discrepancy",
        "detail": "README.md 声明 1246 且分领域明细（portrait 502/common 208/design 166/...）与 sqlite 实测 elements 表逐项吻合；但 claude.md 架构表写「1103元素，12领域」「intelligent-prompt-generator | portrait | 491」，路由指南同样写 491/51/59/77/49；而数据库 domains.total_elements 汇总只有 967（portrait 491/common 203/interior 79/product 77/design 59/art 51/video 49/prompt_writing 9），是早期快照未随 elements 表刷新。结论：README 的 1246 可信，claude.md 与路由指南的 491/1103 属过期数字。"
      },
      {
        "item": "「20万+ 组合」能否复算",
        "status": "discrepancy",
        "detail": "YAML 里可枚举的离散选项：37 个色值 × 每风格边框 (corner_radius 5 × box_shadow 3 × border 2 = 30) × 装饰 9 种 ≈ 9,990，量级差 20 倍。要把数字推到 20 万级需要把装饰的 count_range/rotation_range/size_range/opacity_range 这些连续区间按整数粒度展开计数（如星星 count 3-8 = 6 档 × rotation ±15 = 31 档 × size 16-32 = 17 档…），代码里并无这种展开逻辑（sample_variables 只是 random.choice 抽一组）。故「20万+」是营销口径的上界估计，非可复现统计。"
      },
      {
        "item": "是否存在网络调用（含间接依赖）",
        "status": "ok",
        "detail": "字符串扫描 requests/urllib/http://|https:///socket/curl/wget 在 15 个脚本中零命中；全部 import 清单实测为 os/json/sqlite3/re/yaml/sys/csv/random/time/re/Path/typing/collections/datetime 以及本项目内部模块（core.*、intelligent_generator、framework_loader）。requirements.txt 的 requests/pandas 被注释为可选，未安装也未使用。结论：零网络外发，security.network_calls 填空数组是准确而非漏查。"
      },
      {
        "item": "是否存在凭证/环境变量读取",
        "status": "ok",
        "detail": "os.environ/getenv/keychain 零命中；.env 仅出现在 .gitignore 的忽略规则里（仓库内无 .env 文件）。requirements 声明 anthropic>=0.7.0 但全仓 grep anthropic 只命中 requirements.txt 与两份 learner.md，且 learner.md 自述「当前实现中，AI辅助提取功能返回空列表，需要集成真实的LLM API」——即不上传任何 key，也不调用任何模型 API。"
      },
      {
        "item": "写文件与破坏性操作审计",
        "status": "ok",
        "detail": "全部 open(...,'w') 点位：prompt-xray/xray_helper.py:76（知识卡 md）、:93-94（同名 json）、prompt-extractor/preprocessor.py:253-254（test_output.json）、element_db.py:609-610（library JSON 导出，先 mkdir(parents=True)）。DB 写点：element_db.add_element 的 INSERT elements/categories/tags/element_tags + 计数 UPDATE、save_source_prompt 的 INSERT source_prompts、intelligent_generator.save_generated_prompt 的 INSERT generated_prompts/prompt_elements + element_usage_stats UPSERT。破坏性面仅 element_db._clear_all_data()（6 条 DELETE + 重置 domains 计数），入口是 import_from_json(json_path, clear_existing=True)，默认 False；无 os.remove/shutil.*/DROP TABLE、无子进程调用、无 os.system/eval/exec。"
      },
      {
        "item": "功能声明 vs 实际能力（是否夸大）",
        "status": "discrepancy",
        "detail": "三处缩水：① 「变量采样系统」定位为 v2.0 卖点，但 element_variables 表只有 5 行，SQLiteVariableSampler 对绝大多数元素走 except 分支原样返回；② 「设计系统集成/37 种配色」属实（YAML 实测 37 色值），但 design-logic/ 的 623 行设计原则与约束根本没被读取（design_bridge.load_design_logic 直接 return None）；③ 「语义理解/常识推理」实为 load_knowledge() 里几十条硬编码映射表 + 关键词匹配，不是模型推理，SKILL.md 把语义补充责任显式外包给宿主 LLM（「数据库提供通用元素，Claude补充语义内容」）。功能不假，但「智能」含量主要在 LLM 侧，Python 侧是确定性检索-拼接。"
      },
      {
        "item": "学习闭环是否真的写进过库",
        "status": "ok",
        "detail": "elements.learned_from 分组统计提供了可核验痕迹：universal_learner_v2 861、migrated_from_v2 104、migrated_from_v4 81、manual_learning 39、VoxcatAI Twitter 18、universal_learner 14、batch_learner_v2_enhanced 10、universal_learner_skill_test 11、anti_pattern_analysis 9、prompt_extractor_analysis 5，其余为具体语料名，39 条 NULL。即 1246 条元素中绝大多数来自学习者流程而非纯人工（universal_learner* 合计 886），闭环机制成立。"
      },
      {
        "item": "生成历史闭环的实际使用量",
        "status": "ok",
        "detail": "generated_prompts 17 行、prompt_elements 42 行、element_usage_stats 27 行、source_prompts 675 行中 completed 246 / metadata_only 288 / pending 141。说明作者侧确有生成与分析流转，但作为「持续优化素材库」的数据量还很小，prompt-analyzer 的推荐样本有限。"
      },
      {
        "item": "evidence.quote 逐条复核",
        "status": "ok",
        "detail": "对本 JSON 中全部 55 条 quote 做 Python 子串比对（读取 evidence.file 全文，判断 quote in text），55 命中 0 失败；证据文件均为仓库内文本文件（未使用二进制 db 作为 quote 来源，DB 结论以 note 内实测数字承载）。"
      }
    ],
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "e9512498402f6625300f42b9633d907a28dda126",
    "sha256": "c4376bb8c7682856abac38bf2e58ec3cbf1ad009bd04e2d661c3d2936fb33101",
    "reviewed_by": null,
    "reviewed_at": null
  },
  "assessed_at": "2026-10-25",
  "method_version": "2.0",
  "mirror": {
    "archive": "https://skillpub.pages.dev/r2/v/2026-09-15/image-prompt-generator.tar.gz",
    "sha256": "c4376bb8c7682856abac38bf2e58ec3cbf1ad009bd04e2d661c3d2936fb33101",
    "commit": "e9512498402f6625300f42b9633d907a28dda126"
  },
  "original": {
    "github": "https://github.com/huangserva/skill-prompt-generator/tree/main/.claude/skills/intelligent-prompt-generator",
    "path": ".claude/skills/intelligent-prompt-generator",
    "commit": "e9512498402f6625300f42b9633d907a28dda126"
  }
}