ai/ios-skills/ios-axiom-ios-graphics/SKILL.md
Use when working with ANY GPU rendering, Metal, OpenGL migration, shaders, 3D content, RealityKit, AR, or display performance. Covers Metal migration, shader conversion, RealityKit ECS, RealityView, variable refresh rate, ProMotion.
npx skillsauth add kurko/dotfiles axiom-ios-graphicsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You MUST use this skill for ANY GPU rendering, graphics programming, 3D content display, or display performance work.
Use this router when:
Strategy decisions → /skill axiom-metal-migration
API reference & conversion → /skill axiom-metal-migration-ref
Diagnostics → /skill axiom-metal-migration-diag
Frame rate & render loops → /skill axiom-display-performance
For 3D content in non-game SwiftUI apps, AR experiences, and spatial computing, use the RealityKit skills. For game-specific RealityKit patterns, use the ios-games router instead.
Architecture, ECS, and best practices → /skill axiom-realitykit
API reference → /skill axiom-realitykit-ref
Troubleshooting → /skill axiom-realitykit-diag
| Thought | Reality | |---------|---------| | "I'll just translate the shaders line by line" | GLSL→MSL has type, coordinate, and precision differences. metal-migration-ref has conversion tables. | | "MetalANGLE will handle everything" | Translation layers have significant limitations for production. metal-migration evaluates the trade-offs. | | "It's just a black screen, probably a simple bug" | Black screen has 6 distinct causes. metal-migration-diag diagnoses in 5 min vs 30+ min. | | "My app runs at 60fps, that's fine" | ProMotion devices support 120Hz. display-performance configures the correct frame rate. | | "I'll just use SceneKit for the 3D model" | SceneKit is soft-deprecated. RealityView and Model3D are the modern path. axiom-realitykit covers SwiftUI integration. | | "I don't need ECS for one 3D model" | Model3D shows one model with zero ECS. RealityView scales to complex scenes. axiom-realitykit shows both paths. |
metal-migration:
metal-migration-ref:
metal-migration-diag:
display-performance:
axiom-realitykit (non-game 3D):
axiom-realitykit-ref (API):
User: "Should I use MetalANGLE or rewrite in native Metal?"
→ Invoke: /skill axiom-metal-migration
User: "I'm porting projectM from OpenGL ES to iOS"
→ Invoke: /skill axiom-metal-migration
User: "How do I convert this GLSL shader to Metal?"
→ Invoke: /skill axiom-metal-migration-ref
User: "Setting up MTKView for the first time"
→ Invoke: /skill axiom-metal-migration-ref
User: "My ported app shows a black screen"
→ Invoke: /skill axiom-metal-migration-diag
User: "Performance is worse after porting to Metal"
→ Invoke: /skill axiom-metal-migration-diag
User: "My app is stuck at 60fps on iPhone Pro"
→ Invoke: /skill axiom-display-performance
User: "How do I configure CADisplayLink for 120Hz?"
→ Invoke: /skill axiom-display-performance
User: "ProMotion not working in my Metal app"
→ Invoke: /skill axiom-display-performance
User: "How do I show a 3D model in my SwiftUI app?"
→ Invoke: /skill axiom-realitykit
User: "I need to display a USDZ model"
→ Invoke: /skill axiom-realitykit
User: "How do I set up RealityView?"
→ Invoke: /skill axiom-realitykit-ref
User: "My 3D model isn't showing in RealityView"
→ Invoke: /skill axiom-realitykit-diag
User: "How do I use RealityRenderer with Metal?"
→ Invoke: /skill axiom-realitykit-ref
User: "I need AR in my app"
→ Invoke: /skill axiom-realitykit
data-ai
Merge the current worktree branch into main and sync main back. Use when the user says "merge to main", "ship it", "merge and continue", or after completing a task in a worktree and wanting to continue with the next one.
tools
Synchronize AI agent skills, commands, configs, permissions, hooks, and instructions across Claude Code, Codex CLI, and other Agent Skills-compatible tools. Use when the user asks to pull skills from Claude into Codex, sync Codex work back to Claude, migrate agent commands, reconcile frontmatter, update permissions, or keep agent setup files in parity.
testing
Write or update UI-independent use cases for QA. Use when the user says "write use cases", "add use cases", "QA use cases", "update use cases", "compose use cases", or when starting implementation of a new feature (after plan approval). Also activates for "what should we test", "regression cases", or "use cases for QA".
documentation
Skill on how to write a task. Use when user asks you to write a task (for Asana, Linear, Jira, Notion and equivalent). Also activates when user says "create task", "write task", or similar task creation workflow requests.