Agent skill
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.
Install this agent skill to your Project
npx add-skill https://github.com/iamhenry/ai-project-starter-kit/tree/main/.opencode/skills/astro-aso
SKILL.md
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.
| Param | Type | Required | Description |
|---|---|---|---|
| keyword | string | YES | Keyword to search |
| store | string | no | Filter by store (ios/mac) |
| appName | string | no | Filter by app name |
| appId | string | no | Filter 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.
| Param | Type | Required | Description |
|---|---|---|---|
| keyword | string | YES | Keyword to track |
| appName | string | no | Filter by app name |
| appId | string | no | Filter by app ID |
| daysBack | number | no | Days of history (default: 30) |
| store | string | no | Filter 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.
| Param | Type | Required | Description |
|---|---|---|---|
| appName | string | no* | App name to query |
| appId | string | no* | App ID to query |
| store | string | no | Filter 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.
| Param | Type | Required | Description |
|---|---|---|---|
| keyword | string | YES | Keyword to analyze |
| appName | string | no | Filter by app name |
| appId | string | no | Filter by app ID |
| period | string | no | week/month/year/all (default: month) |
| store | string | no | Filter 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.
| Param | Type | Required | Description |
|---|---|---|---|
| keyword | string | YES | Keyword to compare |
| date1 | string | YES | First date (ISO format) |
| date2 | string | YES | Second date (ISO format) |
| appName | string | no | Filter by app name |
| appId | string | no | Filter by app ID |
| store | string | no | Filter 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.
| Param | Type | Required | Description |
|---|---|---|---|
| appName | string | no* | App name to query |
| appId | string | no* | App ID to query |
| store | string | no | Filter by store |
| daysBack | number | no | Days 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.
| Param | Type | Required | Description |
|---|---|---|---|
| keyword | string | YES | Keyword to analyze |
| store | string | no | Filter by store |
| limit | number | no | Max 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.
| Param | Type | Required | Description |
|---|---|---|---|
| keyword | string | YES | Base keyword |
| appName | string | no | Filter by app name |
| appId | string | no | Filter by app ID |
| store | string | no | Filter by store |
| limit | number | no | Max results (default: 10) |
node .claude/skills/astro-aso/scripts/astro-query.mjs keyword_recommendations '{"keyword": "photo"}'
competitive_landscape
Analyze competitive position for an app.
| Param | Type | Required | Description |
|---|---|---|---|
| appName | string | no* | App name to analyze |
| appId | string | no* | App ID to analyze |
| store | string | no | Filter by store |
| limit | number | no | Max 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).
| Param | Type | Required | Description |
|---|---|---|---|
| appName | string | no* | App name to analyze |
| appId | string | no* | App ID to analyze |
| store | string | no | Filter by store |
| minPopularity | number | no | Min popularity score |
| maxDifficulty | number | no | Max 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.
| Param | Type | Required | Description |
|---|---|---|---|
| appName | string | no* | App name to analyze |
| appId | string | no* | App ID to analyze |
| daysBack | number | no | Days to analyze (default: 7) |
| threshold | number | no | Change threshold (default: 10) |
| store | string | no | Filter 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.
| Param | Type | Required | Description |
|---|---|---|---|
| keyword | string | YES | Keyword to predict |
| appName | string | no | Filter by app name |
| appId | string | no | Filter by app ID |
| store | string | no | Filter by store |
| daysForward | number | no | Days 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.
| Param | Type | Required | Description |
|---|---|---|---|
| store | string | no | Filter by store |
| maxDifficulty | number | no | Max difficulty (default: 30) |
| minPopularity | number | no | Min popularity (default: 20) |
| limit | number | no | Max 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.
| Param | Type | Required | Description |
|---|---|---|---|
| appName | string | no* | App name to analyze |
| appId | string | no* | App ID to analyze |
| store | string | no | Filter 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
-
List all tracked apps:
bashnode .claude/skills/astro-aso/scripts/astro-query.mjs list_apps '{}' -
Get keywords for a specific app:
bashnode .claude/skills/astro-aso/scripts/astro-query.mjs app_keywords '{"appName": "My App"}' -
Analyze keyword trends:
bashnode .claude/skills/astro-aso/scripts/astro-query.mjs keyword_trends '{"keyword": "productivity", "period": "month"}' -
Find opportunities:
bashnode .claude/skills/astro-aso/scripts/astro-query.mjs keyword_opportunities '{"appName": "My App", "maxDifficulty": 40}'
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
verification-gate
Reusable verification gate for completed work before commit or merge. Use when implementation is done and Claude must prove the task works, verify the main user flow, choose between browser-flow, browser-static, or non-browser validation, and return a PASS/FAIL/BLOCKED verdict with evidence. When browser verification is needed, rely on the agent-browser skill for browser actions, screenshots, and recordings.
osgrep
Semantic code search using natural language queries. Use when users ask "where is X implemented", "how does Y work", "find the logic for Z", or need to locate code by concept rather than exact text. Returns file paths with line numbers and code snippets.
napkin
Maintain a per-repo napkin file that tracks mistakes, corrections, and what works. Activates EVERY session, unconditionally. Read the napkin before doing anything. Write to it continuously as you work — not just at session boundaries. Log your own mistakes, not just user corrections. The napkin lives in the repo at `.opencode/napkin.md`.
dogfood
Systematically explore and test a web application to find bugs, UX issues, and other problems. Use when asked to "dogfood", "QA", "exploratory test", "find issues", "bug hunt", "test this app/site/platform", or review the quality of a web application. Produces a structured report with full reproduction evidence -- step-by-step screenshots, repro videos, and detailed repro steps for every issue -- so findings can be handed directly to the responsible teams.
tmux
Manage concurrent background processes using tmux. Use when spawning dev servers, running long-running tasks, monitoring multiple processes, or capturing output from background commands without blocking the main session.
viral-research
Viral content research and DNA extraction for Instagram Reels. Use this skill whenever you need to research what's performing in a niche on Instagram, find viral faceless Reels, download and analyze them frame-by-frame, identify patterns, and produce a structured research brief. Trigger whenever the user mentions viral content research, Instagram research, Reel analysis, content DNA, swipe file building, niche research, competitor analysis for social content, or wants to understand why certain content performs. Also trigger when the user wants to find content formats to adapt, study what's working in a niche, or build a research-backed content strategy. This skill is research-only — it does not generate or publish content.
Didn't find tool you were looking for?