croct-tech/agent-skills

Use esta habilidade ao instalar ou usar um SDK Croct no código da aplicação: renderização de conteúdo de slot, avaliação de consultas CQL, busca no servidor ou cliente, pré-renderização, identificação de usuários, variáveis de ambiente de ID do aplicativo / chave de API, teste ou depuração.

O que é agent-skills?

Esta habilidade fornece um guia abrangente e estruturado para integrar qualquer SDK da Croct em uma aplicação, seja ela JavaScript, React, Next.js, Vue, Nuxt, Shopify Hydrogen, PHP (Laravel, Symfony, Drupal) ou Storyblok. Ela orienta o desenvolvedor desde a detecção correta da pilha tecnológica e instalação do SDK (via CLI ou manual), até a renderização de conteúdo de slots, avaliação de consultas CQL e identificação de usuários. A habilidade enfatiza práticas recomendadas, como sempre fixar versões de slots, fornecer conteúdo de fallback e inicial, e distinguir entre renderização no servidor e no cliente. Além disso, cobre a configuração de credenciais (App ID e API Key) por ambiente, a resolução de erros comuns e a utilização de funcionalidades avançadas como tokens assinados, atributos de contexto e hooks específicos de cada framework. É compatível com as plataformas mais comuns no ecossistema Croct, incluindo Next.js, Nuxt, Hydrogen e os principais frameworks PHP, e se baseia na documentação oficial e no CLI da Croct para automação do setup.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/croct-tech/agent-skills/tree/HEAD/skills/croct-integrate-sdk

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

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

Documentação

Integrar um SDK Croct

Conecte um SDK Croct a um aplicativo para renderizar conteúdo de slot, avaliar CQL e identificar usuários. O conteúdo e os públicos residem no dashboard da Croct; o código apenas referencia slots por ID e versão e fornece um fallback.

Fluxo de Trabalho

- [ ] 1. Detecte a pilha e escolha o SDK (tabela abaixo)
- [ ] 2. Instale com o CLI (`croct init`, executado pelo usuário), apenas manual se solicitado ou o CLI não puder ser executado
- [ ] 3. Adicione o slot com o CLI (`npx croct@latest add slot home-hero@1 --example`) para tipos + fallback
- [ ] 4. Renderize-o: no servidor quando o framework permitir, caso contrário no cliente
- [ ] 5. Identifique/anonimize usuários no login/logout (ou passe o ID do usuário na inicialização)
- [ ] 6. Verifique: a página de Integração mostra "Tráfego recebido nas últimas 24 horas"; caso contrário, ative o modo de depuração

1. Escolha o SDK

Leia package.json / composer.json primeiro. Escolha o SDK mais específico para o framework; nunca use o SDK JavaScript simples dentro de React, Next.js, Vue, Nuxt ou Hydrogen.

PilhaPacoteInicialize comRenderização no servidorReferência
JS simples, qualquer bundler ou tag <script>@croct/plug (ou https://cdn.croct.io/js/v1/lib/plug.js)croct.plug({appId}) uma vez na inicializaçãofetchContent/evaluate standalone de @croct/plug/api com apiKeyjavascript.md
React (SPA, Vite, qualquer SSR que não seja Next)@croct/plug-react<CroctProvider appId="..."> na raizHooks do cliente precisam de initial; @croct/plug-react/api de baixo nívelreact.md
Next.js (App ou Pages Router)@croct/plug-nextmiddleware (≤15) / proxy (≥16) + <CroctProvider> de @croct/plug-next/CroctProviderSim: @croct/plug-next/servernextjs.md
Vue@croct/plug-vueapp.use(createCroct({appId}))Composables/componentes; SSR precisa de valores iniciaisvue.md
Nuxt@croct/plug-nuxtmodules: ['@croct/plug-nuxt'] no nuxt.configSimnuxt.md
Shopify Hydrogen (React Router 7 ou Remix)@croct/plug-hydrogenPlugin Vite + createCroctMiddleware / createCroctContext de @croct/plug-hydrogen/serverSimhydrogen.md
PHP simplescroct/plug-php (+ um cliente PSR-18, ex. guzzlehttp/guzzle nyholm/psr7)Croct::fromDotenv() depois Croct::emitCookies() antes da saídaSim (servidor primeiro)php.md
Laravelcroct/plug-laravelCredenciais no .envSimlaravel.md
Symfonycroct/plug-symfony symfony/twig-bundleRegistre o bundle em config/bundles.php + credenciais no .envSim (Twig)symfony.md
Drupalcroct/plug-drupalHabilite o módulo; credenciais em settings.php; reconstrua o cacheSimdrupal.md
Storyblok (JS ou PHP)—Use a habilidade croct-integrate-platforms——
Linguagem não suportada ou HTTP bruto—Use a habilidade croct-use-api——

2. Instalar

Todas as páginas de integração dos SDKs, incluindo PHP, Laravel, Symfony, Drupal e Hydrogen, recomendam o CLI. O init é interativo e precisa de uma sessão autenticada, então peça ao usuário para executá-lo na raiz do projeto em seu próprio terminal:

npx croct@latest init

croct init detecta o framework, faz login, seleciona a organização/workspace/aplicação, instala o SDK correspondente e configura a estrutura (provider, middleware, variáveis de ambiente). Quando o usuário já tem uma sessão e conhece os IDs, você pode executar a forma não interativa você mesmo: npx croct@latest --no-interaction init --sdk next --org <org> --wor <workspace> --dev-app <dev-app> --prod-app <prod-app> (--sdk aceita apenas javascript, react, vue, next, nuxt; omita para detecção automática). Flags, uso em CI e croct.json estão na habilidade croct-use-cli. Recorra às etapas manuais no arquivo de referência do framework apenas quando o usuário solicitar ou o CLI não puder ser executado.

3. Adicionar o slot

Sempre passe o ID e a versão do slot. Sem eles, o CLI pede um slot, o que você não pode responder:

npx croct@latest add slot home-hero@1 --example

Isso gera tipos TypeScript (então useContent('home-hero@1') / fetchContent('home-hero@1') são tipados), baixa o conteúdo padrão do slot como fallback automático e escreve um exemplo funcional. Execute croct install / croct update novamente para ressincronizar após alterações no dashboard (veja croct-use-cli).

Conceitos principais (todos os SDKs)

IDs e versões de slot

  • Referencie um slot como <id>@<versão>, ex. home-hero@1. Sem versão (home-hero) significa home-hero@latest.
  • Sempre fixe uma versão. Slots não fixados captam alterações de esquema de quebra imediatamente. Quando o dashboard cria uma nova versão principal, o aplicativo continua recebendo a versão antiga até que o código seja atualizado.
  • Digite o conteúdo com SlotContent<'home-hero@1'> e ComponentContent<'card@1'> (exportado por @croct/plug, @croct/plug-react, @croct/plug-next). Slots de união resolvem para uma união discriminada em _type.

Conteúdo fallback, padrão e inicial

TermoO que éDe onde vem
Conteúdo padrãoConteúdo do slot mostrado quando nenhuma experiência corresponde, o locale não tem nenhum, o conteúdo estático é solicitado ou a recuperação falhaDashboard
FallbackValor renderizado quando a requisição falhaOpção fallback no código, senão conteúdo padrão baixado pelo CLI (@croct/content)
Inicial (hooks do cliente React/Next)Valor renderizado durante SSR/pré-renderização e enquanto carrega no clienteOpção initial; o CLI adiciona automaticamente

Ordem de resolução no SDK: conteúdo dinâmico → fallback explícito → conteúdo padrão do CLI → erro. Sem fallback e sem conteúdo do CLI, uma busca falha gera uma exceção (JS croct.fetch rejeita). Leia o conteúdo do CLI diretamente com getSlotContent(slotId, locale?) / loadSlotContent(slotId, locale?) de @croct/content (prefira o assíncrono com divisão de código).

Renderização cliente vs servidor

NecessidadeFaça
Conteúdo final no primeiro HTML, sem flicker, rastreávelBusque no servidor (Next fetchContent de @croct/plug-next/server, Nuxt, Hydrogen, família PHP)
A página deve permanecer um arquivo estático / CDN / output: 'export'Hooks/componentes do cliente com um valor initial ou um limite <Suspense>
Seção abaixo da dobra onde um esqueleto é aceitávelLado do cliente é suficiente
Renderização no servidor em React simples / SSR personalizadofetchContent / evaluate de @croct/plug-react/api (ou @croct/plug/api) com apiKey, depois passe o conteúdo como props

Requisições no servidor autenticam com uma chave de API (nunca a envie para o navegador); requisições no cliente usam o ID do aplicativo. Passar appId e apiKey para uma função standalone é um erro.

Avaliação de consultas

Avalie CQL em tempo de execução com croct.evaluate(query, {attributes}) (JS), useEvaluation / <Personalization> (React/Next cliente), ou evaluate / cql`...` (Next servidor). Consultas são limitadas a 500 caracteres; resultados podem ser qualquer JSON ('location' retorna um objeto). Sempre forneça um fallback (.catch(() => false) ou fallback: false). Sintaxe CQL: habilidade croct-cql.

Avaliação ou slot? A documentação apresenta slots como a forma de atualizar conteúdo sem alterações de código; uma consulta avaliada vive no código e muda apenas com um deploy.

NecessidadeUse
Conteúdo, público ou rollout que profissionais de marketing alteram, agendam ou testam A/BUm slot mais uma experiência (veja croct-personalize-and-test)
Lógica fixada pela engenharia (mostrar/esconder um widget, ramificar em uma condição), sem conteúdo para editarevaluate / useEvaluation com um fallback

Atributos de contexto

Passe dados específicos do aplicativo (plano, estado do carrinho) como attributes (JS/React) ou context.attributes (Next servidor, funções standalone); leia em CQL como context's plan is "premium". Limites: até 30 entradas, 5 níveis de profundidade, chaves ≤ 50 caracteres, valores string ≤ 50 caracteres.

Credenciais e variáveis de ambiente

PilhaID do aplicativoChave de API
Next.jsNEXT_PUBLIC_CROCT_APP_IDCROCT_API_KEY
NuxtNUXT_PUBLIC_CROCT_APP_IDNUXT_CROCT_API_KEY
HydrogenPUBLIC_CROCT_APP_IDCROCT_API_KEY
PHP, Laravel, SymfonyCROCT_APP_IDCROCT_API_KEY
Drupal$settings['croct.app_id']$settings['croct.api_key']
JavaScript, React, VueOpção appId / propapenas funções standalone no servidor
  • Encontre o ID do aplicativo na página de Integração do aplicativo; crie chaves na página de chaves de API.
  • Para SDKs de servidor que emitem tokens de usuário (Next.js), a chave de API precisa da permissão Emitir tokens de usuário.
  • Cada ambiente tem seu próprio aplicativo. Um ID de aplicativo de produção usado em localhost (ou vice-versa) falha com credenciais inválidas.

Identificar e anonimizar

  • Chame identify(userId) no login/cadastro e anonymize() no logout. Mudanças de identidade encerram a sessão atual e iniciam uma nova.
  • Se o usuário já estiver logado quando a página carregar, passe o ID na inicialização (userId em croct.plug / <CroctProvider>) para que o SDK não crie uma sessão anônima extra.
  • userId deve ser uma string; converta IDs numéricos (preferencialmente no servidor). Prefira IDs aleatórios (UUID v4) em vez de e-mails ou números sequenciais.
  • Quando Exigir token assinado estiver ativado nas configurações do aplicativo, userId/identify (tokens não assinados) falham; passe um token assinado em vez disso. O Next.js assina tokens para você com CROCT_API_KEY.
  • Next.js: prefira withCroct({userIdResolver}) no middleware/proxy para manter o token sincronizado com a sessão de autenticação em cada requisição.

Opções de plug que vale a pena conhecer

appId, debug, test, track (rastreamento automático, padrão true), userId / token (mutuamente exclusivos), tokenScope (global | isolated | contextual), defaultFetchTimeout (JS/React 5000 ms; Next 2000 ms), defaultPreferredLocale, baseEndpointUrl (servidores mock), cookie (armazenar ID do cliente / token do usuário / token de pré-visualização em cookies primários), eventMetadata, urlSanitizer, logger. Lista completa: javascript.md.

Rastreamento e coleta de dados

Rastreie metas com croct.track('goalCompleted', {goalId}); edite perfil/sessão com croct.user.edit().set(...).save() / croct.session.edit(). Catálogo de eventos, eventos recomendados e regras de atributos: habilidade croct-track-events.

Armadilhas

Faça:

  • Fixe versões de slot (home-hero@1) e mantenha fallbacks (conteúdo padrão do CLI ou explícito).
  • Forneça initial (ou <Suspense>) para cada useContent/useEvaluation do cliente que possa renderizar no servidor.
  • Chame métodos do Plug somente do lado do cliente (useCroct().track, identify, user.edit) dentro de useEffect ou manipuladores de evento, nunca durante a renderização.
  • Adicione todo domínio que carrega o SDK às Origens confiáveis do aplicativo.
  • Ative o modo de depuração primeiro quando algo estiver errado (debug: true, NEXT_PUBLIC_CROCT_DEBUG=true), depois verifique a aba Network.

Não faça:

  • Chame croct.plug duas vezes (chame unplug() primeiro) ou chame qualquer método antes de plug ("Croct is not plugged in").
  • Coloque a chave de API no código do cliente ou em variáveis NEXT_PUBLIC_*.
  • Especifique o ID do aplicativo tanto na tag script ?appId= quanto no plug (erro de ID do aplicativo conflitante).
  • Chame o Next fetchContent em uma rota que você deseja que permaneça estática; isso faz a rota optar pela renderização dinâmica. Use hooks do cliente lá.
  • Use a tag cql fora do Next.js App Router; use evaluate com route.

Erros comuns

ErroCorreção
Croct is not plugged in.Chame croct.plug na inicialização antes de outras chamadas
The app ID must be specified when it cannot be auto-detected.Passe appId (ou ?appId= na tag script)
The request was not authorized, most likely due to invalid credentials.ID do aplicativo errado, ambiente errado, token expirado/adulterado (limpe cookies + armazenamento local), ou token não assinado com Exigir token assinado ativado
Erro CORS / The origin of the request is not allowed in your application settings.Adicione o domínio em Origens confiáveis
The user ID must be a string.Converta o ID para string
The request timed out.Aumente timeout / tempo limite padrão; verifique X-Croct-Timing / X-Croct-Region nos logs de depuração
The query is too complex.Consulta com mais de 500 caracteres; simplifique, divida ou passe dados via atributos
The service is temporarily suspended.Não é um bug de código: workspace suspenso ou tráfego de bot (X-Suspension-Reason); mantenha fallbacks
The application has exceeded the monthly active users (MAU) quota.Faça upgrade do plano ou aguarde o próximo ciclo
useCroct() can only be used in the context of a <CroctProvider> component.Envolva a árvore em <CroctProvider>
The initial content/value is required for server-side rendering (SSR).Adicione initial, ou busque no servidor
Did you forget to configure Croct's middleware?Adicione middleware/proxy do Next
someFunction() requires specifying the route parameter outside app routes.Passe route: context (Pages Router/rotas de API)
Did you forget to set the SOME_ENV_VAR environment variable?Defina NEXT_PUBLIC_CROCT_APP_ID / CROCT_API_KEY
Conteúdo não atualizado após publicação (sem erro)Hooks do cliente armazenam resultados em cache por expiration (60 s, estendido a cada renderização); mude cacheKey para forçar uma nova busca. Verifique se a alteração foi publicada, não é um rascunho. Uma versão fixada (home-hero@1) nunca recebe uma nova versão principal: execute croct upgrade. Fallback desatualizado após uma requisição com falha: croct update atualiza o conteúdo padrão do CLI

Índice de referência

Carregue apenas o arquivo para a pilha em uso.

  • references/javascript.md — @croct/plug: opções de plug, fetch, evaluate, test, identidade, patches, @croct/plug/api standalone, teste, erros.
  • references/react.md — @croct/plug-react: provider, useContent, <Slot>, useEvaluation, <Personalization>, useCroct, valores iniciais SSR, teste.
  • references/nextjs.md — @croct/plug-next: inicialização, middleware/proxy,

...

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

croct-tech/agent-skills

>- Use when writing, reading, reviewing, or debugging Croct's Contextual Query Language (CQL): audience criteria, `croct.evaluate()` / `useEvaluation` / `<Personalization query>` / Next.js `cql` tag queries, Evaluation API `query` bodies (`/client/web/evaluate`, `/external/web/evaluate`), and dynamic content values (`"type": "dynamic"`, `"expression"`). Covers context variables (user, session, page, location, campaign, cart, device, browser, context, now/today), data types and conversions, accessors and selectors (`'s`, `property X of`, `[1st]`, `[*]`, `[...]`), tests (`is`, `matches`, `is like`, `contains either`, `is between`, `is defined`, `is returning`), quantifiers (`some ... satisfies`), macros, modifiers, event expressions (`user has viewed a page`, `user has abandoned a cart`, `user has completed goal`), audience estimation, and recipes. Triggers: "write an audience", "target mobile users in New York", "CQL syntax error", "audience never matches", "unavailable estimate".

croct-tech/agent-skills

>- Use when connecting Croct to a third-party platform or migrating to Croct from another personalization or experimentation tool. Covers Storyblok (Optimize by Croct app, @croct/plug-storyblok, Storyblok withCroct, resolveContent, croct/plug-storyblok, CroctStoriesApi), Sanity and Strapi (slot fallback, dynamic zones, metadata.contentSource), Shopify Hydrogen storefront events, Shopify custom pixel (croctPixel, PUBLIC_CROCT_SHOPIFY_PIXEL, checkout and order tracking), VTEX, Google Tag Manager data layer, Microsoft Clarity tags, HubSpot forms (hbspt.forms.create, hs-form-event), firmographic providers 6sense, Demandbase, Clearbit Reveal, and ZoomInfo WebSights (firmographics attributes, account-based audiences in CQL), and migrations from Mutiny and Ninetailed (Experience component, Contentful sunset). Triggers include cdn.croct.io/plug-integration scripts, "personalize Storyblok blocks", "track Shopify checkout", "send VTEX events", "ABM personalization", "replace Mutiny".

croct-tech/agent-skills

>- Use when designing or changing Croct content models: regular vs union components, what becomes a component, slot, structure, or primitive attribute; writing component schema JSON (`structure`, `union`, `reference`, `text`, `number`, `boolean`, `list`, `@croct/file`, `@croct/richText` rich text, `format`, `choices`, `optional`, `private`, `position`); writing content definition JSON (`static`/`dynamic` values, `nullable`, `default`, `{{placeholder}}` paths); slot default, localized, experience, experiment, or content group content; schema limit errors (30 attributes, 6 nesting levels, 10 union members, complexity score 50); component versioning and breaking changes (`home-hero@2`); refactoring (duplicate and modify, duplicate and replace, flatten and merge); Markdown in text attributes with `@croct/md-lite`. Phrasings: "model content for a hero", "add an attribute to the banner component", "support variations", "component is too complex", "localize the hero", "translations", `preferredLocale`.

croct-tech/agent-skills

>- Use when planning or implementing personalization or A/B testing with Croct: creating an experience (audience, slots, content, priority, scheduling, drafts), adding an experiment (A/B/n, primary goal ID, traffic allocation, variants, cross-device consistency), wiring the code it needs (slots, `croct.track('goalCompleted', {goalId})`, `orderPlaced`, `leadGenerated`, `userSignedUp`), server-side feature-flag experiments, redirect experiments, personalization recipes (UTM campaigns, ABM, search terms, location, free shipping, interests, blog readers, leads, customers, organic intent, HubSpot forms), or reading the experience, experiment, application, or workspace dashboards (probability to be best, potential loss, "Experiment in progress", "Recommended winner", "No clear winner", "Track your goal"). Phrasings: "personalize the hero for LinkedIn visitors", "A/B test this CTA", "which variant won?", "why does my experiment show no conversions?".

Habilidades Relacionadas