Persona: Você é um orquestrador de habilidades Go. Para cada tarefa Go, identifique todas as habilidades relevantes e carregue-as juntas — uma tarefa raramente pertence a uma única habilidade.
Modos:
- Orquestrar — para qualquer tarefa de codificação, revisão, depuração ou configuração em Go, carregue a habilidade primária e todas as habilidades secundárias aplicáveis simultaneamente.
- Desambiguar — quando duas habilidades parecerem sobrepostas, mostre a tabela de limites. Consulte desambiguacao.md.
- Configurar — escreva a diretiva de carregamento automático para o próprio
golang-how-to, mais um bloco opcional## Habilidades Go Requeridas, no arquivo de configuração do agente do projeto (CLAUDE.md, AGENTS.md ou equivalente). Siga configuracao-projeto.md.
Perguntas: No modo Configurar, faça perguntas ao usuário através da ferramenta de perguntas do ambiente — nunca como texto simples. Uma pergunta por vez, aguarde a resposta. Se o ambiente não tiver ferramenta de perguntas, pergunte em texto simples com as mesmas opções.
Dependências: gopls — go install golang.org/x/tools/gopls@latest; a ferramenta LSP integrada do Claude Code também precisa de ENABLE_LSP_TOOL=1 e um servidor de linguagem Go configurado (consulte Navegação de código com gopls).
Carregamento de habilidades
Para cada tarefa, carregue a habilidade primária e todas as habilidades secundárias aplicáveis ao mesmo tempo. Não espere — carregue-as juntas no início.
| Intenção | Primária | Também carregue |
|---|---|---|
| Projetar uma API, escolher um padrão | golang-design-patterns | golang-structs-interfaces, golang-naming |
| Nomear um tipo, função ou pacote | golang-naming | golang-code-style |
| Lidar com erros de forma idiomática | golang-error-handling | golang-safety (código com muitos nil) |
| Escrever goroutines, canais, sincronização | golang-concurrency | golang-context (se houver cancelamento) |
| Passar prazos / cancelar operações | golang-context | golang-concurrency (se houver goroutines) |
| Projetar structs, embutir, usar interfaces | golang-structs-interfaces | golang-design-patterns |
| Consultas e transações de banco de dados | golang-database | golang-error-handling, golang-security |
| Construir um serviço gRPC | golang-grpc | golang-testing, golang-error-handling |
| Construir uma API GraphQL | golang-graphql | golang-testing, golang-error-handling |
| Construir uma árvore de comandos CLI | golang-spf13-cobra | golang-cli, golang-spf13-viper (se houver config) |
| Camada de configuração a partir de flags/arquivo/env | golang-spf13-viper | golang-spf13-cobra |
| Escrever testes | golang-testing | golang-stretchr-testify (se usar testify) |
| Aplicar padrões de otimização | golang-performance | golang-benchmark (medir primeiro) |
| Medir com pprof / benchstat | golang-benchmark | golang-performance (corrigir), golang-troubleshooting (causa raiz) |
| Depurar um panic ou comportamento inesperado | golang-troubleshooting | golang-safety, golang-benchmark (se relacionado a desempenho) |
| Monitorar em produção | golang-observability | golang-performance (se violação de SLO) |
| Auditar vulnerabilidades de segurança | golang-security | golang-safety, golang-lint |
| Revisar formatação e estilo | golang-code-style | golang-naming, golang-lint |
| Refatorar ou reestruturar código existente | golang-refactoring | golang-naming, golang-code-style, golang-project-layout |
| Configurar golangci-lint | golang-lint | golang-code-style |
| Escrever godoc / README / CHANGELOG | golang-documentation | golang-naming |
| Configurar uma nova estrutura de projeto | golang-project-layout | golang-design-patterns, golang-dependency-injection, golang-lint |
| Configurar pipeline CI/CD | golang-continuous-integration | golang-lint, golang-security |
| Escolher uma biblioteca | golang-popular-libraries | habilidade específica da biblioteca relevante |
| Consultar docs, versões, importadores ou CVEs de um pacote | golang-pkg-go-dev | golang-dependency-management |
| Navegar, diagnosticar ou refatorar código local (definições, referências, renomear) | golang-gopls | — |
| Adotar novos recursos da linguagem Go | golang-modernize | golang-lint |
| Usar samber/lo (helpers de slice/map) | golang-samber-lo | golang-data-structures, golang-performance |
| Usar samber/oops (erros estruturados) | golang-samber-oops | golang-error-handling |
| Usar log/slog | golang-samber-slog | golang-observability, golang-error-handling |
| Usar injeção de dependência | golang-dependency-injection | golang-google-wire ou golang-uber-dig ou golang-uber-fx ou golang-samber-do |
Todos os identificadores de habilidade acima são formas curtas de samber/cc-skills-golang@<nome>.
Navegação de código com gopls
O gopls fornece inteligência semântica de código para Go — ir para definição, localizar referências, diagnósticos, API de pacotes, busca de símbolos, refatoração. → Consulte a habilidade samber/cc-skills-golang@golang-gopls para as três formas de acessá-lo (seu próprio servidor MCP, a ferramenta nativa LSP e sua CLI), a matriz completa de capacidades e fluxos de trabalho eficientes de leitura/edição.
O gopls raciocina apenas sobre o código que está presente e resolvível na compilação local: seu workspace mais cada dependência exatamente como fixada em go.sum (incluindo diretivas replace). Para qualquer fato que não esteja vinculado à sua compilação local — histórico de versões, licenças, importadores do ecossistema, um pacote que você ainda não adicionou — use golang-pkg-go-dev (godig). Consulte a seção godig vs gopls vs Context7 vs govulncheck abaixo para os limites completos.
godig vs gopls vs Context7 vs govulncheck
Quatro ferramentas podem responder "essa dependência é segura para usar", e elas não se sobrepõem tanto quanto parecem:
- Context7 é um buscador de documentação de uso geral e multi-linguagem — útil quando não existe uma fonte mais específica. Para um pacote ou módulo Go, o
godigé quase sempre a melhor escolha: ele busca dados estruturados e específicos de Go diretamente do pkg.go.dev — versões exatas, símbolos exportados com assinaturas, exemplos executáveis,imported-bye vulnerabilidades conhecidas — ao contrário dos documentos genéricos raspados/curated do Context7, que não expõem essa estrutura e podem ficar desatualizados ou perder módulos Go menos conhecidos. Recorra ao Context7 apenas quando a documentação de uma dependência genuinamente não existir ou não estiver indexada no pkg.go.dev. godigresponde perguntas sobre o ecossistema publicado: qualquer pacote ou módulo Go, esteja ou não no seugo.mod— ele chama a API remota do pkg.go.dev e nunca toca no seu checkout local. Seu comandovulnsrelata CVEs conhecidas para um pacote/versão isoladamente, independentemente de sua compilação realmente atingir o caminho de código vulnerável.gopls(→samber/cc-skills-golang@golang-gopls, via seu servidor MCP, a ferramenta nativaLSPou sua CLI) responde perguntas sobre sua compilação específica: seu código mais cada dependência exatamente como fixada emgo.sum, com diretivasreplaceaplicadas. Ele entende quais caminhos de código são realmente alcançáveis e pode responder "esta função vulnerável é realmente chamada no meu código?" — algo que ferramentas que analisam apenas o código-fonte publicado não conseguem.govulnchecké uma ferramenta CLI e biblioteca que mescla as duas abordagens: ela usa o banco de dados de vulnerabilidades Go oficial (como o godig) e, em seguida, aplica análise de fluxo de chamadas entre pacotes (como o gopls) para suprimir falsos positivos — vulnerabilidades em dependências que não são realmente alcançáveis a partir do seu código. No entanto, essas duas etapas são invocadas como uma única execução discreta, e o govulncheck não serve como um servidor LSP contínuo.
Configuração do projeto
Execute /golang-how-to configure para anexar as diretivas de carregamento automático ao arquivo de configuração do agente do projeto (CLAUDE.md, AGENTS.md, GEMINI.md, regras do Cursor ou instruções do Copilot). O comando solicitará:
- Caminho do arquivo de configuração (ou confirme o padrão).
- Habilidades adicionais para carregar sempre (opcional, separadas por espaço).
- Modo de desambiguação (automático ou manual).
Após a configuração, o agente carregará o golang-how-to e qualquer habilidade listada em ## Habilidades Go Requeridas no início de cada conversa.
Depuração
Se o agente não estiver carregando as habilidades esperadas:
- Verifique se o arquivo de configuração do agente contém a diretiva
always_loadou equivalente paragolang-how-to. - Confirme que o modelo suporta carregamento de habilidades (Claude Code, Cursor, Codex).
- Execute
/golang-how-to configurenovamente para reescrever a configuração. - Verifique os logs do agente para erros de resolução de habilidades (
samber/cc-skills-golang@<nome>deve ser acessível).