
• 荣耀 Magic V6 正式发布,MacBook Neo 首发体验出炉——配备手机芯片、入门级定价,苹果试图用最低门槛打开更大的 Mac 市场。
• Matter 协议推动跨品牌智能家居互联,主动感知型智能设备开始从概念走向落地产品。
• 伊朗局势升级引发能源市场波动,国际数据中心与云服务商正密切关注油气价格对电力成本的影响。
你有没有想过,让 AI 学会一门手艺?
比如,当你说"帮我写一个 ViewModel"的时候,AI 不只是给你一段通用代码,而是按照你团队的架构规范、用你们约定的技术栈、遵循你们踩过坑总结出来的最佳实践来生成——这就是 OpenClaw Skill 想解决的问题。
这篇文章,我会从"什么是 Skill"讲起,以一个真实的 android-dev Skill 作为贯穿全文的案例,带你走完从设计到打包的完整流程。
什么是 OpenClaw Skill?
OpenClaw Skill 本质上是一个"领域知识包"——它告诉 AI 在特定场景下该怎么思考、用什么工具、遵循什么规范。你可以把它理解成给 AI 写的"岗前培训手册"。
一个 Skill 的目录结构很简洁:
android-dev/
├── SKILL.md # 核心:触发条件 + 使用说明
├── references/ # 参考文档,按需加载
│ ├── conventions.md
│ ├── crash_patterns.md
│ └── dependencies.md
└── scripts/ # 可执行脚本最关键的是 SKILL.md,它分两部分:
关键设计原则:description 是触发机制,越具体越好。正文是使用指南,越简洁越好——上下文窗口是公共资源,不要浪费。
案例:android-dev Skill 的设计思路
第一步:明确要解决什么问题
Android 开发中有大量重复性的代码生成需求,但 AI 在没有上下文的情况下,往往给出"教科书式"的代码——用 AsyncTask、忘记处理 Fragment 生命周期、把 Context 存到 ViewModel 里……这些坑,Android 开发者都踩过。
我希望这个 Skill 能做到:
第二步:设计文件结构
把知识分三类存放:
这样设计的好处是"按需加载"——用户问 Crash 分析,AI 只读 crash_patterns.md;问代码规范,读 conventions.md。不会一次把所有文档都塞进上下文。
第三步:写 SKILL.md
SKILL.md 的 frontmatter 是触发的关键,description 要把所有触发场景都写清楚:
---
name: android-dev
description: Android 开发辅助 skill。当用户提出
Android 开发相关需求时使用,包括:生成
Kotlin/Java 代码(ViewModel、Repository、
Compose UI、Room、Retrofit 等)、分析
Crash/ANR 日志、审查代码质量、解释 Android
系统机制、提供依赖版本建议。
---正文部分则列出核心能力索引和必须遵守的规范要点,把详细内容放到 references 文件里:
## 代码生成规范生成代码时遵循以下规范
(详见 references/conventions.md):- 语言:优先 Kotlin
- 架构:MVVM + Repository pattern
- 异步:suspend fun + Flow/StateFlow
- DI:Hilt
- 状态:UiState sealed class + StateFlow
- 错误处理:Result<T> 包裹,不裸上抛实战效果演示
场景一:生成符合规范的 ViewModel
输入:"帮我写一个加载用户信息的 ViewModel"
有了 Skill,AI 直接输出:
@HiltViewModel
class UserViewModel @Inject constructor(
private val repo: UserRepository
) : ViewModel() {private val _uiState = MutableStateFlow<UserUiState>(
UserUiState.Loading
)
val uiState: StateFlow<UserUiState> =
_uiState.asStateFlow()fun loadUser(userId: String) {
viewModelScope.launch {
_uiState.value = UserUiState.Loading
repo.getUser(userId)
.onSuccess { user ->
_uiState.value =
UserUiState.Success(user)
}
.onFailure { e ->
_uiState.value =
UserUiState.Error(
e.message
)
}
}
}
}没有 GlobalScope,没有裸 LiveData,状态管理用 sealed class,DI 用 Hilt——一次到位。
场景二:分析 ANR 日志
粘贴一段 ANR 的 main thread stacktrace,AI 根据 crash_patterns.md 里的分析框架,能快速定位是主线程 IO 还是锁竞争,并给出具体的修复方案——不是泛泛的"把操作移到子线程",而是"这里的 SharedPreferences.commit() 改成 apply() 或换 DataStore"。
打包与分发
写完 Skill 后,一条命令打包成 .skill 文件:
python3 package_skill.py \
./android-dev \
./dist# 输出:dist/android-dev.skill打包脚本会自动校验:
校验通过后生成 .skill 文件(本质是 zip),发给团队成员安装即可,大家用的是同一套规范。
写在最后
Skill 的核心价值不是让 AI "更聪明",而是让 AI 知道你的上下文——你的规范、你的技术栈、你踩过的坑。这是通用大模型做不到的,但一个精心设计的 Skill 可以做到。
三个实用建议:
description 要具体:触发场景越清晰,AI 使用 Skill 的准确率越高
references 要分文件:按主题拆分,让 AI 按需加载,别一股脑全塞进 SKILL.md
从真实问题出发:先想"我每次让 AI 做这件事都要重复解释什么",那些内容就是 Skill 该写的