$npx -y skills add kweaver-ai/kweaver-dip --skill bkn-distribute将业务规则 Skill 分发到多个 AI 平台本地目录,用户按需选择目标平台。
| 1 | # 多平台分发 |
| 2 | |
| 3 | 公约:`../../_shared/contract.md` |
| 4 | |
| 5 | ## 做什么 |
| 6 | |
| 7 | 将 `bkn-rules` 生成的业务规则 Skill 文件,安装到用户选择的一个或多个 AI 平台本地目录中,使各平台的 Agent 能加载并使用这些规则。 |
| 8 | |
| 9 | ## 输入 |
| 10 | |
| 11 | - `skill_artifact_path`:`bkn-rules` 输出的 Skill 文件路径列表 |
| 12 | - `network_id`:网络唯一标识 |
| 13 | - `network_name`:网络名称 |
| 14 | - `skill_version`(可选):Skill 版本号,来自 `bkn-rules` 输出 |
| 15 | |
| 16 | ## 已知平台 |
| 17 | |
| 18 | | 平台 | 默认路径 | 目录标识 | |
| 19 | |------|---------|---------| |
| 20 | | Cursor | `.cursor/skills/{network_id}-rules/` | `.cursor` | |
| 21 | | Claude | `.claude/skills/{network_id}-rules/` | `.claude` | |
| 22 | | OpenClaw | `.openclaw/workspace/skills/{network_id}-rules/` | `.openclaw` | |
| 23 | |
| 24 | 安装目录标识为工作区根目录下的平台根文件夹(如 `.cursor`、`.claude`、`.openclaw`)。若某平台根目录不存在,仍可询问用户是否创建。 |
| 25 | OpenClaw 的 skills 子目录位于 `.openclaw/workspace/` 下,而非 `.openclaw/` 根目录。 |
| 26 | |
| 27 | ## 平台目录结构 |
| 28 | |
| 29 | 各平台统一使用 `skills/{network_id}-rules/` 子目录,与 `.cursor/skills/` 结构一致: |
| 30 | |
| 31 | ``` |
| 32 | {platform_root}/ |
| 33 | └── skills/ |
| 34 | └── {network_id}-rules/ |
| 35 | └── {skill_name}.md # SKILL.md 格式 |
| 36 | ``` |
| 37 | |
| 38 | ## 流程 |
| 39 | |
| 40 | ### 1. 检测已存在的平台 |
| 41 | |
| 42 | 扫描工作区根目录,识别已知平台目录标识是否存在: |
| 43 | |
| 44 | - `.cursor/` → Cursor |
| 45 | - `.claude/` → Claude |
| 46 | - `.openclaw/workspace/` → OpenClaw |
| 47 | |
| 48 | 输出 `detected_platforms` 列表(包含平台名、路径、是否已存在)。 |
| 49 | |
| 50 | ### 2. 呈现平台选择菜单 |
| 51 | |
| 52 | 向用户展示以下信息: |
| 53 | |
| 54 | ``` |
| 55 | 业务规则 Skill 已生成,请选择安装到哪些 AI 平台: |
| 56 | |
| 57 | 已检测到平台: |
| 58 | [x] Cursor (.cursor/skills/) ← 已存在 |
| 59 | [ ] Claude (.claude/skills/) ← 未检测到 |
| 60 | |
| 61 | 其他已知平台: |
| 62 | [ ] OpenClaw (.openclaw/workspace/skills/) |
| 63 | |
| 64 | 请输入选项(多选,用逗号分隔,如 A,C),或输入 N 跳过: |
| 65 | A. Cursor |
| 66 | B. Claude(将创建 .claude/skills/ 目录) |
| 67 | C. OpenClaw(将创建 .openclaw/workspace/skills/ 目录) |
| 68 | N. 跳过,不安装到任何本地平台 |
| 69 | ``` |
| 70 | |
| 71 | - 已存在的平台默认选中(用户可取消) |
| 72 | - 未检测到的平台不默认选中,选择后需确认将创建目录 |
| 73 | - 用户可手动输入平台路径(如 `windsurf/.windsurf/skills/`) |
| 74 | |
| 75 | ### 3. 执行分发 |
| 76 | |
| 77 | 对每个选中的平台: |
| 78 | |
| 79 | 1. 若平台目录不存在,创建目录结构 |
| 80 | - OpenClaw 特殊路径:`.openclaw/workspace/skills/{network_id}-rules/` |
| 81 | - 其他平台:`{platform_root}/skills/{network_id}-rules/` |
| 82 | 2. 将 `skill_artifact_path` 中的每个 Skill 文件复制到目标路径 |
| 83 | - 若目标文件已存在,覆盖更新 |
| 84 | 3. 保持源文件名不变 |
| 85 | |
| 86 | ### 4. 回读校验 |
| 87 | |
| 88 | 对每个平台: |
| 89 | |
| 90 | - 确认目标目录下每个 Skill 文件存在且内容非空 |
| 91 | - 记录 `files_copied` 列表和 `status` |
| 92 | |
| 93 | ### 5. 输出分发结果 |
| 94 | |
| 95 | ```yaml |
| 96 | distribution_result: |
| 97 | platforms: |
| 98 | - platform: cursor |
| 99 | platform_root: ".cursor" |
| 100 | target_path: ".cursor/skills/{network_id}-rules/" |
| 101 | status: success | failed | skipped |
| 102 | files_copied: |
| 103 | - source: "{network_dir}/skills/{network_id}-rules.md" |
| 104 | target: ".cursor/skills/{network_id}-rules/{network_id}-rules.md" |
| 105 | verified: true |
| 106 | - platform: claude |
| 107 | platform_root: ".claude" |
| 108 | target_path: ".claude/skills/{network_id}-rules/" |
| 109 | status: success | failed | skipped |
| 110 | files_copied: [] |
| 111 | overall_status: all_success | partial | failed | skipped |
| 112 | ``` |
| 113 | |
| 114 | ## 约束 |
| 115 | |
| 116 | - 不修改 Skill 文件内容,仅复制 |
| 117 | - 各平台结构一致,无需格式转换 |
| 118 | - 平台目录下直接覆盖,不归档(归档由 `bkn-rules` 在源头 `{network_dir}/skills/_archived/` 统一管理) |
| 119 | - 跳过(选 N)不阻断后续流程 |
| 120 | - 分发失败不阻断平台发布(`kweaver skill register`) |
| 121 | - 若 `skill_artifact_path` 为空(无规则可分发),输出 `skipped: no_skills` 并停止 |