Construa seu app conversando com o Harness
Você não precisa saber programar para começar. Este guia explica, passo a passo e sem jargão, como pedir, conferir e aprovar o trabalho do Harness — e, no final, como criar agentes de IA que atendem os seus clientes sozinhos.
A Barbearia Navalha (fictícia) usa o FlexAgenda, o app de agendamento da FlexPage: o cliente entra pelo celular, escolhe o serviço (Corte R$ 40, Barba R$ 30, Corte + Barba R$ 65), o barbeiro (Rafa ou Léo), o dia e o horário. O dono cuida de tudo por um painel e recebe lembretes pelo WhatsApp. Preços e nomes são de exemplo — troque pelos do seu negócio.
Comece aqui
O que é essa ferramenta, as palavras que ela usa e onde fica cada botão.
O que é o Harness
Entender, em linguagem simples, o que ele faz e o que não faz.
O Harness é um assistente de programação com inteligência artificial que mora dentro do painel da FlexPage. Você escreve em português o que quer — “crie uma página para a minha barbearia” — e ele cria e altera os arquivos do seu site para fazer aquilo acontecer.
A palavra harness significa “arreio” em inglês: aquilo que se coloca num cavalo para ele puxar a carroça na direção certa. É exatamente a ideia: a IA tem muita força, e o Harness é o arreio que a mantém trabalhando só no seu site, com regras e pedindo sua permissão.
Responde perguntas e sugere código, mas você copia, cola e publica. Ele não enxerga seu site.
Lê os arquivos do seu site, escreve o código no lugar certo, confere se está correto e mostra o que vai mudar antes de gravar.
Uma IA que trabalha dentro do seu app atendendo seus clientes — por exemplo, respondendo no chat do site.
O que ele consegue fazer
- Criar sites, páginas e apps completos (telas + a parte que roda no servidor).
- Alterar e consertar o que já existe, inclusive a partir de um print do erro.
- Criar rotinas que rodam sozinhas (ex.: “todo dia às 8h, faça tal coisa”).
- Ler planilhas, documentos Word, PDFs e imagens que você enviar.
- Criar agentes de IA para atender os seus clientes.
O que ele não faz (e por quê)
- Não mexe em sites de outras pessoas. Ele só enxerga as pastas do domínio que você selecionou.
- Não grava nada sem você ver, no modo recomendado. Cada alteração aparece num cartão para você permitir ou recusar.
- Não adivinha senhas nem dados de terceiros. Quando precisa de algo (a chave de um serviço, o número do WhatsApp), ele pergunta.
- Não substitui o seu olhar. Ele erra às vezes — por isso você testa o resultado, como faria com um funcionário novo.
O Harness é um programador muito rápido que acabou de ser contratado. Ele sabe programar, mas não conhece o seu negócio. Quanto melhor você explicar, melhor o resultado — e você continua sendo o dono que aprova o trabalho.
Palavras que você vai ver
Um pequeno dicionário. Volte aqui sempre que travar numa palavra.
Todo site na FlexPage tem quatro pastas. Entender cada uma resolve metade das dúvidas:
www/O que o público vê. Páginas, imagens, estilos. Tudo aqui pode ser aberto no navegador.
script/O “cérebro” do app no servidor. Recebe pedidos das páginas, calcula, grava dados. O público não vê o código.
sandbox/O cofre. Dados e configurações privadas: cadastros, senhas protegidas, chaves de serviços.
thread/Tarefas automáticas. Programas que o servidor roda sozinho, mais ou menos a cada minuto.
- Domínio / URL
- O endereço do site (ex.:
barbearianavalha.com.br). No painel você escolhe em Selecionar URL em qual site vai trabalhar. - Sessão
- Uma conversa com o Harness sobre um assunto. Fica guardada; você pode fechar e continuar outro dia.
- Tipo de sessão
- O foco da conversa: Site, App, Webhook, Rotina, Projeto ou Livre. Define o que o Harness lê primeiro.
- Ferramenta
- Uma ação que o Harness usa:
read(ler arquivo),write(criar),edit(alterar),list(ver pasta). Aparecem como cartões na conversa. - Aprovação
- O momento em que você permite ou recusa uma alteração.
- Backend / API
- A parte do app que roda no servidor (pasta
script/). As páginas “pedem” coisas a ela, como “quais horários estão livres?”. - Frontend
- As telas que o cliente vê (pasta
www/). - Webhook
- Um endereço que outro sistema chama para avisar algo (ex.: “o pagamento caiu”).
- Token
- A “moeda” da IA: pedaços de texto. Tudo que a IA lê e escreve é contado em tokens — é o que gera custo.
- Contexto
- A memória de curto prazo da sessão. Quando enche, o Harness fica lento e caro — aí você compacta.
- Skill
- Um manual que o Harness consulta antes de trabalhar (ex.: como fazer login com segurança).
- Agente
- Uma IA configurada para trabalhar dentro do seu app, atendendo seus clientes.
- Automação
- Uma mensagem que o Harness recebe sozinho num horário marcado ou quando outro sistema chama.
Conhecendo a tela
Onde fica cada botão do Harness.
- Entre no painel admin.flexpage.io.
- Em Selecionar URL, escolha o site (ex.:
barbearianavalha.com.br). - No menu lateral, clique em 🛠️ Harness.
- 1Nova: começa uma conversa nova.
- 2Ferramentas: Skills (manuais), Automações (horários), Projetos (arquivos para baixar) e Agentes (IA no app).
- 3Lista de sessões: clique para reabrir uma conversa antiga.
- 4Barra da sessão: quanto da memória já foi usada, desfazer alterações, compactar, parar o trabalho e encerrar.
- 5Conversa: suas mensagens, as respostas e os cartões de cada ação.
- 6Caixa de mensagem: escreva o pedido, anexe prints (📎 ou Ctrl+V) e envie com o botão ou Ctrl+Enter.
O administrador da conta precisa liberar. Em Usuários, ele marca a permissão do Harness, os modos de aprovação que você pode usar e o seu limite mensal de tokens.
Básico
Criar uma sessão, fazer um bom pedido, aprovar com segurança e publicar a primeira página.
Sua primeira sessão
Escolher o tipo certo e as opções seguras.
Clique em ➕ Nova. A janela Nova sessão do Harness pergunta: “O que vamos construir?”
Página ou landing em www/.
Telas em www/ e API em script/.
Recebe aviso de outro sistema.
Roda sozinha de tempos em tempos.
Sem foco definido.
Código, planilha ou texto para baixar.
O tipo não limita o que o Harness pode fazer — ele só define por onde ele começa e quais manuais lê primeiro. Na dúvida, use App para qualquer coisa que tenha tela + dados.
As outras opções da janela
| Opção | O que escolher | Por quê |
|---|---|---|
| Título | Algo que você reconheça depois: “Chat de atendimento”. | Aparece na lista de sessões. |
| Aprovação | Perguntar antes de gravar ou editar arquivos (recomendado) | Você vê cada alteração antes. “Executar direto” é só para quem já tem prática; “Somente leitura” serve para consultas. |
| Raciocínio | Padrão do modelo. Alto para tarefas difíceis. | Mais raciocínio = respostas melhores em problemas complexos, porém mais lentas e caras. |
| Tamanho máximo de cada resposta | 32 mil tokens (recomendado). | Evita que um arquivo grande seja cortado no meio. |
Clique em 🛠️ Criar sessão. Pronto: a conversa está aberta e esperando seu primeiro pedido.
Crie uma sessão para “página da barbearia” e outra para “chat de atendimento”. Misturar tudo numa conversa só enche a memória e confunde o Harness.
Como pedir bem
A receita de um pedido que dá certo na primeira vez.
O Harness não conhece a sua barbearia. Um bom pedido responde a quatro perguntas:
- O quê? O resultado que você quer ver.
- Para quem? Quem vai usar (cliente no celular, você no computador…).
- Com quais informações? Nomes, preços, horários, cores, textos reais.
- Como saber que ficou bom? O que você vai testar.
Pedido vago
“Faz um site pra barbearia.”
Pedido completo
“Crie a página inicial da Barbearia Navalha para clientes que abrem no celular. Serviços: Corte R$ 40 (30 min), Barba R$ 30 (20 min), Corte + Barba R$ 65 (50 min). Horário: seg 13h–19h, ter a sex 10h–19h, sáb 9h–15h. Cores verde-sálvia #5C7C6B e dourado #C9A87C. Botão grande ‘Agendar horário’ que leva para /agendar. Quero que funcione bem no celular.”
Mais dicas que fazem diferença
- Um passo de cada vez. Primeiro a página; depois o formulário; depois o chat. Pedidos gigantes dão mais erros.
- Mostre em vez de descrever. Um print de um site que você gosta vale mais que um parágrafo (veja a lição 11).
- Diga o que não quer. “Não altere o painel do administrador.”
- Peça para ele perguntar. “Se faltar alguma informação, me pergunte antes de começar.”
- Corrija conversando. “O botão ficou pequeno no celular, aumente.” Não é preciso começar de novo.
Aprovar, recusar e desfazer
Ler o cartão de aprovação e voltar atrás quando preciso.
Quando o Harness quer criar ou alterar um arquivo, a conversa para e aparece um cartão amarelo:
Gravar www/index.html (8420 bytes)
- O nome da ferramenta diz o tipo de ação:
writecria ou substitui um arquivo inteiro;edittroca um trecho;appendacrescenta ao final. - O caminho diz onde:
www/é público,script/é o servidor. - Clique na área cinza para ver o conteúdo que será gravado.
- Permitir grava. Recusar não grava e o Harness fica sabendo — explique na próxima mensagem o que ele deve fazer diferente.
Pediu uma mudança na página e ele quer mexer em script/api.js? Ou quer apagar muito conteúdo de um arquivo? Recuse e pergunte: “Por que você precisa alterar esse arquivo?”. Ele explica.
Deu errado? Use o Desfazer
O botão ↶ Desfazer mostra as mensagens que alteraram arquivos. Escolha a partir de qual mensagem quer voltar: tudo o que o Harness gravou dali em diante volta como estava. É a sua rede de segurança — use sem medo.
Abra o site (botão Abrir Site no topo do painel) e atualize a página. Se algo não mudou, pode ser o cache do navegador: tente Ctrl+F5.
Exemplo guiado: a página da barbearia
Do pedido ao site no ar, com uma rodada de ajustes.
Crie uma sessão do tipo 🌐 Site, título “Página da barbearia”, aprovação “Perguntar”. Envie:
Vou criar a página com HTML e um CSS separado. Plano: www/index.html, www/css/styles.css…
Pronto. Criei a página inicial e o estilo. Abra o site no celular para conferir o botão de agendamento.
Abra o site. Não gostou de algo? Continue na mesma conversa:
Tire um print dele, cole na caixa de mensagem com Ctrl+V e escreva: “Use este print como referência de layout, com as cores da barbearia.” (Lição 11.)
Intermediário
Trabalhar em um app de verdade: mudar com plano, consertar erros, usar arquivos, skills, automações e controlar custos.
Entendendo um app por dentro
Saber qual peça do FlexAgenda faz o quê — para pedir mudanças com precisão.
Um app tem várias peças que conversam entre si. No FlexAgenda da barbearia:
www/app.jsPergunta ao servidor os horários livresscript/api.jsCalcula vagas e cria o agendamento| Peça | Onde fica | O que faz na barbearia |
|---|---|---|
| Telas do cliente | www/index.html, www/app.js | Login pelo celular, escolha do serviço, barbeiro, dia, horário e confirmação. |
| API pública | script/api.js | Comandos como menu, available-days, available-slots, create-appointment, cancel-appointment. |
| Painel do dono | adm/ | Serviços e preços, barbeiros, horários de funcionamento, agendamentos, WhatsApp, senha. |
| Dados | sandbox/ | menu.json (serviços), profissionais.json (barbeiros), config/config.json (nome, cores, textos). |
| Rotina | thread/agendamento-whatsapp.js | Envia confirmação, lembretes de 24h e 1h e mensagem pós-atendimento. |
Você não precisa decorar isso. O importante é saber que quase toda mudança mexe em duas pontas: a tela (o que o cliente vê) e a API (o que o servidor faz). Um bom pedido deixa claro qual das duas — ou as duas.
Numa sessão nova, envie: “Leia os arquivos do app e me explique, em linguagem simples, como funciona o agendamento do começo ao fim. Não altere nada.” Use aprovação “Somente leitura” para ter certeza de que nada muda.
Exemplo: mudar o app com plano
Usar o “Planejar primeiro” e a lista de tarefas em mudanças maiores.
A barbearia quer que o cliente possa escrever uma observação ao agendar (“quero degradê baixo”). Isso mexe na tela, na API e no painel do dono. Para mudanças assim, marque ☐ Planejar primeiro antes de enviar.
- Tela: campo “Observação” em
www/index.html, enviado porwww/app.js. - API:
create-appointmentaceitaobservacao(até 200 caracteres) e grava na descrição do evento. - Painel: a lista de agendamentos mostra a observação.
- Risco: agendamentos antigos não têm observação — tratar como vazio.
Posso seguir?
No modo plano, o Harness só lê até você aprovar. Leia o plano com calma: é o momento mais barato para corrigir o rumo (“não precisa mudar o painel agora”). Depois de aprovado, ele executa e mostra a lista de tarefas no topo da conversa, riscando cada item concluído.
Sempre que a mudança envolver mais de um arquivo, dados já existentes ou algo que você não sabe bem onde fica. Para ajustes pequenos (“troque a cor do botão”), não precisa.
Como testar
- No celular, faça um agendamento de teste com a observação “teste”.
- No painel do dono, abra Agendamentos e confira se a observação aparece.
- Cancele o agendamento de teste.
Exemplo: consertar um erro
Dar ao Harness as pistas certas.
Um cliente reclama: “No sábado não aparece nenhum horário.” Para consertar bem, o Harness precisa das mesmas pistas que um técnico pediria:
- O que você fez (passo a passo), o que esperava e o que aconteceu.
- Um print da tela com o erro — cole com Ctrl+V.
- A mensagem de erro exata, se houver (copie o texto, não resuma).
Encontrei: o Rafa tem horários próprios em menu.json que não incluem sábado, e eles substituem os horários gerais da barbearia. Posso (a) incluir sábado 9h–15h para o Rafa, ou (b) remover os horários próprios dele para usar os gerais. Qual prefere?
Essa frase evita consertos às cegas. Muitas vezes o problema é de configuração, e não de código — como no exemplo.
Prints, planilhas, Word e PDF
Mostrar em vez de explicar.
Imagens e prints
- Cole um print com Ctrl+V na caixa de mensagem, ou use o 📎. Até 4 imagens por mensagem.
- Ele também abre imagens que já estão no site: “Olhe a foto
www/img/fachada.jpge crie o topo da página com ela.” - Alguns modelos de IA não enxergam imagens. Se for o caso, o painel avisa antes de enviar.
Planilhas (.xlsx), Word (.docx) e PDF
Envie o arquivo pelo Gerenciar Arquivos para uma pasta do sandbox/ e peça:
- Ele lê planilhas, Word e PDF (com texto) e cria planilhas
.xlsxcom fórmulas e formatação de moeda e data. - PDF escaneado (foto de papel) não tem texto: mande prints das páginas.
- Confira valores importantes: em PDF, colunas de tabela podem desalinhar.
Skills: ensinando o Harness
Dar ao Harness as regras do seu negócio de forma permanente.
Uma skill é um manual em texto que o Harness lê antes de trabalhar. Existem dois tipos, na janela 📚 Skills:
- Da plataforma: manuais técnicos da FlexPage (como fazer login seguro, como usar o banco de dados, como criar agentes…). Já vêm prontos.
- Deste site: manuais que você escreve sobre o seu negócio. Valem para todas as sessões deste site.
Exemplo: as regras da barbearia
Crie no seu computador um arquivo regras-barbearia.md (texto simples) e envie em 📚 Skills → Enviar .md:
# Regras da Barbearia Navalha
- Tom de voz: descontraído, sem gírias pesadas. Tratamos o cliente por "você".
- Cores: verde-sálvia #5C7C6B e dourado #C9A87C. Nunca usar vermelho.
- Serviços: Corte R$ 40 (30 min), Barba R$ 30 (20 min), Corte + Barba R$ 65 (50 min).
- Barbeiros: Rafa (não atende sábado) e Léo.
- Cancelamento: até 2 horas antes, sem custo.
- Nunca prometer desconto sem aprovação do dono.O catálogo de skills é carregado quando a sessão abre. Se você enviou uma skill com uma sessão aberta, clique em Encerrar e abra a sessão de novo pela lista. O histórico continua lá.
Automações e avisos
Fazer o Harness trabalhar sozinho em horários marcados.
Em ⏰ Automações você programa uma mensagem para ser enviada a uma sessão automaticamente. É como deixar um bilhete para o Harness: “toda segunda às 8h, faça isto”.
| Campo | Exemplo na barbearia |
|---|---|
| Sessão | “Relatórios da barbearia” |
| Mensagem | “Leia as mensagens de suporte da semana em sandbox/support e me resuma as reclamações mais comuns.” |
| Repetição | Uma vez, todo dia, dias úteis, toda semana ou a cada N horas. |
| Horários | Um ou vários no mesmo dia: 08:00, 12:00, 17:30. |
| Até (data final) | 31/12 — depois disso, ela para. |
| Avisos | E-mail e/ou Telegram, sempre (com a resposta) ou só se der problema. |
- Configure os canais em 🔔 Canais de aviso: no Telegram, cole o token do seu bot, mande uma mensagem ao bot e clique em 🔍 Detectar para achar o seu chat. No e-mail, escolha o provedor e a senha de app.
- Use 📨 Enviar teste para conferir se o aviso chega.
- Crie a automação e use ▶ Rodar agora para testar sem esperar o horário.
O próprio Harness também sugere automações: se você pedir “me lembre na sexta de revisar os preços”, ele propõe o agendamento e você aprova.
A automação manda uma mensagem para o Harness (gasta tokens a cada vez). A rotina (sessão tipo ⏱️ Rotina, pasta thread/) é um programa que o Harness escreve uma vez e o servidor roda sozinho, sem IA — como os lembretes de WhatsApp do FlexAgenda. Para tarefas repetitivas e simples, prefira a rotina.
Marque como “Não é spam” e crie um filtro no seu e-mail para o assunto [FlexPage] com “Nunca enviar para spam”.
Projetos para baixar
Pedir arquivos que não fazem parte do site.
Nem tudo é site. Às vezes você quer uma planilha, um texto ou um programa para levar embora. Para isso existe a sessão 📦 Projeto: tudo fica numa pasta separada (sandbox/_project/<nome>) que não aparece no site.
- Em 📦 Projetos: ⬇ .zip baixa tudo; você pode publicar com link público ou privado (pede uma chave).
- Arquivos que começam com ponto (
.env) nunca saem pelo link público. - O Harness escreve programas em qualquer linguagem, mas não os executa: ele explica no README como rodar no seu computador.
Contexto, tokens e custo
Manter o Harness rápido e a conta sob controle.
Cada mensagem que você manda reenvia a conversa inteira para a IA. Por isso uma sessão longa fica cara e lenta. No topo da conversa você vê o contexto (quanto da memória já foi usado) e os tokens gastos.
| Sinal | O que fazer |
|---|---|
| Contexto acima de ~60% | Clique em Compactar: o Harness resume a conversa e libera memória, sem perder o que importa. |
| Assunto novo | Crie uma sessão nova em vez de continuar a antiga. |
| Ele entrou em loop ou foi longe demais | Clique em Parar e explique o que deve ser feito. |
| Terminou por hoje | Encerrar fecha a sessão viva; o histórico fica guardado para depois. |
| Parou por “limite” no meio de uma tarefa grande | Aparece ▶ Continuar de onde parou. Clique. |
Todo o consumo aparece em 📊 Consumo de Tokens no menu do painel. O administrador pode definir um limite mensal por usuário em Usuários.
Avançado: agentes de IA no seu app
Até aqui a IA trabalhou para você. Agora você vai colocar uma IA para trabalhar para os seus clientes.
O que é um agente
A diferença entre o Harness e um agente — e por que isso importa.
Trabalha para você, no painel. Constrói e reforma o site. Pede sua aprovação.
Trabalha para os seus clientes, dentro do app, 24 horas. Ninguém aprova cada resposta.
Escreve as instruções do recepcionista, define o que ele pode consultar e acompanha o trabalho.
Na barbearia, um agente pode:
- Responder no chat do site: “Vocês abrem sábado? Quanto custa corte + barba?”
- Dizer os horários livres do Rafa amanhã (consultando o app).
- Classificar mensagens de suporte: “reclamação urgente” ou “dúvida simples”.
- Cancelar um agendamento — só depois de o cliente confirmar.
- Atender no WhatsApp com a mesma inteligência.
Por que o agente é seguro por padrão
- Ele não grava nada. Pode, no máximo, ler arquivos que você liberar.
- Tudo que tem efeito passa pelo seu app, através de funções (lição 19). O agente pede; o código do app decide e executa.
- Ele nunca vê chaves nem senhas. A chave de IA fica guardada pelo painel.
- Você liga e desliga quando quiser, e acompanha o consumo.
Liberando os agentes
O primeiro passo, feito uma vez por site.
- No Harness, clique em 🤖 Agentes.
- Clique em ▶ Liberar e confirme.
- Pronto: aparece “✅ Liberado · IA de voce@email.com (provedor · modelo) · limite…”.
Os agentes deste site passam a usar a IA e o limite mensal de tokens de quem liberou. Trocar a IA em Configurar IA atualiza a liberação automaticamente. ⏸ Desligar para todos os agentes na hora — chaves e agentes cadastrados ficam guardados.
O que o agente lê — as mensagens dos clientes, os resultados das consultas — vai para o provedor de IA. Avise isso na política de privacidade do site e não mande para o agente dados que ele não precisa.
Seu primeiro agente: o recepcionista
Cadastrar, escrever boas instruções e testar sem programar.
Em 🤖 Agentes → ➕ Novo agente, preencha:
- Nome
recepcionista(letras minúsculas, números e _)- Descrição
- Tira dúvidas de clientes da Barbearia Navalha
- Instruções
Você é o recepcionista da Barbearia Navalha, no Centro (Rua das Tesouras, 123). Responda em português do Brasil, curto e simpático, tratando o cliente por "você". Serviços: Corte R$ 40 (30 min), Barba R$ 30 (20 min), Corte + Barba R$ 65 (50 min). Horário: seg 13h–19h, ter a sex 10h–19h, sáb 9h–15h. Domingo fechado. Barbeiros: Rafa (não atende sábado) e Léo. Para agendar, indique o site: barbearianavalha.com.br/agendar. Não invente preços, promoções nem horários. Se não souber, diga que vai passar para a equipe pelo WhatsApp (44) 99999-0000.
- Modelo
- Vazio (usa o da IA do site)
- Ferramentas, funções, saída, subagentes
- Vazios por enquanto
Clique em 💾 Salvar agente e depois em ▶ Testar. Faça perguntas como um cliente faria:
Abrimos sim! Sábado das 9h às 15h — só lembrando que aos sábados quem atende é o Léo. O combo Corte + Barba sai por R$ 65 (cerca de 50 min). Para agendar: barbearianavalha.com.br/agendar 😉
Como escrever boas instruções
- Quem é o agente e para quem fala.
- Os fatos que ele pode usar (preços, horários, endereço).
- O tom (curto, simpático, formal…).
- Os limites: o que ele não pode fazer ou prometer, e para onde encaminhar.
“Me dá um desconto?”, “O Rafa trabalha sábado?”, “Qual o melhor corte pra mim?”. Se a resposta não agradar, ajuste as instruções (✏️) e teste de novo. Ajustar instruções não exige mexer em código.
Funções: o agente consulta o app
Deixar o agente perguntar dados reais ao app — com segurança.
O recepcionista sabe os preços porque estão nas instruções. Mas horários livres mudam o tempo todo: só o app sabe. Para isso existem as funções: você declara “o agente pode pedir esta informação”, e o código do app responde.
horarios_livres (Léo, amanhã)Edite o recepcionista e, no campo Funções (JSON), coloque:
[
{
"nome": "horarios_livres",
"descricao": "Lista os horários livres de um barbeiro num dia. Use sempre que o cliente perguntar por vagas.",
"parametros": { "barbeiro": "string", "servico": "string", "data": "string" }
}
]- nome: como o agente chama a função.
- descricao: é por ela que o agente decide quando usar. Seja claro.
- parametros: o que ele precisa informar.
"string"é texto;"string?"(com ?) torna o campo opcional. Também existemnumber,integer,boolean,arrayeobject.
Testando no painel (você faz o papel do app)
No ▶ Testar, pergunte “Tem horário amanhã com o Léo para corte?”. O teste para em ⏸ requer_acao e mostra o pedido do agente:
No campo que aparece, digite o que o app responderia e clique em ↩ Enviar resultados:
{ "horarios": ["10:00", "10:30", "15:00"] }O agente responde com esses horários. Para simular uma falha, digite erro: sistema fora do ar — ele deve pedir desculpas e não inventar horários.
No painel você simula a resposta. No site de verdade, o app precisa ter o código que responde à função (lição 24). Se o agente tiver uma função e o app não souber responder, o chat do site falha. Por isso: cadastre a função e peça ao Harness para implementá-la no mesmo dia.
Respostas organizadas (saída estruturada)
Quando o app precisa de dados, não de uma conversa.
O FlexAgenda recebe mensagens de suporte. Em vez de você ler uma por uma, um agente pode classificar cada mensagem. Para o app entender a resposta, ela precisa vir num formato fixo — é a saída estruturada.
- Instruções
Você classifica mensagens de suporte de clientes da Barbearia Navalha. Assuntos possíveis: agendamento, cancelamento, reclamação, elogio, outro. Urgente = cliente irritado, cobrança indevida ou problema no dia de hoje.
- Saída estruturada
{"assunto": "string", "urgente": "boolean", "resumo": "string"}
Teste com: “Cheguei no horário e o barbeiro não estava, perdi a manhã!”. O resultado vem em dados, já conferido:
{ "assunto": "reclamação", "urgente": true, "resumo": "Cliente não foi atendido no horário marcado." }Com isso, o app pode, por exemplo, mandar as urgentes para o seu WhatsApp e guardar as demais para ler depois.
Conversas com memória
Fazer o agente lembrar do que o cliente já disse.
Por padrão, cada pergunta ao agente é independente. Para um chat, ele precisa lembrar: se o cliente disse “sou o João, cliente do Léo”, na próxima mensagem o agente deve saber.
Isso se faz com um identificador de conversa: um nome único por cliente, como cliente-44999990000 (o celular do cliente logado). Mesma conversa = mesma memória.
Testando no painel
- No ▶ Testar, marque Manter conversa.
- Envie “Sou o João e sempre corto com o Léo”.
- Envie “Com quem eu corto?” — ele responde Léo.
- Clique em 🗑️ Esquecer conversa e pergunte de novo — ele não sabe mais.
- O histórico é guardado com segurança fora das pastas do site e apaga sozinho depois de um prazo sem uso (padrão: 30 dias; campo Guardar conversas no agente).
- Só uma mensagem por vez numa mesma conversa. No site, bloqueie o botão Enviar enquanto a resposta não chega.
- Ofereça ao cliente um botão “limpar conversa”: é dado pessoal dele.
Ações que pedem confirmação
Deixar o agente agir — com o “sim” do cliente.
Consultar horários não muda nada. Já cancelar um agendamento muda. Para funções assim, marque "confirmar": true: o agente pede, mas o app sempre mostra ao cliente o que vai acontecer e só executa depois do “sim”.
{
"nome": "cancelar_agendamento",
"descricao": "Cancela um agendamento do cliente logado pelo código.",
"parametros": { "codigo": "string" },
"confirmar": true
}Não vou conseguir ir amanhã, cancela pra mim.
Pronto, cancelado. Quando quiser remarcar, é só chamar!
O código do app nunca confia no que o agente manda sobre quem é o cliente. O cliente é sempre o que está logado no app. Assim, se alguém escrever “cancele o horário do cliente 42”, o app só consegue cancelar agendamentos de quem está logado.
Subagentes: montando uma equipe
Dividir o trabalho entre especialistas.
Quando um agente acumula muitas tarefas, ele erra mais. A solução é montar uma equipe: um agente principal que delega para especialistas.
horarios_livres)- Cadastre o agente
agenda(descrição “Consulta horários livres”, com a funçãohorarios_livres). - Cadastre o agente
precos(descrição “Informa preços e combos”, com a tabela nas instruções). - Cadastre
recepcaocom as instruções: “Você é a recepção. Horários: delegue ao subagente agenda. Preços: ao subagente precos. Se precisar dos dois, delegue os dois na mesma resposta.” No campo Subagentes, escrevaagenda, precos. Em Segundos, coloque 120. - Teste: “Tem horário sábado com o Léo e quanto custa corte e barba?”
- Delegações na mesma resposta rodam ao mesmo tempo — a resposta sai mais rápido.
- No resultado do teste aparecem as linhas
↳ agendae↳ precoscom o consumo de cada um. O consumo total já vem somado. - Uma função pedida pelo subagente (
horarios_livres) chega ao app normalmente, marcada como “pedida pelo subagente agenda”. - O subagente não vê a conversa: o principal passa para ele tudo o que precisa. Subagentes não têm subagentes próprios.
- Dica de economia: use um modelo mais barato (campo Modelo) nos subagentes de tarefas simples.
Para um recepcionista simples, um agente só é mais rápido e barato. Monte equipes quando as tarefas forem realmente diferentes.
Colocando o agente no site
Pedir ao Harness o chat de atendimento — e conferir o que ele fez.
Com o agente testado no painel, peça ao Harness para criar o chat no site. Use uma sessão 📱 App nova (ela já conhece o manual de agentes):
O que conferir no código que ele propuser
Mesmo sem ser programador, você consegue checar estes pontos no cartão de aprovação do script/api.js:
| Procure | Por quê |
|---|---|
require('HarnessAgent'); | Sinal de que ele usou os agentes do painel, e não uma IA separada. |
new HarnessAgent('recepcionista') | Usa o agente que você cadastrou e testou. |
'cliente-' + algo do usuário logado | A memória é de cada cliente. |
horarios_livres: function | O app responde à função (senão o chat falha). |
logger( quando não for concluido | Se der erro, o motivo fica registrado para você achar depois. |
agente.cancelar( | Uma execução travada não bloqueia a conversa. |
Nenhum AIClient, api_key ou ai_config | A chave de IA nunca passa pelo script do site. |
Para quem programa, este é o coração do que ele escreve:
require('HarnessAgent');
function chatMensagem(body) {
var cliente = clienteLogado(); // vem da sessão, nunca do agente
if (!cliente) return erro(401, 'Faça login');
var agente = new HarnessAgent('recepcionista');
var r = agente.rodar({ texto: body.mensagem, conversa: 'cliente-' + cliente.celular }, {
handlers: {
horarios_livres: function (a) {
return { horarios: horariosLivres(a.barbeiro, a.servico, a.data) };
}
}
});
if (r.status !== 'concluido') {
logger('[chat] ' + r.status + ': ' + (r.erro || '')); // o motivo vai para o log
if (r.execucao && (r.status === 'requer_acao' || r.status === 'executando')) agente.cancelar(r.execucao);
return erro(503, 'Atendimento indisponível agora. Tente de novo em instantes.');
}
return { success: true, resposta: r.texto };
}A sessão foi aberta antes de o manual de agentes existir. Clique em Encerrar, reabra a sessão e peça de novo, citando “leia a skill backend-harness-agent”.
O agente no WhatsApp
Reaproveitar o mesmo agente em outro canal.
O FlexAgenda já recebe mensagens do WhatsApp em script/whatsapp.js (é por ali que chegam as respostas “CONFIRMAR”). O mesmo recepcionista pode responder por lá:
- Mesmo agente, mesmas instruções: ajustou no painel, vale no site e no WhatsApp.
- A conversa do WhatsApp (
wa-…) é separada da do site (cliente-…). - Teste com o seu próprio número antes de divulgar.
Agentes em outros sistemas (API)
Para programadores: usar o agente fora da FlexPage.
Se a barbearia tem outro sistema (um app de celular próprio, um sistema de caixa), ele pode usar os mesmos agentes pela API HTTP.
- Em 🤖 Agentes → Chaves da API HTTP, crie uma chave com um nome (“app do celular”). Copie na hora: ela não aparece de novo.
- Guarde a chave só no servidor do outro sistema. Nunca em página de navegador ou no app instalado no celular.
- Chame a API:
curl -X POST 'https://admin.flexpage.io/api.js?cmd=fp-agent-run' \
-H "Authorization: Bearer $CHAVE" -H 'Content-Type: application/json' \
-d '{"agente":"recepcionista","entrada":{"texto":"Vocês abrem domingo?","conversa":"app-123"}}'| Comando | Para quê |
|---|---|
fp-agent-run | Envia uma mensagem ao agente. |
fp-agent-continue | Devolve o resultado de uma função (requer_acao). |
fp-agent-status | Consulta uma execução demorada (executando). |
fp-agent-history / fp-agent-forget | Lê ou apaga o histórico de uma conversa. |
fp-agent-cancel / fp-agent-list | Cancela uma execução / lista os agentes cadastrados. |
A resposta traz status (concluido, requer_acao, executando, falhou, cancelado), texto, dados, acoes e consumo. Chave errada ou revogada devolve HTTP 401.
Acompanhando uso e conversas
Saber quanto cada agente gasta e o que ele conversa.
Em 🤖 Agentes → 📊 Uso do mês e conversas:
- Tabela de uso: chamadas e tokens do mês por agente e origem (
script= site,api= outros sistemas,painel= seus testes). Linhas comorecepcao > agendasão as delegações. - Conversas: escolha o agente e veja as conversas guardadas. 👁 Ver mostra as trocas; 🗑️ apaga (por exemplo, quando o cliente pedir).
É a melhor forma de melhorar o agente: você descobre perguntas que ele não sabia responder e acrescenta a informação nas instruções.
Consulta rápida
Problemas comuns, boas práticas e pedidos prontos para copiar.
Quando algo dá errado
Os problemas mais comuns e a saída de cada um.
| Sintoma | Causa provável | O que fazer |
|---|---|---|
| O Harness diz que uma skill não existe | A sessão foi aberta antes de a skill ser enviada | Encerrar e reabrir a sessão |
| Alterei e o site não mudou | Cache do navegador | Ctrl+F5 ou aba anônima |
| Ficou lento e caro | Contexto cheio | Compactar ou sessão nova |
| Parou no meio (“limite”) | Tarefa grande | ▶ Continuar de onde parou |
| Erro de servidor (“HTTP 500”) na IA | Instabilidade do provedor | Espere um pouco e envie “continue” |
| Chat do site diz “indisponível” | O agente pediu uma função que o app não responde, ou os agentes estão desligados | Veja o log do script; confira as funções do agente e se está Liberado |
| Toda mensagem falha por alguns minutos | Uma execução ficou pendente na mesma conversa | Espere 15 min; peça ao Harness para usar agente.cancelar nesses casos |
| O agente diz “vou verificar” e para | Instrução ou descrição da função pouco clara | Deixe explícito: “use horarios_livres para consultar vagas” |
| “Limite mensal de tokens atingido” | O limite da conta acabou | Fale com o administrador (Usuários) |
| Não consigo entrar no painel | Configuração do usuário inválida ou senha | Fale com o administrador |
Boas práticas e segurança
Hábitos que evitam 90% dos problemas.
- Trabalhe no modo “Perguntar” até ter confiança. Leia o caminho de cada arquivo antes de permitir.
- Uma sessão por assunto, com título claro.
- Teste tudo como o cliente faria, de preferência no celular.
- Nunca cole senhas, chaves ou tokens na conversa. Configure-os pelas telas próprias do painel (Configurar IA, Canais de aviso, configurações de integrações).
- Nada de dados de clientes nas instruções dos agentes. Os dados vêm do app, na hora, só do cliente logado.
- Ações com efeito = confirmação (
"confirmar": true). - Avise na política de privacidade que as mensagens do chat são processadas por IA.
- Revise o consumo em 📊 Consumo de Tokens e no uso dos agentes.
- Guarde o que funciona numa skill do site: regras do negócio, tom de voz, cores.
Cola de pedidos prontos
Copie, troque os dados da barbearia pelos seus e envie.