---
name: dradar
description: 当用户需要通过编程 Agent 参与众测雷达（deng.codexradar.com）的模型跑分时使用，提供跑题配置、环境准备、题目执行和结果提交的流程指引。
---

# 跑题流程

官方最新版在 https://deng.codexradar.com/skill/dradar.md；每次会话首次加载、开始跑题前取一次。先下载到临时文件，核 frontmatter 的 name: dradar、非空正文，再与同站 `/v2/dradar.json` 的 size_bytes/sha256 核对；一致才原子替换本机稿，相同直接使用。下载、格式或摘要校验失败时保留本机稿与失败摘要，停在准备，不用 HTML、截断稿或未核新稿开始执行；清单和正文更新不同步时也不覆盖旧稿。

当前公开流程由外层 Agent 按本 Skill 调用 Codex 和固定助手；不套用旧 `dradar run-plan`、single/on-demand 候选的登录、租约或恢复命令。推荐不占租约，网页生成/复制指令也不启动模型。只报告已实际到达的阶段：准备→推荐已保存→执行中→模型已退出且原件已保留→上传回执→正式判分；执行中没有可核进度时只报状态与已用时间，不编百分比。

## 逐步配置

用户已给信息直接沿用，每次只问当前缺失的一步。正式API基址为 https://api.codexradar.com；先匿名 `GET /api/v2/agent/options`，不带查询参数、账号或密钥，不用503试探枚举。

1. Harness：从 options.harnesses[].id 选择。
2. 题库：只列 options.libraries 中 selectable=true 的库，available_task_count/total_task_count 展示“可测 n/N”，fully_ready=false 标部分开放并说明 unavailable_reasons。零可测或new_work_enabled=false不启动；fully_ready仅表示固定题目资源就绪，grading_consumer及模型/整库验收状态分别据实说明。
3. 模型：从对应 harness.models[].id 中选，或跳过由服务器推荐。
4. 档位：仅指定模型时问对应 models[].efforts，也可跳过；跳过模型自动跳过档位，推荐请求省略相应参数，不自行填默认。
5. 总共想跑几道题。
6. 同时跑几道题；Agent本地管理并发，遵守用户授权与实际服务限制。

推荐、上传地址及metadata、run record、日志描述和助手调用，均取 options 的 recommendation_url/results_url 与 client_contract；按实际返回处理，不让用户猜schema。入口不可用时留证停报。

模型启动前，确认已安全准备本人的数字ID和固定跑分密钥；缺项时回[众测站](https://deng.codexradar.com/)“开始雷达Bench”登录本人GitHub账号，生成/复制本人启动指令后再继续。这是之后上传的准备，options、推荐和helper仍匿名，无需为推荐携带跑分密钥。账号资格仍在正式上传时校验，不能把匿名推荐成功称为账号权限已通过。Pompeii还须满足本题input_prerequisite；缺身份或输入材料就停在执行准备，不先消耗模型额度。

## 每题执行与原样交付

1. 按 recommendation_url 发送选择的harness/library及用户指定的model/effort；省略library沿deepswe，不发task_id/exclude、题号、题量或并发。逐task核qualified，503/task_runtime_unavailable结束本次启动。保存完整推荐JSON，task整体原样回传：DeepSWE/TB/Science五字段；Pompeii六字段含source_kind/source_bundle_sha256且无source_commit，不补null或collection_id。
2. 推荐不保证本批不重复：按完整task版本+harness/model/effort查本批已启动/已接收记录，重复只保存原响应，不开同配置重复模型或上传。相同公参每下一任务含首次最多20个GET、间隔至少1秒；耗尽/429/错误留证停报，遵守Retry-After，不改completed计数、不无限轮询，也不保证覆盖。明确重复测量仅按用户授权范围处理。
3. 拉推荐的固定镜像，相同digest可复用，启动本题专用容器。按实际返回的project_dir/runtime保持cwd、UID/GID、HOME及网络环境，不统一/app或root，不改宿主代理。
4. 按下文先准备固定helper并完成本题容器CA预检，再准备Codex。只有本题实际执行身份的CA预检退出0且收据ready_for_model_start=true，才能首次调用模型；准备失败保留原题、容器与原件，不改EID重跑。模型启动前，由可信外层调用 bind-auth 登记全部实际认证文件/明确目录；目录仅登记已核专用于认证的目录，CODEX_HOME含sessions/rollout时应绑定实际认证文件，不将整个CODEX_HOME排除。保存容器外可信SHA收据；仅确无文件认证时使用空sources。不得以文件名或Token样内容排普通答案。
5. 模型启动前生成并保存本题execution_id及独立的容器外成果目录，按推荐核最终模型/档位；statement原样写题面文件，由Codex标准输入读取，使用最终模型/档位与真实cwd。非Git按runtime加skip检查，不git-init/造HEAD。默认每题2小时；外层记录真实UTC开始/结束、耗时和退出/超时，停止仅针对本题并确认进程退出，不自动重跑。退出未确认时保留容器与原件，不调用带 --exit-confirmed 的capture、不上传任何outcome，不把未知退出改写成failed/interrupted或exit_confirmed=true。
6. 模型退出后调用固定helper capture；Git库按本题规则先提交解题改动，native库不造patch。保留CAPTURE.json、collection.json及file-NNNNNNNN原件；collection.json原对象进入run record.collection，不改字段/值、不自造私有schema。
7. 按 client_contract.log_files_schema 将本次stdout events、原始root/child rollout、token原始日志及外层运行记录列入log-files.json（name/role/path，真实绝对源路径），限定本次session/时段。保原始日志，不本地合计token、估费用或判分。
8. 固定helper pack/verify-bundle 生成并核原包，保留容器外原件与包字节，再按 results_url 认证上传。每题容器、配置、成果与记录独立，按本地总题量补下一题。

采集错误先保原件，仅安全可重复时再采集，不覆盖旧成果或改身份/权限凑验。普通auth.json及邮件/Token样答案保原字节，只排真实认证源及别名；轨迹与原生答案分别保留。

## 容器 CA、Node/npm 与 Codex

先在实际执行身份核 `node --version`、`npm --version`、`python3 --version`；helper需要Python>=3.10标准库，Git库还需本题已有bash/git。依赖只在本题环境准备，不改变原Verifier；缺依赖必须在模型启动前如实处理。

在安装Node/Codex或首次模型调用前，先由可信外层下载并核本题正式固定helper的HTTPS来源、包SHA/大小与manifest；容器缺CA时在已可信宿主下载后原样放入题容器非答案工具目录，不能在题容器关闭TLS来下载。保持本题声明的UID/GID、HOME、cwd和网络环境，按正式 `client_contract.calls.prepare_ca` 在实际题容器运行：

```sh
python3 '<本题工具目录>/helper.py' prepare-ca --manifest-sha256 '<推荐中的manifest_sha256>' --project-dir '<实际项目目录>' --output '<答案根外且尚不存在的本题CA收据目录>'
```

仅使用含该命令的正式助手1.0.3；未发布、缺命令/调用模板或hash不符就停在准备，不从私有源码补装。命令只做依赖准备，不启动模型。已有默认系统根且严格TLS可用时不安装；确实缺根时，目前仅在Debian、已有系统安装权限、既有官方签名APT源及完整密钥/包状态可核的题容器中安装ca-certificates及必要且未安装的openssl/debconf，不升级、删除无关包或改源。非root不sudo/改USER；其他OS缺根、证书覆盖环境不明、源/签名/包状态不明或准备失败均结构化阻断，交环境作者补齐。

保留答案根外的CA_PREFLIGHT.json、INSTALL_ATTEMPT.json（仅发生安装尝试时）、真实包版本及源/配置摘要；同一命令安装最多一次，失败不自动重试或恢复旧状态，重启先读原收据。重复检查用新的收据目录，已有有效根仍不安装；不覆盖旧收据/答案/认证/模型日志。严格TLS检查仅对固定Debian官方站点做匿名HEAD、不跟随重定向；HTTP403等只证明已核TLS传输，不证明模型workspace routing、账号权限或真实E2E。禁止忽略TLS校验、导入私有/自签证书、改代理/账号或用宿主证书检查代替容器检查。

已有兼容Node/npm则复用。获权且有系统安装权限时用镜像对应官方包管理器准备；nobody等无系统包权限时不sudo/改USER，按容器真实OS/arch/libc从[Node官方发行](https://nodejs.org/en/download)选兼容LTS独立包，核官方SHASUMS后解到本题可写且非答案目录。找不到兼容可执行包或Python>=3.10时停在准备，交环境作者补齐，不假称Server的Python已在题容器可用。

普通已核环境沿原安装方式：

```sh
npm install -g @openai/codex@latest
codex --version
codex login status
```

无全局写权限的可写目录方案，Node发行目录含node/npm，路径替换为已核实际值，PATH只对本题调用生效：

```sh
DRADAR_NODE_BIN='<本题Node发行目录>/bin'
DRADAR_TOOLS_DIR='<本题可写非答案工具目录>'
mkdir -p "$DRADAR_TOOLS_DIR"
env PATH="$DRADAR_NODE_BIN:$PATH" npm_config_cache="$DRADAR_TOOLS_DIR/npm-cache" "$DRADAR_NODE_BIN/npm" install --prefix "$DRADAR_TOOLS_DIR/codex" @openai/codex@latest
env PATH="$DRADAR_NODE_BIN:$PATH" "$DRADAR_TOOLS_DIR/codex/node_modules/.bin/codex" --version
```

两种安装方式都必须在本题实际 UID/GID、HOME、CODEX_HOME及同一Node PATH下，以将要执行的Codex绝对路径核 `--version`、`login status` 和项目目录可访问性。模型凭据只用用户明确授权给本题的本人凭据；由可信外层安全提供到本题环境并登记实际认证源，不复制整个宿主HOME/会话库。只记录版本、登录状态摘要及退出码，不记录密钥或完整账号身份。缺失、过期或无法确认所用凭据时停在准备；不自动重新登录、切账号、借其他批次凭据或改用付费API，宿主登录成功不能替代容器内检查。login status也不证明模型权限或剩余额度，不为预检额外调用模型。

仍以声明UID/HOME/cwd运行，用已安装Codex绝对路径（及同一Node PATH）替代下例codex。DeepSWE原命令参数不变；TB/Science的非Git条件才增加 --skip-git-repo-check：

```sh
codex exec -C '<项目目录>' -m '<最终模型>' -c 'model_reasoning_effort="<最终档位>"' --dangerously-bypass-approvals-and-sandbox --json -o /tmp/dradar-answer.md - < /tmp/dradar-task.md > /tmp/dradar-events.jsonl 2> /tmp/dradar-stderr.log
```

内层审批/沙箱关闭只适用于外层专用容器，不使用ephemeral。完整JSONL/stderr/原会话保留；thread/session、turn.completed.usage及原rollout.token_count只作定位线索，不本地推算用量。模型实际认证源不打印、不入题面/日志/上传，不改宿主登录。

## 公共固定助手

以推荐 collect.helper 的 url/sha256/size_bytes/manifest_sha256/task_contract_sha256 下载本题助手；URL为 /api/v2/agent/helpers/{library}/{digest}.tar.gz，无查询参数、无认证。options每库helper可用于预准备，但捕获必须用该题推荐中的task_contract_sha256。按同源HTTPS实际URL核包字节SHA/大小，安全解到非答案工具目录，不从private server-src或未发布repo取代码。

工具入口与依赖取 descriptor.entrypoint/dependencies，直接使用 client_contract.calls 的 verify_tools→prepare_ca→bind_auth→capture→pack→verify_bundle 模板，替换为实际路径、manifest摘要及bind-auth收据sha256。prepare_ca与bind-auth在模型前执行（--source可重复），capture只在确认退出后执行；verify-tools仅证明固定工具完整性，不能代替CA/TLS检查。校验失败留证停报，不改文件凑验。

bind/capture/pack 的 --root 必须指同一实际任务文件系统，认证绑定核实际绝对路径/device/inode/kind；不能套给宿主复制品。工具、收据和输出在答案根外，capture输出目录须不存在；可用宿主专用目录的bind mount保留原件，助手仍在实际源FS调用。pack收据的bundle_sha256/size_bytes/content_type原值供metadata与multipart，原包不重新编码。

## 前台进度上报（按正式能力启用）

仅当正式options.client_contract.progress为 `dradar-agent-progress-client/1` 且enabled=true，并给出固定地址、注册格式、helper_version=1.0.3及匹配的runtime_sha256/calls时启用；未提供就保留当前跑题流程，说明“本次无实时上报”，不猜测或试探未发布端点。CA准备不依赖进度开关；关闭进度也必须提供同版prepare_ca助手。新助手命令也只取本题已核hash的正式helper；旧包没有命令时不从私有源码补装。推荐仍匿名；进度传输只用本人的DRadar-Scoring认证，由Python>=3.10的可信外层前台执行，凭据和私密进度目录不挂载给题容器；采集仍在实际源文件系统调用。不另开daemon、站长runner或旧run-plan。外层保存本次实际Skill SHA/大小、manifest.source.commit、能力版本及助手hash；旧Skill运行不能替代新版验收。

进度报告为 `dradar-client-progress/1`：只含schema、ASCII report_id、从1连续递增的sequence、phase、真实外层client_monotonic_ms，以及可省略的tokens `{input,output}`。EID必须是本题已保存的UUIDv4 hex，所有进度和原包上传沿用它。首次POST `/api/v2/agent/executions/{execution_id}/progress` 正文为 `{"schema":"dradar-client-progress-registration/1","selection":{"benchmark":"<本题>","task_id":"<本题>","task_content_hash":"<本题>","model":"<最终模型>","effort":"<最终档位>"},"report":<首份报告>}`；selection精确取原推荐，不从昵称匹配身份。后续正文仅原报告，不带selection。Content-Type为application/json，首次If-Match为 `"progress-0"`，后续为本次sequence减1，回放时保留原条件头。公开投影的population/source不加进正文。注册是客户端选择记录，不是领取、模型启动或正式接收。

- 推荐已保存、实际开始环境准备时才报preparing；不把复制指令或匿名推荐报成claiming/已领取。确认实际模型进程已启动才报executing；只有前台再次观察到同一本题进程仍在执行，才可更新同阶段。静默、断网、心跳、配置并发或Agent仍活着都不代替模型进程观察。
- 确认模型进程退出后报model_exited；实际模型失败可接model_failed，随后仍可上传原失败成果。真正开始原包上传才报uploading，明确上传失败才报upload_error；未知ACK先对账，不能假定失败。用户明确停止且本题进程已确认退出才报stopped；此后不再报其他阶段。stopped不阻止按原授权保留/上传中断成果，但不为上传再改回uploading。accepted/grading/graded及致谢只读服务端正式结果，不由客户端上报。
- 按正式calls顺序 `progress-prepare → progress-request → progress-send`：prepare在答案根外的新目录保存report.json/PROGRESS.json；首份request读取已核原recommendation，冻结注册body.json/REQUEST.json；后续request只引用首份注册目录，不重新推荐或改选择。send读取保存的正式options及权限0600的本人凭据JSON文件（github_id、scoring_key），仅向正式固定进度路径发一次前台请求，禁止重定向，成功时内部调用progress-ack；已ACK不再POST。下一份prepare用上一份已核ACK的目录，序号加1。响应未知或429/503时先保原请求，遵守保存的退避再由前台有界重调send；不重新prepare、换正文/ID/条件头。私密请求、响应、ACK和凭据文件均不进入答案、log-files或原包。
- 回执为 `dradar-client-progress-write/1`，其receipt保原report_id/sequence/phase/相对时间，外层revision表示当前服务端版本。历史回放可返回更高revision：保留原ACK、记ADVANCED并停递增，通过本人 `GET /api/v2/agent/executions/{execution_id}/progress` 一次读取当前状态后协调，不自动追赶或重置。这个GET是未验证进度视图，不是正式判分；缺观测仍未知。ACK只确认进度接收，不能当模型退出或判分。
- 原包上传前调用progress-check-upload，以首份注册核metadata的同一execution_id、完整task、harness/model/effort；不匹配先保护原件并停上传，不改原metadata/注册选择凑验。服务端仍独立核首次绑定。没有启用进度时仍沿原正式上传合同；本节不自动重上传原包或重跑模型。
- 采用同一个外层单调时钟，不能交替使用宿主/容器时钟，也不能在重启后把序号或锚点清零。无法续用原锚点、原EID或未决回执时暂停进度上报，保留原件与最后确认状态；不另造EID或重跑模型来修复遥测。源进度文件冲突、损坏或回执不匹配也停报。
- 每题本次最多128份新报告，通常间隔至少60秒；真实阶段变化可提前但至少1秒，任意60秒最多20份。报告最多1024字节，含首次注册封装的整个HTTP正文最多2048字节。每份含首次最多3次前台请求、总窗口最多30秒、单次配置超时最多5秒；send不循环或睡眠，退避未到会拒绝再次发送。429/503按Retry-After等待，无该值至少5秒，等待超出预算就保存待决报告并停本次上报，不缩短服务端退避。401/403、409/CAS冲突、413/422、重定向或无效回执立即停报，不换身份、序号、选择或正文凑验。模型尚未启动即发现身份/权限错误时停在准备；模型已启动后的遥测失败不自动中断模型，不阻塞退出确认、原件采集和原包上传。
- tokens默认省略；只有本题原日志中直接可核的累计input/output观测才原样传值，未知保null/省略，真实0保0，不本地合计父子会话或补齐缺项。自报计数、单调相对时间及服务端接收时间均不是正式已验证用量/耗时，不推算美元、小时速度、分数或积分；页面即使显示执行也应标“客户端上报”。超过90秒无新观测可变陈旧/未知，不据此宣布停止或模型失败。

## DeepSWE 官方收集

当前十五题的项目目录均为 `/app`。返回的 `collect.command` 来自本题 `task.toml` 的 `[[verifier.collect]]`，对题内固定 base commit 与 `HEAD` 执行 `git diff --binary`，生成 `collect.patch`（当前为 `/logs/artifacts/model.patch`）。先将本题解题改动纳入 Git 提交，再执行官方 collect；记录其真实退出码、补丁摘要与 `git rev-parse HEAD`。题内 base、`task.source_commit` 的题面来源提交、`task.task_content_hash` 的公开包绑定含义不同，不相互替代，不假定补丁已经存在。此规则不作为其他题库的通用导出命令。

## 其他题库收集差异

- Pompeii：可用范围以当前 options 为准；仅当 selectable=true、available_task_count>0 且 new_work_enabled=true，并已满足推荐中的 input_prerequisite 后启动。材料不随公开镜像/helper提供；当前流程使用获权固定题包本地交付，尚未开放新的公开材料分发。缺包或无法核实授权/绑定时停在准备，说明具体缺项；用户可回众测站“雷达社区”向材料提供者询问现有交付方式，不猜测下载URL。无数据公开runtime配受权固定题包本地注入，来源source_kind/source_bundle_sha256不造Git来源。/app原Git patch加原JSON答案，helper给native_files；评分是原DRadar邻接F1，不称RePAIR官方评分。
- TB：按原文件/目录与Harbor辅助artifact收集，native答案、auxiliary与轨迹分开；不造patch/HEAD，真实cwd/UID/HOME来自runtime，040为/app/sglang、041为非root/HOME=/tmp。collection由helper原样输出，不手写dradar.terminalbench-collection/1。
- Science：按declared_workdir及原artifacts（可在/root/results、/results、/workspace/output等）而非统一/app；不造patch/HEAD，保原目录mode和manifest。只有采集器确认的double ENOENT作为not_found；完整空manifest与missing_artifacts仍保留，合法0由原官方Verifier判。权限/EIO/部分读/变化是采集失败，不冒充缺答案。Agent与Verifier镜像/用户/cwd的资格独立，官方源码构建不冒称上游预制镜像。

## 统一上传与回执

按 client_contract.upload_metadata_schema/run_record_schema 组装metadata和dradar.agent-run/1，required_matching_metadata_fields来自真实运行；原采集和日志由helper封装，不自行造角色、费用、判分或调用次数。

helpers处理原 dradar.agent-files/1 和新 dradar.agent-archive/1。当前合同：bundle上限95,000,000字节，HTTP全multipart entity最多100,000,000；archive展开总tar最多128MiB、4096文件，JSON最多128文件；仍取库自身更紧限制。归档manifest/顺序slot、CRC、SHA与原路径/字节由固定助手核，不手写tar算法。bundle Content-Type用pack原content_type，非HTTP Content-Encoding gzip；超限413/422保原件停报，不删/截断/拆成失去统一commitment的多次提交。

results_url 仅metadata（JSON字符串）+bundle（原包文件）两part；账号数字ID与固定跑分密钥经已认证网页本人取得，使用 Authorization: DRadar-Scoring <github_id>:<scoring_key>。推荐/options/helper匿名，输入访问授权仍独立；不把新上传无额外协议头规则套到Pompeii受权输入包。网页登录Bearer/模型认证/跑分key不进入题面或成果。

request_id/execution_id各用保存的UUIDv4小写无连字符形式；版本、模型/档位、UTC、耗时、退出/失败均用实测原值，未知保null及missing，不填0。核回执两ID及bundle_sha256；accepted的submission_id/grading.state与本人 GET /api/v2/agent/executions/{execution_id}据实报告：queued不是graded，evidence_saved/not_queued仅存证据，错误/排队不当零分。not_applicable须结合原上传status、outcome及submission_id解释，不能单凭此值判定模型失败或判分完成。价格、用量、turn与官方判分由Server处理，缺失不估，积分单独按实际政策报告。

保存上传回执后，回[众测站](https://deng.codexradar.com/)登录同一本人账号，点“我的判分”，按本次题目、模型/档位和时间对照记录；queued仍待判分，graded的合法0不是链路故障，error单列。公开成绩在“雷达Bench”选择对应Harness/模型，点击实际运行档位读取或刷新；覆盖数不是通过数。点“雷达天梯”查当前可用榜单，先看月榜；总榜/历史未开放时回月榜或本人记录。判分完成不等于贡献积分到账，Agent积分待政策时仍标待定。耗时/API等价同时看已知样本与缺失；API等价不是订阅现金支出或实际额度扣减，缺失不补0。

## 有界等待与原件恢复

以下为Agent本次客户端预算，不是Server时限或自动恢复承诺；用户给出更紧限制时从其限制。options/推荐的503、429及重复推荐仍按前文停报或20次上限处理，不把它们扩成后台循环。

- 上传超时、断网或响应未知：先保留原request_id/execution_id、metadata文件、原包及SHA收据，用本人身份查询同execution_id。查到记录先对账，不因缺上传ACK另开模型或新execution_id；404仅表示暂未查到已上传记录。确需重传时只传同ID、同metadata、完全相同包；旧request_id回放原回执。本次上传含首次最多3次、总窗口最多10分钟，每次网络等待最多120秒；429/503或明确retryable错误先按Retry-After（秒或HTTP日期）等待，无该值则至少5秒。要求等待超出剩余预算时直接保存并停报，不缩短服务端等待要求。
- 401/403停止上传并提示核对本人身份与权限；409停止并核对原ID/metadata/hash；413/422停止并保留原包及错误，交具体原因处理。不得自动换ID、删改原件或重跑模型来消除错误。仅adapter_unavailable可在明确补齐后，用新request_id、同execution_id、其余metadata与原包不变重试；缺采集成果不能套此分支，历史422修复回放也不是自动重传所有422的许可。
- accepted/queued后查询：同一本人身份、同execution_id，本次含首次最多12次、总窗口最多10分钟，每次网络等待最多30秒，间隔至少15秒并遵守更长Retry-After；429/503等临时查询失败也计入预算，401/403等身份错误立即停报。仅queued/pending/grading继续有界等待；graded保留官方分数（含0），error/model_failed/invalid/skipped/blocked按真实状态结束等待并留证。evidence_saved/not_queued、adapter_unavailable或not_applicable按原回执解释并停止轮询；未知状态停报为未知。预算耗尽仍queued/pending/grading就报告“已接收，仍待正式判分”，只有查询失败则保留最后确认状态并说明当前未知；保留最新回执，用户以后可继续查询，不把等待超时写成0分或模型失败。

每次停报给出失败阶段、可分享的错误码/时间、已确认状态，以及本地原件位置、execution_id、已有submission_id和bundle_sha256；不附密钥、认证响应或原始敏感日志。进程重启后先从这些已保存事实恢复，不重新推荐/执行来替代原题。采集失败保留源容器/文件系统；只有源仍可安全读取、模型已退出时才能向新的输出目录重采集。原包已被接收后不覆盖它；补新证据另存执行记录并保留旧记录。
