/ Directory / Playground / Swift Concurrency Migration Skill
● Community kylehughes ⚡ Instant

Swift Concurrency Migration Skill

by kylehughes · kylehughes/the-unofficial-swift-concurrency-migration-skill

Ship Swift 6 concurrency with confidence — Apple's official migration guide loaded into Claude as a skill, so agents quote the actual documentation.

This skill packages Apple's Swift Concurrency Migration Guide (articles + code samples) into a SKILL.md/resources bundle so Claude Code, Claude Desktop, and compatible clients can cite the guide precisely when converting legacy callback/DispatchQueue code to async/await, actors, and strict concurrency. Useful for Swift 6 / strict-concurrency migrations where getting the right isolation boundaries is the whole game.

Why use it

Key features

Live Demo

What it looks like in practice

swift-concurrency-migration-skill.replay ▶ ready
0/0

Install

Pick your client

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "swift-concurrency-migration-skill": {
      "command": "claude",
      "args": [
        "plugin",
        "marketplace",
        "add",
        "kylehughes/the-unofficial-swift-concurrency-migration-skill"
      ],
      "_inferred": false
    }
  }
}

Open Claude Desktop → Settings → Developer → Edit Config. Restart after saving.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "swift-concurrency-migration-skill": {
      "command": "claude",
      "args": [
        "plugin",
        "marketplace",
        "add",
        "kylehughes/the-unofficial-swift-concurrency-migration-skill"
      ],
      "_inferred": false
    }
  }
}

Cursor uses the same mcpServers schema as Claude Desktop. Project config wins over global.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "swift-concurrency-migration-skill": {
      "command": "claude",
      "args": [
        "plugin",
        "marketplace",
        "add",
        "kylehughes/the-unofficial-swift-concurrency-migration-skill"
      ],
      "_inferred": false
    }
  }
}

Click the MCP Servers icon in the Cline sidebar, then "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "swift-concurrency-migration-skill": {
      "command": "claude",
      "args": [
        "plugin",
        "marketplace",
        "add",
        "kylehughes/the-unofficial-swift-concurrency-migration-skill"
      ],
      "_inferred": false
    }
  }
}

Same shape as Claude Desktop. Restart Windsurf to pick up changes.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "swift-concurrency-migration-skill",
      "command": "claude",
      "args": [
        "plugin",
        "marketplace",
        "add",
        "kylehughes/the-unofficial-swift-concurrency-migration-skill"
      ]
    }
  ]
}

Continue uses an array of server objects rather than a map.

~/.config/zed/settings.json
{
  "context_servers": {
    "swift-concurrency-migration-skill": {
      "command": {
        "path": "claude",
        "args": [
          "plugin",
          "marketplace",
          "add",
          "kylehughes/the-unofficial-swift-concurrency-migration-skill"
        ]
      }
    }
  }
}

Add to context_servers. Zed hot-reloads on save.

claude mcp add swift-concurrency-migration-skill -- claude plugin marketplace add kylehughes/the-unofficial-swift-concurrency-migration-skill

One-liner. Verify with claude mcp list. Remove with claude mcp remove.

Use Cases

Real-world ways to use Swift Concurrency Migration Skill

Convert a DispatchQueue-heavy module to async/await

👤 iOS/macOS engineers modernizing a legacy codebase ⏱ ~90 min advanced

When to use: You own a module mixing DispatchQueue, completion handlers, and @escaping closures; you want async/await.

Prerequisites
  • Xcode with Swift 5.9+ (Swift 6 mode if you want strict concurrency) — Install Xcode from App Store
  • Skill installed — /plugin marketplace add kylehughes/the-unofficial-swift-concurrency-migration-skill
Flow
  1. Ask for a migration plan
    Walk me through migrating NetworkService.swift to async/await, citing the Swift Concurrency Migration Guide.✓ Copied
    → Plan references named articles in the guide
  2. Apply step by step
    Start with the public API surface — convert completion-handler methods to async/await.✓ Copied
    → Code uses idiomatic async APIs, not wrapper callbacks
  3. Handle cancellation and isolation
    Add Task cancellation and decide actor isolation for the cache.✓ Copied
    → Proper Task.checkCancellation + explicit actor isolation

Outcome: Module migrated cleanly with reasoning tied to Apple's own guidance.

Pitfalls
  • Wrapping callbacks in withCheckedContinuation without fixing ownership — Migrate the root API first; don't leave continuations as permanent bridges

Audit a codebase for Sendable conformance warnings

👤 Teams turning on Swift 6 strict-concurrency checking ⏱ ~60 min advanced

When to use: You flipped the language mode and now the compiler is screaming.

Flow
  1. Cluster the warnings
    Group the Sendable warnings in this build log by category (value type, class, closure capture).✓ Copied
    → Clear buckets with typical fixes from the guide
  2. Apply canonical fixes
    For each bucket, apply the fix from the Swift Concurrency Migration Guide; explain tradeoffs.✓ Copied
    → Fixes cite @unchecked Sendable only where justified

Outcome: A Swift 6 build that compiles with documented reasoning for each choice.

Pitfalls
  • Using @unchecked Sendable as a silencer — The guide explicitly warns against this — reserve for boxed legacy APIs with documented thread-safety
Combine with: xcodebuild

Decide where to introduce actors vs GlobalActor

👤 Architects drawing isolation boundaries ⏱ ~30 min intermediate

When to use: You're modeling shared state and not sure which actor flavor fits.

Flow
  1. Describe the state
    State description: <cache of user profiles; read-heavy, write every 5 min>.✓ Copied
    → Skill references the actor / GlobalActor sections of the guide
  2. Get the recommendation
    Recommend actor vs GlobalActor with citations.✓ Copied
    → Recommendation grounded in guide sections, not generic best practice

Outcome: Isolation model you can defend in review.

Combine with: jetpack-compose-skill

Combinations

Pair with other MCPs for X10 leverage

swift-concurrency-migration-skill + xcodebuild

Iterate: migrate → build → fix warnings → repeat

After each edit, run xcodebuild and feed the Swift 6 warnings back to the skill.✓ Copied
swift-concurrency-migration-skill + the-unofficial-swift-programming-language-skill

General Swift language questions alongside concurrency-specific guidance

Explain generic-parameter packs; then apply in the concurrency migration.✓ Copied
swift-concurrency-migration-skill + jetpack-compose-skill

Contrast Android Compose coroutines with Swift concurrency when doing cross-platform work

Our iOS team uses async/await; Android team uses coroutines. Align the concurrency patterns for the shared API layer.✓ Copied

Tools

What this MCP exposes

ToolInputsWhen to callCost
migrating-to-swift-concurrency (SKILL) natural-language code questions Whenever you're touching Swift concurrency and want authoritative answers 0

Cost & Limits

What this costs to run

API quota
None
Tokens per call
Depends on how much of the guide gets loaded; scope questions narrowly
Monetary
Free
Tip
Ask precise questions (name the file, name the warning) so the skill loads only the relevant sections.

Security

Permissions, secrets, blast radius

Credential storage: No credentials
Data egress: None — content is bundled locally

Troubleshooting

Common errors and fixes

Skill doesn't activate

Check the SKILL.md description — that's what triggers it. Also ensure you're running Claude Code or an Agent Skill-compatible client.

Verify: head ~/.claude/skills/migrating-to-swift-concurrency-skill/SKILL.md
Answers feel generic, not citing sections

Prompt explicitly: 'cite the Swift Concurrency Migration Guide section'. The skill has the text — make it use it.

Install fails via /plugin

Update Claude Code to a version that supports /plugin marketplace. Alternatively, download the release ZIP.

Verify: claude --version

Alternatives

Swift Concurrency Migration Skill vs others

AlternativeWhen to use it insteadTradeoff
the-unofficial-swift-programming-language-skillYou want the Swift language book, not the concurrency guideBroader, less migration-focused
xcodebuildYou want to automate builds/tests, not migrate codeOrthogonal tooling

More

Resources

📖 Read the official README on GitHub

🐙 Browse open issues

🔍 Browse all 400+ MCP servers and Skills