Productivity

swift-concurrency-expert

dimillian/skills · updated Apr 8, 2026

$npx skills add https://github.com/dimillian/skills --skill swift-concurrency-expert
summary

Swift Concurrency review and remediation for Swift 6.2+ codebases.

  • Diagnoses and fixes actor isolation, Sendable safety, and data-race warnings through targeted edits that preserve existing behavior
  • Applies minimal, concrete fixes: @MainActor annotations, actor isolation, Sendable conformance, and completion-handler-to-async/await migrations
  • Triages compiler diagnostics by checking project concurrency settings, actor context, and whether code is UI-bound or background work
  • Verifie
skill.md

Swift Concurrency Expert

Overview

Review and fix Swift Concurrency issues in Swift 6.2+ codebases by applying actor isolation, Sendable safety, and modern concurrency patterns with minimal behavior changes.

Workflow

1. Triage the issue

  • Capture the exact compiler diagnostics and the offending symbol(s).
  • Check project concurrency settings: Swift language version (6.2+), strict concurrency level, and whether approachable concurrency (default actor isolation / main-actor-by-default) is enabled.
  • Identify the current actor context (@MainActor, actor, nonisolated) and whether a default actor isolation mode is enabled.
  • Confirm whether the code is UI-bound or intended to run off the main actor.

2. Apply the smallest safe fix

Prefer edits that preserve existing behavior while satisfying data-race safety.

Common fixes:

  • UI-bound types: annotate the type or relevant members with @MainActor.
  • Protocol conformance on main actor types: make the conformance isolated (e.g., extension Foo: @MainActor SomeProtocol).
  • Global/static state: protect with @MainActor or move into an actor.
  • Background work: move expensive work into a @concurrent async function on a nonisolated type or use an actor to guard mutable state.
  • Sendable errors: prefer immutable/value types; add Sendable conformance only when correct; avoid @unchecked Sendable unless you can prove thread safety.

3. Verify the fix

  • Rebuild and confirm all concurrency diagnostics are resolved with no new warnings introduced.
  • Run the test suite to check for regressions — concurrency changes can introduce subtle runtime issues even when the build is clean.
  • If the fix surfaces new warnings, treat each one as a fresh triage (return to step 1) and resolve iteratively until the build is clean and tests pass.

Examples

UI-bound type — adding @MainActor

// Before: data-race warning because ViewModel is accessed from the main thread
// but has no actor isolation
class ViewModel: ObservableObject {
    @Published var title: String = ""
    func load() { title = "Loaded" }
}

// After: annotate the whole type so all stored state and methods are
// automatically isolated to the main actor
@MainActor
class ViewModel: ObservableObject {
    @Published var title: String = ""
    func load() { title = "Loaded" }
}

Protocol conformance isolation

// Before: compiler error — SomeProtocol method is nonisolated but the
// conforming type is @MainActor
@MainActor
class Foo: SomeProtocol {
    func protocolMethod() { /* accesses main-actor state */ }
}

// After: scope the conformance to @MainActor so the requirement is
// satisfied inside the correct isolation context
@MainActor
extension Foo: SomeProtocol {
    func protocolMethod() { /* safely accesses main-actor state */ }
}

Background work with @concurrent

// Before: expensive computation blocks the main actor
@MainActor
func processData(_ input: [Int]) -> [Int] {
    input.map { heavyTransform($0) }   // runs on main thread
}

// After: hop off the main actor for the heavy work, then return the result
// The caller awaits the result and stays on its own actor
nonisolated func processData(_ input: [Int]) async -> [Int] {
    await Task.detached(priority: .userInitiated) {
        input.map { heavyTransform($0) }
    }.value
}

// Or, using a @concurrent async function (Swift 6.2+):
@concurrent
func processData(_ input: [Int]) async -> [Int] {
    input.map { heavyTransform($0) }
}

Reference material

  • See references/swift-6-2-concurrency.md for Swift 6.2 changes, patterns, and examples.
  • See references/approachable-concurrency.md when the project is opted into approachable concurrency mode.
  • See references/swiftui-concurrency-tour-wwdc.md for SwiftUI-specific concurrency guidance.
general reviews

Ratings

4.546 reviews
  • Harper Jackson· Dec 28, 2024

    Keeps context tight: swift-concurrency-expert is the kind of skill you can hand to a new teammate without a long onboarding doc.

  • Aisha Rao· Dec 16, 2024

    Solid pick for teams standardizing on skills: swift-concurrency-expert is focused, and the summary matches what you get after install.

  • Hassan Gonzalez· Dec 16, 2024

    We added swift-concurrency-expert from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Chaitanya Patil· Dec 12, 2024

    We added swift-concurrency-expert from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Daniel Abebe· Nov 11, 2024

    I recommend swift-concurrency-expert for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.

  • Yusuf Lopez· Nov 7, 2024

    swift-concurrency-expert has been reliable in day-to-day use. Documentation quality is above average for community skills.

  • Harper Lopez· Nov 7, 2024

    Useful defaults in swift-concurrency-expert — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

  • Piyush G· Nov 3, 2024

    Useful defaults in swift-concurrency-expert — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

  • Yusuf Haddad· Oct 26, 2024

    swift-concurrency-expert fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.

  • Noor Gonzalez· Oct 26, 2024

    Registry listing for swift-concurrency-expert matched our evaluation — installs cleanly and behaves as described in the markdown.

showing 1-10 of 46

1 / 5