{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "adversarial-spec",
  "built": "2026-10-26",
  "control_level": 4,
  "control_level_label": "L4 高权限",
  "capabilities": [
    "execute_command",
    "network",
    "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: python3 <…>/debate.py critique|diff|export-tasks|send-final|providers|focus"
    },
    {
      "file": "网络端点",
      "summary": "Declares external network access: litellm → official vendor APIs (OpenAI / Anthropic / Google / xAI / Mistral / Groq / O"
    },
    {
      "file": "本地工作目录",
      "summary": "File I/O and artifact output: ~/.claude/adversarial-spec/config.json (bedrock enable/disable/add-model/ali"
    }
  ],
  "verification": {
    "method": "第二遍独立重读 + 反查（换角度抓第一遍的错）：① 逐个断言回源码取证——shutil.which 探测、codex/gemini 子进程 argv、litellm completion 调用点、TELEGRAM_API 端点、SESSIONS_DIR/CHECKPOINTS_DIR/PROFILES_DIR/GLOBAL_CONFIG_PATH 四条落盘路径、MODEL_COSTS 价目表均逐字命中；② 反查『有没有被漏掉的网络/写文件』：对 scripts/ 全目录扫描 subprocess|requests|urlopen|open(|write_text|Path.home|os.environ，除已知项外无其它出口（无 curl/wget、无额外域名）；③ 夸大检查：SKILL.md 声明 vs 代码能力逐条比对，发现两处出入（见 second_pass 的 Python 版本与 spec-output 归属）；④ 轮数上限代码反查：debate.py 内无 max-round 常量，确认 'Maximum 10 rounds' 只是提示词纪律而非强制；⑤ .claude/settings.local.json 揭示作者开发期放行 Bash(python3:*)（安全面补记）；⑥ 元数据核对 gh api（556★ / MIT / pushed_at 2026-01-22T06:33:17Z）与本地 HEAD f90cf0c 一致。",
    "second_pass": [
      {
        "item": "多模型调用确实存在（非纯提示词）",
        "status": "ok",
        "detail": "models.py import litellm + from litellm import completion，标准路径 'response = completion(**completion_kwargs)'；providers.py CODEX_AVAILABLE/GEMINI_CLI_AVAILABLE 用 shutil.which 探测。"
      },
      {
        "item": "订阅制模型走 CLI 子进程",
        "status": "ok",
        "detail": "call_codex_model 构造 ['codex','exec','--json','--full-auto','--skip-git-repo-check','--model',…] 并 subprocess.run；call_gemini_cli_model 构造 ['gemini','-m',model,'-y'] 并把 prompt 经 input= 传入。"
      },
      {
        "item": "Telegram 端点与轮询",
        "status": "ok",
        "detail": "telegram_bot.py 'TELEGRAM_API: str = \"https://api.telegram.org/bot{token}/{method}\"' + 'with urlopen(req, timeout=30)'（urllib，非 requests）；poll_for_reply(timeout=60 默认) 与 cmd_notify 均存在。"
      },
      {
        "item": "Bedrock 模式确实可全量接管调用",
        "status": "ok",
        "detail": "is_bedrock_enabled()/get_bedrock_config() 读 GLOBAL_CONFIG_PATH；models.py 在 bedrock 分支设置 AWS_REGION 并给 model 加 'bedrock/' 前缀；handle_bedrock_command 支持 status/enable/disable/add-model/remove-model/alias。"
      },
      {
        "item": "『Maximum 10 rounds』是否由代码强制",
        "status": "discrepancy",
        "detail": "SKILL.md 写 'Maximum 10 rounds per cycle (ask user to continue if reached)'，但对 debate.py 全文检索无任何轮数上限常量/参数（--round 只是当前轮号，--rounds 只用于 send-final 汇报）。结论：轮数上限是提示词纪律，代码不设护栏，已在 how_it_works 第 4 条与 risks 中如实标注。"
      },
      {
        "item": "『Write it to spec-output.md』的归属",
        "status": "discrepancy",
        "detail": "第一遍曾按『脚本写文件』记录；第二遍在 scripts/ 全目录检索 'spec-output' 零命中，确认该写入由宿主 Write 工具完成（SKILL.md allowed-tools: Bash, Read, Write, AskUserQuestion）。已改写为『成品交付由 Claude 完成』并据此调整 file_writes。"
      },
      {
        "item": "Python 版本要求一致性",
        "status": "discrepancy",
        "detail": "SKILL.md Requirements 写 'Python 3.10+ with `litellm` package installed'，而 pyproject.toml 写 requires-python = \">=3.9\" 且 ruff target-version = \"py39\"、mypy python_version = \"3.10\"。属文档与打包元数据的轻微不一致（不影响功能判定）。"
      },
      {
        "item": "成本追踪是否真有实现（非仅文档）",
        "status": "ok",
        "detail": "providers.py MODEL_COSTS 价目表 + DEFAULT_COST；debate.py 'Cost: ${cost_tracker.total_cost:.4f}' 与 JSON 输出 'cost': {total, input_tokens, output_tokens, by_model}。"
      },
      {
        "item": "泄露风险反例搜索：是否把 key 内容打印或外传",
        "status": "ok",
        "detail": "list_providers 只打印 '[set]/[not set]' 状态，未回显 key 值；全仓无 .env 示例文件、无硬编码 key；'用户文档是否出域' 属功能固有（已写入 injection_surface 第 ① 条）。"
      },
      {
        "item": "外部依赖清单完整性",
        "status": "ok",
        "detail": "对 scripts/ 与仓库根做 URL/域名词法扫描，端点仅 api.telegram.org（代码内）与各家 provider（经 litellm，无自建端点）；CLI 仅 codex/gemini；包依赖 requirements.txt 仅 litellm==1.80.13。"
      },
      {
        "item": "license/stars/commit 元数据",
        "status": "ok",
        "detail": "gh api repos/zscole/adversarial-spec：MIT、556★、pushed_at=2026-01-22T06:33:17Z、archived=false；本地 HEAD=f90cf0c36c3999b8dc272c9c06dee9846076f369，与任务书 pin commit 一致。"
      }
    ],
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "f90cf0c36c3999b8dc272c9c06dee9846076f369",
    "sha256": "89a0a6e57cca0f6a0f4c981b412c295eb16ae81660d284a61fec4187dcdc8e61",
    "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/adversarial-spec.tar.gz",
    "sha256": "89a0a6e57cca0f6a0f4c981b412c295eb16ae81660d284a61fec4187dcdc8e61",
    "commit": "f90cf0c36c3999b8dc272c9c06dee9846076f369"
  },
  "original": {
    "github": "https://github.com/zscole/adversarial-spec/tree/main/skills/adversarial-spec",
    "path": "skills/adversarial-spec",
    "commit": "f90cf0c36c3999b8dc272c9c06dee9846076f369"
  }
}