/offline-queue
Generates an offline operation queue with persistence, automatic retry on connectivity, and conflict resolution. Use when user needs offline-first behavior, queued mutations, or pending operations that sync when back online.
$ npx -y skills add rshankras/claude-code-apple-skills --skill offline-queue --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/offline-queue
Context preview
The summary Claude sees to decide when to auto-load this skill.
Generates an offline operation queue with persistence, automatic retry on connectivity, and conflict resolution. Use when user needs offline-first behavior, queued mutations, or pending operations that sync when back online.
SKILL.md
offline-queue.SKILL.mdname: offline-queue
description: Generates an offline operation queue with persistence, automatic retry on connectivity, and conflict resolution. Use when user needs offline-first behavior, queued mutations, or pending operations that sync when back online.
allowed-tools: [Read, Write, Edit, Glob, Grep, Bash, AskUserQuestion]
last_verified: 2026-07-16
review_by: 2027-06-22
os_version: iOS 27 / macOS 27
Offline Queue Generator
Generate a production offline operation queue that persists API requests/mutations when offline, stores them to disk, and retries with exponential backoff when connectivity returns. Essential for apps that need offline-first behavior.
When This Skill Activates
Use this skill when the user:
- Asks to "add offline queue" or "offline support"
- Wants to "queue requests" when there is no network
- Mentions "offline first" architecture or design
- Asks about "retry when online" or "retry on reconnect"
- Wants "pending operations" that sync later
- Mentions "offline mutations" or "queue API calls"
Pre-Generation Checks
1. Project Context Detection
- [ ] Check Swift version (requires Swift 5.9+)
- [ ] Check deployment target (iOS 16+ / macOS 13+)
- [ ] Check for @Observable support (iOS 17+ / macOS 14+)
- [ ] Identify source file locations
2. Conflict Detection
Search for existing networking/offline code:
Glob: **/*OfflineQueue*.swift, **/*OfflineOperation*.swift, **/*NetworkMonitor*.swift, **/*RetryPolicy*.swift
Grep: "NWPathMonitor" or "OfflineQueue" or "pendingOperations" or "offlineQueue"
If existing offline handling found:
- Ask if user wants to replace or extend it
- If extending, adapt generated code to existing patterns
3. Framework Availability
Check for Network framework availability (required for NWPathMonitor). Available on iOS 12+ / macOS 10.14+, so effectively always available for our iOS 16+ / macOS 13+ targets.
Configuration Questions
Ask user via AskUserQuestion:
1. **Operation types?**
- API calls only (JSON requests/responses)
- File uploads only (multipart data)
- Both API calls and file uploads
2. **Persistence strategy?**
- SwiftData (iOS 17+ / macOS 14+) — structured queries, migration support
- File-based (JSON files in app support) — simpler, wider compatibility — recommended
3. **Retry strategy?**
- Exponential backoff with jitter — recommended (prevents thundering herd)
- Linear backoff (fixed interval between retries)
- Immediate (retry as soon as connectivity returns, no delay)
4. **Conflict resolution?**
- Server wins (discard client changes on conflict)
- Client wins (overwrite server data on conflict)
- Manual merge (surface conflicts to the user for resolution)
Generation Process
Step 1: Read Templates
Read `patterns.md` for architecture guidance and conflict resolution strategies. Read `templates.md` for production Swift code.
Step 2: Create Core Files
Generate these files: 1. `OfflineOperation.swift` — Codable model for queued operations 2. `OfflineQueueManager.swift` — Actor managing enqueue, dequeue, process, retry 3. `QueuePersistence.swift` — Protocol + file-based implementation for saving operations 4. `NetworkMonitor.swift` — @Observable wrapper around NWPathMonitor
Step 3: Create Policy Files
5. `RetryPolicy.swift` — Configurable backoff strategy with jitter
Step 4: Create UI Files
6. `OfflineQueueDashboardView.swift` — Debug view showing queue state and manual controls 7. `OfflineQueueModifier.swift` — ViewModifier showing "Offline" banner when disconnected
Step 5: Determine File Location
Check project structure:
- If `Sources/` exists → `Sources/OfflineQueue/`
- If `App/` exists → `App/OfflineQueue/`
- Otherwise → `OfflineQueue/`
Output Format
After generation, provide:
Files Created
OfflineQueue/
├── OfflineOperation.swift # Codable operation model
├── OfflineQueueManager.swift # Actor-based queue manager
├── QueuePersistence.swift # Protocol + file-based persistence
├── NetworkMonitor.swift # NWPathMonitor wrapper
├── RetryPolicy.swift # Exponential backoff with jitter
├── OfflineQueueDashboardView.swift # Debug dashboard view
└── OfflineQueueModifier.swift # Offline banner modifier
Integration with Networking Layer
**Enqueue an operation when offline:**
// In your networking layer or repository
func createPost(_ post: Post) async throws {
guard networkMonitor.isConnected else {
let operation = OfflineOperation(
endpoint: "/api/posts",
httpMethod: .post,
body: try JSONEncoder().encode(post),
headers: ["Content-Type": "application/json"]
)
await queueManager.enqueue(operation)
return
}
// Normal online request
try await apiClient.post("/api/posts", body: post)
}**Transparent offline support with a wrapper:**
func performOrQueue<T: Codable>(
endpoint: String,
method: HTTPMethod,
body: T
) async throws {
let data = try JSONEncoder().encode(body)
if networkMonitor.isConnected {
try await apiClient.request(endpoint: endpoint, method: method, body: data)
} else {
let operation = OfflineOperation(
endpoint: endpoint,
httpMethod: method,
body: data
)
await queueManager.enqueue(operation)
}
}**Show offline banner in your app:**
struct ContentView: View {
var body: some View {
NavigationStack {
FeedView()
}
.offlineQueueBanner() // Shows "Offline — changes will sync" when disconnected
}
}**Add dashboard for debugging:**
#if DEBUG
NavigationLink("Offline Queue") {
OfflineQueueDashboardView()
}
#endifTesting
@Test
func operationEnqueuedWhenOffline() async throws {
let persistence = MockQueuePersistence()
let monitor = MockNetworkMoRead more
name: offline-queue description: Generates an offline operation queue with persistence, automatic retry on connectivity, and conflict resolution. Use when user needs offline-first behavior, queued mutations, or pending operations that sync when back online. allowed-tools: [Read, Write, Edit, Glob, Grep, Bash, AskUserQuestion] last_verified: 2026-07-16 review_by: 2027-06-22 os_version: iOS 27 / macOS 27
Offline Queue Generator
Generate a production offline operation queue that persists API requests/mutations when offline, stores them to disk, and retries with exponential backoff when connectivity returns. Essential for apps that need offline-first behavior.
When This Skill Activates
Use this skill when the user:
- Asks to "add offline queue" or "offline support"
- Wants to "queue requests" when there is no network
- Mentions "offline first" architecture or design
- Asks about "retry when online" or "retry on reconnect"
- Wants "pending operations" that sync later
- Mentions "offline mutations" or "queue API calls"
Pre-Generation Checks
1. Project Context Detection
- [ ] Check Swift version (requires Swift 5.9+)
- [ ] Check deployment target (iOS 16+ / macOS 13+)
- [ ] Check for @Observable support (iOS 17+ / macOS 14+)
- [ ] Identify source file locations
2. Conflict Detection
Search for existing networking/offline code:
Glob: **/*OfflineQueue*.swift, **/*OfflineOperation*.swift, **/*NetworkMonitor*.swift, **/*RetryPolicy*.swift Grep: "NWPathMonitor" or "OfflineQueue" or "pendingOperations" or "offlineQueue"
If existing offline handling found:
- Ask if user wants to replace or extend it
- If extending, adapt generated code to existing patterns
3. Framework Availability
Check for Network framework availability (required for NWPathMonitor). Available on iOS 12+ / macOS 10.14+, so effectively always available for our iOS 16+ / macOS 13+ targets.
Configuration Questions
Ask user via AskUserQuestion:
1. **Operation types?**
- API calls only (JSON requests/responses)
- File uploads only (multipart data)
- Both API calls and file uploads
2. **Persistence strategy?**
- SwiftData (iOS 17+ / macOS 14+) — structured queries, migration support
- File-based (JSON files in app support) — simpler, wider compatibility — recommended
3. **Retry strategy?**
- Exponential backoff with jitter — recommended (prevents thundering herd)
- Linear backoff (fixed interval between retries)
- Immediate (retry as soon as connectivity returns, no delay)
4. **Conflict resolution?**
- Server wins (discard client changes on conflict)
- Client wins (overwrite server data on conflict)
- Manual merge (surface conflicts to the user for resolution)
Generation Process
Step 1: Read Templates
Read `patterns.md` for architecture guidance and conflict resolution strategies. Read `templates.md` for production Swift code.
Step 2: Create Core Files
Generate these files: 1. `OfflineOperation.swift` — Codable model for queued operations 2. `OfflineQueueManager.swift` — Actor managing enqueue, dequeue, process, retry 3. `QueuePersistence.swift` — Protocol + file-based implementation for saving operations 4. `NetworkMonitor.swift` — @Observable wrapper around NWPathMonitor
Step 3: Create Policy Files
5. `RetryPolicy.swift` — Configurable backoff strategy with jitter
Step 4: Create UI Files
6. `OfflineQueueDashboardView.swift` — Debug view showing queue state and manual controls 7. `OfflineQueueModifier.swift` — ViewModifier showing "Offline" banner when disconnected
Step 5: Determine File Location
Check project structure:
- If `Sources/` exists → `Sources/OfflineQueue/`
- If `App/` exists → `App/OfflineQueue/`
- Otherwise → `OfflineQueue/`
Output Format
After generation, provide:
Files Created
OfflineQueue/ ├── OfflineOperation.swift # Codable operation model ├── OfflineQueueManager.swift # Actor-based queue manager ├── QueuePersistence.swift # Protocol + file-based persistence ├── NetworkMonitor.swift # NWPathMonitor wrapper ├── RetryPolicy.swift # Exponential backoff with jitter ├── OfflineQueueDashboardView.swift # Debug dashboard view └── OfflineQueueModifier.swift # Offline banner modifier
Integration with Networking Layer
**Enqueue an operation when offline:**
// In your networking layer or repository
func createPost(_ post: Post) async throws {
guard networkMonitor.isConnected else {
let operation = OfflineOperation(
endpoint: "/api/posts",
httpMethod: .post,
body: try JSONEncoder().encode(post),
headers: ["Content-Type": "application/json"]
)
await queueManager.enqueue(operation)
return
}
// Normal online request
try await apiClient.post("/api/posts", body: post)
}**Transparent offline support with a wrapper:**
func performOrQueue<T: Codable>(
endpoint: String,
method: HTTPMethod,
body: T
) async throws {
let data = try JSONEncoder().encode(body)
if networkMonitor.isConnected {
try await apiClient.request(endpoint: endpoint, method: method, body: data)
} else {
let operation = OfflineOperation(
endpoint: endpoint,
httpMethod: method,
body: data
)
await queueManager.enqueue(operation)
}
}**Show offline banner in your app:**
struct ContentView: View {
var body: some View {
NavigationStack {
FeedView()
}
.offlineQueueBanner() // Shows "Offline — changes will sync" when disconnected
}
}**Add dashboard for debugging:**
#if DEBUG
NavigationLink("Offline Queue") {
OfflineQueueDashboardView()
}
#endifTesting
@Test
func operationEnqueuedWhenOffline() async throws {
let persistence = MockQueuePersistence()
let monitor = MockNetworkMoA collection of Claude Code skills for iOS, macOS, watchOS, visionOS, and Apple platform development. These skills help you plan and build apps, maintain code quality, ensure HIG compliance, and guide you from idea to App Store.
Repo: rshankras/claude-code-apple-skills
Other skills on rshankras-apple-skills.
- /app-store
App Store optimization and marketing skills for descriptions, screenshots, keywords, review responses, and comprehensive promotional strategy. Use when user needs help with App Store presence, ASO, marketing, or customer communication.
Open skill - /ad-attribution
Privacy-preserving ad measurement with AdAttributionKit (SKAdNetwork's successor) — install and re-engagement attribution, conversion-value strategy under crowd anonymity, and end-to-end postback testing. Use when running paid acquisition beyond Apple Ads, measuring
Open skill - /app-description-writer
Generate compelling App Store descriptions that convert browsers into users. Use when writing initial descriptions, improving existing copy, or drafting promotional text and What's New for a major update.
Open skill - /apple-search-ads
Apple Search Ads campaign strategy for indie developers — paid acquisition, keyword bidding, budget planning, and ROAS optimization. Use when user asks about running ads, paid user acquisition, or Apple Search Ads campaigns.
Open skill - /iap-finalizer
Take a one-time in-app purchase from MISSING_METADATA to READY_TO_SUBMIT in App Store Connect — set its price schedule and localized display name/description (and optional review screenshot) via the ASC REST API. Use at Phase 6 (Pre-Release), after the IAP is built in-app (Phase
Open skill - /keyword-optimizer
Optimize app title, subtitle, and keywords for maximum App Store discoverability. Use when launching a new app, improving search rankings, entering new markets/languages, or safely optimizing ASO for an app with existing traffic.
Open skill

