CommunityRedacción y edicióngithub.com

croct-tech/agent-skills

Usa esta skill al escribir, leer, revisar o depurar el Lenguaje de Consulta Contextual (CQL) de Croct: criterios de audiencia, `croct.evaluate()` / `useEvaluation` / `<Personalization query>` / consultas con etiqueta `cql` de Next.js, cuerpos de consulta de la API de Evaluación y valores de contenido dinámico.

¿Qué es agent-skills?

Esta skill proporciona a un agente de IA todo lo necesario para escribir, analizar y depurar el Lenguaje de Consulta Contextual (CQL) de Croct, un lenguaje similar al inglés. Cubre casos de uso clave como la creación de audiencias, la evaluación en tiempo real desde SDKs y la API HTTP, y la definición de valores de contenido dinámico. La skill se basa en la documentación oficial de Croct e incluye una completa hoja de referencia con la sintaxis básica, variables de contexto, patrones de uso frecuente y ejemplos de evaluación desde código. Además, incorpora una guía detallada de errores comunes y sus soluciones, referencia a archivos de documentación adicional y enlaces a la documentación en vivo para casos no cubiertos. Está diseñada para plataformas como Croct, integraciones con Next.js y React, y el uso de SDKs y la API de evaluación.

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

Installed? Explore more Redacción y edición skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Escribe y depura CQL

CQL es el lenguaje de consulta similar al inglés de Croct. La misma sintaxis de expresiones impulsa audiencias, evaluación en tiempo real desde SDKs y la API HTTP, y valores de contenido dinámico. Todo aquí proviene de docs.croct.com; cuando algo no esté cubierto, consulta la documentación en vivo (al final de este archivo) en lugar de adivinar.

Flujo de trabajo

  1. Identifica dónde se ejecuta la consulta: audiencia (debe ser booleana), evaluate/API (cualquier valor JSON, máximo 500 caracteres) o valor dinámico (el resultado debe ajustarse al tipo de atributo, si no, default).
  2. Elige la fuente de datos: contexto actual (page, cart, location, campaign, device), perfil almacenado (user's ..., user's stats), sesión (session's ...) o historial (user has ... expresiones de evento, plan Scale).
  3. Verifica que los datos se recopilan: cualquier cosa marcada como integración requerida (atributos de perfil, carrito, intereses, objetivos, estado de inicio de sesión) nunca coincidirá a menos que la aplicación lo envíe.
  4. Escríbelo con la hoja de referencia a continuación; busca propiedades exactas en context-and-data-types.md.
  5. Ejecuta la lista de verificación de errores comunes y luego prueba con croct.evaluate() o el estimador del panel.

Hoja de referencia

// Los estilos natural, técnico y mixto son intercambiables
user's score is greater than 90
user.score > 90
user's score > 90
NecesidadSintaxis
Propiedaduser's address's city, user's stats' orders, property city of user's address, user.address.city
Clave extraña / índicepage.query['coupon-code'], list[0], (user's interests)[0]
Selectorescart.items[1st], [:first], [:last(2)], items[*].price, data[...].price
Literalesnull, true, 42, 3.14 (decimal), 3.14f, 51%, "str", 'raw', ~/re/i, [1, 2], ["k": "v"]
FechasSin literal: "2026-01-01" as date, "2026-01-01T12:00" as datetime; today + 1 day
Lógicaand or not (&& || !); and une más fuerte que or
Comparar== != > >= < <=; 1 < x < 3; is equal to X ignoring case
Abreviatura literalX is "value", X is not 0 (el lado derecho debe ser un literal)
Cadenasstarts with, ends with, matches "sub" / matches ~/re/i (distingue mayúsculas), is like "sub" (no distingue mayúsculas)
Coleccionescontains X, X is in [..], contains all of [..], contains either [..], contains neither [..]
Presenciais defined / is known, is empty
Usuario/sesiónuser is returning, user is anonymous, user is identified, session is starting
Fechasis before, is after, is at "12:00", is between A and B [exclusive], today's weekday is "monday"
Cuantificadoressome 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"
Variableslet orders = user's stats' orders; orders >= 5
Eventos (Scale)user has <event> [with prop value] [at least N times] [in last 7 days]
Comentarios// line, # line, /* block */

Las palabras clave y los identificadores no distinguen mayúsculas de minúsculas; los literales de cadena distinguen mayúsculas.

Contexto de un vistazo

VariablePropiedades comunes
userid, firstName, email, age, company, jobTitle, interests, activities, stats' sessions, stats' orders, cualquier 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 pasados en la evaluación
now, today, yesterday, tomorrowweekday, day, month, year, hour...

Patrones más útiles

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"

Más por caso de uso (campaña, ubicación, tecnología, sesión, perfil, carrito, pedidos, consultas de valor): references/recipes.md.

Evaluar desde 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']}}, // se lee como `context's countries`
);

Servidor Next.js: await evaluate(query) o await cql`user's persona is in ${roles}` desde @croct/plug-next/server. React: useEvaluation(query). HTTP: POST https://api.croct.io/client/web/evaluate con {"query": "..."}. Detalles, límites de atributos, valores dinámicos y estimación: references/evaluation.md.

Errores comunes y depuración

SíntomaCausa probableSolución
Error de sintaxis en x is yLa abreviatura is necesita un literal a la derechax is equal to y o x == y
Error de sintaxis en location city is "Berlin"Falta el acceso: palabras sueltas entre una variable y su propiedadlocation's cityName, property cityName of location o location.cityName
Error al comparar "1" > 0 o session's start > "2026-01-01"Los operadores relacionales nunca convierten tiposConversión: "1" as number > 0, ... > "2026-01-01" as datetime, o usa is after
La ubicación/código nunca coincideMayúsculas incorrectas: los códigos están en mayúsculas ("US", "NA", "CA") y las cadenas distinguen mayúsculasUsa mayúsculas, is like, is equal to ... ignoring case o ~/.../i
matches "Sale" no encuentra "sale"matches, starts with, ends with distinguen mayúsculasis like "sale" o matches ~/sale/i
El cuantificador se traga la condición siguienteEl predicado del cuantificador se extiende hasta el finalPon paréntesis a todo el cuantificador
a or b and c se comporta extrañoand une más fuerte que orAgrega paréntesis
El resultado condicional se multiplica incorrectamenteLos condicionales son codiciosos(A if c otherwise B) * price
La condición de perfil/carrito/interés nunca es verdaderaDatos que requieren integración no enviadosRastrea el evento o establece el atributo (consulta la skill croct-track-events)
Tanto X is greater than 30 como X is not greater than 30 son falsosValor indefinido: la tolerancia a errores booleanos da falsoUsa X is defined and ..., o X or else 0
user is identified siempre es falsoEventos de inicio/cierre de sesión no rastreadosRastréalos; de lo contrario, los usuarios siempre son anónimos
Errores con cart.items[2nd], first of, average of, min ofFalta un elemento o la colección está vacíaAgrega or else null / or else 0
contains none of [] vs contains neither []Lado derecho vacío: none es falso, neither es verdaderoUsa contains neither para "sin superposición"
Error al mezclar 's con corchetesPosesión más corchetes necesitan paréntesis(cart's items)[1st] o notación de punto cart.items[*]
Expresiones de evento no disponiblesSon una característica del plan ScaleUsa estadísticas de perfil/sesión cuando sea posible (user's stats' orders)
"Estimación no disponible"Usa page, contexto actual o now/today/yesterdayEsperado; la audiencia aún funciona en tiempo de ejecución
Error de rangoLos rangos .. tienen un máximo de 30 elementosReduce el rango
Error en el nombre de la variable/parámetroLas variables no se pueden redefinir; los nombres deben ser identificadoresRenombra; evita palabras reservadas (user, page) y palabras genéricas

Haz:

  • Prefiere is equal to, is greater than explícitos en audiencias compartidas con no desarrolladores; usa el estilo técnico cuando se lea mejor.
  • Protege los datos opcionales con is defined o or else.
  • Pon las condiciones baratas primero en cadenas con and (el cortocircuito omite el resto).
  • Usa contains either / contains neither en lugar de negar contains all / contains none.

No hagas:

  • No inventes pruebas, variables o frases de eventos. Ejemplos como user is new o user has made purchase aparecen en la prosa de la documentación pero no son construcciones documentadas; usa user is not returning y user's stats' orders is not 0 (o user has placed an order).
  • No compares location's countryName con un código; usa countryCode para "US".
  • No confíes en la conversión implícita de fechas en aritmética: "2021-01-01" as date + 1 day.

Referencias

ArchivoLéelo cuando
references/syntax.mdReglas léxicas, let, funciones, literales, accesos y selectores, tabla de precedencia, condicionales, duraciones
references/context-and-data-types.mdCada variable y propiedad, indicadores de disponibilidad, enumeraciones (categoría de dispositivo, etapa del carrito, continente, etiquetas de ubicación), conversiones
references/expressions.mdTodas las pruebas, operadores, tolerancia a errores, cuantificadores, macros, modificadores
references/events.mdExpresiones de evento, operadores de criterio, cuantificadores de recuento, ventanas de tiempo, requisitos de seguimiento
references/evaluation.mdSDK evaluate / cql / hooks, API de Evaluación, atributos de contexto, valores dinámicos, estimación de audiencia
references/recipes.mdAudiencias listas para usar y consultas de valor por caso de uso

Skills relacionadas: croct-integrate-sdk (configuración del SDK), croct-track-events (envío de eventos y atributos que las consultas leen), croct-use-api (APIs HTTP), croct-model-content (valores dinámicos en definiciones de contenido), croct-personalize-and-test (experiencias y experimentos que usan audiencias), croct-use-croct (conceptos y orientación).

Documentación en 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?".

Skills relacionados