名称: skill 描述: 管理本地技能 - 列表、添加、删除、搜索、编辑、设置向导 参数提示: “<command> [args]”
技能管理CLI
用于通过CLI类似命令管理oh-my-claudecode技能的元技能。
子命令
/skill list
显示所有本地技能,按范围组织。
行为:
- 扫描用户技能在
~/.claude/skills/omc-learned/ - 扫描项目技能在
.omc/skills/ - 解析YAML frontmatter获取元数据
- 以组织好的表格格式显示:
用户技能 (~/.claude/skills/omc-learned/):
| 名称 | 触发词 | 质量 | 使用次数 | 范围 |
|-------------------|--------------------|---------|-------|-------|
| error-handler | fix, error | 95% | 42 | 用户 |
| api-builder | api, endpoint | 88% | 23 | 用户 |
项目技能 (.omc/skills/):
| 名称 | 触发词 | 质量 | 使用次数 | 范围 |
|-------------------|--------------------|---------|-------|---------|
| test-runner | test, run | 92% | 15 | 项目 |
回退: 如果质量/使用统计不可用,显示“N/A”
/skill add [名称]
创建新技能的交互式向导。
行为:
- 询问技能名称(如果命令中未提供)
- 验证:仅小写、连字符、无空格
- 询问描述
- 清晰简洁的一行描述
- 询问触发词(逗号分隔的关键词)
- 示例:“error, fix, debug”
- 询问参数提示(可选)
- 示例:“<file> [options]”
- 询问范围:
用户→~/.claude/skills/omc-learned/<名称>/SKILL.md项目→.omc/skills/<名称>/SKILL.md
- 创建技能文件,使用模板:
---
名称: <名称>
描述: <描述>
触发词:
- <触发词1>
- <触发词2>
参数提示: "<参数>"
---
# <名称> 技能
## 目的
[描述此技能的功能]
## 何时激活
[描述触发条件和情形]
## 工作流程
1. [步骤1]
2. [步骤2]
3. [步骤3]
## 示例
/oh-my-claudecode:<名称> 示例参数
## 备注
[额外上下文、边缘情况、注意事项]
- 报告成功,显示文件路径
- 建议: “使用
/skill edit <名称>编辑内容”
示例:
用户: /skill add custom-logger
助手: 创建新技能 'custom-logger'...
描述: 增强的日志记录,带结构化输出
触发词 (逗号分隔): log, logger, logging
参数提示 (可选): <level> [message]
范围 (用户/项目): 用户
✓ 创建技能于 ~/.claude/skills/omc-learned/custom-logger/SKILL.md
→ 使用编辑: /skill edit custom-logger
/skill remove <名称>
通过名称删除技能。
行为:
- 搜索技能 在两个范围:
~/.claude/skills/omc-learned/<名称>/SKILL.md.omc/skills/<名称>/SKILL.md
- 如果找到:
- 显示技能信息(名称、描述、范围)
- 请求确认: “从 <范围> 删除 ‘<名称>’ 技能? (是/否)”
- 如果确认:
- 删除整个技能目录(例如,
~/.claude/skills/omc-learned/<名称>/) - 报告:“✓ 从 <范围> 删除技能 ‘<名称>’”
- 删除整个技能目录(例如,
- 如果未找到:
- 报告:“✗ 在用户或项目范围未找到技能 ‘<名称>’”
安全性: 未经用户明确确认,绝不删除。
示例:
用户: /skill remove old-logger
助手: 在用户范围找到技能 'old-logger':
描述: 旧版日志记录工具
范围: 用户 (~/.claude/skills/omc-learned/)
删除 'old-logger' 技能? (是/否)
用户: 是
助手: ✓ 从用户范围删除技能 'old-logger'
/skill edit <名称>
交互式编辑现有技能。
行为:
- 通过名称查找技能(搜索两个范围)
- 读取当前内容,通过读取工具
- 显示当前值:
当前技能 'custom-logger': - 描述: 增强的日志记录,带结构化输出 - 触发词: log, logger, logging - 参数提示: <level> [message] - 范围: 用户 - 询问要更改的内容:
描述- 更新描述触发词- 更新触发关键词参数提示- 更新参数提示内容- 编辑完整Markdown内容重命名- 重命名技能(移动文件)取消- 退出不更改
- 对于选定字段:
- 显示当前值
- 询问新值
- 更新YAML frontmatter或内容
- 写回文件
- 报告成功,显示更改摘要
示例:
用户: /skill edit custom-logger
助手: 当前技能 'custom-logger':
- 描述: 增强的日志记录,带结构化输出
- 触发词: log, logger, logging
- 参数提示: <level> [message]
要编辑什么? (描述/触发词/参数提示/内容/重命名/取消)
用户: 触发词
助手: 当前触发词: log, logger, logging
新触发词 (逗号分隔): log, logger, logging, trace
✓ 更新 'custom-logger' 的触发词
/skill search <查询>
通过内容、触发词、名称或描述搜索技能。
行为:
- 扫描所有技能 在两个范围
- 匹配查询(不区分大小写)针对:
- 技能名称
- 描述
- 触发词
- 完整Markdown内容
- 显示匹配 带上下文:
找到 3 个技能匹配 “typescript error”:
1. typescript-fixer (用户)
描述: 修复常见TypeScript错误
匹配: “typescript error handling patterns”
2. error-handler (用户)
描述: 通用错误处理工具
匹配: “支持TypeScript和JavaScript错误”
3. lint-fix (项目)
描述: 自动修复linting错误
匹配: “TypeScript ESLint错误解决”
排序: 优先名称/触发词匹配,然后是内容匹配
示例:
用户: /skill search api endpoint
助手: 找到 2 个技能匹配 “api endpoint”:
1. api-builder (用户)
描述: 生成REST API端点
触发词: api, endpoint, rest
2. backend-scaffold (项目)
描述: 脚手架后端服务
匹配: “创建API端点样板代码”
/skill info <名称>
显示技能的详细信息。
行为:
- 通过名称查找技能(搜索两个范围)
- 解析YAML frontmatter 和内容
- 显示完整详情:
技能: custom-logger
范围: 用户 (~/.claude/skills/omc-learned/custom-logger/)
描述: 增强的日志记录,带结构化输出
触发词: log, logger, logging
参数提示: <level> [message]
质量: 95% (如可用)
使用次数: 42 次 (如可用)
文件路径: /home/user/.claude/skills/omc-learned/custom-logger/SKILL.md
--- 完整内容 ---
[完整Markdown内容]
如果未找到: 报告错误,建议使用 /skill search
示例:
用户: /skill info custom-logger
助手: 技能: custom-logger
范围: 用户
描述: 增强的日志记录,带结构化输出
触发词: log, logger, logging
文件: ~/.claude/skills/omc-learned/custom-logger/SKILL.md
--- 内容 ---
# Custom Logger 技能
## 目的
增强的日志记录,带结构化JSON输出...
[剩余内容]
/skill sync
在用户和项目范围之间同步技能。
行为:
- 扫描两个范围:
- 用户技能:
~/.claude/skills/omc-learned/ - 项目技能:
.omc/skills/
- 用户技能:
- 比较和分类:
- 仅用户技能(不在项目中)
- 仅项目技能(不在用户中)
- 公共技能(在两个中)
- 显示同步机会:
同步报告:
仅用户技能 (5):
- error-handler
- api-builder
- custom-logger
- test-generator
- deploy-helper
仅项目技能 (2):
- test-runner
- backend-scaffold
公共技能 (3):
- frontend-ui-ux
- git-master
- planner
选项:
[1] 复制用户技能到项目
[2] 复制项目技能到用户
[3] 查看差异
[4] 取消
- 处理用户选择:
- 选项 1: 选择要复制到项目的技能
- 选项 2: 选择要复制到用户的技能
- 选项 3: 显示公共技能的并排差异
- 选项 4: 退出
安全性: 未经确认,绝不覆盖
示例:
用户: /skill sync
助手: 找到 5 个仅用户技能和 2 个仅项目技能。
从用户复制 'error-handler' 到项目? (是/否/跳过)
用户: 是
助手: ✓ 复制 'error-handler' 到 .omc/skills/
从用户复制 'api-builder' 到项目? (是/否/跳过)
用户: 跳过
...
/skill setup
交互式向导,用于设置和管理本地技能(原local-skills-setup)。
行为:
步骤 1: 目录检查和设置
首先,检查技能目录是否存在,并在需要时创建:
# 检查并创建用户级技能目录
USER_SKILLS_DIR="$HOME/.claude/skills/omc-learned"
if [ -d "$USER_SKILLS_DIR" ]; then
echo "用户技能目录存在: $USER_SKILLS_DIR"
else
mkdir -p "$USER_SKILLS_DIR"
echo "创建用户技能目录: $USER_SKILLS_DIR"
fi
# 检查并创建项目级技能目录
PROJECT_SKILLS_DIR=".omc/skills"
if [ -d "$PROJECT_SKILLS_DIR" ]; then
echo "项目技能目录存在: $PROJECT_SKILLS_DIR"
else
mkdir -p "$PROJECT_SKILLS_DIR"
echo "创建项目技能目录: $PROJECT_SKILLS_DIR"
fi
步骤 2: 技能扫描和清单
扫描两个目录,显示全面清单:
# 扫描用户级技能
echo "=== 用户级技能 (~/.claude/skills/omc-learned/) ==="
if [ -d "$HOME/.claude/skills/omc-learned" ]; then
USER_COUNT=$(find "$HOME/.claude/skills/omc-learned" -name "*.md" 2>/dev/null | wc -l)
echo "总技能数: $USER_COUNT"
if [ $USER_COUNT -gt 0 ]; then
echo ""
echo "找到技能:"
find "$HOME/.claude/skills/omc-learned" -name "*.md" -type f -exec sh -c '
FILE="$1"
NAME=$(grep -m1 "^name:" "$FILE" 2>/dev/null | sed "s/name: //")
DESC=$(grep -m1 "^description:" "$FILE" 2>/dev/null | sed "s/description: //")
MODIFIED=$(stat -c "%y" "$FILE" 2>/dev/null || stat -f "%Sm" "$FILE" 2>/dev/null)
echo " - $NAME"
[ -n "$DESC" ] && echo " 描述: $DESC"
echo " 修改时间: $MODIFIED"
echo ""
' sh {} \;
fi
else
echo "目录未找到"
fi
echo ""
echo "=== 项目级技能 (.omc/skills/) ==="
if [ -d ".omc/skills" ]; then
PROJECT_COUNT=$(find ".omc/skills" -name "*.md" 2>/dev/null | wc -l)
echo "总技能数: $PROJECT_COUNT"
if [ $PROJECT_COUNT -gt 0 ]; then
echo ""
echo "找到技能:"
find ".omc/skills" -name "*.md" -type f -exec sh -c '
FILE="$1"
NAME=$(grep -m1 "^name:" "$FILE" 2>/dev/null | sed "s/name: //")
DESC=$(grep -m1 "^description:" "$FILE" 2>/dev/null | sed "s/description: //")
MODIFIED=$(stat -c "%y" "$FILE" 2>/dev/null || stat -f "%Sm" "$FILE" 2>/dev/null)
echo " - $NAME"
[ -n "$DESC" ] && echo " 描述: $DESC"
echo " 修改时间: $MODIFIED"
echo ""
' sh {} \;
fi
else
echo "目录未找到"
fi
# 摘要
TOTAL=$((USER_COUNT + PROJECT_COUNT))
echo "=== 摘要 ==="
echo "所有目录总技能数: $TOTAL"
步骤 3: 快速操作菜单
扫描后,使用AskUserQuestion工具提供以下选项:
问题: “您想对本地技能做什么?”
选项:
- 添加新技能 - 启动技能创建向导(调用
/skill add) - 列出所有技能详情 - 显示全面技能清单(调用
/skill list) - 扫描对话以寻找模式 - 分析当前对话,寻找值得提取为技能的模式
- 导入技能 - 从URL或粘贴内容导入技能
- 完成 - 退出向导
选项 3: 扫描对话以寻找模式
分析当前对话上下文,识别潜在的技能模式。寻找:
- 带有非明显解决方案的最近调试会话
- 需要调查的棘手错误
- 发现的代码库特定工作区
- 花费时间解决的错误模式
报告发现,并询问用户是否要提取为技能(如果是,调用 /learner)。
选项 4: 导入技能
要求用户提供:
- URL:从URL下载技能(例如,GitHub gist)
- 粘贴内容:直接粘贴技能Markdown内容
然后询问范围:
- 用户级 (~/.claude/skills/omc-learned/) - 跨所有项目可用
- 项目级 (.omc/skills/) - 仅限此项目
验证技能格式并保存到选定位置。
/skill scan
快速命令,扫描两个技能目录(/skill setup 的子集)。
行为:
运行 /skill setup 的步骤 2,无需交互式向导。
技能模板
通过 /skill add 或 /skill setup 创建技能时,为常见技能类型提供快速模板:
错误解决方案模板
---
id: error-[unique-id]
name: [错误名称]
description: [特定上下文中的特定错误解决方案]
source: conversation
triggers: ["错误消息片段", "文件路径", "症状"]
quality: high
---
# [错误名称]
## 洞察
这个错误的根本原因是什么?您发现了什么原则?
## 为什么重要
如果您不知道这一点,会出什么问题?什么症状导致这里?
## 识别模式
何时适用此方案?有哪些迹象?
- 错误消息: "[确切错误]"
- 文件: [特定文件路径]
- 上下文: [何时发生]
## 方法
逐步解决方案:
1. [带文件/行引用的具体操作]
2. [带文件/行引用的具体操作]
3. [验证步骤]
## 示例
\`\`\`typescript
// 之前 (损坏)
[问题代码]
// 之后 (修复)
[更正代码]
\`\`\`
工作流程技能模板
---
id: workflow-[unique-id]
name: [工作流程名称]
description: [此代码库中特定任务的流程]
source: conversation
triggers: ["任务描述", "文件模式", "目标关键词"]
quality: high
---
# [工作流程名称]
## 洞察
这个工作流程与明显方法有何不同?
## 为什么重要
如果不遵循此流程,会失败什么?
## 识别模式
何时应使用此工作流程?
- 任务类型: [特定任务]
- 涉及文件: [特定模式]
- 指标: [如何识别]
## 方法
1. [带特定命令/文件的步骤]
2. [带特定命令/文件的步骤]
3. [验证]
## 注意事项
- [常见错误及如何避免]
- [边缘情况及如何处理]
代码模式模板
---
id: pattern-[unique-id]
name: [模式名称]
description: [此代码库中特定用例的模式]
source: conversation
triggers: ["代码模式", "文件类型", "问题领域"]
quality: high
---
# [模式名称]
## 洞察
此模式背后的关键原则是什么?
## 为什么重要
此模式在此代码库中解决什么问题?
## 识别模式
何时应用此模式?
- 文件类型: [特定文件]
- 问题: [特定问题]
- 上下文: [代码库特定上下文]
## 方法
决策启发式,不仅仅是代码:
1. [基于原则的步骤]
2. [基于原则的步骤]
## 示例
\`\`\`typescript
[说明原则的示例]
\`\`\`
## 反模式
不应做什么及为什么:
\`\`\`typescript
[要避免的常见错误]
\`\`\`
集成技能模板
---
id: integration-[unique-id]
name: [集成名称]
description: [系统 A] 如何在此代码库中与 [系统 B] 集成
source: conversation
triggers: ["系统名称", "集成点", "配置文件"]
quality: high
---
# [集成名称]
## 洞察
这些系统连接的非显而易见之处是什么?
## 为什么重要
如果不理解此集成,会破坏什么?
## 识别模式
何时处理此集成?
- 文件: [特定集成文件]
- 配置: [特定配置位置]
- 症状: [什么表明集成问题]
## 方法
如何正确处理此集成:
1. [带文件路径的配置步骤]
2. [带具体细节的设置步骤]
3. [验证步骤]
## 注意事项
- [集成特定陷阱 #1]
- [集成特定陷阱 #2]
错误处理
所有命令必须处理:
- 文件/目录不存在
- 权限错误
- 无效YAML frontmatter
- 重复技能名称
- 无效技能名称(空格、特殊字符)
错误格式:
✗ 错误: <清晰消息>
→ 建议: <有帮助的下一步>
使用示例
# 列出所有技能
/skill list
# 创建新技能
/skill add my-custom-skill
# 删除技能
/skill remove old-skill
# 编辑现有技能
/skill edit error-handler
# 搜索技能
/skill search typescript error
# 获取详细信息
/skill info my-custom-skill
# 在范围间同步
/skill sync
# 运行设置向导
/skill setup
# 快速扫描
/skill scan
使用模式
直接命令模式
带参数调用时,跳过交互式向导:
/oh-my-claudecode:skill list- 显示详细技能清单/oh-my-claudecode:skill add- 启动技能创建(调用learner)/oh-my-claudecode:skill scan- 扫描两个技能目录
交互式模式
无参数调用时,运行完整引导向导。
本地技能的好处
自动应用:Claude检测触发词并自动应用技能 - 无需记住或搜索解决方案。
版本控制:项目级技能 (.omc/skills/) 随代码提交,整个团队受益。
不断演进的知识:随着您发现更好方法和优化触发词,技能随时间改进。
减少令牌使用:Claude应用已知模式,而不是重新解决相同问题,提高效率。
代码库记忆:保存在对话历史中可能丢失的制度知识。
技能质量指南
好的技能是:
-
不可谷歌搜索 - 无法通过搜索轻易找到
- 差:“如何在TypeScript中读取文件”
- 好:“此代码库使用自定义路径解析,需要fileURLToPath”
-
上下文特定 - 引用此代码库的实际文件/错误
- 差:“使用try/catch进行错误处理”
- 好:“server.py:42 中的aiohttp代理在ClientDisconnectedError上崩溃”
-
可操作且精确 - 准确告诉做什么和在哪里做
- 差:“处理边缘情况”
- 好:“在dist/中看到’找不到模块’时,检查tsconfig.json中的moduleResolution”
-
来之不易 - 需要显著调试努力
- 差:通用编程模式
- 好:“worker.ts 中的竞态条件 - 第89行的Promise.all需要await”
相关技能
/oh-my-claudecode:learner- 从当前对话提取技能/oh-my-claudecode:note- 保存快速笔记(不如技能正式)/oh-my-claudecode:deepinit- 生成AGENTS.md代码库层次结构
示例会话
> /oh-my-claudecode:skill list
检查技能目录...
✓ 用户技能目录存在: ~/.claude/skills/omc-learned/
✓ 项目技能目录存在: .omc/skills/
扫描技能中...
=== 用户级技能 ===
总技能数: 3
- async-network-error-handling
描述: 处理异步网络代码中独立I/O故障的模式
修改时间: 2026-01-20 14:32:15
- esm-path-resolution
描述: ESM中需要fileURLToPath的自定义路径解析
修改时间: 2026-01-19 09:15:42
=== 项目级技能 ===
总技能数: 5
- session-timeout-fix
描述: 修复session.ts中重启后sessionId未定义的方案
修改时间: 2026-01-22 16:45:23
- build-cache-invalidation
描述: 何时清除TypeScript构建缓存以修复幻影错误
修改时间: 2026-01-21 11:28:37
=== 摘要 ===
总技能数: 8
您想做什么?
1. 添加新技能
2. 列出所有技能详情
3. 扫描对话以寻找模式
4. 导入技能
5. 完成
用户提示
- 定期运行
/oh-my-claudecode:skill list以检查技能库 - 解决棘手错误后,立即运行learner以捕获它
- 使用项目级技能处理代码库特定知识
- 使用用户级技能处理各处适用的通用模式
- 随时间审查和优化触发词以提高匹配准确性
实现注意事项
- YAML解析: 使用frontmatter提取元数据
- 文件操作: 使用读取/写入工具,新文件绝不编辑
- 用户确认: 总是确认破坏性操作
- 清晰反馈: 使用勾号(✓)、叉号(✗)、箭头(→)以提高清晰度
- 范围解析: 总是检查用户和项目范围
- 验证: 强制执行命名约定(仅小写、连字符)
相关技能
/oh-my-claudecode:learner- 从当前对话提取技能/oh-my-claudecode:note- 保存快速笔记(不如技能正式)/oh-my-claudecode:deepinit- 生成AGENTS.md代码库层次结构
未来增强
/skill export <名称>- 将技能导出为可共享文件/skill import <文件>- 从文件导入技能/skill stats- 显示所有技能的使用统计/skill validate- 检查所有技能的格式错误/skill template <类型>- 从预定义模板创建