CLI de Gerenciamento de Habilidades
Meta-skill para gerenciar habilidades do oh-my-claudecode via comandos estilo CLI.
Subcomandos
/skill list
Mostra todas as habilidades disponíveis organizadas por escopo.
Comportamento:
- Escaneia habilidades built-in agrupadas no diretório
skills/do plugin (somente leitura) - Escaneia habilidades do usuário em
${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/ - Escaneia habilidades do projeto em
.omc/skills/ - Analisa o frontmatter YAML para metadados
- Exibe em formato de tabela organizada:
HABILIDADES BUILT-IN (agrupadas com oh-my-claudecode):
| Nome | Descrição | Escopo |
|------------------|--------------------------------|-----------|
| visual-verdict | Verdictos visuais QA estruturados | built-in |
| ralph | Loop de persistência | built-in |
HABILIDADES DO USUÁRIO (~/.claude/skills/omc-learned/):
| Nome | Gatilhos | Qualidade | Uso | Escopo |
|-----------------|-------------------|-----------|-----|--------|
| error-handler | fix, error | 95% | 42 | usuário|
| api-builder | api, endpoint | 88% | 23 | usuário|
HABILIDADES DO PROJETO (.omc/skills/):
| Nome | Gatilhos | Qualidade | Uso | Escopo |
|-----------------|-------------------|-----------|-----|----------|
| test-runner | test, run | 92% | 15 | projeto |
Fallback: Se estatísticas de qualidade/uso não estiverem disponíveis, mostrar "N/A"
Nota sobre habilidades built-in: Habilidades built-in são agrupadas com oh-my-claudecode e são descobertas/legíveis, mas não podem ser removidas ou editadas através de /skill remove ou /skill edit.
/skill add [nome]
Assistente interativo para criar uma nova habilidade.
Comportamento:
- Perguntar pelo nome da habilidade (se não fornecido no comando)
- Validar: minúsculas, apenas hífens, sem espaços
- Perguntar pela descrição
- Frase clara e concisa
- Perguntar pelos gatilhos (palavras-chave separadas por vírgula)
- Exemplo: "error, fix, debug"
- Perguntar pela dica de argumento (opcional)
- Exemplo: " [options]"
- Perguntar pelo escopo:
user→${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/<nome>/SKILL.mdproject→.omc/skills/<nome>/SKILL.md
- Criar arquivo de habilidade com modelo:
---
nome: <nome>
descrição: <descrição>
gatilhos:
- <gatilho1>
- <gatilho2>
dica-de-argumento: "<args>"
---
# Habilidade <Nome>
## Propósito
[Descreva o que esta habilidade faz]
## Quando Ativar
[Descreva gatilhos e condições]
## Fluxo de Trabalho
1. [Passo 1]
2. [Passo 2]
3. [Passo 3]
## Exemplos
/oh-my-claudecode: exemplo-arg
## Notas
[Contexto adicional, casos extremos, pegadinhas]
- Reportar sucesso com o caminho do arquivo
- Sugerir: "Edite
/skill edit <nome>para personalizar conteúdo"
Exemplo:
Usuário: /skill add custom-logger
Assistente: Criando nova habilidade 'custom-logger'...
Descrição: Log aprimorado com saída estruturada
Gatilhos (separados por vírgula): log, logger, logging
Dica de argumento (opcional): <level> [message]
Escopo (usuário/projeto): user
✓ Habilidade criada em ~/.claude/skills/omc-learned/custom-logger/SKILL.md
→ Edite com: /skill edit custom-logger
/skill remove
Remove uma habilidade pelo nome.
Comportamento:
- Procurar pela habilidade em ambos os escopos:
${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/<nome>/SKILL.md.omc/skills/<nome>/SKILL.md
- Se encontrada:
- Exibir informações da habilidade (nome, descrição, escopo)
- Perguntar por confirmação: "Excluir habilidade '' do escopo ? (sim/não)"
- Se confirmado:
- Excluir diretório inteiro da habilidade (ex.:
${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/<nome>/) - Reportar: "✓ Habilidade '' removida do escopo "
- Excluir diretório inteiro da habilidade (ex.:
- Se não encontrada:
- Reportar: "✗ Habilidade '' não encontrada no escopo do usuário ou projeto"
Segurança: Nunca excluir sem confirmação explícita do usuário.
Exemplo:
Usuário: /skill remove old-logger
Assistente: Habilidade 'old-logger' encontrada no escopo do usuário:
Descrição: Utilitário de log legado
Escopo: usuário (~/.claude/skills/omc-learned/)
Excluir habilidade 'old-logger'? (sim/não)
Usuário: sim
Assistente: ✓ Habilidade 'old-logger' removida do escopo do usuário
/skill edit
Editar uma habilidade existente interativamente.
Comportamento:
- Encontrar habilidade pelo nome (procurar em ambos os escopos)
- Ler conteúdo atual via ferramenta de Leitura
- Exibir valores atuais:
Habilidade atual 'custom-logger': - Descrição: Log aprimorado com saída estruturada - Gatilhos: log, logger, logging - Dica de argumento: <level> [message] - Escopo: usuário - Perguntar o que alterar:
descrição- Atualizar descriçãogatilhos- Atualizar palavras-chave de gatilhodica-de-argumento- Atualizar dica de argumentoconteúdo- Editar conteúdo markdown completorenomear- Renomear habilidade (mover arquivo)cancelar- Sair sem alterações
- Para campo selecionado:
- Mostrar valor atual
- Perguntar por novo valor
- Atualizar frontmatter YAML ou conteúdo
- Escrever de volta no arquivo
- Reportar sucesso com resumo das alterações
Exemplo:
Usuário: /skill edit custom-logger
Assistente: Habilidade atual 'custom-logger':
- Descrição: Log aprimorado com saída estruturada
- Gatilhos: log, logger, logging
- Dica de argumento: <level> [message]
O que você gostaria de editar? (descrição/gatilhos/dica-de-argumento/conteúdo/renomear/cancelar)
Usuário: gatilhos
Assistente: Gatilhos atuais: log, logger, logging
Novos gatilhos (separados por vírgula): log, logger, logging, trace
✓ Gatilhos atualizados para 'custom-logger'
/skill search
Pesquisar habilidades por conteúdo, gatilhos, nome ou descrição.
Comportamento:
- Escaneia todas as habilidades em ambos os escopos
- Corresponder consulta (sem distinção de maiúsculas/minúsculas) contra:
- Nome da habilidade
- Descrição
- Gatilhos
- Conteúdo markdown completo
- Exibir correspondências com contexto:
Encontradas 3 habilidades correspondendo a "typescript error":
1. typescript-fixer (usuário)
Descrição: Corrigir erros TypeScript comuns
Correspondência: "padrões de tratamento de erro typescript"
2. error-handler (usuário)
Descrição: Utilitários genéricos de tratamento de erro
Correspondência: "Suporta erros TypeScript e JavaScript"
3. lint-fix (projeto)
Descrição: Corrigir automaticamente erros de lint
Correspondência: "Resolução de erro ESLint TypeScript"
Classificação: Priorizar correspondências em nome/gatilhos sobre correspondências em conteúdo
Exemplo:
Usuário: /skill search api endpoint
Assistente: Encontradas 2 habilidades correspondendo a "api endpoint":
1. api-builder (usuário)
Descrição: Gerar endpoints de API REST
Gatilhos: api, endpoint, rest
2. backend-scaffold (projeto)
Descrição: Estruturar serviços backend
Correspondência: "Cria boilerplate de endpoint de API"
/skill info
Mostrar informações detalhadas sobre uma habilidade.
Comportamento:
- Encontrar habilidade pelo nome (procurar em ambos os escopos)
- Analisar frontmatter YAML e conteúdo
- Exibir detalhes completos:
Habilidade: custom-logger
Escopo: usuário (~/.claude/skills/omc-learned/custom-logger/)
Descrição: Log aprimorado com saída estruturada
Gatilhos: log, logger, logging
Dica de Argumento: <level> [message]
Qualidade: 95% (se disponível)
Contagem de Uso: 42 vezes (se disponível)
Caminho do Arquivo: /home/user/.claude/skills/omc-learned/custom-logger/SKILL.md
--- CONTEÚDO COMPLETO ---
[conteúdo markdown inteiro]
Se não encontrada: Reportar erro com sugestão de usar /skill search
Exemplo:
Usuário: /skill info custom-logger
Assistente: Habilidade: custom-logger
Escopo: usuário
Descrição: Log aprimorado com saída estruturada
Gatilhos: log, logger, logging
Arquivo: ~/.claude/skills/omc-learned/custom-logger/SKILL.md
--- CONTEÚDO ---
# Habilidade Custom Logger
## Propósito
Log aprimorado com saída JSON estruturada...
[restante do conteúdo]
/skill sync
Sincronizar habilidades entre escopos de usuário e projeto.
Comportamento:
- Escaneia ambos os escopos:
- Habilidades do usuário:
${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/ - Habilidades do projeto:
.omc/skills/
- Habilidades do usuário:
- Comparar e categorizar:
- Habilidades apenas do usuário (não no projeto)
- Habilidades apenas do projeto (não no usuário)
- Habilidades comuns (em ambos)
- Exibir oportunidades de sincronização:
RELATÓRIO DE SINCRONIZAÇÃO:
Habilidades apenas do usuário (5):
- error-handler
- api-builder
- custom-logger
- test-generator
- deploy-helper
Habilidades apenas do projeto (2):
- test-runner
- backend-scaffold
Habilidades comuns (3):
- frontend-ui-ux
- git-master
- planner
Opções:
[1] Copiar habilidade do usuário para o projeto
[2] Copiar habilidade do projeto para o usuário
[3] Ver diferenças
[4] Cancelar
- Manipular escolha do usuário:
- Opção 1: Selecionar habilidade(s) para copiar para o projeto
- Opção 2: Selecionar habilidade(s) para copiar para o usuário
- Opção 3: Mostrar diff lado a lado para habilidades comuns
- Opção 4: Sair
Segurança: Nunca sobrescrever sem confirmação
Exemplo:
Usuário: /skill sync
Assistente: Encontradas 5 habilidades apenas do usuário e 2 apenas do projeto.
Copiar 'error-handler' do usuário para o projeto? (sim/não/pular)
Usuário: sim
Assistente: ✓ Copiado 'error-handler' para .omc/skills/
Copiar 'api-builder' do usuário para o projeto? (sim/não/pular)
Usuário: pular
...
/skill setup
Assistente interativo para configurar e gerenciar habilidades locais (anteriormente local-skills-setup).
Comportamento:
Etapa 1: Verificação e Configuração de Diretórios
Primeiro, verificar se os diretórios de habilidades existem e criá-los se necessário:
# Verificar e criar diretório de habilidades do usuário
USER_SKILLS_DIR="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/skills/omc-learned"
if [ -d "$USER_SKILLS_DIR" ]; then
echo "Diretório de habilidades do usuário existe: $USER_SKILLS_DIR"
else
mkdir -p "$USER_SKILLS_DIR"
echo "Diretório de habilidades do usuário criado: $USER_SKILLS_DIR"
fi
# Verificar e criar diretório de habilidades do projeto
PROJECT_SKILLS_DIR=".omc/skills"
if [ -d "$PROJECT_SKILLS_DIR" ]; then
echo "Diretório de habilidades do projeto existe: $PROJECT_SKILLS_DIR"
else
mkdir -p "$PROJECT_SKILLS_DIR"
echo "Diretório de habilidades do projeto criado: $PROJECT_SKILLS_DIR"
fi
Etapa 2: Escaneamento e Inventário de Habilidades
Escaneie ambos os diretórios e mostre um inventário abrangente:
# Escanear habilidades do usuário
echo "=== HABILIDADES DO USUÁRIO (~/.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 "Total de habilidades: $USER_COUNT"
if [ $USER_COUNT -gt 0 ]; then
echo ""
echo "Habilidades encontradas:"
find "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/skills/omc-learned" -name "*.md" -type f -exec sh -c '
FILE="$1"
NOME=$(grep -m1 "^nome:" "$FILE" 2>/dev/null | sed "s/nome: //")
DESC=$(grep -m1 "^descrição:" "$FILE" 2>/dev/null | sed "s/descrição: //")
MODIFICADO=$(stat -c "%y" "$FILE" 2>/dev/null || stat -f "%Sm" "$FILE" 2>/dev/null)
echo " - $NOME"
[ -n "$DESC" ] && echo " Descrição: $DESC"
echo " Modificado: $MODIFICADO"
echo ""
' sh {} \;
fi
else
echo "Diretório não encontrado"
fi
echo ""
echo "=== HABILIDADES DO PROJETO (.omc/skills/) ==="
if [ -d ".omc/skills" ]; then
PROJECT_COUNT=$(find ".omc/skills" -name "*.md" 2>/dev/null | wc -l)
echo "Total de habilidades: $PROJECT_COUNT"
if [ $PROJECT_COUNT -gt 0 ]; then
echo ""
echo "Habilidades encontradas:"
find ".omc/skills" -name "*.md" -type f -exec sh -c '
FILE="$1"
NOME=$(grep -m1 "^nome:" "$FILE" 2>/dev/null | sed "s/nome: //")
DESC=$(grep -m1 "^descrição:" "$FILE" 2>/dev/null | sed "s/descrição: //")
MODIFICADO=$(stat -c "%y" "$FILE" 2>/dev/null || stat -f "%Sm" "$FILE" 2>/dev/null)
echo " - $NOME"
[ -n "$DESC" ] && echo " Descrição: $DESC"
echo " Modificado: $MODIFICADO"
echo ""
' sh {} \;
fi
else
echo "Diretório não encontrado"
fi
# Resumo
TOTAL=$((USER_COUNT + PROJECT_COUNT))
echo "=== RESUMO ==="
echo "Total de habilidades em todos os diretórios: $TOTAL"
Etapa 3: Menu de Ações Rápidas
Após o escaneamento, use a ferramenta AskUserQuestion para oferecer estas opções:
Pergunta: "O que você gostaria de fazer com suas habilidades locais?"
Opções:
- Adicionar nova habilidade - Iniciar o assistente de criação de habilidade (invocar
/skill add) - Listar todas as habilidades com detalhes - Mostrar inventário abrangente de habilidades (invocar
/skill list) - Escanear conversa por padrões - Analisar conversa atual para padrões dignos de habilidade
- Importar habilidade - Importar uma habilidade de URL ou colar conteúdo
- Concluído - Sair do assistente
Opção 3: Escanear Conversa por Padrões
Analisar o contexto da conversa atual para identificar potenciais padrões dignos de habilidade. Procure por:
- Sessões recentes de depuração com soluções não óbvias
- Bugs complicados que exigiram investigação
- Soluções alternativas específicas do código descobertas
- Padrões de erro que levaram tempo para resolver
Reportar descobertas e perguntar se o usuário deseja extrair alguma como habilidade (invocar /skillify; /learner está obsoleto para compatibilidade).
Opção 4: Importar Habilidade
Perguntar ao usuário para fornecer:
- URL: Baixar habilidade de uma URL (ex.: GitHub gist)
- Colar conteúdo: Colar conteúdo markdown da habilidade diretamente
Depois perguntar pelo escopo:
- Nível do usuário (~/.claude/skills/omc-learned/) - Disponível em todos os projetos
- Nível do projeto (.omc/skills/) - Apenas para este projeto
Validar o formato da habilidade e salvar no local escolhido.
/skill scan
Comando rápido para escanear ambos os diretórios de habilidades (subconjunto de /skill setup).
Comportamento:
Executar o escaneamento da Etapa 2 de /skill setup sem o assistente interativo.
Modelos de Habilidade
Ao criar habilidades via /skill add ou /skill setup, oferecer modelos rápidos para tipos comuns de habilidade:
Modelo de Solução de Erro
---
id: error-[id-único]
nome: [Nome do Erro]
descrição: Solução para [erro específico em contexto específico]
fonte: conversa
gatilhos: ["fragmento de mensagem de erro", "caminho de arquivo", "sintoma"]
qualidade: alta
---
# [Nome do Erro]
## O Insight
Qual é a causa subjacente deste erro? Que princípio você descobriu?
## Por Que Isso Importa
O que dá errado se você não souber disso? Que sintoma levou aqui?
## Padrão de Reconhecimento
Como você sabe quando isso se aplica? Quais são os sinais?
- Mensagem de erro: "[erro exato]"
- Arquivo: [caminho específico do arquivo]
- Contexto: [quando isso ocorre]
## A Solução
[Passos detalhados para resolver o erro]
## Exemplos
/oh-my-claudecode:[nome] [argumento de exemplo]
## Notas
[Contexto adicional, casos extremos, pegadinhas]
...
[truncado para tradução]