WACrew
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| WAC_CLOUD_URL | No | URL of your WACrew panel (the self-hosted collector). Without it the server starts in local mode with an empty data folder. | |
| WAC_CLOUD_PASS | No | Panel password (PANEL_PASS). | |
| WAC_CLOUD_USER | No | Panel login (PANEL_USER). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Coletor de WhatsApp: ler histórico, acompanhar chats e responder por eles.
ANTES DE ESCREVER QUALQUER MENSAGEM que vá pro WhatsApp (responder,
responder_midia, editar_mensagem), CARREGUE a skill de voz do operador (tool
Skill): voz-do-operador, ou a versão já preenchida que existir nesta máquina.
Ela define a grafia, o registro e a camada de venda do operador, medidos no texto
real dele. Escrever sem ela produz mensagem com cara de IA — que é exatamente o
que o operador não quer que o cliente receba. Se ainda estiver com placeholders,
ou não existir aqui, siga com cuidado normal e avise o operador.
Depois dela, comunicacao-cliente (conduta: o que responder, modos, erro sem se
rebaixar, urgencia). Nunca humanizer em balão de conversa.
ANTES DE REDIGIR: preparar_resposta(grupo) — devolve o que a conta já usou nas
últimas msgs do chat e o que o cliente deixou em aberto. O responder REVISA o
texto (repetição, dois-pontos, culpa, desculpa) e RECUSA o que estourar, com o
que trocar; mande 2-3 candidatos e o código escolhe o que menos destoa.
MODO POR CHAT: cada chat tem um modo (estado_triagem / definir_modo). No modo 'confirmar' (o default) MOSTRE o texto e espere o OK do operador antes de chamar as tools de envio. Convenção respeitada, não trava de código — não burle.
REGISTRE ENTREGAS: ao concluir uma funcionalidade pra cliente, chame registrar_feature(grupo, nome, ref).
ENTREGA: responder devolve um TICKET na hora; a mensagem sai depois, com latência
humana (segundos numa conversa ativa, minutos a horas numa fria). status_envio
acompanha; cancelar_envio cancela agendado ou em andamento — se o operador disser
'cancela', chame NA HORA, sem confirmar. Se o plantão avisar 'Entrega interrompida',
releia o chat e responda de novo. urgencia: 'agora' só quando o cliente espera um
ok. Depois de cancelar ou interromper, ler_mensagens antes de reenviar.
Passe tempo_humano_s (quanto uma pessoa levaria pra chegar a essa resposta): o
código atrasa só a entrega, uma fração disso, e já soma o tempo de assistir a mídia.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| listar_gruposA | Lista os grupos coletados (slug, nome, nº de mensagens, data da última). Use o slug nas outras ferramentas. |
| ler_mensagensA | Lê as mensagens de um grupo (texto + transcrições já feitas). Filtra por data inicial e limita a quantidade. Default: as 50 mais recentes (passe 'limite' maior, ou 'desde', pra ir além) — evita despejar o grupo inteiro quando você só quer o contexto recente. Cada msg traz |
| buscarA | Busca um texto nas mensagens e transcrições. Sem 'grupo', procura em todos. Retorna os trechos que casam (mais recentes primeiro), limitado a 'limite' (default 50) pra não estourar — se truncar, o retorno avisa em 'truncado'. |
| transcreverA | Transcreve áudio/vídeo (MLX local, large-v3) e devolve o texto; reusa cache. UMA mídia específica: passe |
| resumo_do_diaA | Retorna todo o conteúdo de um grupo num dia (texto + transcrições) para a IA resumir. Default: hoje (UTC). |
| ver_imagemA | Mostra de fato uma imagem (print/screenshot/sticker) de um grupo para a IA enxergar. Use quando precisar entender o conteúdo visual — ex.: print de um bug que o cliente mandou. Sem mediaPath, mostra a ÚLTIMA imagem/figurinha do grupo (atalho pra 'vê a imagem que acabou de chegar', sem precisar de ler_mensagens antes). |
| ver_videoA | Mostra um vídeo ou GIF pra IA enxergar, amostrando alguns frames (via ffmpeg). Use pra entender o conteúdo visual de um GIF (reação/meme) ou de um vídeo mudo. Para o áudio do vídeo, use 'transcrever'; pra entender imagem e fala juntos (ex.: cliente mostrando um erro), use 'assistir_video'. Sem mediaPath, mostra o ÚLTIMO vídeo/GIF do grupo. |
| assistir_videoA | Assiste um vídeo com o Gemini (imagem e áudio juntos) e devolve o que aparece e o que é falado, com tempos MM:SS. Use quando o conteúdo do vídeo importa: cliente mostrando erro na tela, explicando algo em vídeo, ou mandando LINK de vídeo (YouTube, Instagram, TikTok). Custa ~US$ 0,03–0,05 por minuto de vídeo (OpenRouter): chame sob demanda, nunca em lote. GIF/meme ou só uma olhada rápida: prefira 'ver_video' (grátis). Vídeo do chat: |
| ler_documentoA | Lê o conteúdo de texto de um documento que o cliente mandou (PDF, .docx, .txt, .csv...). Use quando precisar entender o que diz um arquivo recebido — ex.: contrato, orçamento, planilha exportada. Se vier 'note' avisando que não há texto extraível (PDF escaneado), tente 'ver_imagem' no mesmo arquivo. Sem mediaPath, lê o ÚLTIMO documento do grupo. |
| listar_contatosA | Acha QUEM é quem: nome, papel (me = você, team = seu time, client = cliente), jid de DM e o slug da DM pronto pra ler_mensagens. Telefone e LID da mesma pessoa vêm numa linha só. PASSE |
| preparar_respostaA | Chame ANTES de redigir qualquer mensagem pra um chat. Devolve o que a conta já usou nas últimas 5 mensagens ali (aberturas, verbos, pontuação, tamanhos), o estado da conversa (ativa/fria, o que o cliente deixou em aberto, se o operador já respondeu na mão) e |
| revisar_textoA | Revisa um rascunho SEM enviar: repetição contra as últimas mensagens do chat, dois-pontos e outros tells, auto-incriminação, desculpa, tratamento. Devolve ok/score/hits/sugestoes. No modo 'confirmar', revise, corrija e só então mostre o texto ao operador. |
| responderA | Envia uma mensagem de texto no WhatsApp — para um GRUPO (slug/nome/jid) ou um CONTATO em DM ( |
| responder_midiaA | Envia um arquivo para um grupo no WhatsApp: imagem com legenda, documento/PDF, áudio (nota de voz) ou vídeo. REGRA: só chame DEPOIS de confirmar com o usuário o destinatário e o arquivo. Se houver legenda (caption), o texto deve passar pela skill de voz do operador e ser confirmado, igual ao 'responder'. O 'path' pode ser absoluto (arquivo novo no disco) OU o mediaPath de uma mensagem já recebida (campo 'midia') para reenviar. |
| cancelar_envioA | Cancela uma entrega humanizada AGENDADA ou EM ANDAMENTO: o balão que ainda não saiu não sai; o que já saiu fica. Use na hora, SEM confirmar, quando o operador disser 'cancela'/'para'/'não manda'. Por chat (grupo) ou por ticket. Depois chame ler_mensagens no chat pra ver o que chegou a sair antes de reenviar. |
| status_envioA | Estado de uma entrega humanizada: por chat (grupo) ou por ticket. Devolve estado (agendado/entregando/entregue/cancelado/interrompido), motivo, balões enviados/total e previsão. |
| editar_mensagemA | Edita uma mensagem JÁ ENVIADA por você/pela IA (o WhatsApp marca 'editada'). Use pra corrigir erro ou atualizar info numa msg recente. Só funciona em mensagem PRÓPRIA (fromMe) — ATENÇÃO: mensagens que o OPERADOR mandou do celular também são fromMe (mesma conta) e são editáveis por esta tool. Por isso NUNCA escolha o msgId por posição ('a última'): pegue via ler_mensagens e CONFIRA que o texto da msg alvo é exatamente o que você quer substituir antes de chamar. CONFIRMAÇÃO: mesma convenção do responder — no modo 'confirmar', mostre o texto novo e espere OK antes de chamar. |
| reagirA | Reage com um emoji a uma mensagem (👍, ❤️, 😂...). Às vezes a resposta humana é SÓ uma reação — prefira isso a um balão de 'ok!' quando couber. Emoji vazio ('') REMOVE a reação. O msgId vem do ler_mensagens. A tool resolve sozinha a key completa (autor/fromMe) pelo histórico — participant/fromMe manuais só como override raro. |
| editar_perfilA | Edita o PERFIL do WhatsApp do operador: nome, recado/'sobre' (status) e/ou foto. Passe só os campos que quer mudar. 'foto' é caminho absoluto de imagem OU o mediaPath de uma mensagem recebida. CONFIRMAÇÃO: o perfil é PÚBLICO (todo contato vê). Você DEVE mostrar ao operador o que vai mudar e ter o OK ANTES de chamar — mesma convenção do 'responder'. Não é trava de código; não burle. LIMITE: catálogo, localização, link e horário-oficial do business são read-only no WhatsApp (não editáveis por aqui). |
| marcar_resolvidoB | Marca o grupo como resolvido (tira da fila de pendências) até o momento dado. Sem 'ate', usa agora. |
| silenciar_grupoB | Silencia/dessilencia um grupo (coleta mas não alerta). |
| anotarA | Salva/atualiza a nota livre (mini-CRM) de um grupo. Nota vazia remove a nota. |
| ler_notasA | Lê as notas dos grupos. Com 'grupo', traz só a dele; sem, traz todas. |
| alertar_chatA | Liga/desliga a NOTIFICAÇÃO NO MAC (pro humano) quando chega mensagem de cliente num chat — grupo OU DM — por slug. NÃO acorda o agente nem faz o Claude reagir sozinho: é só um aviso de tela pro operador. (Pra o AGENTE ser acordado por mensagem nova — modo monitor/autônomo — arme um Monitor no |
| definir_modoA | Define se um chat está em modo AUTÔNOMO (a IA envia sem confirmar) ou CONFIRMAR (default: a IA mostra o texto e espera OK do operador antes de enviar). Persiste por chat — você liga uma vez e vale até desligar, sem depender de re-combinar a cada msg. O |
| novidadesA | Puxa as mensagens novas dos chats marcados com alerta desde a última vez que você viu. FILTRA só mensagens de CLIENTE (descarta as suas e as do time) — em grupo interno isso pode voltar vazio mesmo tendo msg nova; nesse caso o retorno traz |
| etiquetarA | Define as ETIQUETAS de um chat (empresa/contrato/pessoal — ex.: 'Empresa A', 'Freelance'). É o rótulo que diz de qual contexto de trabalho aquele grupo/contato é — use pra saber COM QUEM está falando antes de redigir. Lista vazia remove todas. Pra LER as etiquetas de todos os chats, use estado_triagem (campo |
| definir_contratoA | Define o estado comercial de um chat: estado (ativo/encerrado/pausado/sem), início e fim (YYYY-MM-DD), valor mensal e nota. Só os campos passados mudam. O dashboard cruza isso com a atividade pra apontar cliente ativo demais pro contrato, renovação próxima e custo por entrega. Pra ler, use a tool dashboard. limite_mensagens = mensagens do cliente em 30 dias que o plano comporta (null tira o limite); acima dele o dashboard aponta acima-do-contrato. |
| registrar_featureA | Registra uma funcionalidade ENTREGUE pra um cliente (chame ao concluir uma entrega). Alimenta o contador de entregas por cliente do dashboard. Se passar |
| dashboardA | Visão de negócio por cliente: atividade 30 d, contrato, entregas 30 d/total, mensagens e valor por entrega, e SINAIS (encerrado-ativo, sem-contrato-ativo, pausado-ativo, renovacao-30d, sem-entrega-30d) com uma frase explicando cada um. Use pra responder 'quem está ativo demais pro contrato', 'quem renova este mês', 'quantas entregas o cliente X recebeu'. |
| caixa_de_entradaA | Quem está esperando resposta e de qual projeto, em todos os chats coletados (o operador não precisa abrir o WhatsApp). Use pra 'quem me mandou mensagem?', 'tem cliente esperando?', 'o que rolou hoje?'. Cada item traz o chat, o |
| estado_triagemA | Retorna o estado de triagem inteiro (resolved/muted/notes/lastSeen/copilot/alertar/autonomo/etiquetas/agente/executor) pra IA saber o que já foi tratado, quais chats acompanha (copilot), quais alertam, e o modo de envio de cada um (autonomo: true = envia direto; ausente = confirmar antes). Contrato de cliente não vem aqui: ele fica nas tools dashboard e definir_contrato. |
| agenda_verA | Lê o Google Agenda do operador (todas as agendas da conta) numa janela de datas; padrão hoje até daqui a 7 dias. Cada evento traz |
| agenda_marcarA | Cria um evento no Google Agenda do operador. Marque só o que foi combinado de fato (data e hora claras) ou o que o operador pediu. CONVIDADOS: o Google manda e-mail de convite na hora. Só inclua convidados quando o operador pedir, e antes mostre a ele o evento (título, quando, quem) e espere o OK. Sem convidados, ninguém recebe nada. Devolve o evento criado com |
| agenda_editarA | Altera um evento (só os campos passados). Início sem fim mantém a duração. |
| agenda_apagarA | Apaga um evento do Google Agenda. Só apague o que o operador pediu explicitamente. Se o evento tiver convidados, o Google avisa o cancelamento por e-mail. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 36 tools
Most tools target genuinely different actions, and the descriptions work hard to separate them (e.g. caixa_de_entrada vs novidades vs ler_mensagens). But several near-pairs remain easy to mix up: ver_video vs assistir_video, preparar_resposta vs revisar_texto, and the four read-the-chat tools all overlap enough that an agent must read long descriptions to choose correctly.
Naming is uniformly Portuguese and mostly infinitive verbs, but the structure varies: verb_noun (ler_mensagens, listar_grupos), object_prefix (agenda_ver, agenda_marcar, agenda_editar, agenda_apagar), bare verbs (responder, buscar, anotar, reagir, etiquetar), and bare nouns (dashboard, novidades, caixa_de_entrada, estado_triagem, resumo_do_dia). Readable, but no single predictable pattern.
36 tools is heavy for a single server, well past the comfortable 3-15 range. Most tools do earn their place in a rich domain (messaging, media, calendar, CRM, dashboard), but the surface is large enough that discovery and selection cost is significant.
The surface covers read/send/edit/react/media/transcription plus triage state, notes, contracts, features, delivery status, and a clean calendar CRUD cycle. Gaps are minor and workable around: no group administration (create group, add/remove participants), no poll/sticker sending, no contact creation.