把业务规则和必要源码放进 /oasn,让 OpenClaw 的 main Agent 在开发态 WebChat 与正式调用中都能处理同一类任务。
| 项目 | 当前开发 Workspace 基线 | 开发含义 |
|---|---|---|
| 业务根目录 | /oasn | 业务文件、Skill、Plugin 和可选服务都以这里为根。 |
| Agent Runtime | OpenClaw 2026.6.11 | 配置与扩展必须按该锁定版本验证。 |
| 操作系统 | Debian GNU/Linux 12,amd64 | 本地开发如果不是同一平台,最终仍以远端实测为准。 |
| 资源 | 2 vCPU / 4 GiB / 10 GiB rootfs | 避免依赖超过限制的构建、模型或常驻服务。 |
| 预装工具 | Node.js 22、Python 3.12、Git、OpenSSH | CLI 不返回这些工具的精确版本;进入 active Workspace 后按下方命令实测。 |
取得 status=active 后运行 workspace connect;只有返回 ssh_binding_status=bound 且 ssh_verified=true,才逐字使用该次 connect 返回的 ssh_command 进入当前 Workspace,再执行:
node --version
npm --version
python3 --version
python3 -m pip --version
git --version
把实际输出记入本次开发记录。不要根据本手册、安装日志或另一 Workspace 推断精确补丁版本。
/oasn。/oasn/
├── AGENTS.md # main Agent 的业务规则
├── SOUL.md # 可选:表达方式和边界
├── IDENTITY.md # 可选:身份说明
├── USER.md # 可选:用户上下文约定
├── TOOLS.md # 可选:Tool 使用说明
├── skills/<skill-name>/SKILL.md # 可选:业务 Skill
├── .openclaw/extensions/<plugin-id>/ # 可选:Workspace Plugin
├── service/ # 可选:业务服务或源码
└── 其他业务源码与静态资源
Session、日志、PID、设备身份、认证数据库、每个 Agent 的 models.json、Secret、缓存和浏览器数据都不能作为版本内容。/opt/oasn/platform 与 /usr/local/bin/openclaw 由平台管理,发布时可能被覆盖。
在 AGENTS.md 中定义适用输入、必需信息、输出格式、失败语义与安全边界。先让最小文本任务跑通,再添加文件、Tool、Plugin 或服务。
正式调用固定进入 main。可以让 main 调用其他 Agent 或 subagent,但不要把完整业务能力只配置给其他 Agent。
业务 Skill 放到 /oasn/skills/<skill-name>/;Workspace Plugin 放到 /oasn/.openclaw/extensions/<plugin-id>/。没有使用的目录不要为凑结构而创建。
依赖声明、安装日志或文件存在都不等于可用。实际验证 import/module、系统命令、Plugin runtime,以及需要的服务重载和一次真实业务请求。
只使用 CLI 在 status=active 时返回的 WebChat URL,覆盖正常、附件与边界请求。详细门禁见“测试与验收”。
普通 Skill 或 Plugin 通常直接处理 main 收到的消息与附件路径,不需要自行解析完整 JSON。只有业务确实需要结构化原始输入时,才读取:
/oasn/in/invocation.json
| 字段 | 含义 | 约束 |
|---|---|---|
input.user_prompt | 本次用户文本 | 内容为空或不足时明确向用户补充,不自行编造。 |
input.attachments | 本次附件路径列表 | 只处理列出的路径;不要扫描目录、猜测或复用历史文件。 |
/oasn/in 是正式调用时的平台输入,不应被 Program 写入或作为持久状态使用。实际 invocation.json 还包含平台和运行时字段,可能带短期敏感材料;禁止把整份文件输出到日志、最终回复或截图。开发态 WebChat 不保证生成同一份正式调用 JSON,因此不要把“WebChat 中看到了某个本地文件”误写成正式输入契约已经通过。可直接跟做的脱敏 JSON 示例、解析代码与正式验收方法见 结构化输入与 WebUI JSON。
main 必须返回非空最终回复。/oasn/... 路径不合格。0.0.0.0:<声明端口>,再在最终回复中返回严格的 oasn-webui JSON block;完整字段、URL 与失败语义见 结构化输入与 WebUI JSON。.env、密钥、Cookie、会话、日志、缓存或浏览器数据。以下条件同时成立,才能把 Program 标为已完成:
/oasn,且没有依赖本地未上传文件。main 能完成代表性任务,并对缺失输入返回清晰、可行动的提示。