Communitygithub.com

logo-get

Uma habilidade para Claude Code que busca logotipos verificados de empresas em paralelo — com identidade, moeda e cores de marca verificadas por LLM. Não requer chaves de API.

O que é logo-get?

Esta habilidade permite que agentes de IA (como Claude Code) busquem logotipos oficiais de empresas de forma automatizada, sem necessidade de chaves de API. Ela coordena múltiplos subagentes em paralelo (ondas de até 8) para pesquisar, baixar, verificar e salvar logotipos de alta qualidade a partir de fontes como sites oficiais, DuckDuckGo e Wikipedia. O processo inclui uma etapa de desambiguação de nomes ambíguos (ex: "Delta" pode ser Delta Air Lines, Delta Faucet, etc.), onde o usuário é consultado para esclarecer. Cada logotipo é verificado rigorosamente quanto à identidade da empresa, atualidade e fidelidade de cores (modo strict) ou com tolerância maior (modo soft). O resultado final é uma tabela resumida com status (ok, fallback necessária ou falha) e detalhes como formato e dimensões. Ideal para desenvolvedores que precisam de logotipos verificados para dashboards, documentação ou sites, sem depender de APIs pagas.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add vignesh-sabhahit/logo-get

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Logo Get

Você vai buscar logotipos verificados de empresas para: $ARGUMENTS.

Você é um capataz despachando subagentes em paralelo — um por empresa. Cada subagente pesquisa, baixa, verifica e salva um único logotipo de forma independente. Você coordena, agrupa prompts do usuário e produz uma tabela resumida final.

Análise dos Argumentos

Analise $ARGUMENTS da seguinte forma:

  1. Detecte a flag opcional --out <caminho> (em qualquer lugar da string). Remova-a; resolva <caminho> para um caminho absoluto. Padrão: ./logos/ no diretório de trabalho atual.
  2. Trate o restante como uma lista separada por vírgulas de nomes de empresas. Remova espaços em branco de cada entrada. Entradas vazias são ignoradas.
  3. Se nenhum nome de empresa for encontrado, peça entrada ao usuário via AskUserQuestion e pare.

Crie o diretório de saída se ele não existir (mkdir -p).

Etapa 1 — Passagem de Desambiguação

Antes de despachar qualquer subagente, examine a lista de empresas com seu próprio julgamento:

  • Para cada nome, decida: existe uma entidade comercial claramente dominante? (ex.: "apple" → Apple Inc, "google" → Google LLC, "stripe" → Stripe Inc — sim. "acme" → não. "delta" → ambíguo: Delta Air Lines, Delta Faucet, Delta Dental.)
  • Para nomes genuinamente ambíguos, agrupe-os em UMA chamada AskUserQuestion com uma pergunta por nome ambíguo. Para cada um, apresente de 3 a 5 opções plausíveis + uma opção "outro (especificar)".
  • Use as respostas qualificadas do usuário como o nome canônico da empresa para o restante da execução.

Pule esta etapa completamente se nenhum nome for ambíguo.

Etapa 2 — Despachar Subagentes (ondas paralelas de 8)

Despache um Agente por empresa em ondas paralelas de no máximo 8 (mensagem única com até 8 chamadas de ferramenta Agent). Aguarde a onda terminar antes de despachar a próxima.

Cada chamada de Agente usa subagent_type: general-purpose e recebe um prompt autocontido — veja o Modelo de Prompt do Subagente abaixo. Interpole {{COMPANY}}, {{OUT_DIR}}, {{MODE}} por chamada.

Acompanhe qual subagente corresponde a qual empresa para poder atribuir resultados no resumo final.

Etapa 3 — Agregar Resultados

Cada subagente retorna um relatório estruturado:

status: ok | needs_soft_fallback | failed
path:   <caminho absoluto do arquivo salvo, ou null>
note:   <≤120 caracteres: nível atingido, dimensões, formato, variante — OU — motivo da falha>

Categorize por status. Se algum for needs_soft_fallback, pergunte ao usuário uma vez via AskUserQuestion:

A verificação rigorosa falhou para: . Mostrar correspondências mais fracas para estas (logotipos atuais com cores aproximadamente corretas, possivelmente apenas ícone)? Escolha quais tentar novamente.

Para cada nome que o usuário aprovar, despache um novo subagente em modo soft (onda paralela, limite 8). Mescle os resultados.

Etapa 4 — Resumo Final

Exiba para o usuário:

Salvo em: <diretório de saída absoluto>

apple      ✓  apple.svg              (Nível 3 Wikipedia, SVG)
google     ✓  google.png             (Nível 1 site, 800×272 PNG, logotipo textual)
acme-corp  ⚠  precisa de fallback soft    (apenas logotipo desatualizado encontrado)  → usuário recusou
zorp       ✗  nenhum logotipo qualificado encontrado

Modelo de Prompt do Subagente

Passe o seguinte prompt autocontido para cada subagente. Interpole {{COMPANY}} (nome qualificado da empresa), {{OUT_DIR}} (diretório de saída absoluto), {{SLUG}} (minúsculas, espaços e & → -, outras pontuações removidas, mas preserve . para domínios .ai/.io, ex.: JP Morgan → jp-morgan, Adopt.ai → adopt-ai), {{MODE}} (strict ou soft):

Sua tarefa: buscar UM logotipo verificado para a empresa **{{COMPANY}}**.

Diretório de saída (absoluto): {{OUT_DIR}}
Crie-o se não existir.

Modo: {{MODE}}

FLUXO DE TRABALHO (tente os níveis em ordem, pare no primeiro sucesso verificado):

**Nível 1 — Site da empresa / kit de imprensa**
1. Determine a URL oficial do site usando seu próprio conhecimento (ex.: "Apple" → https://www.apple.com, "JP Morgan" → https://www.jpmorganchase.com).
2. Faça WebFetch da página inicial. Procure o logotipo principal no HTML — geralmente dentro de <header>, <nav> ou um elemento com classe/id contendo "logo". Resolva URLs relativas para absolutas.
3. Muitas empresas vinculam a um kit de imprensa, ativos de marca ou página de mídia (procure por /press, /brand, /media, /about, /trust, links no rodapé). Siga-os — geralmente têm o logotipo textual de maior qualidade.
4. Baixe com: curl -L -A "Mozilla/5.0" -o /tmp/{{SLUG}}_candidato_N.<ext> "<url>" (use a extensão correta com base na URL ou no tipo de conteúdo)
5. Verifique o tamanho: sips -g pixelWidth -g pixelHeight <arquivo>. REJEITE se qualquer dimensão for < 100. Pule a verificação de tamanho para SVG (vetorial, infinitamente escalável).
6. Se o WebFetch da página inicial falhar ou nenhum logotipo for encontrado, faça UMA tentativa: WebSearch por "{{COMPANY}} official site", pegue o domínio do primeiro resultado e tente novamente a partir da etapa 2.

**Nível 2 — Pesquisa de imagens DuckDuckGo**
1. WebFetch https://duckduckgo.com/?q={{URL-encoded COMPANY}}+logo&iax=images&ia=images
2. Se a primeira consulta retornar resultados fracos, tente variantes: "{{COMPANY}} logo png wordmark", "{{COMPANY}} brand assets", "{{COMPANY}} press kit logo".
3. Extraia até 5 URLs de imagens candidatas. Baixe, verifique o tamanho, verifique cada uma.

**Nível 3 — Infobox da Wikipedia**
1. WebFetch https://en.wikipedia.org/wiki/{{COMPANY com espaços como underscore}}
2. Se a página for uma página de desambiguação ou 404, tente variantes: `{{Company}}_(company)`, `{{Company}}_Inc`.
3. Localize a imagem do infobox (geralmente a primeira imagem dentro de `.infobox`). Baixe, verifique o tamanho.

**VERIFICAÇÃO** — após cada download bem-sucedido, use a ferramenta `Read` para visualizar a imagem (você pode ver imagens diretamente).

**Modo strict** — REJEITE o candidato se algum destes falhar:
- **Identidade**: inconfundivelmente o logotipo da {{COMPANY}} (não um concorrente, fan art, meme ou uma empresa diferente com nome semelhante).
- **Atualidade**: o logotipo atual de acordo com seu conhecimento de corte (não uma versão claramente desatualizada).
- **Fidelidade de cor**: as cores da marca correspondem ao que você sabe.
- **Variante**: prefira o LOGOTIPO TEXTUAL COMPLETO ou LOCKUP (ícone + texto) em vez de apenas ícone. Se apenas ícone for encontrável no modo strict, retorne `needs_soft_fallback` em vez de `ok`.

**Modo soft** — REJEITE apenas se:
- A identidade estiver errada (empresa diferente, fan art, meme).
- Tolere variantes desatualizadas mas reconhecíveis, pequenas mudanças de cor (compressão JPEG, iluminação) e apenas ícone quando não existir logotipo textual.

Se verificado: renomeie `/tmp/{{SLUG}}_candidato_N.<ext>` para `{{OUT_DIR}}/{{SLUG}}.<ext>`. Se um arquivo com esse nome já existir, incremente: `{{SLUG}}-2.<ext>`, `{{SLUG}}-3.<ext>`, etc.

RELATÓRIO — retorne UMA mensagem exatamente neste formato (sem prosa extra):

status: ok | needs_soft_fallback | failed
path:   <caminho absoluto do arquivo salvo, ou null>
note:   <≤120 caracteres: nível atingido, dimensões, formato, variante — OU — motivo da falha>

Regras:
- Não tente novamente falhas transitórias (timeouts, 5xx) — vá para o próximo nível.
- Nunca salve um arquivo não verificado.
- "No API" = nenhuma API que exija autenticação/paga (ex.: API de logotipo da Clearbit, API comercial da Brandfetch). Acertos incidentais em CDNs e agregadores de logotipos (logo.dev, seeklogo.com, worldvectorlogo.com, etc.) descobertos via pesquisa de imagem são aceitáveis — são apenas imagens hospedadas, não chamadas de API.
- needs_soft_fallback = candidatos existem mas falharam no modo strict (apenas ícone quando se esperava logotipo textual, desatualizado, cor alterada).
- failed = nenhum candidato em todos os níveis.

Notas sobre o Comportamento

  • Limite de concorrência é real: não exceda 8 subagentes em andamento ao mesmo tempo.
  • Não sobrecarregue: se o Nível 1 for bem-sucedido, o subagente para ali e não tenta os Níveis 2 ou 3.
  • Fallback soft é opcional: nunca execute o modo soft sem aprovação explícita do usuário.
  • Não invente: se nenhum logotipo puder ser verificado, retorne failed honestamente com uma nota útil.

Habilidades Relacionadas