Recipes 负责什么
Image selection
读取 public Docker image metadata 或 provider snapshot,并设置 provider params。
Workspace layout
对齐
/testbed、/workspace、/root 等 benchmark workspace。Resource hints
合并 task CPU、memory、disk、GPU 或 provider resources,并保留用户显式 override。
Compatibility failure
当缺少必须的 image、snapshot 或 task metadata 时,在 sandbox 启动前失败。
核心接口
| Method | 职责 |
|---|---|
matches(req, task, plan) | 判断 recipe 是否适用于当前 benchmark、provider、task 和 plan。 |
apply(plan, req, task) | 返回新的 ExecutionPlan,包含 provider-aware overrides。 |
--recipe 限定使用的 recipe。
外部 Recipe Package
受信任的私有 recipe 可以只对当前 run 注入,不需要放进src/agentcompass:
BaseRecipe 子类。外部类不能使用全局 @RECIPES.register();AgentCompass 会把它们加入当前 run 的局部 registry,避免后续 SDK run 意外看到这些 recipe。
--recipe-dir 可以重复传入。Python SDK 使用 recipe_dirs=["./company_recipes"],配置文件使用 runtime.recipe_dirs。目录相对启动工作目录解析。执行顺序为内置 recipe、外部目录参数顺序、各目录的 RECIPE_CLASSES 声明顺序;重复 recipe id 会在创建 run 输出目录前报错。
外部 package 会作为受信任 Python 代码在 AgentCompass 进程内执行。同一规范化路径在进程生命周期内缓存,不支持热重载,并且每个 worker 都必须能访问该路径。读取已有 run 的 summary 或离线 analysis 不会加载其中记录的外部 package。
示例:Modal SWE-bench Verified
swebench_verified_modal_prebaked recipe 可以从 SWE-bench metadata 或 instance id 推导 image,并把 workspace root 设置为 /testbed。
示例:Daytona Terminal-Bench
task.environment.docker_image,设置 environment image,并使用 /root 作为 default workspace root。
用户 Override
| Override | 效果 |
|---|---|
--env-params '{"image":"..."}' | 在 recipe 支持 registry image 时强制使用某个 image。 |
--env-params '{"named_image":"..."}' | 在支持时使用 Modal named image。 |
--env-params '{"snapshot":"..."}' | 在支持时使用 provider snapshot,而不是推导 image。 |
--recipe <recipe_id> | 只启用显式指定的 recipe id。 |
--recipe-dir <package_dir> | 为当前 run 加载受信任的外部 recipe package;可重复。 |
image。如果 recipe 可以推导 task image,短命令更可复现。
当前 Recipe 家族
| Benchmark family | Providers |
|---|---|
| SWE-bench Verified | host_process, docker, modal, daytona |
| SWE-bench Multilingual / Pro | docker, modal, daytona |
| Terminal-Bench 2 | modal, daytona |
| PinchBench / SkillsBench / GDPval | provider-specific cluster 或 gateway recipes |
