面向 Codex 的 Microsoft RD-Agent 受约束执行 Skill:通过固定的 PowerShell → Python → WSL → Bash 链路,为非实盘研究增加显式门禁、审计记录和失败关闭行为。
Machine-specific guarded wrapper reference for RD-Agent 0.8.0 diagnostics and fresh data-science runs in Ubuntu WSL. It is not a complete security sandbox.
Warning
这是公开审阅用的参考实现,不适合直接承载不可信代码、高价值凭据或不可恢复的数据。当前存在已知的版本绑定、Docker/network 限制、扫描覆盖、主动配额和解释器信任缺口;失败扫描还可能覆盖日志并递归清除 trace。请先阅读“已知安全缺口”,再决定是否部署。
这是一份经过实机安全加固的固定环境参考实现,不是开箱即用的通用安装器。
- 当前策略按 RD-Agent
0.8.0的行为设计,但现有 wrapper 不会在运行时强制绑定该包版本;执行前必须用version核实,升级后必须重新审计。 - WSL 发行版和用户固定为
Ubuntu/hp。 - Windows、WSL、数据集、运行结果和日志路径均写入策略代码并接受规范路径校验。
- 14 个公开命令中,目前只有
data-science可以启动研究任务,而且仅允许从已有本地数据集开始全新运行。 fin-factor、fin-model、fin-quant、general-model以及所有 pickle/session 恢复请求都会失败关闭。- 不包含凭据、
.env、数据集、运行日志、模型产物、QMT/XTQuant 或交易数据。 - 它是受约束的启动器,不是操作系统级沙箱;Docker、上游模型服务和网络仍属于外部信任边界。
这里的“非实盘/offline research”表示使用本地数据集、禁止实盘交易路径,不表示断网运行。场景仍可调用允许的上游 API。SKILL.md 描述中的 resume 和 model-development 关键词用于把相关请求路由到安全策略;它们不是能力承诺,当前实现会拒绝 resume 和预留模型场景。
| 缺口 | 当前处理 |
|---|---|
| RD-Agent 包未进入策略指纹 | 执行前人工核验 version == 0.8.0;任何包升级都按策略变更重新审计 |
| 自定义日志 sink / 上游服务不在完整扫描覆盖内 | 只在受控标准日志与 trace surface 上承诺精确脱敏和终态扫描;运行环境仍需最小权限 |
| WSL/Docker 不是完整沙箱 | 将上游网络、模型服务和 Docker 视为外部信任边界,不运行不可信代码或数据 |
| 机器身份和目录硬编码 | 公开版定位为参考实现;移植时必须整体修改并重新验证,不能局部绕过检查 |
| artifact 扫描范围小于 artifact tree | 核心日志和 artifacts/rdagent-log 有终态扫描,但 workspace/cache/tmp 不在同等内容扫描范围内;不要把 list-artifacts 当作全树内容安全证明 |
| Docker 参数与数据 mount 不是完整只读/network policy | 在补齐 mount mode、容器环境、网络和固定配置约束前,只在隔离、最小权限、可丢弃的环境中运行 |
| artifact budget 主要是运行后检查 | 它不是文件系统配额或实时 watcher;不要依靠它阻止运行中的磁盘耗尽 |
| Python launcher 处于同一 Windows 用户信任边界 | 当前会接受满足路径/形态检查的用户目录解释器;同账户被攻陷时,wrapper 不能提供保护 |
| 失败扫描会破坏性清理 | scan-incomplete 会替换核心日志并递归清除未验证 trace;相关输出不可恢复,重要输入必须独立备份 |
collect-info 有网络和主机指纹披露 |
它会执行上游网络检查并报告依赖版本;只在接受该 egress/metadata 披露时使用 |
在其他机器上使用前,必须审查并一致地调整下文列出的固定身份与路径,然后重新完成验证。不要只改一个文件来绕过校验。
直接运行 RD-Agent 会同时引入命令透传、环境变量泄露、宿主路径写入、Docker 残留、运行恢复反序列化和日志披露等风险。本 Skill 将这些风险收敛为显式策略:
| 边界 | 约束 |
|---|---|
| 命令入口 | 只接受 14 个精确命令名;未知命令、缩写选项和多余参数直接拒绝 |
| 执行环境 | 固定 WSL 发行版/用户,使用隔离的 HOME、XDG、临时目录和 RD-Agent profile |
| 数据入口 | data-science 只能选择固定 dataset root 下已有的直接非链接子目录 |
| 恢复机制 | 禁止 --path、pickle 和 session resume,在反序列化前失败关闭 |
| 环境变量 | 仅 18 个命名的 API/base/model 变量可进入场景进程;值不进入 argv 或 manifest |
| 持久化 | 输出固定在单个 run workspace 内;运行策略的 7 个可执行组件会被 SHA-256 指纹化 |
| 日志披露 | 终态秘密扫描必须完整且为 clean,否则摘要和工件不可披露 |
| Docker | 容器带 wrapper/run-id 双标签;清理只处理能证明归属的容器 |
| 取消 | 只终止经过重新验证的 wrapper 进程组,并将未验证输出按不成功状态处理 |
| 交易安全 | .env、QMT、XTQuant、账户、订单、会话、浏览器凭据、实盘路径和交易任务全部拒绝 |
Codex / operator
│
▼
rdagent_safe.ps1 Windows 入口与规范路径校验
│ argument array
▼
rdagent_safe.py 命令、参数、数据集、健康回执与披露策略
│ fixed wsl.exe call
▼
rdagent_safe.sh WSL 环境隔离、进程/容器归属和运行记录
│
├── rdagent_runtime_guard.py RD-Agent 持久化与 Docker guard
├── rdagent_guarded_cli.py 固定上游 CLI 入口
├── rdagent_collect_info.py 有界诊断兼容层
└── rdagent_secret_scan.py 终态秘密扫描与失败关闭
完整边界见 references/architecture.md,精确参数契约见 references/commands.md。
| 类别 | 命令 | 当前状态 |
|---|---|---|
| 诊断 | health、version、collect-info、help |
可用;诊断不会接收场景 API 变量 |
| 研究 | data-science |
有条件可用;仅允许已有规范数据集上的全新离线运行 |
| 预留研究 | fin-factor、fin-model、fin-quant、general-model |
名称保留,执行失败关闭 |
| 运行管理 | list-runs、run-status、run-summary、cancel-run、list-artifacts |
可用;摘要和工件受终态扫描及策略指纹门禁保护 |
Detached 模式返回 exit_code: 0 只表示启动已被接受,不代表研究成功。必须继续轮询 run-status,直到进入终态。
| 项目 | 固定值 |
|---|---|
| Skill 根目录 | D:\AgentStack\skills\rdagent-executor |
| Windows 日志 | D:\AgentStack\logs\rdagent |
| 重型数据根目录 | F:\DataCenter\research\rdagent |
| 数据集 | F:\DataCenter\research\rdagent\datasets |
| 运行目录 | F:\DataCenter\research\rdagent\runs |
| WSL 发行版 / 用户 | Ubuntu / hp |
| WSL venv | /home/hp/.local/share/rdagent/venv |
| WSL profile | /home/hp/.local/share/rdagent/profile |
七个策略执行文件及上述根目录必须是规范、普通、非 reparse/link 的对象。脚本会主动拒绝缺失、重定向、junction、symlink 或逃逸路径。
仓库不会自动安装 RD-Agent、Docker 或 WSL,也不会替你创建数据集。公共使用者应先建立自己的环境契约:
- 审查
scripts/rdagent_safe.ps1中的 canonical Skill root 和允许的用户 junction。 - 同步审查
scripts/rdagent_safe.py的发行版、WSL 用户、Windows 日志根、重型根目录及允许根目录。 - 同步调整
scripts/rdagent_safe.sh、scripts/rdagent_runtime_guard.py和scripts/rdagent_secret_scan.py中对应的 WSL 映射。 - 将兼容版本的 RD-Agent 安装到独立 WSL venv;不要依赖宿主 shell profile 或
.env。 - 创建规范的 dataset/run/log 根目录,并确认它们不是链接、junction 或 reparse target。
- 对所有 7 个策略执行文件重新做语法、安全和指纹验证;任何修改都会让旧 health receipt 失效,这是预期行为。
如果你的环境与上表完全一致,可以将仓库克隆到固定目录:
git clone https://github.com/myc0576/rdagent-executor.git D:\AgentStack\skills\rdagent-executor始终从 PowerShell guard 入口调用;不要直接执行内部 Python、Bash、WSL 或 RD-Agent 命令。
$launcher = 'D:\AgentStack\skills\rdagent-executor\scripts\rdagent_safe.ps1'
# 低成本检查
& $launcher version
& $launcher help
# data-science 前必须获得小于一小时、带 Docker 证据的干净健康回执
& $launcher health --check-docker --timeout-seconds 90
# <competition> 必须已是固定 dataset root 下的直接非链接子目录
& $launcher data-science --competition '<competition>' --step-n 1 --loop-n 1
# 使用启动返回的 run_id 轮询;终态后再请求摘要或工件列表
& $launcher run-status --run-id '<run_id>'
& $launcher run-summary --run-id '<run_id>'
& $launcher list-artifacts --run-id '<run_id>'不要把 API 密钥写进仓库或 .env。场景只接受命令契约中列出的 18 个进程环境变量;所有非空值都会按敏感值处理并参与运行时精确脱敏和终态扫描。
.
├── SKILL.md Codex Skill 主契约
├── agents/openai.yaml UI 元数据与默认提示
├── references/
│ ├── architecture.md 安全架构与信任边界
│ └── commands.md 14 个公开命令的精确契约
└── scripts/
├── rdagent_safe.ps1 Windows 唯一公开入口
├── rdagent_safe.py 核心策略与运行管理
├── rdagent_safe.sh 固定 WSL mapper
├── rdagent_runtime_guard.py 持久化、路径和 Docker guard
├── rdagent_guarded_cli.py 固定 RD-Agent CLI 入口
├── rdagent_collect_info.py 有界 collect-info 兼容层
└── rdagent_secret_scan.py 有界秘密扫描器
本公开副本在发布前完成了以下检查:
- 7 个可执行策略文件逐文件 SHA-256 与已验证的本地 Skill 一致;公开版仅对
SKILL.md和 references 做了边界澄清,并新增 README/仓库元数据; - 无
.env、凭据文件、私钥、GitHub token、AWS access key、JWT、credential URL、运行日志或 reparse entry; - Python 文件通过 AST 语法解析;
- Bash mapper 通过
bash -n; - PowerShell 入口通过 PowerShell AST 解析;
SKILL.md结构通过 Skill validator;- 未执行真实研究场景,因此这里不宣称模型结果或端到端研究成功。
- 本项目不执行交易,也不得用于实盘、账户、订单或 broker 操作。
- “安全启动器”不等于完整沙箱;请在独立、最小权限的 WSL/Docker 环境中运行。
- 任何 scan-incomplete 或污染状态都可能触发核心日志替换和 trace 递归清理;这是不可恢复的失败关闭行为,不要把 run workspace 当作唯一副本。
- RD-Agent 升级可能改变 CLI、持久化、Docker 或反序列化行为。升级前必须重新审计,不要直接放宽 fail-closed 门禁。
- 当前 7 组件策略指纹不包含已安装 RD-Agent 包本身;在补上版本/包内容绑定之前,
version核验仍是必须由操作者执行的外部门禁。 - 这是独立社区实现,不是 Microsoft、OpenAI 或 RD-Agent 项目的官方组件。
本次公开发布未附加开源许可证。公开可见不等于自动授予复制、修改或再分发权;如需开放复用,请在确认合适的授权方式后单独添加 LICENSE。