FlexPage · Tutorial completo

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.

✂️ Exemplo: Barbearia Navalha ⏱️ Leitura: cerca de 1h30 🎯 Para iniciantes e programadores júnior
O exemplo que vamos usar do começo ao fim

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.

Parte 1

Comece aqui

O que é essa ferramenta, as palavras que ela usa e onde fica cada botão.

01

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.

Um chat comum de IA

Responde perguntas e sugere código, mas você copia, cola e publica. Ele não enxerga seu site.

O Harness

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.

Um agente (Parte 4)

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.
Pense assim

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.

02

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.

www/index.html → barbearianavalha.com.br
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.

script/api.js → barbearianavalha.com.br/api
sandbox/

O cofre. Dados e configurações privadas: cadastros, senhas protegidas, chaves de serviços.

sandbox/menu.json (serviços e preços)
thread/

Tarefas automáticas. Programas que o servidor roda sozinho, mais ou menos a cada minuto.

thread/agendamento-whatsapp.js (lembretes)
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.
03

Conhecendo a tela

Onde fica cada botão do Harness.

  1. Entre no painel admin.flexpage.io.
  2. Em Selecionar URL, escolha o site (ex.: barbearianavalha.com.br).
  3. 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.
Não aparece o Harness no seu menu?

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.

Parte 2

Básico

Criar uma sessão, fazer um bom pedido, aprovar com segurança e publicar a primeira página.

04

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?”

Site

Página ou landing em www/.

Ex.: a página de apresentação da barbearia.
App

Telas em www/ e API em script/.

Ex.: o próprio FlexAgenda, um chat de atendimento.
Webhook

Recebe aviso de outro sistema.

Ex.: “pagamento do sinal aprovado”.
Rotina

Roda sozinha de tempos em tempos.

Ex.: lembrete no WhatsApp 1h antes do corte.
Livre

Sem foco definido.

Ex.: tirar dúvidas, corrigir um script pequeno.
Projeto

Código, planilha ou texto para baixar.

Ex.: planilha de faturamento do mês.

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çãoO que escolherPor quê
TítuloAlgo que você reconheça depois: “Chat de atendimento”.Aparece na lista de sessões.
AprovaçãoPerguntar 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ínioPadrã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 resposta32 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.

Uma sessão por assunto

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.

05

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:

  1. O quê? O resultado que você quer ver.
  2. Para quem? Quem vai usar (cliente no celular, você no computador…).
  3. Com quais informações? Nomes, preços, horários, cores, textos reais.
  4. 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.
06

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:

write www/index.html · ⌛ executando
⚠️ O agente quer executar: write
Gravar www/index.html (8420 bytes)
✅ Permitir⛔ Recusar
  • O nome da ferramenta diz o tipo de ação: write cria ou substitui um arquivo inteiro; edit troca um trecho; append acrescenta 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.
Quando desconfiar

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.

Depois de aprovar, confira no navegador

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.

07

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:

Você
Crie a página inicial da Barbearia Navalha em www/index.html, para clientes que abrem no celular. Seções: topo com o nome e o slogan “Cortes clássicos e modernos”; serviços com preço e duração (Corte R$ 40 · 30 min, Barba R$ 30 · 20 min, Corte + Barba R$ 65 · 50 min); horários (seg 13h–19h, ter a sex 10h–19h, sáb 9h–15h); endereço Rua das Tesouras, 123 – Centro; botão grande “Agendar horário” levando para /agendar e botão de WhatsApp (44) 99999-0000. Cores #5C7C6B e #C9A87C. Se faltar algo, me pergunte antes.
Harness

Vou criar a página com HTML e um CSS separado. Plano: www/index.html, www/css/styles.css…

write www/index.html ✓
write www/css/styles.css ✓
Harness

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:

Você
No celular o botão “Agendar horário” está pequeno e a lista de serviços ficou apertada. Aumente o botão para ocupar a largura toda e mostre os serviços um embaixo do outro.
Quer copiar o visual de um site que você gosta?

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.)

Parte 3

Intermediário

Trabalhar em um app de verdade: mudar com plano, consertar erros, usar arquivos, skills, automações e controlar custos.

08

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:

Cliente no celularEscolhe corte, barbeiro, dia e horário
Tela www/app.jsPergunta ao servidor os horários livres
API script/api.jsCalcula vagas e cria o agendamento
Google AgendaO horário vira um evento na agenda do barbeiro
PeçaOnde ficaO que faz na barbearia
Telas do clientewww/index.html, www/app.jsLogin pelo celular, escolha do serviço, barbeiro, dia, horário e confirmação.
API públicascript/api.jsComandos como menu, available-days, available-slots, create-appointment, cancel-appointment.
Painel do donoadm/Serviços e preços, barbeiros, horários de funcionamento, agendamentos, WhatsApp, senha.
Dadossandbox/menu.json (serviços), profissionais.json (barbeiros), config/config.json (nome, cores, textos).
Rotinathread/agendamento-whatsapp.jsEnvia 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.

Peça um tour

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.

09

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.

Você · com “Planejar primeiro” marcado
Quero que o cliente possa escrever uma observação opcional (até 200 caracteres) na tela de confirmação do agendamento. Ela deve ir junto com o agendamento e aparecer para o dono na lista de agendamentos do painel. Não mude mais nada.
read www/app.js ✓ · read script/api.js ✓ · grep “create-appointment” ✓
Harness · plano
  • Tela: campo “Observação” em www/index.html, enviado por www/app.js.
  • API: create-appointment aceita observacao (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.

Quando usar “Planejar primeiro”

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

  1. No celular, faça um agendamento de teste com a observação “teste”.
  2. No painel do dono, abra Agendamentos e confira se a observação aparece.
  3. Cancele o agendamento de teste.
10

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).
Você · com print anexado
No site, escolhi Corte com o Rafa e cliquei em sábado 20/09. Esperava ver horários entre 9h e 15h, mas aparece “Nenhum horário disponível” (print anexo). Nos outros dias funciona. Investigue a causa antes de alterar e me explique o que encontrou.
Harness

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?

“Investigue antes de alterar”

Essa frase evita consertos às cegas. Muitas vezes o problema é de configuração, e não de código — como no exemplo.

11

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.jpg e 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:

Você
Leia a tabela de preços do fornecedor em sandbox/uploads/fornecedor.pdf e me diga quais produtos subiram mais de 10% em relação à planilha sandbox/uploads/precos-2025.xlsx. Diga em qual página do PDF achou cada valor.
  • Ele planilhas, Word e PDF (com texto) e cria planilhas .xlsx com 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.
12

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-barbearia.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.
Skill nova só vale ao reabrir a sessão

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á.

13

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”.

CampoExemplo 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çãoUma vez, todo dia, dias úteis, toda semana ou a cada N horas.
HoráriosUm ou vários no mesmo dia: 08:00, 12:00, 17:30.
Até (data final)31/12 — depois disso, ela para.
AvisosE-mail e/ou Telegram, sempre (com a resposta) ou só se der problema.
  1. 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.
  2. Use 📨 Enviar teste para conferir se o aviso chega.
  3. 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.

Automação × Rotina

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.

O e-mail de aviso caiu no spam?

Marque como “Não é spam” e crie um filtro no seu e-mail para o assunto [FlexPage] com “Nunca enviar para spam”.

14

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.

Você · sessão Projeto
Crie o projeto controle-barbearia com uma planilha controle.xlsx: aba Serviços (Corte R$ 40, Barba R$ 30, Corte + Barba R$ 65), aba Atendimentos com data, cliente, serviço, barbeiro e valor, e aba Resumo com o total por barbeiro e por mês usando fórmulas.
  • 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.
15

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.

SinalO que fazer
Contexto acima de ~60%Clique em Compactar: o Harness resume a conversa e libera memória, sem perder o que importa.
Assunto novoCrie uma sessão nova em vez de continuar a antiga.
Ele entrou em loop ou foi longe demaisClique em Parar e explique o que deve ser feito.
Terminou por hojeEncerrar fecha a sessão viva; o histórico fica guardado para depois.
Parou por “limite” no meio de uma tarefa grandeAparece ▶ 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.

Parte 4

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.

16

O que é um agente

A diferença entre o Harness e um agente — e por que isso importa.

Harness = o reformador

Trabalha para você, no painel. Constrói e reforma o site. Pede sua aprovação.

Agente = o recepcionista

Trabalha para os seus clientes, dentro do app, 24 horas. Ninguém aprova cada resposta.

Você = o gerente

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.
17

Liberando os agentes

O primeiro passo, feito uma vez por site.

  1. No Harness, clique em 🤖 Agentes.
  2. Clique em ▶ Liberar e confirme.
  3. Pronto: aparece “✅ Liberado · IA de voce@email.com (provedor · modelo) · limite…”.
O que “liberar” significa

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.

Privacidade

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.

18

Seu primeiro agente: o recepcionista

Cadastrar, escrever boas instruções e testar sem programar.

Em 🤖 Agentes → ➕ Novo agente, preencha:

🤖 recepcionista
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:

Teste
Vocês abrem sábado? Quanto fica corte e barba?
recepcionista

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.
Teste perguntas difíceis

“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.

19

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.

1. Cliente“Tem horário amanhã com o Léo?”
2. Agente pedehorarios_livres (Léo, amanhã)
3. O app consultaUsa a mesma regra da tela de agendamento
4. Agente responde“Tenho 10h, 10h30 e 15h!”

Edite o recepcionista e, no campo Funções (JSON), coloque:

Funções do recepcionista
[
  {
    "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 existem number, integer, boolean, array e object.

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:

🔧 horarios_livres { "barbeiro": "Léo", "servico": "Corte", "data": "2026-09-19" }

No campo que aparece, digite o que o app responderia e clique em ↩ Enviar resultados:

Resultado de teste
{ "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.

Função cadastrada exige código no app

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.

20

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.

🤖 triagem_suporte
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:

dados
{ "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.

21

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

  1. No ▶ Testar, marque Manter conversa.
  2. Envie “Sou o João e sempre corto com o Léo”.
  3. Envie “Com quem eu corto?” — ele responde Léo.
  4. 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.
22

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”.

Função com confirmação
{
  "nome": "cancelar_agendamento",
  "descricao": "Cancela um agendamento do cliente logado pelo código.",
  "parametros": { "codigo": "string" },
  "confirmar": true
}
Cliente

Não vou conseguir ir amanhã, cancela pra mim.

Cancelar o agendamento Corte com Léo · 19/09 às 10h?
Sim, cancelarNão
recepcionista

Pronto, cancelado. Quando quiser remarcar, é só chamar!

Regra de ouro de segurança

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.

23

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.

recepcaoConversa com o cliente e decide quem chamar
agendaConsulta horários (tem a função horarios_livres)
precosSabe a tabela de preços e combos
  1. Cadastre o agente agenda (descrição “Consulta horários livres”, com a função horarios_livres).
  2. Cadastre o agente precos (descrição “Informa preços e combos”, com a tabela nas instruções).
  3. Cadastre recepcao com 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, escreva agenda, precos. Em Segundos, coloque 120.
  4. 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 ↳ agenda e ↳ precos com 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.
Quando não usar

Para um recepcionista simples, um agente só é mais rápido e barato. Monte equipes quando as tarefas forem realmente diferentes.

24

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):

Você · sessão App
Crie uma página www/atendimento.html com um chat que usa o agente cadastrado "recepcionista" (leia a skill backend-harness-agent). Só para clientes logados no FlexAgenda. Use a conversa 'cliente-' + celular do cliente logado, e o histórico do agente para reabrir a conversa ao recarregar. A função horarios_livres deve usar a mesma regra de available-slots, com o barbeiro e o serviço informados. Limite de 40 mensagens por dia por cliente. Mostre as respostas convertendo negrito e listas sem usar innerHTML.

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:

ProcurePor 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 logadoA memória é de cada cliente.
horarios_livres: functionO app responde à função (senão o chat falha).
logger( quando não for concluidoSe 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_configA chave de IA nunca passa pelo script do site.

Para quem programa, este é o coração do que ele escreve:

script/api.js (trecho)
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 };
}
Ele usou “AIClient” em vez de HarnessAgent?

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”.

25

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á:

Você · sessão App
No script/whatsapp.js, quando chegar uma mensagem de texto que não seja resposta de confirmação de presença nem parte do fluxo de agendamento pelo bot, responda usando o agente "recepcionista" com a conversa 'wa-' + número do remetente. Mantenha tudo o que já funciona. Registre no log qualquer falha do agente e, se falhar, responda "Já já alguém da equipe te responde."
  • 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.
26

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.

  1. Em 🤖 Agentes → Chaves da API HTTP, crie uma chave com um nome (“app do celular”). Copie na hora: ela não aparece de novo.
  2. Guarde a chave só no servidor do outro sistema. Nunca em página de navegador ou no app instalado no celular.
  3. Chame a API:
terminal
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"}}'
ComandoPara quê
fp-agent-runEnvia uma mensagem ao agente.
fp-agent-continueDevolve o resultado de uma função (requer_acao).
fp-agent-statusConsulta uma execução demorada (executando).
fp-agent-history / fp-agent-forgetLê ou apaga o histórico de uma conversa.
fp-agent-cancel / fp-agent-listCancela 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.

27

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 como recepcao > agenda são as delegações.
  • Conversas: escolha o agente e veja as conversas guardadas. 👁 Ver mostra as trocas; 🗑️ apaga (por exemplo, quando o cliente pedir).
Leia algumas conversas por semana

É a melhor forma de melhorar o agente: você descobre perguntas que ele não sabia responder e acrescenta a informação nas instruções.

Parte 5

Consulta rápida

Problemas comuns, boas práticas e pedidos prontos para copiar.

28

Quando algo dá errado

Os problemas mais comuns e a saída de cada um.

SintomaCausa provávelO que fazer
O Harness diz que uma skill não existeA sessão foi aberta antes de a skill ser enviadaEncerrar e reabrir a sessão
Alterei e o site não mudouCache do navegadorCtrl+F5 ou aba anônima
Ficou lento e caroContexto cheioCompactar ou sessão nova
Parou no meio (“limite”)Tarefa grande▶ Continuar de onde parou
Erro de servidor (“HTTP 500”) na IAInstabilidade do provedorEspere 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 desligadosVeja o log do script; confira as funções do agente e se está Liberado
Toda mensagem falha por alguns minutosUma execução ficou pendente na mesma conversaEspere 15 min; peça ao Harness para usar agente.cancelar nesses casos
O agente diz “vou verificar” e paraInstrução ou descrição da função pouco claraDeixe explícito: “use horarios_livres para consultar vagas”
“Limite mensal de tokens atingido”O limite da conta acabouFale com o administrador (Usuários)
Não consigo entrar no painelConfiguração do usuário inválida ou senhaFale com o administrador
29

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.
30

Cola de pedidos prontos

Copie, troque os dados da barbearia pelos seus e envie.

Entender um app sem mexer
Leia os arquivos do app e me explique, em linguagem simples, como funciona do começo ao fim. Não altere nada.
Mudança segura
Antes de alterar, investigue e me mostre um plano com os arquivos que vai mudar. Não mexa em nada além do necessário.
Visual a partir de print
Use o print anexo como referência de layout, mas com as cores e os textos da minha empresa. Funcione bem no celular.
Relatar erro
Fiz [passos]. Esperava [resultado]. Aconteceu [o que aconteceu] (print anexo). Investigue a causa antes de alterar e me explique.
Planilha para baixar
Crie o projeto [nome] com uma planilha .xlsx com as abas [abas], com fórmulas de total e formatação de moeda.
Chat com agente no site
Crie um chat em www/atendimento.html usando o agente cadastrado "[nome]" (leia a skill backend-harness-agent), só para usuários logados, com a conversa 'cliente-' + id do usuário logado, histórico ao recarregar, log do motivo quando não concluir e cancelamento de execução pendente. Sem innerHTML nas respostas.
Implementar função do agente
O agente "[nome]" tem a função [função] com os parâmetros [parâmetros]. Implemente o handler dela no script/api.js usando os dados do usuário logado, nunca os argumentos do agente para identificar o cliente.