skills/adapty-cli/SKILL.md
Use when setting up or managing Adapty in-app subscriptions, paywalls, or placements via CLI.
npx skillsauth add adaptyteam/adapty-cli adapty-cliInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
npm install -g adapty
Or run without installing:
npx adapty@latest
Two modes: Setup (new users, quiz-driven) and Manage (existing users, direct commands).
The setup flow has 3 phases: Quiz → Create → Guide. Collect ALL information first, then create everything, then tell the user what to do next.
Before creating anything, detect the platform and then run an interactive quiz to collect all data.
CRITICAL: You MUST use the AskUserQuestion tool for EVERY quiz question. Do NOT print questions as regular text output. Each question must be a separate AskUserQuestion tool call so the user gets an interactive input prompt. After each answer, proceed to the next AskUserQuestion. This is non-negotiable.
Step 1: Detect platform — silently glob the codebase:
| Platform | Glob pattern |
| -------------- | ------------------------------------------------------- |
| iOS/Swift | **/*.swift, **/Package.swift, *.xcodeproj |
| Android/Kotlin | **/*.kt, **/build.gradle.kts |
| Flutter | **/pubspec.yaml (look for flutter: key) |
| React Native | **/react-native.config.js, **/app.json with RN deps |
| Unity | **/ProjectSettings/ProjectSettings.asset |
| Capacitor | **/capacitor.config.ts, **/capacitor.config.json |
| KMP | **/build.gradle.kts with kotlin("multiplatform") |
Step 2: Ask questions — use AskUserQuestion tool calls. Bundle related sub-questions into a single AskUserQuestion to minimize round-trips (e.g. app name + platforms + bundle ID = one question). Suggest defaults so the user can just confirm or pick a number. Aim for 2-3 total AskUserQuestion calls, not one per field.
Bundle into 2-3 AskUserQuestion calls:
AskUserQuestion 1: App + Products — bundle app info and product selection:
App name: [suggest from package.json, Info.plist, or AndroidManifest] Bundle ID: [suggest from detected config files] Platforms: 1. iOS only / 2. Android only / 3. Both
Products: 1. Monthly (
monthly) / 2. Annual (annual) / 3. Monthly + Annual / 4. Weekly (weekly) / 5. Lifetime (lifetime) / 6. CustomValid
--periodvalues:weekly,monthly,two_months,trimonthly,semiannual,annual,lifetime. Do NOT usemonth,year,yearly, or any other aliases — use these exact API values. Product name prefix: [suggest based on app name, e.g. "Premium"]
After this answer, you have enough to generate store product IDs. Pre-fill them using the convention <bundle_id>.<prefix>.<period> and include in the next question.
AskUserQuestion 2: Store IDs + Placements + Paywall approach — confirm generated IDs and collect remaining info:
Store product IDs — these MUST match the IDs you create (or will create) in App Store Connect / Google Play Console. Confirm or edit the suggested IDs:
- iOS:
com.example.app.premium.monthly/com.example.app.premium.annual- Android product ID:
premium_monthly/ base plan:monthly-base(if Android)If your iOS and Android IDs differ, enter them separately (e.g. "iOS: com.app.monthly, Android: monthly_sub / base plan: monthly-bp"). If you haven't created store products yet, these suggestions work — just use the same IDs when you set them up in App Store Connect / Google Play Console later.
Placements: 1. Onboarding (
onboarding) / 2. Settings (settings) / 3. Feature gate (feature_gate) / 4. All of the above / 5. CustomPaywall UI: 1. Paywall Builder (visual editor, no UI code) / 2. Custom (your own UI)
After collecting all answers, confirm the plan with the user in a summary table, then create everything sequentially. Do NOT ask questions during creation — use collected data.
IMPORTANT: Products and paywalls cannot be fully edited after creation (period, store product IDs, base plan IDs are permanent). This is why Phase 1 confirmation is critical.
Execution order (each step uses output from previous):
adapty auth login (if not already authenticated, check with adapty auth whoami)adapty apps create --title "..." --platform ... --apple-bundle-id/--google-bundle-id ... → save output: id (use as --app), sdk_key (use in SDK), plus the default access level id and sdk_id printed after creationadapty products create --app <APP_ID> --title "..." --period ... --access-level-id <DEFAULT_AL_ID> --ios-product-id/--android-product-id ... [--android-base-plan-id ...] → save product IDs. Android subscriptions (non-lifetime) require --android-base-plan-id.adapty paywalls create --app <APP_ID> --title "..." --product-id <ID1> --product-id <ID2> ... → save paywall IDadapty placements create --app <APP_ID> --title "..." --developer-id ... --paywall-id <PAYWALL_ID>Print progress as you go (e.g. "Created app ✓", "Created product 'Monthly' ✓"). If a step fails, stop and ask the user how to proceed — don't retry blindly.
After all entities are created, print a brief summary with key values:
Dashboard: https://app.adapty.io
Your SDK key: <sdk_key from apps create>
Placement developer IDs: <list of developer_ids>
Access level SDK ID: <sdk_id from access level, e.g. "premium">
Then use AskUserQuestion to ask what they want to do next. Repeat this after each sub-guide until the user says they're done. Build the options dynamically based on their setup answers:
What do you want to do next?
- Integrate SDK into the codebase
- Configure app/products on Apple side (only if iOS)
- Configure app/products on Google side (only if Android)
- Design paywall in Paywall Builder (only if they chose Paywall Builder)
- I'm done for now
Option 1: SDK Integration — print the quickstart link for their platform + paywall approach, plus the key values above. Use Context7 MCP for latest SDK code examples:
resolve-library-id: "adaptyteam/adapty-docs"
query-docs: topic="<platform> <feature>"
Paywall Builder quickstarts:
https://adapty.io/docs/ios-quickstart-paywalls.mdhttps://adapty.io/docs/android-quickstart-paywalls.mdhttps://adapty.io/docs/flutter-quickstart-paywalls.mdhttps://adapty.io/docs/react-native-quickstart-paywalls.mdCustom paywall quickstarts:
https://adapty.io/docs/ios-quickstart-manual.mdhttps://adapty.io/docs/android-quickstart-manual.mdhttps://adapty.io/docs/flutter-quickstart-manual.mdhttps://adapty.io/docs/react-native-quickstart-manual.mdOption 2: Apple side — print checklist:
<list ios_product_ids>https://adapty.io/docs/app-store-connection-configuration.mdhttps://adapty.io/docs/enable-app-store-server-notifications.mdOption 3: Google side — print checklist:
<list android_product_ids>, base plans: <list base_plan_ids>https://adapty.io/docs/google-play-store-connection-configuration.mdhttps://adapty.io/docs/enable-real-time-developer-notifications-rtdn.mdOption 4: Paywall Builder — link to dashboard paywalls section and guide: https://adapty.io/docs/adapty-paywall-builder.md
After showing any option's guide, loop back — ask "What's next?" again with the same AskUserQuestion (minus completed items if user indicates they're done with a step). Stop only when user picks "I'm done."
For users who already have an Adapty app and want to manage entities, see references/cli-commands.md for the full command reference.
Key notes:
apps) require --app <APP_ID> (UUID)apps get <app_id> and apps update <app_id> use a positional arg (no --app flag)get/update commands use a positional arg for the resource ID plus --app flaglist commands support --page and --page-size--json--title (not --name) for all entities--apple-bundle-id / --google-bundle-id (not ios/android)developer_id. Links to one paywall per audience.sdk_id.https://adapty.io/docs/llms.txthttps://adapty.io/docs/<slug>.mdadaptyteam/adapty-docstools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.