技能管理CLISkill skill

这是一个命令行界面工具,用于管理本地oh-my-claudecode技能,支持技能的列表展示、添加、删除、搜索、编辑、同步和设置操作。它自动化技能管理流程,提高开发效率,适用于代码助手和AI辅助开发环境。关键词:技能管理,CLI工具,oh-my-claudecode,自动化开发,代码助手,DevOps,软件工具。

DevOps 0 次安装 0 次浏览 更新于 3/11/2026

名称: skill 描述: 管理本地技能 - 列表、添加、删除、搜索、编辑、设置向导 参数提示: “<command> [args]”

技能管理CLI

用于通过CLI类似命令管理oh-my-claudecode技能的元技能。

子命令

/skill list

显示所有本地技能,按范围组织。

行为:

  1. 扫描用户技能在 ~/.claude/skills/omc-learned/
  2. 扫描项目技能在 .omc/skills/
  3. 解析YAML frontmatter获取元数据
  4. 以组织好的表格格式显示:
用户技能 (~/.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 [名称]

创建新技能的交互式向导。

行为:

  1. 询问技能名称(如果命令中未提供)
    • 验证:仅小写、连字符、无空格
  2. 询问描述
    • 清晰简洁的一行描述
  3. 询问触发词(逗号分隔的关键词)
    • 示例:“error, fix, debug”
  4. 询问参数提示(可选)
    • 示例:“<file> [options]”
  5. 询问范围:
    • 用户~/.claude/skills/omc-learned/<名称>/SKILL.md
    • 项目.omc/skills/<名称>/SKILL.md
  6. 创建技能文件,使用模板:
---
名称: <名称>
描述: <描述>
触发词:
  - <触发词1>
  - <触发词2>
参数提示: "<参数>"
---

# <名称> 技能

## 目的

[描述此技能的功能]

## 何时激活

[描述触发条件和情形]

## 工作流程

1. [步骤1]
2. [步骤2]
3. [步骤3]

## 示例

/oh-my-claudecode:<名称> 示例参数


## 备注

[额外上下文、边缘情况、注意事项]
  1. 报告成功,显示文件路径
  2. 建议: “使用 /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 <名称>

通过名称删除技能。

行为:

  1. 搜索技能 在两个范围:
    • ~/.claude/skills/omc-learned/<名称>/SKILL.md
    • .omc/skills/<名称>/SKILL.md
  2. 如果找到:
    • 显示技能信息(名称、描述、范围)
    • 请求确认: “从 <范围> 删除 ‘<名称>’ 技能? (是/否)”
  3. 如果确认:
    • 删除整个技能目录(例如,~/.claude/skills/omc-learned/<名称>/
    • 报告:“✓ 从 <范围> 删除技能 ‘<名称>’”
  4. 如果未找到:
    • 报告:“✗ 在用户或项目范围未找到技能 ‘<名称>’”

安全性: 未经用户明确确认,绝不删除。

示例:

用户: /skill remove old-logger
助手: 在用户范围找到技能 'old-logger':
  描述: 旧版日志记录工具
  范围: 用户 (~/.claude/skills/omc-learned/)

删除 'old-logger' 技能? (是/否)

用户: 是
助手: ✓ 从用户范围删除技能 'old-logger'

/skill edit <名称>

交互式编辑现有技能。

行为:

  1. 通过名称查找技能(搜索两个范围)
  2. 读取当前内容,通过读取工具
  3. 显示当前值:
    当前技能 'custom-logger':
    - 描述: 增强的日志记录,带结构化输出
    - 触发词: log, logger, logging
    - 参数提示: <level> [message]
    - 范围: 用户
    
  4. 询问要更改的内容:
    • 描述 - 更新描述
    • 触发词 - 更新触发关键词
    • 参数提示 - 更新参数提示
    • 内容 - 编辑完整Markdown内容
    • 重命名 - 重命名技能(移动文件)
    • 取消 - 退出不更改
  5. 对于选定字段:
    • 显示当前值
    • 询问新值
    • 更新YAML frontmatter或内容
    • 写回文件
  6. 报告成功,显示更改摘要

示例:

用户: /skill edit custom-logger
助手: 当前技能 'custom-logger':
  - 描述: 增强的日志记录,带结构化输出
  - 触发词: log, logger, logging
  - 参数提示: <level> [message]

要编辑什么? (描述/触发词/参数提示/内容/重命名/取消)

用户: 触发词
助手: 当前触发词: log, logger, logging
新触发词 (逗号分隔): log, logger, logging, trace

✓ 更新 'custom-logger' 的触发词

/skill search <查询>

通过内容、触发词、名称或描述搜索技能。

行为:

  1. 扫描所有技能 在两个范围
  2. 匹配查询(不区分大小写)针对:
    • 技能名称
    • 描述
    • 触发词
    • 完整Markdown内容
  3. 显示匹配 带上下文:
找到 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 <名称>

显示技能的详细信息。

行为:

  1. 通过名称查找技能(搜索两个范围)
  2. 解析YAML frontmatter 和内容
  3. 显示完整详情:
技能: 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

在用户和项目范围之间同步技能。

行为:

  1. 扫描两个范围:
    • 用户技能: ~/.claude/skills/omc-learned/
    • 项目技能: .omc/skills/
  2. 比较和分类:
    • 仅用户技能(不在项目中)
    • 仅项目技能(不在用户中)
    • 公共技能(在两个中)
  3. 显示同步机会:
同步报告:

仅用户技能 (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. 处理用户选择:
    • 选项 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工具提供以下选项:

问题: “您想对本地技能做什么?”

选项:

  1. 添加新技能 - 启动技能创建向导(调用 /skill add
  2. 列出所有技能详情 - 显示全面技能清单(调用 /skill list
  3. 扫描对话以寻找模式 - 分析当前对话,寻找值得提取为技能的模式
  4. 导入技能 - 从URL或粘贴内容导入技能
  5. 完成 - 退出向导

选项 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应用已知模式,而不是重新解决相同问题,提高效率。

代码库记忆:保存在对话历史中可能丢失的制度知识。


技能质量指南

好的技能是:

  1. 不可谷歌搜索 - 无法通过搜索轻易找到

    • 差:“如何在TypeScript中读取文件”
    • 好:“此代码库使用自定义路径解析,需要fileURLToPath”
  2. 上下文特定 - 引用此代码库的实际文件/错误

    • 差:“使用try/catch进行错误处理”
    • 好:“server.py:42 中的aiohttp代理在ClientDisconnectedError上崩溃”
  3. 可操作且精确 - 准确告诉做什么和在哪里做

    • 差:“处理边缘情况”
    • 好:“在dist/中看到’找不到模块’时,检查tsconfig.json中的moduleResolution”
  4. 来之不易 - 需要显著调试努力

    • 差:通用编程模式
    • 好:“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以捕获它
  • 使用项目级技能处理代码库特定知识
  • 使用用户级技能处理各处适用的通用模式
  • 随时间审查和优化触发词以提高匹配准确性

实现注意事项

  1. YAML解析: 使用frontmatter提取元数据
  2. 文件操作: 使用读取/写入工具,新文件绝不编辑
  3. 用户确认: 总是确认破坏性操作
  4. 清晰反馈: 使用勾号(✓)、叉号(✗)、箭头(→)以提高清晰度
  5. 范围解析: 总是检查用户和项目范围
  6. 验证: 强制执行命名约定(仅小写、连字符)

相关技能

  • /oh-my-claudecode:learner - 从当前对话提取技能
  • /oh-my-claudecode:note - 保存快速笔记(不如技能正式)
  • /oh-my-claudecode:deepinit - 生成AGENTS.md代码库层次结构

未来增强

  • /skill export <名称> - 将技能导出为可共享文件
  • /skill import <文件> - 从文件导入技能
  • /skill stats - 显示所有技能的使用统计
  • /skill validate - 检查所有技能的格式错误
  • /skill template <类型> - 从预定义模板创建