Skip to content

Latest commit

 

History

History
88 lines (59 loc) · 5.74 KB

File metadata and controls

88 lines (59 loc) · 5.74 KB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Claude Code 被授权在本仓库中执行任何 git 命令(包括 push、branch、tag 等),无需逐次确认。

Docker 部署规范

  • 用户态镜像、Compose service 和持久卷统一使用 xiaobei 命名;不得新增 wiseflow-* 镜像或卷名。
  • 运行态只持久化 /root/.openclaw/root/.camoufox-cli。入口脚本必须从镜像 seed 初始化空卷,且不得覆盖已有用户状态。
  • Gateway/noVNC 默认只绑定 127.0.0.1,不得默认公开无密码 noVNC。

Crew Template 开发规范

创建或修改 crew template(crews/ 下的任何 crew)时,必须遵循 docs/workspace-bootstrap-files.md 中定义的文件职责划分:

  • AGENTS.md:工作流程、决策树、操作步骤
  • SOUL.md:角色定义、价值观、行为边界
  • IDENTITY.md:名字、形象类型、性格基调、emoji、头像——仅此四项,不写工作职责或能力清单
  • TOOLS.md:本机环境备忘(脚本路径、环境变量、工具别名)——不写工作流程,不重复 SKILL.md 内容
  • MEMORY.md:跨会话需保留的背景知识(产品手册、用户偏好、历史记录)——不写工具使用规范
  • HEARTBEAT.md:周期性巡检任务清单,保持短小
  • BOOTSTRAP.md:一次性首次运行引导,完成后删除
  • USER.md:服务对象信息

创建/更新 skill 时,如果涉及到脚本或者 cli 指导内容,必须遵从以下原则:

  • 1、多步骤操作且涉及中间态保存的(下一步操作的某一输入为上一步返回结果),哪怕每一步都只是一条命令,也必须做脚本!
  • 2、涉及多分支选择,且分支选择依靠明确变量的(如环境变量中是否有某个值,或者按某个入参的值判断分支)应该优先用脚本。
  • 3、涉及 python 的,必须制作脚本,最终以 “python /path/to/script.py” 的模式调用。
  • 4、skill 目前已经全面实施wrapper模式,规避agent自行拼接路径带来的潜在错误风险,具体见 docs/docker-distribution.md
  • 5、skill 需要的常量(如各种 ID、KEY 等),搭配脚本时优先使用环境变量,搭配 SKILL.md 时优先使用同级目录下的 json 配置。

本代码仓的 skill 是给 openclaw 使用的,以上原则是为了适配 openclaw 的规则。

SKILL.md frontmatter 书写规范

openclaw 实际识别的 frontmatter 字段(参见 openclaw/src/agents/skills/frontmatter.ts):

  • 顶层:namedescription必需)、user-invocable(默认 true)、disable-model-invocation(默认 false)
  • metadata.openclaw.*emojihomepageskillKeyprimaryEnvosrequiresinstallalways

其他字段(如 claude code 的 argument-hintallowed-toolslicense)会被静默忽略。

写法用 YAML block style,不要用 flow style(嵌套花括号 + 引号)。openclaw bundled 技能和官方文档均采用 block style:

---
name: browser-guide
description: Best practices for using the managed browser ...
metadata:
  openclaw:
    emoji: 🌐
    always: true
---

注意事项

  • always: true 的真实语义是"跳过 requires 二进制/env 检查直接判定 eligible"(见 config-eval.ts:124),不是"强制注入整个 SKILL.md"。如果 skill 没声明 requires,加 always: true 等于无意义,应删除。
  • 加载阶段 openclaw 只把 name + description + SKILL.md 绝对路径塞进 system prompt 的 <available_skills> 块;agent 用到时才主动 read 全文。所以 frontmatter 写得再多也不会污染 system prompt,但反过来也意味着——除上述识别字段外,多余字段不会带来任何运行时收益。

skill 依赖打包规则

产品拆分后(D8)addons/ 结构已销毁,skill 只有两层:

  • 公共 skillskills/<name>/(≥2 crew 共用,部署到 ~/.openclaw/skills/
  • crew 专属 skillcrews/<crew-id>/skills/<name>/

涉及依赖包(python/node/go)的 skill,依赖统一在仓根 requirements.txt / package.json 声明,由 scripts/install.sh 一次性安装。不允许单独把某个 skill 配置成独立包。这样部署时自动完成初始化,降低部署工作和风险。务必遵守!

Python 依赖

在仓根 requirements.txt 声明。scripts/apply-addons.sh 扫描 skills/crews/*/skills/、仓根下所有 requirements.txt,合并去重后 pip install --user。内容哈希守卫,依赖集变化才重装。

Node 依赖

每个用到外部 npm 包的 skill,在自己目录下放一个 package.json 声明 dependenciestype: "module" 若脚本用 ESM)。scripts/apply-addons.sh 扫描所有含 SKILL.md + package.json 的 skill 目录,per-skill npm install --omit=devnode_modules 落在仓内 skill 目录(.gitignore 已覆盖)。内容哈希守卫,package.json 变了才重装。

不要把 skill 的 Node 依赖写进仓根 package.json——apply-addons.sh 的 per-skill 扫描不读仓根 package.json 的 deps,写进去也不会被装。仓根 package.json 只管 packageManager 字段。

判断 skill 是否需要 package.json:扫 skill 下所有 .ts/.js/.mjsimport ... from "X",过滤掉 node: 内置和相对路径,若还有残留(如 cheeriorss-parser),就需要。现状(2026-07-12 扫描):

skill 外部 npm 依赖 有 package.json
crews/main/skills/wx-mp-hunter cheerio
crews/main/skills/rss-reader rss-parser

其余 skill 的脚本只用 Node 内置模块或相对 import,不需要 package.json