{"id":"73c876e4-eb3e-43bd-a120-c5be2c69e3db","entityType":"agent","slug":"clawhub-wotaso-dev-growth-engineer","name":"growth-engineer","canonicalUrl":"https://www.xpersona.co/agent/clawhub-wotaso-dev-growth-engineer","canonicalPath":"/agent/clawhub-wotaso-dev-growth-engineer","generatedAt":"2026-10-10T02:15:18.825Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T05:49:34.051Z","emptyReason":null},"description":"Growth Engineer for mobile apps and agent runtimes including OpenClaw and Hermes. Correlate analytics, crashes, billing, feedback, store signals, and repo context into proposal drafts that can flow into agent chat, GitHub issues, or draft pull requests.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 4.2K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s170c9mk58sce90xhk2assttk183h5n5:growth-engineer","sourceUrl":"https://clawhub.ai/wotaso-dev/growth-engineer","homepage":"https://clawhub.ai/wotaso-dev/skills/growth-engineer","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/wotaso-dev/growth-engineer","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/wotaso-dev/skills/growth-engineer","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":73,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"growth-engineer technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T05:49:34.051Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T05:49:34.051Z","emptyReason":null},"stars":null,"forks":null,"downloads":4226,"packageName":null,"latestVersion":"1.0.210","tractionLabel":"4.2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T05:49:34.051Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T05:49:34.051Z","lastCrawledAt":"2026-10-09T05:49:34.051Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T05:49:34.051Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.210","createdAt":"2026-08-05T09:26:50.943Z","changelog":"Version 1.0.210 - Migrated major script and source files from `.mjs` to `.mts` for improved TypeScript compatibility and maintainability. - Added new exporter and shared modules in `src/`, including analytics, ASC, Coolify, Paddle, RevenueCat, Sentry, SEO, feedback API, environment, preflight, status, start, and wizard logic. - Updated and expanded tests to align with new TypeScript modules and shared library improvements. - Removed deprecated/unused files (e.g., `skill-card.md`). - Updated package and documentation to reflect the new structure and maintain agent compatibility.","fileCount":65,"zipByteSize":619675},{"version":"1.0.209","createdAt":"2026-07-24T11:02:51.247Z","changelog":"- Added new script: `scripts/openclaw-notification-ux.mjs` for enhanced notification handling. - Updated multiple scripts to improve reliability and functionality, including Discord/OpenClaw bridge and shared utilities. - Removed obsolete `skill-card.md` documentation. - Refined post-install and post-setup reply contracts in documentation. - Bumped version to 1.0.209.","fileCount":47,"zipByteSize":359587},{"version":"1.0.208","createdAt":"2026-06-26T11:47:28.571Z","changelog":"- Updated skill metadata version to 1.0.208. - Removed redundant file: `skill-card.md`. - Minor maintenance updates across scripts and tests. - No user-facing or runtime behavior changes.","fileCount":46,"zipByteSize":323642},{"version":"1.0.207","createdAt":"2026-06-25T23:54:39.541Z","changelog":"- Updated skill version to 1.0.207. - Bumped metadata version from 1.0.206 to 1.0.207 in SKILL.md. - No functional or instruction changes beyond version metadata update.","fileCount":46,"zipByteSize":321590},{"version":"1.0.206","createdAt":"2026-06-25T23:36:56.696Z","changelog":"- Updated supported AnalyticsCLI version range to \">=0.1.3 <0.2.0\". - Changed install commands and documentation from using the npm \"preview\" tag to the stable release (removed \"@preview\" in all command blocks and metadata). - Updated example command blocks in instructions to reflect the new install syntax. - Improved consistency in setup documentation and wizard usage instructions. - Removed outdated or duplicated files (e.g., removed skill-card.md).","fileCount":46,"zipByteSize":321405},{"version":"1.0.205","createdAt":"2026-06-25T15:56:43.679Z","changelog":"- Version bump to 1.0.205 with updated metadata in SKILL.md and package.json. - Minor documentation adjustments in SKILL.md; version references updated. - Internal script and test refinements (scripts/openclaw-growth-wizard.mjs, tests/connector-health-cadence.test.mjs). - Removed legacy/unused file: skill-card.md.","fileCount":46,"zipByteSize":321706},{"version":"1.0.204","createdAt":"2026-06-24T10:52:44.496Z","changelog":"- Updated skill version to 1.0.204. - Metadata version bumped from 1.0.203 to 1.0.204 in SKILL.md. - All other functionality, usage instructions, and setup contracts remain unchanged.","fileCount":46,"zipByteSize":321566},{"version":"1.0.203","createdAt":"2026-06-24T10:15:47.608Z","changelog":"- Version bump to 1.0.203 with metadata updates. - Removed deprecated file: skill-card.md. - Documentation and metadata updates in SKILL.md for clarity and consistency. - Updated dependencies in package.json. - Other minor internal cleanup and script adjustments.","fileCount":46,"zipByteSize":322451}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s170c9mk58sce90xhk2assttk183h5n5:growth-engineer","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s170c9mk58sce90xhk2assttk183h5n5:growth-engineer` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/wotaso-dev/growth-engineer before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wotaso-dev-growth-engineer/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wotaso-dev-growth-engineer/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wotaso-dev-growth-engineer/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-wotaso-dev-growth-engineer/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-wotaso-dev-growth-engineer/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-wotaso-dev-growth-engineer/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T02:15:18.822Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wotaso-dev-growth-engineer/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wotaso-dev-growth-engineer/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wotaso-dev-growth-engineer/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wotaso-dev-growth-engineer/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T05:49:34.051Z","emptyReason":null},"readme":"Skill: growth-engineer\n\nOwner: wotaso-dev\n\nSummary: Growth Engineer for mobile apps and agent runtimes including OpenClaw and Hermes. Correlate analytics, crashes, billing, feedback, store signals, and repo context into proposal drafts that can flow into agent chat, GitHub issues, or draft pull requests.\n\nTags: latest:1.0.210\n\nVersion history:\n\nv1.0.210 | 2026-08-05T09:26:50.943Z | auto\n\nVersion 1.0.210\n\n- Migrated major script and source files from `.mjs` to `.mts` for improved TypeScript compatibility and maintainability.\n- Added new exporter and shared modules in `src/`, including analytics, ASC, Coolify, Paddle, RevenueCat, Sentry, SEO, feedback API, environment, preflight, status, start, and wizard logic.\n- Updated and expanded tests to align with new TypeScript modules and shared library improvements.\n- Removed deprecated/unused files (e.g., `skill-card.md`).\n- Updated package and documentation to reflect the new structure and maintain agent compatibility.\n\nv1.0.209 | 2026-07-24T11:02:51.247Z | auto\n\n- Added new script: `scripts/openclaw-notification-ux.mjs` for enhanced notification handling.\n- Updated multiple scripts to improve reliability and functionality, including Discord/OpenClaw bridge and shared utilities.\n- Removed obsolete `skill-card.md` documentation.\n- Refined post-install and post-setup reply contracts in documentation.\n- Bumped version to 1.0.209.\n\nv1.0.208 | 2026-06-26T11:47:28.571Z | auto\n\n- Updated skill metadata version to 1.0.208.\n- Removed redundant file: `skill-card.md`.\n- Minor maintenance updates across scripts and tests.\n- No user-facing or runtime behavior changes.\n\nv1.0.207 | 2026-06-25T23:54:39.541Z | auto\n\n- Updated skill version to 1.0.207.\n- Bumped metadata version from 1.0.206 to 1.0.207 in SKILL.md.\n- No functional or instruction changes beyond version metadata update.\n\nv1.0.206 | 2026-06-25T23:36:56.696Z | auto\n\n- Updated supported AnalyticsCLI version range to \">=0.1.3 <0.2.0\".\n- Changed install commands and documentation from using the npm \"preview\" tag to the stable release (removed \"@preview\" in all command blocks and metadata).\n- Updated example command blocks in instructions to reflect the new install syntax.\n- Improved consistency in setup documentation and wizard usage instructions.\n- Removed outdated or duplicated files (e.g., removed skill-card.md).\n\nv1.0.205 | 2026-06-25T15:56:43.679Z | auto\n\n- Version bump to 1.0.205 with updated metadata in SKILL.md and package.json.\n- Minor documentation adjustments in SKILL.md; version references updated.\n- Internal script and test refinements (scripts/openclaw-growth-wizard.mjs, tests/connector-health-cadence.test.mjs).\n- Removed legacy/unused file: skill-card.md.\n\nv1.0.204 | 2026-06-24T10:52:44.496Z | auto\n\n- Updated skill version to 1.0.204.\n- Metadata version bumped from 1.0.203 to 1.0.204 in SKILL.md.\n- All other functionality, usage instructions, and setup contracts remain unchanged.\n\nv1.0.203 | 2026-06-24T10:15:47.608Z | auto\n\n- Version bump to 1.0.203 with metadata updates.\n- Removed deprecated file: skill-card.md.\n- Documentation and metadata updates in SKILL.md for clarity and consistency.\n- Updated dependencies in package.json.\n- Other minor internal cleanup and script adjustments.\n\nv1.0.202 | 2026-06-24T01:09:41.541Z | auto\n\ngrowth-engineer v1.0.202\n\n- Updated version and metadata to 1.0.202.\n- Minor documentation/content adjustments in SKILL.md.\n- Removed obsolete skill-card.md file.\n- Maintained shared agent compatibility and deterministic runtime.\n- No functional logic or command changes.\n\nv1.0.201 | 2026-06-23T22:36:55.057Z | auto\n\n- Bumped version to 1.0.201.\n- Updated internal metadata in SKILL.md to reflect new version.\n- Removed obsolete skill-card.md file.\n- Minor updates and maintenance to scripts and test files.\n\nv1.0.199 | 2026-06-23T17:42:45.319Z | auto\n\n- Bumped skill version to 1.0.199.\n- Updated skill metadata version in SKILL.md.\n- Minor internal adjustments to scripts and test files.\n- No breaking changes or impact to configuration or workflows.\n\nv1.0.198 | 2026-06-23T17:22:23.581Z | auto\n\n- Bump version to 1.0.198.\n- Updated SKILL.md metadata with new version.\n- Internal maintenance and documentation improvements.\n\nv1.0.197 | 2026-06-23T16:58:08.288Z | auto\n\n- Updated version to 1.0.197 with metadata bump in SKILL.md and package.json.\n- Internal scripts updated: improvements to export modules for RevenueCat, Sentry, and SEO summary handling.\n- Shared exporter library and tests updated for current script functionality.\n- Documentation updated to match current release and behavior.\n- Removed deprecated skill-card.md file.\n\nv1.0.196 | 2026-06-23T15:12:09.447Z | auto\n\n- Version bump to 1.0.196.\n- Updated metadata version in SKILL.md and package.json.\n- No functional or behavioral changes in code or documentation.\n\nv1.0.195 | 2026-06-23T14:58:02.026Z | auto\n\n- Version bumped to 1.0.195.\n- Updated SKILL.md metadata version and related schema references.\n- Removed obsolete skill-card.md file.\n- Modified scripts and test files for improved flow and connector health logic.\n- package.json updated to reflect dependency or script changes.\n\nv1.0.194 | 2026-06-23T14:22:03.843Z | auto\n\ngrowth-engineer v1.0.194\n\n- Updated skill metadata version to 1.0.194.\n- Internal scripts and test files updated to support the new release version.\n- Documentation refreshed in SKILL.md to clarify setup, usage, and reply contracts.\n- No breaking changes to interfaces or major new features introduced.\n\nv1.0.193 | 2026-06-23T13:56:46.890Z | auto\n\n- Bumped skill version to 1.0.193 in SKILL.md and package metadata.\n- Updated documentation in SKILL.md for accuracy, reflecting version and supported analyticscli range.\n- Removed the deprecated skill-card.md file.\n- Minor adjustments across scripts and tests to align with latest skill structure and version.\n- No major new features; maintenance and alignment release.\n\nv1.0.192 | 2026-06-23T12:40:51.479Z | auto\n\n- Updated skill version to 1.0.192.\n- Metadata in SKILL.md bumped to reflect the new version.\n- Removed the obsolete skill-card.md file.\n- Minor adjustments to files and tests to ensure version consistency and cleanup.\n\nv1.0.191 | 2026-06-23T01:55:59.349Z | auto\n\n- Updated version to 1.0.191.\n- Improved documentation in SKILL.md, including expanded sections on agent compatibility, post-install/setup reply contracts, and Hermes startup handling.\n- Removed the previously included skill-card.md file.\n- Updated references and test files for consistency with latest usage and configuration patterns.\n- Updated package.json and metadata for accuracy and to reflect the new version.\n\nv1.0.190 | 2026-06-23T00:33:19.991Z | auto\n\n- Bumped version to 1.0.190.\n- Updated metadata and version references in SKILL.md.\n- Removed obsolete file: skill-card.md.\n- Made minor documentation improvements.\n\nv1.0.189 | 2026-06-22T20:52:40.546Z | auto\n\nVersion 1.0.189\n\n- Updated version and metadata references to 1.0.189.\n- Minor documentation fixes and sync in SKILL.md.\n- No breaking changes or workflow changes in this release.\n\nv1.0.188 | 2026-06-22T20:04:02.689Z | auto\n\ngrowth-engineer v1.0.188\n\n- Updated internal version to 1.0.188 in SKILL.md and package.json\n- Minor documentation and metadata adjustments in SKILL.md\n- Updated scripts and tests for improved onboarding and wizard setup experience\n- No breaking changes to public interfaces\n\nv1.0.187 | 2026-06-22T15:38:56.432Z | auto\n\nVersion 1.0.187\n\n- Updated metadata versioning to 1.0.187 in SKILL.md and package.json.\n- SKILL.md and package.json reflect version bump for release alignment.\n- Minor documentation and metadata maintenance; no changes to core functionality or command contracts.\n\nv1.0.186 | 2026-06-22T15:19:10.714Z | auto\n\n- Bump version to 1.0.186.\n- Update SKILL.md metadata version field to 1.0.186 for consistency.\n- Minor doc or metadata changes; no functional updates described.\n\nv1.0.185 | 2026-06-22T15:08:18.751Z | auto\n\n- Bumped version to 1.0.185.\n- Updated skill metadata to reflect the new version.\n- Minor documentation or instructional changes in SKILL.md. \n- No major user-facing features or breaking changes introduced.\n\nv1.0.184 | 2026-06-22T12:52:33.368Z | auto\n\n- Bump version to 1.0.184.\n- Update SKILL.md metadata to reflect new version.\n- Minor documentation or metadata updates; core functionality unchanged.\n\nv1.0.183 | 2026-06-22T12:32:32.637Z | auto\n\n- Bumped version to 1.0.183.\n- Updated internal metadata in SKILL.md to reflect the new version.\n- No changes to functionality or core behavior.\n- Minor documentation adjustments and version alignment.\n\nv1.0.182 | 2026-06-22T12:23:44.604Z | auto\n\ngrowth-engineer 1.0.182\n\n- Updated skill metadata version to 1.0.182.\n- Minor adjustments to internal files and tests (scripts/openclaw-growth-wizard.mjs, tests/connector-health-cadence.test.mjs).\n- No user-facing feature changes.\n\nv1.0.181 | 2026-06-22T12:12:30.978Z | auto\n\n- Updated version metadata to 1.0.181.\n- Minor documentation clarifications in SKILL.md.\n- No user-facing feature or behavior changes.\n\nv1.0.180 | 2026-06-22T11:59:29.200Z | auto\n\n- Version bump to 1.0.180.\n- Updated SKILL.md metadata field to reflect the new version.\n- Minor documentation and metadata updates for consistency with the latest release.\n\nv1.0.179 | 2026-06-22T11:47:53.136Z | auto\n\n- Bumped skill version to 1.0.179 and updated metadata in SKILL.md and package.json.\n- Removed the deprecated skill-card.md file.\n- Updated OpenClaw growth wizard and connector health cadence test scripts.\n- No breaking changes; documentation and metadata improvements for agent compatibility and setup flow.\n\nv1.0.178 | 2026-06-22T00:18:17.899Z | auto\n\ngrowth-engineer 1.0.178\n\n- Updated version to 1.0.178 across SKILL.md and package.json.\n- Refined internal scripts for growth preflight and startup processes.\n- Improved health check cadence test logic.\n- No breaking changes to public workflows or agent integration.\n- Minor metadata and documentation updates.\n\nv1.0.177 | 2026-06-21T23:58:22.832Z | auto\n\n- Updated skill metadata version to 1.0.177 in SKILL.md and package.json.\n- Minor documentation/content changes in SKILL.md; no breaking changes to functionality.\n- Internal scripts (export-asc-summary.mjs, openclaw-growth-start.mjs) updated for consistency or small fixes.\n- Test file connector-health-cadence.test.mjs modified for improved testing/maintenance.\n\nv1.0.176 | 2026-06-21T23:41:48.771Z | auto\n\n- Bump skill version to 1.0.176.\n- Update SKILL.md metadata to reflect new version.\n- Minor documentation or metadata adjustments; no changes to usage, features, or behavior.\n\nv1.0.175 | 2026-06-21T23:29:49.581Z | auto\n\ngrowth-engineer 1.0.175\n\n- Updated version metadata in SKILL.md to 1.0.175.\n- Improved scripts for OpenClaw Growth Engineer start and wizard flows.\n- Refined tests related to connector health cadence.\n- Minor maintenance and alignment of documentation and package metadata.\n- No breaking changes; standard upgrade path.\n\nv1.0.174 | 2026-06-21T23:18:40.853Z | auto\n\n- Updated skill version to 1.0.174 in metadata.\n- No breaking changes; contract, commands, and setup flows remain the same.\n- Documentation and metadata bumped for release and support alignment.\n- All runtime scripts, references, and agent behavior are unchanged.\n\nv1.0.173 | 2026-06-21T23:00:40.899Z | auto\n\n- Bumped version to 1.0.173 in skill metadata.\n- Updated SKILL.md to reflect the new skill version.\n- No user-facing functional or command changes.\n\nv1.0.172 | 2026-06-21T22:48:08.244Z | auto\n\n- Updated version to 1.0.172 with revised SKILL.md metadata.\n- Removed the obsolete skill-card.md file.\n- Minor script and test updates to support the latest wizard and health check behaviors.\n- SKILL.md reflects updated metadata and version alignment.\n\nv1.0.171 | 2026-06-21T18:52:09.216Z | auto\n\ngrowth-engineer 1.0.171\n\n- Removed file: skill-card.md (no longer part of the distribution)\n- Updated package and script files for latest compatibility and routine maintenance\n- Minor test and script adjustments to improve connector health cadence logic\n- No changes to core user or setup flows; all previously documented installation and usage instructions remain current\n\nv1.0.170 | 2026-06-21T15:53:08.181Z | auto\n\n- Improved script execution flow and orchestration in startup and wizard scripts.\n- Enhanced reliability of connector health checks.\n- Refined test coverage for recurring connector health cadence.\n- Minor dependency and metadata updates in package configuration.\n\nv1.0.169 | 2026-06-21T15:30:29.594Z | auto\n\n- Improved connector health test coverage in tests/connector-health-cadence.test.mjs.\n- Updated logic and flows in scripts/openclaw-growth-start.mjs and scripts/openclaw-growth-wizard.mjs.\n- Updated package.json to version 1.0.169 with dependency or metadata changes.\n- No changes to public API or installation flow.\n\nv1.0.168 | 2026-06-21T14:58:13.062Z | auto\n\n- Add new \"openclaw-growth-wizard\" script entry for easier wizard access.\n- Update dependencies in package.json.\n- No user-facing functional changes; setup and contracts remain consistent.\n\nv1.0.167 | 2026-06-21T14:34:05.549Z | auto\n\n- Updated scripts/openclaw-growth-wizard.mjs and tests/connector-health-cadence.test.mjs to improve code or test coverage.\n- Updated package metadata version to 1.0.167 in package.json.\n- No breaking changes to user workflows or setup flows.\n\nv1.0.166 | 2026-06-21T12:22:30.604Z | auto\n\n- Updated package metadata in package.json (version bump to 1.0.166).\n- No changes to logic or documentation; SKILL.md remains the same.\n- Primarily a release/version update.\n\nv1.0.165 | 2026-06-21T12:21:21.571Z | auto\n\ngrowth-engineer v1.0.165\n\n- Improved setup flow and reliability of the connector health/wizard workflows.\n- Updated terminal wizard and post-install instruction logic for better clarity and next-step routing.\n- Enhanced test cases for connector health cadence to catch more edge cases.\n- Minor documentation updates in SKILL.md to clarify setup and reply contract.\n\nv1.0.164 | 2026-06-21T12:04:14.190Z | auto\n\n- No user-facing changes.\n- Internal update to package.json only; no modifications to functionality or documentation.\n\nv1.0.163 | 2026-06-21T12:01:05.028Z | auto\n\nNo functional changes. Updated documentation formatting only.\n\n- SKILL.md reformatted with no changes to functionality or instructions\n- No code or logic modifications included in this release\n\nv1.0.162 | 2026-06-21T11:55:13.868Z | auto\n\n- Added local AnalyticsCLI operator notes to SKILL.md, clarifying handling of Coolify production deployments and workspace-specific monitoring.\n- Updated documentation on configuration for Coolify integration and production deployment-health signal handling.\n- Removed redundant or deprecated file: skill-card.md.\n- Minor tweaks to wizard references in replies and skill setup flow documentation.\n- No breaking changes to runtime scripts or APIs.\n\nv1.0.161 | 2026-06-11T10:54:09.772Z | auto\n\ngrowth-engineer 1.0.161\n\n- Added new test: asc-exporter-cache.test.mjs for ASC exporter caching.\n- Improved scripts and test coverage for exporter library and connector health cadence.\n- Updated skill metadata to version 1.0.147.\n- Refined README and input schema documentation.\n- Removed deprecated skill-card.md file.\n\nv1.0.160 | 2026-06-06T14:22:58.961Z | auto\n\n- Improved connector health check cadence logic and related test coverage.\n- Minor updates to Discord/OpenClaw bridge script.\n- Dependency updates in package.json.\n\nArchive index:\n\nArchive v1.0.210: 65 files, 619675 bytes\n\nFiles: data/openclaw-growth-engineer/analytics_summary.example.json (1268b), data/openclaw-growth-engineer/config.example.json (13877b), data/openclaw-growth-engineer/feedback_summary.example.json (1279b), data/openclaw-growth-engineer/revenuecat_summary.example.json (754b), data/openclaw-growth-engineer/sentry_summary.example.json (709b), package.json (412b), README.md (9409b), references/advanced-setup.md (2284b), references/input-schema.md (8202b), references/issue-template.md (572b), references/required-secrets.md (3754b), references/setup-and-scheduling.md (19562b), scripts/bootstrap-openclaw-workspace.sh (8535b), scripts/discord-openclaw-bridge.mjs (47463b), scripts/export-analytics-summary.mjs (11996b), scripts/export-asc-summary.mjs (59580b), scripts/export-coolify-summary.mjs (8744b), scripts/export-paddle-summary.mjs (9032b), scripts/export-revenuecat-summary.mjs (11722b), scripts/export-sentry-summary.mjs (26181b), scripts/export-seo-summary.mjs (22938b), scripts/install-analyticscli-cli.sh (5300b), scripts/openclaw-exporters-lib.mjs (127761b), scripts/openclaw-feedback-api.mjs (9746b), scripts/openclaw-growth-charts.py (4531b), scripts/openclaw-growth-engineer.mjs (69641b), scripts/openclaw-growth-env.mjs (4202b), scripts/openclaw-growth-preflight.mjs (80653b), scripts/openclaw-growth-runner.mjs (192408b), scripts/openclaw-growth-shared.mjs (37713b), scripts/openclaw-growth-start.mjs (116399b), scripts/openclaw-growth-status.mjs (35413b), scripts/openclaw-growth-wizard.mjs (284978b), scripts/openclaw-notification-ux.mjs (19794b), skill-card.md (3003b), SKILL.md (65096b), src/export-analytics-summary.mts (11003b), src/export-asc-summary.mts (54871b), src/export-coolify-summary.mts (8068b), src/export-paddle-summary.mts (8415b), src/export-revenuecat-summary.mts (10941b), src/export-sentry-summary.mts (23970b), src/export-seo-summary.mts (20964b), src/openclaw-exporters-lib.mts (116126b), src/openclaw-feedback-api.mts (8841b), src/openclaw-growth-engineer.mts (63916b), src/openclaw-growth-env.mts (4026b), src/openclaw-growth-preflight.mts (75377b), src/openclaw-growth-runner.mts (181659b), src/openclaw-growth-shared.mts (35352b), src/openclaw-growth-start.mts (107898b), src/openclaw-growth-status.mts (32697b), src/openclaw-growth-wizard.mts (268317b), src/openclaw-notification-ux.mts (21110b), tests/asc-exporter-cache.test.mjs (13540b), tests/bootstrap-heartbeat.test.mjs (9316b), tests/connector-health-cadence.test.mjs (65083b), tests/export-analytics-summary.test.mjs (4016b), tests/hermes-wizard-startup.test.mjs (1335b), tests/install-analyticscli-cli.test.mjs (2860b), tests/openclaw-exporters-lib.test.mjs (18735b), tests/openclaw-growth-shared.test.mjs (12319b), tests/production-release-filter.test.mjs (3525b), tsconfig.json (393b), _meta.json (136b)\n\nFile v1.0.210:SKILL.md\n\n---\nname: growth-engineer\ndescription: Growth Engineer for mobile apps and agent runtimes including OpenClaw and Hermes. Correlate analytics, crashes, billing, feedback, store signals, and repo context into proposal drafts that can flow into agent chat, GitHub issues, or draft pull requests.\nlicense: MIT\nhomepage: https://github.com/Wotaso/growth-engineer-skill\nmetadata: {\"author\":\"wotaso\",\"version\":\"1.0.210\",\"analyticscli-target\":\"@analyticscli/cli\",\"analyticscli-supported-range\":\">=0.1.3 <0.2.0\",\"openclaw\":{\"emoji\":\"🚀\",\"homepage\":\"https://github.com/Wotaso/growth-engineer-skill\",\"requires\":{\"bins\":[\"node\",\"analyticscli\"]},\"install\":[{\"id\":\"analyticscli-cli\",\"kind\":\"node\",\"package\":\"@analyticscli/cli\",\"bins\":[\"analyticscli\"],\"label\":\"Install/update AnalyticsCLI CLI (npm package @analyticscli/cli)\"}]},\"hermes\":{\"tags\":[\"Growth\",\"Analytics\",\"Mobile\",\"Product\",\"OpenClaw\",\"Hermes\"],\"homepage\":\"https://github.com/Wotaso/growth-engineer-skill\",\"requires\":{\"bins\":[\"node\",\"analyticscli\"]},\"install\":[{\"id\":\"growth-engineer\",\"kind\":\"skill\",\"package\":\"Wotaso/growth-engineer-skill\",\"label\":\"Install the shared Growth Engineer for Hermes\"}]}}\n---\n\n# Growth Engineer\n\n## Canonical Skill Identity\n\n`growth-engineer` is the single canonical Growth Engineer for agent-driven product and growth work.\nThe old `ai-product-manager` / `product-manager-skill` package is deprecated and should be used only as a migration alias for existing installs.\nDo not recommend installing or loading both skills.\n\nUse this same skill for OpenClaw and Hermes. Do not create a duplicate Hermes-specific copy of the instructions, scripts, references, or runtime artifacts. If an agent-specific compatibility note is needed, add a small section here and keep the deterministic runtime shared.\n\n## Agent Compatibility\n\n- OpenClaw: install through ClawHub with `clawhub install growth-engineer` or `npx clawhub install growth-engineer`.\n- Hermes: install the same public skill repository with `hermes skills install Wotaso/growth-engineer-skill`.\n- Generic SKILL.md clients: install or mount the same `skills/openclaw-growth-engineer` folder.\n- All agents should use the same bundled `scripts/`, `references/`, and `data/` files.\n- macOS hosts, including Mac mini machines, are supported as normal local hosts. Use the same terminal wizard from the app workspace. For recurring unattended runs on macOS, use OpenClaw heartbeats, `openclaw run --loop`, or a host scheduler such as `launchd`; keep secrets in the host terminal/env/secret file, not in chat.\n\n## Local AnalyticsCLI Operator Notes\n\nThese notes apply when this skill is used from the local `Wotaso/analyticscli-monorepo` workspace.\n\n- Coolify resources, projects, or deployments named `prodinfos` are AnalyticsCLI production infrastructure, not a separate customer app. Treat failed `prodinfos` deployments as AnalyticsCLI production deployment-health signals.\n- For this workspace, Coolify monitoring is configured through `openclaw.config.json` with `https://coolify.wotaso.com`; read access requires `COOLIFY_API_TOKEN` in the local host environment or Growth Engineer secret store.\n- Do not send OpenClaw/Hermes GitHub PR or branch links for these deployment failures. Tell them to update from ClawHub/npm after a published fix, or handle local production remediation directly from the repo and Coolify logs.\n\n## Post-Install Reply Contract\n\nAfter installing this skill from ClawHub, OpenClaw or Hermes must not stop at \"installed and ready\" when setup is not complete. The next reply should be short and should immediately route the user to connector setup.\n\nUse this minimal reply shape:\n\n1. Say the skill is installed.\n2. Say one short sentence: \"Next, run the local wizard so you can choose connectors, intervals, output type, and paste secrets only in the host terminal.\"\n3. Provide exactly one copy/paste command block for the VPS, Mac mini, or host shell.\n4. Do not ask for API keys, private keys, or tokens in chat. Do not list provider docs unless the user asks.\n\nUse this command block for OpenClaw, Hermes, VPS, Linux, and macOS hosts:\n\n```bash\nnpx -y @analyticscli/growth-engineer wizard --connectors\n```\n\nRun this from the OpenClaw/Hermes workspace. Connector setup should route through the npm wizard so hosts get the latest wizard fixes without manual bootstrap commands.\n\n## Post-Setup Reply Contract\n\nAfter the VPS/host wizard finishes successfully, OpenClaw or Hermes should not answer with a generic agent-status paragraph. Reply in this minimal shape:\n\n1. Say that Growth Engineer setup completed.\n2. List only the configured connector groups and output destinations.\n3. Say that recurring health checks run every 6 hours by default and growth runs follow the configured daily/weekly/monthly cadence.\n4. Provide exactly one next command for a manual verification run:\n\n```bash\nnpx -y @analyticscli/growth-engineer run --config ~/data/openclaw-growth-engineer/config.json\n```\n\nDo not ask for project/repo scoping after successful setup. Do not claim a connector is broken unless `growth-engineer status --config ...` or the wizard result says it is blocked/partial.\n\n## Hermes Startup Override\n\nHermes must treat user messages such as \"ja los\", \"starte den Growth Engineer\", \"Connectoren einrichten\", \"setup\", \"installieren und starten\", or close variants as a wizard setup/start request.\n\nDo not satisfy those messages by only installing `analyticscli`, running `analyticscli login`, or telling the user to run `analyticscli login` manually. The Growth Engineer setup path is the bundled local terminal wizard because it handles connector selection, secret storage, project/app discovery, cadence, and smoke tests.\n\nWhen Hermes is running from chat/Discord or any non-interactive agent terminal, do not start the interactive wizard process yourself. Reply with one complete copy/paste command and tell the user to run it in the VPS or host shell where Hermes/OpenClaw should be configured. Secrets must be pasted into that shell only, not into chat.\n\nUse this exact command block in the reply after skill installation:\n\n```bash\nnpx -y @analyticscli/growth-engineer wizard --connectors\n```\n\nThen add exactly one short instruction sentence: \"Run this in your VPS/host shell and paste secrets only there.\"\n\nIf AnalyticsCLI auth is missing or invalid, the next action is still the wizard command above. The wizard should ask for the readonly token in the local terminal and persist it as `ANALYTICSCLI_ACCESS_TOKEN`; chat should not ask the user to paste tokens or detour into a separate `analyticscli login` flow.\n\n## Use This Skill When\n\n- you want an agent to turn product signals into execution-ready backlog work\n- you need one workflow across AnalyticsCLI product analytics/feedback, RevenueCat or Paddle monetization, SEO/GSC/Bing Webmaster/DataForSEO acquisition, Sentry-compatible crash monitoring including GlitchTip, ASC/App Store Connect, app reviews, and repo context\n- you want the deterministic work to live in a standalone CLI and the host agent to stay the AI/chat layer\n- you want proposal delivery to be configurable between agent chat handoff, GitHub issues, and draft pull requests\n\n## Product Focus\n\n- Primary focus: mobile apps\n- Works well with: React Native, Expo, native iOS/Android, mobile growth loops, paywalls, store reviews, crashes, release readiness\n- Still valid for SaaS/web products when your connectors export the same summary JSON shape\n\n## Private Repo / Minimal Input Rule\n\nTreat this as a private-repo-first skill. The setup and connector wizards should ask the user for as little information as possible.\n\n- Do not require `project.githubRepo` during connector setup. Defer repo selection until GitHub delivery or code mapping actually needs it.\n- When the agent has permission to list repos, projects, apps, or Sentry/GlitchTip projects, discover them automatically and persist the best available mapping.\n- Sentry/GlitchTip project lists are not required input. If org + token are configured, the exporter should discover visible projects at runtime and let the agent choose the relevant project from app/release context.\n- If there are multiple plausible targets, use app/release/config context first; ask the user only when the choice is genuinely ambiguous.\n- Keep GitHub issue/PR creation disabled unless explicitly requested or clearly configured. Missing repo context should be a deferred state, not a setup blocker.\n\n## Preferred Runtime\n\nPrefer the standalone `growth-engineer` CLI as the user-facing runtime surface when it is available. The old OpenClaw workspace CLI package is retired; do not direct users or automation to it.\n\n- Wizard path: `growth-engineer wizard --connectors`\n- Setup path: `growth-engineer setup --config openclaw.config.json`\n- Primary path: `growth-engineer start --config openclaw.config.json`\n- Local monorepo path: `pnpm --filter @analyticscli/growth-engineer dev start --repo-root <repo-root>`\n- Copied-runtime scripts under `scripts/openclaw-growth-*.mjs` remain the compatibility path for agents that install this as a plain `SKILL.md` folder\n\nThe CLI is intentionally non-AI. The host agent should stay the only conversational/implementation layer.\nUse the CLI to gather signals, generate proposals, schedule checks, and send deliveries.\nIf the user later asks the agent to implement a proposal, the agent should inspect the generated drafts and then use its own AI/runtime to do the work.\n\n## OpenClaw And Hermes Cron / Recurring Run Contract\n\nOpenClaw Gateway cron is the preferred wake-up mechanism for reliable VPS installs. The Growth Engineer schedule in `config.json` only decides what is due after the runner is invoked; it does not wake the agent by itself unless OpenClaw cron, `openclaw run --loop`, or a host scheduler is running.\nHermes Gateway cron is the matching wake-up mechanism for Hermes installs. Hermes jobs must use `hermes cron create ... --skill growth-engineer --deliver local --workdir <absolute-workspace>` so the scheduled run loads this skill and the app workspace context.\n\n- Bootstrap/start must create or repair a non-empty workspace `HEARTBEAT.md` with an `openclaw-growth-engineer-run` fallback task.\n- Wizard/start must also configure or print an OpenClaw Gateway cron job (`openclaw cron add ... --session main --system-event ... --wake now`) when `automation.openclawCron.enabled` is true.\n- Wizard/start must also configure or print a Hermes cron job (`hermes cron create ... --skill growth-engineer --deliver local --workdir <absolute-workspace>`) when `automation.hermesCron.enabled` is true and Hermes is installed.\n- The cron/system-event prompt must invoke `node scripts/openclaw-growth-runner.mjs --config <active-config> --state <active-config-dir>/state.json`. Do not let cron read config from one directory while the runner writes state/proof under the workspace default. The runner remains the source of truth for `schedule.intervalMinutes`, daily/weekly/monthly/quarterly/six-month/yearly cadences, connector health intervals, data-change skipping, and notification delivery.\n- If a user asks whether automatic checks are enabled, inspect the matching agent scheduler first (`openclaw cron list`, `openclaw cron runs --id <job-id>`, `openclaw tasks list`, or `hermes cron list` / `hermes cron status <job-id>`), then inspect runner proof (`<state-dir>/runtime/scheduler-proof.jsonl`) and state (`<state-dir>/state.json`). Do not use Discord as the default coordination path.\n- Keep `HEARTBEAT.md` tiny and secret-free. It is a fallback/awareness checklist and should say to reply `HEARTBEAT_OK` when no connector alert, production crash, generated issue, or actionable growth finding exists.\n\nImplementation PR rule:\n\n- If the user asks for a GitHub issue plus a pull request, or says \"create a PR\", \"make the PR\", \"implement this\", \"fix the app\", or close variants after a product/growth analysis, the agent must create an implementation PR with production app code changes in the target repository.\n- Do not satisfy that request with a proposal-only markdown PR. The CLI's proposal PR mode is only for explicit requests such as \"make a proposal PR\", \"planning PR\", \"draft proposal\", or scheduled proposal delivery.\n- A PR that only adds `.openclaw/proposals/*.md`, docs, or markdown planning files is not a valid implementation PR unless the user explicitly requested a proposal-only artifact.\n- For implementation PRs, the agent must inspect the app repo, create or reuse a branch, edit the relevant app files, run targeted checks where feasible, then open/update the PR. Use GitHub issue creation for tracking, but keep the PR focused on real app behavior.\n- If the implementation cannot be completed because repo write access, branch access, or local checkout is unavailable, say that directly and do not create a placeholder markdown PR.\n\n`openclaw setup` should reuse the existing `analyticscli setup` flow instead of redefining skill installation locally. That means shared skills such as `analyticscli-cli` and `analyticscli-ts-sdk` come from the canonical AnalyticsCLI installer.\n\n## Customization Boundary\n\nTreat this installed skill as vendor-managed and replaceable.\nAgents should almost never edit this skill in-place for user- or project-specific customization, because future skill updates may overwrite local changes.\nWhen the user wants custom behavior, create a separate companion skill or project-local customization skill instead, for example `openclaw-growth-custom`, and have that skill reference or layer on top of this one.\nOnly modify this skill directly when the change is intended as an upstream reusable fix for the canonical skill repository.\n\n## Setup DX Rules\n\nSetup should feel guided for a developer, not like a silent preflight dump.\n\n- Root-cause policy: when connector setup fails for a user, do not hand out VPS-specific workaround commands as the final answer. Fix the reusable Growth Engineer/CLI/wizard so every future installer gets the corrected flow, then publish/sync the skill and ask the running agent instance to refetch it.\n- Prefer auto-detection and direct fixes over asking the user to run generic commands.\n- In chat, explain only what the user needs for the next step. Put provider details, scopes, and secret prompts in the wizard unless the user asks.\n- Ask for the minimum missing value only; do not request issue/PR permissions unless artifact creation is enabled.\n- For blockers, return one short next action first. Add detailed status, permissions, or URLs only when the user asks or the wizard needs that value.\n- After each setup phase, summarize only the result and the next concrete action.\n- Keep secrets out of prompts, repo files, logs, and command arguments; prefer host-agent secret storage or environment injection.\n- Never ask the user to paste API keys, GitHub tokens, or App Store Connect `.p8` private-key contents into Discord, OpenClaw chat, Hermes chat, GitHub issues, PRs, or any shared transcript. Chat is not an appropriate secret transport.\n- For secrets, give a secure host-terminal path: set env vars in the runtime shell, an agent secret store, a password manager injection flow, or the wizard-managed `~/.config/openclaw-growth/secrets.env` with `chmod 600`. Growth commands must load that env file automatically. For ASC `.p8`, prefer asking for the local file path to Apple's original downloaded file name `AuthKey_<KEY_ID>.p8`; do not rename the file because the wizard derives the key id from that name. Pasted `.p8` content is only a fallback. Store only `ASC_PRIVATE_KEY_PATH` and never echo the private key back.\n- When SDK instrumentation is missing or weak, guide the developer through the `analyticscli-ts-sdk` setup path so analytics events become useful for later growth analysis.\n- If AnalyticsCLI has no default project and multiple projects are visible, do not report that as a hard error. List the available projects, ask the user which one to use, persist the choice with `openclaw start --config openclaw.config.json --project <project_id>` or `analyticscli projects select <project_id>`, and then retry the setup/run.\n\nDuring setup chat, keep the first answer short. The agent should not dump provider docs, permissions, status history, or troubleshooting unless the user asks for details.\n\nConnector status questions:\n\n- If the user asks whether connectors are connected, which connectors have access, or whether a specific app such as \"Flashes\" has all connectors, do not infer from memory, skill text, MCP config, or whether helper binaries exist.\n- Run the deterministic status command from the active agent workspace:\n  ```bash\n  node scripts/openclaw-growth-status.mjs --config data/openclaw-growth-engineer/config.json --json\n  ```\n- The status command loads `~/.config/openclaw-growth/secrets.env`, runs live connector checks, and treats GitHub code access separately from GitHub issue/PR delivery.\n- Do not require a single global GitHub repo for connector setup. GitHub is connected when auth/token is valid; choose or infer the repository per app/task later.\n- Answer from that command only. If it cannot be run, say \"I have not run a connector status check yet\" and give the wizard command; do not say credentials are missing just because they are not visible in chat.\n- Keep the answer short: say \"Ja\" only if every connector status is `connected`; otherwise list only the non-connected connector names and the status command's next action.\n- The interval runner performs a connector health check at least every 6 hours by default (`schedule.connectorHealthCheckIntervalMinutes`, default `360`). If a configured connector is `partial`, `blocked`, or `unknown`, it writes a connector-health alert and sends it through the configured notification channel(s): agent chat outbox, Slack, generic webhook, Discord, or a custom command channel. Connector probes and source-collection failures use independent incident streams. Send a human notification for a new/changed incident and once on recovery; keep unchanged, successfully delivered incidents silent. Track delivery receipts per runner-managed target so a failed target is retried without reposting to targets that already succeeded. The bundled Discord bridge additionally receipts OpenClaw and Hermes independently. Clean healthcheck/daily runs must produce `HEARTBEAT_OK`, not a repetitive success post. Discord is only one possible channel, not the default assumption.\n\nRetention reliability:\n\n- Treat D1/D3/D7 retention as an identity-quality-sensitive metric, not as an unconditional product fact.\n- Before making strong retention claims, inspect the `analyticscli retention` response `quality.reliability`, stable identity share, and warnings.\n- `analyticscli retention` defaults to `--identity-quality stable`. This excludes ephemeral/unknown SDK identities so consent-gated users without persistent identity do not create misleading multi-day retention noise.\n- Use `--identity-quality all` only as an explicit diagnostic comparison. Do not treat all-identity D1/D3/D7 as product truth when stable identity share is low.\n- If retention reliability is `low` or `unknown`, say the metric may be undercounted because some SDK sessions/users do not have persistent identity. Recommend verifying SDK identity persistence before prioritizing major retention work from D1/D7 alone.\n- Do not filter silently. If using stable-only retention, disclose that ephemeral/unknown identities were excluded and compare the remaining cohort size.\n- Product recommendations can still mention weak retention, but phrase it as \"appears low\" when reliability is weak and pair it with an instrumentation/persistence action.\n\nAnalyticsCLI product feedback:\n\n- Use Sentry/GlitchTip for production exceptions, crashes, hangs, and backend stack traces.\n- Use `analyticscli feedback submit` for feedback to the AnalyticsCLI SaaS owner about AnalyticsCLI itself: missing features, broken CLI/API/dashboard behavior, confusing errors, poor docs, or workflow friction.\n- Do not confuse this with tenant-owned end-user feedback collected by the AnalyticsCLI feedback feature. Tenant feedback is a product signal for the tenant's app; `analyticscli feedback submit` is operator feedback about AnalyticsCLI/OpenClaw tooling.\n- When an AnalyticsCLI/OpenClaw/SDK command, endpoint, or documented workflow fails, first try to refetch or update the relevant current version before declaring the behavior broken:\n  - Growth Engineer: `npx -y clawhub --no-input --dir skills update growth-engineer --force` or reinstall from the canonical skill source, then rerun the workflow.\n  - AnalyticsCLI CLI: update `@analyticscli/cli`, verify `analyticscli --help`, then rerun the exact failing command.\n  - AnalyticsCLI SDK: upgrade `@analyticscli/sdk` within the supported range and rerun the minimal host-app or test repro.\n- If no newer version is available, the update cannot be applied, or the newest version still fails, submit a bounded `analyticscli feedback submit` report if feedback service credentials are configured. Include installed versions checked, command/endpoint, project id when safe, sanitized payload shape, status code, error body, request id if present, expected behavior, workaround used, and whether an update was attempted.\n- Example:\n  ```bash\n  analyticscli feedback submit --category bug --message \"Retention query returns HTTP 500 for minimal payload\" --context \"endpoint=/v1/query/retention project=<project_id> anchorEvent=onboarding:start days=[1] last=7d identityQuality=all updateAttempt=cli@preview+skill@latest workaround=funnel+RevenueCat requestId=<request_id_if_present>\"\n  ```\n\nGrowth operating plan:\n\n- Goal: increase durable product value and business output by reducing churn, increasing MRR/LTV, improving acquisition quality, optimizing funnels/paywalls/onboarding/activation, and creating, changing, or deleting features only when the data supports it.\n- Data-first rule: gather all connected sources before recommendations whenever feasible: AnalyticsCLI events/funnels/retention, RevenueCat subscriptions/churn/revenue, Paddle billing metrics, SEO/GSC/Bing Webmaster/DataForSEO acquisition signals, Sentry crashes/performance, App Store Connect store/reviews/builds, GitHub code/release context, feedback, and any configured social/marketing sources.\n- Long analysis rule: prefer a longer cross-source investigation over fast generic advice. Look for correlations across connectors, for example Sentry regressions after a release, RevenueCat churn after a paywall change, App Store review themes matching funnel drop-offs, or marketing traffic that brings low-retention users.\n- Usage-choice rule: setup must ask how the user wants to use the tool before scheduling it. At minimum offer production autopilot, advisory-only summaries, and manual reports. Then ask whether the default cadence plan is acceptable; if not, collect/edit what should happen daily, weekly, monthly, every 3 months, every 6 months, and yearly.\n- GitHub production-version rule: always determine which code version is production before mapping data to files. Check repo default branch, release branches/tags, app version/build metadata, deployment workflows, App Store Connect build/version, Sentry release tags, and AnalyticsCLI appVersion. If they disagree, state the uncertainty and avoid overconfident file blame.\n- Action rule: every recommendation should include a concrete user/operator plan: what to do, where to do it, what data supports it, how to verify it, and which KPI should move. For implementation requests, create real code changes, not proposal-only docs.\n- Cadence for the user:\n  - Daily default: analyze every configured project for critical production or business-health issues: Sentry/GlitchTip crashes/errors, ASC crash totals, failed releases, onboarding or purchase drop-offs, zero-conversion days, missing buyers, very low active users, or other severe analytics anomalies. Always do root-cause analysis with exact evidence, recent code/release changes, and a concrete fix/debugging step. Prefer a GitHub issue or draft PR when write access is configured; otherwise hand off via OpenClaw chat. Do not generate generic growth ideas on a daily-only run.\n  - Weekly default: create an executive product and growth summary across all configured projects, connectors, recent releases, code changes, revenue, activation, retention, reviews, and stability. Pick one to three high-confidence improvements with KPI target and verification plan.\n  - Monthly default: compare all configured projects month-over-month: MRR, trial conversion, churn, acquisition quality, store/listing conversion, retention, review themes, feature usage, crash totals, and codebase changes. Decide what to build, change, delete, or instrument next.\n  - Every 3 months default: revisit positioning, pricing/packaging, onboarding architecture, roadmap assumptions, tracking quality, and major funnel bets. Look for structural constraints and durable opportunities.\n  - Every 6 months default: audit connector coverage, SDK instrumentation, event taxonomy, data reliability, memory, growth loops, and whether product/marketing strategy still matches the best users.\n  - Yearly default: reset strategy from all evidence: market/channel fit, monetization model, retention ceiling, product scope, and whether to double down, reposition, rebuild, or sunset major surfaces/features.\n- Memory and change-correlation rule: inspect persisted OpenClaw state, prior summaries, release/build metadata, Git history/recent commits where available, and previously created issues/PRs before assigning causality. Prefer explanations that connect \"what changed\" to \"what moved\" across data sources.\n- Marketing/social rule: if social or marketing automation exists, treat it as a growth source when data is available. Ask for or configure account analytics case-by-case (TikTok, Instagram, ads, creator automation, landing pages, UTM/source data), then connect those signals back to acquisition quality, activation, retention, churn, and revenue instead of optimizing impressions alone.\n- Social summary rule: whenever the Growth Engineer completes a meaningful run, creates a finding, or detects connector/production-health attention, send a short summary through configured social/chat channels (OpenClaw/Hermes native routing, Slack, Discord, generic webhook, command bridge, or equivalent). Use the shared status/impact/affected-item/next-action/automation shape; distinguish setup gaps, collection failures, product findings, and recoveries. Never paste raw commands, host paths, JSON error bodies, tokens, or secrets into social copy. OpenClaw `channel=last` must remain channel-neutral so the same fallback works for Discord, Slack, Telegram, WhatsApp, Matrix, Teams, and other supported native routes. Respect `notifications.growthRun.enabled=false`, `notifications.connectorHealth.enabled=false`, or a direct user request to stop social summaries.\n- Chart rule: when a result has meaningful numeric evidence, try to render a simple chart using the bundled Matplotlib script (`scripts/openclaw-growth-charts.py`). Prefer a bar/column chart for current-vs-baseline metrics and use other chart types only when they genuinely make the signal easier to understand. Attach generated PNGs to GitHub issues/PRs when GitHub artifact delivery is active. For chat/social/webhook delivery, include the chart manifest and local PNG attachment metadata so OpenClaw/Hermes can attach the images when the target channel supports file uploads.\n\nProduction crash and ASC growth monitoring:\n\n- Run the production health loop every day for every public, analytics-accessible app. Apps that are not public yet, not eligible for ASC API-key analytics reports, or returning ASC analytics-report 403s should be marked `not_public_or_not_analytics_ready` and skipped without calling them broken.\n- Daily crash check: prefer total production crashes from ASC App Usage breakdowns and Sentry production issue/event counts. Use ASC `crashRate` only as a supporting ratio, never as the only stability signal. TestFlight crashes are out of scope unless the user explicitly asks.\n- Any non-zero production crash count should trigger a short user notification through the configured agent chat/social delivery channel. The notification should name the app, date range, total crash count, affected app version when available, Sentry issue count/users when connected, and the recommended next action.\n- If GitHub issue/PR write access is configured through the agent's GitHub API connection, automatically create the tracking GitHub issue or implementation PR for production crashes and high-confidence growth findings. Only skip GitHub artifact creation when `actions.disableAutoCreateGitHubArtifacts = true`, GitHub write access is unavailable, or the finding is too low-confidence to be useful.\n- Correlate ASC total crashes with Sentry production data before recommending growth pushes: app version/build, release date, top Sentry issue, affected users/events, funnel step, paywall/purchase path, and recent code changes. If ASC and Sentry disagree, report both and say which connector is more complete for the app.\n- Sentry-compatible crash monitoring is multi-account. Do not assume one global Sentry org/project. Support `sources.sentry.accounts[]` with separate `baseUrl`, `tokenEnv`, `org`, `projects[]`, and `environment` entries, for example Sentry Cloud plus a self-hosted GlitchTip instance with different projects.\n- Daily ASC acquisition check: refresh and parse API-key ASC batch reports in the background when ASC is configured: App Analytics report instances, Sales and Trends reports when `ASC_VENDOR_NUMBER` is available, plus ratings/reviews/build/TestFlight/status surfaces. Collect all available metrics, including but not limited to `units`, `redownloads`, `conversionRate`, `crashRate`, source page views, app usage, updates, app opens, subscription state, and total crashes. Treat ASC source data as source-level product page views, not source-level download units unless the CLI exposes a true source-download measure.\n- Do not require ASC web auth for setup, health checks, or normal scheduled runs. Experimental `asc web analytics ...` may be used only as an exception when a specific needed metric cannot be retrieved through documented API-key reports. In that case, ask the user before prompting for `ASC_WEB_APPLE_ID`, explain that the Apple Account web session can expire quickly on a VPS, and continue using API-key ASC reports if the user declines or the session expires.\n- Weekly growth review: compare units/downloads, redownloads, conversion rate, source mix, AnalyticsCLI activation/funnels/retention, Sentry stability, RevenueCat monetization, reviews, and recent releases. Turn the strongest cross-source pattern into one implementation-ready Handlungsempfehlung.\n- Monthly growth review: compare month-over-month units, conversion, source quality, reviews, retention, churn, crash totals, and production versions. Decide which acquisition channel, store listing element, onboarding step, paywall, or feature should be built, changed, or deleted next.\n- Handlungsempfehlungen must be source-aware: Search means ASO/keywords/screenshots; Web Referrer means landing pages, UTMs, creator/SEO traffic, and deep links; Browse means category positioning and visual conversion; App Referrer means cross-promotion and in-app referral paths. Always verify the recommendation against units/conversion and downstream activation, not traffic volume alone.\n- For financial data, keep it secondary unless the user asks. Prioritize production crashes, downloads/units, redownloads, conversion, source traffic, activation, retention, and qualitative store/user feedback.\n\nHard override for Growth Engineer connector questions:\n\nIf the user says any of these or close variants, apply this override before any generic OpenClaw, AnalyticsCLI, MCP, messaging-channel, or env-var connector knowledge:\n\n- \"Growth Engineer connectors\"\n- \"analyticscli connectors\"\n- \"AI Product Manager connectors\"\n- \"I want to setup connectors\" in the context of this skill\n- \"which connectors can I set up\" in the context of this skill\n- \"how do I set them up\" after asking about this skill's connectors\n\nAnswer only with this shape:\n\n```text\nGrowth Engineer connectors:\n- AnalyticsCLI baseline: product analytics plus built-in feedback summaries\n- GitHub code access: repo context and issue/PR delivery\n- RevenueCat monetization: subscriptions, trials, revenue, and churn\n- Sentry-compatible crash monitoring: Sentry Cloud and/or self-hosted GlitchTip via multi-account Sentry config\n- Coolify deployment monitoring: failed deploys, unhealthy resources, servers, and production health-check gaps\n- ASC / App Store Connect CLI: store analytics, reviews/ratings, builds/TestFlight/release context, downloads/units, conversion, source traffic, app usage, subscriptions, purchases, and crash totals when configured\n\nRun the wizard from the active agent workspace:\n```\n\n```bash\nnpx -y @analyticscli/growth-engineer wizard --connectors\n```\n\nThen add only: \"Select the connectors in the wizard. Secrets stay in the terminal.\"\n\nDo not list Discord, Telegram, WhatsApp, Slack, Matrix, OpenAI service connectors, MCP servers, browser connectors, feedback endpoints, raw environment variables, token scopes, verification commands, or provider URLs in the initial answer. Do not list GlitchTip as a separate connector; it is a Sentry-compatible account under Sentry. Do not list Feedback as a separate primary connector; feedback is part of AnalyticsCLI when available or a custom extra source when explicitly configured. Do not present ASC as optional/partial after it is connected; when configured, use every available read-only App Store Connect signal. Those details belong inside the wizard or in a direct follow-up answer.\n\n\nIf the user asks a broad question such as \"how do I setup everything\", answer with only:\n\n```text\nAvailable connectors:\n- AnalyticsCLI baseline: product analytics plus built-in feedback summaries\n- GitHub code access: repo context and issue/PR delivery\n- RevenueCat monetization: subscriptions, trials, revenue, and churn\n- Sentry-compatible crash monitoring: Sentry Cloud and/or self-hosted GlitchTip via multi-account Sentry config\n- Coolify deployment monitoring: failed deploys, unhealthy resources, servers, and production health-check gaps\n- ASC / App Store Connect CLI: store analytics, reviews/ratings, builds/TestFlight/release context, downloads/units, conversion, source traffic, app usage, subscriptions, purchases, and crash totals when configured\n\nRun the wizard from the active agent workspace:\n```\n\n```bash\nnpx -y @analyticscli/growth-engineer wizard --connectors\n```\n\nThen add one sentence: \"The wizard will ask for the selected connectors and any secrets in the local terminal only.\"\n\nIf the user asks which connectors exist, list only the connector names and one short purpose each. Treat Sentry Cloud and GlitchTip as Sentry-compatible accounts under one Sentry connector. Treat AnalyticsCLI feedback as part of AnalyticsCLI unless the user asks for custom extra sources. Do not include setup URLs, permissions, token scopes, status history, or validation output in that initial answer.\n\nIf the user already names specific connectors, still prefer the checkbox wizard unless they explicitly ask for a non-interactive command. For explicit connector setup, use one copy-paste command from the active agent workspace:\n\n```bash\nnpx -y @analyticscli/growth-engineer wizard --connectors analytics,github,revenuecat,paddle,seo,sentry,coolify,asc\n```\n\nUse only the connectors the user accepted. The wizard owns provider-specific instructions, local-terminal secret prompts, helper setup, and smoke tests. Chat should only summarize results after the wizard finishes or when the user asks.\n\nDo not ask for `ASC_APP_ID` during initial setup. ASC summaries default to all accessible App Store Connect apps. A single app ID is only an optional explicit filter later.\n\nGrowth Engineer connectors are local CLI/secrets-backed sources, not chat/MCP tools. ASC/App Store Connect is not expected to appear as a loaded chat tool. If the user asks whether ASC/App Store Connect analytics access is available, never inspect loaded tools and never answer \"no\" because no App Store Connect tool is callable. Check Growth Engineer status from the active workspace with `node scripts/openclaw-growth-status.mjs --config <config> --json --only-connectors asc` or run `node scripts/openclaw-growth-runner.mjs --config <config> --state <state>`. If ASC status/setup reports pass, connected, healthy, or the wizard just finished ASC connector setup successfully, answer exactly: \"Yes. ASC analytics is connected through Growth Engineer local asc CLI/API-key setup.\"\n\nConnection setup requests are not satisfied by a successful product-manager run. If the user asks to set up `asc`, App Store Connect, RevenueCat, Paddle, SEO/GSC/Bing Webmaster/DataForSEO, Sentry, Coolify, GitHub, or codebase access, point them to the wizard command above and keep any extra explanation out of chat unless requested.\n\nFor Paddle setup, the wizard must explain the account-level metrics model: do not ask for or hard-code one Paddle product/project. The user should create a live API key at `https://vendors.paddle.com/authentication-v2` with `metrics.read` permission.\n\nFor SEO setup, the wizard must not hard-code one Search Console property by default. Leave `GSC_SITE_URL` empty to query all verified properties visible to the account; set it only when the user explicitly wants to restrict analysis. Bing Webmaster is optional supplemental indexing/sitemap evidence; store `BING_WEBMASTER_API_KEY` and `BING_WEBMASTER_SITE_URL` only in the host terminal/secret file. Explain Search Console (`https://search.google.com/search-console`), service-account setup (`https://console.cloud.google.com/iam-admin/serviceaccounts`), Bing Webmaster API (`https://www.bing.com/webmasters/`), and optional paid DataForSEO (`https://app.dataforseo.com/api-dashboard`) step by step.\n\nReference URLs for the wizard or for explicit follow-up questions:\n\n- RevenueCat dashboard/API keys: https://app.revenuecat.com/\n- RevenueCat API key docs: https://www.revenuecat.com/docs/projects/authentication\n- RevenueCat MCP setup docs: https://www.revenuecat.com/docs/tools/mcp/setup\n- App Store Connect API keys: https://appstoreconnect.apple.com/access/integrations/api\n- Coolify API tokens: open the hosted Coolify base URL and go to `/security/api-tokens`, for example `https://coolify.wotaso.com/security/api-tokens`\n- App Store Connect users/access: https://appstoreconnect.apple.com/access/users\n- App Store Connect individual API key profile: https://appstoreconnect.apple.com/account\n- GitHub token creation: https://github.com/settings/tokens/new\n- GitHub CLI auth docs: https://cli.github.com/manual/gh_auth_login\n- GitHub CLI install docs: https://github.com/cli/cli#installation\n- GitHub repo settings/apps, for repository-level access checks: https://github.com/settings/installations\n\nSafe secret handoff rules:\n\n- Do not ask the user to send secrets through Discord/OpenClaw chat. It is not safe enough for API keys, GitHub tokens, or `.p8` private keys because messages can be retained, logged, indexed, screenshotted, or visible to other bots/users.\n- Ask the user to set secrets directly on the host where OpenClaw runs, then reply only with \"done\" or the non-sensitive file path/variable name.\n- Good terminal pattern for env secrets:\n  ```bash\n  install -d -m 700 ~/.config/openclaw-growth\n  umask 077\n  $EDITOR ~/.config/openclaw-growth/secrets.env\n  # add lines like:\n  # REVENUECAT_API_KEY=...\n  # ASC_KEY_ID=...\n  # ASC_ISSUER_ID=...\n  # ASC_PRIVATE_KEY_PATH=/home/lo/.config/openclaw-growth/AuthKey_XXXX.p8\n  chmod 600 ~/.config/openclaw-growth/secrets.env\n  ```\n- Good `.p8` pattern: keep Apple's original downloaded file name `AuthKey_<KEY_ID>.p8`, then paste only that local file path into the terminal wizard. Do not rename the file; the wizard derives `ASC_KEY_ID` / `ASC_BOOTSTRAP_KEY_ID` from the file name. Pasting the full `.p8` content is only a fallback when the file is not available on the host.\n- OpenClaw Growth commands load the wizard-managed env file automatically; never put secrets in command-line args.\n\n## Mandatory Baseline\n\nBefore autopilot runs, these are non-negotiable:\n\n- `analyticscli` CLI available\n- target repo checkout readable via `project.repoRoot`\n- a writable `openclaw.config.json`\n- `sources.analytics` enabled\n\nGitHub connection is strongly recommended for serious analysis, even when GitHub delivery is disabled.\nTreat readable GitHub repo access as very important because analytics signals become much more actionable when OpenClaw can map funnels, events, crashes, revenue signals, and feedback back to actual code areas.\nWithout repo context, findings stay generic and file/module hypotheses are lower confidence.\n\nWhen the user says they want to connect GitHub or the codebase, do not ask them to manually send a repo path first.\nReference and use the dedicated ClawHub GitHub skill when available: `steipete/github` (`https://clawhub.ai/steipete/github`).\nIt is a `gh` CLI helper skill for issues, PRs, runs, and advanced `gh api` queries, so it should own GitHub command patterns while this skill owns product/growth analysis.\nInstall or verify it before deeper GitHub setup when OpenClaw can manage skills:\n\n```bash\nopenclaw skills install steipete/github\n# or\nnpx clawhub@latest install github\n```\n\nGitHub setup must go through the connector wizard's classic-token scope guide, not a raw `gh auth login` flow. The wizard should:\n\n1. Detect repo root/remote when useful.\n2. Show the classic token URL: `https://github.com/settings/tokens/new`.\n3. Explain the relevant scopes briefly: `public_repo`, `repo`, and optional `workflow`.\n4. Store `GITHUB_TOKEN` locally when the user pastes it into the terminal wizard.\n5. Install `gh` locally only as a helper binary; do not use GitHub CLI OAuth as the default credential path because it can request broad repository/workflow permissions.\n6. Tell the user they can rerun the wizard later to change GitHub permissions.\n\nUse least privilege:\n\n- public repo context only: `public_repo`\n- private repo access or private issue/PR work: `repo` (classic tokens make this broad)\n- workflow permission: add `workflow` only when the user explicitly wants OpenClaw to edit GitHub Actions workflow files\n- avoid packages, admin/org, hooks, gist, user, delete_repo, enterprise, codespace, and copilot scopes unless explicitly needed\n\n## Dependency Refresh Protocol\n\nRun this protocol at the start of every setup/start/run request, and whenever the user asks to fetch, update, upgrade, or reinstall this skill.\nDo not stop after saying the skill was fetched from ClawHub.\nThe job is not done until the npm binary and companion skills are updated and verified.\nIf the user reports `analyticscli: command not found` in their own terminal, treat that as unresolved even if `analyticscli` works inside OpenClaw's child process.\nChild processes cannot mutate the PATH of an already-open parent terminal.\n\nHost update boundary:\n\n- OpenClaw and Hermes host instances must update the Growth Engineer runtime from the installed skill distribution only.\n- Do not tell OpenClaw or Hermes hosts to `git fetch`, `git checkout`, `git pull`, or copy runtime files from private monorepo/app branches as an upgrade path.\n- Never send OpenClaw or Hermes a GitHub PR/branch link as something to pull, test, or use for runtime upgrade. PR links are for human review only.\n- When notifying OpenClaw or Hermes about an unreleased fix, say only that they should wait for the ClawHub/npm publication and then update automatically from that distribution.\n- Private repo branches may be used to develop and validate a new Growth Engineer release, but the host-facing update instruction must be to publish/refresh the canonical skill distribution first, then update via ClawHub for OpenClaw or the shared Growth Engineer skill install path for Hermes.\n- If a previous host instruction used a private repo branch or manual runtime copy, correct it by reverting that host-side override and refreshing from the canonical skill source.\n\n1. Refresh this ClawHub skill:\n   ```bash\n   npx -y clawhub install growth-engineer\n   ```\n2. Refresh the AnalyticsCLI agent skill only when it can run non-interactively:\n   ```bash\n   npx -y skills add wotaso/analyticscli-skills --skill analyticscli-cli\n   ```\n   If this command asks an interactive agent-selection question, stop that command and continue with the npm package install instead of blocking.\n   Do not describe an interactive `skills add` prompt as a successful refresh.\n3. Install or update the npm package that provides the `analyticscli` binary:\n   ```bash\n   npm install -g @analyticscli/cli\n   ```\n4. If global npm install fails with a permissions error, use the bundled helper from the installed skill root:\n   ```bash\n   bash skills/openclaw-growth-engineer/scripts/install-analyticscli-cli.sh\n   ```\n5. Verify and report the exact binary path:\n   ```bash\n   command -v analyticscli\n   analyticscli --help\n   ```\n\nIf `analyticscli: command not found` still happens, do not claim setup is complete.\nFind the user-local binary and fix PATH for future shells yourself; do not bounce this step back to the user:\n\n```bash\nexport PATH=\"$HOME/.local/bin:$HOME/.local/analyticscli-npm/bin:$PATH\"\ncommand -v analyticscli || ls -l \"$HOME/.local/bin/analyticscli\" \"$HOME/.local/analyticscli-npm/bin/analyticscli\"\n```\n\nIf the binary exists under `$HOME/.local/bin` or `$HOME/.local/analyticscli-npm/bin`, make future shells pick it up. Update all common shell startup files idempotently, then verify from a fresh shell:\n\n```bash\nfor f in \"$HOME/.profile\" \"$HOME/.bashrc\" \"$HOME/.bash_profile\" \"$HOME/.zshrc\" \"$HOME/.zprofile\"; do\n  touch \"$f\"\n  grep -Fq 'export PATH=\"$HOME/.local/bin:$HOME/.local/analyticscli-npm/bin:$PATH\"' \"$f\" ||\n    printf '\\n# AnalyticsCLI CLI user-local npm bin\\nexport PATH=\"$HOME/.local/bin:$HOME/.local/analyticscli-npm/bin:$PATH\"\\n' >> \"$f\"\ndone\nbash -lc 'source \"$HOME/.bashrc\" 2>/dev/null || true; source \"$HOME/.profile\" 2>/dev/null || true; command -v analyticscli && analyticscli --help >/dev/null'\n```\n\nChild processes cannot mutate an already-open parent terminal. Say that only as residual context after you have already updated profile files and verified a fresh shell. Do not say \"analyticscli is fixed\" unless this exact command succeeds in the same command context you control:\n\n```bash\ncommand -v analyticscli && analyticscli --help >/dev/null\n```\n\n## AnalyticsCLI CLI Install Protocol\n\nBefore any setup, preflight, start, or run path tries to execute `analyticscli`, make sure the npm package is installed and current.\nIf the user reports `analyticscli: command not found`, run the Dependency Refresh Protocol before any other action.\n\nThe package name is `@analyticscli/cli`; the installed binary name is `analyticscli`.\nDo not search npm for `analyticscli` or `analyticsscli`.\n\nUse this exact install/update command:\n\n```bash\nnpm install -g @analyticscli/cli\n```\n\nThen verify:\n\n```bash\ncommand -v analyticscli\nanalyticscli --help\n```\n\nIf global npm installs are blocked on a VPS, use the bundled helper from the installed skill root:\n\n```bash\nbash skills/openclaw-growth-engineer/scripts/install-analyticscli-cli.sh\n```\n\nThe helper falls back to a user-local npm prefix at `~/.local` when global install fails with permissions errors, prepends `~/.local/bin` for the current run, and prints a PATH hint if the shell needs it.\nIt must also update common shell profile files and verify that a fresh shell can resolve `analyticscli`.\nOnly ask the user for help if both direct npm install and the bundled helper fail with a concrete permission, missing `npm`, or network error.\n\n## Delivery Modes\n\nThe CLI can write proposals to one or more targets:\n\n- `deliveries.openclawChat.enabled = true`: write `.openclaw/chat/latest.md` and `.openclaw/chat/latest.json` as local outbox artifacts. This is not an external human notification by itself.\n- Real user notifications require a successful external channel such as native OpenClaw cron delivery, `deliveries.command`, Discord, Slack webhook, or generic webhook. OpenClaw cron delivery defaults to `automation.openclawCron.delivery.channel = \"last\"` so it uses the chat/social channel already connected to that OpenClaw instance, whether that is Discord, Slack, Telegram, WhatsApp, Matrix, Teams, or another supported channel. A local outbox write must never be presented as an externally delivered human alert.\n- The runner is the only delivery owner. Do not add a second CLI/orchestrator send pass after the runtime finishes. Native OpenClaw/Hermes cron must inspect the newest proof, render its exact structured notification only when native delivery still owns it, and return `HEARTBEAT_OK` when `externalDeliverySent=true`, the category is disabled, or the run was suppressed/unchanged/not due. A state-file lock prevents OpenClaw and Hermes from running the same state concurrently; state writes are atomic. Failed growth-summary and runner-failure targets remain receipt-aware and retry only pending targets.\n- `deliveries.github.mode = \"issue\"` with `deliveries.github.autoCreate = true`: create implementation-ready GitHub issues\n- `deliveries.github.mode = \"pull_request\"` with `deliveries.github.autoCreate = true`: create proposal-only draft PRs that add `.openclaw/proposals/...md` proposal files to the repo. Use this only for explicit proposal delivery, not when the user asks OpenClaw to implement changes.\n\nUse issue mode when:\n\n- you want backlog-first planning\n- engineering should pick up and implement later\n\nUse pull-request mode when:\n\n- you want every proposal anchored in a branch \n\nFile v1.0.210:README.md\n\n# OpenClaw Growth Engineer\n\nShared AI Growth Engineer for mobile apps, centered around a standalone `openclaw` CLI runtime plus the host agent as the AI layer.\n\nIt pulls together analytics, monetization, crashes, feedback, store signals, and repo context and turns them into proposal drafts that can be handed to OpenClaw chat, GitHub issues, or draft PRs.\n\nIf you only want the normal setup path: run the local connector wizard once, then start the CLI.\n\n## Shared Skill Distribution\n\nThis folder is the single canonical skill for OpenClaw, Hermes, and generic `SKILL.md` clients. Do not fork the instructions or runtime for Hermes. Keep shared behavior in this folder and use only small metadata/docs notes for agent-specific install paths.\n\nOpenClaw install:\n\n```bash\nnpx clawhub install openclaw-growth-engineer\n```\n\nHermes install:\n\n```bash\nhermes skills install Wotaso/openclaw-growth-engineer-skill\n```\n\n## Quick Start\n\n1. Paste this into the VPS, Mac mini, or host shell for the active app workspace:\n\n```bash\nnpx -y @analyticscli/growth-engineer wizard --connectors\n```\n\nSecrets stay in the VPS/host shell wizard. Do not use chat or a standalone `analyticscli login` step for first setup.\n\n2. Run setup:\n\n```bash\ngrowth-engineer setup --config openclaw.config.json\n```\n\nThis should:\n\n- initialize `openclaw.config.json`\n- install/update `@analyticscli/cli` so the `analyticscli` binary exists\n- reuse the existing AnalyticsCLI setup flow\n- install/update the shared skills like `analyticscli-cli` and `analyticscli-ts-sdk`\n- install the canonical OpenClaw skill path through the shared installer instead of redefining it locally\n\n3. Run preflight:\n\n```bash\ngrowth-engineer preflight --config openclaw.config.json --test-connections\n```\n\nThe preflight/start runtime also repairs a missing `analyticscli` binary by running:\n\n```bash\nnpm install -g @analyticscli/cli\n```\n\nIf global npm installs are blocked, it falls back to a user-local npm prefix at `~/.local`.\nFor manual repair from a copied skill runtime, run:\n\n```bash\nbash skills/openclaw-growth-engineer/scripts/install-analyticscli-cli.sh\n```\n\n4. Start the first pass:\n\n```bash\nopenclaw start --config openclaw.config.json\n```\n\nFor recurring OpenClaw checks, setup/start configures OpenClaw Gateway cron when available and keeps a non-empty workspace `HEARTBEAT.md` in place as fallback. For Hermes installs, the same wizard/start path configures Hermes cron when the `hermes` CLI is available. In both cases, the scheduler only wakes the agent; the Growth Engineer runner remains the source of truth for daily, weekly, monthly, quarterly, six-month, and yearly cadence decisions.\n\nSetup should guide the developer through each missing piece. When something is blocked, the agent should explain what was detected, why the missing value matters, where to get it, and the minimum permission needed instead of returning a generic failure.\nBefore requesting optional credentials, ask which connections the user wants to set up: AnalyticsCLI baseline with feedback summaries, GitHub code access, ASC / App Store Connect CLI, RevenueCat, Sentry-compatible crash monitoring including Sentry Cloud and GlitchTip accounts, or skip.\nThe setup wizard also asks how the user wants the tool to operate and whether to keep or edit the default cadence plan:\n\n- daily: critical production/business-health guardrail only, with root cause and exact fix/debug step\n- weekly: conversion, traffic, activation, retention, RevenueCat, source quality, reviews, releases, and stability\n- monthly: MoM revenue, conversion, churn, acquisition quality, store/listing conversion, retention, reviews, usage, and crash totals\n- every 3 months: positioning, pricing/packaging, onboarding architecture, roadmap assumptions, tracking quality, and major funnel bets\n- every 6 months: connector coverage, SDK instrumentation, event taxonomy, data reliability, memory, and growth loops\n- yearly: evidence reset for market/channel fit, monetization model, retention ceiling, product scope, and major strategic direction\n\n## What It Does\n\n- Reads analytics by default and can add RevenueCat, Sentry-compatible crash monitoring, AnalyticsCLI feedback summaries, store/release connectors, Slack, and generic webhooks.\n- For iOS/macOS apps, setup should ask whether to connect the `asc` CLI and App Store Connect skill for all available read-only App Store Connect signals: units/downloads, redownloads, conversion, source page views, app usage, purchases, subscriptions, reviews/ratings, builds/releases, and crash totals.\n- Runs a daily production health pass when scheduled: non-zero production crash totals should notify the OpenClaw user through configured chat/social delivery, then create a GitHub issue or implementation PR automatically when GitHub API write access is configured.\n- Sends state-aware growth and connector summaries with status, impact, affected app/source, next action, and automation boundary. OpenClaw cron defaults to the instance's connected route (`channel=last`), so the same compact fallback works across Discord, Slack, Telegram, WhatsApp, Matrix, Teams, and other supported native routes. Direct Discord delivery uses embeds and direct Slack delivery uses Block Kit.\n- Tracks each notification target independently: successful channels are not reposted when another target needs a retry, the Discord bridge independently receipts its OpenClaw and Hermes targets, recovery is reported once, and unchanged findings stay quiet after successful delivery.\n- Treats clean healthcheck/daily runs as `HEARTBEAT_OK`, prevents native OpenClaw/Hermes cron from echoing a notification already sent by the runner, and delivers redacted runner failures through the same receipt-aware channel system.\n- Uses API-key ASC batch reports only and does not require browser or web-session login for setup or health checks.\n- Uses `analyticscli feedback summary --format json` as the built-in feedback source instead of a separate duplicate feedback definition.\n- Correlates product signals with repo context; connect GitHub with readable code access whenever possible because it makes analytics findings much more actionable.\n- Generates local issue drafts by default.\n- Writes an OpenClaw chat outbox by default, and creates GitHub issues or draft pull requests only when GitHub artifact creation is explicitly enabled in config.\n- Keeps connector health, source collection, growth summaries, and runner failures in separate local outbox files while retaining the legacy proposal handoff shape for existing consumers.\n- Leaves all conversational analysis and implementation work to the host agent.\n\n## What The Wizard Writes\n\nThe CLI writes only the commit-safe config:\n\n- `openclaw.config.json`\n\nYou do not need to hand-edit `openclaw.config.json` for the basic setup.\n\nOne useful knob in the config is:\n\n- `strategy.proposalMode = \"mandatory\" | \"balanced\" | \"creative\"`\n- `deliveries.openclawChat.enabled = true | false`\n- `deliveries.github.mode = \"issue\" | \"pull_request\"`\n- `deliveries.github.autoCreate = true | false`\n- `sources.feedback.cursorMode = \"auto_since_last_fetch\" | \"manual\"`\n- `sources.feedback.initialLookback = \"30d\"`\n\nUse it to control how conservative the generated requests should be.\nUse the delivery flags to choose whether proposals should show up in OpenClaw chat, become GitHub issues, or land as draft PRs on a new branch.\nThe feedback cursor settings make old feedback history opt-in instead of accidental: first run uses `--last 30d`, later runs use the stored `lastCollectedAt` unless the command already sets its own time range.\n\nSecrets should stay out of repo files. The normal path is to let OpenClaw manage the runtime environment or secret store and keep the config non-secret.\n\n## Main Commands\n\nPreflight only:\n\n```bash\nopenclaw preflight --config openclaw.config.json --test-connections\n```\n\nOne run:\n\n```bash\nopenclaw run --config openclaw.config.json\n```\n\nLoop mode:\n\n```bash\nopenclaw run --config openclaw.config.json --loop\n```\n\n## Maintainer Notes\n\nIn this monorepo, `packages/growth-engineer` is the canonical runtime surface. The checked-in `skills/openclaw-growth-engineer/src` and `scripts/openclaw-*` files remain compatibility paths for plain skill-folder installs.\n\nThe CLI is deliberately deterministic. It should not carry its own AI configuration.\nThe host agent should call the CLI for data collection and proposal generation, then use its own AI/runtime when the user wants interpretation or implementation.\n\nRun this after editing runtime scripts:\n\n```bash\npnpm openclaw-skill:quality\n```\n\nIn the standalone skill repository, run:\n\n```bash\nnpm run quality\n```\n\nThe checked-in `.mjs` files are the zero-install runtime artifact for OpenClaw workspaces. Edit `.mts` files under `src/`, then run the quality command to rebuild and verify the runtime.\n\n## Advanced Topics\n\nKeep the README short and use the references below only when you need more control:\n\n- [Advanced Setup](references/advanced-setup.md)\n- [Setup And Scheduling](references/setup-and-scheduling.md)\n- [Required Secrets](references/required-secrets.md)\n- [Input Schema](references/input-schema.md)\n\n## Workspace Files\n\nThe bootstrap step creates the runtime files below:\n\n- `scripts/openclaw-growth-*.mjs`\n- `scripts/openclaw-feedback-api.mjs`\n- `data/openclaw-growth-engineer/*.example.json`\n- `data/openclaw-growth-engineer/config.example.json`\n\nFile v1.0.210:_meta.json\n\n{\n  \"ownerId\": \"kn77jehzjrg5rxpfdjmq75fc1n83dm6w\",\n  \"slug\": \"growth-engineer\",\n  \"version\": \"1.0.210\",\n  \"publishedAt\": 1785922010943\n}\n\nFile v1.0.210:references/advanced-setup.md\n\n# Advanced Setup\n\nUse this page only when the default wizard flow is not enough.\n\nDefault path:\n\n1. Install with `npx -y clawhub install openclaw-growth-engineer`\n2. Bootstrap once with `bash skills/openclaw-growth-engineer/scripts/bootstrap-openclaw-workspace.sh`\n3. Run `npx -y @analyticscli/growth-engineer wizard --connectors`\n4. For connector setup, run `npx -y @analyticscli/growth-engineer wizard --connectors github,revenuecat,paddle,seo,sentry,asc`\n5. Run `node scripts/openclaw-growth-start.mjs --config data/openclaw-growth-engineer/config.json`\n\n## Secrets\n\n- Keep secrets out of repo files and out of `config.json`.\n- Prefer the OpenClaw runtime or secret store for secret injection.\n- Use raw env vars only when your OpenClaw setup does not already manage them for you.\n- The exact env names live in `config.secrets` and in [Required Secrets](required-secrets.md).\n\n## Connector Overrides\n\n- Built-in source keys are `analytics`, `revenuecat`, `paddle`, `seo`, `sentry`, `coolify`, and `feedback`; `feedback` is part of the AnalyticsCLI/custom feedback source, not a separate primary setup connector.\n- Extra mobile connectors go into `sources.extra[]`.\n- Prefer `mode=file` for maximum stability.\n- Use `mode=command` when the command deterministically returns JSON.\n- Put Sentry Cloud and self-hosted GlitchTip accounts under `sources.sentry.accounts[]` when they expose the Sentry-compatible API. Treat ASC CLI as the ASC / App Store Connect connector, not as a generic extra.\n\nUseful extras:\n\n- `app-store-reviews`\n- `play-console`\n- `firebase-crashlytics`\n\n## Delivery Modes\n\n- `actions.mode = \"issue\"` creates implementation-ready GitHub issues.\n- `actions.mode = \"pull_request\"` creates draft PRs plus `.openclaw/proposals/...` files.\n\n## Scheduling\n\n- One-shot run: `node scripts/openclaw-growth-runner.mjs --config data/openclaw-growth-engineer/config.json`\n- Continuous loop: `node scripts/openclaw-growth-runner.mjs --config data/openclaw-growth-engineer/config.json --loop`\n- Preflight only: `node scripts/openclaw-growth-preflight.mjs --config data/openclaw-growth-engineer/config.json --test-connections`\n\n## Schema And Examples\n\n- [Setup And Scheduling](setup-and-scheduling.md)\n- [Required Secrets](required-secrets.md)\n- [Input Schema](input-schema.md)\n\nFile v1.0.210:references/input-schema.md\n\n# Input Schema\n\nThe analyzer accepts multiple JSON shapes.\nPreferred order:\n\n1. shared `signals[]`\n2. crash-style `issues[]`\n3. feedback-style `items[]`\n\n## Shared `signals[]`\n\nUse this for analytics, revenue, store, and custom connectors:\n\n```json\n{\n  \"project\": \"my-mobile-app\",\n  \"window\": \"last_30d\",\n  \"signals\": [\n    {\n      \"id\": \"retention_d3_drop\",\n      \"title\": \"Day-3 retention dropped after onboarding paywall changes\",\n      \"area\": \"onboarding\",\n      \"priority\": \"high\",\n      \"metric\": \"d3_retention\",\n      \"current_value\": 0.18,\n      \"baseline_value\": 0.27,\n      \"delta_percent\": -33.3,\n      \"evidence\": [\n        \"Drop started after release 1.4.2\",\n        \"Largest loss between onboarding step 2 and paywall view\"\n      ],\n      \"suggested_actions\": [\n        \"Move paywall after first core value event\",\n        \"Simplify onboarding step 2 form\"\n      ],\n      \"keywords\": [\"onboarding\", \"paywall\", \"trial\"]\n    }\n  ]\n}\n```\n\n## Crash `issues[]`\n\nWorks for Sentry, GlitchTip, Crashlytics-style exports:\n\n```json\n{\n  \"issues\": [\n    {\n      \"id\": \"glitchtip_1431\",\n      \"title\": \"TypeError in paywall purchase callback\",\n      \"priority\": \"high\",\n      \"impact\": \"Conversion blocker in purchase flow\",\n      \"events\": 312,\n      \"users\": 119,\n      \"stack_keywords\": [\"paywall\", \"purchase\", \"subscription\", \"callback\"],\n      \"evidence\": [\"Crash occurs within 3s after paywall shown\"]\n    }\n  ]\n}\n```\n\n## Feedback `items[]`\n\nWorks for support, app reviews, in-app feedback, store review exports:\n\n```json\n{\n  \"window\": \"last_30d\",\n  \"items\": [\n    {\n      \"id\": \"fb_onboarding_too_long\",\n      \"title\": \"Onboarding feels too long before first value\",\n      \"area\": \"onboarding\",\n      \"priority\": \"medium\",\n      \"count\": 14,\n      \"channel\": \"support_tickets\",\n      \"comment\": \"Users ask for a faster path to first result\",\n      \"locations\": [\n        { \"location_id\": \"onboarding/profile_step\", \"count\": 9 },\n        { \"location_id\": \"onboarding/permissions_gate\", \"count\": 5 }\n      ],\n      \"keywords\": [\"onboarding\", \"friction\", \"first value\"]\n    }\n  ]\n}\n```\n\n## Extra Connectors\n\nFor `sources.extra[]`, the connector key becomes the source label in generated output.\n\nExamples:\n\n- `firebase_crashlytics`\n- `app_store_reviews`\n- `play_console`\n\nDo not model GlitchTip as an extra connector when it exposes the Sentry-compatible API; use `sources.sentry.accounts[]`. Do not model ASC CLI as an extra connector in setup answers; it is the ASC / App Store Connect connector.\n\nIf your connector can already emit shared `signals[]`, use that shape. It is the least ambiguous path.\n\n## ASC Analytics Payloads\n\nThe built-in ASC exporter can attach App Store Connect Analytics context under `meta.analytics`.\nUse it for production growth/stability checks, not TestFlight crash triage.\n\nExpected fields:\n\n```json\n{\n  \"project\": \"app-store-connect:123456789\",\n  \"window\": \"latest\",\n  \"signals\": [\n    {\n      \"id\": \"asc_production_crashes_detected\",\n      \"area\": \"crash\",\n      \"metric\": \"asc_total_crashes\",\n      \"current_value\": 3\n    }\n  ],\n  \"meta\": {\n    \"source\": \"asc\",\n    \"analyticsWindow\": { \"start\": \"2026-04-04\", \"end\": \"2026-05-03\" },\n    \"analytics\": {\n      \"units\": { \"total\": 100, \"previousTotal\": 160, \"percentChange\": -0.375 },\n      \"redownloads\": { \"total\": 12, \"previousTotal\": 10, \"percentChange\": 0.2 },\n      \"conversionRate\": { \"total\": 4.5, \"previousTotal\": 6.2, \"percentChange\": -0.274 },\n      \"crashRate\": {\n        \"total\": 1.1,\n        \"previousTotal\": 0,\n        \"percentChange\": 1,\n        \"nonZeroDays\": [{ \"date\": \"2026-05-03\", \"value\": 1.1 }]\n      },\n      \"totalCrashes\": 3,\n      \"crashBreakdown\": [{ \"label\": \"1.0.0 (iOS)\", \"value\": 3 }],\n      \"sourceBreakdown\": [\n        { \"title\": \"App Store Search\", \"pageViewUnique\": 90, \"units\": 12 },\n        { \"title\": \"Web Referrer\", \"impressions\": 110, \"pageViewUnique\": 10 }\n      ],\n      \"overviewMetricCatalog\": [\n        {\n          \"section\": \"acquisition\",\n          \"measure\": \"pageViewCount\",\n          \"total\": 80,\n          \"previousTotal\": 120,\n          \"percentChange\": -0.333,\n          \"type\": \"COUNT\"\n        }\n      ]\n    }\n  }\n}\n```\n\nRules for recommendations:\n\n- alert daily on non-zero production total crashes\n- compare ASC crash totals with Sentry production issues/events/users when Sentry is connected\n- if API-key ASC batch reports are missing, tell the user to verify `ASC_KEY_ID`, `ASC_ISSUER_ID`, `ASC_PRIVATE_KEY_PATH`, and `ASC_VENDOR_NUMBER` where Sales and Trends data is needed; do not ask for browser or web-session login\n- inspect `overviewMetricCatalog` and parsed batch-report metrics so recommendations use all available ASC metrics, not only units/conversion/source traffic\n- treat ASC sources according to the report instance fields available for that row: impressions, product page views, downloads, purchases, or proceeds\n- turn source mix into Handlungsempfehlungen only after comparing units/downloads and conversion\n\n## Multiple Sentry-Compatible Accounts\n\nUse `sources.sentry.accounts[]` when an app has more than one Sentry-compatible crash source, for example Sentry Cloud plus a self-hosted GlitchTip instance:\n\n```json\n{\n  \"sources\": {\n    \"sentry\": {\n      \"enabled\": true,\n      \"mode\": \"command\",\n      \"command\": \"node scripts/export-sentry-summary.mjs --config data/openclaw-growth-engineer/config.json\",\n      \"accounts\": [\n        {\n          \"id\": \"sentry_cloud\",\n          \"label\": \"Sentry Cloud\",\n          \"baseUrl\": \"https://sentry.io\",\n          \"tokenEnv\": \"SENTRY_AUTH_TOKEN\",\n          \"org\": \"owner-org\",\n          \"projects\": [\"ios-app\"],\n          \"environment\": \"production\"\n        },\n        {\n          \"id\": \"glitchtip_selfhosted\",\n          \"label\": \"GlitchTip self-hosted\",\n          \"baseUrl\": \"https://glitchtip.example.com\",\n          \"tokenEnv\": \"GLITCHTIP_AUTH_TOKEN\",\n          \"org\": \"owner-org\",\n          \"projects\": [\"backend-api\", \"web-app\"],\n          \"environment\": \"production\"\n        }\n      ]\n    }\n  }\n}\n```\n\nRules:\n\n- keep tokens in environment variables or the OpenClaw secret file, not in config\n- set one `tokenEnv` per account when Sentry Cloud and GlitchTip use different credentials\n- use `projects[]` for all projects in that account that can affect the same product/app\n- the exporter emits one combined `sentry:multiple` summary when more than one account/project is configured\n\n## SEO Bing Webmaster Payloads\n\nThe built-in SEO exporter can attach Bing Webmaster Tools API context under `meta.bingWebmaster`.\nUse it for Bing discovery/indexing diagnostics, sitemap/feed status, and URL-submission quota, not as a replacement for Google Search Console query performance.\n\nExpected shape:\n\n```json\n{\n  \"project\": \"seo:https://example.com/\",\n  \"window\": \"2026-03-03_2026-06-01\",\n  \"signals\": [\n    {\n      \"id\": \"seo_bing_webmaster_status\",\n      \"title\": \"Bing Webmaster sitemap/feed status needs monitoring\",\n      \"area\": \"marketing\",\n      \"priority\": \"low\",\n      \"metric\": \"bing_webmaster_sites\",\n      \"evidence\": [\n        \"https://example.com/ feed https://example.com/sitemap.xml: status=Pending, type=Sitemap, urlCount=120\",\n        \"https://example.com/: Bing URL submission quota daily=99, monthly=2899\"\n      ],\n      \"keywords\": [\"seo\", \"bing\", \"bing-webmaster\", \"sitemap\", \"indexing\"]\n    }\n  ],\n  \"meta\": {\n    \"source\": \"seo\",\n    \"bingWebmaster\": {\n      \"source\": \"bing-webmaster-api\",\n      \"sites\": [\n        {\n          \"siteUrl\": \"https://example.com/\",\n          \"quota\": { \"DailyQuota\": 99, \"MonthlyQuota\": 2899 },\n          \"feeds\": [\n            {\n              \"url\": \"https://example.com/sitemap.xml\",\n              \"status\": \"Pending\",\n              \"type\": \"Sitemap\",\n              \"urlCount\": 120\n            }\n          ]\n        }\n      ]\n    }\n  }\n}\n```\n\nRules:\n\n- store `BING_WEBMASTER_API_KEY` in the host env/secret file, not in config or chat\n- set `BING_WEBMASTER_SITE_URL` or pass `--bing-site`; the exporter cannot infer Bing properties from GSC domain properties\n- treat `Pending` as a processing state unless it persists or URL Inspection shows crawl/indexing errors\n- keep URL submissions and IndexNow batches limited to canonical changed URLs\n\nFile v1.0.210:references/issue-template.md\n\n# Generated GitHub Issue Template\n\n```md\n## Problem\n<short problem statement>\n\n## Evidence\n- <metric or source evidence line 1>\n- <metric or source evidence line 2>\n\n## Affected Files / Modules\n- `path/to/fileA.ts`\n- `path/to/fileB.tsx`\n\n## Proposed Implementation\n- <action 1>\n- <action 2>\n- <action 3>\n\n## Expected Impact\n<single sentence with KPI intention>\n\n## Confidence\nHigh | Medium | Low\n\n## Optional Next-Step PR Prompt\n```text\nImplement issue: <title>\nFocus area: <area>\nLikely files: <file list>\nRequirements:\n- <action 1>\n- <tests>\n- <instrumentation>\n```\n```\n\nFile v1.0.210:references/required-secrets.md\n\n# Required Secrets\n\nUse this checklist before running autopilot mode.\n\n## Baseline\n\n| Env var | Purpose | Required | Minimum scope |\n| --- | --- | --- | --- |\n| `GITHUB_TOKEN` | Repo/code access for analysis; optional GitHub issue/PR creation | Strongly recommended for code-aware analysis; required only for GitHub issue/PR creation | Prefer GitHub CLI auth when already available. Token fallback: fine-grained read-only `Contents: Read`, `Metadata: Read`; use all repos only for cross-repo analysis. Issue creation: add `Issues: Read/Write`. PR creation: add `Pull requests: Read/Write` and `Contents: Read/Write` |\n| `ANALYTICSCLI_ACCESS_TOKEN` | AnalyticsCLI command auth when no local login exists | Recommended | Read-only analytics access across the account |\n| `ASC_KEY_ID` / `ASC_ISSUER_ID` / `ASC_PRIVATE_KEY_PATH` | Optional App Store Connect Analytics reports via `asc` CLI | Optional, ask before setup | Ongoing Reports key should use `Sales and Reports` for downloads. `Finance` or `Admin` also works for report downloads. Use a separate temporary Setup key with `Admin` only to create the initial App Analytics report request, then revoke it |\n| `REVENUECAT_API_KEY` | Optional RevenueCat monetization/subscription refresh | Optional, ask before setup | Secret API key stored server-side only. Prefer v2 read permissions for charts/metrics and required project configuration; add customer/subscriber read only when needed |\n| `PADDLE_API_KEY` | Optional Paddle Billing metrics refresh | Optional, ask before setup | Live Paddle API key with `metrics.read` permission from `https://vendors.paddle.com/authentication-v2`; sandbox metrics are not production evidence |\n| `GOOGLE_SEARCH_CONSOLE_ACCESS_TOKEN` or `GOOGLE_APPLICATION_CREDENTIALS` | Optional Google Search Console SEO refresh | Optional, ask before setup | Search Console read-only access. Leave `GSC_SITE_URL` empty to scan all verified properties visible to the account; set it only to intentionally restrict to one property. CSV-only SEO mode does not require a live token |\n| `BING_WEBMASTER_API_KEY` / `BING_WEBMASTER_SITE_URL` | Optional Bing Webmaster sitemap, feed, and URL-submission quota status | Optional, ask before setup | Bing Webmaster API key from Settings → API Access for a user that has verified-site access. Use it for Bing sitemap/indexing diagnostics; it does not replace GSC query-performance data |\n| `DATAFORSEO_LOGIN` / `DATAFORSEO_PASSWORD` | Optional paid keyword research enrichment | Optional, ask before setup | Store only when the user explicitly wants DataForSEO; commands must use `--confirm-paid` and a small `--max-paid-requests` cap |\n| `SENTRY_AUTH_TOKEN` | Sentry command/API refresh | Recommended | Read-only `org:read`, `project:read`, and `event:read` scopes |\n| `SENTRY_ORG` / `SENTRY_ENVIRONMENT` | Sentry account targeting | Recommended when Sentry is enabled | Non-secret org/environment. Defer project scope to app/repo/release context; use `sources.sentry.accounts[].projects[]` only for known fixed mappings. `SENTRY_ENVIRONMENT` usually `production`; set `SENTRY_BASE_URL` only for self-hosted Sentry |\n\n## Extra Connectors\n\nFor `sources.extra[]`, set `secretEnv` only when the connector actually needs it.\n\nExamples:\n\n- `GLITCHTIP_API_TOKEN`\n- `ASC_KEY_ID`\n- `ASC_ISSUER_ID`\n- `ASC_PRIVATE_KEY_PATH`\n- `ASC_BOOTSTRAP_KEY_ID`\n- `ASC_BOOTSTRAP_ISSUER_ID`\n- `ASC_BOOTSTRAP_PRIVATE_KEY_PATH`\n- `PLAY_CONSOLE_SERVICE_ACCOUNT_JSON`\n\n## Red Lines\n\n- Never commit secrets to git\n- Never store secrets in `data/openclaw-growth-engineer/config.json`\n- Never put secrets into proposal files, issues, or PR bodies\n- Do not ship privileged feedback keys directly in mobile app binaries unless they are intentionally public and app-scoped\n\nFile v1.0.210:references/setup-and-scheduling.md\n\n# Setup And Scheduling\n\nThis is the recommended OpenClaw-first baseline.\n\n## 1) Install Runtime\n\n```bash\nnpx -y clawhub install openclaw-growth-engineer\nbash skills/openclaw-growth-engineer/scripts/bootstrap-openclaw-workspace.sh\n```\n\nThe runtime must also ensure the AnalyticsCLI npm package is present. The package name is\n`@analyticscli/cli`; the binary name is `analyticscli`.\n\n```bash\nnpm install -g @analyticscli/cli\n```\n\nIf global npm installs fail on a VPS, use:\n\n```bash\nbash skills/openclaw-growth-engineer/scripts/install-analyticscli-cli.sh\n```\n\n`openclaw setup`, `openclaw start`, and the copied preflight/start runtime should run this\ninstall/update automatically before using `analyticscli`.\n\n## 2) Generate Config\n\n```bash\nnpx -y @analyticscli/growth-engineer wizard --connectors\n```\n\nThe config is non-secret and commit-safe:\n\n- `data/openclaw-growth-engineer/config.json`\n\nThe setup flow should be developer-friendly:\n\n- auto-detect repo root, package manager, git remote, and available AnalyticsCLI auth when possible\n- explain why each requested connection is needed before asking for it\n- ask for the minimum missing secret or permission, not a broad token\n- show a status checklist after setup: configured, optional, blocked, and next command\n- hand off weak or missing app instrumentation to the `analyticscli-ts-sdk` skill with concrete SDK setup steps\n- ask exactly which optional connections the user wants to set up before requesting credentials: AnalyticsCLI baseline with feedback summaries, GitHub code access, ASC / App Store Connect CLI, RevenueCat, Paddle, SEO/GSC/DataForSEO, Sentry-compatible crash monitoring including Sentry Cloud and GlitchTip accounts, or skip\n- ask how the tool should be used before enabling scheduling: production autopilot, advisory-only summaries, or manual reports\n- ask whether to keep the default cadence plan; if not, collect what should happen daily, weekly, monthly, every 3 months, every 6 months, and yearly\n\nFor GitHub, RevenueCat, Paddle, SEO/GSC/DataForSEO, Sentry, and App Store Connect connector setup, use the connector wizard instead of asking the user to compose setup commands manually:\n\n```bash\nnpx -y @analyticscli/growth-engineer wizard --connectors github,revenuecat,paddle,seo,sentry,asc\n```\n\nThe connector wizard asks only for the selected connectors, explains each provider step in the terminal, writes local secrets to `~/.config/openclaw-growth/secrets.env`, and runs helper setup for the selected connectors.\n\n## 3) Choose GitHub Code Access And Delivery Mode\n\nConnect GitHub with readable repo/code access whenever possible.\nThis is very important for turning analytics signals into concrete file/module hypotheses.\nIssue and pull-request write permissions are optional; request them only when the selected delivery mode should create GitHub artifacts.\n\nPrefer GitHub CLI:\n\n```bash\ngh auth status\ngh auth login\ngh repo view --json nameWithOwner,defaultBranchRef\n```\n\nFor analysis-only token fallback, ask for a fine-grained read-only token with `Contents: Read` and `Metadata: Read`.\nAsk for all repositories only when the user wants cross-repo code analysis.\n\nSet in config:\n\n- `actions.mode = \"issue\"`\n- or `actions.mode = \"pull_request\"`\n\nPR mode creates proposal branches and draft PRs with `.openclaw/proposals/...md` files.\n\n## 4) Configure Connectors\n\nBuilt-in source keys:\n\n- `analytics`\n- `revenuecat`\n- `paddle`\n- `seo`\n- `sentry`\n- `coolify`\n- `feedback`\n\nTreat `feedback` as an AnalyticsCLI/custom feedback source key, not as a separate primary connector in high-level setup answers.\n\nExtra sources:\n\n- add entries to `sources.extra[]`\n- use `mode=file` for the most stable setup\n- use `mode=command` only when the command deterministically returns JSON\n\nRecommended mobile extras:\n\n- `app-store-reviews`\n- `play-console`\n\nDo not configure GlitchTip as a separate extra connector when it exposes the Sentry-compatible API. Put Sentry Cloud and GlitchTip instances under `sources.sentry.accounts[]` so crash monitoring remains one Sentry-compatible connector. ASC is a first-class App Store Connect connector, not an extra analytics alias.\n\nPaddle setup:\n\n- Ask whether to connect Paddle for web billing, MRR, revenue, refunds, chargebacks, checkout conversion, and active subscriber metrics.\n- Do not ask for or store a single Paddle product/project selection in the wizard. Keep account-level metrics access so the Growth Engineer can compare all Paddle revenue context available to the API key.\n- Tell the user to open `https://vendors.paddle.com/authentication-v2`, go to Developer Tools > Authentication > API keys, create a live API key, and grant `metrics.read`.\n- Store the key as `PADDLE_API_KEY` in the local secrets file.\n- Treat sandbox Paddle metrics as setup-only evidence, not production revenue evidence.\n\nSEO / Search Console / DataForSEO setup:\n\n- Ask whether to connect SEO acquisition data from Google Search Console and optional DataForSEO.\n- Do not hard-code one Search Console property by default. Leave `GSC_SITE_URL` empty so the exporter lists and queries all verified properties visible to the account.\n- Only set `GSC_SITE_URL` when the user intentionally wants to restrict analysis to one domain/property.\n- Tell the user to open `https://search.google.com/search-console` and verify the properties they want included.\n- For OAuth token mode, use a read-only Search Console token with `webmasters.readonly` scope and store it as `GOOGLE_SEARCH_CONSOLE_ACCESS_TOKEN`.\n- For service-account mode, tell the user to open `https://console.cloud.google.com/iam-admin/serviceaccounts`, create or choose a service account, add its email as a Search Console user on the relevant properties, then set `GOOGLE_APPLICATION_CREDENTIALS` or `GSC_SERVICE_ACCOUNT_JSON` outside chat.\n- DataForSEO is optional and paid. Tell the user to open `https://app.dataforseo.com/api-dashboard`; store `DATAFORSEO_LOGIN` and `DATAFORSEO_PASSWORD` only when requested. Commands must include `--confirm-paid` and a bounded `--max-paid-requests`.\n\nFor Apple-platform apps, ask whether to connect the `asc` CLI plus the App Store Connect agent skill for read-only App Store Connect reporting.\nWhen configured, use every available read-only ASC surface: App Analytics, Sales and Trends, downloads/units, redownloads, conversion, source traffic, app usage, purchases, subscriptions, ratings/reviews, build/TestFlight/release context, and crash totals. Do not describe ASC as partial or analytics-only once it is connected.\nASC setup uses two API keys:\n\n- Reports key: `Sales and Reports` for ongoing Growth Engineer downloads. `Finance` or `Admin` also works for report downloads, but prefer `Sales and Reports` after bootstrap.\n- Setup key: temporary `Admin`, used once to create the initial App Analytics report request, then revoked in App Store Connect.\n\nOptional extra roles on the Reports key: `Customer Support` for review text, `Developer` for builds/TestFlight context, and `App Manager` only when app metadata or release settings are explicitly needed.\n\nASC key locations:\n\n- Team key: App Store Connect -> Users and Access -> Integrations -> App Store Connect API\n- Individual key: profile menu -> Edit Profile -> Individual API Key\n- Keep Apple's original `AuthKey_<KEY_ID>.p8` filenames. The wizard derives `ASC_KEY_ID` and `ASC_BOOTSTRAP_KEY_ID` from those names.\n\nRevenueCat setup:\n\n- Ask whether to connect RevenueCat for monetization/subscription data.\n- For SDK instrumentation use only the public app-specific SDK key in app code.\n- For server-side summaries use a secret API key from RevenueCat -> Project Settings -> API Keys -> + New secret API key.\n- Prefer v2 read permissions for charts/metrics and required project configuration resources; store as `REVENUECAT_API_KEY`.\n\nSentry setup:\n\n- Ask whether to connect Sentry-compatible crash monitoring for crash, error, release, and performance signals.\n- Use the wizard to collect one or more accounts directly. For each account, collect label, `baseUrl`, `tokenEnv`, token, `org`, `environment`, and optional comma-separated `projects[]`.\n- Do not ask for one global `SENTRY_PROJECT` in the setup wizard. Defer Sentry project selection to app/repo/release context, or set account-specific `sources.sentry.accounts[].projects[]` only when a product has a known fixed mapping.\n- For multiple Sentry-compatible accounts, configure `sources.sentry.accounts[]` with separate `baseUrl`, `tokenEnv`, `org`, `projects[]`, and `environment` values for each account, for example Sentry Cloud plus self-hosted GlitchTip with different projects.\n- Use read-only Sentry API scopes: `org:read`, `project:read`, and `event:read`.\n- The direct source command is `node scripts/export-sentry-summary.mjs`; optional MCP config uses `@sentry/mcp-server@latest` when `npx` is available.\n- Treat Sentry as connected only after auth and exporter smoke tests pass.\n- Multiple Sentry-compatible accounts are supported. Put them under `sources.sentry.accounts[]` with a separate `baseUrl`, `tokenEnv`, `org`, `projects[]`, and `environment` for each account. Use this for setups such as Sentry Cloud plus self-hosted GlitchTip where the projects and tokens differ.\n- For production crash monitoring, compare Sentry issue/event/user counts with ASC total crashes and app-version crash breakdowns. ASC `crashRate` is supporting context; total crashes and affected users are the daily alert trigger.\n\n## 5) Store Secrets\n\nPrefer OpenClaw secret storage.\nInject env vars at runtime only.\n\nNever store secrets in:\n\n- repo files\n- config JSON\n- shell history\n- issue/PR content\n\n## 6) Validate\n\n```bash\nnode scripts/openclaw-growth-preflight.mjs --config data/openclaw-growth-engineer/config.json --test-connections\n```\n\nChecks include:\n\n- `analyticscli` package install/update and binary availability\n- `analyticscli-cli` skill presence\n- readable GitHub repo access when available for code-aware analysis\n- connector file/command readiness\n- required secrets for enabled sources and delivery modes\n- live smoke tests where possible\n\n## 7) Run\n\nOne pass:\n\n```bash\nnode scripts/openclaw-growth-runner.mjs \\\n  --config data/openclaw-growth-engineer/config.json \\\n  --state data/openclaw-growth-engineer/state.json\n```\n\nLoop:\n\n```bash\nnode scripts/openclaw-growth-runner.mjs --config data/openclaw-growth-engineer/config.json --loop\n```\n\nOpenClaw Gateway cron:\n\nFor reliable VPS installs, prefer OpenClaw's built-in cron scheduler over Discord delivery or host-level cron. `openclaw-growth-wizard.mjs` and `openclaw-growth-start.mjs` should configure an OpenClaw cron job when `automation.openclawCron.enabled` is true. The job runs in the main session via a system event, wakes immediately, and asks OpenClaw to run:\n\n```bash\nnode scripts/openclaw-growth-runner.mjs --config data/openclaw-growth-engineer/config.json\n```\n\nRecommended cron job:\n\n```bash\nopenclaw cron add \\\n  --name \"OpenClaw Growth Engineer scheduler\" \\\n  --cron \"*/30 * * * *\" \\\n  --tz \"UTC\" \\\n  --session main \\\n  --system-event \"Run OpenClaw Growth Engineer for this workspace. Execute: node scripts/openclaw-growth-runner.mjs --config data/openclaw-growth-engineer/config.json --state data/openclaw-growth-engineer/state.json. The runner is the source of truth for connector health, daily, weekly, monthly, quarterly, six-month, and yearly cadence decisions. After the command finishes, inspect data/openclaw-growth-engineer/state.json and data/openclaw-growth-engineer/runtime/scheduler-proof.jsonl. If connector health is healthy, no production issue is found, and no actionable growth finding was generated, reply HEARTBEAT_OK.\" \\\n  --announce \\\n  --channel last \\\n  --wake now\n```\n\n`--channel last` is intentional: it lets OpenClaw use the chat/social route already connected to that instance instead of assuming Discord, Slack, Telegram, or any other specific provider. Set `automation.openclawCron.delivery.channel` and `to` only when an install needs a pinned target.\n\nVerification on the VPS:\n\n```bash\nopenclaw cron list\nopenclaw tasks list\nopenclaw tasks audit\ntail -n 20 data/openclaw-growth-engineer/runtime/scheduler-proof.jsonl\njq '.connectorHealth, .cadences, .lastRunAt, .skippedReason' data/openclaw-growth-engineer/state.json\n```\n\nHermes cron:\n\nFor Hermes installs, prefer Hermes Gateway cron over Discord delivery or host-level cron. `openclaw-growth-wizard.mjs` and `openclaw-growth-start.mjs` should configure a Hermes cron job when `automation.hermesCron.enabled` is true and the `hermes` CLI is available. The job must attach the shared skill and workspace:\n\n```bash\nhermes cron create \\\n  \"*/30 * * * *\" \\\n  \"Run Growth Engineer for this workspace. Execute: node scripts/openclaw-growth-runner.mjs --config data/openclaw-growth-engineer/config.json --state data/openclaw-growth-engineer/state.json. The runner is the source of truth for connector health, daily, weekly, monthly, quarterly, six-month, and yearly cadence decisions. After the command finishes, inspect data/openclaw-growth-engineer/state.json and data/openclaw-growth-engineer/runtime/scheduler-proof.jsonl. If connector health is healthy, no production issue is found, and no actionable growth finding was generated, reply HEARTBEAT_OK.\" \\\n  --name \"Hermes Growth Engineer scheduler\" \\\n  --skill growth-engineer \\\n  --deliver local \\\n  --workdir \"$PWD\"\n```\n\nVerification on the Hermes host:\n\n```bash\nhermes cron list\nhermes gateway status\ntail -n 20 data/openclaw-growth-engineer/runtime/scheduler-proof.jsonl\njq '.connectorHealth, .cadences, .lastRunAt, .skippedReason' data/openclaw-growth-engineer/state.json\n```\n\nOpenClaw heartbeat:\n\nThe setup/bootstrap path must still leave a real workspace `HEARTBEAT.md` task in place as a fallback and awareness checklist. OpenClaw skips heartbeat runs when `HEARTBEAT.md` is empty or comment-only, so an enabled Growth Engineer schedule is not sufficient by itself.\n\nExpected heartbeat task:\n\n```yaml\ntasks:\n\n- name: openclaw-growth-engineer-run\n  interval: 6h\n  prompt: \"Run `node scripts/openclaw-growth-runner.mjs --config data/openclaw-growth-engineer/config.json` from the workspace if the config and runtime files exist. The runner owns schedule.cadences, connectorHealthCheckIntervalMinutes, skipIfNoDataChange, and skipIfIssueSetUnchanged. If it reports connector-health alerts, production crashes, generated issues, or actionable growth findings, summarize only the action and evidence. If setup files are missing, tell the user to run `npx -y @analyticscli/growth-engineer wizard --connectors`. If there is no actionable output, reply HEARTBEAT_OK.\"\n```\n\nWhen `schedule.intervalMinutes` or `schedule.connectorHealthCheckIntervalMinutes` is customized, `openclaw-growth-start.mjs` should rewrite this task interval to the smaller cadence. Heartbeat is not the primary scheduler on VPS installs; OpenClaw cron should wake the agent, and the runner decides whether daily, weekly, monthly, quarterly, six-month, or yearly growth work is due.\n\n## 7a) Production Health And Growth Cadence\n\nThe default growth loop interval is one day (`schedule.intervalMinutes = 1440`), while connector health runs every 6 hours by default (`schedule.connectorHealthCheckIntervalMinutes = 360`). Daily growth runs should cover every configured public production app.\nIf ASC analytics reports return a 403 for an app that is not public yet or not analytics-ready, record it as skipped/not-public rather than a failure.\n\nDaily:\n\n- Only investigate critical production or business-health issues: Sentry/GlitchTip production errors, crashes, onboarding or purchase drop-offs, zero-conversion days, missing buyers, very low users, conversion, purchases, or other urgent drops.\n- Check ASC total production crashes by app version and Sentry production issues/events/users.\n- Notify the OpenClaw user through configured chat/social delivery when total production crashes are non-zero.\n- Refresh and parse API-key ASC batch reports in the background, especially App Analytics report instances and Sales and Trends reports when `ASC_VENDOR_NUMBER` is available. Check every available ASC metric, especially units/downloads, redownloads, conversion rate, app usage, updates, app opens, subscription state, source traffic, and unique product page views by source, but only alert on severe anomalies during daily-only runs.\n- Do not require `asc web auth` during normal scheduled runs. Use experimental ASC web analytics only after asking the user, and only when a specific needed metric is unavailable through documented API-key reports.\n- Compare crash movement with release/build data before recommending more acquisition traffic.\n- Inspect memory/state and recent releases/code changes before assigning root cause.\n- Automatically create GitHub issues or implementation PRs when OpenClaw has configured GitHub API write access. Skip only when write access is missing, the finding is too low-confidence, or `actions.disableAutoCreateGitHubArtifacts = true`.\n\nWeekly:\n\n- Compare units, conversion, source mix, AnalyticsCLI activation/funnels/retention, Sentry stability, RevenueCat monetization when enabled, reviews, and releases.\n- Produce one executive summary plus one to three Handlungsempfehlungen with evidence, expected KPI movement, and likely code/store surfaces.\n\nMonthly:\n\n- Compare month-over-month units/downloads, redownloads, conversion, source quality, crash totals, review themes, retention, and churn.\n- Decide which acquisition channel, listing element, onboarding step, paywall, feature, or instrumentation surface should be built, changed, deleted, or repaired from codebase evidence.\n\nEvery 3 months:\n\n- Revisit positioning, pricing/packaging, onboarding architecture, roadmap assumptions, tracking quality, and major funnel bets.\n- Look for structural constraints and durable opportunities, not only tactical UI changes.\n\nEvery 6 months:\n\n- Audit connector coverage, SDK instrumentation, event taxonomy, data reliability, memory/state quality, and whether growth loops still match the best users.\n- Prioritize measurement and system fixes that make future recommendations more trustworthy.\n\nYearly:\n\n- Reset strategy from all available evidence: market/channel fit, monetization model, retention ceiling, product scope, and major surfaces/features.\n- Decide whether to double down, reposition, rebuild, or sunset major directions.\n\nSocial summaries:\n\n- By default, a meaningful growth run sends a short summary through configured OpenClaw chat, Slack, Discord command, webhook, or equivalent channels.\n- Disable with `notifications.growthRun.enabled=false` or by removing all growth-run notification channels.\n- Never include secrets in social summaries.\n\nASC source reporting caveat:\n\n- ASC source reports describe product page views by source. Do not call this downloads by source unless ASC exposes a true source-level download/unit measure.\n- Use source page views together with units and conversion rate to infer traffic quality.\n\n## 8) Feedback Collection\n\nOptional local feedback API:\n\n```bash\nFEEDBACK_API_TOKEN=<token> node scripts/openclaw-feedback-api.mjs --port 4310\n```\n\nExpected payload fields now support:\n\n- `feedback`\n- `location` / `locationId`\n- `appSurface`\n- `metadata`\n\nThe generated summary aggregates recurring themes and top feedback locations.\n\n## 9) Mobile Feedback Best Practice\n\n- Use tenant-owned backend/proxy endpoints for app-side feedback submission\n- Keep `locationId` stable and code-oriented\n- Example ids:\n  - `onboarding/paywall`\n  - `settings/restore`\n  - `profile/delete_account`\n\nFile v1.0.210:skill-card.md\n\n## Description:\n\nGrowth Engineer for mobile apps and agent runtimes including OpenClaw and Hermes. Correlate analytics, crashes, billing, feedback, store signals, and repo context into proposal drafts that can flow into agent chat, GitHub issues, or draft pull requests.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[wotaso-dev](https://clawhub.ai/user/wotaso-dev)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and product teams use this skill to collect mobile app growth, stability, monetization, store, feedback, and repository signals, then turn them into proposal drafts for agent chat, GitHub issues, or draft pull requests.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can install or update local code and helper CLIs.\n\nMitigation: Use a dedicated workspace and least-privileged OS user, and review or disable self-update behavior when reproducible reviewed code is required.\n\nRisk: The skill can run on a schedule and perform recurring automation.\n\nMitigation: Review configured cron or scheduler entries before enabling unattended runs, and keep the runner scoped to the intended workspace.\n\nRisk: The skill handles valuable provider credentials for analytics, billing, crash, store, SEO, and GitHub integrations.\n\nMitigation: Use keychains or secret managers where possible, keep tokens out of chat and repo files, and grant only the minimum scopes needed.\n\nRisk: GitHub issue or pull request creation can mutate repository state when write access is configured.\n\nMitigation: Enable GitHub artifact creation only when explicitly desired, and prefer read-only GitHub access for analysis-only deployments.\n\nRisk: An ASC installer path may use a curl-to-bash pattern.\n\nMitigation: Avoid the curl-to-bash ASC installer path and use reviewed installation steps instead.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/wotaso-dev/skills/growth-engineer)\n- [Skill homepage](https://github.com/Wotaso/growth-engineer-skill)\n- [Advanced Setup](references/advanced-setup.md)\n- [Setup And Scheduling](references/setup-and-scheduling.md)\n- [Required Secrets](references/required-secrets.md)\n- [Input Schema](references/input-schema.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with shell commands, configuration snippets, JSON summaries, issue drafts, and proposal drafts]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May produce local outbox files, GitHub issues, or draft pull requests when explicitly configured.]\n\n## Skill Version(s):\n\n1.0.210 (source: release evidence, package.json, and skill metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.210:data/openclaw-growth-engineer/analytics_summary.example.json\n\n{\n  \"project\": \"ring-sizer\",\n  \"window\": \"last_30d\",\n  \"signals\": [\n    {\n      \"id\": \"retention_d3_drop\",\n      \"title\": \"Day-3 retention dropped after onboarding changes\",\n      \"area\": \"onboarding\",\n      \"priority\": \"high\",\n      \"metric\": \"d3_retention\",\n      \"current_value\": 0.17,\n      \"baseline_value\": 0.26,\n      \"delta_percent\": -34.6,\n      \"evidence\": [\n        \"Biggest drop between onboarding step 2 and paywall\",\n        \"Drop began after release 1.8.0\"\n      ],\n      \"suggested_actions\": [\n        \"Move paywall after first successful ring measurement\",\n        \"Shorten onboarding step 2 to one required input\"\n      ],\n      \"keywords\": [\"onboarding\", \"paywall\", \"measurement\"]\n    },\n    {\n      \"id\": \"feature_usage_high_no_upgrade\",\n      \"title\": \"High feature usage but low upgrade conversion in premium flow\",\n      \"area\": \"conversion\",\n      \"priority\": \"medium\",\n      \"metric\": \"premium_feature_usage_to_upgrade\",\n      \"current_value\": 0.06,\n      \"baseline_value\": 0.09,\n      \"delta_percent\": -33.3,\n      \"evidence\": [\n        \"Users repeat free core action but do not enter checkout\",\n        \"Conversion loss concentrated on first paywall view\"\n      ],\n      \"keywords\": [\"premium\", \"upgrade\", \"checkout\", \"paywall\"]\n    }\n  ]\n}\n\nFile v1.0.210:data/openclaw-growth-engineer/config.example.json\n\n{\n  \"version\": 2,\n  \"generatedAt\": \"2026-03-21T00:00:00.000Z\",\n  \"project\": {\n    \"githubRepo\": \"owner/repo\",\n    \"repoRoot\": \".\",\n    \"outFile\": \"data/openclaw-growth-engineer/issues.generated.json\",\n    \"maxIssues\": 4,\n    \"titlePrefix\": \"[Growth]\",\n    \"labels\": [\n      \"ai-growth\",\n      \"autogenerated\",\n      \"product\"\n    ]\n  },\n  \"sources\": {\n    \"analytics\": {\n      \"enabled\": true,\n      \"mode\": \"command\",\n      \"command\": \"node scripts/export-analytics-summary.mjs\"\n    },\n    \"revenuecat\": {\n      \"enabled\": false,\n      \"mode\": \"command\",\n      \"command\": \"node scripts/export-revenuecat-summary.mjs\"\n    },\n    \"sentry\": {\n      \"enabled\": false,\n      \"mode\": \"command\",\n      \"command\": \"node scripts/export-sentry-summary.mjs --config data/openclaw-growth-engineer/config.json\",\n      \"accounts\": [\n        {\n          \"id\": \"sentry_cloud\",\n          \"label\": \"Sentry Cloud\",\n          \"baseUrl\": \"https://sentry.io\",\n          \"tokenEnv\": \"SENTRY_AUTH_TOKEN\",\n          \"org\": \"owner-org\",\n          \"projects\": [\n            \"ios-app\"\n          ],\n          \"environment\": \"production\"\n        },\n        {\n          \"id\": \"glitchtip_selfhosted\",\n          \"label\": \"GlitchTip self-hosted\",\n          \"baseUrl\": \"https://glitchtip.example.com\",\n          \"tokenEnv\": \"GLITCHTIP_AUTH_TOKEN\",\n          \"org\": \"owner-org\",\n          \"projects\": [\n            \"backend-api\",\n            \"web-app\"\n          ],\n          \"environment\": \"production\"\n        }\n      ]\n    },\n    \"coolify\": {\n      \"enabled\": false,\n      \"mode\": \"command\",\n      \"command\": \"npx -y @analyticscli/growth-engineer exporters coolify-summary --config data/openclaw-growth-engineer/config.json\",\n      \"baseUrl\": \"https://coolify.example.com\",\n      \"tokenEnv\": \"COOLIFY_API_TOKEN\"\n    },\n    \"feedback\": {\n      \"enabled\": true,\n      \"mode\": \"command\",\n      \"command\": \"analyticscli feedback summary --format json\",\n      \"cursorMode\": \"auto_since_last_fetch\",\n      \"initialLookback\": \"30d\"\n    },\n    \"extra\": [\n      {\n        \"key\": \"asc_cli\",\n        \"label\": \"asc-cli\",\n        \"service\": \"asc-cli\",\n        \"enabled\": false,\n        \"mode\": \"command\",\n        \"command\": \"node scripts/export-asc-summary.mjs --max-signals 6\",\n        \"secretEnv\": \"ASC_KEY_ID\"\n      }\n    ],\n    \"paddle\": {\n      \"enabled\": false,\n      \"mode\": \"command\",\n      \"command\": \"node scripts/export-paddle-summary.mjs\",\n      \"environment\": \"live\"\n    },\n    \"seo\": {\n      \"enabled\": false,\n      \"mode\": \"command\",\n      \"command\": \"node scripts/export-seo-summary.mjs\",\n      \"siteUrl\": \"\",\n      \"bingWebmaster\": {\n        \"enabled\": false,\n        \"siteUrl\": \"\",\n        \"feeds\": []\n      },\n      \"paidProvider\": {\n        \"dataforseo\": {\n          \"enabled\": false,\n          \"confirmPaid\": false,\n          \"maxPaidRequests\": 1\n        }\n      }\n    }\n  },\n  \"schedule\": {\n    \"intervalMinutes\": 90,\n    \"connectorHealthCheckIntervalMinutes\": 360,\n    \"skipIfNoDataChange\": true,\n    \"skipIfIssueSetUnchanged\": true,\n    \"cadences\": [\n      {\n        \"key\": \"healthcheck\",\n        \"title\": \"90-minute production error healthcheck\",\n        \"intervalMinutes\": 90,\n        \"criticalOnly\": true,\n        \"focusAreas\": [\n          \"crash\",\n          \"deployment\",\n          \"availability\"\n        ],\n        \"sourcePriorities\": [\n          \"sentry\",\n          \"glitchtip\",\n          \"coolify\",\n          \"asc_cli\"\n        ],\n        \"objective\": \"Check Sentry/GlitchTip and Coolify for production errors, failed deploys, unhealthy resources, and availability blockers across every configured app.\",\n        \"instructions\": \"For Sentry/GlitchTip app errors, compare the issue release or app version with ASC production versions first. Ignore errors that only affect TestFlight, debug, staging, unreleased, or non-production app versions. Keep the social output short and action-oriented.\"\n      },\n      {\n        \"key\": \"daily\",\n        \"title\": \"Daily behavioral anomaly guardrail\",\n        \"intervalDays\": 1,\n        \"criticalOnly\": true,\n        \"focusAreas\": [\n          \"analytics_anomaly\",\n          \"onboarding\",\n          \"conversion\",\n          \"paywall\",\n          \"purchase\",\n          \"retention\",\n          \"revenue\"\n        ],\n        \"sourcePriorities\": [\n          \"analytics\",\n          \"revenuecat\",\n          \"paddle\",\n          \"asc_cli\",\n          \"feedback\",\n          \"github\",\n          \"sentry\",\n          \"glitchtip\",\n          \"coolify\"\n        ],\n        \"objective\": \"Detect non-Sentry product and payment anomalies that affect real users: broken login or account flows inferred from behavior, onboarding or purchase drop-offs, zero-conversion days, missing buyers, very low active users, retention cliffs, and revenue anomalies.\",\n        \"instructions\": \"Compare AnalyticsCLI, RevenueCat, ASC, feedback, memory/state, and recent code changes against recent baselines. Use Sentry/GlitchTip/Coolify only as corroborating context; do not repeat pure crash or deployment alerts that belong to the 90-minute healthcheck.\"\n      },\n      {\n        \"key\": \"weekly\",\n        \"title\": \"Weekly executive product and growth summary\",\n        \"intervalDays\": 7,\n        \"criticalOnly\": false,\n        \"focusAreas\": [\n          \"conversion\",\n          \"paywall\",\n          \"onboarding\",\n          \"marketing\",\n          \"retention\",\n          \"stability\",\n          \"seo\"\n        ],\n        \"sourcePriorities\": [\n          \"analytics\",\n          \"revenuecat\",\n          \"seo\",\n          \"paddle\",\n          \"asc_cli\",\n          \"feedback\",\n          \"sentry\",\n          \"coolify\",\n          \"github\"\n        ],\n        \"objective\": \"Create a deep app-by-app executive summary across all configured projects, connectors, recent releases, code changes, traffic, revenue, activation, conversion, retention, reviews, and production stability.\",\n        \"instructions\": \"Be detailed. Group findings per app, explain why each recommendation should improve app usage, revenue, conversion, retention, or traffic, include expected KPI movement, likely code/store surfaces, owner-ready next steps, and verification plans. Generate charts when they clarify the evidence.\"\n      },\n      {\n        \"key\": \"monthly\",\n        \"title\": \"Monthly deep product, business, and code review\",\n        \"intervalDays\": 30,\n        \"criticalOnly\": false,\n        \"focusAreas\": [\n          \"conversion\",\n          \"paywall\",\n          \"retention\",\n          \"marketing\",\n          \"onboarding\",\n          \"codebase\",\n          \"seo\"\n        ],\n        \"sourcePriorities\": [\n          \"analytics\",\n          \"revenuecat\",\n          \"seo\",\n          \"paddle\",\n          \"asc_cli\",\n          \"feedback\",\n          \"sentry\",\n          \"coolify\",\n          \"github\"\n        ],\n        \"objective\": \"Compare all configured projects month-over-month: MRR, trial conversion, churn, acquisition quality, store conversion, retention, review themes, feature usage, crash totals, and codebase changes.\",\n        \"instructions\": \"Be very detailed and app-grouped. Decide what should be built, changed, deleted, priced differently, marketed differently, or instrumented next. Tie conclusions to connector data plus codebase evidence and explain why each recommendation should move revenue, conversion, retention, traffic, or acquisition quality. Generate charts when useful.\"\n      },\n      {\n        \"key\": \"quarterly\",\n        \"title\": \"3-month positioning, pricing, and roadmap review\",\n        \"intervalDays\": 91,\n        \"criticalOnly\": false,\n        \"focusAreas\": [\n          \"marketing\",\n          \"paywall\",\n          \"retention\",\n          \"conversion\",\n          \"onboarding\"\n        ],\n        \"sourcePriorities\": [\n          \"analytics\",\n          \"revenuecat\",\n          \"seo\",\n          \"paddle\",\n          \"asc_cli\",\n          \"feedback\",\n          \"github\",\n          \"sentry\"\n        ],\n        \"objective\": \"Revisit positioning, pricing/packaging, onboarding architecture, roadmap assumptions, tracking quality, codebase constraints, and major funnel bets across every configured app.\",\n        \"instructions\": \"Find structural constraints and durable opportunities, not small UI tweaks. Group the analysis by app and tie recommendations to cohort behavior, monetization, reviews, channel quality, and shipped changes. Include concrete roadmap, pricing, conversion, and traffic recommendations.\"\n      },\n      {\n        \"key\": \"six_months\",\n        \"title\": \"Six-month instrumentation and growth-system audit\",\n        \"intervalDays\": 182,\n        \"criticalOnly\": false,\n        \"focusAreas\": [\n          \"retention\",\n          \"conversion\",\n          \"paywall\",\n          \"marketing\",\n          \"general\",\n          \"seo\"\n        ],\n        \"sourcePriorities\": [\n          \"analytics\",\n          \"revenuecat\",\n          \"seo\",\n          \"paddle\",\n          \"asc_cli\",\n          \"feedback\",\n          \"sentry\"\n        ],\n        \"objective\": \"Audit connector coverage, SDK instrumentation, event taxonomy, data reliability, memory, growth loops, and whether product/code strategy still matches the best users across configured apps.\",\n        \"instructions\": \"Group by app. Prioritize measurement fixes and system changes that make future analysis more trustworthy, then identify the highest-leverage app/revenue/conversion/traffic improvements. Identify stale events, missing attribution, weak identity, broken feedback loops, and misleading dashboards.\"\n      },\n      {\n        \"key\": \"yearly\",\n        \"title\": \"Yearly evidence reset\",\n        \"intervalDays\": 365,\n        \"criticalOnly\": false,\n        \"focusAreas\": [\n          \"marketing\",\n          \"retention\",\n          \"paywall\",\n          \"conversion\",\n          \"general\"\n        ],\n        \"sourcePriorities\": [\n          \"analytics\",\n          \"revenuecat\",\n          \"seo\",\n          \"paddle\",\n          \"asc_cli\",\n          \"feedback\",\n          \"sentry\"\n        ],\n        \"objective\": \"Reset strategy from evidence across every configured project: market/channel fit, monetization model, retention ceiling, product scope, and whether to double down, reposition, rebuild, or sunset major surfaces/features.\",\n        \"instructions\": \"Use the full year of memory, releases, revenue, acquisition, reviews, code changes, and cohort behavior. Produce strategic experiments and stop-doing decisions.\"\n      }\n    ]\n  },\n  \"actions\": {\n    \"mode\": \"issue\",\n    \"outputDestinations\": [\n      \"openclaw_chat\",\n      \"github_issue\"\n    ],\n    \"productionErrorMode\": \"issue\",\n    \"autoCreateIssues\": true,\n    \"autoCreatePullRequests\": false,\n    \"autoCreateWhenGitHubWriteAccess\": true,\n    \"disableAutoCreateGitHubArtifacts\": false,\n    \"draftPullRequests\": true,\n    \"proposalBranchPrefix\": \"openclaw/proposals\"\n  },\n  \"charting\": {\n    \"enabled\": true,\n    \"command\": null\n  },\n  \"notifications\": {\n    \"connectorHealth\": {\n      \"enabled\": true,\n      \"channels\": [\n        {\n          \"type\": \"openclaw-chat\",\n          \"enabled\": true,\n          \"markdownPath\": \".openclaw/chat/connector-health.md\",\n          \"jsonPath\": \".openclaw/chat/connector-health.json\"\n        }\n      ]\n    },\n    \"growthRun\": {\n      \"enabled\": true,\n      \"channels\": [\n        {\n          \"type\": \"openclaw-chat\",\n          \"enabled\": true,\n          \"markdownPath\": \".openclaw/chat/growth-summary.md\",\n          \"jsonPath\": \".openclaw/chat/growth-summary.json\"\n        }\n      ]\n    }\n  },\n  \"automation\": {\n    \"openclawCron\": {\n      \"enabled\": true,\n      \"mode\": \"main\",\n      \"schedule\": \"*/30 * * * *\",\n      \"timezone\": \"UTC\",\n      \"name\": \"OpenClaw Growth Engineer scheduler\",\n      \"delivery\": {\n        \"enabled\": true,\n        \"mode\": \"announce\",\n        \"channel\": \"last\",\n        \"to\": \"\"\n      }\n    },\n    \"hermesCron\": {\n      \"enabled\": true,\n      \"schedule\": \"*/30 * * * *\",\n      \"name\": \"Hermes Growth Engineer scheduler\",\n      \"skill\": \"growth-engineer\",\n      \"deliver\": \"local\"\n    }\n  },\n  \"security\": {\n    \"connectorSecrets\": {\n      \"mode\": \"openclaw-secret-refs\",\n      \"persisted\": true,\n      \"agentReadable\": \"runtime_resolves_secret_refs\",\n      \"secretsFile\": \"~/.config/openclaw-growth/secrets.env\"\n    }\n  },\n  \"secrets\": {\n    \"githubTokenEnv\": \"GITHUB_TOKEN\",\n    \"githubTokenRef\": {\n      \"source\": \"env\",\n      \"provider\": \"default\",\n      \"id\": \"GITHUB_TOKEN\"\n    },\n    \"analyticsTokenEnv\": \"ANALYTICSCLI_ACCESS_TOKEN\",\n    \"analyticsTokenRef\": {\n      \"source\": \"env\",\n      \"provider\": \"default\",\n      \"id\": \"ANALYTICSCLI_ACCESS_TOKEN\"\n    },\n    \"revenuecatTokenEnv\": \"REVENUECAT_API_KEY\",\n    \"revenuecatTokenRef\": {\n      \"source\": \"env\",\n      \"provider\": \"default\",\n      \"id\": \"REVENUECAT_API_KEY\"\n    },\n    \"sentryTokenEnv\": \"SENTRY_AUTH_TOKEN\",\n    \"sentryTokenRef\": {\n      \"source\": \"env\",\n      \"provider\": \"default\",\n      \"id\": \"SENTRY_AUTH_TOKEN\"\n    },\n    \"coolifyTokenEnv\": \"COOLIFY_API_TOKEN\",\n    \"coolifyTokenRef\": {\n      \"source\": \"env\",\n      \"provider\": \"default\",\n      \"id\": \"COOLIFY_API_TOKEN\"\n    },\n    \"paddleTokenEnv\": \"PADDLE_API_KEY\",\n    \"paddleTokenRef\": {\n      \"source\": \"env\",\n      \"provider\": \"default\",\n      \"id\": \"PADDLE_API_KEY\"\n    },\n    \"gscTokenEnv\": \"GOOGLE_SEARCH_CONSOLE_ACCESS_TOKEN\",\n    \"gscTokenRef\": {\n      \"source\": \"env\",\n      \"provider\": \"default\",\n      \"id\": \"GOOGLE_SEARCH_CONSOLE_ACCESS_TOKEN\"\n    },\n    \"bingWebmasterApiKeyEnv\": \"BING_WEBMASTER_API_KEY\",\n    \"bingWebmasterApiKeyRef\": {\n      \"source\": \"env\",\n      \"provider\": \"default\",\n      \"id\": \"BING_WEBMASTER_API_KEY\"\n    },\n    \"dataforseoLoginEnv\": \"DATAFORSEO_LOGIN\",\n    \"dataforseoLoginRef\": {\n      \"source\": \"env\",\n      \"provider\": \"default\",\n      \"id\": \"DATAFORSEO_LOGIN\"\n    },\n    \"dataforseoPasswordEnv\": \"DATAFORSEO_PASSWORD\",\n    \"dataforseoPasswordRef\": {\n      \"source\": \"env\",\n      \"provider\": \"default\",\n      \"id\": \"DATAFORSEO_PASSWORD\"\n    }\n  }\n}\n\nFile v1.0.210:data/openclaw-growth-engineer/feedback_summary.example.json\n\n{\n  \"window\": \"last_30d\",\n  \"items\": [\n    {\n      \"id\": \"fb_paywall_confusing\",\n      \"title\": \"Users say paywall pricing is confusing\",\n      \"area\": \"paywall\",\n      \"priority\": \"medium\",\n      \"count\": 18,\n      \"channel\": \"app_store_reviews\",\n      \"comment\": \"Multiple users mention they do not understand weekly vs yearly plan differences.\",\n      \"locations\": [\n        { \"location_id\": \"paywall/onboarding_offer\", \"count\": 11 },\n        { \"location_id\": \"paywall/settings_restore\", \"count\": 7 }\n      ],\n      \"keywords\": [\"paywall\", \"pricing\", \"plans\", \"subscription\"],\n      \"suggested_actions\": [\n        \"Simplify plan copy and highlight annual savings\",\n        \"Add one sentence on what is included in premium\"\n      ]\n    },\n    {\n      \"id\": \"fb_onboarding_too_long\",\n      \"title\": \"Onboarding feels too long for first value\",\n      \"area\": \"onboarding\",\n      \"priority\": \"medium\",\n      \"count\": 12,\n      \"channel\": \"support_tickets\",\n      \"comment\": \"Users ask for faster start and less friction before first result.\",\n      \"locations\": [\n        { \"location_id\": \"onboarding/profile_step\", \"count\": 9 },\n        { \"location_id\": \"onboarding/permissions_gate\", \"count\": 3 }\n      ],\n      \"keywords\": [\"onboarding\", \"friction\", \"first value\"]\n    }\n  ]\n}\n\nArchive v1.0.209: 47 files, 359587 bytes\n\nFiles: data/openclaw-growth-engineer/analytics_summary.example.json (1268b), data/openclaw-growth-engineer/config.example.json (13877b), data/openclaw-growth-engineer/feedback_summary.example.json (1279b), data/openclaw-growth-engineer/revenuecat_summary.example.json (754b), data/openclaw-growth-engineer/sentry_summary.example.json (709b), package.json (412b), README.md (9409b), references/advanced-setup.md (2284b), references/input-schema.md (8202b), references/issue-template.md (572b), references/required-secrets.md (3754b), references/setup-and-scheduling.md (19562b), scripts/bootstrap-openclaw-workspace.sh (8535b), scripts/discord-openclaw-bridge.mjs (47463b), scripts/export-analytics-summary.mjs (11996b), scripts/export-asc-summary.mjs (59580b), scripts/export-coolify-summary.mjs (8744b), scripts/export-paddle-summary.mjs (9032b), scripts/export-revenuecat-summary.mjs (11722b), scripts/export-sentry-summary.mjs (25703b), scripts/export-seo-summary.mjs (22938b), scripts/install-analyticscli-cli.sh (5300b), scripts/openclaw-exporters-lib.mjs (127543b), scripts/openclaw-feedback-api.mjs (9746b), scripts/openclaw-growth-charts.py (4531b), scripts/openclaw-growth-engineer.mjs (69206b), scripts/openclaw-growth-env.mjs (4202b), scripts/openclaw-growth-preflight.mjs (80653b), scripts/openclaw-growth-runner.mjs (190333b), scripts/openclaw-growth-shared.mjs (37713b), scripts/openclaw-growth-start.mjs (116399b), scripts/openclaw-growth-status.mjs (35413b), scripts/openclaw-growth-wizard.mjs (284978b), scripts/openclaw-notification-ux.mjs (18821b), skill-card.md (2760b), SKILL.md (65096b), tests/asc-exporter-cache.test.mjs (13540b), tests/bootstrap-heartbeat.test.mjs (9316b), tests/connector-health-cadence.test.mjs (64518b), tests/export-analytics-summary.test.mjs (4016b), tests/hermes-wizard-startup.test.mjs (1335b), tests/install-analyticscli-cli.test.mjs (2860b), tests/openclaw-exporters-lib.test.mjs (18523b), tests/openclaw-growth-shared.test.mjs (12319b), tests/production-release-filter.test.mjs (3525b), tsconfig.json (393b), _meta.json (136b)\n\nFile v1.0.209:SKILL.md\n\n---\nname: growth-engineer\ndescription: Growth Engineer for mobile apps and agent runtimes including OpenClaw and Hermes. Correlate analytics, crashes, billing, feedback, store signals, and repo context into proposal drafts that can flow into agent chat, GitHub issues, or draft pull requests.\nlicense: MIT\nhomepage: https://github.com/Wotaso/growth-engineer-skill\nmetadata: {\"author\":\"wotaso\",\"version\":\"1.0.209\",\"analyticscli-target\":\"@analyticscli/cli\",\"analyticscli-supported-range\":\">=0.1.3 <0.2.0\",\"openclaw\":{\"emoji\":\"🚀\",\"homepage\":\"https://github.com/Wotaso/growth-engineer-skill\",\"requires\":{\"bins\":[\"node\",\"analyticscli\"]},\"install\":[{\"id\":\"analyticscli-cli\",\"kind\":\"node\",\"package\":\"@analyticscli/cli\",\"bins\":[\"analyticscli\"],\"label\":\"Install/update AnalyticsCLI CLI (npm package @analyticscli/cli)\"}]},\"hermes\":{\"tags\":[\"Growth\",\"Analytics\",\"Mobile\",\"Product\",\"OpenClaw\",\"Hermes\"],\"homepage\":\"https://github.com/Wotaso/growth-engineer-skill\",\"requires\":{\"bins\":[\"node\",\"analyticscli\"]},\"install\":[{\"id\":\"growth-engineer\",\"kind\":\"skill\",\"package\":\"Wotaso/growth-engineer-skill\",\"label\":\"Install the shared Growth Engineer for Hermes\"}]}}\n---\n\n# Growth Engineer\n\n## Canonical Skill Identity\n\n`growth-engineer` is the single canonical Growth Engineer for agent-driven product and growth work.\nThe old `ai-product-manager` / `product-manager-skill` package is deprecated and should be used only as a migration alias for existing installs.\nDo not recommend installing or loading both skills.\n\nUse this same skill for OpenClaw and Hermes. Do not create a duplicate Hermes-specific copy of the instructions, scripts, references, or runtime artifacts. If an agent-specific compatibility note is needed, add a small section here and keep the deterministic runtime shared.\n\n## Agent Compatibility\n\n- OpenClaw: install through ClawHub with `clawhub install growth-engineer` or `npx clawhub install growth-engineer`.\n- Hermes: install the same public skill repository with `hermes skills install Wotaso/growth-engineer-skill`.\n- Generic SKILL.md clients: install or mount the same `skills/openclaw-growth-engineer` folder.\n- All agents should use the same bundled `scripts/`, `references/`, and `data/` files.\n- macOS hosts, including Mac mini machines, are supported as normal local hosts. Use the same terminal wizard from the app workspace. For recurring unattended runs on macOS, use OpenClaw heartbeats, `openclaw run --loop`, or a host scheduler such as `launchd`; keep secrets in the host terminal/env/secret file, not in chat.\n\n## Local AnalyticsCLI Operator Notes\n\nThese notes apply when this skill is used from the local `Wotaso/analyticscli-monorepo` workspace.\n\n- Coolify resources, projects, or deployments named `prodinfos` are AnalyticsCLI production infrastructure, not a separate customer app. Treat failed `prodinfos` deployments as AnalyticsCLI production deployment-health signals.\n- For this workspace, Coolify monitoring is configured through `openclaw.config.json` with `https://coolify.wotaso.com`; read access requires `COOLIFY_API_TOKEN` in the local host environment or Growth Engineer secret store.\n- Do not send OpenClaw/Hermes GitHub PR or branch links for these deployment failures. Tell them to update from ClawHub/npm after a published fix, or handle local production remediation directly from the repo and Coolify logs.\n\n## Post-Install Reply Contract\n\nAfter installing this skill from ClawHub, OpenClaw or Hermes must not stop at \"installed and ready\" when setup is not complete. The next reply should be short and should immediately route the user to connector setup.\n\nUse this minimal reply shape:\n\n1. Say the skill is installed.\n2. Say one short sentence: \"Next, run the local wizard so you can choose connectors, intervals, output type, and paste secrets only in the host terminal.\"\n3. Provide exactly one copy/paste command block for the VPS, Mac mini, or host shell.\n4. Do not ask for API keys, private keys, or tokens in chat. Do not list provider docs unless the user asks.\n\nUse this command block for OpenClaw, Hermes, VPS, Linux, and macOS hosts:\n\n```bash\nnpx -y @analyticscli/growth-engineer wizard --connectors\n```\n\nRun this from the OpenClaw/Hermes workspace. Connector setup should route through the npm wizard so hosts get the latest wizard fixes without manual bootstrap commands.\n\n## Post-Setup Reply Contract\n\nAfter the VPS/host wizard finishes successfully, OpenClaw or Hermes should not answer with a generic agent-status paragraph. Reply in this minimal shape:\n\n1. Say that Growth Engineer setup completed.\n2. List only the configured connector groups and output destinations.\n3. Say that recurring health checks run every 6 hours by default and growth runs follow the configured daily/weekly/monthly cadence.\n4. Provide exactly one next command for a manual verification run:\n\n```bash\nnpx -y @analyticscli/growth-engineer run --config ~/data/openclaw-growth-engineer/config.json\n```\n\nDo not ask for project/repo scoping after successful setup. Do not claim a connector is broken unless `growth-engineer status --config ...` or the wizard result says it is blocked/partial.\n\n## Hermes Startup Override\n\nHermes must treat user messages such as \"ja los\", \"starte den Growth Engineer\", \"Connectoren einrichten\", \"setup\", \"installieren und starten\", or close variants as a wizard setup/start request.\n\nDo not satisfy those messages by only installing `analyticscli`, running `analyticscli login`, or telling the user to run `analyticscli login` manually. The Growth Engineer setup path is the bundled local terminal wizard because it handles connector selection, secret storage, project/app discovery, cadence, and smoke tests.\n\nWhen Hermes is running from chat/Discord or any non-interactive agent terminal, do not start the interactive wizard process yourself. Reply with one complete copy/paste command and tell the user to run it in the VPS or host shell where Hermes/OpenClaw should be configured. Secrets must be pasted into that shell only, not into chat.\n\nUse this exact command block in the reply after skill installation:\n\n```bash\nnpx -y @analyticscli/growth-engineer wizard --connectors\n```\n\nThen add exactly one short instruction sentence: \"Run this in your VPS/host shell and paste secrets only there.\"\n\nIf AnalyticsCLI auth is missing or invalid, the next action is still the wizard command above. The wizard should ask for the readonly token in the local terminal and persist it as `ANALYTICSCLI_ACCESS_TOKEN`; chat should not ask the user to paste tokens or detour into a separate `analyticscli login` flow.\n\n## Use This Skill When\n\n- you want an agent to turn product signals into execution-ready backlog work\n- you need one workflow across AnalyticsCLI product analytics/feedback, RevenueCat or Paddle monetization, SEO/GSC/Bing Webmaster/DataForSEO acquisition, Sentry-compatible crash monitoring including GlitchTip, ASC/App Store Connect, app reviews, and repo context\n- you want the deterministic work to live in a standalone CLI and the host agent to stay the AI/chat layer\n- you want proposal delivery to be configurable between agent chat handoff, GitHub issues, and draft pull requests\n\n## Product Focus\n\n- Primary focus: mobile apps\n- Works well with: React Native, Expo, native iOS/Android, mobile growth loops, paywalls, store reviews, crashes, release readiness\n- Still valid for SaaS/web products when your connectors export the same summary JSON shape\n\n## Private Repo / Minimal Input Rule\n\nTreat this as a private-repo-first skill. The setup and connector wizards should ask the user for as little information as possible.\n\n- Do not require `project.githubRepo` during connector setup. Defer repo selection until GitHub delivery or code mapping actually needs it.\n- When the agent has permission to list repos, projects, apps, or Sentry/GlitchTip projects, discover them automatically and persist the best available mapping.\n- Sentry/GlitchTip project lists are not required input. If org + token are configured, the exporter should discover visible projects at runtime and let the agent choose the relevant project from app/release context.\n- If there are multiple plausible targets, use app/release/config context first; ask the user only when the choice is genuinely ambiguous.\n- Keep GitHub issue/PR creation disabled unless explicitly requested or clearly configured. Missing repo context should be a deferred state, not a setup blocker.\n\n## Preferred Runtime\n\nPrefer the standalone `growth-engineer` CLI as the user-facing runtime surface when it is available. The old OpenClaw workspace CLI package is retired; do not direct users or automation to it.\n\n- Wizard path: `growth-engineer wizard --connectors`\n- Setup path: `growth-engineer setup --config openclaw.config.json`\n- Primary path: `growth-engineer start --config openclaw.config.json`\n- Local monorepo path: `pnpm --filter @analyticscli/growth-engineer dev start --repo-root <repo-root>`\n- Copied-runtime scripts under `scripts/openclaw-growth-*.mjs` remain the compatibility path for agents that install this as a plain `SKILL.md` folder\n\nThe CLI is intentionally non-AI. The host agent should stay the only conversational/implementation layer.\nUse the CLI to gather signals, generate proposals, schedule checks, and send deliveries.\nIf the user later asks the agent to implement a proposal, the agent should inspect the generated drafts and then use its own AI/runtime to do the work.\n\n## OpenClaw And Hermes Cron / Recurring Run Contract\n\nOpenClaw Gateway cron is the preferred wake-up mechanism for reliable VPS installs. The Growth Engineer schedule in `config.json` only decides what is due after the runner is invoked; it does not wake the agent by itself unless OpenClaw cron, `openclaw run --loop`, or a host scheduler is running.\nHermes Gateway cron is the matching wake-up mechanism for Hermes installs. Hermes jobs must use `hermes cron create ... --skill growth-engineer --deliver local --workdir <absolute-workspace>` so the scheduled run loads this skill and the app workspace context.\n\n- Bootstrap/start must create or repair a non-empty workspace `HEARTBEAT.md` with an `openclaw-growth-engineer-run` fallback task.\n- Wizard/start must also configure or print an OpenClaw Gateway cron job (`openclaw cron add ... --session main --system-event ... --wake now`) when `automation.openclawCron.enabled` is true.\n- Wizard/start must also configure or print a Hermes cron job (`hermes cron create ... --skill growth-engineer --deliver local --workdir <absolute-workspace>`) when `automation.hermesCron.enabled` is true and Hermes is installed.\n- The cron/system-event prompt must invoke `node scripts/openclaw-growth-runner.mjs --config <active-config> --state <active-config-dir>/state.json`. Do not let cron read config from one directory while the runner writes state/proof under the workspace default. The runner remains the source of truth for `schedule.intervalMinutes`, daily/weekly/monthly/quarterly/six-month/yearly cadences, connector health intervals, data-change skipping, and notification delivery.\n- If a user asks whether automatic checks are enabled, inspect the matching agent scheduler first (`openclaw cron list`, `openclaw cron runs --id <job-id>`, `openclaw tasks list`, or `hermes cron list` / `hermes cron status <job-id>`), then inspect runner proof (`<state-dir>/runtime/scheduler-proof.jsonl`) and state (`<state-dir>/state.json`). Do not use Discord as the default coordination path.\n- Keep `HEARTBEAT.md` tiny and secret-free. It is a fallback/awareness checklist and should say to reply `HEARTBEAT_OK` when no connector alert, production crash, generated issue, or actionable growth finding exists.\n\nImplementation PR rule:\n\n- If the user asks for a GitHub issue plus a pull request, or says \"create a PR\", \"make the PR\", \"implement this\", \"fix the app\", or close variants after a product/growth analysis, the agent must create an implementation PR with production app code changes in the target repository.\n- Do not satisfy that request with a proposal-only markdown PR. The CLI's proposal PR mode is only for explicit requests such as \"make a proposal PR\", \"planning PR\", \"draft proposal\", or scheduled proposal delivery.\n- A PR that only adds `.openclaw/proposals/*.md`, docs, or markdown planning files is not a valid implementation PR unless the user explicitly requested a proposal-only artifact.\n- For implementation PRs, the agent must inspect the app repo, create or reuse a branch, edit the relevant app files, run targeted checks where feasible, then open/update the PR. Use GitHub issue creation for tracking, but keep the PR focused on real app behavior.\n- If the implementation cannot be completed because repo write access, branch access, or local checkout is unavailable, say that directly and do not create a placeholder markdown PR.\n\n`openclaw setup` should reuse the existing `analyticscli setup` flow instead of redefining skill installation locally. That means shared skills such as `analyticscli-cli` and `analyticscli-ts-sdk` come from the canonical AnalyticsCLI installer.\n\n## Customization Boundary\n\nTreat this installed skill as vendor-managed and replaceable.\nAgents should almost never edit this skill in-place for user- or project-specific customization, because future skill updates may overwrite local changes.\nWhen the user wants custom behavior, create a separate companion skill or project-local customization skill instead, for example `openclaw-growth-custom`, and have that skill reference or layer on top of this one.\nOnly modify this skill directly when the change is intended as an upstream reusable fix for the canonical skill repository.\n\n## Setup DX Rules\n\nSetup should feel guided for a developer, not like a silent preflight dump.\n\n- Root-cause policy: when connector setup fails for a user, do not hand out VPS-specific workaround commands as the final answer. Fix the reusable Growth Engineer/CLI/wizard so every future installer gets the corrected flow, then publish/sync the skill and ask the running agent instance to refetch it.\n- Prefer auto-detection and direct fixes over asking the user to run generic commands.\n- In chat, explain only what the user needs for the next step. Put provider details, scopes, and secret prompts in the wizard unless the user asks.\n- Ask for the minimum missing value only; do not request issue/PR permissions unless artifact creation is enabled.\n- For blockers, return one short next action first. Add detailed status, permissions, or URLs only when the user asks or the wizard needs that value.\n- After each setup phase, summarize only the result and the next concrete action.\n- Keep secrets out of prompts, repo files, logs, and command arguments; prefer host-agent secret storage or environment injection.\n- Never ask the user to paste API keys, GitHub tokens, or App Store Connect `.p8` private-key contents into Discord, OpenClaw chat, Hermes chat, GitHub issues, PRs, or any shared transcript. Chat is not an appropriate secret transport.\n- For secrets, give a secure host-terminal path: set env vars in the runtime shell, an agent secret store, a password manager injection flow, or the wizard-managed `~/.config/openclaw-growth/secrets.env` with `chmod 600`. Growth commands must load that env file automatically. For ASC `.p8`, prefer asking for the local file path to Apple's original downloaded file name `AuthKey_<KEY_ID>.p8`; do not rename the file because the wizard derives the key id from that name. Pasted `.p8` content is only a fallback. Store only `ASC_PRIVATE_KEY_PATH` and never echo the private key back.\n- When SDK instrumentation is missing or weak, guide the developer through the `analyticscli-ts-sdk` setup path so analytics events become useful for later growth analysis.\n- If AnalyticsCLI has no default project and multiple projects are visible, do not report that as a hard error. List the available projects, ask the user which one to use, persist the choice with `openclaw start --config openclaw.config.json --project <project_id>` or `analyticscli projects select <project_id>`, and then retry the setup/run.\n\nDuring setup chat, keep the first answer short. The agent should not dump provider docs, permissions, status history, or troubleshooting unless the user asks for details.\n\nConnector status questions:\n\n- If the user asks whether connectors are connected, which connectors have access, or whether a specific app such as \"Flashes\" has all connectors, do not infer from memory, skill text, MCP config, or whether helper binaries exist.\n- Run the deterministic status command from the active agent workspace:\n  ```bash\n  node scripts/openclaw-growth-status.mjs --config data/openclaw-growth-engineer/config.json --json\n  ```\n- The status command loads `~/.config/openclaw-growth/secrets.env`, runs live connector checks, and treats GitHub code access separately from GitHub issue/PR delivery.\n- Do not require a single global GitHub repo for connector setup. GitHub is connected when auth/token is valid; choose or infer the repository per app/task later.\n- Answer from that command only. If it cannot be run, say \"I have not run a connector status check yet\" and give the wizard command; do not say credentials are missing just because they are not visible in chat.\n- Keep the answer short: say \"Ja\" only if every connector status is `connected`; otherwise list only the non-connected connector names and the status command's next action.\n- The interval runner performs a connector health check at least every 6 hours by default (`schedule.connectorHealthCheckIntervalMinutes`, default `360`). If a configured connector is `partial`, `blocked`, or `unknown`, it writes a connector-health alert and sends it through the configured notification channel(s): agent chat outbox, Slack, generic webhook, Discord, or a custom command channel. Connector probes and source-collection failures use independent incident streams. Send a human notification for a new/changed incident and once on recovery; keep unchanged, successfully delivered incidents silent. Track delivery receipts per runner-managed target so a failed target is retried without reposting to targets that already succeeded. The bundled Discord bridge additionally receipts OpenClaw and Hermes independently. Clean healthcheck/daily runs must produce `HEARTBEAT_OK`, not a repetitive success post. Discord is only one possible channel, not the default assumption.\n\nRetention reliability:\n\n- Treat D1/D3/D7 retention as an identity-quality-sensitive metric, not as an unconditional product fact.\n- Before making strong retention claims, inspect the `analyticscli retention` response `quality.reliability`, stable identity share, and warnings.\n- `analyticscli retention` defaults to `--identity-quality stable`. This excludes ephemeral/unknown SDK identities so consent-gated users without persistent identity do not create misleading multi-day retention noise.\n- Use `--identity-quality all` only as an explicit diagnostic comparison. Do not treat all-identity D1/D3/D7 as product truth when stable identity share is low.\n- If retention reliability is `low` or `unknown`, say the metric may be undercounted because some SDK sessions/users do not have persistent identity. Recommend verifying SDK identity persistence before prioritizing major retention work from D1/D7 alone.\n- Do not filter silently. If using stable-only retention, disclose that ephemeral/unknown identities were excluded and compare the remaining cohort size.\n- Product recommendations can still mention weak retention, but phrase it as \"appears low\" when reliability is weak and pair it with an instrumentation/persistence action.\n\nAnalyticsCLI product feedback:\n\n- Use Sentry/GlitchTip for production exceptions, crashes, hangs, and backend stack traces.\n- Use `analyticscli feedback submit` for feedback to the AnalyticsCLI SaaS owner about AnalyticsCLI itself: missing features, broken CLI/API/dashboard behavior, confusing errors, poor docs, or workflow friction.\n- Do not confuse this with tenant-owned end-user feedback collected by the AnalyticsCLI feedback feature. Tenant feedback is a product signal for the tenant's app; `analyticscli feedback submit` is operator feedback about AnalyticsCLI/OpenClaw tooling.\n- When an AnalyticsCLI/OpenClaw/SDK command, endpoint, or documented workflow fails, first try to refetch or update the relevant current version before declaring the behavior broken:\n  - Growth Engineer: `npx -y clawhub --no-input --dir skills update growth-engineer --force` or reinstall from the canonical skill source, then rerun the workflow.\n  - AnalyticsCLI CLI: update `@analyticscli/cli`, verify `analyticscli --help`, then rerun the exact failing command.\n  - AnalyticsCLI SDK: upgrade `@analyticscli/sdk` within the supported range and rerun the minimal host-app or test repro.\n- If no newer version is available, the update cannot be applied, or the newest version still fails, submit a bounded `analyticscli feedback submit` report if feedback service credentials are configured. Include installed versions checked, command/endpoint, project id when safe, sanitized payload shape, status code, error body, request id if present, expected behavior, workaround used, and whether an update was attempted.\n- Example:\n  ```bash\n  analyticscli feedback submit --category bug --message \"Retention query returns HTTP 500 for minimal payload\" --context \"endpoint=/v1/query/retention project=<project_id> anchorEvent=onboarding:start days=[1] last=7d identityQuality=all updateAttempt=cli@preview+skill@latest workaround=funnel+RevenueCat requestId=<request_id_if_present>\"\n  ```\n\nGrowth operating plan:\n\n- Goal: increase durable product value and business output by reducing churn, increasing MRR/LTV, improving acquisition quality, optimizing funnels/paywalls/onboarding/activation, and creating, changing, or deleting features only when the data supports it.\n- Data-first rule: gather all connected sources before recommendations whenever feasible: AnalyticsCLI events/funnels/retention, RevenueCat subscriptions/churn/revenue, Paddle billing metrics, SEO/GSC/Bing Webmaster/DataForSEO acquisition signals, Sentry crashes/performance, App Store Connect store/reviews/builds, GitHub code/release context, feedback, and any configured social/marketing sources.\n- Long analysis rule: prefer a longer cross-source investigation over fast generic advice. Look for correlations across connectors, for example Sentry regressions after a release, RevenueCat churn after a paywall change, App Store review themes matching funnel drop-offs, or marketing traffic that brings low-retention users.\n- Usage-choice rule: setup must ask how the user wants to use the tool before scheduling it. At minimum offer production autopilot, advisory-only summaries, and manual reports. Then ask whether the default cadence plan is acceptable; if not, collect/edit what should happen daily, weekly, monthly, every 3 months, every 6 months, and yearly.\n- GitHub production-version rule: always determine which code version is production before mapping data to files. Check repo default branch, release branches/tags, app version/build metadata, deployment workflows, App Store Connect build/version, Sentry release tags, and AnalyticsCLI appVersion. If they disagree, state the uncertainty and avoid overconfident file blame.\n- Action rule: every recommendation should include a concrete user/operator plan: what to do, where to do it, what data supports it, how to verify it, and which KPI should move. For implementation requests, create real code changes, not proposal-only docs.\n- Cadence for the user:\n  - Daily default: analyze every configured project for critical production or business-health issues: Sentry/GlitchTip crashes/errors, ASC crash totals, failed releases, onboarding or purchase drop-offs, zero-conversion days, missing buyers, very low active users, or other severe analytics anomalies. Always do root-cause analysis with exact evidence, recent code/release changes, and a concrete fix/debugging step. Prefer a GitHub issue or draft PR when write access is configured; otherwise hand off via OpenClaw chat. Do not generate generic growth ideas on a daily-only run.\n  - Weekly default: create an executive product and growth summary across all configured projects, connectors, recent releases, code changes, revenue, activation, retention, reviews, and stability. Pick one to three high-confidence improvements with KPI target and verification plan.\n  - Monthly default: compare all configured projects month-over-month: MRR, trial conversion, churn, acquisition quality, store/listing conversion, retention, review themes, feature usage, crash totals, and codebase changes. Decide what to build, change, delete, or instrument next.\n  - Every 3 months default: revisit positioning, pricing/packaging, onboarding architecture, roadmap assumptions, tracking quality, and major funnel bets. Look for structural constraints and durable opportunities.\n  - Every 6 months default: audit connector coverage, SDK instrumentation, event taxonomy, data reliability, memory, growth loops, and whether product/marketing strategy still matches the best users.\n  - Yearly default: reset strategy from all evidence: market/channel fit, monetization model, retention ceiling, product scope, and whether to double down, reposition, rebuild, or sunset major surfaces/features.\n- Memory and change-correlation rule: inspect persisted OpenClaw state, prior summaries, release/build metadata, Git history/recent commits where available, and previo...","readmeExcerpt":"Skill: growth-engineer Owner: wotaso-dev Summary: Growth Engineer for mobile apps and agent runtimes including OpenClaw and Hermes. Correlate analytics, crashes, billing, feedback, store signals, and repo context into proposal drafts that can flow into agent chat, GitHub issues, or draft pull requests. Tags: latest:1.0.210 Version history: v1.0.210 | 2026-08-05T09:26:50.943Z | auto Version 1.0.210 - Migrated major sc","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"npx -y @analyticscli/growth-engineer wizard --connectors"},{"language":"bash","snippet":"npx -y @analyticscli/growth-engineer run --config ~/data/openclaw-growth-engineer/config.json"},{"language":"bash","snippet":"npx -y @analyticscli/growth-engineer wizard --connectors"},{"language":"bash","snippet":"node scripts/openclaw-growth-status.mjs --config data/openclaw-growth-engineer/config.json --json"},{"language":"bash","snippet":"analyticscli feedback submit --category bug --message \"Retention query returns HTTP 500 for minimal payload\" --context \"endpoint=/v1/query/retention project=<project_id> anchorEvent=onboarding:start days=[1] last=7d identityQuality=all updateAttempt=cli@preview+skill@latest workaround=funnel+RevenueCat requestId=<request_id_if_present>\""},{"language":"text","snippet":"Growth Engineer connectors:\n- AnalyticsCLI baseline: product analytics plus built-in feedback summaries\n- GitHub code access: repo context and issue/PR delivery\n- RevenueCat monetization: subscriptions, trials, revenue, and churn\n- Sentry-compatible crash monitoring: Sentry Cloud and/or self-hosted GlitchTip via multi-account Sentry config\n- Coolify deployment monitoring: failed deploys, unhealthy resources, servers, and production health-check gaps\n- ASC / App Store Connect CLI: store analytics, reviews/ratings, builds/TestFlight/release context, downloads/units, conversion, source traffic, app usage, subscriptions, purchases, and crash totals when configured\n\nRun the wizard from the active agent workspace:"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: growth-engineer\ndescription: Growth Engineer for mobile apps and agent runtimes including OpenClaw and Hermes. Correlate analytics, crashes, billing, feedback, store signals, and repo context into proposal drafts that can flow into agent chat, GitHub issues, or draft pull requests.\nlicense: MIT\nhomepage: https://github.com/Wotaso/growth-engineer-skill\nmetadata: {\"author\":\"wotaso\",\"version\":\"1.0.210\",\"analyticscli-target\":\"@analyticscli/cli\",\"analyticscli-supported-range\":\">=0.1.3 <0.2.0\",\"openclaw\":{\"emoji\":\"🚀\",\"homepage\":\"https://github.com/Wotaso/growth-engineer-skill\",\"requires\":{\"bins\":[\"node\",\"analyticscli\"]},\"install\":[{\"id\":\"analyticscli-cli\",\"kind\":\"node\",\"package\":\"@analyticscli/cli\",\"bins\":[\"analyticscli\"],\"label\":\"Install/update AnalyticsCLI CLI (npm package @analyticscli/cli)\"}]},\"hermes\":{\"tags\":[\"Growth\",\"Analytics\",\"Mobile\",\"Product\",\"OpenClaw\",\"Hermes\"],\"homepage\":\"https://github.com/Wotaso/growth-engineer-skill\",\"requires\":{\"bins\":[\"node\",\"analyticscli\"]},\"install\":[{\"id\":\"growth-engineer\",\"kind\":\"skill\",\"package\":\"Wotaso/growth-engineer-skill\",\"label\":\"Install the shared Growth Engineer for Hermes\"}]}}\n---\n\n# Growth Engineer\n\n## Canonical Skill Identity\n\n`growth-engineer` is the single canonical Growth Engineer for agent-driven product and growth work.\nThe old `ai-product-manager` / `product-manager-skill` package is deprecated and should be used only as a migration alias for existing installs.\nDo not recommend installing or loading both skills.\n\nUse this same skill for OpenClaw and Hermes. Do not create a duplicate Hermes-specific copy of the instructions, scripts, references, or runtime artifacts. If an agent-specific compatibility note is needed, add a small section here and keep the deterministic runtime shared.\n\n## Agent Compatibility\n\n- OpenClaw: install through ClawHub with `clawhub install growth-engineer` or `npx clawhub install growth-engineer`.\n- Hermes: install the same public skill repository with `hermes skills install Wotaso/growth-engineer-skill`.\n- Generic SKILL.md clients: install or mount the same `skills/openclaw-growth-engineer` folder.\n- All agents should use the same bundled `scripts/`, `references/`, and `data/` files.\n- macOS hosts, including Mac mini machines, are supported as normal local hosts. Use the same terminal wizard from the app workspace. For recurring unattended runs on macOS, use OpenClaw heartbeats, `openclaw run --loop`, or a host scheduler such as `launchd`; keep secrets in the host terminal/env/secret file, not in chat.\n\n## Local AnalyticsCLI Operator Notes\n\nThese notes apply when this skill is used from the local `Wotaso/analyticscli-monorepo` workspace.\n\n- Coolify resources, projects, or deployments named `prodinfos` are AnalyticsCLI production infrastructure, not a separate customer app. Treat failed `prodinfos` deployments as AnalyticsCLI production deployment-health signals.\n- For this workspace, Coolify monitoring is configured through `openclaw.config.json` with `https:"},{"path":"README.md","content":"# OpenClaw Growth Engineer\n\nShared AI Growth Engineer for mobile apps, centered around a standalone `openclaw` CLI runtime plus the host agent as the AI layer.\n\nIt pulls together analytics, monetization, crashes, feedback, store signals, and repo context and turns them into proposal drafts that can be handed to OpenClaw chat, GitHub issues, or draft PRs.\n\nIf you only want the normal setup path: run the local connector wizard once, then start the CLI.\n\n## Shared Skill Distribution\n\nThis folder is the single canonical skill for OpenClaw, Hermes, and generic `SKILL.md` clients. Do not fork the instructions or runtime for Hermes. Keep shared behavior in this folder and use only small metadata/docs notes for agent-specific install paths.\n\nOpenClaw install:\n\n```bash\nnpx clawhub install openclaw-growth-engineer\n```\n\nHermes install:\n\n```bash\nhermes skills install Wotaso/openclaw-growth-engineer-skill\n```\n\n## Quick Start\n\n1. Paste this into the VPS, Mac mini, or host shell for the active app workspace:\n\n```bash\nnpx -y @analyticscli/growth-engineer wizard --connectors\n```\n\nSecrets stay in the VPS/host shell wizard. Do not use chat or a standalone `analyticscli login` step for first setup.\n\n2. Run setup:\n\n```bash\ngrowth-engineer setup --config openclaw.config.json\n```\n\nThis should:\n\n- initialize `openclaw.config.json`\n- install/update `@analyticscli/cli` so the `analyticscli` binary exists\n- reuse the existing AnalyticsCLI setup flow\n- install/update the shared skills like `analyticscli-cli` and `analyticscli-ts-sdk`\n- install the canonical OpenClaw skill path through the shared installer instead of redefining it locally\n\n3. Run preflight:\n\n```bash\ngrowth-engineer preflight --config openclaw.config.json --test-connections\n```\n\nThe preflight/start runtime also repairs a missing `analyticscli` binary by running:\n\n```bash\nnpm install -g @analyticscli/cli\n```\n\nIf global npm installs are blocked, it falls back to a user-local npm prefix at `~/.local`.\nFor manual repair from a copied skill runtime, run:\n\n```bash\nbash skills/openclaw-growth-engineer/scripts/install-analyticscli-cli.sh\n```\n\n4. Start the first pass:\n\n```bash\nopenclaw start --config openclaw.config.json\n```\n\nFor recurring OpenClaw checks, setup/start configures OpenClaw Gateway cron when available and keeps a non-empty workspace `HEARTBEAT.md` in place as fallback. For Hermes installs, the same wizard/start path configures Hermes cron when the `hermes` CLI is available. In both cases, the scheduler only wakes the agent; the Growth Engineer runner remains the source of truth for daily, weekly, monthly, quarterly, six-month, and yearly cadence decisions.\n\nSetup should guide the developer through each missing piece. When something is blocked, the agent should explain what was detected, why the missing value matters, where to get it, and the minimum permission needed instead of returning a generic failure.\nBefore requesting optional credentials, ask which connections the user wants to set up: AnalyticsCL"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn77jehzjrg5rxpfdjmq75fc1n83dm6w\",\n  \"slug\": \"growth-engineer\",\n  \"version\": \"1.0.210\",\n  \"publishedAt\": 1785922010943\n}"},{"path":"references/advanced-setup.md","content":"# Advanced Setup\n\nUse this page only when the default wizard flow is not enough.\n\nDefault path:\n\n1. Install with `npx -y clawhub install openclaw-growth-engineer`\n2. Bootstrap once with `bash skills/openclaw-growth-engineer/scripts/bootstrap-openclaw-workspace.sh`\n3. Run `npx -y @analyticscli/growth-engineer wizard --connectors`\n4. For connector setup, run `npx -y @analyticscli/growth-engineer wizard --connectors github,revenuecat,paddle,seo,sentry,asc`\n5. Run `node scripts/openclaw-growth-start.mjs --config data/openclaw-growth-engineer/config.json`\n\n## Secrets\n\n- Keep secrets out of repo files and out of `config.json`.\n- Prefer the OpenClaw runtime or secret store for secret injection.\n- Use raw env vars only when your OpenClaw setup does not already manage them for you.\n- The exact env names live in `config.secrets` and in [Required Secrets](required-secrets.md).\n\n## Connector Overrides\n\n- Built-in source keys are `analytics`, `revenuecat`, `paddle`, `seo`, `sentry`, `coolify`, and `feedback`; `feedback` is part of the AnalyticsCLI/custom feedback source, not a separate primary setup connector.\n- Extra mobile connectors go into `sources.extra[]`.\n- Prefer `mode=file` for maximum stability.\n- Use `mode=command` when the command deterministically returns JSON.\n- Put Sentry Cloud and self-hosted GlitchTip accounts under `sources.sentry.accounts[]` when they expose the Sentry-compatible API. Treat ASC CLI as the ASC / App Store Connect connector, not as a generic extra.\n\nUseful extras:\n\n- `app-store-reviews`\n- `play-console`\n- `firebase-crashlytics`\n\n## Delivery Modes\n\n- `actions.mode = \"issue\"` creates implementation-ready GitHub issues.\n- `actions.mode = \"pull_request\"` creates draft PRs plus `.openclaw/proposals/...` files.\n\n## Scheduling\n\n- One-shot run: `node scripts/openclaw-growth-runner.mjs --config data/openclaw-growth-engineer/config.json`\n- Continuous loop: `node scripts/openclaw-growth-runner.mjs --config data/openclaw-growth-engineer/config.json --loop`\n- Preflight only: `node scripts/openclaw-growth-preflight.mjs --config data/openclaw-growth-engineer/config.json --test-connections`\n\n## Schema And Examples\n\n- [Setup And Scheduling](setup-and-scheduling.md)\n- [Required Secrets](required-secrets.md)\n- [Input Schema](input-schema.md)"},{"path":"references/input-schema.md","content":"# Input Schema\n\nThe analyzer accepts multiple JSON shapes.\nPreferred order:\n\n1. shared `signals[]`\n2. crash-style `issues[]`\n3. feedback-style `items[]`\n\n## Shared `signals[]`\n\nUse this for analytics, revenue, store, and custom connectors:\n\n```json\n{\n  \"project\": \"my-mobile-app\",\n  \"window\": \"last_30d\",\n  \"signals\": [\n    {\n      \"id\": \"retention_d3_drop\",\n      \"title\": \"Day-3 retention dropped after onboarding paywall changes\",\n      \"area\": \"onboarding\",\n      \"priority\": \"high\",\n      \"metric\": \"d3_retention\",\n      \"current_value\": 0.18,\n      \"baseline_value\": 0.27,\n      \"delta_percent\": -33.3,\n      \"evidence\": [\n        \"Drop started after release 1.4.2\",\n        \"Largest loss between onboarding step 2 and paywall view\"\n      ],\n      \"suggested_actions\": [\n        \"Move paywall after first core value event\",\n        \"Simplify onboarding step 2 form\"\n      ],\n      \"keywords\": [\"onboarding\", \"paywall\", \"trial\"]\n    }\n  ]\n}\n```\n\n## Crash `issues[]`\n\nWorks for Sentry, GlitchTip, Crashlytics-style exports:\n\n```json\n{\n  \"issues\": [\n    {\n      \"id\": \"glitchtip_1431\",\n      \"title\": \"TypeError in paywall purchase callback\",\n      \"priority\": \"high\",\n      \"impact\": \"Conversion blocker in purchase flow\",\n      \"events\": 312,\n      \"users\": 119,\n      \"stack_keywords\": [\"paywall\", \"purchase\", \"subscription\", \"callback\"],\n      \"evidence\": [\"Crash occurs within 3s after paywall shown\"]\n    }\n  ]\n}\n```\n\n## Feedback `items[]`\n\nWorks for support, app reviews, in-app feedback, store review exports:\n\n```json\n{\n  \"window\": \"last_30d\",\n  \"items\": [\n    {\n      \"id\": \"fb_onboarding_too_long\",\n      \"title\": \"Onboarding feels too long before first value\",\n      \"area\": \"onboarding\",\n      \"priority\": \"medium\",\n      \"count\": 14,\n      \"channel\": \"support_tickets\",\n      \"comment\": \"Users ask for a faster path to first result\",\n      \"locations\": [\n        { \"location_id\": \"onboarding/profile_step\", \"count\": 9 },\n        { \"location_id\": \"onboarding/permissions_gate\", \"count\": 5 }\n      ],\n      \"keywords\": [\"onboarding\", \"friction\", \"first value\"]\n    }\n  ]\n}\n```\n\n## Extra Connectors\n\nFor `sources.extra[]`, the connector key becomes the source label in generated output.\n\nExamples:\n\n- `firebase_crashlytics`\n- `app_store_reviews`\n- `play_console`\n\nDo not model GlitchTip as an extra connector when it exposes the Sentry-compatible API; use `sources.sentry.accounts[]`. Do not model ASC CLI as an extra connector in setup answers; it is the ASC / App Store Connect connector.\n\nIf your connector can already emit shared `signals[]`, use that shape. It is the least ambiguous path.\n\n## ASC Analytics Payloads\n\nThe built-in ASC exporter can attach App Store Connect Analytics context under `meta.analytics`.\nUse it for production growth/stability checks, not TestFlight crash triage.\n\nExpected fields:\n\n```json\n{\n  \"project\": \"app-store-connect:123456789\",\n  \"window\": \"latest\",\n  \"signals\": [\n    {\n      \"id\": \"asc_production_crashes_detected\",\n      \"area\": \"crash\",\n    "}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":2007,"uniquenessScore":38,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T05:49:34.051Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T05:49:34.051Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T02:15:18.825Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}