Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add tmj-90/gaffer --skill mobile-uigit clone --depth 1 https://github.com/tmj-90/gafferWrote 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.
[](https://agentmods.dev/skills/tmj-90/gaffer/mobile-ui)<a href="https://agentmods.dev/skills/tmj-90/gaffer/mobile-ui"><img src="https://agentmods.dev/badge/skills/tmj-90/gaffer/mobile-ui/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.
<a href="https://agentmods.dev/skills/tmj-90/gaffer/mobile-ui"><img src="https://agentmods.dev/badge/skills/tmj-90/gaffer/mobile-ui.svg" alt="Reviewed on agentmods" width="80" height="20"></a>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.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00125 | $0.01992 |
| Opus 5.5 | $0.00050 | $0.00797 |
| Sonnet 5.5 | $0.00025 | $0.00398 |
| Haiku 4.5 | $0.00013 | $0.00199 |
Grade A, and why
mobile-ui 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 21d ago.
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.
How it starts
The opening of the file, as written. The whole thing — 119 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Build store-credible native-feel mobile UI
A mobile screen is judged against the platform: Apple's Human Interface Guidelines on iOS, Material 3 and Android's system behaviour on Android. It must respect insets and system gestures, scale with the user's text size, speak to VoiceOver and TalkBack, stay smooth, and clear the store reviewers' checklist. Build to that bar, and change only what the ticket asks: a visual rework does not alter navigation routes, state, business or game logic. A structural idea ("this should be a sheet") goes in the evidence as a proposal, not into the diff.
Steps
- Read the set-up. Call
search_lore; readBRAND.md/tokens (thedesign-systemskill) and a sibling screen. Confirm the stack and versions: React Native (0.82+ runs only the New Architecture), Expo SDK, navigation library (React Navigation / Expo Router), animation (Reanimated), list (FlatList/FlashList), or Capacitor with a web UI. Extend the existing design language; do not re-pitch it. - Insets and edge-to-edge. Android apps targeting Android 15+ draw edge-to-edge,
and targeting Android 16 removes the opt-out. Use
react-native-safe-area-context(SafeAreaProvider+useSafeAreaInsetsor itsSafeAreaView; React Native's ownSafeAreaViewis deprecated) and apply insets per edge — backgrounds run under the bars, content and touch targets do not. Capacitor/web:viewport-fit=coverplusenv(safe-area-inset-*). Never hardcode status-bar or home-indicator heights. - Navigation and back. Use the navigator's native stack and platform transitions;
iOS swipe-back works on every pushed screen; Android back (gesture, button, predictive
back) goes through the navigator or
BackHandler, closes sheets and dialogs first, and never exits the app from a nested screen. Unsaved-changes guards use the navigator's prevent-remove API, not a raw back-key listener. - Platform idioms. Bottom sheets or native modals for contextual tasks rather than centred web-style dialogs; native pickers, date pickers and share sheets; tab bars with 3–5 destinations; pull-to-refresh only on refreshable lists. Follow the platform where the two differ (iOS back chevron and large titles; Android top app bar and system back) unless the brand explicitly unifies them. Close the usual web-hybrid tells: fade-only screen transitions (use the platform push or a shared-element transition), fonts flashing in after the splash (load them before hiding it), wrong scroll bounce, the default launch screen. On a visual rework, commit to the brand: a real type scale, branded chrome and one named hero detail per screen (taste items; they do not block review).
- Touch and feedback. Targets at least 44×44 pt (iOS) / 48×48 dp (Android) — use
hitSlopwhen the visual is smaller; pressed states on every touchable (Pressablewith a style callback or Android ripple); haptics (expo-hapticsor the repo's wrapper) on meaningful moments only — selection change, success, error — through one shared hook. - Text size and accessibility. Text scales with Dynamic Type / Android font scale up
to at least 200%: no fixed-height text containers, layouts that wrap or scroll, and
maxFontSizeMultiplieronly on chrome that truly cannot grow. Every touchable hasaccessibilityRole(orrole), anaccessibilityLabelwhen it has no visible text, andaccessibilityStatefor selected/disabled/checked; group related text withaccessible; announce async results withAccessibilityInfo.announceForAccessibility. Respect Reduce Motion (AccessibilityInfo.isReduceMotionEnabledor Reanimated'suseReducedMotion) and the system colour scheme (useColorScheme); check contrast in both schemes (4.5:1 text, 3:1 icons and borders). - Keyboard. Forms stay visible above the keyboard (
KeyboardAvoidingViewor the repo's keyboard library),returnKeyTypemoves to the next field, correctkeyboardType/textContentType/autoCompletefor email, codes and passwords, and tapping outside dismisses the keyboard where expected. - Performance. Animations on the UI thread (Reanimated worklets or
useNativeDriver: true) using transforms and opacity; long lists virtualised with stablekeyExtractorand memoised rows (FlashList where the repo uses it); images sized to their box and cached; no heavy work in render or on the JS thread during gestures. Frame-rate claims need a release build on a mid-range Android device or emulator — dev builds are not representative; without one, list it as unverified in the evidence rather than claiming smoothness. - Store readiness (flag, do not guess, anything that needs a human decision):
purpose strings for every permission requested (iOS
NS…UsageDescription, requested in context, not on launch); iOS privacy manifest and Play Data safety entries kept in step with new data collection; a real launch screen and app icon; no placeholder text or broken links; in-app account deletion when the app creates accounts (App Review 5.1.1(v)); enough native functionality that the app is not a repackaged website (App Review 4.2). - Verify and evidence. Run type-check, lint and tests (React Native Testing Library:
query by role and label). For each AC, a test or an E2E flow (Maestro or Detox if the
repo has one, run only if a simulator or emulator is already available) that
exercises its behaviour. Where one is, screenshot small and large phone, largest text
size, dark mode and Android gesture back (into the repo's git-ignored test output;
never committed unless an AC asks); you cannot drive VoiceOver/TalkBack, so
assert roles, labels and states in tests and name any unchecked item in the evidence.
A failing existing logic test means you changed behaviour — undo
that change; never edit the test to pass. Record per-AC evidence with the
record-evidenceskill, then stop.
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.
- 21d ago Changed · +23 lines · +14 tokens per session 005c24fe0baa
- 1mo ago First seen · 96 lines · 111 tokens per session scan A 9bba515b97e0
mobile-ui is a skill published in the GitHub repository tmj-90/gaffer (2 stars, last pushed 21d ago), licensed Apache-2.0. It adds 125 tokens to every session and 1,992 once invoked, about $0.0005 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-08-31.
Other skills, from other repositories
apple-hig-designer
Design Apple-style iOS/macOS interfaces following Human Interface Guidelines. Creates HIG-compliant components with SF Symbols, San Francisco typography, and proper accessibility. Supports optional modern effects. Use when designing Apple-style UI, iOS/macOS interfaces, HIG-compliant components, or implementing design…
app-ui-design
Mobile app UI design expert for iOS and Android. Use when designing app interfaces, creating design systems, ensuring accessibility, or following platform guidelines. Covers Material Design 3, Human Interface Guidelines, color theory, typography, and 2025 trends.
android-compose-patterns
Use when building native Android with Jetpack Compose - stateless composables, state hoisting, ViewModel-owned state, edge-to-edge, predictive back, adaptive layout, atomic components, and Material theming over hardcoded values.
mobile-design-system-foundation
Use when the mobile repository has no theme tokens or component library yet (a new app, an "Apply design system" task, or a task that asks for one), before building any screen - writes the approved design system's generated files from getdesignsystem (files true) and builds the theme from them when there is one.
mobile-ui-ux
Use when designing or building any mobile screen or component a user sees (Flutter, SwiftUI or Compose) - platform conventions, hierarchy, type that scales, colour roles and dark mode, safe areas and insets, forms and keyboard, states, feedback, and the generic-mobile anti-patterns.
liquid-glass
Implement Liquid Glass design using .glassEffect() API for iOS/macOS 26+. Covers SwiftUI, AppKit, UIKit, and WidgetKit. Use when creating modern glass-based UI effects.