ios-design-review
The facts
Its description
Visual design audit for iOS apps on real hardware. (gstack) Triggers: review the ios design; audit the iphone app visuals; design qa the ios app
The description the agent reads to decide when to use it. Phrases the author says should start it.
When it starts
The agent picks this when someone asks for a designer's-eye visual audit or design QA of an iOS app running on real hardware, i.e. reviewing screens for spacing, hierarchy, accessibility and AI-slop. The trigger phrases are about reviewing the iOS design, auditing the iPhone app visuals, or design-QA-ing the iOS app.
Things a person might say (the model's guesses)
- “review the ios design before we ship the next build”
- “audit the iPhone app visuals, the screens feel off”
- “do a design qa pass on the iOS app on my device”
A model's summary of when it is used.
Tools it may use, or may not
allowed-tools: Bash, Read, Glob, Grep, AskUserQuestion
Tools it may use while it runs without asking you first.
Starts other agents
1 line mentions starting other agents
Lines in the file that mention starting another agent. Found by matching words, so treat them as pointers.
Runs scripts
bin/gstack-skill-start, scripts/question-registry.ts, bin/gstack-question-preference, bin/gstack-question-log, bin/gstack-skill-end (first 5 of 7 lines)
Scripts the text names. Found by matching words, so treat them as pointers.
Stops for a person
6 lines stop to ask a person (first 5 linked)
Lines that stop and wait for a person before going on. Found by matching words, so treat them as pointers.
What it leads to
Other skills this one hands off to, calls, requires or offers instead, as a model read them.
What leads to it
- gstack hands off to this PROACTIVE all, or user names it gstack, line 250
Other skills that hand off to this one, call it, require it or offer it instead, as a model read them.
Licence
MIT, from LICENSE
The terms its author shares it under, which let it be shown here.
Other files in this skill (1) Close
The text
Most marks come from matching words in the file, so treat them as pointers.
<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly --> <!-- Regenerate: bun run gen:skill-docs -->
Raw lines 1 to 19Boilerplate, lines 20 to 76. The same text appears in 45 other files here. Close
Telemetry (run last)
After workflow completion, log telemetry with ONE command. OUTCOME is success/error/abort/unknown; SESSION_ID and TEL_START are the values the preamble's skill-start output echoed. It also drains the artifacts-sync queue (the former skill-end sync step — do not run gstack-brain-sync separately).
PLAN MODE EXCEPTION — ALWAYS RUN: This writes telemetry to $GSTACK_STATE_ROOT/analytics/, matching preamble analytics writes.
~/.claude/skills/gstack/bin/gstack-skill-end --skill "ios-design-review" --outcome OUTCOME \
--session-id "SESSION_ID" --tel-start "TEL_START" --used-browse USED_BROWSE \
--error-message "ERROR_MESSAGE" --failed-step "FAILED_STEP" 2>/dev/null || trueReplace OUTCOME and USED_BROWSE (yes/no) before running; substitute SESSION_ID/TEL_START from the skill-start echoes. ERROR_MESSAGE/FAILED_STEP are "" unless outcome is error. If the command is missing (stale install), skip telemetry — it never blocks the workflow.
iOS Design Review
Designer's-eye QA on a real iOS device. Finds visual inconsistency, spacing issues, hierarchy problems, AI-slop patterns, and accessibility gaps. Rates each dimension 0-10. Mirrors /plan-design-review's scoring rubric ported to iOS idioms.
Connection
Uses the running gstack-ios-qa-daemon. If no daemon is running, spawn one via the same flow as /ios-qa (Phase 0-2). Read-only by default — no mutating calls.
Dimensions + scoring
For each screen in the app, score 0-10 and explain what would push it to 10:
- Typography hierarchy. Display vs body vs caption sizes consistent with Apple HIG. SF Pro at correct dynamic-type scale. Line-height matches font size. No 12pt body anywhere.
- Spacing rhythm. 4pt or 8pt grid used consistently. No magic 17/23/31pt paddings. Safe-area insets respected.
- Color hierarchy. Primary action highest contrast; secondary muted; destructive distinct. Dark mode renders correctly. Contrast ratios meet WCAG AA for body text (4.5:1) and large text (3:1).
- Touch targets. Every interactive element >= 44x44pt. No "tappable text" smaller than 24pt.
- Loading + empty + error states. Each present and intentional. No blank screens during async work. Empty states explain what to do next.
- Accessibility. VoiceOver labels on every interactive element. Dynamic Type cap at XXL doesn't break layouts. Reduce Motion respected. Color-blindness palette tested (deuteranopia is most common).
- Animation discipline. No more than 2 simultaneous animations. Duration 200-300ms for UI feedback. Spring damping correct (not bouncy for serious flows).
- iOS idiom alignment. Uses native components (
NavigationStack,List,Form, system sheets) where appropriate. No re-invented navigation. No web-style hamburger menus on phone. - Information density. Per-screen content fits without horizontal scroll. Long screens have section anchors. Lists use real iOS list patterns (swipe-to-delete, contextual menus).
- AI-slop check. Generic stock layouts, "lorem ipsum" data left in, cargo-cult Material Design imported from Android, gradients that smell AI-generated.
Loop
POST /session/acquirewith capabilityobserve(read-only).- For each major screen (driven from a screen list the user provides, or auto-discovered via the accessibility tree):
GET /screenshotGET /elements- Apply the 10-dimension rubric.
- Record findings.
- Produce a markdown report with screenshots, scores per screen, and a "biggest leverage fix" suggestion per dimension.
- Use AskUserQuestion for any score < 7 — present the issue with recommended fix + tradeoff so the user can decide whether to address.
Output
Write a markdown report to $GSTACK_STATE_ROOT/projects/<slug>/ios-design-review-<date>.md, using the PROJECT_DIR this block prints:
GSTACK_STATE_ROOT=$(~/.claude/skills/gstack/bin/gstack-paths --get GSTACK_STATE_ROOT); : "${GSTACK_STATE_ROOT:?gstack-paths failed; reinstall with ./setup or /gstack-upgrade}"
SLUG=$(~/.claude/skills/gstack/bin/gstack-slug --get SLUG 2>/dev/null) && mkdir -p "$GSTACK_STATE_ROOT/projects/$SLUG" && echo "PROJECT_DIR: $GSTACK_STATE_ROOT/projects/$SLUG"Include the screenshots inline. The CEO/eng review skills can reference this report when planning UI changes.
Raw lines 157 to 170Failure modes
| Symptom | Action |
|---|---|
403 capability_insufficient from /screenshot | Daemon is in tailnet mode and token is below observe tier — owner must mint with --capability observe |
| Screenshot is black/blank | App may be in foreground but not rendering; AskUserQuestion to confirm the app is in the expected state |
| 10 screens, but ground-truth screen list said 12 | AskUserQuestion: were 2 hidden behind state we haven't triggered? |
From garrytan/gstack at 3f79d81, 2026-11-01. Skills read by DeepSeek V4.1 Flash on 2026-11-04. Summary and techniques by Claude Opus 5.5 on 2026-11-06.