PageSourceSearch

https://lobsterland.ing/agents/product-manager/

html lobsterland.ing collected 2026-10-09 21:46:30 UTC 49,897 bytes, 614 lines download raw bytes

1<!DOCTYPE html><html lang="en"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>AI Product Manager Agent Kit for Hosted OpenClaw</title><meta name="description" content="Launch a hosted OpenClaw product manager agent for PRDs, interview synthesis, competitive research, backlog slicing, and launch planning."><link rel="canonical" href="https://lobsterland.ing/agents/product-manager/"><!-- AI agent discovery surface (RFC 8288). Emitted as <link> elements
2         in addition to the HTTP Link header from nginx, because some
3         reverse proxies (Traefik in this cluster) strip the Link header
4         on HTTP/2 responses. Both forms are valid RFC 8288 signalling. --><link rel="api-catalog" href="/.well-known/api-catalog"><link rel="agent-skills" href="/.well-known/agent-skills/index.json"><link rel="auth.md" href="/auth.md"><link rel="llms-txt" href="/llms.txt"><!-- Auto-select locale from the browser's language preference.
5         STRICTLY ONE-WAY (en page → zh alternate) for SEO: Googlebot renders
6         with an en-US locale, so a zh→en redirect here would make every
7         /zh-cn/ page look like a JS (soft) redirect to its EN alternate and
8         risk deindexing the localized content. Visitors on a zh page who want
9         English use the header language picker.
10         Runs at most once per browser (localStorage KEY); the picker sets the
11         same KEY on a manual pick, so an explicit choice permanently disables
12         this auto-redirect. -->
12<script>
13      (function() {
14        try {
15          var KEY = "openclaw_landing_lang_redirected";
16          if (localStorage.getItem(KEY)) return;
17
18          var path = window.location.pathname;
19          var isZhPage = path.indexOf("/zh-cn/") === 0 || path === "/zh-cn";
20          if (isZhPage) {
21            // Never redirect away from a localized page (SEO + user intent:
22            // they followed a zh link on purpose).
23            localStorage.setItem(KEY, "1");
24            return;
25          }
26
27          var langs = (navigator.languages && navigator.languages.length)
28            ? navigator.languages
29            : [navigator.language || navigator.userLanguage || ""];
30          var prefersZh = langs.some(function(l) {
31            return typeof l === "string" && l.toLowerCase().indexOf("zh") === 0;
32          });
33          if (!prefersZh) {
34            localStorage.setItem(KEY, "1");
35            return;
36          }
37
38          var alt = document.querySelector('link[rel="alternate"][hreflang="zh-CN"]');
39          var href = alt && alt.getAttribute("href");
40          if (!href) return; // no localized version of this page — try again on a page that has one
41
42          var target = new URL(href, window.location.origin);
43          if (target.pathname === path) {
44            localStorage.setItem(KEY, "1");
45            return;
46          }
47
48          localStorage.setItem(KEY, "1");
49          window.location.replace(target.pathname + window.location.search + window.location.hash);
50        } catch (_) {}
51      })();
52    </script>
52<meta name="yandex-verification" content="ea4653346eac898a"><meta property="og:title" content="AI Product Manager Agent Kit for Hosted OpenClaw"><meta property="og:description" content="Launch a hosted OpenClaw product manager agent for PRDs, interview synthesis, competitive research, backlog slicing, and launch planning."><meta property="og:type" content="website"><meta property="og:url" content="https://lobsterland.ing/agents/product-manager/"><meta property="og:image" content="https://lobsterland.ing/og.png"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="AI Product Manager Agent Kit for Hosted OpenClaw"><meta name="twitter:description" content="Launch a hosted OpenClaw product manager agent for PRDs, interview synthesis, competitive research, backlog slicing, and launch planning."><meta name="twitter:image" content="https://lobsterland.ing/og.png"><meta name="theme-color" content="#FBF6EC">
52<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","@id":"https://lobsterland.ing#organization","name":"Lobsterland","alternateName":["OpenClaw Setup"],"url":"https://lobsterland.ing","logo":{"@type":"ImageObject","url":"https://lobsterland.ing/logo.png","width":512,"height":512},"description":"Managed OpenClaw hosting platform with isolated runtime, encrypted credentials, and per-model usage visibility.","sameAs":["https://lobsterland.ing","https://fazier.com/launches/openclaw-setup"],"contactPoint":{"@type":"ContactPoint","email":"[email protected]","contactType":"customer service"}}</script>
52<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","@id":"https://lobsterland.ing#website","name":"Lobsterland","url":"https://lobsterland.ing","publisher":{"@id":"https://lobsterland.ing#organization"},"potentialAction":{"@type":"SearchAction","target":"https://lobsterland.ing/blog/?q={search_term_string}","query-input":"required name=search_term_string"}}</script>
52<script>
53      (function() {
54        try {
55          var url = new URL(window.location.href);
56          if (!url.searchParams.has("ref")) return;
57          url.searchParams.delete("ref");
58          window.history.replaceState(window.history.state, "", url.toString());
59        } catch (_) {}
60      })();
61    </script>
61<script>
62      (function() {
63        try {
64          var savedThemePreference = localStorage.getItem("openclaw_landing_theme");
65          var themePreference =
66            savedThemePreference === "light" ||
67            savedThemePreference === "dark" ||
68            savedThemePreference === "system"
69              ? savedThemePreference
70              : "light";
71          var resolvedTheme = themePreference;
72          if (themePreference === "system") {
73            resolvedTheme =
74              typeof window.matchMedia === "function" && window.matchMedia("(prefers-color-scheme: dark)").matches
75                ? "dark"
76                : "light";
77          }
78          if (resolvedTheme === "dark") {
79            document.documentElement.setAttribute("data-theme", "dark");
80          } else {
81            document.documentElement.removeAttribute("data-theme");
82          }
83        } catch (_) {}
84      })();
85    </script>
85<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><!-- Non-blocking font CSS (SEO audit 2026-06-17 H5): preload-as-style then
86         flip to stylesheet so the Google Fonts request is not render-blocking.
87         display=swap avoids invisible text during the swap period. --><link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;0,9..144,600;0,9..144,700;1,9..144,400&family=Schibsted+Grotesk:wght@400;500;600;700;800;900&family=Hanken+Grotesk:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" onload="this.onload=null;this.rel='stylesheet'"><noscript><link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;0,9..144,600;0,9..144,700;1,9..144,400&family=Schibsted+Grotesk:wght@400;500;600;700;800;900&family=Hanken+Grotesk:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet"></noscript><link rel="icon" href="/favicon.ico"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="manifest" href="/site.webmanifest"><!-- GA4 with Advanced Consent Mode — fires before consent (cookieless pings), full analytics after consent -->
87<script>
88      (function() {
89        var CONSENT_KEY = "openclaw_landing_analytics_consent";
90        var GA_ID = "G-DBWHT7TWV3";
91        window.dataLayer = window.dataLayer || [];
92        function gtag(){ dataLayer.push(arguments); }
93        gtag("consent", "default", {
94          ad_storage: "denied",
95          ad_user_data: "denied",
96          ad_personalization: "denied",
97          analytics_storage: "denied"
98        });
99        var stored = localStorage.getItem(CONSENT_KEY);
100        if (stored === "accepted") {
101          gtag("consent", "update", {
102            ad_storage: "granted",
103            ad_user_data: "granted",
104            ad_personalization: "granted",
105            analytics_storage: "granted"
106          });
107        }
108        gtag("js", new Date());
109        gtag("config", GA_ID);
110        window.gtag = gtag;
111      })();
112    </script>
vendor: 63 bytes, line 112
112<script async src="https://www.googletagmanager.com/gtag/js?id=
112G-DBWHT7TWV3
vendor: 11 bytes, line 112
112"></script>
112<script defer data-website-id="dfid_5oSzfbTMLjPkCVUxwkqRe" data-domain="lobsterland.ing" src="https://datafa.st/js/script.js">
113    </script>
113<script>(function(){const posthogHost = "https://us.i.posthog.com";
114const posthogKey = "phc_5E6cXpZfjtSX3xDui5maNE6j7ozBjvPy77DQswg5ZI7";
115
116        (function() {
117          var CONSENT_KEY = "openclaw_landing_analytics_consent";
118          !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,u){var c=u.split(".");2==c.length&&(t=t[c[0]],u=c[1]),t[u]=function(){t.push([u].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var l=e;for(void 0!==a?l=e[a]=[]:a="posthog",l.people=l.people||[],l.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},l.people.toString=function(){return l.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys getNextSurveyStep onSessionId".split(" "),n=0;n<o.length;n++)g(l,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
119
120          var stored = localStorage.getItem(CONSENT_KEY);
121          posthog.init(posthogKey, {
122            // First-party reverse proxy (see nginx `location /rly/`) so adblockers
123            // don't drop ingestion. ui_host keeps toolbar/links pointed at the real app.
124            api_host: window.location.origin + "/rly",
125            ui_host: "https://us.posthog.com",
126            defaults: "2025-11-30",
127            disable_surveys_automatic_display: true,
128            persistence: "memory",
129            // identified_only behaves like "never" for anonymous visitors (no profile,
130            // no extra storage), but lets the app's cross-domain alias resolve a
131            // consented visitor's landing journey into their person. Non-consenters
132            // stay on memory persistence — no cookies, ephemeral id — unchanged.
133            person_profiles: "identified_only",
134            opt_out_capturing_by_default: stored === "rejected"
135          });
136
137          if (stored === "accepted") {
138            posthog.opt_in_capturing();
139            posthog.set_config({ persistence: "localStorage+cookie" });
140          } else if (stored === "rejected") {
141            posthog.opt_out_capturing();
142          }
143
144          var pageLocale = window.location.pathname.indexOf("/zh-cn/") === 0 || window.location.pathname === "/zh-cn" ? "zh-CN" : "en";
145          posthog.register({ page_locale: pageLocale, language: pageLocale });
146        })();
147      })();</script>
147<link rel="stylesheet" href="/_astro/about.CUkGhm2j.css">
148<link rel="stylesheet" href="/_astro/_slug_.m0TVm5ED.css"></head> <body class="theme-ink"> <div class="bg-ambient" aria-hidden="true"></div> <div class="bg-grid" aria-hidden="true"></div> <div class="v2-grain" aria-hidden="true"></div> <div class="page">  
148<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Agent Kits","item":"https://lobsterland.ing/agents/"},{"@type":"ListItem","position":2,"name":"Product Manager","item":"https://lobsterland.ing/agents/product-manager/"}]}</script>
148 
148<script type="application/ld+json">{"@context":"https://schema.org","@type":"SoftwareApplication","name":"AI Product Manager Agent Kit","applicationCategory":"BusinessApplication","operatingSystem":"Web","description":"Launch a hosted OpenClaw product manager agent for PRDs, interview synthesis, competitive research, backlog slicing, and launch planning.","url":"https://lobsterland.ing/agents/product-manager/","offers":{"@type":"Offer","availability":"https://schema.org/InStock"}}</script>
148 <div class="site-header-sticky" data-astro-cid-ctg3m53h> <header class="container" data-astro-cid-ctg3m53h> <nav class="nav" data-astro-cid-ctg3m53h> <a class="brand" href="/" data-astro-cid-ctg3m53h> <img class="brand-mark" src="/lobsterland-mark.png" width="30" height="30" alt="" aria-hidden="true" loading="eager" decoding="async" data-astro-cid-ctg3m53h> <span class="brand-lockup" data-astro-cid-ctg3m53h> <span class="brand-text" data-astro-cid-ctg3m53h>Lobsterland</span> </span> </a> <div class="nav-links" id="nav-links" data-astro-cid-ctg3m53h> <a href="/openclaw/" data-astro-cid-ctg3m53h>OpenClaw</a><a href="/hermes/" data-astro-cid-ctg3m53h>Hermes<span class="nav-badge" data-astro-cid-ctg3m53h>New</span></a><a href="/#pricing" data-astro-cid-ctg3m53h>Pricing</a><a href="/security/" data-astro-cid-ctg3m53h>Security</a><a href="/compare/" data-astro-cid-ctg3m53h>Compare</a><a href="/#faq" data-astro-cid-ctg3m53h>FAQ</a> </div> <div class="nav-actions" data-astro-cid-ctg3m53h> <div class="lang-picker" id="lang-picker" data-astro-cid-ctg3m53h> <button class="lang-picker__trigger" type="button" id="lang-trigger" aria-expanded="false" aria-haspopup="true" aria-controls="lang-menu" aria-label="Change language (current: English)" data-astro-cid-ctg3m53h> <svg class="lang-picker__globe" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-ctg3m53h> <circle cx="12" cy="12" r="9" data-astro-cid-ctg3m53h></circle> <path d="M3 12h18" data-astro-cid-ctg3m53h></path> <path d="M12 3a15.3 15.3 0 0 1 4 9 15.3 15.3 0 0 1-4 9 15.3 15.3 0 0 1-4-9 15.3 15.3 0 0 1 4-9z" data-astro-cid-ctg3m53h></path> </svg> <span class="lang-picker__current" data-astro-cid-ctg3m53h>EN</span> <svg class="lang-picker__caret" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-ctg3m53h> <polyline points="6 9 12 15 18 9" data-astro-cid-ctg3m53h></polyline> </svg> </button> <div class="lang-picker__menu" id="lang-menu" data-astro-cid-ctg3m53h> <span class="lang-picker__option lang-picker__option--current" lang="en" aria-current="true" data-astro-cid-ctg3m53h>
148 English <svg class="lang-picker__check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-ctg3m53h> <polyline points="20 6 9 17 4 12" data-astro-cid-ctg3m53h></polyline> </svg> </span><a class="lang-picker__option" href="/zh-cn/" hreflang="zh-CN" lang="zh-CN" data-lang-pick data-astro-cid-ctg3m53h>简体中文</a> </div> </div> <a class="v2-btn nav-cta" href="https://app.lobsterland.ing/login" data-astro-cid-ctg3m53h>Start hosted OpenClaw</a> <button class="hamburger" type="button" id="hamburger" aria-label="Open menu" aria-expanded="false" data-astro-cid-ctg3m53h> <svg class="hamburger__icon hamburger__icon--open" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" data-astro-cid-ctg3m53h> <line x1="3" y1="6" x2="21" y2="6" data-astro-cid-ctg3m53h></line> <line x1="3" y1="12" x2="21" y2="12" data-astro-cid-ctg3m53h></line> <line x1="3" y1="18" x2="21" y2="18" data-astro-cid-ctg3m53h></line> </svg> <svg class="hamburger__icon hamburger__icon--close" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" data-astro-cid-ctg3m53h> <line x1="18" y1="6" x2="6" y2="18" data-astro-cid-ctg3m53h></line> <line x1="6" y1="6" x2="18" y2="18" data-astro-cid-ctg3m53h></line> </svg> </button> </div> </nav> <div class="mobile-menu" id="mobile-menu" data-astro-cid-ctg3m53h> <a href="/openclaw/" class="mobile-menu__link" data-astro-cid-ctg3m53h>OpenClaw</a><a href="/hermes/" class="mobile-menu__link" data-astro-cid-ctg3m53h>Hermes<span class="nav-badge" data-astro-cid-ctg3m53h>New</span></a><a href="/#pricing" class="mobile-menu__link" data-astro-cid-ctg3m53h>Pricing</a><a href="/security/" class="mobile-menu__link" data-astro-cid-ctg3m53h>Security</a><a href="/compare/" class="mobile-menu__link" data-astro-cid-ctg3m53h>Compare</a><a href="/#faq" class="mobile-menu__link" data-astro-cid-ctg3m53h>FAQ</a><a href="https://app.lobsterland.ing/login" class="mobile-menu__link" data-astro-cid-ctg3m53h>Login</a> <div class="mobile-menu__langs" aria-label="Change language" data-astro-cid-ctg3m53h> <span class="mobile-menu__lang mobile-menu__lang--current" lang="en" aria-current="true" data-astro-cid-ctg3m53h>
148 English <svg class="lang-picker__check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-ctg3m53h> <polyline points="20 6 9 17 4 12" data-astro-cid-ctg3m53h></polyline> </svg> </span><a class="mobile-menu__lang" href="/zh-cn/" hreflang="zh-CN" lang="zh-CN" data-lang-pick data-astro-cid-ctg3m53h>简体中文</a> </div> </div> </header> </div>  
148<script>
149  (function() {
150    var hamburger = document.getElementById('hamburger');
151    var mobileMenu = document.getElementById('mobile-menu');
152    if (!hamburger || !mobileMenu) return;
153
154    hamburger.addEventListener('click', function() {
155      var isOpen = mobileMenu.classList.toggle('mobile-menu--open');
156      hamburger.setAttribute('aria-expanded', String(isOpen));
157      hamburger.classList.toggle('hamburger--active', isOpen);
158    });
159
160    // Close menu when a link is clicked
161    mobileMenu.addEventListener('click', function(e) {
162      if (e.target.closest('a')) {
163        mobileMenu.classList.remove('mobile-menu--open');
164        hamburger.setAttribute('aria-expanded', 'false');
165        hamburger.classList.remove('hamburger--active');
166      }
167    });
168  })();
169
170  (function() {
171    var picker = document.getElementById('lang-picker');
172    var trigger = document.getElementById('lang-trigger');
173    if (!picker || !trigger) return;
174
175    function closePicker() {
176      picker.classList.remove('lang-picker--open');
177      trigger.setAttribute('aria-expanded', 'false');
178    }
179
180    trigger.addEventListener('click', function() {
181      var isOpen = picker.classList.toggle('lang-picker--open');
182      trigger.setAttribute('aria-expanded', String(isOpen));
183    });
184
185    document.addEventListener('click', function(e) {
186      if (!picker.contains(e.target)) closePicker();
187    });
188
189    document.addEventListener('keydown', function(e) {
190      if (e.key === 'Escape' && picker.classList.contains('lang-picker--open')) {
191        closePicker();
192        trigger.focus();
193      }
194    });
195
196    // A manual language pick must win over the browser-language auto-redirect
197    // (BaseLayout). Mark it as already-run so it never bounces the user back.
198    document.addEventListener('click', function(e) {
199      if (e.target.closest('[data-lang-pick]')) {
200        try { localStorage.setItem('openclaw_landing_lang_redirected', '1'); } catch (_) {}
201      }
202    });
203  })();
204</script>
204 <main class="editorial" data-astro-cid-2q6sx75q> <section class="kit-hero" data-astro-cid-2q6sx75q> <div class="container kit-hero__inner" data-astro-cid-2q6sx75q> <div data-astro-cid-2q6sx75q> <a class="back-link" href="/agents/" data-astro-cid-2q6sx75q>Agent Kits</a> <div class="eyebrow" data-astro-cid-2q6sx75q>Product work · medium tier</div> <h1 data-astro-cid-2q6sx75q>AI Product Manager Agent Kit</h1> <p class="lead" data-astro-cid-2q6sx75q>Convert research, feedback, and product context into PRDs, roadmaps, and buildable tickets.</p> <p class="kit-summary" data-astro-cid-2q6sx75q>Use this kit to structure discovery, synthesize interviews, draft product briefs, slice scope, and prepare Jira, Linear, or GitHub tickets once integrations are connected.</p> <div class="kit-actions" data-astro-cid-2q6sx75q> <a class="button" href="https://app.lobsterland.ing/app/instances?intent=agent-kit&agent_kit=product-manager&entry=agent-kit-product-manager" data-astro-cid-2q6sx75q>Create this agent</a> <a class="button button-secondary" href="/agents/" data-astro-cid-2q6sx75q>Browse all kits</a> </div> </div> <aside class="kit-panel" aria-label="Product Manager kit summary" data-astro-cid-2q6sx75q> <div class="kit-panel__top" data-astro-cid-2q6sx75q> <span data-astro-cid-2q6sx75q>Product PM</span> <strong data-astro-cid-2q6sx75q>product-manager</strong> </div> <div class="kit-panel__body" data-astro-cid-2q6sx75q> <h2 data-astro-cid-2q6sx75q>Launches with</h2> <ul data-astro-cid-2q6sx75q> <li data-astro-cid-2q6sx75q>AGENTS.md</li><li data-astro-cid-2q6sx75q>IDENTITY.md</li><li data-astro-cid-2q6sx75q>RUNBOOK.md</li><li data-astro-cid-2q6sx75q>SETUP.md</li><li data-astro-cid-2q6sx75q>TOOLS.md</li> </ul> <h2 class="kit-panel__subhead" data-astro-cid-2q6sx75q>Managed toolbelt</h2> <ul data-astro-cid-2q6sx75q> <li data-astro-cid-2q6sx75q>PyGithub</li><li data-astro-cid-2q6sx75q>jira</li><li data-astro-cid-2q6sx75q>python-dateutil</li><li data-astro-cid-2q6sx75q>markdownify</li> </ul> </div> <div class="kit-panel__footer" data-astro-cid-2q6sx75q> <span data-astro-cid-2q6sx75q>Model policy</span> <strong data-astro-cid-2q6sx75q>inherit instance</strong> </div> </aside> </div> </section> <section class="section-tight" data-astro-cid-2q6sx75q> <div class="container kit-grid-two" data-astro-cid-2q6sx75q> <div data-astro-cid-2q6sx75q> <div class="eyebrow" data-astro-cid-2q6sx75q>What it does</div> <h2 data-astro-cid-2q6sx75q>Useful before any auth, better with the right tools</h2> <p data-astro-cid-2q6sx75q>
205The kit starts by installing editable operating files into the agent workspace. It can work from pasted
206            context immediately, then ask for tool access only when the current job benefits from it.
207</p> <ul class="check-list" data-astro-cid-2q6sx75q> <li data-astro-cid-2q6sx75q>PRD and discovery runbooks</li><li data-astro-cid-2q6sx75q>Backlog slicing and ticket prep workflow</li><li data-astro-cid-2q6sx75q>Competitive research and persona review prompts</li> </ul> </div> <div class="prompt-list" data-astro-cid-2q6sx75q> <div class="eyebrow" data-astro-cid-2q6sx75q>Starter prompts</div> <blockquote data-astro-cid-2q6sx75q>Interview me about this idea and turn it into a product brief.</blockquote><blockquote data-astro-cid-2q6sx75q>Synthesize these user interviews into themes, pain points, and product opportunities.</blockquote><blockquote data-astro-cid-2q6sx75q>Slice this PRD into buildable tickets with acceptance criteria.</blockquote> </div> </div> </section> <section class="section-tight" data-astro-cid-2q6sx75q> <div class="container" data-astro-cid-2q6sx75q> <div class="section-head" data-astro-cid-2q6sx75q> <div data-astro-cid-2q6sx75q> <div class="eyebrow" data-astro-cid-2q6sx75q>Toolbelt</div> <h2 data-astro-cid-2q6sx75q>Not a naked prompt. A prepared working environment.</h2> </div> <p data-astro-cid-2q6sx75q>Product work libraries for issue-tracker APIs, repository context, structured docs, and competitive research notes.</p> </div> <div class="toolbelt-grid" data-astro-cid-2q6sx75q> <article data-astro-cid-2q6sx75q> <span data-astro-cid-2q6sx75q>python</span> <h3 data-astro-cid-2q6sx75q>PyGithub</h3> <p data-astro-cid-2q6sx75q>Inspect GitHub issues, repositories, and PR metadata when the user provides approved access.</p> </article><article data-astro-cid-2q6sx75q> <span data-astro-cid-2q6sx75q>python</span> <h3 data-astro-cid-2q6sx75q>jira</h3> <p data-astro-cid-2q6sx75q>Prepare Jira issue creation and backlog update workflows after user approval.</p> </article><article data-astro-cid-2q6sx75q> <span data-astro-cid-2q6sx75q>python</span> <h3 data-astro-cid-2q6sx75q>python-dateutil</h3> <p data-astro-cid-2q6sx75q>Normalize roadmap dates, launch windows, and milestone notes.</p> </article><article data-astro-cid-2q6sx75q> <span data-astro-cid-2q6sx75q>python</span> <h3 data-astro-cid-2q6sx75q>markdownify</h3> <p data-astro-cid-2q6sx75q>Turn copied docs and web research into clean PRD-ready Markdown.</p> </article> </div> </div> </section> <section class="section-tight" data-astro-cid-2q6sx75q> <div class="container" data-astro-cid-2q6sx75q> <div class="section-head" data-astro-cid-2q6sx75q> <div data-astro-cid-2q6sx75q> <div class="eyebrow" data-astro-cid-2q6sx75q>Recommended connections</div> <h2 data-astro-cid-2q6sx75q>Proactive, permission-aware setup</h2> </div> <p data-astro-cid-2q6sx75q>
208OpenClaw Setup records what the agent should ask for and why. Native OAuth and API-key installers can
209            attach to this surface later without changing the kit contract.
210</p> </div> <div class="integration-grid" data-astro-cid-2q6sx75q> <article data-astro-cid-2q6sx75q> <span data-astro-cid-2q6sx75q>recommended</span> <h3 data-astro-cid-2q6sx75q>Jira or Linear</h3> <p data-astro-cid-2q6sx75q>Issue tracker access lets the agent turn approved scope into tickets and keep ticket references linked to the source doc.</p> <strong data-astro-cid-2q6sx75q>PRD-to-ticket workflows.</strong> </article><article data-astro-cid-2q6sx75q> <span data-astro-cid-2q6sx75q>recommended</span> <h3 data-astro-cid-2q6sx75q>GitHub</h3> <p data-astro-cid-2q6sx75q>Repository context helps the agent produce technically grounded scope and implementation notes.</p> <strong data-astro-cid-2q6sx75q>Code-aware product specs and issue updates.</strong> </article> </div> </div> </section> <section class="section-tight" data-astro-cid-2q6sx75q> <div class="container safety-band" data-astro-cid-2q6sx75q> <div data-astro-cid-2q6sx75q> <div class="eyebrow" data-astro-cid-2q6sx75q>Safety model</div> <h2 data-astro-cid-2q6sx75q>External actions stay behind approval</h2> </div> <div class="safety-columns" data-astro-cid-2q6sx75q> <div data-astro-cid-2q6sx75q> <h3 data-astro-cid-2q6sx75q>Approval required</h3> <ul data-astro-cid-2q6sx75q> <li data-astro-cid-2q6sx75q>creating tickets</li><li data-astro-cid-2q6sx75q>updating tickets</li><li data-astro-cid-2q6sx75q>posting launch notes</li><li data-astro-cid-2q6sx75q>messaging stakeholders</li> </ul> </div> <div data-astro-cid-2q6sx75q> <h3 data-astro-cid-2q6sx75q>Blocked claims</h3> <ul data-astro-cid-2q6sx75q> <li data-astro-cid-2q6sx75q>replaces product judgment</li><li data-astro-cid-2q6sx75q>can validate demand without user evidence</li> </ul> </div> </div> </div> </section> </main> <footer class="footer" data-astro-cid-sz7xmlte> <div class="container footer__inner" data-astro-cid-sz7xmlte> <div class="footer__row" data-astro-cid-sz7xmlte> <div class="footer__brand" data-astro-cid-sz7xmlte> <span class="footer__brand-name" data-astro-cid-sz7xmlte>lobsterland.ing</span> <span class="footer__brand-year" data-astro-cid-sz7xmlte>© 2026</span> </div> <nav class="footer__links" aria-label="Footer navigation" data-astro-cid-sz7xmlte> <a href="/features/" data-astro-cid-sz7xmlte>Features</a><a href="/agents/" data-astro-cid-sz7xmlte>Agents</a><a href="/openclaw/" data-astro-cid-sz7xmlte>OpenClaw</a><a href="/hermes/" data-astro-cid-sz7xmlte>Hermes</a><a href="/openclaw-vs-hermes/" data-astro-cid-sz7xmlte>OpenClaw vs Hermes</a><a href="/compare/" data-astro-cid-sz7xmlte>Compare</a><a href="/managed-openclaw-hosting/" data-astro-cid-sz7xmlte>Managed Hosting</a><a href="/openclaw-cloud-hosting/" data-astro-cid-sz7xmlte>Cloud Hosting</a><a href="/openclaw-browser-agent-hosting/" data-astro-cid-sz7xmlte>Browser Hosting</a><a href="/managed-openclaw-hosting-non-technical-users/" data-astro-cid-sz7xmlte>Non-Technical Setup</a><a href="/hosted-ai-agent-workspace/" data-astro-cid-sz7xmlte>Agent Workspace</a><a href="/always-on-ai-agent-telegram-slack/" data-astro-cid-sz7xmlte>Always-On Agents</a><a href="/openclaw-with-browser/" data-astro-cid-sz7xmlte>Hosted Browser</a><a href="/for/self-hosters/" data-astro-cid-sz7xmlte>For Self-Hosters</a><a href="/for/founders/" data-astro-cid-sz7xmlte>For Founders</a><a href="/for/engineering-teams/" data-astro-cid-sz7xmlte>For Teams</a><a href="/developers/" data-astro-cid-sz7xmlte>Developers</a><a href="/blog/tutorials/" data-astro-cid-sz7xmlte>Tutorials</a><a href="/blog/" data-astro-cid-sz7xmlte>Blog</a><a href="/answer-hub/" data-astro-cid-sz7xmlte>Answer Hub</a><a href="/about/" data-astro-cid-sz7xmlte>About</a><a href="/security/" data-astro-cid-sz7xmlte>Security</a><a href="/privacy/" data-astro-cid-sz7xmlte>Privacy</a><a href="/terms/" data-astro-cid-sz7xmlte>Terms</a><a href="/contact/" data-astro-cid-sz7xmlte>Contact</a> </nav> </div> <div class="footer__bottom" data-astro-cid-sz7xmlte> <p class="footer__attribution" data-astro-cid-sz7xmlte> Built by Gregory Potemkin — <a href="https://www.linkedin.com/in/gregory-potemkin/" target="_blank" rel="noopener noreferrer" data-astro-cid-sz7xmlte>LinkedIn</a> <span aria-hidden="true" data-astro-cid-sz7xmlte> · </span> <a href="https://x.com/gregpotem" target="_blank" rel="noopener noreferrer" data-astro-cid-sz7xmlte>X</a> </p> <p class="footer__legal" data-astro-cid-sz7xmlte>Managed hosting for <a href="https://github.com/openclaw/openclaw" target="_blank" rel="noopener noreferrer" data-astro-cid-sz7xmlte>OpenClaw</a>. Hetzner K8s cluster, EU-based.</p> <button class="theme-toggle footer__theme-toggle" type="button" data-theme-toggle aria-pressed="false" aria-label="Switch theme" data-astro-cid-sz7xmlte>
210 <svg class="theme-toggle__icon theme-toggle__icon--moon" viewBox="0 0 24 24" aria-hidden="true" data-astro-cid-sz7xmlte> <path d="M21 12.79A9 9 0 1 1 11.21 3A7 7 0 0 0 21 12.79Z" data-astro-cid-sz7xmlte></path> </svg> <svg class="theme-toggle__icon theme-toggle__icon--sun" viewBox="0 0 24 24" aria-hidden="true" data-astro-cid-sz7xmlte> <circle cx="12" cy="12" r="4" data-astro-cid-sz7xmlte></circle> <line x1="12" y1="2" x2="12" y2="5" data-astro-cid-sz7xmlte></line> <line x1="12" y1="19" x2="12" y2="22" data-astro-cid-sz7xmlte></line> <line x1="2" y1="12" x2="5" y2="12" data-astro-cid-sz7xmlte></line> <line x1="19" y1="12" x2="22" y2="12" data-astro-cid-sz7xmlte></line> <line x1="4.93" y1="4.93" x2="7.05" y2="7.05" data-astro-cid-sz7xmlte></line> <line x1="16.95" y1="16.95" x2="19.07" y2="19.07" data-astro-cid-sz7xmlte></line> <line x1="4.93" y1="19.07" x2="7.05" y2="16.95" data-astro-cid-sz7xmlte></line> <line x1="16.95" y1="7.05" x2="19.07" y2="4.93" data-astro-cid-sz7xmlte></line> </svg> <svg class="theme-toggle__icon theme-toggle__icon--system" viewBox="0 0 24 24" aria-hidden="true" data-astro-cid-sz7xmlte> <rect x="3" y="4" width="18" height="12" rx="2" data-astro-cid-sz7xmlte></rect> <path d="M8 20h8" data-astro-cid-sz7xmlte></path> <path d="M12 16v4" data-astro-cid-sz7xmlte></path> </svg> <span class="sr-only" data-astro-cid-sz7xmlte>Toggle theme</span> </button> <a class="footer__badge" href="https://fazier.com/launches/openclaw-setup" target="_blank" rel="noopener noreferrer" aria-label="OpenClaw Setup on Fazier" data-astro-cid-sz7xmlte> <img src="https://fazier.com/api/v1/public/badges/embed_image.svg?launch_id=7530&badge_type=daily&theme=light" width="270" alt="Fazier badge" loading="lazy" decoding="async" data-astro-cid-sz7xmlte> </a> </div> </div> </footer>   </div> <a href="#" class="consent-prefs-link" id="cookie-preferences" aria-label="Manage cookie preferences"> Cookie preferences </a> <!-- GDPR/CCPA consent banner — GA uses Advanced Consent Mode (cookieless until consent) --> <div id="consent-banner" class="consent-banner" role="dialog" aria-label="Cookie consent"> <div class="consent-banner__content"> <p class="consent-banner__text"> We use cookies and analytics to improve our site. Your data is not sold. <a href="/privacy/">Privacy policy</a> </p> <div class="consent-banner__actions"> <button type="button" class="consent-banner__btn consent-banner__btn--reject" data-consent="reject"> Reject </button> <button type="button" class="consent-banner__btn consent-banner__btn--accept" data-consent="accept"> Accept </button> </div> </div> </div> 
210<script>
211      (function() {
212        var CONSENT_KEY = "openclaw_landing_analytics_consent";
213        function applyGaConsent(value) {
214          if (typeof window.gtag !== "function") return;
215          if (value === "accepted") {
216            window.gtag("consent", "update", {
217              ad_storage: "granted",
218              ad_user_data: "granted",
219              ad_personalization: "granted",
220              analytics_storage: "granted"
221            });
222          } else {
223            window.gtag("consent", "update", {
224              ad_storage: "denied",
225              ad_user_data: "denied",
226              ad_personalization: "denied",
227              analytics_storage: "denied"
228            });
229          }
230        }
231
232        function applyPosthogConsent(value) {
233          if (!window.posthog) return;
234          if (value === "accepted") {
235            window.posthog.opt_in_capturing();
236            window.posthog.set_config({ persistence: "localStorage+cookie" });
237          } else if (value === "rejected") {
238            window.posthog.set_config({ persistence: "memory" });
239            window.posthog.opt_out_capturing();
240          } else {
241            window.posthog.set_config({ persistence: "memory" });
242            window.posthog.opt_in_capturing();
243          }
244        }
245
246        function hideBanner() {
247          var b = document.getElementById("consent-banner");
248          if (b) b.style.display = "none";
249          var pref = document.getElementById("cookie-preferences");
250          if (pref) pref.style.display = "";
251        }
252
253        function showBanner() {
254          var b = document.getElementById("consent-banner");
255          if (b) b.style.display = "";
256          var pref = document.getElementById("cookie-preferences");
257          if (pref) pref.style.display = "none";
258        }
259
260        function setConsent(value) {
261          try { localStorage.setItem(CONSENT_KEY, value); } catch (_) {}
262          hideBanner();
263          applyGaConsent(value);
264          applyPosthogConsent(value);
265        }
266
267        function resetConsent() {
268          try { localStorage.removeItem(CONSENT_KEY); } catch (_) {}
269          applyGaConsent("rejected");
270          applyPosthogConsent("undecided");
271          showBanner();
272        }
273        window.openClawResetConsent = resetConsent;
274
275        var stored = localStorage.getItem(CONSENT_KEY);
276        if (stored === "accepted") {
277          hideBanner();
278        } else if (stored === "rejected") {
279          hideBanner();
280        } else {
281          showBanner();
282        }
283
284        document.addEventListener("click", function(e) {
285          if (e.target.closest("#cookie-preferences")) {
286            e.preventDefault();
287            resetConsent();
288            return;
289          }
290          var btn = e.target.closest("[data-consent]");
291          if (!btn) return;
292          var consent = btn.getAttribute("data-consent");
293          if (consent === "accept" || consent === "reject") setConsent(consent === "accept" ? "accepted" : "rejected");
294        });
295      })();
296    </script>
296 
296<script>
297      (function() {
298        var THEME_KEY = "openclaw_landing_theme";
299        var root = document.documentElement;
300        var THEME_ORDER = ["light", "dark", "system"];
301        var themePreference = normalizeThemePreference(localStorage.getItem(THEME_KEY));
302        var mediaQuery = typeof window.matchMedia === "function"
303          ? window.matchMedia("(prefers-color-scheme: dark)")
304          : null;
305
306        function normalizeThemePreference(value) {
307          return value === "light" || value === "dark" || value === "system" ? value : "light";
308        }
309
310        function resolveTheme(preference) {
311          if (preference !== "system") return preference;
312          if (!mediaQuery) return "light";
313          return mediaQuery.matches ? "dark" : "light";
314        }
315
316        function nextThemePreference(current) {
317          var index = THEME_ORDER.indexOf(current);
318          return THEME_ORDER[(index + 1) % THEME_ORDER.length];
319        }
320
321        function applyResolvedTheme(theme) {
322          if (theme === "dark") {
323            root.setAttribute("data-theme", "dark");
324          } else {
325            root.removeAttribute("data-theme");
326          }
327        }
328
329        function applyThemePreference(preference, persist) {
330          themePreference = normalizeThemePreference(preference);
331          var resolvedTheme = resolveTheme(themePreference);
332          applyResolvedTheme(resolvedTheme);
333          if (persist) {
334            try { localStorage.setItem(THEME_KEY, themePreference); } catch (_) {}
335          }
336          var toggles = document.querySelectorAll("[data-theme-toggle]");
337          toggles.forEach(function(toggle) {
338            var nextPreference = nextThemePreference(themePreference);
339            toggle.setAttribute("aria-pressed", String(resolvedTheme === "dark"));
340            toggle.setAttribute("aria-label", "Theme: " + themePreference + ". Switch to " + nextPreference + ".");
341            toggle.setAttribute("data-theme-state", themePreference);
342          });
343        }
344
345        document.addEventListener("click", function(e) {
346          var toggle = e.target.closest("[data-theme-toggle]");
347          if (!toggle) return;
348          e.preventDefault();
349          applyThemePreference(nextThemePreference(themePreference), true);
350        });
351
352        if (mediaQuery) {
353          var onSystemThemeChange = function() {
354            if (themePreference === "system") {
355              applyThemePreference("system", false);
356            }
357          };
358          if (typeof mediaQuery.addEventListener === "function") {
359            mediaQuery.addEventListener("change", onSystemThemeChange);
360          } else {
361            mediaQuery.addListener(onSystemThemeChange);
362          }
363        }
364
365        applyThemePreference(themePreference, false);
366      })();
367    </script>
367 
367<script>
368      (function() {
369        var MANAGED_EXPERIMENT_ID = "managed_setup_support_traffic_2026_06";
370        var MANAGED_DEFAULT_SCOPE_VERSION = "managed_setup_199_v1";
371
372        function isSignupLink(href) {
373          if (!href) return false;
374          try {
375            var url = new URL(href, window.location.origin);
376            return url.hostname === "app.lobsterland.ing" && url.pathname === "/login";
377          } catch (_) {
378            return false;
379          }
380        }
381
382        function managedOfferBaseProps(source, extra) {
383          var dataset = source && source.dataset ? source.dataset : {};
384          var props = {
385            source_page: window.location.pathname,
386            source_page_type: dataset.sourcePageType || new URLSearchParams(window.location.search).get("entry_type") || "unknown",
387            article_slug: dataset.articleSlug || window.location.pathname.replace(/^\//, "").replace(/\/$/, ""),
388            pain_point: dataset.painPoint || new URLSearchParams(window.location.search).get("pain_point") || "general_setup",
389            cta_slot: dataset.ctaSlot || new URLSearchParams(window.location.search).get("cta") || "unknown",
390            cta_variant: dataset.ctaVariant || new URLSearchParams(window.location.search).get("variant") || "managed_setup_v1",
391            intent: dataset.intent || new URLSearchParams(window.location.search).get("intent") || "demo",
392            offer_scope_version: dataset.offerScopeVersion || MANAGED_DEFAULT_SCOPE_VERSION,
393            experiment_id: dataset.experimentId || new URLSearchParams(window.location.search).get("experiment") || MANAGED_EXPERIMENT_ID,
394          };
395          if (extra) {
396            Object.keys(extra).forEach(function(key) { props[key] = extra[key]; });
397          }
398          return props;
399        }
400
401        function captureManagedOfferEvent(eventName, props) {
402          if (typeof window.gtag === "function") {
403            window.gtag("event", eventName, Object.assign({ event_category: "managed_setup_offer" }, props));
404          }
405          if (window.posthog) {
406            window.posthog.capture(eventName, props);
407          }
408        }
409
410        function inferIntent(link, url) {
411          var fromQuery = url.searchParams.get("intent");
412          if (fromQuery) return fromQuery;
413          var linkText = (link.textContent || "").toLowerCase();
414          if (linkText.includes("import")) return "import";
415          if (linkText.includes("demo") || linkText.includes("book") || linkText.includes("setup")) return "demo";
416          return "launch";
417        }
418
419        function decorateSignupUrl(url, link) {
420          var current = new URL(window.location.href);
421          var params = current.searchParams;
422          var utmKeys = ["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"];
423          var consent = null;
424
425          try {
426            consent = localStorage.getItem("openclaw_landing_analytics_consent");
427          } catch (_) {
428            consent = null;
429          }
430
431          url.searchParams.set("src", "landing");
432          url.searchParams.set("entry_path", current.pathname);
433          url.searchParams.set("entry_url", current.origin + current.pathname);
434          url.searchParams.set("referrer", document.referrer || "");
435          url.searchParams.set("intent", inferIntent(link, url));
436
437          var managedKeys = ["entry", "entry_type", "cta", "variant", "experiment", "pain_point"];
438          for (var m = 0; m < managedKeys.length; m++) {
439            var managedKey = managedKeys[m];
440            var managedValue = params.get(managedKey);
441            if (managedValue && !url.searchParams.get(managedKey)) {
442              url.searchParams.set(managedKey, managedValue);
443            }
444          }
445
446          // Pass PostHog distinct_id for cross-domain identity linking
447          if (window.posthog && typeof window.posthog.get_distinct_id === "function") {
448            var distinctId = window.posthog.get_distinct_id();
449            if (distinctId) {
450              url.searchParams.set("ph_distinct_id", distinctId);
451            }
452          }
453
454          if (consent === "accepted" || consent === "rejected") {
455            url.searchParams.set("analytics_consent", consent);
456          }
457
458          for (var i = 0; i < utmKeys.length; i++) {
459            var key = utmKeys[i];
460            var value = params.get(key);
461            if (value && !url.searchParams.get(key)) {
462              url.searchParams.set(key, value);
463            }
464          }
465          return url;
466        }
467
468        function wireSignupLinks() {
469          var links = document.querySelectorAll("a[href]");
470          links.forEach(function(link) {
471            var href = link.getAttribute("href");
472            if (!isSignupLink(href)) return;
473            var decorated = decorateSignupUrl(new URL(href, window.location.origin), link);
474            link.setAttribute("href", decorated.toString());
475          });
476        }
477
478        wireSignupLinks();
479
480        var managedLandingParams = new URLSearchParams(window.location.search);
481        if (managedLandingParams.get("experiment") === MANAGED_EXPERIMENT_ID) {
482          captureManagedOfferEvent("managed_offer_landing_view", managedOfferBaseProps(null, {
483            landing_path: window.location.pathname,
484          }));
485        }
486
487        var observedManagedOffers = typeof WeakSet === "function" ? new WeakSet() : null;
488        function markManagedOfferViewed(offer) {
489          if (!offer) return;
490          if (observedManagedOffers && observedManagedOffers.has(offer)) return;
491          if (observedManagedOffers) observedManagedOffers.add(offer);
492          captureManagedOfferEvent("managed_offer_view", managedOfferBaseProps(offer));
493        }
494
495        var managedOffers = document.querySelectorAll("[data-managed-offer]");
496        if ("IntersectionObserver" in window) {
497          var offerObserver = new IntersectionObserver(function(entries) {
498            entries.forEach(function(entry) {
499              if (entry.isIntersecting) {
500                markManagedOfferViewed(entry.target);
501                offerObserver.unobserve(entry.target);
502              }
503            });
504          }, { threshold: 0.45 });
505          managedOffers.forEach(function(offer) { offerObserver.observe(offer); });
506        } else {
507          managedOffers.forEach(markManagedOfferViewed);
508        }
509
510        document.addEventListener("click", function(e) {
511          var managedLink = e.target.closest("[data-managed-offer] a[href]");
512          if (!managedLink) return;
513          var offer = managedLink.closest("[data-managed-offer]");
514          captureManagedOfferEvent("managed_offer_click", managedOfferBaseProps(offer, {
515            cta_slot: offer && offer.dataset.ctaSlot ? offer.dataset.ctaSlot : "unknown",
516            cta_position: managedLink.getAttribute("data-managed-offer-cta") || "link",
517            target_url: managedLink.href,
518          }));
519        });
520
521        document.addEventListener("click", function(e) {
522          var intentLink = e.target.closest("[data-managed-offer-intent]");
523          if (!intentLink) return;
524          var offer = intentLink.closest("[data-managed-offer]");
525          captureManagedOfferEvent("managed_offer_intent", managedOfferBaseProps(offer || intentLink, {
526            intent: intentLink.getAttribute("data-managed-offer-intent") || "contact",
527            cta_position: intentLink.getAttribute("data-managed-offer-cta") || "link",
528            target_url: intentLink.href,
529          }));
530        });
531
532        document.addEventListener("click", function(e) {
533          var link = e.target.closest("a[href]");
534          if (!link) return;
535          var href = link.getAttribute("href");
536          if (!isSignupLink(href)) return;
537
538          var targetUrl = decorateSignupUrl(new URL(href, window.location.origin), link);
539          link.setAttribute("href", targetUrl.toString());
540
541          var intent = targetUrl.searchParams.get("intent") || "launch";
542          var sourcePath = window.location.pathname;
543          var pageLocale = sourcePath.indexOf("/zh-cn/") === 0 || sourcePath === "/zh-cn" ? "zh-CN" : "en";
544          var isManagedOfferSignup = targetUrl.searchParams.get("experiment") === MANAGED_EXPERIMENT_ID || new URLSearchParams(window.location.search).get("experiment") === MANAGED_EXPERIMENT_ID;
545          if (isManagedOfferSignup) {
546            captureManagedOfferEvent("managed_offer_signup_start", managedOfferBaseProps(link, {
547              intent: intent,
548              target_url: targetUrl.toString(),
549            }));
550          }
551          if (typeof window.gtag === "function") {
552            window.gtag("event", "click_signup", {
553              event_category: "engagement",
554              event_label: targetUrl.toString(),
555              transport_type: "beacon",
556              intent: intent,
557              source_path: sourcePath,
558              page_locale: pageLocale,
559              language: pageLocale,
560            });
561          }
562          if (window.posthog) {
563            window.posthog.capture("click_signup", {
564              target_url: targetUrl.toString(),
565              source_path: sourcePath,
566              intent: intent,
567              page_locale: pageLocale,
568              language: pageLocale,
569              entry_path: sourcePath,
570              entry_url: window.location.origin + sourcePath,
571              referrer: document.referrer || null,
572              utm_source: targetUrl.searchParams.get("utm_source"),
573              utm_medium: targetUrl.searchParams.get("utm_medium"),
574              utm_campaign: targetUrl.searchParams.get("utm_campaign"),
575              utm_term: targetUrl.searchParams.get("utm_term"),
576              utm_content: targetUrl.searchParams.get("utm_content"),
577            });
578          }
579        });
580      })();
581    </script>
581 <!-- Blog article back link --> 
581<script>
582      (function() {
583        var path = window.location.pathname;
584        if (!path.includes('/blog/') || path === '/blog/') return;
585
586        var backUrl = '/blog/';
587        var backText = 'All articles';
588
589        if (path.includes('/blog/tutorials/')) {
590          backUrl = '/blog/tutorials/';
591          backText = 'All tutorials';
592        } else if (path.includes('/use-cases/')) {
593          backUrl = '/blog/use-cases/';
594          backText = 'All use cases';
595        } else if (path.includes('/openclaw-internals/')) {
596          backUrl = '/blog/openclaw-internals/';
597          backText = 'All internals';
598        } else if (path.includes('/product-updates/')) {
599          backUrl = '/blog/product-updates/';
600          backText = 'All updates';
601        } else if (path.includes('/usage-tips/')) {
602          backUrl = '/blog/usage-tips/';
603          backText = 'All tips';
604        }
605
606        var main = document.querySelector('main section .container');
607        if (main) {
608          var backLink = document.createElement('p');
609          backLink.style.cssText = 'margin-top: var(--space-5);';
610          backLink.innerHTML = '<a href="' + backUrl + '">&larr; ' + backText + '</a>';
611          main.appendChild(backLink);
612        }
613      })();
614    </script>
614 </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.