用户手册

代码审计

代码审计是实验性功能。

代码审计是借助本机编程智能体对项目进行的安全审查。在左栏中右键点击项目,选择「实验性功能」→「代码审计」,然后点击「新建审计」。在「本机助手」下选择「Codex」或「Claude」,再选择「模型」「思考程度」和「审计范围」,然后点击「开始审计」。报告页面会显示扫描当前所处的阶段。「助手会话」显示智能体原始的工具调用、分析过程以及待处理的权限请求;在那里处理这些请求后,审计才会继续。Codex Security 封存结果后,报告随即显示。

审计在项目所在的机器上运行,使用所选智能体已安装的 CLI,并沿用其现有的登录、配置和权限处理方式(「沿用本机助手的登录和配置,无需单独配置模型 API。」)。VelaTerm 只为审计会话添加一个 Codex Security MCP 服务器;你的其他 MCP 服务器保持不变,VelaTerm 自身也不调用模型 API。该 CLI 必须已安装、已登录,且未超出账号额度。CLI 自身的配置可能会指定模型服务商,VelaTerm 不会更改这一配置。

集合的菜单中也有「代码审计」项。没有根文件夹的集合无法进行审计。

模型与思考程度

模型列表与新建会话对话框中该智能体的列表相同,并会考虑该智能体的默认启动参数,因此列表与审计实际的运行方式一致。「默认模型」表示沿用智能体自己的选择。选择提供思考程度档位的模型后,才可以设置「思考程度」;「自动」表示沿用智能体自己的选择。如果列表无法加载,会出现重试按钮。后端会检查明确指定的组合,审计会保存所选的值,供历史记录和之后的运行使用。模型出现在列表中,并不代表你的账号有权使用它。服务商出错(包括用量额度耗尽)时,审计会以失败结束。

新建的审计会要求以界面语言撰写分析内容。协议字段、路径、标识符以及引用的源码证据保持原样。

Codex Security 集成

VelaTerm 内置了以 Apache-2.0 许可证公开发布的 @openai/codex-security@0.1.26,其插件清单版本为 0.1.95;新建审计页面会同时显示这两个版本号。原始的技能、参考资料、模式定义、脚本、运行时和许可证均包含在内,UPSTREAM.json 记录了软件包来源、完整性校验值和文件哈希。

每次新建审计都会在上游工作台中登记一次真实的扫描。智能体读取内置的入口技能,并使用上游的 MCP 工具和结果格式。早期独立实现的批处理流程所产生的记录仍可阅读,并标有「旧版审计 · 此记录未使用 Codex Security 流程。」

两种智能体使用相同的上游流程。公开的 TypeScript SDK 用于驱动 Codex 运行时,并未提供 Claude Code 执行器,因此 VelaTerm 通过上游的 MCP 服务器和本地工作台进行集成。对 Claude Code 的支持由 VelaTerm 的适配层实现,并不代表上游声明官方支持 Claude。

运行时要求 PATH 中有上游软件包所支持版本的 Node.js,以及 Python 3.10 或更高版本;Python 3.10 还需要 tomli 包,Python 3.11 及更高版本则以内置的 tomllib 代替。VelaTerm 会检查内置资源并将其解压到自己的数据目录中,不会将其安装到你的 Codex 或 Claude 配置中。

审计范围与流程

  • 选择整个仓库时,会针对目标的固定快照和仓库的安全策略运行上游的 Standard 扫描。
  • 选择目录或文件时,会按确切的「相对路径」运行 Standard 扫描。为理解调用链,可能会读取其他源文件,但不会声称这些部分已经过完整审计。
  • 选择工作区变更时,会针对固定的 Git 变更集运行上游的差异扫描技能。其中包括上游目标解析器支持的已暂存、未暂存和未跟踪的改动,并保留已删除文件的基线证据。

Standard 扫描会读取 skills/security-scan/SKILL.md 和 references/core-scan.md,执行运行前检查、独立的基线与架构分析、以源码为依据的调查、候选问题检查点、反证审查、验证以及覆盖范围核对。智能体支持时会使用独立工作单元(worker);否则采用上游的顺序执行回退方案,并且必须说明其局限。仅凭工作单元数量的设置,并不能证明独立工作单元确实运行过。

工作区变更审计会读取 skills/security-diff-scan/SKILL.md,依次锁定目标、建立威胁模型、准备并列举审查项、查找候选问题、验证这些问题、分析攻击路径,并提交结果草稿以完成扫描。只审阅已修改文件的当前内容,并不能替代这一流程。

上游工作台只接受目录作为审计范围。为了支持选择单个文件,安装后的运行时应用了两个改动范围很小、并记录了哈希值的补丁:允许将已存在的文件作为审计范围,并将其计为一个快照条目。内置的原始文件保持不变,安装后的 ADAPTER.json 同时记录原始哈希和适配后的哈希。选择单个文件时,绝不会变成扫描其所在的整个目录。

审计指令禁止修改源码、实施修复、对外发布以及更改智能体的配置。智能体自身的工具权限仍然有效。这些指令并不是操作系统层面的沙箱。验证时必须说明实际检查了哪些内容;静态分析发现的问题并不意味着已复现漏洞利用(「仅执行静态审阅。报告中的覆盖情况不保证发现全部漏洞,也不代表已进行动态漏洞复现。」)。

报告、覆盖范围与取消

权威结果是上游的 scan-manifest.json、findings.json 和 coverage.json。上游的收尾程序会验证并封存这些文件,然后生成可读的报告。VelaTerm 导入这些文件,并检查每个问题的位置和确切的源码行,检查时将 LF 和 CRLF 换行符视为相同。结构有效且源码行匹配,本身并不能证明问题可以被利用。如果源码证据不匹配,审计将保持「失败」状态,其中的问题也不会被认定为已验证。已封存的上游报告仍可查看;导出 Markdown 时,验证失败的信息会放在最前面,报告本身不会被改写。

封存之前,VelaTerm 会使用导入时的同一个校验器,检查草稿中的路径、行范围和摘录。如果证据不匹配,扫描保持未封存状态,并告知智能体需要更正的位置。之后由 Codex Security 的完成工具生成并封存报告。这项检查从不改写摘录、删除问题或更改已封存的结果。导入时会再次执行这项检查,因此之后的源码改动不会在不知不觉中让无效的证据变成成功的结果。

覆盖情况取自上游的审查记录和判定结论,而不是智能体自称读过的文件数量。未解决的候选问题、推迟处理的工作、排除项和完成时的警告都会保持可见。覆盖不完整的已封存扫描显示为「部分覆盖」。即使覆盖完整,也不能保证发现了所有漏洞。

如果智能体结束了一个回合,而扫描仍有工作未完成,VelaTerm 会在同一会话中继续同一次扫描,并保留已有的问题和各工作单元的结果。权限请求会保持待处理状态(「等待权限或输入」);取消或服务商出错会停止自动继续。如果连续三个回合结束后,上游的审查进度、问题或覆盖情况都没有任何变化,审计会以扫描未完成的错误停止,并保留其检查点。

「报告」标签页显示保留的问题、源码证据和覆盖范围的限制。每个问题都有自己的 URL,并显示其攻击路径、验证方式和结论(如有提供)、修复建议以及报告中的源码摘录;在将这些摘录视为已核实之前,请先查看审计状态。「报告产物」标签页保存上游生成的完整报告和扫描 ID。正在运行的扫描会显示上游软件包和插件的版本、实际阶段与进度以及警告;在生成已封存的报告之前,页面显示的是进度和检查点信息,而不是空白的评估结果。在「助手会话」中,普通的消息输入框和回退功能已停用,以免无关的回合取代审计;权限请求仍可正常处理。

「取消」会停止上游扫描和智能体。如果上游工作台能够封存已保存的检查点,这些检查点仍可查看,并保持已取消或失败的状态。迟到的结果无法让已取消的审计恢复。重启后,VelaTerm 会与上游状态进行核对:已完成并封存的结果可以导入,未完成的运行会标记为「已中断」,其保留的文件与已完成的结果区分开来。

在已有记录上点击「开始审计」,会使用已保存的智能体和各项选择,对当前目标发起一次新的扫描。它不会恢复已停止的模型回合,也不会沿用旧的结论。

审计历史、新建审计表单、报告详情和助手会话都有各自的 URL,因此可以直接打开、刷新,并使用浏览器的后退和前进按钮导航。在窄屏上,历史记录和详情会显示为不同的视图。

导出与限制

「导出报告」提供 Markdown 和 JSON 两种格式。如果存在上游报告,Markdown 导出会包含该报告;否则会明确标明这是一次未完成扫描的记录。JSON 导出保留所有导入的数据以及 VelaTerm 自身的元数据。上游扫描文件夹中还保留着生成的 SARIF 等文件。导出内容可能包含源码摘录和漏洞细节,分享时请谨慎。

此界面提供 Standard 审计和工作区变更的差异审计。其他内置技能(例如深度扫描、修复、修复验证和外部问题跟踪)作为上游资源保留,但不作为单独的操作提供。审计不会应用修复、发布问题、创建 issue 或发起拉取请求。

诊断

后端会将审计的生命周期和上游阶段信息记录到应用日志目录下的 runtime-*.log 中。VLX_LOG_DIR 指定共用的日志位置;未设置时,由 VLX_SECURITY_LOG_DIR 指定审计事件的日志位置。VLX_SECURITY_LOG_LEVEL=error 只记录失败,设为 off 则不记录。提示词和回复只以其大小和 SHA-256 摘要的形式记录;完整的源码、凭据和完整的 AI 回复不会写入日志,也不保留服务商的原始消息。自定义模型名称会被替换为仅在当前进程内有效的匿名标识符。如有 token 计数,记录的是该会话的累计用量。智能体的对话仍按常规方式记录。

审计失败时,请在报告中查看服务商给出的说明,或打开「助手会话」。开始下一次审计之前,请先解决登录、运行时、权限或账号额度方面的问题。MCP 服务器已连接只能说明工具可用,并不能说明模型已完成扫描。

上游参考资料:CLI 概览、CLI 参考、公开源码。