rshankras/store-signals
Close the post-launch loop — turn a live app's App Store signals (reviews, analytics, sales, crashes, listing conversion) into a metric-tagged backlog for the next version, AND verify whether last cycle's changes moved the metric they promised to move. Read-only on App Store Connect; every change is surfaced and routed to another command, never auto-applied. Use before planning the next version, on a monthly cadence, or ~1-2 weeks after shipping to check if a change worked.
npx skills add https://github.com/rshankras/claude-code-apple-skills --skill store-signals
Pull what the *shipped* app is actually telling you and convert it into the next backlog — then
verify whether last cycle's bets paid off.
> This is the missing arc that turns build → ship into a loop:
> ship → MEASURE → DIAGNOSE → next PLAN → build → ship → measure again…
> The ledger (SIGNALS.md) is what makes it a loop and not a monthly report.
analytics-interpretation. That *interprets* a metric you hand it (is 14% D7 good?). Thisis the end-to-end operate loop: gather every signal → cluster → diagnose → **write a metric-tagged
backlog → close last cycle's hypotheses**. It *uses* analytics-interpretation's benchmarks.
on explicit OK, and routes the change to the right command (next-version, bugfix, metadata).
ROADMAP.md + rows in SIGNALS.md,consumed by /apple:next-version / /apple:release.
appId from .planning/STATE.md, else list_apps + confirm..planning/ context: STATE.md, APP.md, POSITIONING.md (job-to-be-done + guardrails)..planning/SIGNALS.md if present — the OPEN hypotheses from prior runs (each with a target metric,recorded baseline, and "check-after" date). See signals-ledger.md for the ledger + backlog formats.
SIGNALS.md → the OPEN rows to verify in step 5.list_reviews (recent, lowest-star first; flag unanswered), get_review for detail.get_analytics_report: retention, funnel/conversion, acquisition, impression→download.No report configured yet → setup_analytics_reports and note "retention/funnel lands next cycle."
get_sales_report: proceeds/units vs trailing 7/30-day.get_diagnostics (crash/hang signatures) + get_perf_metrics (launch, memory, energy).list_beta_feedback_crashes if in TestFlight.get_metadata to spot ASO conversion problems against current copy.frequency; attach magnitude (users / revenue / retention implicated). Weight by **frequency ×
revenue impact**, not by how loud one reviewer is.
conversion · crash-free rate · ASO conversion · proceeds); score impact × confidence ÷ effort.
Strategy filter: cross-check POSITIONING.md — on-strategy → backlog; off-strategy → list under
"Declined (why)" (never silently drop, never silently build). Carry the app's guardrails forward.
Small-N (new app): say so, lean on qualitative reviews, flag low confidence.
passed: compare the target metric now vs its baseline → WIN / REGRESSION / NEUTRAL. WIN → resolve;
REGRESSION → open a revert/rethink task; NEUTRAL → keep watching or retire.
ROADMAP.md and update SIGNALS.md(one row per hypothesis; formats in signals-ledger.md). Then output a ranked digest (top 3-5
"what's hurting most, why, the proposed move"), the loop-closure results, and a suggested next
command (/apple:next-version, /apple:bugfix for a hot crash, /apple:metadata for an ASO fix).
With no single app (or --portfolio): run steps 2-4 across every app in list_apps, then rank which
app to invest in next — biggest fixable revenue/retention/rating gap first (pairs with
portfolio-health-monitor). Output one line per app + the single highest-ROI move overall.
backlog written to ROADMAP.md + SIGNALS.md, with a routed next command.
not the roadmap.
Take rshankras/store-signals from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.