스킬 관리 CLI
oh-my-claudecode 스킬을 CLI와 유사한 명령어로 관리하기 위한 메타 스킬입니다.
하위 명령어
/skill list
모든 사용 가능한 스킬을 범위별로 정리하여 표시합니다.
동작:
- 플러그인
skills/디렉토리에 번들된 내장 스킬 스캔 (읽기 전용) ${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/에서 사용자 스킬 스캔.omc/skills/에서 프로젝트 스킬 스캔- YAML 머리말을 파싱하여 메타데이터 추출
- 정리된 테이블 형식으로 표시:
내장 스킬 (oh-my-claudecode와 함께 번들됨):
| 이름 | 설명 | 범위 |
|-------------------|------------------------|----------|
| visual-verdict | 구조화된 시각적 QA 판정 | 내장 |
| ralph | 지속성 루프 | 내장 |
사용자 스킬 (~/.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"로 표시
내장 스킬 참고: 내장 스킬은 oh-my-claudecode에 번들되어 있으며 검색/읽기는 가능하지만 /skill remove나 /skill edit을 통해 제거하거나 편집할 수 없습니다.
/skill add [이름]
새 스킬을 생성하기 위한 대화형 마법사입니다.
동작:
- 스킬 이름 요청 (명령어에 제공되지 않은 경우)
- 유효성 검사: 소문자, 하이픈만 허용, 공백 없음
- 설명 요청
- 명확하고 간결한 한 줄
- 트리거 요청 (쉼표로 구분된 키워드)
- 예시: "error, fix, debug"
- 인수 힌트 요청 (선택 사항)
- 예시: " [options]"
- 범위 요청:
user→${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/<이름>/SKILL.mdproject→.omc/skills/<이름>/SKILL.md
- 템플릿으로 스킬 파일 생성:
---
name: <이름>
description: <설명>
triggers:
- <트리거1>
- <트리거2>
argument-hint: "<인수>"
---
# <이름> 스킬
## 목적
[이 스킬이 수행하는 작업을 설명]
## 활성화 시점
[트리거 및 조건을 설명]
## 워크플로우
1. [단계 1]
2. [단계 2]
3. [단계 3]
## 예시
/oh-my-claudecode:<이름> 예시-인수
## 참고 사항
[추가 컨텍스트, 엣지 케이스, 주의사항]
- 성공 보고 및 파일 경로 표시
- 제안: "
/skill edit <이름>으로 내용을 사용자 정의하세요"
예시:
사용자: /skill add custom-logger
어시스턴트: 'custom-logger' 스킬 생성 중...
설명: 구조화된 출력과 향상된 로깅
트리거 (쉼표로 구분): log, logger, logging
인수 힌트 (선택 사항): <level> [message]
범위 (user/project): user
✓ ~/.claude/skills/omc-learned/custom-logger/SKILL.md에 스킬이 생성되었습니다.
→ 편집: /skill edit custom-logger
/skill remove <이름>
이름으로 스킬을 제거합니다.
동작:
- 두 범위에서 스킬 검색:
${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/<이름>/SKILL.md.omc/skills/<이름>/SKILL.md
- 발견된 경우:
- 스킬 정보 표시 (이름, 설명, 범위)
- 확인 요청: "'<이름>' 스킬을 <범위>에서 삭제하시겠습니까? (yes/no)"
- 확인된 경우:
- 전체 스킬 디렉토리 삭제 (예:
${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/<이름>/) - 보고: "✓ '<이름>' 스킬이 <범위>에서 제거되었습니다."
- 전체 스킬 디렉토리 삭제 (예:
- 발견되지 않은 경우:
- 보고: "✗ '<이름>' 스킬이 사용자 또는 프로젝트 범위에서 발견되지 않았습니다."
안전: 명시적인 사용자 확인 없이 삭제하지 않음.
예시:
사용자: /skill remove old-logger
어시스턴트: 사용자 범위에서 'old-logger' 스킬을 찾았습니다:
설명: 레거시 로깅 유틸리티
범위: user (~/.claude/skills/omc-learned/)
'old-logger' 스킬을 삭제하시겠습니까? (yes/no)
사용자: yes
어시스턴트: ✓ 'old-logger' 스킬이 사용자 범위에서 제거되었습니다.
/skill edit <이름>
기존 스킬을 대화형으로 편집합니다.
동작:
- 이름으로 스킬 찾기 (두 범위 검색)
- Read 도구로 현재 내용 읽기
- 현재 값 표시:
현재 스킬 'custom-logger': - 설명: 구조화된 출력과 향상된 로깅 - 트리거: log, logger, logging - 인수 힌트: <level> [message] - 범위: user - 변경할 항목 질문:
description- 설명 업데이트triggers- 트리거 키워드 업데이트argument-hint- 인수 힌트 업데이트content- 전체 마크다운 내용 편집rename- 스킬 이름 변경 (파일 이동)cancel- 변경 없이 종료
- 선택한 필드에 대해:
- 현재 값 표시
- 새 값 요청
- YAML 머리말 또는 내용 업데이트
- 파일에 저장
- 변경 사항 요약과 함께 성공 보고
예시:
사용자: /skill edit custom-logger
어시스턴트: 현재 스킬 'custom-logger':
- 설명: 구조화된 출력과 향상된 로깅
- 트리거: log, logger, logging
- 인수 힌트: <level> [message]
무엇을 편집하시겠습니까? (description/triggers/argument-hint/content/rename/cancel)
사용자: triggers
어시스턴트: 현재 트리거: log, logger, logging
새 트리거 (쉼표로 구분): log, logger, logging, trace
✓ 'custom-logger'의 트리거가 업데이트되었습니다.
/skill search <검색어>
내용, 트리거, 이름 또는 설명으로 스킬을 검색합니다.
동작:
- 두 범위의 모든 스킬 스캔
- 검색어 일치 (대소문자 구분 없음) 대상:
- 스킬 이름
- 설명
- 트리거
- 전체 마크다운 내용
- 일치 결과를 컨텍스트와 함께 표시:
"typescript error"와 일치하는 스킬 3개 찾음:
1. typescript-fixer (user)
설명: 일반적인 TypeScript 오류 수정
일치: "typescript error handling patterns"
2. error-handler (user)
설명: 일반 오류 처리 유틸리티
일치: "Supports TypeScript and JavaScript errors"
3. lint-fix (project)
설명: 린팅 오류 자동 수정
일치: "TypeScript ESLint error resolution"
순위: 이름/트리거 일치를 내용 일치보다 우선시
예시:
사용자: /skill search api endpoint
어시스턴트: "api endpoint"와 일치하는 스킬 2개 찾음:
1. api-builder (user)
설명: REST API 엔드포인트 생성
트리거: api, endpoint, rest
2. backend-scaffold (project)
설명: 백엔드 서비스 스캐폴딩
일치: "Creates API endpoint boilerplate"
/skill info <이름>
스킬에 대한 상세 정보를 표시합니다.
동작:
- 이름으로 스킬 찾기 (두 범위 검색)
- YAML 머리말과 내용 파싱
- 전체 상세 정보 표시:
스킬: custom-logger
범위: user (~/.claude/skills/omc-learned/custom-logger/)
설명: 구조화된 출력과 향상된 로깅
트리거: log, logger, logging
인수 힌트: <level> [message]
품질: 95% (가능한 경우)
사용 횟수: 42회 (가능한 경우)
파일 경로: /home/user/.claude/skills/omc-learned/custom-logger/SKILL.md
--- 전체 내용 ---
[전체 마크다운 내용]
발견되지 않은 경우: /skill search 사용을 제안하며 오류 보고
예시:
사용자: /skill info custom-logger
어시스턴트: 스킬: custom-logger
범위: user
설명: 구조화된 출력과 향상된 로깅
트리거: log, logger, logging
파일: ~/.claude/skills/omc-learned/custom-logger/SKILL.md
--- 내용 ---
# Custom Logger Skill
## 목적
구조화된 JSON 출력으로 향상된 로깅...
[나머지 내용]
/skill sync
사용자와 프로젝트 범위 간 스킬을 동기화합니다.
동작:
- 두 범위 스캔:
- 사용자 스킬:
${CLAUDE_CONFIG_DIR:-~/.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'를 사용자에서 프로젝트로 복사하시겠습니까? (yes/no/skip)
사용자: yes
어시스턴트: ✓ 'error-handler'가 .omc/skills/로 복사되었습니다.
'api-builder'를 사용자에서 프로젝트로 복사하시겠습니까? (yes/no/skip)
사용자: skip
...
/skill setup
로컬 스킬을 설정하고 관리하기 위한 대화형 마법사 (이전 local-skills-setup).
동작:
단계 1: 디렉토리 확인 및 설정
먼저, 스킬 디렉토리가 존재하는지 확인하고 필요한 경우 생성합니다:
# 사용자 수준 스킬 디렉토리 확인 및 생성
USER_SKILLS_DIR="${CLAUDE_CONFIG_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 "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/skills/omc-learned" ]; then
USER_COUNT=$(find "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/skills/omc-learned" -name "*.md" 2>/dev/null | wc -l)
echo "총 스킬 수: $USER_COUNT"
if [ $USER_COUNT -gt 0 ]; then
echo ""
echo "발견된 스킬:"
find "${CLAUDE_CONFIG_DIR:-$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: 패턴 스캔을 위한 대화 분석
현재 대화 컨텍스트를 분석하여 스킬로 만들 가치가 있는 잠재적 패턴을 식별합니다. 다음을 찾습니다:
- 명확하지 않은 솔루션이 포함된 최근 디버깅 세션
- 조사가 필요했던 까다로운 버그
- 발견된 코드베이스별 해결 방법
- 해결하는 데 시간이 걸린 오류 패턴
결과를 보고하고 사용자가 스킬로 추출하려는지 물어봅니다 (/skillify 호출; /learner는 더 이상 사용되지 않는 호환성용).
옵션 4: 스킬 가져오기
사용자에게 다음 중 하나를 제공하도록 요청합니다:
- URL: URL에서 스킬 다운로드 (예: GitHub gist)
- 내용 붙여넣기: 스킬 마크다운 내용 직접 붙여넣기
그런 다음 범위를 묻습니다:
- 사용자 수준 (~/.claude/skills/omc-learned/) - 모든 프로젝트에서 사용 가능
- 프로젝트 수준 (.omc/skills/) - 이 프로젝트에만 해당
스킬 형식의 유효성을 검사하고 선택한 위치에 저장합니다.
/skill scan
두 스킬 디렉토리를 빠르게 스캔하는 명령어 (/skill setup의 단계 2의 하위 집합).
동작:
대화형 마법사 없이 /skill setup의 단계 2에서 스캔을 실행합니다.
스킬 템플릿
/skill add 또는 /skill setup을 통해 스킬을 생성할 때 일반적인 스킬 유형에 대한 빠른 템플릿을 제공합니다:
오류 해결 템플릿
---
id: error-[고유-id]
name: [오류 이름]
description: [특정 컨텍스트의 특정 오류에 대한 해결 방법]
source: conversation
triggers: ["오류 메시지 조각", "파일 경로", "증상"]
quality: high
---
# [오류 이름]
## 통찰
이 오류의 근본 원인은 무엇입니까? 어떤 원리를 발견했습니까?
## 중요한 이유
이것을 모르면 어떻게 됩니까? 어떤 증상이 여기로 이끌었습니까?
## 인식 패턴
이것이 적용되는 시점을 어떻게 알 수 있습니까? 징후는 무엇입니까?
- 오류 메시지: "[정확한 오류]"
- 파일: [특정 파일 경로]
- 컨텍스트: [언제 발생하는지]
## 해결 방법
[나머지 내용]
워크플로우 템플릿
---
id: workflow-[고유-id]
name: [워크플로우 이름]
description: [반복적인 작업 또는 프로세스]
source: conversation
triggers: ["작업 키워드", "도메인 용어"]
quality: medium
---
# [워크플로우 이름]
## 목적
[워크플로우가 수행하는 작업]
## 단계
1. [단계 1]
2. [단계 2]
3. [단계 3]
## 입력
[필요한 것]
## 출력
[생성되는 것]
구성 템플릿
---
id: config-[고유-id]
name: [구성 이름]
description: [도구 또는 프레임워크에 대한 구성 설정]
source: conversation
triggers: ["setup", "구성", "설정", "프레임워크 이름"]
quality: medium
---
# [구성 이름]
## 목적
[이 구성이 수행하는 작업]
## 설정
[구성 방법]
## 확인
[올바르게 작동하는지 확인하는 방법]