lpm: Skill for Claude Code

.claude/skills/app-store-screenshots/SKILL.md

app-store-screenshots is a skill for Claude Code from gug007/lpm. It costs 160 tokens per session (1,969 once invoked), scanned A, original, MIT.

A build-and-capture workflow for creating App Store images from a mobile app in the iOS Simulator. It prepares demo data, captures selected screens on iPhone and iPad sizes, and places them into store images with headlines.

In plain words
What is it for?
Use it to build, capture, compose, and clean up App Store screenshots for an iOS app.
Why use it?
It avoids manually setting up app state, clicking through every screen, and exposing personal data in screenshots. Re-running it keeps store images aligned with app changes.

Skill for Claude Code

Written for Claude Code: argument-hint in frontmatter.

This is gug007/lpm's own configuration. It tells Claude Code how to work on lpm itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything lpm configures →

Reuse

Borrowing it

Nothing to install: this file belongs to gug007/lpm. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/gug007/lpm/main/.claude/skills/app-store-screenshots/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/gug007/lpm

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for app-store-screenshots

README.md
[![agentmods](https://agentmods.dev/badge/skills/gug007/lpm/app-store-screenshots/github.svg)](https://agentmods.dev/skills/gug007/lpm/app-store-screenshots)
Your own site
<a href="https://agentmods.dev/skills/gug007/lpm/app-store-screenshots"><img src="https://agentmods.dev/badge/skills/gug007/lpm/app-store-screenshots/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for app-store-screenshots

Your own site · 80×15
<a href="https://agentmods.dev/skills/gug007/lpm/app-store-screenshots"><img src="https://agentmods.dev/badge/skills/gug007/lpm/app-store-screenshots.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 160 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,969 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00160 $0.01969
Opus 5.5 $0.00064 $0.00788
Sonnet 5.5 $0.00032 $0.00394
Haiku 4.5 $0.00016 $0.00197

Measured 4d ago against content hash 492335407d8c, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

app-store-screenshots scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.

The scan reads SKILL.md. This mod also ships 5 executable files (scripts/build.js, scripts/compose.js, scripts/paths.js, …), listed below but not scanned — reading those needs a real analyzer, not pattern matching.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.claude/skills/app-store-screenshots/SKILL.md · 104 lines

How it starts

The opening of the file, as written. The whole thing — 104 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Makes the lpm Link App Store screenshots again whenever the app changes, with no clicking in the app: scripts/shots.js builds a screenshot copy of the app, launches it once per screen in the iOS Simulator, and composes the store images. The one manual step is opening the iPhone Duo (below).

node scripts/shots.js all          # build, prepare, capture, compose (~2.5 min)
node scripts/shots.js capture --only diff,stats --device iphone
node scripts/shots.js compose      # after editing captions only (seconds)
node scripts/shots.js cleanup      # clear status bars, shut down simulators it booted
  • build copies mobile/ to ~/Library/Caches/lpm-app-store-shots/src (the repo is never touched), applies the PATCHES in scripts/build.js, adds scripts/swift/*.swift, runs xcodegen and a Release simulator build. The copy shows Demo Mode as a real Mac: no purple Demo banner, the Mac is "MacBook Pro", the status line reads "Connected · on your network", a busier sample seed (ShotSeed.swift), and the storefront Claude session already finished and waiting on you.
  • prepare finds (or creates) the simulators named in shots.json, sets US English (the clock reads 9:41, not 09:41; reboots once), a full non-charging battery, light mode, installs the build and launches it once (the first launch after an install is slow).
  • capture launches the app with LPM_SHOT_ROUTE=<route> (ShotDriver.swift enters Demo Mode and pushes the route), waits, and saves simctl io screenshot at native size (the device's display when it has one).
  • compose (compose.swift) writes the store images without an alpha channel (App Store Connect rejects one) and a contact sheet per device.

Output: ~/Pictures/lpm-link-app-store/<version>/ with iphone-6.3/NN-name.png, ipad-13/NN-name.png, iphone-duo-outer/NN-name.png, iphone-duo-inner/NN-name.png, sheet-<device>.png and source/raw/. The version comes from mobile/ios/project.yml; --version <v> writes elsewhere (use it to try changes without replacing a set the user already has).

shots.json: devices (simulator name, folder, store size, screenRadius of the display in raw pixels, one number or top-left/top-right/bottom-right/bottom-left, cutout for the camera simctl leaves out as x/y/width/height in raw pixels, and for the Duo the pose and the display to capture) and shots in store order, each with name, route, title (\n for the line break, two lines at most), subtitle (one line, about 50 characters on iPhone), devices, an optional wait in seconds (default 4), and optional captions to give one device its own title/subtitle. Route steps, joined by >, are pushed in order: list · project:<name> · terminal:<project>/<terminalId> · changes:<project> · usage · stats · activity · automations · automation:<project>/<jobId>. Demo names: projects storefront, api-gateway, analytics, mobile-app, blog, …; terminal demo-storefront-claude; automation nightly-tests (mobile/ios/Sources/LpmMobile/DemoWorld.swift, DemoJobs).

iPhone Duo Apple lists two Duo sizes, closed (outer display, 1398x2034, display: primary) and open (inner display, 2007x2853, primary-1), without saying yet whether a listing needs both, so the skill makes both from one simulator: duo-closed has the iPhone set, duo-open the iPad set. The display of the other pose is dark. The Duo boots closed, every boot, so duo-closed captures on its own; nothing in simctl folds it, so duo-open waits (up to 5 minutes) printing "set it to Open, in portrait, in Device Hub" until the inner display shows a portrait picture. Run all in the background, and when that line appears open it with computer use: Device Hub (com.apple.dt.Devices) → iPhone Duo → bottom bar, the rightmost pose button ("Open"; the first click may only focus the window), then the rotate button left of the poses once, to portrait. Closed is the leftmost pose button. Then move the pointer off the device: hovering over it acts as a pointer in iOS, and the terminal shows a scroll bar in the shots. The outer display's hinge-side corners are nearly square and its camera is a circle top-right, which compose draws back in.

Read the full file on GitHub · 104 lines

Files

What ships with it

9 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 4d ago Changed · +30 lines · +19 tokens per session 492335407d8c
  2. 6d ago Changed 20e5e17104dd
  3. 15d ago First seen · 74 lines · 141 tokens per session scan A 64cf4cb9496f

Subscribe to this mod's changes

app-store-screenshots is a skill published in the GitHub repository gug007/lpm (145 stars, last pushed today), licensed MIT. It adds 160 tokens to every session and 1,969 once invoked, about $0.0006 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-09.