antithesis-workload – 分布式系统工作负载注入 Skill

3周前更新 7 0 0 0

antithesis-workload 是用于编写和运行 Antithesis 确定性仿真测试工作负载的 Skill,帮助 AI Agent 把待测系统编排成可在 Antithesis 平台反复复现、自动探索并定位并发与分布式缺陷的测试场景。

Skill 安装

多 Agent 安装
npx skills add https://github.com/antithesishq/antithesis-skills --skill antithesis-workload

使用 npx skills 快速安装,支持将 Skill 添加到多个兼容的 AI Agent。

Skill 调研报告

Skill 详细介绍

antithesishq/antithesis-skills#antithesis-workload 是 Antithesis 官方 Skills 仓库中提供的一个 Skill,用于配合 Antithesis 平台完成「工作负载(Workload)」相关的定义、接入与验证工作。Antithesis 是一个面向确定性仿真测试的平台,核心思路是在完全可控的仿真环境中运行被测系统,从而复现并发、时序、故障注入等难以在真实环境中稳定再现的问题。antithesis-workload 这个 Skill 的作用,是把「如何为 Antithesis 编写和配置一个工作负载」这件事,交给 AI Agent 来辅助完成。

需要先明确一点:它本身不是一个可以独立运行的软件,也不是一个测试框架或运行时。它是一组面向 AI Agent 的指令与知识,让 Agent 在用户提出「帮我为 Antithesis 写一个 workload」这类需求时,能够知道该参考什么、该产出哪些文件、该注意哪些约束。

核心用途主要围绕以下几类任务:

  • 协助编写 Antithesis 工作负载的代码骨架,例如容器入口、启动脚本、测试驱动逻辑。
  • 协助整理 workload 的配置文件,让被测程序能在 Antithesis 仿真环境中被正确拉起和驱动。
  • 协助理解 workload 与 Antithesis 平台其余部分(如测试配置、故障注入、断言检查)之间的关系。
  • 在已有代码基础上,帮助改造出符合 Antithesis 要求的 workload 结构。

它不是什么:

  • 不是 Antithesis 平台的替代品,不能脱离 Antithesis 环境独立跑测试。
  • 不是通用的单元测试或集成测试生成器,它的目标环境是 Antithesis 的仿真运行环境。
  • 不是自动化发布工具,不负责把代码推送或部署到 Antithesis。

适合哪些用户:已经在使用或准备评估 Antithesis 平台、需要在 Antithesis 上定义工作负载的工程团队,尤其是做分布式系统、数据库、共识协议、并发密集系统测试的团队。

不适合哪些需求:如果只是想找一个通用的测试代码生成 Skill,或者根本不打算使用 Antithesis 平台,那么这个 Skill 的价值有限。它的能力边界与 Antithesis 平台本身紧密绑定。

与普通 Agent 自身能力的区别在于:普通 Agent 也能写出「看起来像测试」的代码,但未必了解 Antithesis 对 workload 的具体结构约定、入口约定、环境变量约定等。这个 Skill 的价值是把这部分平台特定知识前置,减少用户在「照着文档改来改去」上的时间。

Skill 安全评估

总体判断:这是一个配置与代码辅助类 Skill,本身不涉及运行高风险操作。风险主要来自使用过程中 Agent 可能对本地文件或仓库做出的修改。合理使用、控制权限的前提下,风险较低。

具体到可能涉及的安全点:

  • 来源可信度:Skill 来自 Antithesis 官方组织(antithesishq)的 skills 仓库,来源相对明确。安装前建议确认仓库地址与组织身份与官方一致,避免安装到镜像或第三方重新发布版本。
  • 文件写入:Agent 在协助编写 workload 时,通常需要在用户仓库中新增或修改文件(如脚本、配置、Dockerfile 相关内容)。这属于正常工作行为,但也意味着 Agent 会对你的代码目录有写权限。建议在版本控制下使用,改动可回滚。
  • Shell 执行:为了让 workload 能跑起来,Agent 可能被要求执行构建、启动、日志查看等命令。如果你只想让 Agent 生成代码而不执行,可以关闭 Agent 的自动执行 Shell 权限,由自己手动执行命令。
  • 网络访问:如果 workload 涉及拉取依赖或镜像,Agent 可能触发网络操作。Skill 本身没有被公开资料描述为强制的网络访问要求,但具体行为取决于你让它完成的任务。
  • 凭证与密钥:如果工作负载需要访问内部服务或私有镜像仓库,可能涉及密钥。Skill 本身不被描述为要求用户提供 API Key;是否需要凭证取决于你自己的项目配置。不要把生产环境凭证交给 Agent 处理;测试用途的凭证也应控制权限范围。
  • 供应链风险:安装 Skill 时,请确认通过官方渠道获取,避免使用来源不明的 Skill 副本。相关依赖的真实来源以该 Skill 当前官方说明为准。

降低风险的建议:

  1. 在受版本控制的仓库中使用,改动可随时 revert。
  2. 不需要 Agent 自动执行时,关掉 Shell 自动执行权限。
  3. 私有凭证用最小权限的测试账号,用完即撤。
  4. 安装前核对仓库归属,避免第三方打包版本。

Skill 使用要求

一、Agent / 客户端

该 Skill 属于 Antithesis 官方 skills 仓库,面向 AI Agent 的 Skill 加载机制。官方并未公开完整的第三方 Agent 兼容列表,因此无法确认它在所有 Agent 中都经过官方验证。从 Agent Skill 的通用工作方式来看,凡是支持 Skills、自定义 Skill 或类似指令加载机制的 Agent,通常都可以尝试使用,包括 Claude Code、Codex、Cursor、Trae、OpenClaw、WorkBuddy 等。不同 Agent 的 Skill 加载位置、识别方式和兼容程度可能不同,具体以对应 Agent 当前版本为准。

二、运行环境 / 依赖

项目 要求
Agent 支持 Skills 加载机制的 Agent,具体兼容情况以官方说明为准
操作系统 官方未明确限定;跟随你所用 Agent 支持的系统
网络 安装 Skill 时通常需要;使用过程中是否需要视具体任务而定
Antithesis 环境 如要实际运行 workload,需要你有可用的 Antithesis 环境

官方没有公开明确的最低 Node.js / Python 版本要求,因此不在这里猜测。若你的 workload 项目本身需要这些运行时,按你项目自身的要求准备即可,与 Skill 是否可用无关。

三、权限

  • 文件读取:必需(Agent 需要读取你的项目文件才能协助编写)。
  • 文件写入:可选,但通常需要(用于生成或修改 workload 相关文件)。
  • Shell 执行:可选。仅生成代码时不需要;需要实际构建或运行 workload 时才有用。
  • 网络访问:可选,取决于任务。
  • Docker:可选。如果 workload 以容器方式打包运行,则可能涉及。

四、账号 / API Key

Skill 本身不要求用户提供 Antithesis 账号或 API Key。是否需要账号、Token 或密钥,取决于你实际使用的 Antithesis 环境和你的项目配置。这两件事不要混淆:Skill 不需要凭证,不代表后续运行 workload 也不需要凭证。

最小使用条件

  1. 一个支持 Skill 加载的 AI Agent。
  2. 一个可读取的代码项目。
  3. 若需要验证 workload,需要一个可访问的 Antithesis 环境。

Skill 安装、使用与卸载教程

一、安装

可以直接复制本页面提供的 Skill 安装指令,粘贴到对应 Agent 或终端执行。如果你不确定自己的 Agent 应该如何安装,最简单的方式是直接问当前的 Agent:

如何安装 antithesishq/antithesis-skills#antithesis-workload?

如何在 Claude Code 中安装 antithesishq/antithesis-skills#antithesis-workload?

如何在 Codex 中安装 antithesishq/antithesis-skills#antithesis-workload?

如何在 Cursor 中安装 antithesishq/antithesis-skills#antithesis-workload?

让 Agent 根据自己的 Skill 加载与管理机制给出对应步骤。不同 Agent 的安装路径和识别方式不一样,与其套用其他 Agent 的方式,不如让当前 Agent 指导。

如果官方对安装有额外要求(例如需要先克隆整个 skills 仓库再选择其中的子 Skill),以该 Skill 当前官方说明为准。

二、安装后如何使用

安装后,当你的需求涉及「为 Antithesis 编写或调整工作负载」时,Agent 会参照这个 Skill 的内容来回应。触发方式主要是用自然语言描述需求,通常不需要特殊的斜杠命令。

比较合适的任务类型:

  • 从零开始搭建一个 Antithesis workload 骨架。
  • 把已有测试逻辑改造成 Antithesis workload 结构。
  • 梳理 workload 与 Antithesis 配置之间的关系。

使用示例:

使用 antithesis-workload,帮我把这个服务的并发测试改造成 Antithesis 可运行的 workload 结构。

使用 antithesis-workload,检查我当前的工作负载定义是否符合 Antithesis 的基本约定。

使用 antithesis-workload,帮我整理这个 workload 需要哪些配置项。

三、卸载

卸载方式取决于你使用的 Agent:

  • 使用对应 Agent 或 Skill 管理器提供的删除方式移除该 Skill。
  • 如果 Agent 支持通过 Skill 目录管理,删除对应的 Skill 文件或目录。
  • 不确定时,直接询问当前 Agent:

    如何卸载 antithesishq/antithesis-skills#antithesis-workload?

不同 Agent 的 Skill 安装位置与管理方式可能不同。如果没有统一卸载命令,直接让当前 Agent 帮你移除通常更稳妥。不要手动删除不确定用途的目录,以免影响其他 Skill。

常见问题

1. 这个 Skill 能脱离 Antithesis 平台单独使用吗?

不能。它的内容围绕 Antithesis 的工作负载约定展开,离开 Antithesis 环境后,很多约束没有实际意义。你可以让它帮你写通用测试代码,但那就不是在用这个 Skill 的核心价值了。

2. 中国大陆使用是否有网络要求?

安装 Skill 本身通常需要访问对应的仓库来源,是否顺畅取决于你所在网络环境。实际跑 workload 是否受网络影响,取决于你的 Antithesis 环境位置和项目依赖来源,与 Skill 无关。官方资料未对中国大陆网络环境做专门说明。

3. 安装后 Agent 没有识别到这个 Skill,怎么办?

常见原因有几个:安装路径不是该 Agent 期望的 Skill 目录;Agent 版本不支持这种 Skill 加载方式;安装后没有重启或重新加载。可以先让 Agent 自查它能识别到哪些 Skill,再对比安装位置是否正确。

4. 可以同时安装到多个 Agent 吗?

通常可以。Skill 一般不会与特定 Agent 强绑定,只要各 Agent 都支持相应的加载机制即可各自安装一份。但不同 Agent 对同一 Skill 的解析程度可能不同,实际表现以各 Agent 为准。

5. 这个 Skill 会修改我现有的项目文件吗?

取决于你给它的任务和 Agent 的权限设置。如果让它直接写代码,它可能会新增或修改文件。建议在版本控制下操作,并考虑关闭自动 Shell 执行,只让它给出改动建议,由你自行确认。

6. 官方是否公布了支持的 Agent 完整列表?

目前没有公开的完整第三方 Agent 兼容列表。无法从现有资料确认它在每个 Agent 中的表现。使用前可以先在小项目上试,确认行为符合预期后再用于更重要的工程。

7. 这个 Skill 和通用的「测试代码生成」有什么区别?

通用测试生成面向的是常规测试框架与运行方式;这个 Skill 面向的是 Antithesis 的仿真运行模型与工作负载结构约定。如果目标不是 Antithesis,用通用测试生成更合适。

Skill 更新日志

版本列表
无版本号
为 PR #204 更新技能版本
无版本号
fix: 澄清测试模板不需要驱动程序 (#204) Co-authored-by: Carl Sverre Co-authored-by: Claude Opus 5.5
无版本号
为 PR #198 更新技能版本
无版本号
为 PR #201 更新技能版本
无版本号
为 PR #200 更新技能版本
无版本号
feat: 添加 antithesis-mutation-testing 技能 (#200) * feat: 添加 antithesis-mutation-testing 技能 验证的是 oracle 而非 SUT:一个在每次运行中都通过的属性,可能是一个永远无法失败的属性。对于每个安全类属性 (Always、AlwaysOrUnreachable、Unreachable),该技能注入一个 真实的 bug,在 Antithesis 下运行它,并确认目标 属性触发——然后将每个幸存者诊断为坏变异体、坏 oracle、坏工作负载或坏属性,将修复路由到工作负载或 研究技能。 工作原理:变异体仅作为补丁存在于用户代码树的临时 git fork 中——工作树永远不会被修改,clean.sh 会验证这一点。每个变异体构建为自己的镜像(在 fork 的 compose 中交换标签),携带一个启动公告以证明正确的 构建已部署,以及一个证明有缺陷代码已执行的标记,并在 花费任何运行之前先在本地验证。运行以 --ephemeral 启动, 在专用的 --source 下,因此故意失败永远不会进入真实的 属性历史。证伪要求标记与目标的 反例出现在同一历史中,而不是两个运行范围的计数。 组件: - SKILL.md:先决条件、绿色基线门禁、开场访谈 (预算上限、并发、自主性、树写入权限)、 范围界定规则、三个工作流、自审清单 - references/:测试装置机制、变异体设计(三部分补丁)、 静态杀伤链验证、扫描 + 判定阶梯 + 归因、 证据工件(访谈/状态/历史/报告)、针对缺失 scratchbook 的目录 重建、恢复协议 - assets/mutation-testing/:六个 bash 脚本(fork、sync-patches、 select-mutant、build-mutants、verify-mutant、clean)以及一个记录工作目录的 AGENTS.md 另外:triage 在全绿运行中建议该技能,工作负载的迭代 文档在绿色运行后指向它,README 记录了用法和成本。 对于审查,承重部分是判定阶梯和 同历史归因规则(sweep-and-verdicts.md)、预算和 停止规则(上限、尝试次数上限、无进展停止)、以 fork 的 base_tree 指纹为键的 双分支重新扫描规则,以及 脚本的 INTENT/ASSUMES/GUARANTEES 头中的 fork 隔离保证。已针对真实租户进行端到端验证,由 三代理小组审查交叉引用和一致性缺陷,并 通过 make validate 检查。 * 将 mutatable 添加到拼写错误字典,并将 mis-implemented 替换为 incorrectly implemented * workload 技能:简化变异测试的说明 Co-authored-by: Carl Sverre * README:澄清变异测试成本 --------- Co-authored-by: Carl Sverre
无版本号
为 PR #195 更新技能版本
无版本号
为 PR #199 更新技能版本
无版本号
澄清 Antithesis 断言不会结束时间线 (#199) 工作负载技能的断言参考中没有提到 SDK 断言是非致命的。根据此文档编写断言的模型可能会从训练中引入 断言失败 = 崩溃/中止的假设,导致断言不足或围绕断言调用 编写防御性代码。
无版本号
为 PR #194 更新技能版本
无版本号
fix: reach 声明必须断言前置条件,而不是违规 (#194) * fix: reach 声明必须断言前置条件,而不是违规 遵循 antithesis-workload,一个代理将每个 Sometimes reach 声明写为 同一位置 Always 的精确否定。这样的配对不携带任何 信息:Sometimes 仅在 Always 失败时触发,而在修复后的 构建上它永远不会触发,Antithesis 会将其报告为失败。该代理还 将未触发的 reach 声明解读为覆盖缺口,并称两个绿色安全 属性为空泛。 将规则添加到 references/assertions.md,将检查添加到 references/iteration.md 中的 triage 循环,并在 SKILL.md 中添加一个自审项。 fixes #193 Co-Authored-By: Claude * docs: 将 reach 声明指南精简为简化技术英语 Co-Authored-By: Claude * docs: 分别断言前置条件的每一部分 Co-Authored-By: Claude --------- Co-authored-by: Carl Sverre Co-authored-by: Claude
无版本号
为 PR #191 更新技能版本
无版本号
为 PR #189 更新技能版本
无版本号
使用 Sometimes 断言验证工作负载可达性 工作负载技能已经教授了用于活性和语义状态的 Sometimes 断言, 并教授了 triage 之后的迭代。缺失的是:有意地 将 Sometimes 断言写为关于工作负载应达到什么的声明, 然后将未触发的断言用作工作负载驱动需要改进的证据。 将该实践添加到 assertions.md,将其连接到 iteration.md 中的迭代 循环,并在 SKILL.md 中添加一个工作流步骤和自审 标准。
无版本号
为 PR #188 更新技能版本
无版本号
为 PR #184 更新技能版本
无版本号
chore: 为 PR #182 回填 changelog 条目和技能版本号提升 (#183) * 为 PR #182 更新 changelog 回填:PR #182 合并时没有 changelog 标签,因此 pr-merge-changelog 工作流短路,没有添加任何条目。 通过运行 `.ci-scripts/changelog.py add-entry` 并传入 `find_merged_pr.py` 会输出的条目文本复现。 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_018gQyXJukB6xdZzEieUvMTu * 为 PR #182 更新技能版本 回填:同样的短路跳过了版本号提升。通过 运行 `.ci-scripts/update_skill_versions.py update --sha 5b6aeb5` 复现, 使用工作流本应传入的 #182 合并提交 SHA。 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_018gQyXJukB6xdZzEieUvMTu --------- Co-authored-by: Carl Sverre Co-authored-by: Claude Opus 5 (1M context)
无版本号
fix: 修复损坏的故障注入文档链接并解析重定向 (#182) * fix: 修复故障注入文档链接并解析重定向 故障注入文档已移动到 /docs/product/fault_injection/。三个 技能指向了会 404 的过时路径:antithesis-setup 和 antithesis-workload 使用了 /docs/concepts/fault_injection.md,而 antithesis-setup-k8s 使用了 /docs/environment/fault_injection.md(它会 302 到 concepts 路径,然后 404)。 还将重定向的代理文档 URL 替换为其目标: docs.anthropic.com 和 docs.claude.com 的 Claude Code 页面现在指向 code.claude.com,developers.openai.com/codex 指向 learn.chatgpt.com/docs, discord.gg 指向 discord.com/invite。 三个重定向被有意保留:snouty releases/latest/download URL 解析为带版本固定、签名且令牌会过期的资产 URL;claude.ai/install.sh 是规范的 安装程序入口点;以及 GitHub issue 模板 URL 仅 对未认证请求重定向到登录页面。 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_018gQyXJukB6xdZzEieUvMTu * fix: 将 Codex 链接指向 CLI 文档页面 审查反馈:所有四个 Codex 引用都应指向 learn.chatgpt.com/docs/codex/cli,而不是文档根目录或旧的 openai.com/index/openai-codex/ 公告页面。 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_018gQyXJukB6xdZzEieUvMTu * chore: 从 lychee.toml 中删除已失效的 openai.com 排除项 该排除项是在 #36 中添加的,因为 openai.com 对 GitHub Actions runner 返回 403。它覆盖的唯一 URL 是两个 openai.com/index/openai-codex/ 链接,现在已指向 learn.chatgpt.com/docs/codex/cli,因此它不再匹配任何内容。 www.npmjs.com 排除项保留;PREREQUISITES.md 仍然链接到那里。 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_018gQyXJukB6xdZzEieUvMTu --------- Co-authored-by: Carl Sverre Co-authored-by: Claude Opus 5 (1M context)
无版本号
为 PR #180 更新技能版本
无版本号
为 PR #179 更新技能版本
无版本号
为 PR #178 更新技能版本
无版本号
为 PR #177 更新技能版本
无版本号
为 PR #176 更新技能版本
无版本号
fix: 在文档站点重组后更新 Antithesis 文档链接 (#175) Antithesis 文档在新的 concepts/、reference/ 和 product/ 前缀下重组了其 URL 结构,导致多个技能中引用的 markdown (.md) 文档链接 404。此更改将每个受影响的链接重新指向其当前位置,通过文档自身的重定向映射解析,并与 llms.txt 交叉核对。 它还将研究和设置技能(及其参考资产)中剩余的面向代理的 HTML 文档链接转换为 markdown 版本,以便代理直接获取 markdown。README 和入门指南中面向人类的散文链接,以及 antithesis-documentation 技能的说明性 URL 示例,有意保留为 HTML 页面 URL。 make validate-links 通过且无问题。 Co-authored-by: Claude
无版本号
为 PR #169 更新技能版本
无版本号
为 PR #165 更新技能版本
无版本号
为 PR #162 更新技能版本
无版本号
为 PR #168 更新技能版本
无版本号
为 PR #161 更新技能版本
无版本号
workload: eventually 会随时取消命令;finally 等待所有命令完成 (#161)

暂无评论

none
暂无评论...