En la parte 0 expliqué qué es una agent skill y cómo la carga un agente. Hoy toca lo práctico: qué tengo instalado de forma global, por qué esas y no otras, cómo instalarlas y cómo las uso en el día a día.
Todo lo que sigue está escrito desde mi flujo, que es Claude Code. Si usas Codex o Cursor, el contenido de las skills es el mismo; solo cambia la carpeta donde viven, y lo señalo en la sección de instalación.
Cómo decido qué va global
Una skill global está disponible en todas mis sesiones, en cualquier proyecto. Eso es cómodo, pero tiene un costo: su descripción entra al contexto de cada sesión, la use o no. Por eso aplico cuatro criterios antes de instalar algo de forma global:
- La uso en casi cualquier sesión de iOS o macOS, sin importar el proyecto. Concurrencia, SwiftUI, tests, cambios del SDK: eso aparece en todas mis apps. Si una skill depende de una tecnología que solo usan algunas apps (StoreKit, App Intents, Core Data), se instala dentro de ese proyecto. De esas hablo en la parte 2.
- Una sola fuente por tema. Si dos skills cubren lo mismo, compiten por activarse y a veces se contradicen. Elijo una.
- Nada entra sin revisión. Leo el
SKILL.mdy cualquier script, la paso por un escáner, copio solo la carpeta de la skill y anoto el commit que revisé. - Cada una tiene que pagar su lugar. Una descripción cuesta entre 40 y 230 tokens por sesión. Poco por skill, pero se suma.
El set
De las nueve skills globales que mencioné en la parte 0, seis son para desarrollo Apple. Las otras tres son de Android, porque varias de mis apps también existen ahí, y quedan fuera de esta serie. A esas seis les sumo swiftui-expert-skill, que instalé antes de hacer esta revisión y que pasó el filtro sin problema.
| Skill | Autor | Para qué la uso |
|---|---|---|
swiftui-whats-new-27 | Apple | Cambios de SwiftUI en el SDK 27 |
modernize-tests | Apple | Migrar de XCTest a Swift Testing |
device-interaction | Apple | Verificar en el simulador que un cambio de UI funciona |
swiftui-expert-skill | Antoine van der Lee | SwiftUI del día a día, rendimiento y Liquid Glass |
swift-concurrency | Antoine van der Lee | Data races, Sendable, actores y migración a Swift 6 |
swiftdata-pro | Paul Hudson | Modelos, predicados y CloudKit en SwiftData |
skill-scanner | Sentry | Auditar cualquier skill antes de instalarla |
Las tres de Apple
swiftui-whats-new-27
Cubre lo que cambió en SwiftUI con iOS 27 y los sistemas que salieron a la par: @State ahora es una macro, contenedores reordenables, swipe actions fuera de List, caché en AsyncImage, cambios en la toolbar y presentación de alertas desde un binding opcional.
Por qué es global: todas mis apps compilan contra el SDK 27, así que estos cambios me aparecen en cualquier proyecto. Además, es justo el conocimiento que el modelo no puede tener por su fecha de corte.
Cuándo se activa: cuando aparecen errores que antes no existían después de actualizar el SDK. El caso más común es @State: errores como “used before being initialized” o “invalid redeclaration of synthesized property” en código que compilaba perfecto con iOS 26.
modernize-tests
Hace dos cosas: migra tests de XCTest a Swift Testing, y actualiza tests de Swift Testing que ya existen para que usen los patrones recomendados.
Por qué es global: sigo la regla de migrar los tests que toco, un archivo a la vez. Eso pasa en cualquier proyecto.
Lo que conviene saber: no todo se puede migrar, y la skill lo respeta. Los tests de UI (los que usan XCUIAutomation) y los que miden rendimiento con measure { ... } se quedan en XCTest. Si un archivo mezcla ambos, migra los tests que sí se pueden y deja el resto.
device-interaction
Es una skill de subagente: el agente principal le delega la verificación a otro agente, que lanza la app en el simulador, toma capturas, revisa la jerarquía de la UI, toca botones y reporta qué encontró. Está pensada para usarse después de un cambio que afecta la interfaz.
Por qué es global: el error más caro que conozco es dar por terminado un cambio de UI que nunca vi funcionando. Esta skill cierra ese hueco.
Lo que necesita: usa las herramientas de dispositivo de Xcode 27. Dentro del asistente de código de Xcode ya las tiene. En otros agentes hace falta conectar el servidor MCP de Xcode; lo explico en la parte 2, junto con el resto de lo que se instala por proyecto.
Las cuatro de la comunidad
swiftui-expert-skill
La skill de SwiftUI de Antoine van der Lee (SwiftLee) es amplia: manejo de estado, composición de vistas, rendimiento, listas y scroll, animaciones, accesibilidad, gráficas, APIs específicas de macOS y adopción de Liquid Glass en iOS 26 y posteriores. Trae una referencia por tema, y el agente solo lee la que necesita.
También puede analizar trazas de Instruments: si le pasas un archivo .trace o le pides grabar uno, ayuda a encontrar bloqueos, saltos en la animación y vistas que se recalculan de más. Esa parte incluye scripts que se ejecutan en tu máquina, así que los leí antes de instalarla.
Por qué es global: casi todo lo que hago en iOS y macOS es SwiftUI.
swift-concurrency
También de Antoine van der Lee. Diagnostica problemas de concurrencia, convierte código basado en callbacks a async/await y guía la migración a Swift 6: tareas, actores, @MainActor, Sendable y advertencias del compilador relacionadas.
Por qué es global: los errores de concurrencia aparecen en cualquier proyecto con Swift 6, y es un tema donde el modelo se equivoca con facilidad si no tiene buenas instrucciones. Una corrección mal hecha (un @MainActor puesto donde no va o un nonisolated(unsafe) para callar al compilador) compila, pero esconde el problema.
swiftdata-pro
De Paul Hudson (Hacking with Swift). Escribe, revisa y mejora código de SwiftData con APIs modernas. Sus referencias cubren las reglas base de los modelos, predicados, índices, herencia de clases y sincronización con CloudKit.
Por qué es global: técnicamente rompe mi primer criterio, porque SwiftData es una tecnología que no todas mis apps usan. Pero varios de mis proyectos activos la usan, así que prefiero pagar su descripción en todas las sesiones que acordarme de instalarla en cada repo.
skill-scanner
De Sentry. Revisa una skill antes de instalarla y busca inyección de instrucciones (prompt injection), scripts maliciosos, permisos excesivos, secretos expuestos y riesgos en las dependencias.
Por qué es global: es la que revisa a las demás, así que es la primera que instalo. Un detalle: el escáner se marca a sí mismo como sospechoso, porque contiene ejemplos de ataques para poder detectarlos. Es un falso positivo esperado.
Lo que dejé fuera del set global
Esta parte es tan importante como la anterior, porque explica las decisiones.
swiftui-specialist (Apple). Es la skill oficial de buenas prácticas de SwiftUI, y la fuente no podría ser mejor. Pero cubre el mismo tema que swiftui-expert-skill, y mi segundo criterio dice una sola fuente por tema. Hoy la estoy probando por proyecto para compararlas con código real. La de Apple es más precisa en sus temas (invalidación con @Observable, identidad en ForEach, Environment, localización, APIs con deprecación suave); la de la comunidad cubre más terreno. Cuando decida, actualizo este post.
app-intents-specialist, app-intents-whats-new-27 y audit-xcode-security-settings (Apple). Las tres son muy buenas, pero dependen del proyecto o del momento: las de App Intents solo sirven si la app expone intents, y la auditoría de seguridad se corre una vez por app antes de publicar. Van en la parte 2.
uikit-app-modernization, adopt-c-bounds-safety y building-document-based-swiftui-applications (Apple). No las uso porque no encajan con lo que desarrollo: mis apps son 100% SwiftUI, no tengo código en C y ninguna está basada en documentos. Si tu app es UIKit, integra librerías en C o es un editor de documentos, probablemente son de las primeras que deberías instalar.
Cómo instalarlas
Para Claude Code, las skills globales viven en ~/.claude/skills/. Si usas Codex o Cursor, cambia esa ruta por ~/.agents/skills/ en todos los comandos.
Paso 1: skill-scanner, primero
mkdir -p ~/.claude/skills
git clone --depth 1 https://github.com/getsentry/skills /tmp/sentry-skills
cp -R /tmp/sentry-skills/skills/skill-scanner ~/.claude/skills/
El escáner usa uv para manejar sus dependencias de Python. Con uv instalado, así se revisa una skill:
cd ~/.claude/skills/skill-scanner
uv run scripts/scan_skill.py /ruta/a/la/skill
Paso 2: las de Apple
Se exportan desde Xcode 27 a una carpeta temporal y se copian solo las que vas a usar:
xcrun agent skills export /tmp/apple-skills
cp -R /tmp/apple-skills/swiftui-whats-new-27 ~/.claude/skills/
cp -R /tmp/apple-skills/modernize-tests ~/.claude/skills/
cp -R /tmp/apple-skills/device-interaction ~/.claude/skills/
Las de Apple vienen dentro de Xcode, así que no las paso por el escáner, pero sí las leo.
Paso 3: las de la comunidad
Para cada una: clonar, escanear, copiar solo la carpeta de la skill y anotar el commit.
# swift-concurrency
git clone --depth 1 https://github.com/AvdLee/Swift-Concurrency-Agent-Skill /tmp/swift-concurrency
cd ~/.claude/skills/skill-scanner && uv run scripts/scan_skill.py /tmp/swift-concurrency/skills/swift-concurrency
cp -R /tmp/swift-concurrency/skills/swift-concurrency ~/.claude/skills/
# swiftui-expert-skill
git clone --depth 1 https://github.com/AvdLee/SwiftUI-Agent-Skill /tmp/swiftui-expert
cd ~/.claude/skills/skill-scanner && uv run scripts/scan_skill.py /tmp/swiftui-expert/swiftui-expert-skill
cp -R /tmp/swiftui-expert/swiftui-expert-skill ~/.claude/skills/
# swiftdata-pro
git clone --depth 1 https://github.com/twostraws/SwiftData-Agent-Skill /tmp/swiftdata
cd ~/.claude/skills/skill-scanner && uv run scripts/scan_skill.py /tmp/swiftdata/swiftdata-pro
cp -R /tmp/swiftdata/swiftdata-pro ~/.claude/skills/
Para anotar el commit que revisaste:
git -C /tmp/swift-concurrency log -1 --format='%h %cs'
Varios de estos repositorios también se pueden instalar como plugin de Claude Code. Copiar solo la carpeta te deja fijar la versión que revisaste, y evita traer cosas que no pediste.
Paso 4: comprobar
Las skills se cargan al iniciar una sesión, así que abre una nueva. Para confirmar que una skill está activa, pídele al agente algo de su tema: cuando la use, verás que la invoca por su nombre.
Guía rápida de uso
Las skills se activan solas cuando tu petición coincide con su descripción. No hace falta nombrarlas. Aun así, puedes pedir una de forma explícita (“usa la skill swift-concurrency para…”) cuando quieras asegurarte de que el agente la cargue.
| Situación | Lo que le pido al agente | Skill que se activa |
|---|---|---|
Actualicé al SDK 27 y @State da errores | ”Este archivo dejó de compilar con el SDK 27; corrige los errores de @State.” | swiftui-whats-new-27 |
| Toqué un archivo de tests viejo | ”Migra este archivo de XCTest a Swift Testing.” | modernize-tests |
| Terminé un cambio en una pantalla | ”Verifica en el simulador que el flujo de registro funciona.” | device-interaction |
| Una lista se siente lenta | ”Revisa por qué esta lista se recalcula tanto al hacer scroll.” | swiftui-expert-skill |
| El compilador marca un data race | ”Corrige esta advertencia de Sendable sin silenciarla.” | swift-concurrency |
Un @Query no se actualiza | ”Revisa este modelo y esta consulta de SwiftData.” | swiftdata-pro |
| Encontré una skill nueva | ”Escanea esta skill antes de instalarla.” | skill-scanner |
Si una skill se activa cuando no debería, o nunca se activa, el problema casi siempre está en su descripción. Es lo único que el agente lee para decidir.
Mantenimiento
- Las de Apple cambian con cada versión de Xcode. Después de actualizar, vuelvo a exportarlas a una carpeta temporal, comparo con lo que tengo instalado y reemplazo lo que cambió.
- Las de la comunidad están fijadas al commit que revisé. Cada trimestre reviso qué cambió en el repositorio original y, si vale la pena actualizar, repito el proceso: clonar, escanear, copiar. Nunca actualizo sin revisar.
En la parte 2, mañana, toca lo que se instala por proyecto: StoreKit, App Intents, Core Data, widgets, testing, la preparación para la App Store y el servidor MCP de Xcode.