@wwkit/harness 1.0.9 → 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/agents/extract.md +2 -14
  2. package/agents/lint.md +367 -0
  3. package/agents/pyit.md +361 -0
  4. package/agents/pyut.md +347 -0
  5. package/agents/query.md +2 -14
  6. package/agents/revise.md +2 -14
  7. package/agents/work.md +151 -0
  8. package/commands/git-sync.md +218 -0
  9. package/commands/net-port.md +364 -0
  10. package/commands/pyit.md +6 -0
  11. package/commands/pyut.md +6 -0
  12. package/commands/resume.md +104 -0
  13. package/package.json +2 -2
  14. package/skills/better-skill/SKILL.md +124 -0
  15. package/skills/blame-skill/SKILL.md +201 -0
  16. package/skills/lint-ai-fix/SKILL.md +141 -0
  17. package/skills/lint-config-setup/SKILL.md +106 -0
  18. package/skills/lint-config-setup/references/languages/js.md +110 -0
  19. package/skills/lint-config-setup/references/languages/py.md +89 -0
  20. package/skills/lint-env-ensure/SKILL.md +92 -0
  21. package/skills/lint-env-ensure/references/config.md +65 -0
  22. package/skills/lint-language-detect/SKILL.md +79 -0
  23. package/skills/lint-language-detect/references/detect-language.js +65 -0
  24. package/skills/lint-rules-analyze/SKILL.md +129 -0
  25. package/skills/lint-suitability-check/SKILL.md +84 -0
  26. package/skills/lint-tool-fix/SKILL.md +94 -0
  27. package/skills/new-skill/SKILL.md +227 -0
  28. package/skills/new-skill/references/template.md +53 -0
  29. package/skills/new-skill/references/workflow-patterns.md +104 -0
  30. package/skills/pytest-case-create/SKILL.md +327 -0
  31. package/skills/pytest-case-create/references/test-standards.md +244 -0
  32. package/skills/pytest-case-fix/SKILL.md +274 -0
  33. package/skills/pytest-coverage-analyze/SKILL.md +226 -0
  34. package/skills/pytest-coverage-analyze/references/scoring-rules.md +57 -0
  35. package/skills/pytest-env-ensure/SKILL.md +198 -0
  36. package/skills/pytest-env-ensure/references/config.md +145 -0
  37. package/skills/pytest-execute/SKILL.md +155 -0
  38. package/skills/pytest-sample/SKILL.md +164 -0
  39. package/skills/pytest-sample/references/src/pytest-sample/Calculator.py +67 -0
  40. package/skills/pytest-sample/references/src/pytest-sample/ConfigManager.py +68 -0
  41. package/skills/pytest-sample/references/src/pytest-sample/FileProcessor.py +53 -0
  42. package/skills/pytest-sample/references/src/pytest-sample/OrderService.py +82 -0
  43. package/skills/pytest-sample/references/src/pytest-sample/TokenGenerator.py +50 -0
  44. package/skills/pytest-sample/references/src/pytest-sample/UserService.py +45 -0
  45. package/skills/pytest-sample/references/src/pytest-sample/__init__.py +0 -0
  46. package/skills/pytest-suitability-check/SKILL.md +224 -0
  47. package/skills/read-docs/SKILL.md +134 -0
  48. package/skills/read-docs/references/opencode/agents/cases.md +206 -0
  49. package/skills/read-docs/references/opencode/agents/design-pattern.md +47 -0
  50. package/skills/read-docs/references/opencode/agents/detail.md +191 -0
  51. package/skills/read-docs/references/opencode/agents/examples.md +100 -0
  52. package/skills/read-docs/references/opencode/agents/index.md +307 -0
  53. package/skills/read-docs/references/opencode/agents/workflow.md +161 -0
  54. package/skills/read-docs/references/opencode/cli/commands/acp.md +32 -0
  55. package/skills/read-docs/references/opencode/cli/commands/agent.md +16 -0
  56. package/skills/read-docs/references/opencode/cli/commands/attach.md +20 -0
  57. package/skills/read-docs/references/opencode/cli/commands/mcp.md +37 -0
  58. package/skills/read-docs/references/opencode/cli/commands/others.md +49 -0
  59. package/skills/read-docs/references/opencode/cli/commands/plugin.md +13 -0
  60. package/skills/read-docs/references/opencode/cli/commands/provider.md +44 -0
  61. package/skills/read-docs/references/opencode/cli/commands/run.md +81 -0
  62. package/skills/read-docs/references/opencode/cli/commands/serve.md +84 -0
  63. package/skills/read-docs/references/opencode/cli/commands/session.md +38 -0
  64. package/skills/read-docs/references/opencode/cli/commands/web.md +15 -0
  65. package/skills/read-docs/references/opencode/cli/env.md +39 -0
  66. package/skills/read-docs/references/opencode/cli/index.md +19 -0
  67. package/skills/read-docs/references/opencode/cli/tui.md +35 -0
  68. package/skills/read-docs/references/opencode/commands/examples.md +42 -0
  69. package/skills/read-docs/references/opencode/commands/index.md +185 -0
  70. package/skills/read-docs/references/opencode/config/provider.md +152 -0
  71. package/skills/read-docs/references/opencode/formatter/index.md +71 -0
  72. package/skills/read-docs/references/opencode/guide/config.md +419 -0
  73. package/skills/read-docs/references/opencode/guide/formatters.md +70 -0
  74. package/skills/read-docs/references/opencode/guide/index.md +37 -0
  75. package/skills/read-docs/references/opencode/guide/providers.md +31 -0
  76. package/skills/read-docs/references/opencode/guide/rules.md +63 -0
  77. package/skills/read-docs/references/opencode/plugins/examples.md +75 -0
  78. package/skills/read-docs/references/opencode/plugins/index.md +188 -0
  79. package/skills/read-docs/references/opencode/reference/index.md +119 -0
  80. package/skills/read-docs/references/opencode/rule/index.md +78 -0
  81. package/skills/read-docs/references/opencode/skills/detail.md +113 -0
  82. package/skills/read-docs/references/opencode/skills/examples.md +141 -0
  83. package/skills/read-docs/references/opencode/skills/index.md +126 -0
  84. package/skills/read-docs/references/opencode/skills/workflow.md +146 -0
  85. package/skills/read-docs/references/opencode/tests/agent.md +10 -0
  86. package/skills/read-docs/references/opencode/tests/config.md +60 -0
  87. package/skills/read-docs/references/opencode/tests/file.md +12 -0
  88. package/skills/read-docs/references/opencode/tests/serve.md +18 -0
  89. package/skills/read-docs/references/opencode/tests/session.md +31 -0
  90. package/skills/read-docs/references/opencode/tests/web.md +17 -0
  91. package/skills/read-docs/references/opencode/tools/arguments.md +305 -0
  92. package/skills/read-docs/references/opencode/tools/context.md +18 -0
  93. package/skills/read-docs/references/opencode/tools/custom.md +111 -0
  94. package/skills/read-docs/references/opencode/tools/detail.md +104 -0
  95. package/skills/read-docs/references/opencode/tools/examples.md +71 -0
  96. package/skills/read-docs/references/opencode/tools/index.md +56 -0
  97. package/skills/read-docs/references/opencode/tools/lsp.md +26 -0
  98. package/skills/read-docs/references/opencode/tools/mcp.md +132 -0
  99. package/skills/read-docs/references/opencode/train/README.md +135 -0
  100. package/skills/read-docs/references/opencode/train/agent-basic.md +772 -0
  101. package/skills/read-docs/references/opencode/train/command-basic.md +668 -0
  102. package/skills/read-docs/references/opencode/train/config-basic.md +509 -0
  103. package/skills/read-docs/references/opencode/train/index.md +164 -0
  104. package/skills/read-docs/references/opencode/train/practice.md +873 -0
  105. package/skills/read-docs/references/opencode/train/skill-basic.md +608 -0
  106. package/skills/read-docs/references/opencode/tui/commands/config.md +32 -0
  107. package/skills/read-docs/references/opencode/tui/commands/editor.md +47 -0
  108. package/skills/read-docs/references/opencode/tui/commands/index.md +125 -0
  109. package/skills/read-docs/references/opencode/tui/commands/init.md +5 -0
  110. package/skills/read-docs/references/opencode/tui/index.md +26 -0
@@ -0,0 +1,608 @@
1
+ # 技能创建培训
2
+
3
+ 学习创建 OpenCode 技能(Skill),实现可复用的 AI 工作流。
4
+
5
+ ## 理论介绍
6
+
7
+ ### 什么是技能(Skill)?
8
+
9
+ 技能是通过 `SKILL.md` 定义的可复用行为,让 Agent 按照预设工作流程执行任务。
10
+
11
+ **核心特点**:
12
+ - **可复用**:一次定义,多处使用
13
+ - **按需加载**:Agent 需要时才加载完整内容
14
+ - **渐进式**:先展示描述,后加载详情
15
+ - **可扩展**:支持 references 目录存放详细文档
16
+
17
+ ### 技能文件结构
18
+
19
+ ```
20
+ .opencode/skills/
21
+ └── my-skill/
22
+ ├── SKILL.md # 必需:技能定义文件
23
+ └── references/ # 可选:详细文档目录
24
+ ├── guide.md
25
+ └── examples.md
26
+ ```
27
+
28
+ ### 技能发现机制
29
+
30
+ OpenCode 搜索以下位置:
31
+ - **项目配置**:`.opencode/skills/<name>/SKILL.md`
32
+ - **全局配置**:`~/.config/opencode/skills/<name>/SKILL.md`
33
+
34
+ 从当前工作目录向上遍历直到 Git 工作树根目录。
35
+
36
+ ### 技能加载流程
37
+
38
+ ```
39
+ 用户请求 → Agent 看到技能列表 → 选择合适技能 → 加载 SKILL.md → 执行工作流
40
+ ```
41
+
42
+ **渐进式加载**:
43
+ 1. Agent 先看到技能名称和描述
44
+ 2. 调用 `skill` 工具加载完整内容
45
+ 3. 按工作流执行任务
46
+
47
+ ## SKILL.md 结构
48
+
49
+ ### Frontmatter 规范
50
+
51
+ 每个 `SKILL.md` 必须以 YAML frontmatter 开头:
52
+
53
+ ```yaml
54
+ ---
55
+ name: skill-name # 必需:正则 ^[a-z0-9]+(-[a-z0-9]+)*$
56
+ description: 技能描述 # 必需:1-1024 字符,需足够具体
57
+ license: MIT # 可选:许可证
58
+ compatibility: opencode # 可选:兼容性
59
+ metadata: # 可选:元数据
60
+ audience: developers
61
+ workflow: git
62
+ ---
63
+ ```
64
+
65
+ ### Description 编写原则
66
+
67
+ **好的描述**:
68
+ - ✅ 说明技能做什么
69
+ - ✅ 说明适用场景
70
+ - ✅ 说明不适用场景
71
+ - ✅ 提供关键特性
72
+
73
+ **示例**:
74
+ ```yaml
75
+ description: |
76
+ 用于分析业务数据:收入趋势、ARR 计算、客户分群。
77
+ 提供:公司表结构、指标定义公式、标准过滤器。
78
+ 适用:需要写 SQL 分析业务数据、理解公司指标定义。
79
+ 不适用:数据库管理、DDL 操作、性能调优。
80
+ ```
81
+
82
+ ### 正文结构
83
+
84
+ 推荐结构:
85
+ ```markdown
86
+ # 技能标题
87
+
88
+ ## 工作流程
89
+ 1. 明确需求
90
+ 2. 执行步骤
91
+ 3. 验证结果
92
+
93
+ ## 关键规则
94
+ - 必须遵守的规则
95
+ - 常见错误避免
96
+
97
+ ## 详细文档
98
+ 需要详细信息时参考 references/
99
+ ```
100
+
101
+ ## 实例展示
102
+
103
+ ### 案例 1:翻译技能(简单)
104
+
105
+ 创建 `.opencode/skills/translate/SKILL.md`:
106
+
107
+ ```markdown
108
+ ---
109
+ name: translate
110
+ description: 专业翻译技能,保留格式和术语。用于翻译技术文档、API 文档、代码注释。
111
+ ---
112
+
113
+ # 翻译技能
114
+
115
+ ## 翻译规范
116
+
117
+ 1. **保持格式**:保留原文的段落结构和 Markdown 格式
118
+ 2. **术语处理**:专有名词保留原文并标注,如 "API(应用程序接口)"
119
+ 3. **技术术语**:查阅术语表或保留英文
120
+ 4. **润色通读**:翻译后进行通读润色
121
+
122
+ ## 输出格式
123
+
124
+ 翻译结果用代码块包裹:
125
+
126
+ ```
127
+ 翻译内容...
128
+ ```
129
+
130
+ 对于不确定的翻译,用括号标注原文:
131
+
132
+ ```
133
+ 原文术语(Original Term)
134
+ ```
135
+
136
+ ## 注意事项
137
+
138
+ - ❌ 不要翻译代码块中的代码
139
+ - ❌ 不要翻译 URL 和路径
140
+ - ✅ 保持原文的专业性和准确性
141
+ ```
142
+
143
+ **使用方式**:
144
+ ```
145
+ 用户:帮我翻译 README.md
146
+ Agent:加载 translate 技能 → 按规范翻译 → 输出结果
147
+ ```
148
+
149
+ ### 案例 2:代码审查技能(中级)
150
+
151
+ 创建 `.opencode/skills/code-review/SKILL.md`:
152
+
153
+ ```markdown
154
+ ---
155
+ name: code-review
156
+ description: |
157
+ 代码质量审查技能,检查代码规范、安全性、性能问题。
158
+ 提供:审查清单、常见问题库、修复建议模板。
159
+ 适用:PR 审查、代码质量检查、最佳实践验证。
160
+ 不适用:功能实现、Bug 修复、性能优化实施。
161
+ ---
162
+
163
+ # 代码审查技能
164
+
165
+ ## 审查工作流
166
+
167
+ 当用户请求代码审查时:
168
+
169
+ ### 1. 明确审查范围
170
+
171
+ 询问用户:
172
+ - 审查哪些文件或目录?
173
+ - 关注哪些方面?(安全/性能/规范/全部)
174
+ - 有特定的审查标准吗?
175
+
176
+ ### 2. 执行审查
177
+
178
+ 按照审查清单逐项检查:
179
+
180
+ #### 代码规范
181
+ - ✅ 命名规范:变量、函数、类名是否符合约定
182
+ - ✅ 格式规范:缩进、空格、换行是否统一
183
+ - ✅ 注释规范:关键逻辑是否有注释
184
+
185
+ #### 安全性
186
+ - ✅ 输入验证:是否有未验证的用户输入
187
+ - ✅ 权限检查:敏感操作是否有权限验证
188
+ - ✅ 数据泄露:是否暴露敏感信息
189
+
190
+ #### 性能
191
+ - ✅ 算法效率:是否有明显的性能问题
192
+ - ✅ 资源管理:是否有内存泄漏风险
193
+ - ✅ 数据库查询:是否有 N+1 查询问题
194
+
195
+ ### 3. 输出审查报告
196
+
197
+ 格式:
198
+
199
+ ```markdown
200
+ ## 审查摘要
201
+
202
+ - 审查文件:[文件列表]
203
+ - 发现问题:[问题数量]
204
+ - 严重程度:[高/中/低]
205
+
206
+ ## 详细问题
207
+
208
+ ### 问题 1:[问题标题]
209
+ - **文件**:src/file.js:123
210
+ - **严重程度**:高
211
+ - **问题描述**:...
212
+ - **修复建议**:...
213
+
214
+ ### 问题 2:...
215
+ ```
216
+
217
+ ## 审查清单
218
+
219
+ 详细清单见 `references/checklist.md`
220
+
221
+ ## 常见问题库
222
+
223
+ 常见问题及修复见 `references/common-issues.md`
224
+ ```
225
+
226
+ 创建 `references/checklist.md`:
227
+
228
+ ```markdown
229
+ # 代码审查清单
230
+
231
+ ## JavaScript/TypeScript 规范
232
+
233
+ ### 命名规范
234
+ - [ ] 变量使用 camelCase
235
+ - [ ] 常量使用 UPPER_CASE
236
+ - [ ] 类名使用 PascalCase
237
+ - [ ] 私有属性使用 _前缀或 #前缀
238
+
239
+ ### 格式规范
240
+ - [ ] 使用 2 空格缩进
241
+ - [ ] 使用单引号或双引号统一
242
+ - [ ] 语句末尾分号统一
243
+ - [ ] 每行最大长度不超过 100 字符
244
+
245
+ ### 安全性
246
+ - [ ] 避免 eval() 和 Function()
247
+ - [ ] 验证用户输入
248
+ - [ ] 避免硬编码密钥和密码
249
+ - [ ] 使用 HTTPS 传输敏感数据
250
+
251
+ ## 性能检查
252
+
253
+ - [ ] 避免深层嵌套循环
254
+ - [ ] 使用防抖/节流处理高频事件
255
+ - [ ] 避免在循环中创建函数
256
+ - [ ] 合理使用缓存
257
+ ```
258
+
259
+ **使用方式**:
260
+ ```
261
+ 用户:审查 src/components/ 目录
262
+ Agent:加载 code-review 技能 → 按清单审查 → 输出报告
263
+ ```
264
+
265
+ ### 案例 3:SQL 分析技能(高级)
266
+
267
+ 创建 `.opencode/skills/sql-analysis/SKILL.md`:
268
+
269
+ ```markdown
270
+ ---
271
+ name: sql-analysis
272
+ description: |
273
+ 用于分析业务数据:收入趋势、ARR 计算、客户分群、产品使用、销售管道。
274
+ 提供:公司表结构、指标定义公式、标准过滤器、常用查询模板。
275
+ 适用:需要写 SQL 分析业务数据、理解公司指标定义、查询数据仓库。
276
+ 不适用:数据库管理、DDL 操作、性能调优、通用 SQL 教学。
277
+ ---
278
+
279
+ # SQL 分析技能
280
+
281
+ ## 快速工作流程
282
+
283
+ 当用户请求数据分析时:
284
+
285
+ ### 1. 明确需求
286
+
287
+ 询问用户:
288
+ - 什么时间范围?(默认当年)
289
+ - 哪个客户分群?
290
+ - 这个分析用于什么决策?
291
+
292
+ ### 2. 检查现有看板
293
+
294
+ 查看 `references/dashboards.md` 是否有现成报表。
295
+ 如果有,优先引导用户使用。
296
+
297
+ ### 3. 确定数据源
298
+
299
+ - 优先使用汇总表而非原始事件数据
300
+ - 查询前确认表有必需字段
301
+ - 参考 `references/tables.md` 查看表结构
302
+
303
+ ### 4. 执行分析
304
+
305
+ - 应用必需过滤器(排除测试账户等)
306
+ - 用已知基准验证结果
307
+ - 使用标准查询模板
308
+
309
+ ## 标准查询过滤器
310
+
311
+ 所有收入查询必须:
312
+ ```sql
313
+ WHERE account != 'Test' -- 排除测试账户
314
+ AND month <= DATE_TRUNC(CURRENT_DATE(), MONTH) -- 只用完整周期
315
+ ```
316
+
317
+ ## ARR 计算方式
318
+
319
+ - 月收入转 ARR:`monthly_revenue * 12`
320
+ - 7 日运行率:`rolling_7d * 52`
321
+
322
+ ## 详细文档
323
+
324
+ 需要表结构和查询模式时,参考:
325
+ - **收入与财务** → `references/finance.md`
326
+ - **产品使用** → `references/product.md`
327
+ - **销售管道** → `references/sales.md`
328
+ ```
329
+
330
+ 创建 `references/finance.md`:
331
+
332
+ ```markdown
333
+ # 财务表详细结构
334
+
335
+ ## monthly_revenue 表
336
+
337
+ | 字段 | 类型 | 说明 |
338
+ |-----|------|------|
339
+ | account_id | STRING | 账户 ID |
340
+ | month | DATE | 月份(每月第一天) |
341
+ | mrr | FLOAT | 月度经常性收入 |
342
+ | arr | FLOAT | 年度经常性收入 |
343
+ | segment | STRING | 客户分群 |
344
+
345
+ ## 常用查询
346
+
347
+ ### 按分群统计月收入
348
+
349
+ ```sql
350
+ SELECT
351
+ segment,
352
+ DATE_TRUNC(month, MONTH) as period,
353
+ SUM(mrr) as total_mrr
354
+ FROM monthly_revenue
355
+ WHERE account_id != 'Test'
356
+ AND month <= DATE_TRUNC(CURRENT_DATE(), MONTH)
357
+ GROUP BY 1, 2
358
+ ORDER BY 2 DESC, 3 DESC
359
+ ```
360
+
361
+ ### ARR 增长趋势
362
+
363
+ ```sql
364
+ SELECT
365
+ month,
366
+ SUM(arr) as total_arr,
367
+ LAG(SUM(arr)) OVER (ORDER BY month) as prev_arr,
368
+ (SUM(arr) - LAG(SUM(arr)) OVER (ORDER BY month)) /
369
+ LAG(SUM(arr)) OVER (ORDER BY month) * 100 as growth_rate
370
+ FROM monthly_revenue
371
+ WHERE account_id != 'Test'
372
+ GROUP BY 1
373
+ ORDER BY 1 DESC
374
+ LIMIT 12
375
+ ```
376
+ ```
377
+
378
+ **使用方式**:
379
+ ```
380
+ 用户:分析本年度 ARR 增长趋势
381
+ Agent:加载 sql-analysis 技能 → 查看 finance.md → 编写查询 → 输出结果
382
+ ```
383
+
384
+ ### 案例 4:品牌规范技能(设计)
385
+
386
+ 创建 `.opencode/skills/brand-guidelines/SKILL.md`:
387
+
388
+ ```markdown
389
+ ---
390
+ name: brand-guidelines
391
+ description: |
392
+ 应用公司官方品牌色和排版规范。用于创建需要公司视觉风格的文档、演示文稿、界面设计。
393
+ 提供:品牌色板、字体规范、应用规则、设计模板。
394
+ 适用:创建品牌文档、设计 UI、制作演示文稿。
395
+ 不适用:非品牌项目、个人项目、实验性设计。
396
+ ---
397
+
398
+ # 品牌规范技能
399
+
400
+ ## 颜色规范
401
+
402
+ ### 主色
403
+
404
+ | 名称 | 色值 | 用途 |
405
+ |------|------|------|
406
+ | 深色 | `#141413` | 主要文字和深色背景 |
407
+ | 浅色 | `#faf9f5` | 浅色背景和深色上的文字 |
408
+ | 中灰 | `#b0aea5` | 次要元素 |
409
+
410
+ ### 强调色
411
+
412
+ | 名称 | 艅值 | 用途 |
413
+ |------|------|------|
414
+ | 橙色 | `#d97757` | 主强调色,按钮、链接 |
415
+ | 蓝色 | `#6a9bcc` | 次强调色,辅助信息 |
416
+ | 绿色 | `#788c5d` | 第三强调色,成功状态 |
417
+
418
+ ## 字体规范
419
+
420
+ | 类型 | 字体 | 备选 | 用途 |
421
+ |------|------|------|------|
422
+ | 标题 | Poppins | Arial | 标题(24pt 及以上) |
423
+ | 正文 | Lora | Georgia | 正文内容 |
424
+
425
+ ## 应用规则
426
+
427
+ 1. **标题字体**:24pt 及以上使用 Poppins
428
+ 2. **正文字体**:使用 Lora
429
+ 3. **文字颜色**:根据背景智能选择
430
+ - 深色背景 → 浅色文字
431
+ - 浅色背景 → 深色文字
432
+
433
+ ## 设计模板
434
+
435
+ 详细模板见 `references/templates.md`
436
+ ```
437
+
438
+ **使用方式**:
439
+ ```
440
+ 用户:创建产品介绍文档,使用品牌风格
441
+ Agent:加载 brand-guidelines 技能 → 应用颜色和字体 → 创建文档
442
+ ```
443
+
444
+ ## 技能权限配置
445
+
446
+ ### 在配置文件中控制
447
+
448
+ ```jsonc
449
+ {
450
+ "$schema": "https://opencode.ai/config.json",
451
+ "permission": {
452
+ "skill": {
453
+ "*": "allow", // 默认允许所有技能
454
+ "translate": "allow", // 允许翻译技能
455
+ "internal-*": "deny", // 禁用内部技能
456
+ "experimental-*": "ask" // 实验性技能需审批
457
+ }
458
+ }
459
+ }
460
+ ```
461
+
462
+ ### 在 Agent 中覆盖
463
+
464
+ ```markdown
465
+ ---
466
+ permission:
467
+ skill:
468
+ "documents-*": "allow"
469
+ "experimental-*": "deny"
470
+ ---
471
+ ```
472
+
473
+ ### 禁用技能工具
474
+
475
+ ```markdown
476
+ ---
477
+ tools:
478
+ skill: false
479
+ ---
480
+ ```
481
+
482
+ ## 动手练习
483
+
484
+ ### 练习 1:创建简单技能
485
+
486
+ **任务**:创建一个格式化技能,统一代码格式
487
+
488
+ **提示**:
489
+ ```markdown
490
+ ---
491
+ name: format-code
492
+ description: |
493
+ 统一代码格式化技能,应用团队编码规范。
494
+ 提供:格式化规则、ESLint 配置、Prettier 配置。
495
+ ---
496
+
497
+ # 格式化技能
498
+
499
+ ## 格式化规则
500
+
501
+ 1. 使用 2 空格缩进
502
+ 2. 使用单引号
503
+ 3. 语句末尾无分号
504
+ 4. ...
505
+
506
+ ## 执行步骤
507
+
508
+ 1. 检查现有格式
509
+ 2. 应用格式化规则
510
+ 3. 验证格式正确性
511
+ ```
512
+
513
+ ### 练习 2:创建含 references 的技能
514
+
515
+ **任务**:创建 API 文档生成技能,包含 references
516
+
517
+ **结构**:
518
+ ```
519
+ .opencode/skills/api-docs/
520
+ ├── SKILL.md
521
+ └── references/
522
+ ├── template.md
523
+ └── examples.md
524
+ ```
525
+
526
+ **SKILL.md**:
527
+ ```markdown
528
+ ---
529
+ name: api-docs
530
+ description: |
531
+ API 文档生成技能,创建标准化的 API 文档。
532
+ 提供:文档模板、参数规范、示例格式。
533
+ ---
534
+
535
+ # API 文档生成技能
536
+
537
+ ## 工作流程
538
+
539
+ 1. 分析 API 接口
540
+ 2. 提取参数和返回值
541
+ 3. 生成标准化文档
542
+
543
+ ## 文档模板
544
+
545
+ 详细模板见 `references/template.md`
546
+
547
+ ## 示例文档
548
+
549
+ 参考示例见 `references/examples.md`
550
+ ```
551
+
552
+ ### 练习 3:优化技能描述
553
+
554
+ **任务**:优化以下技能描述,使其更具体
555
+
556
+ **原始描述**:
557
+ ```yaml
558
+ description: "帮助写文档"
559
+ ```
560
+
561
+ **优化后**:
562
+ ```yaml
563
+ description: |
564
+ 技术文档写作技能,擅长 API 文档、README、用户手册。
565
+ 提供:文档结构模板、写作规范、常见错误避免。
566
+ 适用:写新项目文档、更新现有文档、解释代码功能。
567
+ 不适用:代码审查、Bug 修复、功能实现。
568
+ ```
569
+
570
+ ## 常见问题
571
+
572
+ ### Q1: 技能和 Agent 有什么区别?
573
+
574
+ | 特性 | 技能 | Agent |
575
+ |------|------|-------|
576
+ | 定义方式 | SKILL.md | Markdown 或 JSON |
577
+ | 加载时机 | 按需加载 | 会话切换 |
578
+ | 主要用途 | 可复用工作流 | 专门任务助手 |
579
+ | 工具权限 | 继承 Agent | 可独立配置 |
580
+
581
+ ### Q2: references 目录有什么作用?
582
+
583
+ 存放详细文档,避免 SKILL.md 过长:
584
+ - **SKILL.md**:工作流和关键逻辑
585
+ - **references/**:详细文档、模板、示例
586
+
587
+ ### Q3: 如何测试技能是否生效?
588
+
589
+ 1. 启动 OpenCode
590
+ 2. 描述任务需求
591
+ 3. 查看是否加载正确技能
592
+ 4. 验证工作流执行正确
593
+
594
+ ### Q4: 技能可以调用其他技能吗?
595
+
596
+ 可以,在 SKILL.md 中提及:
597
+ ```markdown
598
+ ## 相关技能
599
+
600
+ 需要翻译时,使用 translate 技能
601
+ 需要审查时,使用 code-review 技能
602
+ ```
603
+
604
+ ## 下一步
605
+
606
+ - 🤖 [Agent 配置培训](/train/agent-basic) - 学习创建专门的 Agent
607
+ - ⚡ [命令使用培训](/train/command-basic) - 学习自定义命令
608
+ - 🎯 [实战案例](/train/practice) - 综合应用所学知识
@@ -0,0 +1,32 @@
1
+ # configure
2
+ Customize TUI behavior through `tui.json` (or `tui.jsonc`).
3
+ - This is separate from `opencode.json`.
4
+ - `keybinds` is merged with built-in defaults, so you only need to configure the shortcuts you want to change.
5
+
6
+ ```json
7
+ {
8
+ "$schema": "https://opencode.ai/tui.json",
9
+ "theme": "opencode",
10
+ "leader_timeout": 2000,
11
+ "keybinds": {
12
+ "leader": "ctrl+x",
13
+ "command_list": "ctrl+p"
14
+ },
15
+ "scroll_speed": 3,
16
+ "scroll_acceleration": {
17
+ "enabled": false
18
+ },
19
+ "diff_style": "auto",
20
+ "mouse": true,
21
+ "attention": {
22
+ "enabled": true,
23
+ "notifications": true,
24
+ "sound": true,
25
+ "volume": 0.4,
26
+ "sound_pack": "opencode.default",
27
+ "sounds": {
28
+ "error": "./sounds/error.mp3"
29
+ }
30
+ }
31
+ }
32
+ ```
@@ -0,0 +1,47 @@
1
+ # editor
2
+ Open external editor for composing messages. Uses the editor set in your `EDITOR` environment variable.
3
+ ```
4
+ /editor
5
+ ```
6
+
7
+ 流程是:
8
+ 1. TUI 创建一个临时文件
9
+ 2. 用 $EDITOR 打开它(如 vim、code --wait)
10
+ 3. 你在编辑器里写内容,保存并关闭
11
+ 4. TUI 读取临时文件内容,作为消息发送给 AI 和 git commit 不加 -m 时打开编辑器写提交信息是同一个机制。
12
+
13
+ 关键是编辑器必须阻塞等待——像 vim 天然阻塞,VS Code 则需要 code --wait 参数才会等关闭后再返回控制权给 TUI。
14
+
15
+ ## setup
16
+ Both the `/editor` and `/export` commands use the editor specified in your EDITOR environment variable.
17
+
18
+ Linux/macOS
19
+ ```
20
+ export EDITOR=nano
21
+ export EDITOR=vim
22
+
23
+ # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
24
+ export EDITOR="code --wait"
25
+ ```
26
+
27
+ Windows(cmd)
28
+ ```
29
+ set EDITOR=notepad
30
+ set EDITOR=code --wait
31
+ ```
32
+
33
+ Windows(Powershell)
34
+ ```
35
+ $env:EDITOR = "notepad"
36
+ $env:EDITOR = "code --wait"
37
+ ```
38
+
39
+ ## popular editors
40
+ - code : VSCode
41
+ - cursor
42
+ - windsurf
43
+ - nvim
44
+ - vim
45
+ - nano
46
+ - notepad : Windows Notepad
47
+ - subl : sublime text