CommunityEscrita e Ediçãogithub.com

croct-tech/agent-skills

Use ao escrever, ler, revisar ou depurar a Linguagem de Consulta Contextual (CQL) do Croct: critérios de audiência, `croct.evaluate()` / `useEvaluation` / `<Personalization query>` / consultas de tag `cql` do Next.js, corpos de consulta da API de Avaliação (`/client/web/evaluate`, `/external/web/evaluate`) e valores de conteúdo dinâmico (`"type": "dynamic"`, `"expression"`). Abrange variáveis de contexto (usuário, sessão, página, localização, campanha, carrinho, dispositivo, navegador, contexto, agora/hoje), tipos de dados e conversões, acessores e seletores (`'s`, `property X of`, `[1st]`, `[*]`, `[...]`), testes (`is`, `matches`, `is like`, `contains either`, `is between`, `is defined`, `is returning`), quantificadores (`some ... satisfies`), macros, modificadores, expressões de evento (`user has viewed a page`, `user has abandoned a cart`, `user has completed goal`), estimativa de audiência e receitas. Gatilhos: "escreva uma audiência", "direcione usuários móveis em Nova York", "erro de sintaxe CQL", "audiência nunca corresponde", "estimativa indisponível".

O que é agent-skills?

Esta skill capacita agentes de IA (como Claude Code, Cursor ou Codex) a escrever, ler, revisar e depurar consultas na Linguagem de Consulta Contextual (CQL) do Croct. A CQL é uma linguagem de consulta semelhante ao inglês usada para definir audiências de personalização, avaliar condições em tempo real via SDKs ou API HTTP e especificar valores de conteúdo dinâmico. A skill fornece uma folha de consulta rápida abrangente cobrindo tipos de dados, operadores, seletores, quantificadores e macros, além de padrões prontos para uso para cenários comuns como detecção de usuário recorrente, filtragem por localização ou verificação de estágio do carrinho. Ela também inclui uma seção de "Armadilhas e Depuração" que diagnostica sintomas comuns (erros de sintaxe, problemas de tipo, condições que nunca correspondem) e oferece práticas recomendadas claras do que fazer e não fazer. A skill faz referência à documentação oficial do Croct em docs.croct.com e a arquivos de referência locais para sintaxe, tipos de dados, expressões, eventos e avaliação. Também lista skills relacionadas para integração de SDK, rastreamento de eventos, uso de API, modelagem de conteúdo e personalização/experimentação.

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

Installed? Explore more Escrita e Edição skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Perguntar na sua IA favorita

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

Documentação

Escrever e depurar CQL

CQL é a linguagem de consulta semelhante ao inglês do Croct. A mesma sintaxe de expressão alimenta audiências, avaliação em tempo real de SDKs e da API HTTP, e valores de conteúdo dinâmico. Tudo aqui é dos docs.croct.com; quando algo não estiver coberto, verifique a documentação ao vivo (no final deste arquivo) em vez de adivinhar.

Fluxo de trabalho

  1. Identifique onde a consulta é executada: audiência (deve ser booleano), evaluate/API (qualquer valor JSON, máximo de 500 caracteres) ou valor dinâmico (o resultado deve caber no tipo de atributo, caso contrário default).
  2. Escolha a fonte de dados: contexto atual (page, cart, location, campaign, device), perfil armazenado (user's ..., user's stats), sessão (session's ...) ou histórico (user has ... expressões de evento, plano Scale).
  3. Verifique se os dados são coletados: qualquer coisa sinalizada como integração necessária (atributos de perfil, carrinho, interesses, metas, estado de login) nunca corresponde a menos que o aplicativo os envie.
  4. Escreva com a folha de consulta rápida abaixo; procure propriedades exatas em context-and-data-types.md.
  5. Execute a lista de verificação de armadilhas e teste com croct.evaluate() ou o estimador do painel.

Folha de consulta rápida

// Estilos natural, técnico e misto são intercambiáveis
user's score is greater than 90
user.score > 90
user's score > 90
NecessidadeSintaxe
Propriedadeuser's address's city, user's stats' orders, property city of user's address, user.address.city
Chave/índice incomumpage.query['coupon-code'], list[0], (user's interests)[0]
Seletorescart.items[1st], [:first], [:last(2)], items[*].price, data[...].price
Literaisnull, true, 42, 3.14 (decimal), 3.14f, 51%, "str", 'raw', ~/re/i, [1, 2], ["k": "v"]
DatasSem literal: "2026-01-01" as date, "2026-01-01T12:00" as datetime; today + 1 day
Lógicaand or not (&& `
Comparação== != > >= < <=; 1 < x < 3; is equal to X ignoring case
Abreviação literalX is "value", X is not 0 (o lado direito deve ser um literal)
Stringsstarts with, ends with, matches "sub" / matches ~/re/i (sensível a maiúsculas), is like "sub" (insensível a maiúsculas)
Coleçõescontains X, X is in [..], contains all of [..], contains either [..], contains neither [..]
Presençais defined / is known, is empty
Usuário/sessãouser is returning, user is anonymous, user is identified, session is starting
Datasis before, is after, is at "12:00", is between A and B [exclusive], today's weekday is "monday"
Quantificadoressome x in C satisfies P, every, no, not every, at least 2 of any [distinct] x in C satisfies P
Macroscount of, sum of, average of, min of, max of, first of, last of, keys of, length of, number of days between A and B, this month
Modificadoresas number, rounded [down], in title case, sorted descending, without duplicates, replacing "a" with "b", today at "12:00"
Fallbackuser's name or else "Anonymous" (??)
Condicional"A" if cond otherwise "B", cond ? "A" : "B"
Variáveislet orders = user's stats' orders; orders >= 5
Eventos (Scale)user has <event> [with prop value] [at least N times] [in last 7 days]
Comentários// line, # line, /* block */

Palavras-chave e identificadores são insensíveis a maiúsculas e minúsculas; literais de string são sensíveis a maiúsculas e minúsculas.

Contexto de relance

VariávelPropriedades comuns
userid, firstName, email, age, company, jobTitle, interests, activities, stats' sessions, stats' orders, qualquer atributo personalizado
sessionstart, duration, landingPage, referrer, stats' pageviews, stats' orders, audiences, experiences, experiments, atributos personalizados
page (web)title, url, path, query, anchor, referrer
locationcontinentCode, countryCode, countryName, stateCode/regionCode (alias de state's code), stateName, cityName, timeZone, tags
device / browsercategory (desktop, tablet, mobile, bot, ...), vendor, name, os; browser's name, type
campaignname, source, medium, content, term (UTM)
cartstage (browsing, shopping, checkout), items, total, subtotal, coupon, discount
contexttimeZone, atributos passados na avaliação
now, today, yesterday, tomorrowweekday, day, month, year, hour...

Padrões mais úteis

user is returning
user is not returning
session is starting
device's category is "mobile"
device's category is not "bot"
location's countryCode is "US"
location's state's code is in ["NY", "CA"]
location's cityName is "New York" and today's weekday is "monday"
campaign's source is "google" and campaign's medium is "cpc"
campaign's name matches "sale"
page's path is in ["/pricing", "/plans"]
page's query's newsletter is "daily-news"
page.query['coupon-code'] is defined
session's referrer matches "google"
session's landingPage starts with "https://example.com/promo"
session's duration > 5 minutes and session's stats' orders is 0
user's interests contains either ["marketing", "sales"]
user's age is between 18 and 30
user's stats' orders is 0
user's plan is "premium"
cart's stage is "checkout" and cart's total is greater than 100
some item in cart's items satisfies item's brand is "Apple"
(no item in cart's items satisfies item's name is like "smartphone") and user is returning
user has abandoned a cart at least 2 times
user has viewed a product with category "Shoes" in last 7 days
user has completed goal "demo-requested" last session
user's firstName or else "there"

Mais por caso de uso (campanha, localização, tecnologia, sessão, perfil, carrinho, pedidos, consultas de valor): references/recipes.md.

Avaliar a partir do código

import croct from '@croct/plug';

const isReturning = await croct.evaluate<boolean>('user is returning').catch(() => false);
const inList = await croct.evaluate<boolean>(
  "context's countries include location's countryName",
  {attributes: {countries: ['United States', 'Canada']}}, // lido como `context's countries`
);

Servidor Next.js: await evaluate(query) ou await cql`user's persona is in ${roles}` do @croct/plug-next/server. React: useEvaluation(query). HTTP: POST https://api.croct.io/client/web/evaluate com {"query": "..."}. Detalhes, limites de atributos, valores dinâmicos e estimativa: references/evaluation.md.

Armadilhas e depuração

SintomaCausa provávelCorreção
Erro de sintaxe em x is yA abreviação is precisa de um literal à direitax is equal to y ou x == y
Erro de sintaxe em location city is "Berlin"Acessor ausente: palavras soltas entre uma variável e sua propriedadelocation's cityName, property cityName of location ou location.cityName
Erro ao comparar "1" > 0 ou session's start > "2026-01-01"Operadores relacionais nunca convertem tiposCast: "1" as number > 0, ... > "2026-01-01" as datetime ou use is after
Localização/código nunca correspondeMaiúsculas erradas: códigos são maiúsculos ("US", "NA", "CA") e strings são sensíveis a maiúsculasUse maiúsculas, is like, is equal to ... ignoring case ou ~/.../i
matches "Sale" perde "sale"matches, starts with, ends with são sensíveis a maiúsculasis like "sale" ou matches ~/sale/i
Quantificador engole condição seguinteO predicado do quantificador se estende até o finalColoque todo o quantificador entre parênteses
a or b and c se comporta estranhamenteand liga mais forte que orAdicione parênteses
Resultado condicional multiplicado erradamenteCondicionais são gananciosas(A if c otherwise B) * price
Condição de perfil/carrinho/interesse nunca é verdadeiraDados que exigem integração não foram enviadosRastreie o evento ou defina o atributo (veja a skill croct-track-events)
Tanto X is greater than 30 quanto X is not greater than 30 são falsosValor indefinido: tolerância a erro booleano resulta em falsoUse X is defined and ... ou X or else 0
user is identified sempre falsoEventos de login/logout não rastreadosRastreie-os; caso contrário, os usuários são sempre anônimos
Erros em cart.items[2nd], first of, average of, min ofElemento ausente ou coleção vaziaAnexe or else null / or else 0
contains none of [] vs contains neither []Lado direito vazio: none falso, neither verdadeiroUse contains neither para "nenhuma sobreposição"
Erro ao misturar 's com colchetesPosse mais colchetes precisam de parênteses(cart's items)[1st] ou notação de ponto cart.items[*]
Expressões de evento indisponíveisElas são um recurso do plano ScaleUse estatísticas de perfil/sessão quando possível (user's stats' orders)
"Estimativa indisponível"Usa page, contexto atual ou now/today/yesterdayEsperado; a audiência ainda funciona em tempo de execução
Erro de intervaloIntervalos .. têm no máximo 30 itensReduza o intervalo
Erro de nome de variável/parâmetroVariáveis não podem ser redefinidas; nomes devem ser identificadoresRenomeie; evite palavras reservadas (user, page) e palavras genéricas

Faça:

  • Prefira is equal to, is greater than explícitos em audiências compartilhadas com não desenvolvedores; use estilo técnico quando ficar melhor.
  • Proteja dados opcionais com is defined ou or else.
  • Coloque condições baratas primeiro em cadeias and (curto-circuito pula o resto).
  • Use contains either / contains neither em vez de negar contains all / contains none.

Não faça:

  • Não invente testes, variáveis ou frases de evento. Exemplos como user is new ou user has made purchase aparecem na prosa da documentação, mas não são construções documentadas; use user is not returning e user's stats' orders is not 0 (ou user has placed an order).
  • Não compare location's countryName com um código; use countryCode para "US".
  • Não confie em conversão implícita de data em aritmética: "2021-01-01" as date + 1 day.

Referências

ArquivoLeia quando
references/syntax.mdRegras lexicais, let, funções, literais, acessores e seletores, tabela de precedência, condicionais, durações
references/context-and-data-types.mdTodas as variáveis e propriedades, sinalizadores de disponibilidade, enumerações (categoria de dispositivo, estágio do carrinho, continente, tags de localização), conversões
references/expressions.mdTodos os testes, operadores, tolerância a erro, quantificadores, macros, modificadores
references/events.mdExpressões de evento, operadores de critério, quantificadores de contagem, janelas de tempo, requisitos de rastreamento
references/evaluation.mdSDK evaluate / cql / hooks, API de Avaliação, atributos de contexto, valores dinâmicos, estimativa de audiência
references/recipes.mdAudiências e consultas de valor prontas para uso por caso de uso

Skills relacionadas: croct-integrate-sdk (configuração do SDK), croct-track-events (envio de eventos e atributos que as consultas leem), croct-use-api (APIs HTTP), croct-model-content (valores dinâmicos em definições de conteúdo), croct-personalize-and-test (experiências e experimentos que usam audiências), croct-use-croct (conceitos e orientação).

Documentação ao vivo

Individual skills in this repo

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

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 installing or using a Croct SDK in application code: rendering slot content, evaluating CQL queries, server or client fetching, prerendering, identifying users, app ID / API key env vars, testing, or debugging. Covers JavaScript (`@croct/plug`, `croct.fetch`, `croct.evaluate`), React (`@croct/plug-react`, `<CroctProvider>`, `useContent`, `<Slot>`, `useEvaluation`, `useCroct`), Next.js (`@croct/plug-next`, `fetchContent`, `cql`, middleware/proxy, `NEXT_PUBLIC_CROCT_APP_ID`, `CROCT_API_KEY`), Vue (`@croct/plug-vue`), Nuxt (`@croct/plug-nuxt`), Shopify Hydrogen (`@croct/plug-hydrogen`), PHP (`croct/plug-php`), Laravel, Symfony, and Drupal. Triggers: slot IDs like `home-hero@1`, `SlotContent`, "Croct is not plugged in", "initial content is required for server-side rendering", "Did you forget to configure Croct's middleware?", CORS errors.

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