PageSourceSearch

https://openclix.ai/

html openclix.ai collected 2026-10-05 12:22:31 UTC 63,335 bytes, 1 lines download raw bytes

1<!DOCTYPE html><!--NWi1iaUni1_Di2akn_sHu--><html lang="en" class="space_grotesk_5cebdf44-module__vQKikG__variable instrument_sans_78f5c044-module__HyMxXW__variable scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/0c89a48fa5027cee-s.p.4564287c.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/f06bf9da926bae75-s.p.c68a79fb.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/chunks/67db12c30bb0db59.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/49849b1b478e6b82.js"/>
1<script src="/_next/static/chunks/f2f58a7e93290fbb.js" async=""></script>
1<script src="/_next/static/chunks/454889a9dcbe1f52.js" async=""></script>
1<script src="/_next/static/chunks/turbopack-530260eb4711dffb.js" async=""></script>
1<script src="/_next/static/chunks/2f236954d6a65e12.js" async=""></script>
1<script src="/_next/static/chunks/b62af40e0fdd7a63.js" async=""></script>
1<meta name="next-size-adjust" content=""/><title>OpenClix — Agent-Based Mobile App Retention &amp; Engagement Automation</title><meta name="description" content="Open-source, local-first mobile app retention and engagement automation. OpenClix uses config-driven on-device logic, source-first integration, and agent-driven operations with OpenClaw, Claude Code, and Codex."/><link rel="author" href="https://openclix.ai"/><meta name="author" content="OpenClix"/><link rel="manifest" href="/site.webmanifest"/><meta name="keywords" content="openclix-config.json,mobile app retention automation,mobile engagement automation,agent-driven retention ops,agent-based mobile app retention automation,on-device campaign operations,config-driven mobile engagement,source-first mobile integration,openclix-init,openclix-design-campaigns,openclix-analytics,openclix-update-campaigns,retention_ops_automation,OpenClaw,Claude Code,Codex,iOS,Android,onboarding,re-engagement,OpenClix"/><meta name="creator" content="OpenClix"/><meta name="publisher" content="OpenClix"/><meta name="robots" content="index, follow"/><meta name="googlebot" content="index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"/><link rel="canonical" href="https://openclix.ai"/><meta property="og:title" content="OpenClix — Agent-Based Mobile App Retention &amp; Engagement Automation"/><meta property="og:description" content="Open-source, local-first mobile app retention and engagement automation. OpenClix uses config-driven on-device logic, source-first integration, and agent-driven operations with OpenClaw, Claude Code, and Codex."/><meta property="og:url" content="https://openclix.ai"/><meta property="og:site_name" content="OpenClix"/><meta property="og:locale" content="en_US"/><meta property="og:image" content="https://openclix.ai/og-image.png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:image:alt" content="OpenClix — Agent-Based Mobile App Retention &amp; Engagement Automation"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="OpenClix — Agent-Based Mobile App Retention &amp; Engagement Automation"/><meta name="twitter:description" content="Open-source, local-first mobile app retention and engagement automation. OpenClix uses config-driven on-device logic, source-first integration, and agent-driven operations with OpenClaw, Claude Code, and Codex."/><meta name="twitter:image" content="https://openclix.ai/og-image.png"/><link rel="icon" href="/favicon.ico?favicon.168e7e9f.ico" sizes="32x32" type="image/x-icon"/><link rel="icon" href="/favicon.ico"/><link rel="apple-touch-icon" href="/apple-touch-icon.png"/>
1<script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script>
1</head><body class="min-h-screen"><div hidden=""><!--$--><!--/$--></div>
1<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"SoftwareApplication","name":"OpenClix","url":"https://openclix.ai","applicationCategory":"DeveloperApplication","operatingSystem":"iOS, Android","description":"Open-source, local-first foundation for agent-based mobile app retention and engagement automation using config-driven, on-device messaging logic.","keywords":["mobile app retention automation","mobile engagement automation","agent-driven retention ops","OpenClaw","Claude Code","Codex"],"featureList":["openclix-init integration automation","openclix-design-campaigns config generation","openclix-analytics impact measurement","openclix-update-campaigns recommendation drafting","retention_ops_automation multi-agent prompt generation"],"offers":{"@type":"Offer","price":"0","priceCurrency":"USD"}},{"@type":"Organization","name":"OpenClix","url":"https://openclix.ai","logo":"https://openclix.ai/icon-512.png","sameAs":["https://github.com/openclix/openclix"]},{"@type":"WebSite","name":"OpenClix","url":"https://openclix.ai","description":"Documentation and workflows for agent-based mobile app retention and engagement automation with OpenClaw, Claude Code, and Codex."},{"@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Is this a notification library or a full platform?","acceptedA
1nswer":{"@type":"Answer","text":"OpenClix is an open-source reference codebase for on-device engagement logic (local notifications and in-app messaging hooks), not a hosted full engagement platform."}},{"@type":"Question","name":"Do I need a backend or push infrastructure?","acceptedAnswer":{"@type":"Answer","text":"No backend or APNS/FCM send pipeline is required for the local-first path. OpenClix focuses on on-device execution with openclix-config.json-driven behavior."}},{"@type":"Question","name":"Do I install OpenClix as a package dependency?","acceptedAnswer":{"@type":"Answer","text":"No. OpenClix is source-distributed: the client code is copied into your repository and checked in, so you avoid extra runtime dependency chain risk and keep full ownership of the code."}},{"@type":"Question","name":"Do I need Clix-hosted services or a control plane?","acceptedAnswer":{"@type":"Answer","text":"No. OpenClix is intended to run in your app with your own integrations. You can start bundled, then host openclix-config.json over HTTP when you need remote updates."}},{"@type":"Question","name":"How can I deliver openclix-config.json?","acceptedA
1nswer":{"@type":"Answer","text":"Serve openclix-config.json over HTTP as either a static file or a dynamic API response. Updating that JSON source lets you change campaign settings without shipping a new app build."}},{"@type":"Question","name":"Can AI agents actually modify this safely?","acceptedAnswer":{"@type":"Answer","text":"That is a core design goal. OpenClix emphasizes legible structure, explicit interfaces, and clear edit points so AI-assisted changes are easier to review and validate."}},{"@type":"Question","name":"When is OpenClix enough vs when do I need a full engagement platform?","acceptedAnswer":{"@type":"Answer","text":"OpenClix is a strong fit for local-first onboarding, habit, re-engagement, and feature discovery flows. If you need complex vendor tooling or server-triggered, real-time push operations, pair it with a full engagement stack."}},{"@type":"Question","name":"How should I handle third-party OpenClaw plugins in retention operations?","acceptedAnswer":{"@type":"Answer","text":"OpenClix's own skills are first-party and auditable in this repository. When using additional third-party OpenClaw plugins from outside this repository, review their source before execution, prefer sandboxed runs, and keep human approval gates before applying campaign config changes."}}]}]}</script>
1<header class="site-navbar"><div class="site-navbar-inner"><a href="/" class="font-heading text-lg font-bold text-primary tracking-tight">OpenClix</a><nav class="flex items-center gap-6"><a href="#quickstart" class="hidden md:inline-block text-sm text-muted-foreground hover:text-foreground transition-colors">Quickstart</a><a href="#faq" class="hidden md:inline-block text-sm text-muted-foreground hover:text-foreground transition-colors">FAQ</a><a href="https://github.com/openclix/openclix" target="_blank" rel="noopener noreferrer" class="hidden md:inline-block text-sm text-muted-foreground hover:text-foreground transition-colors">GitHub</a><a href="https://docs.openclix.ai/getting-started/installation" target="_blank" rel="noopener noreferrer" class="inline-flex items-center h-8 px-4 text-sm font-semibold rounded-md border border-primary/40 text-primary hover:bg-primary/10 transition-colors">Docs</a></nav></div></header><main class="w-full"><section id="hero" class="section-shell glow pt-28 md:pt-36 pb-16"><div class="mx-auto flex max-w-4xl flex-col items-center gap-6 text-center"><span class="eyebrow hero-animate">Open-source local-first engagement</span><h1 class="hero-animate hero-animate-delay-1 font-heading text-5xl md:text-7xl font-bold tracking-tighter leading-[1.02]">Build retention flows<br/>without the infra maze</h1><p class="hero-animate hero-animate-delay-2 lede text-base md:text-lg max-w-2xl text-balance">Source-first, config-driven mobile engagement logic that runs on-device. Ship quickly with clear ownership.</p><div class="hero-animate hero-animate-delay-3 flex flex-wrap items-center justify-center gap-3 pt-2"><a href="https://docs.openclix.ai/getting-started/installation" target="_blank" rel="noopener noreferrer" data-slot="button" data-variant="default" data-size="lg" class="inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[&gt;svg]:px-4 font-semibold shadow-[0_0_0_1px_rgba(255,255,255,0.06)_inset]">Read Docs</a><a href="https://github.com/openclix/openclix" target="_blank" rel="noopener noreferrer" data-slot="button" data-variant="outline" data-size="lg" class="inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-10 rounded-md px-6 has-[&gt;svg]:px-4 font-semibold">See GitHub</a></div></div></section><div class="section-divider"></div><section class="section-shell compact"><div class="mx-auto max-w-5xl"><p class="eyebrow mb-8 justify-center text-center">Built for</p><div class="grid grid-cols-2 md:grid-cols-4 gap-4"><div class="panel-muted px-4 py-4 text-center"><p class="font-heading text-sm font-semibold text-foreground">Indie Builders</p><p class="mt-1.5 text-xs leading-relaxed text-muted-foreground">Launch onboarding nudges, streak reminders, and re-engagement flows in one sprint.</p></div><div class="panel-muted px-4 py-4 text-center"><p class="font-heading text-sm font-semibold text-foreground">Product Teams</p><p class="mt-1.5 text-xs leading-relaxed text-muted-foreground">Run retention experiments before committing to a full engagement platform.</p></div><div class="panel-muted px-4 py-4 text-center"><p class="font-heading text-sm font-semibold text-foreground">
1Agencies</p><p class="mt-1.5 text-xs leading-relaxed text-muted-foreground">Reuse a proven engagement foundation across client apps with predictable handoff.</p></div><div class="panel-muted px-4 py-4 text-center"><p class="font-heading text-sm font-semibold text-foreground">Agent-First Builders</p><p class="mt-1.5 text-xs leading-relaxed text-muted-foreground">Let your AI agent read, modify, and extend engagement rules safely.</p></div></div></div></section><div class="section-divider"></div><section id="quickstart" class="section-shell"><div class="mx-auto mb-10 max-w-2xl text-center"><span class="eyebrow justify-center">Get started</span><h2 class="mt-4 font-heading text-3xl font-bold tracking-tight md:text-4xl">Quickstart</h2><p class="lede mt-4 text-sm md:text-base">Install OpenClix skills, then iterate with config-driven engagement logic you fully own.</p></div><div class="panel-muted mx-auto mb-10 w-full max-w-xl px-5 py-3.5 text-center"><code class="font-mono text-sm text-foreground md:text-base">npx skills add openclix/openclix</code></div><div class="grid grid-cols-1 gap-5 md:grid-cols-3"><div class="panel feature-card p-5 md:p-6"><span class="font-heading text-2xl font-bold text-primary/60">1</span><h3 class="mt-2 font-heading text-base font-semibold">Vendor source into your repo</h3><p class="mt-2 text-sm leading-relaxed text-muted-foreground">Bring OpenClix client code in-repo as checked-in source so you can inspect and own every integration detail.</p></div><div class="panel feature-card p-5 md:p-6"><span class="font-heading text-2xl font-bold text-primary/60">2</span><h3 class="mt-2 font-heading text-base font-semibold">Connect config JSON + event hooks</h3><p class="mt-2 text-sm leading-relaxed text-muted-foreground">Wire app-resource or HTTPS JSON config with app events so rules react without backend plumbing.</p></div><div class="panel feature-card p-5 md:p-6"><span class="font-heading text-2xl font-bold text-primary/60">3</span><h3 class="mt-2 font-heading text-base font-semibold">Trigger rules and ship local engagement flows</h3><p class="mt-2 text-sm leading-relaxed text-muted-foreground">Run local notifications and in-app messaging logic on-device with debuggable reasons and safe edit points.</p></div></div></section><div class="section-divider"></div><section id="pillars" class="section-shell"><div class="mx-auto mb-12 max-w-2xl text-center"><span class="eyebrow justify-center">Foundation</span><h2 class="mt-4 font-heading text-3xl font-bold tracking-tight md:text-4xl">Core Pillars</h2></div><div class="grid grid-cols-1 gap-5 md:grid-cols-3"><div class="panel feature-card p-5 md:p-6"><h3 class="font-heading text-lg font-bold tracking-tight">OSS</h3><ul class="mt-4 space-y-2.5"><li class="flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground"><span class="mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary"></span>MIT/permissive mindset</li><li class="flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground"><span class="mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary"></span>transparent logic</li><li class="flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground"><span class="mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary"></span>forkable and auditable</li></ul></div><div class="panel feature-card p-5 md:p-6"><h3 class="font-heading text-lg font-bold tracking-tight">No Friction / No Dependencies</h3><ul class="mt-4 space-y-2.5"><li class="flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground"><span class="mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary"></span>no backend required</li><li class="flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground"><span class="mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary"></span>no hosted control plane required</li><li class="flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground"><span class="mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary"></span>no auth/API key for local-first use</li><li class="flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground"><span class="mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary"></span>vendored source, not package runtime dependency</li><li class="flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground"><span class="mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary"></span>no proprietary SDK lock-in</li></ul></div><div class="panel feature-card p-5 md:p-6"><h3 class="font-heading text-lg font-bold tracking-tight">AI AGENT FRIENDLY</h3><ul class="mt-4 space-y-2.5"><li class="flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground"><span class="mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary"></span>legible folder structure</li><li class="flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground"><span class="mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary"></span>explicit interfaces and schemas</li><li class="flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground"><span class="mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary"></span>examples, fixtures, and clear edit points</li><li class="flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground"><span class="mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary"></span>agent-oriented docs/prompts</li></ul></div></div></section><div class="section-divider"></div><section class="section-shell"><div class="mx-auto max-w-3xl text-center"><p class="eyebrow justify-center">Belief / Mission</p><h2 class="mt-6 font-heading text-3xl font-bold tracking-tight leading-tight text-balance md:text-5xl">Retention tooling should be simple, open, and fully yours.</h2><p class="mx-auto mt-6 max-w-2xl text-sm leading-relaxed text-muted-foreground md:text-base">OpenClix gives builders 100% control with source in-repo, no complex setup burde
1n, and a single-file configuration model.</p><p class="mx-auto mt-4 max-w-2xl text-sm leading-relaxed text-muted-foreground md:text-base">It is intentionally agent-friendly, with explicit interfaces and clear edit points for safe, reviewable iteration.</p></div></section><div class="section-divider"></div><section id="faq" class="section-shell compact max-w-4xl"><div class="flex flex-col items-center gap-4 text-center"><span class="eyebrow justify-center">Common questions</span><h2 class="font-heading text-3xl font-bold tracking-tight md:text-4xl">FAQ</h2><p class="lede text-sm text-measure md:text-base">Quick answers before you adopt OpenClix.</p></div><div data-slot="accordion" class="mt-10 w-full panel px-5 py-2 md:px-6" data-orientation="vertical"><div data-state="closed" data-orientation="vertical" data-slot="accordion-item" class="border-b last:border-b-0 border-border/70 py-1"><h3 data-orientation="vertical" data-state="closed" class="flex"><button type="button" aria-controls="radix-_R_8qjavb_" aria-expanded="false" data-state="closed" data-orientation="vertical" id="radix-_R_qjavb_" data-slot="accordion-trigger" class="focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&amp;[data-state=open]&gt;svg]:rotate-180 font-heading text-left text-base font-semibold hover:text-primary transition-colors" data-radix-collection-item="">Is this a notification library or a full platform?<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></h3><div data-state="closed" id="radix-_R_8qjavb_" hidden="" role="region" aria-labelledby="radix-_R_qjavb_" data-orientation="vertical" data-slot="accordion-content" class="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm" style="--radix-accordion-content-height:var(--radix-collapsible-content-height);--radix-accordion-content-width:var(--radix-collapsible-content-width)"></div></div><div data-state="closed" data-orientation="vertical" data-slot="accordion-item" class="border-b last:border-b-0 border-border/70 py-1"><h3 data-orientation="vertical" data-state="closed" class="flex"><button type="button" aria-controls="radix-_R_9ajavb_" aria-expanded="false" data-state="closed" data-orientation="vertical" id="radix-_R_1ajavb_" data-slot="accordion-trigger" class="focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&amp;[data-state=open]&gt;svg]:rotate-180 font-heading text-left text-base font-semibold hover:text-primary transition-colors" data-radix-collection-item="">Do I need a backend or push infrastructure?<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></h3><div data-state="closed" id="radix-_R_9ajavb_" hidden="" role="region" aria-labelledby="radix-_R_1ajavb_" data-orientation="vertical" data-slot="accordion-content" class="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm" style="--radix-accordion-content-height:var(--radix-collapsible-content-height);--radix-accordion-content-width:var(--radix-collapsible-content-width)"></div></div><div data-state="closed" data-orientation="vertical" data-slot="accordion-item" class="border-b last:border-b-0 border-border/70 py-1"><h3 data-orientation="vertical" data-state="closed" class="flex"><button type="button" aria-controls="radix-_R_9qjavb_" aria-expanded="false" data-state="closed" data-orientation="vertical" id="radix-_R_1qjavb_" data-slot="accordion-trigger" class="focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 roun
1ded-md py-4 outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&amp;[data-state=open]&gt;svg]:rotate-180 font-heading text-left text-base font-semibold hover:text-primary transition-colors" data-radix-collection-item="">Do I install OpenClix as a package dependency?<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></h3><div data-state="closed" id="radix-_R_9qjavb_" hidden="" role="region" aria-labelledby="radix-_R_1qjavb_" data-orientation="vertical" data-slot="accordion-content" class="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm" style="--radix-accordion-content-height:var(--radix-collapsible-content-height);--radix-accordion-content-width:var(--radix-collapsible-content-width)"></div></div><div data-state="closed" data-orientation="vertical" data-slot="accordion-item" class="border-b last:border-b-0 border-border/70 py-1"><h3 data-orientation="vertical" data-state="closed" class="flex"><button type="button" aria-controls="radix-_R_aajavb_" aria-expanded="false" data-state="closed" data-orientation="vertical" id="radix-_R_2ajavb_" data-slot="accordion-trigger" class="focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&amp;[data-state=open]&gt;svg]:rotate-180 font-heading text-left text-base font-semibold hover:text-primary transition-colors" data-radix-collection-item="">Do I need Clix-hosted services or a control plane?<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></h3><div data-state="closed" id="radix-_R_aajavb_" hidden="" role="region" aria-labelledby="radix-_R_2ajavb_" data-orientation="vertical" data-slot="accordion-content" class="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm" style="--radix-accordion-content-height:var(--radix-collapsible-content-height);--radix-accordion-content-width:var(--radix-collapsible-content-width)"></div></div><div data-state="closed" data-orientation="vertical" data-slot="accordion-item" class="border-b last:border-b-0 border-border/70 py-1"><h3 data-orientation="vertical" data-state="closed" class="flex"><button type="button" aria-controls="radix-_R_aqjavb_" aria-expanded="false" data-state="closed" data-orientation="vertical" id="radix-_R_2qjavb_" data-slot="accordion-trigger" class="focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&amp;[data-state=open]&gt;svg]:rotate-180 font-heading text-left text-base font-semibold hover:text-primary transition-colors" data-radix-collection-item="">How can I deliver openclix-config.json?<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></h3><div data-state="closed" id="radix-_R_aqjavb_" hidden="" role="region" aria-labelledby="radix-_R_2qjavb_" data-orientation="vertical" data-slot="accordion-content" 
1class="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm" style="--radix-accordion-content-height:var(--radix-collapsible-content-height);--radix-accordion-content-width:var(--radix-collapsible-content-width)"></div></div><div data-state="closed" data-orientation="vertical" data-slot="accordion-item" class="border-b last:border-b-0 border-border/70 py-1"><h3 data-orientation="vertical" data-state="closed" class="flex"><button type="button" aria-controls="radix-_R_bajavb_" aria-expanded="false" data-state="closed" data-orientation="vertical" id="radix-_R_3ajavb_" data-slot="accordion-trigger" class="focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&amp;[data-state=open]&gt;svg]:rotate-180 font-heading text-left text-base font-semibold hover:text-primary transition-colors" data-radix-collection-item="">Can AI agents actually modify this safely?<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></h3><div data-state="closed" id="radix-_R_bajavb_" hidden="" role="region" aria-labelledby="radix-_R_3ajavb_" data-orientation="vertical" data-slot="accordion-content" class="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm" style="--radix-accordion-content-height:var(--radix-collapsible-content-height);--radix-accordion-content-width:var(--radix-collapsible-content-width)"></div></div><div data-state="closed" data-orientation="vertical" data-slot="accordion-item" class="border-b last:border-b-0 border-border/70 py-1"><h3 data-orientation="vertical" data-state="closed" class="flex"><button type="button" aria-controls="radix-_R_bqjavb_" aria-expanded="false" data-state="closed" data-orientation="vertical" id="radix-_R_3qjavb_" data-slot="accordion-trigger" class="focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&amp;[data-state=open]&gt;svg]:rotate-180 font-heading text-left text-base font-semibold hover:text-primary transition-colors" data-radix-collection-item="">When is OpenClix enough vs when do I need a full engagement platform?<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></h3><div data-state="closed" id="radix-_R_bqjavb_" hidden="" role="region" aria-labelledby="radix-_R_3qjavb_" data-orientation="vertical" data-slot="accordion-content" class="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm" style="--radix-accordion-content-height:var(--radix-collapsible-content-height);--radix-accordion-content-width:var(--radix-collapsible-content-width)"></div></div><div data-state="closed" data-orientation="vertical" data-slot="accordion-item" class="border-b last:border-b-0 border-border/70 py-1"><h3 data-orientation="vertical" data-state="closed" class="flex"><button type="button" aria-controls="radix-_R_cajavb_" aria-expanded="false" data-state="closed" data-orientation="vertical" id="radix-_R_4ajavb_" data-slot="accordion-trigger" class="focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&amp;[data-state=open]&gt;svg]:rotate-180 font-heading text-left text-base font-semibold hover:text-primary transition-colors" data-radix-collection-item="">How should I handle third-party OpenClaw plugins in retention operations?<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></h3><div data-state="closed" id="radix-_R_cajavb_" hidden="" role="region" aria-labelledby="radix-_R_4ajavb_" data-orientation="vertical" data-slot="accordion-content" 
1class="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm" style="--radix-accordion-content-height:var(--radix-collapsible-content-height);--radix-accordion-content-width:var(--radix-collapsible-content-width)"></div></div></div></section><div class="section-divider"></div><footer class="w-full px-6 py-12 md:py-16"><div class="mx-auto grid max-w-[78rem] grid-cols-1 gap-10 md:grid-cols-3"><div><p class="font-heading text-lg font-bold tracking-tight text-primary">OpenClix</p><p class="mt-3 max-w-xs text-sm leading-relaxed text-muted-foreground">Open-source, local-first mobile engagement automation.</p></div><div><p class="footer-category">Resources</p><nav class="mt-3 flex flex-col gap-2.5"><a href="https://docs.openclix.ai/getting-started/installation" class="text-sm text-muted-foreground hover:text-foreground transition-colors" target="_blank" rel="noopener noreferrer">Documentation</a><a href="https://github.com/openclix/openclix" class="text-sm text-muted-foreground hover:text-foreground transition-colors" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#quickstart" class="text-sm text-muted-foreground hover:text-foreground transition-colors">Quickstart</a></nav></div><div><p class="footer-category">Project</p><nav class="mt-3 flex flex-col gap-2.5"><a href="#faq" class="text-sm text-muted-foreground hover:text-foreground transition-colors">FAQ</a><a href="https://github.com/openclix/openclix/blob/main/LICENSE" class="text-sm text-muted-foreground hover:text-foreground transition-colors" target="_blank" rel="noopener noreferrer">License (MIT)</a></nav></div></div><div class="mx-auto mt-10 max-w-[78rem] border-t border-border pt-6"><p class="text-center text-xs text-muted-foreground">© 2025 OpenClix. Open source under MIT License.</p></div></footer></main><!--$--><!--/$-->
1<script src="/_next/static/chunks/49849b1b478e6b82.js" id="_R_" async=""></script>
1<script>(self.__next_f=self.__next_f||[]).push([0])</script>
1<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/2f236954d6a65e12.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/2f236954d6a65e12.js\"],\"default\"]\na:I[68027,[],\"default\"]\n:HL[\"/_next/static/chunks/67db12c30bb0db59.css\",\"style\"]\n:HL[\"/_next/static/media/0c89a48fa5027cee-s.p.4564287c.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/f06bf9da926bae75-s.p.c68a79fb.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n4:Tec3,"])</script>
1<script>self.__next_f.push([1,"{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"SoftwareApplication\",\"name\":\"OpenClix\",\"url\":\"https://openclix.ai\",\"applicationCategory\":\"DeveloperApplication\",\"operatingSystem\":\"iOS, Android\",\"description\":\"Open-source, local-first foundation for agent-based mobile app retention and engagement automation using config-driven, on-device messaging logic.\",\"keywords\":[\"mobile app retention automation\",\"mobile engagement automation\",\"agent-driven retention ops\",\"OpenClaw\",\"Claude Code\",\"Codex\"],\"featureList\":[\"openclix-init integration automation\",\"openclix-design-campaigns config generation\",\"openclix-analytics impact measurement\",\"openclix-update-campaigns recommendation drafting\",\"retention_ops_automation multi-agent prompt generation\"],\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"USD\"}},{\"@type\":\"Organization\",\"name\":\"OpenClix\",\"url\":\"https://openclix.ai\",\"logo\":\"https://openclix.ai/icon-512.png\",\"sameAs\":[\"https://github.com/openclix/openclix\"]},{\"@type\":\"WebSite\",\"name\":\"OpenClix\",\"url\":\"https://openclix.ai\",\"description\":\"Documentation and workflows for agent-based mobile app retention and engagement automation with OpenClaw, Claude Code, and Codex.\"},{\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"Is this a notification library or a full platform?\",\"acceptedA
1nswer\":{\"@type\":\"Answer\",\"text\":\"OpenClix is an open-source reference codebase for on-device engagement logic (local notifications and in-app messaging hooks), not a hosted full engagement platform.\"}},{\"@type\":\"Question\",\"name\":\"Do I need a backend or push infrastructure?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"No backend or APNS/FCM send pipeline is required for the local-first path. OpenClix focuses on on-device execution with openclix-config.json-driven behavior.\"}},{\"@type\":\"Question\",\"name\":\"Do I install OpenClix as a package dependency?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"No. OpenClix is source-distributed: the client code is copied into your repository and checked in, so you avoid extra runtime dependency chain risk and keep full ownership of the code.\"}},{\"@type\":\"Question\",\"name\":\"Do I need Clix-hosted services or a control plane?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"No. OpenClix is intended to run in your app with your own integrations. You can start bundled, then host openclix-config.json over HTTP when you need remote updates.\"}},{\"@type\":\"Question\",\"name\":\"How can I deliver openclix-config.json?\",\"acceptedA
1nswer\":{\"@type\":\"Answer\",\"text\":\"Serve openclix-config.json over HTTP as either a static file or a dynamic API response. Updating that JSON source lets you change campaign settings without shipping a new app build.\"}},{\"@type\":\"Question\",\"name\":\"Can AI agents actually modify this safely?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"That is a core design goal. OpenClix emphasizes legible structure, explicit interfaces, and clear edit points so AI-assisted changes are easier to review and validate.\"}},{\"@type\":\"Question\",\"name\":\"When is OpenClix enough vs when do I need a full engagement platform?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"OpenClix is a strong fit for local-first onboarding, habit, re-engagement, and feature discovery flows. If you need complex vendor tooling or server-triggered, real-time push operations, pair it with a full engagement stack.\"}},{\"@type\":\"Question\",\"name\":\"How should I handle third-party OpenClaw plugins in retention operations?\",\"acceptedA
1nswer\":{\"@type\":\"Answer\",\"text\":\"OpenClix's own skills are first-party and auditable in this repository. When using additional third-party OpenClaw plugins from outside this repository, review their source before execution, prefer sandboxed runs, and keep human approval gates before applying campaign config changes.\"}}]}]}"])</script>
1<script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"NWi1iaUni1_Di2akn_sHu\",\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/67db12c30bb0db59.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"space_grotesk_5cebdf44-module__vQKikG__variable instrument_sans_78f5c044-module__HyMxXW__variable scroll-smooth\",\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-screen\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$4\"}}],\"$L5\",\"$L6\"],[\"$L7\"],\"$L8\"]}],{},null,false,false]},null,false,false],\"$L9\",false]],\"m\":\"$undefined\",\"G\":[\"$a\",[]],\"S\":true}\n"])</script>
1<script>self.__next_f.push([1,"15:I[97367,[\"/_next/static/chunks/2f236954d6a65e12.js\"],\"OutletBoundary\"]\n16:\"$Sreact.suspense\"\n18:I[97367,[\"/_next/static/chunks/2f236954d6a65e12.js\"],\"ViewportBoundary\"]\n1a:I[97367,[\"/_next/static/chunks/2f236954d6a65e12.js\"],\"MetadataBoundary\"]\n5:[\"$\",\"header\",null,{\"className\":\"site-navbar\",\"children\":[\"$\",\"div\",null,{\"className\":\"site-navbar-inner\",\"children\":[[\"$\",\"a\",null,{\"href\":\"/\",\"className\":\"font-heading text-lg font-bold text-primary tracking-tight\",\"children\":\"OpenClix\"}],[\"$\",\"nav\",null,{\"className\":\"flex items-center gap-6\",\"children\":[[[\"$\",\"a\",\"Quickstart\",{\"href\":\"#quickstart\",\"className\":\"hidden md:inline-block text-sm text-muted-foreground hover:text-foreground transition-colors\",\"children\":\"Quickstart\"}],[\"$\",\"a\",\"FAQ\",{\"href\":\"#faq\",\"className\":\"hidden md:inline-block text-sm text-muted-foreground hover:text-foreground transition-colors\",\"children\":\"FAQ\"}]],[\"$\",\"a\",null,{\"href\":\"https://github.com/openclix/openclix\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"hidden md:inline-block text-sm text-muted-foreground hover:text-foreground transition-colors\",\"children\":\"GitHub\"}],[\"$\",\"a\",null,{\"href\":\"https://docs.openclix.ai/getting-started/installation\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"inline-flex items-center h-8 px-4 text-sm font-semibold rounded-md border border-primary/40 text-primary hover:bg-primary/10 transition-colors\",\"children\":\"Docs\"}]]}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"6:[\"$\",\"main\",null,{\"className\":\"w-full\",\"children\":[[\"$\",\"section\",null,{\"id\":\"hero\",\"className\":\"section-shell glow pt-28 md:pt-36 pb-16\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto flex max-w-4xl flex-col items-center gap-6 text-center\",\"children\":[[\"$\",\"span\",null,{\"className\":\"eyebrow hero-animate\",\"children\":\"Open-source local-first engagement\"}],[\"$\",\"h1\",null,{\"className\":\"hero-animate hero-animate-delay-1 font-heading text-5xl md:text-7xl font-bold tracking-tighter leading-[1.02]\",\"children\":[\"Build retention flows\",[\"$\",\"br\",null,{}],\"without the infra maze\"]}],[\"$\",\"p\",null,{\"className\":\"hero-animate hero-animate-delay-2 lede text-base md:text-lg max-w-2xl text-balance\",\"children\":\"Source-first, config-driven mobile engagement logic that runs on-device. Ship quickly with clear ownership.\"}],[\"$\",\"div\",null,{\"className\":\"hero-animate hero-animate-delay-3 flex flex-wrap items-center justify-center gap-3 pt-2\",\"children\":[[\"$\",\"a\",null,{\"href\":\"https://docs.openclix.ai/getting-started/installation\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Read Docs\",\"data-slot\":\"button\",\"data-variant\":\"default\",\"data-size\":\"lg\",\"className\":\"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm transition-all disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none [\u0026_svg:not([class*='size-'])]:size-4 shrink-0 [\u0026_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[\u003esvg]:px-4 font-semibold shadow-[0_0_0_1px_rgba(255,255,255,0.06)_inset]\",\"ref\":null}],[\"$\",\"a\",null,{\"href\":\"https://github.com/openclix/openclix\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"See GitHub\",\"data-slot\":\"button\",\"data-variant\":\"outline\",\"data-size\":\"lg\",\"className\":\"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm transition-all disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none [\u0026_svg:not([class*='size-'])]:size-4 shrink-0 [\u0026_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 h-10 rounded-md px-6 has-[\u003esvg]:px-4 font-semibold\",\"ref\":null}]]}]]}]}],[[\"$\",\"div\",null,{\"className\":\"section-divider\"}],[\"$\",\"section\",null,{\"className\":\"section-shell compact\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-5xl\",\"children\":[[\"$\",\"p\",null,{\"className\":\"eyebrow mb-8 justify-center text-center\",\"children\":\"Built for\"}],[\"$\",\"div\",null,{\"className\":\"grid grid-cols-2 md:grid-cols-4 gap-4\",\"children\":[[\"$\",\"div\",\"Indie Builders\",{\"className\":\"panel-muted px-4 py-4 text-center\",\"children\":[[\"$\",\"p\",null,{\"className\":\"font-heading text-sm font-semibold text-foreground\",\"children\":\"Indie Builders\"}],[\"$\",\"p\",null,{\"className\":\"mt-1.5 text-xs leading-relaxed text-muted-foreground\",\"children\":\"Launch onboarding nudges, streak reminders, and re-engagement flows in one sprint.\"}]]}],[\"$\",\"div\",\"Product Teams\",{\"className\":\"panel-muted px-4 py-4 text-center\",\"children\":[[\"$\",\"p\",null,{\"className\":\"font-heading text-sm font-semibold text-foreground\",\"children\":\"Product Teams\"}],[\"$\",\"p\",null,{\"className\":\"mt-1.5 text-xs leading-relaxed text-muted-foreground\",\"children\":\"Run retention experiments before committing to a full engagement platform.\"}]]}],[\"$\",\"div\",\"Agencies\",{\"className\":\"panel-muted px-4 py-4 text-center\",\"children\":[\"$Lb\",\"$Lc\"]}],\"$Ld\"]}]]}]}],\"$Le\",\"$Lf\",\"$L10\",\"$L11\"],\"$L12\",\"$L13\",\"$L14\"]}]\n"])</script>
1<script>self.__next_f.push([1,"7:[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/b62af40e0fdd7a63.js\",\"async\":true,\"nonce\":\"$undefined\"}]\n8:[\"$\",\"$L15\",null,{\"children\":[\"$\",\"$16\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@17\"}]}]\n9:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L18\",null,{\"children\":\"$L19\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L1a\",null,{\"children\":[\"$\",\"$16\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1b\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\n"])</script>
1<script>self.__next_f.push([1,"1e:I[3576,[\"/_next/static/chunks/b62af40e0fdd7a63.js\"],\"FAQ\"]\nb:[\"$\",\"p\",null,{\"className\":\"font-heading text-sm font-semibold text-foreground\",\"children\":\"Agencies\"}]\nc:[\"$\",\"p\",null,{\"className\":\"mt-1.5 text-xs leading-relaxed text-muted-foreground\",\"children\":\"Reuse a proven engagement foundation across client apps with predictable handoff.\"}]\nd:[\"$\",\"div\",\"Agent-First Builders\",{\"className\":\"panel-muted px-4 py-4 text-center\",\"children\":[[\"$\",\"p\",null,{\"className\":\"font-heading text-sm font-semibold text-foreground\",\"children\":\"Agent-First Builders\"}],[\"$\",\"p\",null,{\"className\":\"mt-1.5 text-xs leading-relaxed text-muted-foreground\",\"children\":\"Let your AI agent read, modify, and extend engagement rules safely.\"}]]}]\ne:[\"$\",\"div\",null,{\"className\":\"section-divider\"}]\n"])</script>
1<script>self.__next_f.push([1,"f:[\"$\",\"section\",null,{\"id\":\"quickstart\",\"className\":\"section-shell\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mx-auto mb-10 max-w-2xl text-center\",\"children\":[[\"$\",\"span\",null,{\"className\":\"eyebrow justify-center\",\"children\":\"Get started\"}],[\"$\",\"h2\",null,{\"className\":\"mt-4 font-heading text-3xl font-bold tracking-tight md:text-4xl\",\"children\":\"Quickstart\"}],[\"$\",\"p\",null,{\"className\":\"lede mt-4 text-sm md:text-base\",\"children\":\"Install OpenClix skills, then iterate with config-driven engagement logic you fully own.\"}]]}],[\"$\",\"div\",null,{\"className\":\"panel-muted mx-auto mb-10 w-full max-w-xl px-5 py-3.5 text-center\",\"children\":[\"$\",\"code\",null,{\"className\":\"font-mono text-sm text-foreground md:text-base\",\"children\":\"npx skills add openclix/openclix\"}]}],[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 gap-5 md:grid-cols-3\",\"children\":[[\"$\",\"div\",\"1\",{\"className\":\"panel feature-card p-5 md:p-6\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-heading text-2xl font-bold text-primary/60\",\"children\":1}],[\"$\",\"h3\",null,{\"className\":\"mt-2 font-heading text-base font-semibold\",\"children\":\"Vendor source into your repo\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Bring OpenClix client code in-repo as checked-in source so you can inspect and own every integration detail.\"}]]}],[\"$\",\"div\",\"2\",{\"className\":\"panel feature-card p-5 md:p-6\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-heading text-2xl font-bold text-primary/60\",\"children\":2}],[\"$\",\"h3\",null,{\"className\":\"mt-2 font-heading text-base font-semibold\",\"children\":\"Connect config JSON + event hooks\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Wire app-resource or HTTPS JSON config with app events so rules react without backend plumbing.\"}]]}],[\"$\",\"div\",\"3\",{\"className\":\"panel feature-card p-5 md:p-6\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-heading text-2xl font-bold text-primary/60\",\"children\":3}],[\"$\",\"h3\",null,{\"className\":\"mt-2 font-heading text-base font-semibold\",\"children\":\"Trigger rules and ship local engagement flows\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Run local notifications and in-app messaging logic on-device with debuggable reasons and safe edit points.\"}]]}]]}]]}]\n"])</script>
1<script>self.__next_f.push([1,"10:[\"$\",\"div\",null,{\"className\":\"section-divider\"}]\n"])</script>
1<script>self.__next_f.push([1,"11:[\"$\",\"section\",null,{\"id\":\"pillars\",\"className\":\"section-shell\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mx-auto mb-12 max-w-2xl text-center\",\"children\":[[\"$\",\"span\",null,{\"className\":\"eyebrow justify-center\",\"children\":\"Foundation\"}],[\"$\",\"h2\",null,{\"className\":\"mt-4 font-heading text-3xl font-bold tracking-tight md:text-4xl\",\"children\":\"Core Pillars\"}]]}],[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 gap-5 md:grid-cols-3\",\"children\":[[\"$\",\"div\",\"OSS\",{\"className\":\"panel feature-card p-5 md:p-6\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-heading text-lg font-bold tracking-tight\",\"children\":\"OSS\"}],[\"$\",\"ul\",null,{\"className\":\"mt-4 space-y-2.5\",\"children\":[[\"$\",\"li\",\"MIT/permissive mindset\",{\"className\":\"flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground\",\"children\":[[\"$\",\"span\",null,{\"className\":\"mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary\"}],\"MIT/permissive mindset\"]}],[\"$\",\"li\",\"transparent logic\",{\"className\":\"flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground\",\"children\":[[\"$\",\"span\",null,{\"className\":\"mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary\"}],\"transparent logic\"]}],[\"$\",\"li\",\"forkable and auditable\",{\"className\":\"flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground\",\"children\":[[\"$\",\"span\",null,{\"className\":\"mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary\"}],\"forkable and auditable\"]}]]}]]}],[\"$\",\"div\",\"No Friction / No Dependencies\",{\"className\":\"panel feature-card p-5 md:p-6\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-heading text-lg font-bold tracking-tight\",\"children\":\"No Friction / No Dependencies\"}],[\"$\",\"ul\",null,{\"className\":\"mt-4 space-y-2.5\",\"children\":[[\"$\",\"li\",\"no backend required\",{\"className\":\"flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground\",\"children\":[[\"$\",\"span\",null,{\"className\":\"mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary\"}],\"no backend required\"]}],[\"$\",\"li\",\"no hosted control plane required\",{\"className\":\"flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground\",\"children\":[[\"$\",\"span\",null,{\"className\":\"mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary\"}],\"no hosted control plane required\"]}],[\"$\",\"li\",\"no auth/API key for local-first use\",{\"className\":\"flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground\",\"children\":[[\"$\",\"span\",null,{\"className\":\"mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary\"}],\"no auth/API key for local-first use\"]}],[\"$\",\"li\",\"vendored source, not package runtime dependency\",{\"className\":\"flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground\",\"children\":[[\"$\",\"span\",null,{\"className\":\"mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary\"}],\"vendored source, not package runtime dependency\"]}],[\"$\",\"li\",\"no proprietary SDK lock-in\",{\"className\":\"flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground\",\"children\":[[\"$\",\"span\",null,{\"className\":\"mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary\"}],\"no proprietary SDK lock-in\"]}]]}]]}],[\"$\",\"div\",\"AI AGENT FRIENDLY\",{\"className\":\"panel feature-card p-5 md:p-6\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-heading text-lg font-bold tracking-tight\",\"children\":\"AI AGENT FRIENDLY\"}],[\"$\",\"ul\",null,{\"className\":\"mt-4 space-y-2.5\",\"children\":[[\"$\",\"li\",\"legible folder structure\",{\"className\":\"flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground\",\"children\":[[\"$\",\"span\",null,{\"className\":\"mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary\"}],\"legible folder structure\"]}],[\"$\",\"li\",\"explicit interfaces and schemas\",{\"className\":\"flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground\",\"children\":[[\"$\",\"span\",null,{\"className\":\"mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary\"}],\"explicit interfaces and schemas\"]}],[\"$\",\"li\",\"examples, fixtures, and clear edit points\",{\"className\":\"flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground\",\"children\":[\"$L1c\",\"examples, fixtures, and clear edit points\"]}],\"$L1d\"]}]]}]]}]]}]\n"])</script>
1<script>self.__next_f.push([1,"12:[[\"$\",\"div\",null,{\"className\":\"section-divider\"}],[\"$\",\"section\",null,{\"className\":\"section-shell\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-3xl text-center\",\"children\":[[\"$\",\"p\",null,{\"className\":\"eyebrow justify-center\",\"children\":\"Belief / Mission\"}],[\"$\",\"h2\",null,{\"className\":\"mt-6 font-heading text-3xl font-bold tracking-tight leading-tight text-balance md:text-5xl\",\"children\":\"Retention tooling should be simple, open, and fully yours.\"}],[\"$\",\"p\",null,{\"className\":\"mx-auto mt-6 max-w-2xl text-sm leading-relaxed text-muted-foreground md:text-base\",\"children\":\"OpenClix gives builders 100% control with source in-repo, no complex setup burden, and a single-file configuration model.\"}],[\"$\",\"p\",null,{\"className\":\"mx-auto mt-4 max-w-2xl text-sm leading-relaxed text-muted-foreground md:text-base\",\"children\":\"It is intentionally agent-friendly, with explicit interfaces and clear edit points for safe, reviewable iteration.\"}]]}]}]]\n13:[\"$\",\"$L1e\",null,{}]\n"])</script>
1<script>self.__next_f.push([1,"14:[[\"$\",\"div\",null,{\"className\":\"section-divider\"}],[\"$\",\"footer\",null,{\"className\":\"w-full px-6 py-12 md:py-16\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mx-auto grid max-w-[78rem] grid-cols-1 gap-10 md:grid-cols-3\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"p\",null,{\"className\":\"font-heading text-lg font-bold tracking-tight text-primary\",\"children\":\"OpenClix\"}],[\"$\",\"p\",null,{\"className\":\"mt-3 max-w-xs text-sm leading-relaxed text-muted-foreground\",\"children\":\"Open-source, local-first mobile engagement automation.\"}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"p\",null,{\"className\":\"footer-category\",\"children\":\"Resources\"}],[\"$\",\"nav\",null,{\"className\":\"mt-3 flex flex-col gap-2.5\",\"children\":[[\"$\",\"a\",\"Documentation\",{\"href\":\"https://docs.openclix.ai/getting-started/installation\",\"className\":\"text-sm text-muted-foreground hover:text-foreground transition-colors\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Documentation\"}],[\"$\",\"a\",\"GitHub\",{\"href\":\"https://github.com/openclix/openclix\",\"className\":\"text-sm text-muted-foreground hover:text-foreground transition-colors\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"GitHub\"}],[\"$\",\"a\",\"Quickstart\",{\"href\":\"#quickstart\",\"className\":\"text-sm text-muted-foreground hover:text-foreground transition-colors\",\"children\":\"Quickstart\"}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"p\",null,{\"className\":\"footer-category\",\"children\":\"Project\"}],[\"$\",\"nav\",null,{\"className\":\"mt-3 flex flex-col gap-2.5\",\"children\":[[\"$\",\"a\",\"FAQ\",{\"href\":\"#faq\",\"className\":\"text-sm text-muted-foreground hover:text-foreground transition-colors\",\"children\":\"FAQ\"}],[\"$\",\"a\",\"License (MIT)\",{\"href\":\"https://github.com/openclix/openclix/blob/main/LICENSE\",\"className\":\"text-sm text-muted-foreground hover:text-foreground transition-colors\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"License (MIT)\"}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"mx-auto mt-10 max-w-[78rem] border-t border-border pt-6\",\"children\":[\"$\",\"p\",null,{\"className\":\"text-center text-xs text-muted-foreground\",\"children\":\"© 2025 OpenClix. Open source under MIT License.\"}]}]]}]]\n"])</script>
1<script>self.__next_f.push([1,"1c:[\"$\",\"span\",null,{\"className\":\"mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary\"}]\n1d:[\"$\",\"li\",\"agent-oriented docs/prompts\",{\"className\":\"flex items-start gap-2.5 text-sm leading-relaxed text-muted-foreground\",\"children\":[[\"$\",\"span\",null,{\"className\":\"mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full bg-primary\"}],\"agent-oriented docs/prompts\"]}]\n"])</script>
1<script>self.__next_f.push([1,"19:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script>
1<script>self.__next_f.push([1,"1f:I[27201,[\"/_next/static/chunks/2f236954d6a65e12.js\"],\"IconMark\"]\n17:null\n"])</script>
1<script>self.__next_f.push([1,"1b:[[\"$\",\"title\",\"0\",{\"children\":\"OpenClix — Agent-Based Mobile App Retention \u0026 Engagement Automation\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Open-source, local-first mobile app retention and engagement automation. OpenClix uses config-driven on-device logic, source-first integration, and agent-driven operations with OpenClaw, Claude Code, and Codex.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"author\",\"href\":\"https://openclix.ai\"}],[\"$\",\"meta\",\"3\",{\"name\":\"author\",\"content\":\"OpenClix\"}],[\"$\",\"link\",\"4\",{\"rel\":\"manifest\",\"href\":\"/site.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"meta\",\"5\",{\"name\":\"keywords\",\"content\":\"openclix-config.json,mobile app retention automation,mobile engagement automation,agent-driven retention ops,agent-based mobile app retention automation,on-device campaign operations,config-driven mobile engagement,source-first mobile integration,openclix-init,openclix-design-campaigns,openclix-analytics,openclix-update-campaigns,retention_ops_automation,OpenClaw,Claude Code,Codex,iOS,Android,onboarding,re-engagement,OpenClix\"}],[\"$\",\"meta\",\"6\",{\"name\":\"creator\",\"content\":\"OpenClix\"}],[\"$\",\"meta\",\"7\",{\"name\":\"publisher\",\"content\":\"OpenClix\"}],[\"$\",\"meta\",\"8\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"9\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"link\",\"10\",{\"rel\":\"canonical\",\"href\":\"https://openclix.ai\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:title\",\"content\":\"OpenClix — Agent-Based Mobile App Retention \u0026 Engagement Automation\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:description\",\"content\":\"Open-source, local-first mobile app retention and engagement automation. OpenClix uses config-driven on-device logic, source-first integration, and agent-driven operations with OpenClaw, Claude Code, and Codex.\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:url\",\"content\":\"https://openclix.ai\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:site_name\",\"content\":\"OpenClix\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:image\",\"content\":\"https://openclix.ai/og-image.png\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"18\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"19\",{\"property\":\"og:image:alt\",\"content\":\"OpenClix — Agent-Based Mobile App Retention \u0026 Engagement Automation\"}],[\"$\",\"meta\",\"20\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"22\",{\"name\":\"twitter:title\",\"content\":\"OpenClix — Agent-Based Mobile App Retention \u0026 Engagement Automation\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:description\",\"content\":\"Open-source, local-first mobile app retention and engagement automation. OpenClix uses config-driven on-device logic, source-first integration, and agent-driven operations with OpenClaw, Claude Code, and Codex.\"}],[\"$\",\"meta\",\"24\",{\"name\":\"twitter:image\",\"content\":\"https://openclix.ai/og-image.png\"}],[\"$\",\"link\",\"25\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.168e7e9f.ico\",\"sizes\":\"32x32\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"26\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"link\",\"27\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\"}],[\"$\",\"$L1f\",\"28\",{}]]\n"])</script>
1</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.