This is a submission for the GitHub Copilot CLI Challenge
What I Built
APP Release Copilot — a chat-style CLI that generates AI-powered App Store Optimization (ASO) metadata for iOS apps, powered by the GitHub Copilot SDK.
As an indie iOS developer, I've always found writing App Store metadata tedious and time-consuming. Crafting the perfect title within 30 characters, squeezing meaningful keywords into 100 characters, and writing a description that hooks users in the first 3 lines — it's a skill of its own. I wanted a tool that brings AI directly into my terminal workflow, right where I already spend most of my time.
APP Release Copilot connects to GitHub Copilot through the @github/copilot-sdk, integrates with a custom MCP server for real-time keyword traffic and difficulty scoring, and outputs metadata in your terminal.
Key Features
-
Slash-command interface —
/title,/subtitle,/desc,/keywords,/release,/promo,/full - Natural language refinement — type "make it shorter" or "focus on productivity" to iterate
- Live keyword scoring — MCP-powered tool calls analyze keyword traffic & difficulty in real-time
- Character limit awareness — color-coded counts (green ≤80%, yellow ≤100%, red over limit)
- Dynamic model selection — pick from all available Copilot models at startup (GPT-4o, Claude Sonnet, o-series)
-
App Store competitor import —
/urlfetches any competitor's App Store listing for context -
App icon & feature graphic generation —
/iconand/featureproduce store-ready images via OpenAI or Gemini, with 16 style presets adapted from SnapAI - Beautiful TUI — gradient ASCII logo, box-drawn panels, progress bars, model badges
Demo
GitHub Repo: github.com/Csaba8472/app-release-copilot
Typical Workflow
❯ /title # Generate 5 title options (30 chars each)
❯ more like option 3 # Refine with natural language
❯ /keywords # Generate keyword string with live MCP scoring
❯ /desc # Full App Store description
Each generation shows real-time spinner states — "📊 Analyzing keyword scores..." when MCP tools fire, "✨ Writing title options... (12 lines)" as content streams in.
Export Output
{
"configVersion": 0,
"apple": {
"info": {
"en-US": {
"title": "foodie - ai cal food tracker",
"subtitle": "Snap, Track & Eat Smarter",
"description": "Transform your meals into insights...",
"keywords": ["calorie,tracker,food,photo,ai,nutrition,diet,meal,snap,health"],
"releaseNotes": "What's new in foodie 2.0...",
"promoText": "Track calories instantly — just snap a photo!"
}
}
}
}
My Experience with GitHub Copilot CLI
This project is deeply intertwined with GitHub Copilot at two levels:
1. Built ON GitHub Copilot
APP Release Copilot isn't just built with Copilot — it runs on it. The entire AI backbone uses the @github/copilot-sdk:
-
CopilotClientmanages authentication, sessions, and model lifecycle -
Streaming sessions with event-driven architecture (
assistant.message_delta,tool.execution_start,session.idle) -
MCP server integration — the SDK connects to my custom MCP server at
aso-mcp.vercel.appfor real-time keyword traffic/difficulty scoring via theget_keyword_scorestool -
Quota tracking — usage snapshots from
assistant.usageevents update the status bar in real-time -
Dynamic model listing —
client.listModels()fetches available models at startup, so users always see what's currently offered
The system prompt is a carefully crafted ASO expert persona with character limits baked in, so the AI natively respects the 30-char title limit, 100-char keyword budget, etc.
2. Built WITH GitHub Copilot
During development, GitHub Copilot was my constant pair programmer:
-
Architecture decisions — Copilot helped design the event-driven streaming architecture, suggesting the
SessionEventswitch-case pattern for handling deltas, tool executions, and quota snapshots - ASO domain expertise — the system prompt itself was co-authored with Copilot, refining App Store best practices like "use singular keyword forms (Apple matches plurals automatically)" and "don't repeat title words in keywords"
- Terminal UI — the gradient ASCII logo, box-drawing helpers, and progress bar utilities were iterated on with Copilot's suggestions
-
Edge cases — the double Ctrl+C exit pattern,
ExitPromptErrorhandling for every@inquirer/promptscall, and graceful cleanup sequences all came together faster with Copilot's awareness of Node.js patterns
What Made the Difference
The biggest impact was on the MCP integration. Wiring up the Copilot SDK's MCP server support — where the AI autonomously decides to call get_keyword_scores during keyword generation — would have taken much longer without Copilot understanding the SDK's patterns. The streaming event model, in particular, has nuances (when to resolve the Promise, how to track tool completions) that Copilot navigated with me step by step.
The result is a tool I actually use for my own apps.
Tech Stack: TypeScript, @github/copilot-sdk, @inquirer/prompts, Commander.js, Chalk, Ora, Clipboardy
License: MIT
Top comments (0)