astro-aso

Query local Astro Mac app database for ASO insights. Use when the user asks about keyword rankings, historical ranking data, trend analysis, competitor keywords, app ratings, keyword opportunities, or ASO health metrics.

$ 설치

git clone https://github.com/iamhenry/ai-project-starter-kit /tmp/ai-project-starter-kit && cp -r /tmp/ai-project-starter-kit/.claude/skills/astro-aso ~/.claude/skills/ai-project-starter-kit

// tip: Run this command in your terminal to install the skill


name: astro-aso description: Query local Astro Mac app database for ASO insights. Use when the user asks about keyword rankings, historical ranking data, trend analysis, competitor keywords, app ratings, keyword opportunities, or ASO health metrics.

Astro ASO Skill

Query your local Astro Mac app database for App Store Optimization insights.

When to Use

Invoke this skill when the user asks about:

  • Keyword rankings and tracking
  • Historical ranking data and trends
  • Competitor analysis for keywords
  • App ratings and reviews data
  • Keyword opportunities and recommendations
  • ASO health analysis
  • Ranking predictions and anomalies

Prerequisites

  • Astro Mac app installed: https://astro.app
  • App must have data (tracked apps/keywords)

Usage

Run commands via the bundled script:

node .claude/skills/astro-aso/scripts/astro-query.mjs <command> '<json-params>'

Available Commands

list_apps

List all tracked apps in Astro.

node .claude/skills/astro-aso/scripts/astro-query.mjs list_apps '{}'

search_rankings

Search keyword rankings for apps.

ParamTypeRequiredDescription
keywordstringYESKeyword to search
storestringnoFilter by store (ios/mac)
appNamestringnoFilter by app name
appIdstringnoFilter by app ID
node .claude/skills/astro-aso/scripts/astro-query.mjs search_rankings '{"keyword": "photo editor"}'

historical_rankings

Get historical ranking data for a keyword.

ParamTypeRequiredDescription
keywordstringYESKeyword to track
appNamestringnoFilter by app name
appIdstringnoFilter by app ID
daysBacknumbernoDays of history (default: 30)
storestringnoFilter by store
node .claude/skills/astro-aso/scripts/astro-query.mjs historical_rankings '{"keyword": "photo editor", "daysBack": 90}'

app_keywords

Get all tracked keywords for an app.

ParamTypeRequiredDescription
appNamestringno*App name to query
appIdstringno*App ID to query
storestringnoFilter by store

*One of appName or appId required

node .claude/skills/astro-aso/scripts/astro-query.mjs app_keywords '{"appName": "My App"}'

keyword_trends

Analyze keyword ranking trends over time.

ParamTypeRequiredDescription
keywordstringYESKeyword to analyze
appNamestringnoFilter by app name
appIdstringnoFilter by app ID
periodstringnoweek/month/year/all (default: month)
storestringnoFilter by store
node .claude/skills/astro-aso/scripts/astro-query.mjs keyword_trends '{"keyword": "photo editor", "period": "month"}'

compare_rankings

Compare rankings between two dates.

ParamTypeRequiredDescription
keywordstringYESKeyword to compare
date1stringYESFirst date (ISO format)
date2stringYESSecond date (ISO format)
appNamestringnoFilter by app name
appIdstringnoFilter by app ID
storestringnoFilter by store
node .claude/skills/astro-aso/scripts/astro-query.mjs compare_rankings '{"keyword": "photo editor", "date1": "2024-01-01", "date2": "2024-02-01"}'

app_ratings

Get app ratings and review data.

ParamTypeRequiredDescription
appNamestringno*App name to query
appIdstringno*App ID to query
storestringnoFilter by store
daysBacknumbernoDays of history (default: 30)

*One of appName or appId required

node .claude/skills/astro-aso/scripts/astro-query.mjs app_ratings '{"appName": "My App", "daysBack": 60}'

keyword_competitors

Find competing apps ranking for a keyword.

ParamTypeRequiredDescription
keywordstringYESKeyword to analyze
storestringnoFilter by store
limitnumbernoMax results (default: 10)
node .claude/skills/astro-aso/scripts/astro-query.mjs keyword_competitors '{"keyword": "photo editor", "limit": 20}'

keyword_recommendations

Get recommended keywords based on existing ones.

ParamTypeRequiredDescription
keywordstringYESBase keyword
appNamestringnoFilter by app name
appIdstringnoFilter by app ID
storestringnoFilter by store
limitnumbernoMax results (default: 10)
node .claude/skills/astro-aso/scripts/astro-query.mjs keyword_recommendations '{"keyword": "photo"}'

competitive_landscape

Analyze competitive position for an app.

ParamTypeRequiredDescription
appNamestringno*App name to analyze
appIdstringno*App ID to analyze
storestringnoFilter by store
limitnumbernoMax competitors (default: 10)

*One of appName or appId required

node .claude/skills/astro-aso/scripts/astro-query.mjs competitive_landscape '{"appName": "My App"}'

keyword_opportunities

Find keyword opportunities (low difficulty, high popularity).

ParamTypeRequiredDescription
appNamestringno*App name to analyze
appIdstringno*App ID to analyze
storestringnoFilter by store
minPopularitynumbernoMin popularity score
maxDifficultynumbernoMax difficulty score

*One of appName or appId required

node .claude/skills/astro-aso/scripts/astro-query.mjs keyword_opportunities '{"appName": "My App", "maxDifficulty": 30}'

ranking_anomalies

Detect sudden ranking changes and anomalies.

ParamTypeRequiredDescription
appNamestringno*App name to analyze
appIdstringno*App ID to analyze
daysBacknumbernoDays to analyze (default: 7)
thresholdnumbernoChange threshold (default: 10)
storestringnoFilter by store

*One of appName or appId required

node .claude/skills/astro-aso/scripts/astro-query.mjs ranking_anomalies '{"appName": "My App", "threshold": 15}'

ranking_predictions

Predict future rankings based on trends.

ParamTypeRequiredDescription
keywordstringYESKeyword to predict
appNamestringnoFilter by app name
appIdstringnoFilter by app ID
storestringnoFilter by store
daysForwardnumbernoDays to predict (default: 7)
node .claude/skills/astro-aso/scripts/astro-query.mjs ranking_predictions '{"keyword": "photo editor", "daysForward": 14}'

low_competition_keywords

Find keywords with low competition.

ParamTypeRequiredDescription
storestringnoFilter by store
maxDifficultynumbernoMax difficulty (default: 30)
minPopularitynumbernoMin popularity (default: 20)
limitnumbernoMax results (default: 20)
node .claude/skills/astro-aso/scripts/astro-query.mjs low_competition_keywords '{"maxDifficulty": 25, "minPopularity": 30}'

analyze_aso_health

Get overall ASO health analysis for an app.

ParamTypeRequiredDescription
appNamestringno*App name to analyze
appIdstringno*App ID to analyze
storestringnoFilter by store

*One of appName or appId required

node .claude/skills/astro-aso/scripts/astro-query.mjs analyze_aso_health '{"appName": "My App"}'

Output Format

All commands return JSON with either:

  • { "success": true, "data": ... } on success
  • { "success": false, "error": "..." } on failure

Example Workflow

  1. List all tracked apps:

    node .claude/skills/astro-aso/scripts/astro-query.mjs list_apps '{}'
    
  2. Get keywords for a specific app:

    node .claude/skills/astro-aso/scripts/astro-query.mjs app_keywords '{"appName": "My App"}'
    
  3. Analyze keyword trends:

    node .claude/skills/astro-aso/scripts/astro-query.mjs keyword_trends '{"keyword": "productivity", "period": "month"}'
    
  4. Find opportunities:

    node .claude/skills/astro-aso/scripts/astro-query.mjs keyword_opportunities '{"appName": "My App", "maxDifficulty": 40}'