agentleFS
hristo2612hristo2612/aso-cli/skills/aso/SKILL.md

aso

Skill13 starsChanged 52 days agoMITView on GitHub

Entry point and router for App Store Optimization (ASO) work on an iOS/macOS app using the `aso` CLI. Start here whenever a request is broad or ambiguous, such as "improve my ASO", "help with my App Store listing", "why isn't my app ranking", "do a full ASO pass", or just "ASO for my app", even if the user doesn't name a specific task. Checks the CLI is installed and signed in, explains Apple's search-indexing rules that every other ASO skill assumes you already know, then routes to the right specialized skill (aso-keyword-research, aso-metadata, aso-competitors, aso-audit, aso-tracking, aso-localization, aso-conversion). Skip straight to one of those instead when the request already names a specific job, like "write my subtitle" or "find my competitors".

  • Pipes a download into a shell
  • Installs packages

32 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use popups, free-tools and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • CesarjoquinSkill

    popups

    When the user wants to create or optimize popups, modals, overlays, slide-ins, or banners for conversion purposes. Also use when the user mentions "exit intent," "popup conversions," "modal optimization," "lead capture popup," "email popup," "announcement banner," "overlay," "collect emails with a popup," "exit popup," "scroll trigger," "sticky bar," or "notification bar." Use this for any overlay or interrupt-style conversion element. For forms outside of popups, see cro. For general page conversion optimization, see cro.

    Also in 22 projects that use this

  • CesarjoquinSkill

    free-tools

    When the user wants to plan, evaluate, or build a free tool for marketing purposes — lead generation, SEO value, or brand awareness. Also use when the user mentions "engineering as marketing," "free tool," "marketing tool," "calculator," "generator," "interactive tool," "lead gen tool," "build a tool for leads," "free resource," "ROI calculator," "grader tool," "audit tool," "should I build a free tool," or "tools for lead gen." Use this whenever someone wants to build something useful and give it away to attract leads or earn links. For downloadable content lead magnets (ebooks, checklists, templates), see lead-magnets.

    Also in 23 projects that use this

  • coreyhaines31Skill

    marketing-council

    When the user wants multiple expert perspectives on a marketing question — a simulated board of advisors staffed by legendary marketers (Seth Godin, David Ogilvy, Eugene Schwartz, April Dunford, Rory Sutherland, Alex Hormozi, Byron Sharp, and more). Also use when the user mentions 'marketing council,' 'board of advisors,' 'advisory board,' 'what would Seth Godin say,' 'what would Ogilvy think,' 'channel Hormozi,' 'get multiple perspectives,' 'debate this,' 'have the council review,' 'marketing mentors,' or asks how a famous marketer would approach their problem. The council gives each advisor's take through their documented frameworks, surfaces where they disagree, and synthesizes a recommendation. For executing the winning direction, hand off to positioning, offers, copywriting, ads, or the relevant skill.

    Also in 16 projects that use this

  • roerohanSkill

    emails

    When the user wants to create or optimize an email sequence, drip campaign, automated email flow, or lifecycle email program. Also use when the user mentions "email sequence," "drip campaign," "nurture sequence," "onboarding emails," "welcome sequence," "re-engagement emails," "email automation," "lifecycle emails," "trigger-based emails," "email funnel," "email workflow," "what emails should I send," "welcome series," or "email cadence." Use this for any multi-email automated flow. For cold outreach emails, see cold-email. For in-app onboarding, see onboarding.

    Also in 19 projects that use this

  • ukunal91appSkill

    community-marketing

    Build and leverage online communities to drive product growth and brand loyalty. Use when the user wants to create a community strategy, grow a Discord or Slack community, manage a forum or subreddit, build brand advocates, increase word-of-mouth, drive community-led growth, engage users post-signup, or turn customers into evangelists. Trigger phrases: "build a community," "community strategy," "Discord community," "Slack community," "community-led growth," "brand advocates," "user community," "forum strategy," "community engagement," "grow our community," "ambassador program," "community flywheel.

    Also in 23 projects that use this

  • roerohanSkill

    prospecting

    When the user wants to find, qualify, and build a list of prospects to reach out to — across B2B SaaS, general B2B, or local small businesses. Also use when the user mentions "prospecting," "build a prospect list," "find prospects," "find leads," "lead gen list," "find SaaS companies that," "find B2B companies," "find local businesses," "ICP-fit accounts," "who should we go after," "outbound list," "target account list," "find clients near me," "businesses without websites," "prospect research," "qualified leads," "find my first customers," "early adopters," "design partners," "beta users," or "who has this problem." Use this for the list-building and qualification phase. For writing the outbound copy after the list is built, see cold-email. For deep competitive research on specific accounts, see competitor-profiling.

    Also in 16 projects that use this

  • +6 more from Cesarjoquin

The file

We split this skill into the rules it gives an agent

4 rules. 0 are common, 0 are distinctive, and 4 are very specific to this project.

  • 0

    Common

    Most of the 29 edited versions we read keep these.

  • 0

    Distinctive

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Run once per session before any other aso command:

    line 12
  2. Very specific:

    If aso: command not found: install it with npm i -g hristo2612/aso-cli (needs Node.js 22.13+, also published as aso-kit on npm), or curl …

    line 18
  3. Very specific:

    If aso status shows no active session: run aso setup (interactive first-run, Apple ID, app, default country, then triggers login) or aso …

    line 19
  4. Very specific:

    If a session exists but looks stale, aso auto-retries login once when credentials are in the Keychain.

    line 23

“Common” is measured: kept by at least 6 in 10 of the 29 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

ASO Router

Entry point for all ASO work with the aso CLI (hristo2612/aso-cli on GitHub, aso-kit on npm). Do preflight, know the core facts, then route.

Preflight

Run once per session before any other aso command:

aso status
  • If aso: command not found: install it with npm i -g hristo2612/aso-cli (needs Node.js 22.13+, also published as aso-kit on npm), or curl -fsSL https://raw.githubusercontent.com/hristo2612/aso-cli/main/install.sh | bash.
  • If aso status shows no active session: run aso setup (interactive first-run, Apple ID, app, default country, then triggers login) or aso login if already configured. Both open Chrome and handle 2FA/Keychain in the user's own terminal.
  • Never ask the user for their Apple ID password in chat. Credentials go in macOS Keychain via aso setup/aso login, run directly by the user in their terminal. If a command needs interactive auth, tell the user to run it themselves and report back.
  • Everything except popularity works without a session (search, ranks, difficulty, app lookup, lint). If there's no session and the user only needs those, proceed: popularity will just come back null.
  • aso login finds the right Apple Ads org and a linked app on its own; you no longer need to look up or set aso config orgId as a normal step. aso status prints a next field naming the exact step to take when something's missing, read it before guessing.
  • If a session exists but looks stale, aso auto-retries login once when credentials are in the Keychain; don't loop on it manually.

If setup gets stuck

Symptom / error codeFix
NO_APPLE_ADS_ACCOUNTNo Apple Search Ads account yet. User signs up free at searchads.apple.com; choose United States if their own country isn't offered.
NO_LINKED_APPSApple Ads isn't linked to App Store Connect. In Apple Ads: account menu > Settings > Link Accounts.
AUTH_REQUIREDSession missing or expired: run aso login.
2FA code not auto-filledGrant Accessibility permission to the terminal app (System Settings > Privacy & Security > Accessibility), or type the code directly into the Chrome window instead.
Chrome not foundInstall Chrome, or run npx playwright install chromium.
Popularity comes back 5 for every keywordNormal Apple floor for low/unknown-volume terms, not a broken session or a bug.

Core Apple search facts (know these before touching metadata)

  • Three indexed fields per locale: title (30 chars), subtitle (30 chars), keywords field (100 BYTES, not characters). Apple tokenizes all three and combines tokens into searchable phrases, a word in the title and a word in the subtitle can match together as a compound query.
  • The keywords field's 100-byte limit bites non-Latin locales hardest: CJK and Arabic characters cost 2-3 bytes each in UTF-8, so a locale like ja, zh, or ar effectively gets far fewer keyword slots than an ASCII locale for the same 100 bytes. Budget by bytes, not by how many characters look like they'd fit. See aso-localization.
  • Never repeat a word across fields. A word already indexed via the title gains nothing by also appearing in the subtitle or keywords field: it only burns a character budget that could hold a new term.
  • Plurals are mostly redundant: Apple stems automatically, so "camera" already covers most "cameras" searches. Prefer the singular unless the plural has genuinely different search intent (e.g. "glass" vs "glasses").
  • The keywords field is comma-separated with no spaces after commas: every space is a wasted character.
  • The description is NOT indexed for search on iOS. Apple's algorithm ignores it for ranking; treat it purely as a conversion/readability lever, not a keyword-placement opportunity (see aso-conversion).
  • Developer name and in-app purchase display names are also indexed text, on top of the three per-locale fields above.
  • Category placement affects relevance and category-chart ranking, not just discovery structure: pick the category your target keywords actually belong to, don't chase a bigger but less relevant one.
  • Cross-locale indexing: a storefront indexes more than its "native" locale. The US store, for example, also indexes locales like es-MX, fr-CA, pt-BR, zh-Hans/Hant, ja and the other English variants. Filling extra locales you're entitled to multiplies your effective keyword budget for that storefront. See aso-localization.
  • Ratings, reviews, and conversion rate aren't indexed text either, but they're widely believed to feed back into ranking indirectly (an app that converts and retains better tends to rank better over time), separate from the direct textual indexing above. See aso-audit and aso-conversion.

Data caveats

  • Popularity floor: Apple's Search Ads popularity score (5-100) floors low/unknown-volume keywords at 5. aso keywords flags this as popularityFloor: true. Treat a floored 5 as "no reliable signal", not "dead keyword", it can still be a real long-tail term.
  • Difficulty is the ASOManiac model, not an Apple number: calibrated against third-party difficulty scores, it weighs competition from the top-10 ranking apps' ratings counts (55%), demand from popularity plus autocomplete signal (10%), and market quality from the top-10 apps' average rating (35%). Scored 0-100, higher is harder. Use it to compare keywords relative to each other and to the app's own authority, not as an absolute probability of ranking.
  • opportunity = popularity × (100 − difficulty) / 100. It's a sort key for prioritizing candidates, not a traffic forecast.
  • rank comes from Apple's own store search order (about 250 deep, unpersonalized iPhone results). null means not in the top 250 today, not "unranked forever". Users' own devices can show slightly different, personalized orders.
  • Each aso keywords item also carries brand (true when the term is essentially the #1 ranking app's own publisher/brand name, someone else's brand: don't shortlist it) and confidence (high/medium/low, how much to trust that term's popularity/difficulty numbers). --min-popularity <n> and --max-difficulty <n> pre-filter a batch; filtered terms come back under filteredOut with a reason, worth a glance before assuming they're all noise.
  • Popularity needs an Apple Ads session; everything else works logged out.

The CLI does not upload metadata

aso reads and measures; it never writes to App Store Connect. To ship a title/subtitle/keywords change, use fastlane deliver (a fastlane/metadata/<locale>/{name.txt,subtitle.txt,keywords.txt} tree) or paste manually into App Store Connect. Never push or upload metadata without the user's explicit approval of the exact new text. See aso-metadata for detail.

Routing

User wants...Route to
Find/brainstorm/expand keywords, seed → shortlistaso-keyword-research
Write or fix title/subtitle/keywords field for a localeaso-metadata
Compare against competitors, find keyword gapsaso-competitors
A health check / report card on the whole listingaso-audit
Set up or review rank tracking over timeaso-tracking
Pick new markets, localize keywords, exploit cross-locale indexingaso-localization
Icon, screenshots, preview video, Custom Product Pages, Product Page Optimization, In-App Eventsaso-conversion

Most requests map to exactly one skill. For a full "optimize everything" request, run in this order: aso-audit (find the gaps) → aso-keyword-research (fill them) → aso-metadata (draft and validate) → aso-conversion (fix conversion assets) → aso-tracking (measure). Confirm the app ID and country (-c, default from aso config) before running anything if either is ambiguous.

Google Play

aso is Apple-only: it has no Google Play data or commands. If asked about a Play listing, say so and give the mental model only; see the Google Play appendix in aso-audit.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.