CtrlK
BlogDocsLog inGet started
Tessl Logo

swiftui-expert-skill

Write, review, or improve SwiftUI code following best practices for state management, view composition, performance, macOS-specific APIs, and iOS 26+ Liquid Glass adoption. Use when building new SwiftUI features, refactoring existing views, reviewing code quality, or adopting modern SwiftUI patterns.

Install with Tessl CLI

npx tessl i github:avdlee/swiftui-agent-skill --skill swiftui-expert-skill
What are skills?

94

Does it follow best practices?

Validation for skill structure

SKILL.md
Review
Evals

Evaluation results

90%

47%

Shopping Cart Feature

Observable state management and sheet patterns

Criteria
Without context
With context

@Observable used

0%

100%

@MainActor on Observable

0%

100%

@State with Observable

0%

100%

State is private

100%

100%

No passed @State

100%

100%

@Bindable for injected

0%

100%

sheet(item:) used

0%

0%

Sheet owns dismiss

0%

100%

Business logic in model

100%

100%

Methods for actions

87%

100%

let for read-only

100%

100%

Without context: $0.2364 · 1m 2s · 12 turns · 19 in / 3,701 out tokens

With context: $0.6048 · 2m 3s · 18 turns · 646 in / 7,918 out tokens

84%

14%

Recipe Browser App

Modern API usage and navigation patterns

Criteria
Without context
With context

NavigationStack used

100%

100%

navigationDestination used

100%

100%

Tab API used

0%

100%

Button not onTapGesture

100%

100%

foregroundStyle used

100%

100%

clipShape for corners

100%

100%

localizedStandardContains

0%

0%

Modern Text format

0%

40%

Two-param onChange

100%

100%

.task for async

100%

100%

Button accessibility

100%

100%

No foregroundColor

100%

100%

Without context: $0.2515 · 1m 2s · 12 turns · 19 in / 4,175 out tokens

With context: $0.4751 · 1m 41s · 14 turns · 15 in / 6,246 out tokens

89%

7%

News Feed with Category Filtering

List performance patterns and ForEach identity

Criteria
Without context
With context

Stable ForEach identity

100%

100%

No inline filtering

100%

100%

Constant views per element

100%

100%

LazyVStack used

50%

100%

No AnyView in rows

100%

100%

Minimal view props

25%

62%

Hot-path guard

100%

100%

No body object creation

100%

100%

Body stays pure

100%

100%

scrollIndicators modifier

0%

0%

Subview extraction

100%

100%

Without context: $0.4234 · 1m 57s · 17 turns · 24 in / 7,550 out tokens

With context: $0.7712 · 3m 43s · 17 turns · 645 in / 10,725 out tokens

100%

6%

Workout Progress Tracker – Animated Feedback

SwiftUI animation patterns

Criteria
Without context
With context

animation has value param

100%

100%

withAnimation for button taps

90%

100%

Transforms not frame for animation

100%

100%

Transition outside conditional

100%

100%

phaseAnimator for multi-step

100%

100%

No deprecated animation

100%

100%

Asymmetric or combined transition

100%

100%

Scoped animation

50%

100%

No linear timing for UI

100%

100%

State not changed without animation

87%

100%

Without context: $0.4648 · 2m 3s · 19 turns · 25 in / 8,672 out tokens

With context: $0.9141 · 3m 13s · 24 turns · 6,436 in / 13,141 out tokens

100%

24%

Photo Editing Toolbar with Glass Effects

Liquid Glass iOS 26+ adoption

Criteria
Without context
With context

#available with fallback

100%

100%

GlassEffectContainer used

83%

100%

glassEffect after layout modifiers

100%

100%

.interactive() only on tappable

70%

100%

glassEffectID morphing

50%

100%

@Namespace declared

100%

100%

Prominent style for Done

25%

100%

GlassEffectContainer spacing

25%

100%

No unnecessary nesting

100%

100%

Consistent shapes

83%

100%

GlassEffectContainer wraps both states

100%

100%

Without context: $0.4636 · 2m 23s · 15 turns · 21 in / 9,605 out tokens

With context: $0.4766 · 1m 26s · 18 turns · 4,345 in / 4,813 out tokens

92%

19%

Social Feed Card Component Library

View composition and accessibility

Criteria
Without context
With context

@Entry macro used

100%

100%

@ViewBuilder let content

66%

100%

No closure-based content

100%

100%

@ScaledMetric for avatar

100%

100%

@ScaledMetric for other values

100%

100%

accessibilityElement combine on reaction

50%

83%

redacted placeholder loading

0%

100%

CardTheme read from environment

100%

100%

No magic number layout

50%

66%

Subview extraction

33%

33%

Without context: $0.3710 · 1m 59s · 12 turns · 14 in / 7,785 out tokens

With context: $0.8782 · 2m · 24 turns · 14,975 in / 7,499 out tokens

100%

8%

Build Status Monitor — macOS App

macOS scene architecture and window configuration

Criteria
Without context
With context

MenuBarExtra used

100%

100%

No NSStatusItem

100%

100%

Settings scene used

100%

100%

#if os(macOS) wrapping

0%

100%

WindowGroup as primary scene

100%

100%

defaultSize configured

100%

100%

windowResizability used

100%

100%

frame min on content

100%

100%

Commands used

100%

100%

No custom prefs window

100%

100%

Without context: $0.6967 · 3m 15s · 24 turns · 31 in / 12,897 out tokens

With context: $0.7727 · 2m 37s · 27 turns · 30 in / 8,729 out tokens

92%

29%

Team Directory — Cross-Platform Data Browser

macOS NavigationSplitView, Table, and Inspector

Criteria
Without context
With context

NavigationSplitView used

100%

100%

No HSplitView for sidebar

100%

100%

Table used

100%

100%

Table sortOrder

75%

100%

Adaptive first column

0%

100%

horizontalSizeClass used

100%

100%

Inspector used

0%

100%

Inspector toggle in toolbar

37%

100%

navigationSplitViewColumnWidth

100%

0%

Without context: $0.3079 · 1m 22s · 15 turns · 22 in / 5,557 out tokens

With context: $1.1147 · 4m 7s · 27 turns · 909 in / 15,583 out tokens

96%

53%

Personalized Article Feed

@Observable with persistent state and scroll control

Criteria
Without context
With context

@ObservationIgnored on @AppStorage

0%

100%

@ObservationIgnored on second wrapper

0%

100%

No unwrapped property wrapper

100%

100%

ScrollViewReader used

100%

100%

scrollTo uses stable ID

100%

50%

withAnimation on scrollTo

100%

100%

UIImage downsampling addressed

31%

100%

visualEffect captures value

0%

100%

Without context: $0.6144 · 2m 56s · 24 turns · 30 in / 11,029 out tokens

With context: $1.3699 · 4m 29s · 30 turns · 11,882 in / 17,648 out tokens

Evaluated
Agent
Claude Code

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.