Not in the top 1,000 by GitHub stars
apple/game-porting-toolkit
Resources for porting games and engines to Apple platforms
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
game-porting-skills/skills/compiling-with-metal-shaderconverter/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/creating-metal4-shader-pipelines/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/debugging-rendering-issues/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/integrating-metal-shaderconverter-shaders/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/managing-metal-cpp-lifetimes/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/managing-metal4-resources/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/managing-metal4-synchronization/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/porting-discover/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/porting-execute/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/porting-handoff/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/porting-methodology/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/porting-plan-goal/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/porting-start-milestone/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/porting-status/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/porting-validate/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/presenting-metal-drawables/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/setting-up-macos-window/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/translating-to-metal4-api/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/using-game-controller/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/using-gpucapture/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/using-gpudebug/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/using-metal-validation/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/using-metalfx-frame-interpolation/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
game-porting-skills/skills/using-metalfx-temporal-upscaler/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 4f42344c90be
No earlier version was observed for comparison.
Verified commit 4f42344c90be22112f46becc3fb9687f423f2f88
git clone --filter=blob:none --no-checkout https://github.com/apple/game-porting-toolkit.git .hotskills/apple-game-porting-toolkit && git -C .hotskills/apple-game-porting-toolkit checkout --detach 4f42344c90be22112f46becc3fb9687f423f2f88
# Copy each selected skill directory from .hotskills/apple-game-porting-toolkit into .claude/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/apple/game-porting-toolkit.git .hotskills/apple-game-porting-toolkit && git -C .hotskills/apple-game-porting-toolkit checkout --detach 4f42344c90be22112f46becc3fb9687f423f2f88
# Copy each selected skill directory from .hotskills/apple-game-porting-toolkit into .gemini/skills/<skill-name>/Heat
5.8- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- compiling-with-metal-shaderconverter
game-porting-skills/skills/compiling-with-metal-shaderconverter - creating-metal4-shader-pipelines
game-porting-skills/skills/creating-metal4-shader-pipelines - debugging-rendering-issues
game-porting-skills/skills/debugging-rendering-issues - integrating-metal-shaderconverter-shaders
game-porting-skills/skills/integrating-metal-shaderconverter-shaders - managing-metal-cpp-lifetimes
game-porting-skills/skills/managing-metal-cpp-lifetimes - managing-metal4-resources
game-porting-skills/skills/managing-metal4-resources - managing-metal4-synchronization
game-porting-skills/skills/managing-metal4-synchronization - porting-discover
game-porting-skills/skills/porting-discover - porting-execute
game-porting-skills/skills/porting-execute - porting-handoff
game-porting-skills/skills/porting-handoff - porting-methodology
game-porting-skills/skills/porting-methodology - porting-plan-goal
game-porting-skills/skills/porting-plan-goal - porting-start-milestone
game-porting-skills/skills/porting-start-milestone - porting-status
game-porting-skills/skills/porting-status - porting-validate
game-porting-skills/skills/porting-validate - presenting-metal-drawables
game-porting-skills/skills/presenting-metal-drawables - setting-up-macos-window
game-porting-skills/skills/setting-up-macos-window - translating-to-metal4-api
game-porting-skills/skills/translating-to-metal4-api - using-game-controller
game-porting-skills/skills/using-game-controller - using-gpucapture
game-porting-skills/skills/using-gpucapture - using-gpudebug
game-porting-skills/skills/using-gpudebug - using-metal-validation
game-porting-skills/skills/using-metal-validation - using-metalfx-frame-interpolation
game-porting-skills/skills/using-metalfx-frame-interpolation - using-metalfx-temporal-upscaler
game-porting-skills/skills/using-metalfx-temporal-upscaler
How it works
compiling-with-metal-shaderconverter
When your agent uses it
ALWAYS use when compiling DXIL/HLSL to metallib with Metal shader converter (commonly referred to as MSC) via the metal-shaderconverter CLI or libmetalirconverter (IRCompiler, IRObject, IRShaderReflection) at runtime. Covers offline/runtime DXIL compilation, root signatures, reflection output, ray tracing shaders, geometry/tessellation emulation compilation, framebuffer fetch in HLSL, programmable blending in HLSL, Metal_HLSL.inc, and compatibility flags. Do NOT trigger for binding compiled shaders to encoders — use integrating-metal-shaderconverter-shaders for that.
What it loads into context
Frontmatter
132 tokensAlways available to the agent
SKILL.md
1,142 tokensWhen the skill is activated
Reference documents
3,201 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Overview
- Decision Guide
- CLI
- Library (libmetalirconverter)
- HLSL Metal-language features
- Anti-patterns
Files
../../../.claude-plugin/marketplace.jsonasset373 bytes../../.claude-plugin/plugin.jsonasset415 bytesSKILL.mdcore5,003 bytesSKILL.mdcore5,003 bytesSKILL.mdcore5,003 bytesSKILL.mdcore5,003 bytesSKILL.mdcore5,003 bytesSKILL.mdcore5,003 bytesreferences/cli.mddoc1,820 bytesreferences/hlsl-metal-extensions.mddoc3,089 bytesreferences/library.mddoc8,419 bytes
Read SKILL.md
# Metal shader converter — CLI & Library
## Overview
Two modes: **CLI** (`metal-shaderconverter`) for offline/build-time compilation, **library** (`libmetalirconverter` C API) for runtime compilation. Both produce metallibs consumed by the Metal framework. Use the CLI for build pipelines and asset cooking; use the library when DXIL must be compiled at runtime (e.g., an engine that ships DXIL and compiles to metallib on first load).
For binding compiled shaders to Metal encoders at draw/dispatch time, see `integrating-metal-shaderconverter-shaders`.
## Decision Guide
| Scenario | Use |
|---|---|
| Build pipeline, asset cooking, offline shader cache | CLI |
| Compile DXIL to metallib at runtime | Library |View the complete source on GitHubcreating-metal4-shader-pipelines
When your agent uses it
ALWAYS use when creating Metal pipeline state objects with Metal 4 descriptors (MTL4RenderPipelineDescriptor, MTL4ComputePipelineDescriptor, MTL4MeshRenderPipelineDescriptor) via MTL4Compiler. Covers function descriptors, function constant specialization, flexible/unspecialized PSOs, color-attachment mapping, async compilation (MTL4CompilerTask), pipeline caching (MTL4Archive, MTL4PipelineDataSetSerializer), static/binary shader linking, and pipeline reflection. Do NOT trigger for HLSL/DXIL → metallib — use compiling-with-metal-shaderconverter.
What it loads into context
Frontmatter
132 tokensAlways available to the agent
SKILL.md
3,620 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Overview
- References
- Cross-API PSO Compatibility
- MTL4Compiler Workflow
- MSL Source Compilation
- Function Descriptor Types
- Render Pipeline Descriptor Properties
- Mesh Shader Pipeline
- Compute Pipeline
- Specialization
- Shader Linking
- Pipeline Caching
- Recommended Practices
Files
SKILL.mdcore17,149 bytesSKILL.mdcore17,149 bytesSKILL.mdcore17,149 bytesSKILL.mdcore17,149 bytesSKILL.mdcore17,149 bytes
Read SKILL.md
# Pipeline Creation
## Overview
Covers Metal 4 pipeline state creation when porting games: loading pre-compiled metallibs, building render/compute/mesh PSOs via `MTL4Compiler`, function constants, flexible PSOs, color-attachment mapping, async compilation, and pipeline caching.
For compiling HLSL/DXIL shaders to metallibs, see the `compiling-with-metal-shaderconverter` skill.
For compiling Metal shader language (MSL) source, see MSL Source Compilation below.
## References
**Read the relevant Metal 4 SDK header before writing pipeline code** — the headers are the source of truth for property names, types, and method signatures.
- Metal 4 SDK headers - `$(xcrun --show-sdk-path)/System/Library/Frameworks/Metal.framework/Headers/` — focus on `MTL4Compiler.h`, `MTL4RenderPipeline.h`, `MTL4ComputePipeline.h`, `MTL4MeshRenderPipeline.h`, `MTL4TileRenderPipeline.h`, `MTL4LinkingDescriptor.h`View the complete source on GitHubdebugging-rendering-issues
When your agent uses it
ALWAYS use when a user porting a game to Metal reports a rendering issue — blank screen, wrong output, or anything that looks incorrect on Metal vs. the source platform. Covers black screen, missing geometry, wrong colors, gamma/sRGB problems, texture artifacts, z-fighting, alpha blending, flickering, visual corruption, and upside-down/mirrored geometry. Works with or without a GPU trace. Do NOT trigger when the user just wants to inspect an existing .gputrace.
What it loads into context
Frontmatter
109 tokensAlways available to the agent
SKILL.md
1,517 tokensWhen the skill is activated
Reference documents
606 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When This Skill Helps
- Gather Context
- Diagnostic Strategy
- Symptom Router
- Metal 4
- Fallback: Tiered Elimination
Files
SKILL.mdcore6,556 bytesSKILL.mdcore6,556 bytesSKILL.mdcore6,556 bytesSKILL.mdcore6,556 bytesSKILL.mdcore6,556 bytesSKILL.mdcore6,556 bytesreferences/tier-1-instant-checks.mddoc712 bytesreferences/tier-2-state-inspection.mddoc910 bytesreferences/tier-3-data-inspection.mddoc421 bytes
Read SKILL.md
# Metal Rendering Diagnosis
## When This Skill Helps
This skill guides the diagnostic workflow for any Metal rendering issue during game porting. For **specific symptoms** where you're confident in the cause, you can diagnose directly — but still recommend the `using-gpudebug` skill to confirm the diagnosis in a GPU trace before the developer changes code. For **ambiguous or underspecified problems** ("something looks off", "rendering is broken", multiple overlapping symptoms), use the full workflow below to turn vague reports into specific, actionable diagnoses efficiently.
## Gather Context
The most important step for ambiguous problems. Ask the developer:
1. **What do you see?** (blank, partial, or wrong-looking?)
2. **What do you expect?** (screenshot from source platform or description)
3. **What is the source API?** (D3D11, D3D12, Vulkan, OpenGL, or MoltenVK)
4. **Do you have a GPU trace** (`.gputrace`)?View the complete source on GitHubintegrating-metal-shaderconverter-shaders
When your agent uses it
ALWAYS use when integrating Metal shader converter (commonly referred to as MSC) shaders at runtime — binding model, top-level argument buffer (TLAB), root signature resource locations, descriptor/sampler heaps, static samplers, bindless resources, vertex fetch, separate stage-in, geometry/tessellation emulation, compute dispatch, unbounded arrays, and append/consume buffers. Do NOT trigger for compiling DXIL/HLSL to metallib — use compiling-with-metal-shaderconverter for that.
What it loads into context
Frontmatter
111 tokensAlways available to the agent
SKILL.md
2,146 tokensWhen the skill is activated
Reference documents
4,928 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Overview
- References
- Metal constraints
- Reflection
- Retrieving functions from synthesized metallibs
- Companion header
- HLSL Metal-language features
- Anti-patterns
- Debugging
Files
SKILL.mdcore9,717 bytesreferences/binding-model.mddoc9,024 bytesreferences/geometry-tessellation.mddoc8,559 bytesreferences/vertex-pipelines.mddoc3,520 bytes
Read SKILL.md
# Metal shader converter — Integration Guide
## Overview
Runtime integration: Metal requirements, binding model, pipeline setup, and common failure modes. Assumes metallib files are compiled.
## References
Read the reference file for your use case before writing integration code:
| Use case | Reference file |
|---|---|
| TLAB layout, root signatures, static samplers, descriptor encoding, compute dispatch, unbounded arrays, append/consume | `references/binding-model.md` |
| Metal vertex fetch, separate stage-in function | `references/vertex-pipelines.md` |View the complete source on GitHubmanaging-metal-cpp-lifetimes
When your agent uses it
ALWAYS use when writing or porting Metal object lifetime management code in metal-cpp — including crashes on release, use-after-free, memory leaks, autorelease pool placement, NS::TransferPtr vs NS::RetainPtr ownership, bridge casts at ARC/metal-cpp boundaries, or any question about when and how Metal objects are retained, released, or destroyed.
What it loads into context
Frontmatter
85 tokensAlways available to the agent
SKILL.md
1,503 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Ownership Decision (metal-cpp)
- Autorelease Pools (metal-cpp)
- Bridging from ARC into metal-cpp
- Thread Safety
- Metal 4 Resource Lifetimes
- Anti-Patterns / Common Mistakes
- Debugging
- References
Files
SKILL.mdcore6,380 bytesSKILL.mdcore6,380 bytes
Read SKILL.md
# Metal C/C++ Lifetime Management
metal-cpp types like `MTL::Buffer*` wrap ObjC Metal objects, so the underlying ObjC retain/release rules still apply. Getting ownership wrong causes leaks, use-after-free, or double-free.
## Ownership Decision (metal-cpp)
Methods starting with `new`, `alloc`, `copy`, `mutableCopy`, or `Create` return **owned** (+1) objects. Everything else returns **autoreleased** objects.
```
Returned from new/alloc/copy/mutableCopy/Create?
YES → NS::TransferPtr(ptr) // you already own it
NO → need AutoreleasePool in scope
Want to keep beyond pool scope?
YES → NS::RetainPtr(ptr) // retains; survives pool drainView the complete source on GitHubmanaging-metal4-resources
When your agent uses it
ALWAYS use when working with Metal 4 resources — buffer / texture / heap creation, storage modes, `MTLResidencySet` management, heap aliasing, purgeable state, texture view pools, GPU lossless compression, and deferred destruction. Trigger for MTLBuffer, MTLTexture, MTLHeap, MTLResidencySet, addAllocation, requestResidency, useResidencySet, addResidencySet, MTLStorageMode*, MTLPurgeableState, MTLTextureViewPool, MTLResourceViewPool, newTextureViewWithPixelFormat:, copyFromBuffer:toTexture:, "GPU fault on resource", "non-resident resource", heap aliasing. Do NOT trigger for TBDR architecture or Metal 3 → Metal 4 namespace tables — use `translating-to-metal4-api`. Barrier visibility / `MTL4VisibilityOption*` / render-pass transition barriers — use `managing-metal4-synchronization`. `CAMetalLayer.residencySet` — use `presenting-metal-drawables`. `NS::SharedPtr` / autorelease pool / ARC bridging — use `managing-metal-cpp-lifetimes`.
What it loads into context
Frontmatter
249 tokensAlways available to the agent
SKILL.md
2,133 tokensWhen the skill is activated
Reference documents
6,210 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Overview
- Ownership
- References
- Design Patterns
- Anti-Patterns / Common Mistakes
- Good Practices
Files
SKILL.mdcore9,817 bytesSKILL.mdcore9,817 bytesreferences/heaps-views.mddoc16,499 bytesreferences/residency.mddoc5,379 bytesreferences/storage-and-upload.mddoc5,866 bytes
Read SKILL.md
# Metal 4 Resources
## Overview
Metal 4 requires explicit residency management via `MTLResidencySet`, removes managed storage mode, and uses GPU addresses for resource binding. Command buffers do NOT retain resources — you must manage lifetimes. All Apple Silicon uses unified memory (CPU and GPU share the same physical memory pool) and Tile-Based Deferred Rendering (TBDR).
## Ownership
**Owns:**
- Buffer / texture / heap creation, storage-mode selection
- General `MTLResidencySet` semantics — kernel/userspace, attachment levels, validation rules, deferred destruction
- Heap allocation and aliasing patterns
- Purgeable state, texture view pools, view reinterpretation
- GPU lossless compression rulesView the complete source on GitHubmanaging-metal4-synchronization
When your agent uses it
Metal 4 explicit synchronization — barriers, fences, events, and cross-API state translation (from D3D12, Vulkan, OpenGL). Use when porting GPU synchronization, translating resource state transitions, or debugging barrier-related visual corruption.
What it loads into context
Frontmatter
60 tokensAlways available to the agent
SKILL.md
4,585 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Overview
- References
- Design Patterns
- Cross-API Translation
- Anti-Patterns / Common Mistakes
- Debugging Strategies
- Good Practices
Files
SKILL.mdcore21,259 bytesSKILL.mdcore21,259 bytesSKILL.mdcore21,259 bytesSKILL.mdcore21,259 bytesSKILL.mdcore21,259 bytes
Read SKILL.md
# Metal 4 Synchronization
## Overview
Metal 4 requires fully explicit synchronization — there is no driver hazard tracking. All resource dependencies between encoders and passes must be expressed through barriers, fences, or events. This is typically the longest phase of a port — expect barrier and synchronization work to account for a significant portion of total porting effort.
The key insight: **all source API synchronization models reduce to Metal 4 primitives** — producer barriers (on outgoing encoder), consumer barriers (on incoming encoder), intra-pass barriers (within an encoder), fences (between specific encoders on the same queue), and events (cross-queue or CPU-GPU). The source API determines *when* synchronization is needed. Metal 4's primitives determine *how* to express it.
## References
**Read the relevant Metal 4 SDK header before writing synchronization code** — the headers are the source of truth for property names, types, and method signatures.
- Metal 4 SDK headers - `$(xcrun --show-sdk-path)/System/Library/Frameworks/Metal.framework/Headers/` — focus on `MTL4CommandEncoder.h` (barriers), `MTLEvent.h` (events), `MTLFence.h` (fences)
- Apple documentation - [Resource synchronization](https://developer.apple.com/documentation/metal/resource-synchronization)View the complete source on GitHubporting-discover
When your agent uses it
Analyze a codebase before starting a Metal 4 port. Produces a discovery report with platform readiness, graphics backend analysis, feature coverage matrix, and trace-grounded findings. Use before any porting work begins.
What it loads into context
Frontmatter
68 tokensAlways available to the agent
SKILL.md
2,291 tokensWhen the skill is activated
Reference documents
4,443 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Pre-flight Check
- Before You Begin — Load Skills
- Step 1: Ask the Developer
- Step 2: Game Porting Toolkit Evaluation and Trace Analysis
- Step 3: Codebase Analysis
- Step 4: Scope Discussion
- Output Format
- After Discovery
Files
SKILL.mdcore10,253 bytesSKILL.mdcore10,253 bytesSKILL.mdcore10,253 bytesreference/codebase-analysis.mddoc11,841 bytesreference/gptk-and-traces.mddoc7,852 bytes
Read SKILL.md
You are preparing to port a game or engine to Apple platforms with Metal 4. Before writing any porting code, you must understand the target codebase thoroughly and gather any available reference artifacts.
## Pre-flight Check
Locate the agent's **artifact directory** at `<project-root>/.porting/` (defined in `porting-methodology`). All artifacts live there.
**Check if a discovery report already exists** (`discovery-report.md` in the artifact directory).
- If it exists, tell the user: "A discovery report already exists. Do you want to re-run discovery (this will overwrite the existing report) or use the existing report and proceed to `/porting-plan-goal`?"
- Wait for the user's response before continuing.
- If the user chooses to use the existing report, stop here.
**Announce:** "Running codebase discovery for Apple platform porting."
## Before You Begin — Load SkillsView the complete source on GitHubporting-execute
When your agent uses it
Begin writing code for the current milestone. This is the explicit go-signal after /porting-start-milestone preparation has been reviewed and approved by the user.
What it loads into context
Frontmatter
49 tokensAlways available to the agent
SKILL.md
1,386 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Begin Implementation
- During Implementation
- Rendering Milestone Completion Check
- macOS Environment Quirks
- Do NOT
- When Done
Files
SKILL.mdcore6,768 bytes
Read SKILL.md
You are entering Phase 2: Execute for the current milestone. The user has reviewed and approved the preparation summary from `/porting-start-milestone`.
Locate the agent's **artifact directory** at `<project-root>/.porting/` (defined in `porting-methodology`). All artifacts live there. Load the `porting-methodology` skill if not already in context.
## Begin Implementation
Implement the approved work items from the preparation summary. Follow the Phase 2 conventions from the methodology (matching engine patterns, leveraging existing systems, consulting loaded skills, stub/hardcoded conventions, building often, assertions).
The approved prep summary is the **scope contract**. Focus exclusively on the listed work items.
If you discover unexpected work that wasn't identified during preparation, **stop and tell the user** before implementing it. Present what you found and collaborate on the right response:
- Does it fit naturally into an existing future milestone? → Stub it with the appropriate `STUB(Mx)` marker.
- Does the goal's milestone plan need new milestones to accommodate it? → Propose specific additions to the plan.View the complete source on GitHubporting-handoff
When your agent uses it
Close out the current milestone. Prompts the user to commit, updates porting-memory.md (watch list and feature status), writes a handoff note, updates the goal document milestone status, and requests a context reset.
What it loads into context
Frontmatter
60 tokensAlways available to the agent
SKILL.md
964 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Step 1: Prompt Commit
- Step 2: Update porting-memory.md
- Step 3: Write Handoff Note
- Step 4: Update Goal Document
- Step 5: Notify User
- Step 6: Request Context Reset
Files
SKILL.mdcore4,368 bytes
Read SKILL.md
You are entering Phase 4: Handoff for the current milestone.
Locate the agent's **artifact directory** at `<project-root>/.porting/` (defined in `porting-methodology`). All artifacts live there. Load the `porting-methodology` skill if not already in context.
## Step 1: Prompt Commit
Ask the user to commit any uncommitted work before proceeding:
> "Before writing the handoff, please commit any uncommitted changes."
Wait for the user to confirm the commit is done.
## Step 2: Update porting-memory.md
View the complete source on GitHubporting-methodology
When your agent uses it
Core development methodology for porting games and engines to Apple platforms. Defines porting goals, milestone lifecycle, debugging escalation, and conventions. Preloaded by the porting agent.
What it loads into context
Frontmatter
44 tokensAlways available to the agent
SKILL.md
7,267 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Overview
- References
- Artifact Storage
- Porting Goals
- Milestones
- Skill Loading
- Milestone Lifecycle — Four Phases
- Session Model
- Debugging Escalation
- Anti-Patterns
Files
SKILL.mdcore34,350 bytesSKILL.mdcore34,350 bytesSKILL.mdcore34,350 bytesSKILL.mdcore34,350 bytes
Read SKILL.md
# Platform Porting Methodology
## Overview
This skill defines **how** to approach an Apple platform port — the workflow, phases, conventions, and discipline. Domain-specific knowledge (Metal 4 API patterns, platform skills, anti-patterns, debugging strategies) lives in companion skills loaded alongside this one.
The methodology operates at two levels:
- **Porting goal** — a persistent objective spanning multiple sessions (e.g., "get the simplest sample running on Metal 4")
- **Milestone** — a bounded unit of work within a goal, completed in one session
**Core principle: collaboration.** This is a collaborative process between the agent and the user. The agent should surface decisions, trade-offs, and uncertainties to the user rather than making unilateral choices. When in doubt — ask. When deviating from convention — discuss. When stuck — escalate. The user has context the agent doesn't (reference implementations, project constraints, team preferences).
## References
View the complete source on GitHubporting-plan-goal
When your agent uses it
Define the next porting goal. Reads the discovery report and current porting state, proposes a goal with milestones, and creates a goal document.
What it loads into context
Frontmatter
46 tokensAlways available to the agent
SKILL.md
2,052 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Pre-flight Check
- Load Skills
- Step 1: Assess Current State
- Step 2: Propose a Goal
- Step 3: Scope Discussion
- Step 4: Create Goal Document
- After Goal Creation
Files
SKILL.mdcore9,677 bytes
Read SKILL.md
You are defining a porting goal for the Apple platform porting agent.
## Pre-flight Check
Locate the agent's **artifact directory** at `<project-root>/.porting/` (defined in `porting-methodology`). All artifacts live there.
1. **Check if a discovery report exists** (`discovery-report.md` in the artifact directory). If it does not exist, tell the user: "No discovery report found. Run `/porting-discover` first." and stop.
2. **Check if a previous goal document exists** (`goal-*.md` in the artifact directory). If one exists and is not marked complete, tell the user: "An active porting goal already exists: [goal name]. Complete it before planning a new one, or confirm you want to replace it." Wait for the user's response.
**Announce:** "Planning next porting goal."
## Load SkillsView the complete source on GitHubporting-start-milestone
When your agent uses it
Begin the next milestone. Reads the goal document and latest handoff note, loads relevant skills, studies code paths, and produces a preparation summary for user review. Does NOT write code.
What it loads into context
Frontmatter
55 tokensAlways available to the agent
SKILL.md
1,158 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Pre-flight Check
- Load and Read Skills
- Study the Code
- Output: Preparation Summary
- Gate
Files
SKILL.mdcore5,568 bytes
Read SKILL.md
You are entering Phase 1: Prepare for the current milestone.
## Pre-flight Check
Locate the agent's **artifact directory** at `<project-root>/.porting/` (defined in `porting-methodology`). All artifacts live there. Load the `porting-methodology` skill if not already in context.
1. **Check for a goal document** (`goal-*.md` in the artifact directory). If none exists, tell the user: "No goal document found. Run `/porting-plan-goal` first." and stop.
2. **Read the goal document.** Find the first milestone with status "Not started" or "In progress":
- If one is "In progress", resume it.
- If one is "Not started", start it — update its status to "In progress" in the goal document.
- If all milestones are complete, tell the user: "All milestones for this goal are complete. Run `/porting-plan-goal` to define the next porting goal." and stop.
3. **Read porting-memory.md** — review the watch list and feature status. Note any items relevant to this milestone.View the complete source on GitHubporting-status
When your agent uses it
Show the current porting status. Reads the goal document, porting-memory.md, and latest handoff note to report where things stand. Read-only — does not continue any work.
What it loads into context
Frontmatter
52 tokensAlways available to the agent
SKILL.md
449 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Gather Status
- Output
Files
SKILL.mdcore1,934 bytes
Read SKILL.md
You are checking the current porting status. This is read-only — do NOT continue any work or start any implementation.
## Gather Status
Locate the agent's **artifact directory** at `<project-root>/.porting/` (defined in `porting-methodology`). All artifacts live there. Load the `porting-methodology` skill if not already in context.
Read the following files and report their contents:
1. **Goal document** (`goal-*.md` in the artifact directory) — if it exists, show the milestone tracker with current status of each milestone.
2. **porting-memory.md** — if it exists, show the watch list and feature status table.
3. **Latest handoff note** (`porting-handoff-*.md` in the artifact directory) — if one exists, show what was done, what's deferred, and known issues.
View the complete source on GitHubporting-validate
When your agent uses it
Run the validation checklist before the milestone's final commit. Checks runtime verification, visual correctness, reference artifact comparison, Metal validation, memory leaks, skill-driven code review, and data flow verification. Can also be run mid-milestone.
What it loads into context
Frontmatter
63 tokensAlways available to the agent
SKILL.md
2,440 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Reload Skills
- Validation Checklist
- Output: Validation Report
- Request User Review
Files
SKILL.mdcore11,838 bytesSKILL.mdcore11,838 bytes
Read SKILL.md
You are entering Phase 3: Validate for the current milestone. The milestone's work is functionally complete. Mid-milestone commits for stable checkpoints are fine, but this full validation pass should happen before closing out the milestone.
## Reload Skills
Validation often runs in a fresh session after the execute phase. Skills loaded during execution are no longer in context. **You MUST reload the skills you need before proceeding:**
1. **Always reload** `porting-methodology` (for anti-patterns checklist and debugging escalation).
2. **For rendering milestones**, reload `using-gpucapture` and `using-gpudebug` — you will need these for GPU frame capture and ground truth comparison. Do NOT attempt GPU capture workflows from memory.
3. **Reload domain skills** for this milestone. Read the goal document's milestone plan to find which skills are associated with the current milestone. Also check porting-memory.md for any additional context. You need these for the skill-driven code review (checklist item 7).
4. **If visual bugs are found**, reload `debugging-rendering-issues` for structured diagnostic workflows.
## Validation Checklist
Work through each item and report findings:View the complete source on GitHubpresenting-metal-drawables
When your agent uses it
ALWAYS use when implementing or debugging the Metal drawable presentation contract — `CAMetalLayer` configuration, drawable lifecycle (`nextDrawable`, `waitForDrawable`, `signalDrawable`, `present`), vsync (`displaySyncEnabled`), `CAMetalDisplayLink`, HDR/EDR layer setup, direct-to-display vs composited, or drawable-residency-set rules. Trigger for CAMetalLayer, CAMetalDrawable, nextDrawable, signalDrawable, waitForDrawable, displaySyncEnabled, presentAfterMinimumDuration, drawableSize, framebufferOnly, wantsExtendedDynamicRangeContent, EDR headroom, ProMotion, swap chain port, "blank window", "vsync not working". Do NOT trigger for render-thread / run-loop / resize / fullscreen integration on macOS — use `setting-up-macos-window`. General `MTLResidencySet` semantics — use `managing-metal4-resources`. Cross-API translation tables for non-presentation APIs — use `translating-to-metal4-api`. For dual-frame presentation via a present thread — use `using-metalfx-frame-interpolation`.
What it loads into context
Frontmatter
232 tokensAlways available to the agent
SKILL.md
4,943 tokensWhen the skill is activated
Reference documents
6,913 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Overview
- Ownership
- References
- Design Patterns
- Anti-Patterns / Common Mistakes
- Debugging Strategies
- Good Practices
Files
SKILL.mdcore21,550 bytesSKILL.mdcore21,550 bytesreferences/frame-pacing.mddoc6,175 bytesreferences/hdr-colorspace.mddoc3,533 bytesreferences/render-loop-detail.mddoc20,966 bytes
Read SKILL.md
# Metal 4 Presentation & Frame Pacing
## Overview
Metal 4 splits the cmd-buffer-level `[cmd presentDrawable:]` into a queue-level sequence: `[queue waitForDrawable:]` before commit, `[queue signalDrawable:]` after commit, and `[drawable present]`. The conceptual flow — acquire drawable, encode, present, submit — is unchanged; only the API surface is more explicit. `MTL4CommandBuffer` does not expose `presentDrawable:`, so any code path using `MTL4CommandQueue` must use the queue-level form. Code paths still using the Metal 3 `MTLCommandQueue` keep `[cmd presentDrawable:]` and remain correct in a Metal 4 app.
## Ownership
**Owns:**
- Drawable lifecycle (`nextDrawable`, `waitForDrawable`, `signalDrawable`, `present`)
- `CAMetalLayer` configuration and properties
- Vsync semantics (`displaySyncEnabled`, `presentAfterMinimumDuration:`)
- `CAMetalDisplayLink` API basics; variable refresh rate detection
- HDR/EDR layer configuration; pixel format ↔ colorspace pairingView the complete source on GitHubsetting-up-macos-window
When your agent uses it
Setting up the macOS window layer when porting a Windows game to Metal. Covers AppDelegate + NSWindow programmatic setup, a CAMetalLayer-backed GameView with CAMetalDisplayLink, GameViewController lifecycle, AppKit notifications routed into the engine via `Engine*` callbacks, keyboard/mouse input replacing WndProc, fullscreen transitions, cursor visibility and mouse-look confinement, sleep prevention, and per-frame screen state for sizes and EDR. Use whenever the question touches porting a Windows game window to macOS — AppDelegate / GameView / GameViewController setup, replacing WndProc, fullscreen, cursor handling, window resize, or AppKit notification routing.
What it loads into context
Frontmatter
146 tokensAlways available to the agent
SKILL.md
2,925 tokensWhen the skill is activated
Reference documents
8,394 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Scope and Companion Skills
- Reference Routing
- Phase 1: Assess the Codebase
- Phase 2: Application Entry Point
- Phase 3: App Delegate
- Phase 4: GameView and GameRenderer
- Phase 5: GameViewController
- Phase 6: Engine Callbacks
- Phase 7: Notifications
- Phase 8: Input
- Phase 9: Sleep and Presentation Options
- Verification Checklist
Files
SKILL.mdcore12,609 bytesreferences/engine-and-messages.mddoc10,167 bytesreferences/keyboard-events.mddoc2,023 bytesreferences/mouse-and-cursor.mddoc8,329 bytesreferences/presentation-and-sleep.mddoc2,760 bytesreferences/window-implementation.mddoc4,783 bytesreferences/window-notifications.mddoc6,750 bytes
Read SKILL.md
# Game Window Port
A guided workflow for wiring up the macOS window layer when porting a Windows game to Metal.
## Scope and Companion Skills
This skill covers windowing concerns: the AppKit surface, the view that owns the `CAMetalLayer` and the render-tick source, lifecycle, notifications, and input.
The boundary with the engine is the `Engine*` callback API described in Phase 6.
Past that boundary, presentation and rendering live in companion skills:
| Question is about | Skill |
|---|---|
| Drawable acquisition, presentation flow (`waitForDrawable`, `signalDrawable`, `present`), layer property semantics (`pixelFormat`, `colorspace`, `drawableSize`, `maximumDrawableCount`, `displaySyncEnabled`, EDR opt-in), Metal 3 vs Metal 4 | `presenting-metal-drawables` |
| D3D12/Vulkan API mapping to Metal 4 (device, queue, command buffer, encoder, PSO, shader compile, swap chain) | `translating-to-metal4-api` |View the complete source on GitHubtranslating-to-metal4-api
When your agent uses it
ALWAYS use as the Metal 4 API reference and cross-API translation map when porting graphics code to Metal 4 — translating Metal 3, D3D12, or Vulkan calls, looking up any MTL4 / Metal 4 API or renamed type, finding the Metal 4 equivalent of a source-API call, or learning what the redesign removed or changed. Covers the Metal 3 → Metal 4 namespace/type table, removed/changed APIs (ParallelRenderEncoder, set*Bytes), Apple GPU TBDR (tile-based deferred rendering) architecture, and the D3D12 / Vulkan / Metal 3 → Metal 4 translation tables. Do NOT trigger for buffer/texture/heap/residency/storage-mode management — use `managing-metal4-resources`; barriers, fences, or events — use `managing-metal4-synchronization`; pipeline state creation, MTL4Compiler, or reflection — use `creating-metal4-shader-pipelines`; CAMetalLayer drawable presentation — use `presenting-metal-drawables`.
What it loads into context
Frontmatter
222 tokensAlways available to the agent
SKILL.md
7,604 tokensWhen the skill is activated
Reference documents
8,204 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Overview
- Apple GPU Architecture: TBDR
- References
- Design Patterns
- Cross-API Translation
- Anti-Patterns / Common Mistakes
- Debugging Strategies
- Good Practices
- Companion Skills
Files
SKILL.mdcore32,763 bytesSKILL.mdcore32,763 bytesSKILL.mdcore32,763 bytesreferences/cross-api-translation.mddoc16,736 bytesreferences/gpu-queries-and-capabilities.mddoc5,230 bytesreferences/tbdr-architecture.mddoc12,828 bytes
Read SKILL.md
# Metal 4 API Reference
## Overview
Metal 4 is a ground-up API redesign — not a minor version bump. It introduces the `MTL4` prefix (ObjC protocols/classes) / `MTL4::` namespace (metal-cpp). All Metal 4 objects are created from `MTLDevice` / `MTL::Device`. Key removals: blit encoder, parallel render encoder, set*Bytes, managed storage mode, per-encoder resource binding, addCompletedHandler.
Metal 4 requires macOS 26+, iOS 26+. Feature detection:
```objc
// ObjC
if ([device supportsFamily:MTLGPUFamilyMetal4]) { /* Metal 4 path */ }
```
```cpp
// metal-cppView the complete source on GitHubusing-game-controller
When your agent uses it
ALWAYS use when the user has any question about game controller input on Apple platforms — whether writing new code, porting from Windows, or modernizing an existing implementation. Trigger when working with the GCController API or GameController framework (controller lifecycle, connect/disconnect, current controller, player index, profile-based input, modern input API, polling, callbacks, haptics, rumble, adaptive triggers, motion/IMU, or on-screen controls), or when porting Windows controller code such as XInput, DirectInput, GameInput, RawInput, joystickapi.h, IOKit HID, IOHIDManager, or HidP_* APIs. Do NOT trigger for keyboard or mouse input.
What it loads into context
Frontmatter
149 tokensAlways available to the agent
SKILL.md
5,037 tokensWhen the skill is activated
Reference documents
21,902 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Overview
- Framework Concepts
- Topics
- Setup
- Best Practices
- Controller Lifecycle
- Next Steps
- Modernizing Existing Code
Files
SKILL.mdcore24,756 bytesreference/haptics.mddoc10,273 bytesreference/input-element-names.mddoc16,033 bytesreference/inspect-the-device.mddoc9,746 bytesreference/modern-input.mddoc26,063 bytesreference/platform-notes.mddoc4,546 bytesreference/profile-based-input.mddoc30,633 bytes
Read SKILL.md
## Overview
A comprehensive guide to Apple's GameController framework - covering Swift/ObjC APIs, platform considerations, and porting from Windows.
Use the GameController framework when writing code for Apple platforms that interacts with game controllers. The `GCController` API presents a common abstraction over gamepad and joystick input devices. The GameController framework supports popular game controllers including the Sony DualSHOCK 4, Sony DualSense, Nintendo Switch Pro, and Microsoft Xbox controllers. Advanced features available on these controllers - IMU, Rumble, and Adaptive Triggers (force feedback) - are supported.
When porting Windows code that calls RawInput (e.g, `RegisterRawInputDevices`) or HID (`HidP_*`) APIs to interfce with Sony, Nintendo, and other non-Xbox controllers, AVOID writing equivalent code that uses IOKit and `IOHIDManager` APIs. PREFER to re-write the code to use the abstractions provided by the `GCController` API instead.
---
## Framework Concepts
* **Device-centric model** - Each `GCController` represents a connected gamepad or joystick device. You obtain the currently connected devices from `GCController.controllers`, listen for new connections (`GCControllerDidConnectNotification`) and disconnections (`GCControllerDidDisconnectNotification`), and monitor for input from the one(s) you are interested in.View the complete source on GitHubusing-gpucapture
When your agent uses it
ALWAYS use when a user wants to capture a GPU trace (.gputrace) of a Metal application. Trigger when the user wants to capture a GPU trace, get a gputrace, record a Metal frame, capture a frame, capture GPU workload, use gpucapture, capture from the command line, do a Metal frame capture, ask how to capture a Metal trace, capture a running process, or otherwise create a .gputrace file from a Metal app. Do NOT trigger when the user already has a GPU trace and wants to analyze or diagnose it — use using-gpudebug for that.
What it loads into context
Frontmatter
133 tokensAlways available to the agent
SKILL.md
649 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Overview
- Step 1: Check availability
- Step 2: Read the man page
- Step 3: Key requirements
Files
SKILL.mdcore2,794 bytesSKILL.mdcore2,794 bytesSKILL.mdcore2,794 bytesSKILL.mdcore2,794 bytesSKILL.mdcore2,794 bytes
Read SKILL.md
# Using gpucapture — Metal GPU Trace Capture
## Overview
`gpucapture` is a CLI tool for capturing Metal GPU traces from running processes or launched executables. It requires no source code changes — attach to a process by PID, choose what to capture (frames, command buffers, custom scopes), and produce a `.gputrace` file for analysis.
## Step 1: Check availability
```sh
which gpucapture
```
`gpucapture` ships with macOS 27 and later. If not found, the user is on an older macOS version — suggest alternatives based on their situation:
View the complete source on GitHubusing-gpudebug
When your agent uses it
ALWAYS use when a user has a .gputrace file and needs to inspect, navigate, or extract resources from it using the gpudebug CLI. Covers draw calls, render encoders, pipeline state, resource bindings, textures/buffers, and shader source. Also trigger when another skill needs to read data from a .gputrace (fetch textures, inspect state, list encoders). Do NOT trigger for capturing a new trace — use using-gpucapture.
What it loads into context
Frontmatter
106 tokensAlways available to the agent
SKILL.md
560 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Overview
- Step 1: Check availability
- Step 2: Read the man page
- Step 3: Agent usage
Files
SKILL.mdcore2,399 bytesSKILL.mdcore2,399 bytesSKILL.mdcore2,399 bytesSKILL.mdcore2,399 bytesSKILL.mdcore2,399 bytesSKILL.mdcore2,399 bytes
Read SKILL.md
# Using gpudebug — Metal GPU Trace Debugger
## Overview
`gpudebug` is a CLI debugger for Metal GPU traces. It opens a `.gputrace` file and provides commands for navigating the captured API call hierarchy, inspecting resources and pipeline state, fetching textures and buffers to disk, and browsing shader source code.
## Step 1: Check availability
```sh
which gpudebug
```
`gpudebug` ships with macOS 27 and later. If not found, tell the user it is not available and suggest opening the `.gputrace` in Xcode's Metal Debugger instead: [Analyzing your Metal workload](https://developer.apple.com/documentation/Xcode/Analyzing-your-Metal-workload)
View the complete source on GitHubusing-metal-validation
When your agent uses it
ALWAYS use when a user wants to enable, configure, or run Metal validation — API validation (MTL_DEBUG_LAYER) for CPU-side API misuse, shader validation (MTL_SHADER_VALIDATION) for GPU-side memory errors, or the load/store-action visual indicators. Trigger when working with Metal validation (MTL_DEBUG_LAYER, MTL_SHADER_VALIDATION, the validation layer, API validation, MTL_DEBUG_LAYER_VALIDATE_LOAD_ACTIONS, MTL_DEBUG_LAYER_VALIDATE_STORE_ACTIONS, per-pipeline validation, MTL4PipelineOptions.shaderValidation, validation perf hit), or when encountering symptoms like shader validation errors not appearing, fuchsia color render artifacts, the red/white checkerboard, or zerofill output. Do NOT trigger for general rendering bug diagnosis where validation isn't the relevant tool.
What it loads into context
Frontmatter
166 tokensAlways available to the agent
SKILL.md
615 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Overview
- Step 1: Read the man page
- Step 2: Quick-start
- Step 3: Things easy to miss
Files
SKILL.mdcore2,688 bytesSKILL.mdcore2,688 bytesSKILL.mdcore2,688 bytes
Read SKILL.md
# Using Metal Validation
## Overview
Metal provides two validation modes, both configured via environment variables read at `MTLDevice` creation:
- **API validation** (`MTL_DEBUG_LAYER`) — CPU-side. Cheap; enable broadly during development.
- **Shader validation** (`MTL_SHADER_VALIDATION`) — GPU-side. Potentially significant perf cost; enable selectively or per-pipeline.
Env vars must be set **before** any `MTLDevice` is created. Changes after device creation have no effect.
## Step 1: Read the man page
The man page is the authoritative reference for all env vars, their valid mode values, and pipeline scoping syntax. Read it before configuring anything beyond the quick-start:View the complete source on GitHubusing-metalfx-frame-interpolation
When your agent uses it
ALWAYS use to add MetalFX frame interpolation with a dedicated PresentThread for precise dual-frame presentation to a Metal app. Use this skill when the user wants to add frame interpolation, frame generation, double the framerate, or mentions MTLFXFrameInterpolator (Metal 3) or MTL4FXFrameInterpolator (Metal 4). This skill assumes temporal upscaling is already integrated (use using-metalfx-temporal-upscaler first if not). Also trigger when the user says "add frame gen", "120fps", "interpolate frames", or wants smoother motion.
What it loads into context
Frontmatter
129 tokensAlways available to the agent
SKILL.md
2,923 tokensWhen the skill is activated
Reference documents
3,861 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Abstraction Strategy
- Architecture
- What You Need to Create
- Integration Steps
- PresentThread Internals
- Texture Usage Flags
- Troubleshooting
- Verification
Files
SKILL.mdcore12,431 bytesSKILL.mdcore12,431 bytesSKILL.mdcore12,431 bytesreferences/present-thread.mddoc15,053 bytes
Read SKILL.md
# Adding MetalFX Frame Interpolation to a Metal App
This skill adds MetalFX frame interpolation to a Metal app that already has a MetalFX temporal scaler integrated. The interpolator generates intermediate frames between real rendered frames, effectively doubling the display framerate (e.g., 60fps render → 120fps display).
Two API variants exist:
- **Metal 3** — `MTLFXFrameInterpolator` (macOS 15.0+ / iOS 18.0+)
- **Metal 4** — `MTL4FXFrameInterpolator` (macOS 26.0+ / iOS 26.0+), which inherits from the shared `MTLFXFrameInterpolatorBase` protocol
All per-frame properties are identical across both APIs (they live on `MTLFXFrameInterpolatorBase`). The differences are the creation call, the command buffer type used for encoding, and the support check — see the notes below.
**Prerequisite:** The app must already have MetalFX temporal upscaling working. If not, use the `using-metalfx-temporal-upscaler` skill first.
## Abstraction Strategy
View the complete source on GitHubusing-metalfx-temporal-upscaler
When your agent uses it
ALWAYS use when the user wants to add MetalFX temporal upscaling, super-resolution, or upscaling to a Metal app — whether they say "add MetalFX", "add temporal upscaling", "render at lower resolution and upscale", "add DLSS-like upscaling", "add FSR-like upscaling", TAA, motion vectors, jitter pattern, or mention MTLFXTemporalScaler (Metal 3) or MTL4FXTemporalScaler (Metal 4) directly.
What it loads into context
Frontmatter
117 tokensAlways available to the agent
SKILL.md
3,105 tokensWhen the skill is activated
Reference documents
1,741 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Prerequisites
- Overview of Changes
- Abstraction Strategy
- Integration Steps
- Common Pitfalls
- If artifacts persist
- Verification
Files
SKILL.mdcore12,764 bytesSKILL.mdcore12,764 bytesSKILL.mdcore12,764 bytesreferences/integration-guide.mddoc6,565 bytes
Read SKILL.md
# Adding MetalFX Temporal Upscaling to a Metal App
This skill walks through integrating `MTLFXTemporalScaler` into an existing Metal rendering application. The scaler renders at a lower resolution and uses motion vectors, depth, and temporal jitter to produce a high-quality upscaled output.
## Prerequisites
- macOS 13.0+ / iOS 16.0+
- Apple Silicon recommended
- `@import MetalFX;` (auto-links with `CLANG_ENABLE_MODULES = YES`)
- The app must already render a 3D scene with a projection matrix and model-view-projection transforms
## Overview of Changes
The integration touches 3 areas:View the complete source on GitHubSkills included
- compiling-with-metal-shaderconverter
- creating-metal4-shader-pipelines
- debugging-rendering-issues
- integrating-metal-shaderconverter-shaders
- managing-metal-cpp-lifetimes
- managing-metal4-resources
- managing-metal4-synchronization
- porting-discover
- porting-execute
- porting-handoff
- porting-methodology
- porting-plan-goal
- porting-start-milestone
- porting-status
- porting-validate
- presenting-metal-drawables
- setting-up-macos-window
- translating-to-metal4-api
- using-game-controller
- using-gpucapture
- using-gpudebug
- using-metal-validation
- using-metalfx-frame-interpolation
- using-metalfx-temporal-upscaler
Repository facts
- License
- Apache-2.0
- Created
- Jun 8, 2026
- Last pushed
- Jun 8, 2026
- Forks
- 25
- Open issues
- 0
- Project activity
- Slowing
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 5, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 44 notes
game-porting-skills/skills/compiling-with-metal-shaderconverter/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/compiling-with-metal-shaderconverter/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/compiling-with-metal-shaderconverter/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/compiling-with-metal-shaderconverter/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/compiling-with-metal-shaderconverter/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/creating-metal4-shader-pipelines/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/creating-metal4-shader-pipelines/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/creating-metal4-shader-pipelines/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/creating-metal4-shader-pipelines/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/debugging-rendering-issues/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/debugging-rendering-issues/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/debugging-rendering-issues/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/debugging-rendering-issues/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/debugging-rendering-issues/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/managing-metal-cpp-lifetimes/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/managing-metal4-resources/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/managing-metal4-synchronization/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/managing-metal4-synchronization/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/managing-metal4-synchronization/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgame-porting-skills/skills/managing-metal4-synchronization/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- 84 network referencesin 16 files: using-game-controller/SKILL.md:44 porting-discover/reference/codebase-analysis.md:9 porting-discover/reference/gptk-and-traces.md:7 and 13 more
- No hidden or obfuscated text
- No instruction overrides
- No executable scripts
- No access to secrets
- No requests to vote in Hot
Show all 84 signals by file
game-porting-skills/skills/compiling-with-metal-shaderconverter/SKILL.md
- Network accessline 34
If not found, download from https://developer.apple.com/download/all/?q=Metal%20Shader%20Converter
game-porting-skills/skills/compiling-with-metal-shaderconverter/references/hlsl-metal-extensions.md
- Network accessline 53
If the shader uses the `RootSig` attribute, every defined feature space must be listed explicitly in the root signature even though it consumes no slots — Metal shader converter skips them during layout, but the entries must be present. The
game-porting-skills/skills/creating-metal4-shader-pipelines/SKILL.md
- Network accessline 19
- Metal 4 SDK headers - `$(xcrun --show-sdk-path)/System/Library/Frameworks/Metal.framework/Headers/` — focus on `MTL4Compiler.h`, `MTL4RenderPipeline.h`, `MTL4ComputePipeline.h`, `MTL4MeshRenderPipeline.h`, `MTL4TileRenderPipeline.h`, `MTL - Network accessline 20
- Apple documentation - [Using the Metal 4 compilation API](https://developer.apple.com/documentation/metal/using-the-metal-4-compilation-api)
game-porting-skills/skills/integrating-metal-shaderconverter-shaders/references/vertex-pipelines.md
- Network accessline 15
## Metal vertex fetch (default)
game-porting-skills/skills/managing-metal-cpp-lifetimes/SKILL.md
- Network accessline 101
- metal-cpp Foundation headers - `Foundation/NSSharedPtr.hpp` (`NS::SharedPtr`, `NS::TransferPtr`, `NS::RetainPtr`), `Foundation/NSAutoreleasePool.hpp` (`NS::AutoreleasePool`) - metal-cpp source - [apple/metal-cpp](https://github.com/apple/ - Network accessline 102
- metal-cpp source - [apple/metal-cpp](https://github.com/apple/metal-cpp) - Network accessline 103
- Apple documentation - [metal-cpp](https://developer.apple.com/metal/cpp/)
game-porting-skills/skills/managing-metal4-resources/SKILL.md
- Network accessline 34
- Metal SDK headers - `$(xcrun --show-sdk-path)/System/Library/Frameworks/Metal.framework/Headers/` — focus on `MTLResource.h`, `MTLResidencySet.h`, `MTLAllocation.h`, `MTLHeap.h`, `MTLTexture.h`, `MTLBuffer.h` - Apple documentation - [Reso - Network accessline 35
- Apple documentation - [Resource fundamentals](https://developer.apple.com/documentation/metal/resource-fundamentals) - Network accessline 36
- Apple documentation - [Memory heaps](https://developer.apple.com/documentation/metal/memory-heaps)
game-porting-skills/skills/managing-metal4-synchronization/SKILL.md
- Network accessline 18
- Metal 4 SDK headers - `$(xcrun --show-sdk-path)/System/Library/Frameworks/Metal.framework/Headers/` — focus on `MTL4CommandEncoder.h` (barriers), `MTLEvent.h` (events), `MTLFence.h` (fences) - Apple documentation - [Resource synchronizati - Network accessline 19
- Apple documentation - [Resource synchronization](https://developer.apple.com/documentation/metal/resource-synchronization)
game-porting-skills/skills/porting-discover/reference/codebase-analysis.md
- Network accessline 9
- What is the deployment target? Metal 4 requires macOS 26+ / iOS 26+. - Can the build system be extended for Apple targets without diverging from the main branch? - Some engines have a Windows-based dev environment — Mac Remote Developer T - Network accessline 10
- Can the build system be extended for Apple targets without diverging from the main branch? - Some engines have a Windows-based dev environment — Mac Remote Developer Tools for Windows allows building CMake projects from Visual Studio with - Network accessline 11
- Some engines have a Windows-based dev environment — Mac Remote Developer Tools for Windows allows building CMake projects from Visual Studio with a Mac as remote target: https://developer.apple.com/documentation/TechnologyOverviews/buildi - Network accessline 116
- **Windowing**: Win32/HWND → NSWindow/UIWindow — see `setting-up-macos-window` skill - [Managing your game window for Metal in macOS](https://developer.apple.com/documentation/metal/managing-your-game-window-for-metal-in-macos?language=o - Network accessline 117
- [Managing your game window for Metal in macOS](https://developer.apple.com/documentation/metal/managing-your-game-window-for-metal-in-macos?language=objc) - Network accessline 118
- **Graphics**: DirectX/Vulkan/OpenGL → Metal 4 — see Metal 4 domain skills - **Shaders**: (HLSL → DXIL) → Metal IR via Metal shader converter - [Metal shader converter](https://developer.apple.com/metal/shader-converter/) - Network accessline 119
- **Shaders**: (HLSL → DXIL) → Metal IR via Metal shader converter - [Metal shader converter](https://developer.apple.com/metal/shader-converter/) - **Input**: XInput/DirectInput/Raw Input → GCController/GCMouse/GCKeyboard — see `using-ga - Network accessline 120
- [Metal shader converter](https://developer.apple.com/metal/shader-converter/) - Network accessline 122
- **Audio**: XAudio2/FMOD/Wwise → AVAudioEngine or platform-specific middleware build - FMOD and Wwise have Apple platform SDKs — check version compatibility - XAudio2 has no Apple equivalent; replace with AVAudioEngine: https://develop - Network accessline 123
- FMOD and Wwise have Apple platform SDKs — check version compatibility - XAudio2 has no Apple equivalent; replace with AVAudioEngine: https://developer.apple.com/documentation/avfaudio/avaudioengine?language=swift - **Threading**: Win32 - Network accessline 124
- XAudio2 has no Apple equivalent; replace with AVAudioEngine: https://developer.apple.com/documentation/avfaudio/avaudioengine?language=swift - Network accessline 127
- Scale thread count via `sysctl` (`hw.perflevel0.logicalcpu` / `hw.perflevel1.logicalcpu`) - Every thread touching Metal/ObjC must have `@autoreleasepool` - [Tune CPU job scheduling for Apple silicon games](https://developer.apple.com/ - Network accessline 128
- Every thread touching Metal/ObjC must have `@autoreleasepool` - [Tune CPU job scheduling for Apple silicon games](https://developer.apple.com/videos/play/tech-talks/110147/) - **File system**: backslashes → forward slashes, drive letter - Network accessline 129
- [Tune CPU job scheduling for Apple silicon games](https://developer.apple.com/videos/play/tech-talks/110147/)
game-porting-skills/skills/porting-discover/reference/gptk-and-traces.md
- Network accessline 7
- **Apple Games overview** — https://developer.apple.com/games/ - Network accessline 8
- **Game Porting Toolkit** — https://developer.apple.com/games/game-porting-toolkit/ - Network accessline 9
- **Metal documentation** — https://developer.apple.com/documentation/metal?language=objc - Network accessline 10
- **Metal sample code** — https://developer.apple.com/metal/sample-code/ - Network accessline 11
- **Metal developer tools** — https://developer.apple.com/metal/tools/
game-porting-skills/skills/presenting-metal-drawables/SKILL.md
- Network accessline 35
- QuartzCore framework headers - `$(xcrun --show-sdk-path)/System/Library/Frameworks/QuartzCore.framework/Headers/CAMetalLayer.h` — declares both `CAMetalLayer` and the `CAMetalDrawable` protocol - Apple documentation - [CAMetalLayer](https - Network accessline 36
- Apple documentation - [CAMetalLayer](https://developer.apple.com/documentation/quartzcore/cametallayer) - Network accessline 37
- Apple documentation - [Managing your game window for Metal in macOS](https://developer.apple.com/documentation/metal/managing-your-game-window-for-metal-in-macos) - Network accessline 38
- Apple documentation - [Metal Performance HUD](https://developer.apple.com/documentation/xcode/monitoring-your-metal-apps-graphics-performance)
game-porting-skills/skills/translating-to-metal4-api/SKILL.md
- Network accessline 33
- Metal SDK headers - `$(xcrun --show-sdk-path)/System/Library/Frameworks/Metal.framework/Headers/MTL4*.h` - metal-cpp headers (if using C++) - Metal 4 C++ wrappers live in the `MTL4/` subdirectory (e.g., `MTL4CommandBuffer.hpp`, `MTL4Compu - Network accessline 35
- Apple documentation - [Understanding the Metal 4 core API](https://developer.apple.com/documentation/metal/understanding-the-metal-4-core-api?language=objc) - Network accessline 509
**Reference:** Apple documentation - [Monitoring your Metal app's graphics performance](https://developer.apple.com/documentation/xcode/monitoring-your-metal-apps-graphics-performance) - Network accessline 523
- Apple documentation - [Validating your app's Metal API usage](https://developer.apple.com/documentation/xcode/validating-your-apps-metal-api-usage)
game-porting-skills/skills/translating-to-metal4-api/references/tbdr-architecture.md
- Network accessline 15
Tile size is not fixed — it is determined by the total tile memory available divided by the per-pixel memory cost of all render target attachments. Specifically: tile size in pixels is inversely proportional to the per-pixel attachment cost
game-porting-skills/skills/using-game-controller/SKILL.md
- Network accessline 44
# Devices (This file, "Controller Lifecycle") <GCDevice> https://developer.apple.com/documentation/gamecontroller/gcdevice - Network accessline 45
<GCDevice> https://developer.apple.com/documentation/gamecontroller/gcdevice - Network accessline 46
GCController https://developer.apple.com/documentation/gamecontroller/gccontroller - Network accessline 48
# Modern Physical Input (`reference/modern-input.md`) <GCDevicePhysicalInputState> https://developer.apple.com/documentation/gamecontroller/gcdevicephysicalinputstate - Network accessline 49
<GCDevicePhysicalInputState> https://developer.apple.com/documentation/gamecontroller/gcdevicephysicalinputstate - Network accessline 50
<GCDevicePhysicalInput> https://developer.apple.com/documentation/gamecontroller/gcdevicephysicalinput - Network accessline 51
<GCDevicePhysicalInputStateDiff> https://developer.apple.com/documentation/gamecontroller/gcdevicephysicalinputstatediff - Network accessline 52
<GCPhysicalInputSource> https://developer.apple.com/documentation/gamecontroller/gcphysicalinputsource - Network accessline 53
<GCPhysicalInputExtents> https://developer.apple.com/documentation/gamecontroller/gcphysicalinputextents - Network accessline 54
<GCPhysicalInputElementCollection> https://developer.apple.com/documentation/gamecontroller/gcphysicalinputelementcollection-c.class?language=objc - Network accessline 55
<GCPhysicalInputElement> https://developer.apple.com/documentation/gamecontroller/gcphysicalinputelement - Network accessline 56
<GCButtonElement> https://developer.apple.com/documentation/gamecontroller/gcbuttonelement - Network accessline 57
<GCAxisElement> https://developer.apple.com/documentation/gamecontroller/gcaxiselement - Network accessline 58
<GCSwitchElement> https://developer.apple.com/documentation/gamecontroller/gcswitchelement - Network accessline 59
<GCDirectionPadElement> https://developer.apple.com/documentation/gamecontroller/gcdirectionpadelement - Network accessline 60
<GCLinearInput> https://developer.apple.com/documentation/gamecontroller/gclinearinput - Network accessline 61
<GCAxisInput> https://developer.apple.com/documentation/gamecontroller/gcaxisinput - Network accessline 62
<GCAxis2DInput> https://developer.apple.com/documentation/gamecontroller/gcaxis2dinput - Network accessline 63
<GCRelativeInput> https://developer.apple.com/documentation/gamecontroller/gcrelativeinput - Network accessline 64
<GCPressedStateInput> https://developer.apple.com/documentation/gamecontroller/gcpressedstateinput - Network accessline 65
<GCTouchedStateInput> https://developer.apple.com/documentation/gamecontroller/gctouchedstateinput - Network accessline 66
<GCSwitchPositionInput> https://developer.apple.com/documentation/gamecontroller/gcswitchpositioninput - Network accessline 67
GCControllerInputState https://developer.apple.com/documentation/gamecontroller/gccontrollerinputstate - Network accessline 68
GCControllerLiveInput https://developer.apple.com/documentation/gamecontroller/gccontrollerliveinput - Network accessline 70
# Profile-based Physical Input (`reference/profile-based-input.md`) GCPhysicalInputProfile https://developer.apple.com/documentation/gamecontroller/gcphysicalinputprofile - Network accessline 71
GCPhysicalInputProfile https://developer.apple.com/documentation/gamecontroller/gcphysicalinputprofile - Network accessline 72
GCMicroGamepad https://developer.apple.com/documentation/gamecontroller/gcmicrogamepad - Network accessline 73
GCDirectionalGamepad https://developer.apple.com/documentation/gamecontroller/gcdirectionalgamepad - Network accessline 74
GCGamepad https://developer.apple.com/documentation/gamecontroller/gcgamepad - Network accessline 75
GCExtendedGamepad https://developer.apple.com/documentation/gamecontroller/gcextendedgamepad - Network accessline 76
GCXboxGamepad https://developer.apple.com/documentation/gamecontroller/gcxboxgamepad - Network accessline 77
GCDualShockGamepad https://developer.apple.com/documentation/gamecontroller/gcdualshockgamepad - Network accessline 78
GCDualSenseGamepad https://developer.apple.com/documentation/gamecontroller/gcdualsensegamepad - Network accessline 79
GCControllerElement (aliased to GCDeviceElement) https://developer.apple.com/documentation/gamecontroller/gccontrollerelement - Network accessline 80
GCControllerButtonInput (aliased to GCDeviceButtonInput) https://developer.apple.com/documentation/gamecontroller/gccontrollerbuttoninput - Network accessline 81
GCControllerAxisInput (aliased to GCDeviceAxisInput) https://developer.apple.com/documentation/gamecontroller/gccontrolleraxisinput - Network accessline 82
GCControllerDirectionPad (aliased to GCDeviceDirectionPad) https://developer.apple.com/documentation/gamecontroller/gccontrollerdirectionpad - Network accessline 83
GCControllerTouchpad (aliased to GCDeviceTouchpad) https://developer.apple.com/documentation/gamecontroller/gccontrollertouchpad - Network accessline 84
GCDualSenseAdaptiveTrigger https://developer.apple.com/documentation/gamecontroller/gcdualsenseadaptivetrigger
game-porting-skills/skills/using-gpucapture/SKILL.md
- Network accessline 20
- **Can modify source code →** Programmatic capture via `MTLCaptureManager`: [Capturing a Metal workload programmatically](https://developer.apple.com/documentation/xcode/capturing-a-metal-workload-programmatically) - Network accessline 21
- **Has Xcode available →** Xcode's built-in GPU Frame Capture: [Capturing a Metal workload in Xcode](https://developer.apple.com/documentation/xcode/capturing-a-metal-workload-in-xcode)
game-porting-skills/skills/using-gpudebug/SKILL.md
- Network accessline 18
`gpudebug` ships with macOS 27 and later. If not found, tell the user it is not available and suggest opening the `.gputrace` in Xcode's Metal Debugger instead: [Analyzing your Metal workload](https://developer.apple.com/documentation/Xcode
game-porting-skills/skills/using-metalfx-temporal-upscaler/SKILL.md
- Network accessline 181
1. **Consult Apple's reference.** [Applying Temporal Antialiasing and Upscaling Using MetalFX](https://developer.apple.com/documentation/metalfx/applying-temporal-antialiasing-and-upscaling-using-metalfx) — `AAPLRenderer.swift` and `Shaders
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Signal confidence: 84 facts
- Network access in prose of the SKILL.mdcompiling-with-metal-shaderconverter/SKILL.md:34Low confidence
- Network access in prose of documentationcompiling-with-metal-shaderconverter/references/hlsl-metal-extensions.md:53Low confidence
- Network access in prose of the SKILL.mdcreating-metal4-shader-pipelines/SKILL.md:19Low confidence
- Network access in prose of the SKILL.mdcreating-metal4-shader-pipelines/SKILL.md:20Low confidence
- Network access in prose of documentationintegrating-metal-shaderconverter-shaders/references/vertex-pipelines.md:15Low confidence
- Network access in prose of the SKILL.mdmanaging-metal-cpp-lifetimes/SKILL.md:101Low confidence
- Network access in prose of the SKILL.mdmanaging-metal-cpp-lifetimes/SKILL.md:102Low confidence
- Network access in prose of the SKILL.mdmanaging-metal-cpp-lifetimes/SKILL.md:103Low confidence
- Network access in prose of the SKILL.mdmanaging-metal4-resources/SKILL.md:34Low confidence
- Network access in prose of the SKILL.mdmanaging-metal4-resources/SKILL.md:35Low confidence
- Network access in prose of the SKILL.mdmanaging-metal4-resources/SKILL.md:36Low confidence
- Network access in prose of the SKILL.mdmanaging-metal4-synchronization/SKILL.md:18Low confidence
- Network access in prose of the SKILL.mdmanaging-metal4-synchronization/SKILL.md:19Low confidence
- Network access in prose of documentationporting-discover/reference/codebase-analysis.md:9Low confidence
- Network access in prose of documentationporting-discover/reference/codebase-analysis.md:10Low confidence
- Network access in prose of documentationporting-discover/reference/codebase-analysis.md:11Low confidence
- Network access in prose of documentationporting-discover/reference/codebase-analysis.md:116Low confidence
- Network access in prose of documentationporting-discover/reference/codebase-analysis.md:117Low confidence
- Network access in prose of documentationporting-discover/reference/codebase-analysis.md:118Low confidence
- Network access in prose of documentationporting-discover/reference/codebase-analysis.md:119Low confidence
- Network access in prose of documentationporting-discover/reference/codebase-analysis.md:120Low confidence
- Network access in prose of documentationporting-discover/reference/codebase-analysis.md:122Low confidence
- Network access in prose of documentationporting-discover/reference/codebase-analysis.md:123Low confidence
- Network access in prose of documentationporting-discover/reference/codebase-analysis.md:124Low confidence
- Network access in prose of documentationporting-discover/reference/codebase-analysis.md:127Low confidence
- Network access in prose of documentationporting-discover/reference/codebase-analysis.md:128Low confidence
- Network access in prose of documentationporting-discover/reference/codebase-analysis.md:129Low confidence
- Network access in prose of documentationporting-discover/reference/gptk-and-traces.md:7Low confidence
- Network access in prose of documentationporting-discover/reference/gptk-and-traces.md:8Low confidence
- Network access in prose of documentationporting-discover/reference/gptk-and-traces.md:9Low confidence
- Network access in prose of documentationporting-discover/reference/gptk-and-traces.md:10Low confidence
- Network access in prose of documentationporting-discover/reference/gptk-and-traces.md:11Low confidence
- Network access in prose of the SKILL.mdpresenting-metal-drawables/SKILL.md:35Low confidence
- Network access in prose of the SKILL.mdpresenting-metal-drawables/SKILL.md:36Low confidence
- Network access in prose of the SKILL.mdpresenting-metal-drawables/SKILL.md:37Low confidence
- Network access in prose of the SKILL.mdpresenting-metal-drawables/SKILL.md:38Low confidence
- Network access in prose of the SKILL.mdtranslating-to-metal4-api/SKILL.md:33Low confidence
- Network access in prose of the SKILL.mdtranslating-to-metal4-api/SKILL.md:35Low confidence
- Network access in prose of the SKILL.mdtranslating-to-metal4-api/SKILL.md:509Low confidence
- Network access in prose of the SKILL.mdtranslating-to-metal4-api/SKILL.md:523Low confidence
- Network access in prose of documentationtranslating-to-metal4-api/references/tbdr-architecture.md:15Low confidence
- Network access in code of the SKILL.mdusing-game-controller/SKILL.md:44High confidence
- Network access in code of the SKILL.mdusing-game-controller/SKILL.md:45High confidence
- Network access in code of the SKILL.mdusing-game-controller/SKILL.md:46High confidence
- Network access in code of the SKILL.mdusing-game-controller/SKILL.md:48High confidence
- Network access in code of the SKILL.mdusing-game-controller/SKILL.md:49High confidence
- Network access in code of the SKILL.mdusing-game-controller/SKILL.md:50High confidence
- Network access in code of the SKILL.mdusing-game-controller/SKILL.md:51High confidence
- Network access in code of the SKILL.mdusing-game-controller/SKILL.md:52High confidence
- Network access in code of the SKILL.mdusing-game-controller/SKILL.md:53High confidence
and 34 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md game-porting-skills/skills/compiling-with-metal-shaderconverter/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md game-porting-skills/skills/compiling-with-metal-shaderconverter/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Native | Manifest game-porting-skills/gemini-extension.json | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md game-porting-skills/skills/compiling-with-metal-shaderconverter/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md game-porting-skills/skills/compiling-with-metal-shaderconverter/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.