OpenClaw Growth Engineer
by @wotaso-dev
OpenClaw-first growth autopilot for mobile apps. Correlate analytics, crashes, billing, feedback, store signals, and repo context into proposal drafts that c...
clawhub install openclaw-growth-engineerπ About This Skill
name: openclaw-growth-engineer description: OpenClaw-first growth autopilot for mobile apps. Correlate analytics, crashes, billing, feedback, store signals, and repo context into proposal drafts that can flow into OpenClaw chat, GitHub issues, or draft pull requests. license: MIT homepage: https://github.com/wotaso/analyticscli-skills metadata: {"author":"wotaso","version":"1.0.57","analyticscli-target":"@analyticscli/cli","analyticscli-supported-range":">=0.1.2-preview.0 <0.2.0","openclaw":{"emoji":"π","homepage":"https://github.com/wotaso/analyticscli-skills","requires":{"bins":["node","analyticscli"]},"install":[{"id":"analyticscli-cli","kind":"node","package":"@analyticscli/cli@preview","bins":["analyticscli"],"label":"Install/update AnalyticsCLI CLI (npm package @analyticscli/cli@preview)"}]}}
OpenClaw Growth Engineer
Canonical Skill Identity
openclaw-growth-engineer is the single canonical skill for OpenClaw product and growth work.
The old ai-product-manager / product-manager-skill package is deprecated and should be used only as a migration alias for existing installs.
Do not recommend installing or loading both skills.
Use This Skill When
Product Focus
Preferred Runtime
Prefer the standalone openclaw CLI as the runtime surface.
openclaw setup --config openclaw.config.jsonopenclaw start --config openclaw.config.jsonpnpm --filter @analyticscli/openclaw-cli dev start --repo-root scripts/openclaw-growth-*.mjs remain fallback-only for older OpenClaw workspacesThe CLI is intentionally non-AI. OpenClaw should stay the only conversational/implementation layer. Use the CLI to gather signals, generate proposals, schedule checks, and send deliveries. If the user later asks OpenClaw to implement a proposal, OpenClaw should inspect the generated drafts and then use its own AI/runtime to do the work.
Implementation PR rule:
.openclaw/proposals/*.md, docs, or markdown planning files is not a valid implementation PR unless the user explicitly requested a proposal-only artifact.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.
Customization Boundary
Treat this installed skill as vendor-managed and replaceable.
OpenClaw should almost never edit this skill in-place for user- or project-specific customization, because future ClawHub updates may overwrite local changes.
When 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.
Only modify this skill directly when the change is intended as an upstream reusable fix for the canonical skill repository.
Setup DX Rules
Setup should feel guided for a developer, not like a silent preflight dump.
.p8 private-key contents into Discord, OpenClaw chat, GitHub issues, PRs, or any shared transcript. Discord/chat is not an appropriate secret transport.~/.config/openclaw-growth/secrets.env with chmod 600. OpenClaw Growth commands must load that env file automatically. For .p8, the terminal wizard must validate pasted file content cryptographically before writing it to ~/.config/openclaw-growth/AuthKey_.p8 with chmod 600; store only ASC_PRIVATE_KEY_PATH and never echo the private key back.analyticscli-ts-sdk setup path so analytics events become useful for later growth analysis.openclaw start --config openclaw.config.json --project or analyticscli projects select , and then retry the setup/run.During setup chat, keep the first answer short. OpenClaw should not dump provider docs, permissions, status history, or troubleshooting unless the user asks for details.
Connector status questions:
node scripts/openclaw-growth-status.mjs --config data/openclaw-growth-engineer/config.json --json
~/.config/openclaw-growth/secrets.env, runs live connector checks, and treats GitHub code access separately from GitHub issue/PR delivery.connected; otherwise list only the non-connected connector names and the status command's next action.Retention reliability:
analyticscli retention response quality.reliability, stable identity share, and warnings.low or unknown, say the metric may be undercounted because some SDK sessions/users do not have persistent identity. Recommend verifying SDK identity persistence and rerunning retention with analyticscli retention --identity-quality stable before prioritizing major retention work from D1/D7 alone.Growth operating plan:
Production crash and ASC growth monitoring:
not_public_or_not_analytics_ready and skipped without calling them broken.crashRate only as a supporting ratio, never as the only stability signal. TestFlight crashes are out of scope unless the user explicitly asks.actions.disableAutoCreateGitHubArtifacts = true, GitHub write access is unavailable, or the finding is too low-confidence to be useful.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.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.asc web auth login, then verify with asc web auth status --output json --pretty, then rerun OpenClaw Growth. Do not confuse this with API-key ASC auth.Hard override for AI Growth Engineer connector questions:
If 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:
Answer only with this shape:
AI Growth Engineer connectors:
AnalyticsCLI baseline: product analytics plus built-in feedback summaries
GitHub code access: repo context and issue/PR delivery
RevenueCat monetization: subscriptions, trials, revenue, and churn
Sentry-compatible crash monitoring: Sentry Cloud and/or self-hosted GlitchTip via multi-account Sentry config
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 Run the wizard on the VPS:
cd /home/lo/.openclaw/workspace && \
bash skills/openclaw-growth-engineer/scripts/bootstrap-openclaw-workspace.sh && \
node scripts/openclaw-growth-wizard.mjs --connectors
Then add only: "Select the connectors in the wizard. Secrets stay in the terminal."
Do 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.
If the user asks a broad question such as "how do I setup everything", answer with only:
Available connectors:
AnalyticsCLI baseline: product analytics plus built-in feedback summaries
GitHub code access: repo context and issue/PR delivery
RevenueCat monetization: subscriptions, trials, revenue, and churn
Sentry-compatible crash monitoring: Sentry Cloud and/or self-hosted GlitchTip via multi-account Sentry config
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 Run the wizard from the OpenClaw workspace:
cd /home/lo/.openclaw/workspace && \
bash skills/openclaw-growth-engineer/scripts/bootstrap-openclaw-workspace.sh && \
node scripts/openclaw-growth-wizard.mjs --connectors
Then add one sentence: "The wizard will ask for the selected connectors and any secrets in the local terminal only."
If 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.
If 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 with cd first:
cd /home/lo/.openclaw/workspace && \
bash skills/openclaw-growth-engineer/scripts/bootstrap-openclaw-workspace.sh && \
node scripts/openclaw-growth-wizard.mjs --connectors analytics,github,revenuecat,sentry,asc
Use 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.
Do 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.
Connection setup requests are not satisfied by a successful product-manager run. If the user asks to set up asc, App Store Connect, RevenueCat, Sentry, GitHub, or codebase access, point them to the wizard command above and keep any extra explanation out of chat unless requested.
Reference URLs for the wizard or for explicit follow-up questions:
Safe secret handoff rules:
.p8 private keys because messages can be retained, logged, indexed, screenshotted, or visible to other bots/users. install -d -m 700 ~/.config/openclaw-growth
umask 077
$EDITOR ~/.config/openclaw-growth/secrets.env
# add lines like:
# REVENUECAT_API_KEY=...
# ASC_KEY_ID=...
# ASC_ISSUER_ID=...
# ASC_PRIVATE_KEY_PATH=/home/lo/.config/openclaw-growth/AuthKey_XXXX.p8
chmod 600 ~/.config/openclaw-growth/secrets.env
.p8 pattern: paste the full downloaded App Store Connect private key content into the local terminal wizard so it can validate and save ~/.config/openclaw-growth/AuthKey_.p8 with chmod 600, or save the file yourself and share only ASC_PRIVATE_KEY_PATH.Mandatory Baseline
Before autopilot runs, these are non-negotiable:
analyticscli CLI availableproject.repoRootopenclaw.config.jsonsources.analytics enabledGitHub connection is strongly recommended for serious analysis, even when GitHub delivery is disabled. Treat 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. Without repo context, findings stay generic and file/module hypotheses are lower confidence.
When the user says they want to connect GitHub or the codebase, do not ask them to manually send a repo path first.
Reference and use the dedicated ClawHub GitHub skill when available: steipete/github (https://clawhub.ai/steipete/github).
It 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.
Install or verify it before deeper GitHub setup when OpenClaw can manage skills:
openclaw skills install steipete/github
or
npx clawhub@latest install github
GitHub setup must go through the connector wizard's classic-token scope guide, not a raw gh auth login flow. The wizard should:
1. Detect repo root/remote when useful.
2. Show the classic token URL: https://github.com/settings/tokens/new.
3. Explain the relevant scopes briefly: public_repo, repo, and optional workflow.
4. Store GITHUB_TOKEN locally when the user pastes it into the terminal wizard.
5. 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.
6. Tell the user they can rerun the wizard later to change GitHub permissions.
Use least privilege:
public_reporepo (classic tokens make this broad)workflow only when the user explicitly wants OpenClaw to edit GitHub Actions workflow filesDependency Refresh Protocol
Run this protocol at the start of every setup/start/run request, and whenever the user asks to fetch, update, upgrade, or reinstall this skill.
Do not stop after saying the skill was fetched from ClawHub.
The job is not done until the npm binary and companion skills are updated and verified.
If the user reports analyticscli: command not found in their own terminal, treat that as unresolved even if analyticscli works inside OpenClaw's child process.
Child processes cannot mutate the PATH of an already-open parent terminal.
1. Refresh this ClawHub skill:
npx -y clawhub install openclaw-growth-engineer
2. Refresh the AnalyticsCLI agent skill only when it can run non-interactively:
npx -y skills add wotaso/analyticscli-skills --skill analyticscli-cli
If this command asks an interactive agent-selection question, stop that command and continue with the npm package install instead of blocking.
Do not describe an interactive skills add prompt as a successful refresh.
3. Install or update the npm package that provides the analyticscli binary:
npm install -g @analyticscli/cli@preview
4. If global npm install fails with a permissions error, use the bundled helper from the installed skill root:
bash skills/openclaw-growth-engineer/scripts/install-analyticscli-cli.sh
5. Verify and report the exact binary path:
command -v analyticscli
analyticscli --help
If analyticscli: command not found still happens, do not claim setup is complete.
Find the user-local binary and fix PATH for future shells yourself; do not bounce this step back to the user:
export PATH="$HOME/.local/bin:$HOME/.local/analyticscli-npm/bin:$PATH"
command -v analyticscli || ls -l "$HOME/.local/bin/analyticscli" "$HOME/.local/analyticscli-npm/bin/analyticscli"
If 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:
for f in "$HOME/.profile" "$HOME/.bashrc" "$HOME/.bash_profile" "$HOME/.zshrc" "$HOME/.zprofile"; do
touch "$f"
grep -Fq 'export PATH="$HOME/.local/bin:$HOME/.local/analyticscli-npm/bin:$PATH"' "$f" ||
printf '\n# AnalyticsCLI CLI user-local npm bin\nexport PATH="$HOME/.local/bin:$HOME/.local/analyticscli-npm/bin:$PATH"\n' >> "$f"
done
bash -lc 'source "$HOME/.bashrc" 2>/dev/null || true; source "$HOME/.profile" 2>/dev/null || true; command -v analyticscli && analyticscli --help >/dev/null'
Child 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:
command -v analyticscli && analyticscli --help >/dev/null
AnalyticsCLI CLI Install Protocol
Before any setup, preflight, start, or run path tries to execute analyticscli, make sure the npm package is installed and current.
If the user reports analyticscli: command not found, run the Dependency Refresh Protocol before any other action.
The package name is @analyticscli/cli; the installed binary name is analyticscli.
Do not search npm for analyticscli or analyticsscli.
Use this exact install/update command:
npm install -g @analyticscli/cli@preview
Then verify:
command -v analyticscli
analyticscli --help
If global npm installs are blocked on a VPS, use the bundled helper from the installed skill root:
bash skills/openclaw-growth-engineer/scripts/install-analyticscli-cli.sh
The 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.
It must also update common shell profile files and verify that a fresh shell can resolve analyticscli.
Only ask the user for help if both direct npm install and the bundled helper fail with a concrete permission, missing npm, or network error.
Delivery Modes
The CLI can write proposals to one or more targets:
deliveries.openclawChat.enabled = true: write .openclaw/chat/latest.md and .openclaw/chat/latest.json for OpenClaw to pick up in chatdeliveries.github.mode = "issue" with deliveries.github.autoCreate = true: create implementation-ready GitHub issuesdeliveries.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.Use issue mode when:
Use pull-request mode when:
Connector Model
Built-in channels:
analyticsrevenuecatsentryfeedbackanalyticscli feedback summary --format json
default cursor behavior: auto-bounded with --last 30d on first run, then --since on later runs unless the command already sets --since, --until, or --lastAdditional connectors:
sources.extra[]mode=file or mode=commandsignals[]issues[]items[]For iOS/macOS products, explicitly ask whether the user wants to connect the asc CLI and the related App Store Connect agent skill. ASC means App Store Connect, not analytics.
Never abbreviate this as just "analytics" in status messages, because it is easy to confuse with AnalyticsCLI.
Say "ASC / App Store Connect" when referring to asc, and "AnalyticsCLI baseline" when referring to the AnalyticsCLI project.
An AnalyticsCLI auth check, selected AnalyticsCLI project, or successful PM run does not prove that ASC is connected.
Only say ASC is connected after asc auth is configured, accessible App Store Connect apps are discovered or an explicit app filter is set, and a read-only ASC command/export has succeeded.
Frame ASC as an App Store Connect connector, not as a synonym for analytics. AnalyticsCLI remains the product analytics baseline; when ASC is configured, App Store Connect reports are fully used for discovery, downloads/units, redownloads, conversion, source traffic, app usage, purchases, subscriptions, ratings, reviews, release, build, TestFlight, and crash-total context when those surfaces are available.
Do not request ASC permissions for release management, TestFlight management, pricing changes, user management, or other write/admin workflows when the user only selected read-only App Store Connect reporting.
Reference the ASC skill pack as the canonical companion skills for asc: rorkai/app-store-connect-cli-skills (https://github.com/rorkai/app-store-connect-cli-skills).
Use it for asc command syntax, auth, pagination, ID resolution, and App Store Connect workflows; for read-only App Store Connect reporting prefer the least invasive skills such as asc-cli-usage and asc-id-resolver, not release/submission/signing skills.
Install or refresh it when the user selects ASC:
npx skills add rorkai/app-store-connect-cli-skills
ASC setup guidance:
Sales, required for App Analytics, Sales and Trends, downloads, revenue, and conversion context. Add Customer Support for App Store ratings/review text, Developer for builds/TestFlight/delivery status, and App Manager only when app metadata, pricing, or release settings are needed. Avoid Admin unless a one-off App Store Connect permission requires it.ASC_ISSUER_ID from the API keys page, copy ASC_KEY_ID from the key row or downloaded AuthKey_.p8 file name, download the .p8, open it, and paste the full file content into the local terminal wizard.ASC_KEY_ID, ASC_ISSUER_ID, and ASC_PRIVATE_KEY_PATH; the wizard can create the .p8 file from validated pasted terminal content. Never commit the .p8 private key.ASC_APP_ID upfront. After auth succeeds, ASC should use all accessible apps by default. Store an app filter only if the user explicitly asks to scope ASC to one app.asc smoke test before marking ASC connected. Do not force a target app selection; default ASC analysis covers all accessible apps.asc auth login when the local asc CLI supports keychain storage; otherwise use runtime env injection.RevenueCat setup guidance:
analyticscli, choose API version 2, and set Charts metrics, Customer information, and Project configuration permissions to read.Sentry setup guidance:
node scripts/export-sentry-summary.mjs.baseUrl, tokenEnv, token, org, environment, and optional comma-separated projects[]. Do not ask for a single global SENTRY_PROJECT; defer project scope to app/repo/release context unless the user provides known fixed projects for that account. Use this for Sentry Cloud plus self-hosted GlitchTip with separate tokens and projects.sources.sentry.accounts[] instead of overwriting one global account. Each account can define its own baseUrl, tokenEnv, org, projects[], and environment.org:read, project:read, and event:read.@sentry/mcp-server@latest when npx and SENTRY_AUTH_TOKEN are available, but do not ask for broader write scopes unless the user explicitly wants Sentry mutation workflows.Mobile-focused extra source examples:
firebase-crashlyticsapp-store-reviewsplay-consolestripeadaptysuperwallDo not list GlitchTip or ASC CLI as mobile extras in setup answers. GlitchTip belongs under the Sentry-compatible connector when it exposes the Sentry API; ASC CLI is the App Store Connect connector.
Feedback Rules
locationId for feedback collection pointsoriginName for where the feedback originated in the productonboarding/paywall, settings/restore, profile/delete_accountFeedback Source Memory
feedback source.sources.feedback.cursorMode = "auto_since_last_fetch" and the command has no explicit time flags, the CLI should:--last (default 30d)
later runs: append --since
--last / --since / --until in the command
or reset the stored cursor stateStartup Protocol
When the user says "start", "run", or "kick off" the skill:
1. Run the Dependency Refresh Protocol first. It must update this skill, the analyticscli-cli skill when available, and the @analyticscli/cli@preview npm package, then verify command -v analyticscli.
2. Prefer the CLI entrypoint:
- openclaw setup --config openclaw.config.json
- this should initialize config and install the shared AnalyticsCLI skills via the canonical AnalyticsCLI setup flow
3. Then run:
- openclaw start --config openclaw.config.json
4. In this monorepo, use the workspace dev entrypoint when openclaw is not installed globally:
- pnpm --filter @analyticscli/openclaw-cli dev start --repo-root
5. Run portable checks first when setup is incomplete:
- command -v analyticscli
- analyticscli projects list
- detect project.githubRepo from git remote when possible
- verify readable GitHub repo access when available so analytics findings can be mapped to code
- verify GitHub issue/PR write scopes only if GitHub delivery is enabled
- if the user already pasted an AnalyticsCLI token candidate, use it immediately for the check/start attempt instead of asking a follow-up token question first
6. If preflight fails, return only a concrete blocker checklist
7. If preflight passes, continue with openclaw run --config openclaw.config.json
When the user asks for analysis only:
When the user asks OpenClaw to implement:
Proposal Strategy
The CLI config should expose strategy.proposalMode:
mandatory: only strongest, clearly evidenced fixes and must-have requestsbalanced: default mix of necessary fixes and moderate product ideascreative: still evidence-led, but more willing to suggest bolder experiments or feature ideasUse the legacy bootstrap-and-copy runtime only when the standalone CLI is unavailable in the target workspace.
Output Rules
Required Secrets
GITHUB_TOKENhttps://github.com/settings/tokens/new; use public_repo for public repos, repo for private repo access, and workflow only for GitHub Actions workflow edits
- issue mode: add Issues: Read/Write only when issue creation is enabled
- pull-request mode: add Pull requests: Read/Write and Contents: Read/Write only when draft PR creation is enabled
ASC_KEY_ID, ASC_ISSUER_ID, ASC_PRIVATE_KEY_PATHANALYTICSCLI_ACCESS_TOKENANALYTICSCLI_READONLY_TOKEN; the readonly token is passed to analyticscli login --readonly-token or stored as ANALYTICSCLI_ACCESS_TOKEN
REVENUECAT_API_KEYSENTRY_AUTH_TOKENsecretEnv per sources.extra[]