swift-style — Claude Code skill: Swift style and installation
This skill gives an AI agent conventions for naming, formatting, and organizing Swift code. Use it when adding code or cleaning up an existing Swift file.
npx skills add johnrogers/claude-swift-engineering --skill swift-style -a claude-codeWhat swift-style does
The guide sets naming rules for Swift types and other identifiers, and favors descriptive words over abbreviations; URL, ID, and UUID are exceptions. It also recommends keeping the main execution path unindented with guard checks, and arranging related code in extensions with MARK comments.
Other sections cover whitespace, self, computed properties, closures, type inference, access control, and memory management. Comments should explain why a choice was made rather than restate the implementation. The guide says code should compile without warnings, so warning-producing edits conflict with its stated standard.
What it helps with
- align Swift type and variable names with the guide
- replace nested conditionals with early exits and
guard - group implementations into extensions and
MARKsections - review
selfusage and access modifiers
Example prompts for the agent
- Apply the
swift-styleconventions to this Swift file. - Check this Swift code for naming and nesting issues covered by the skill.
- Reorganize this type's methods and extensions using the
swift-stylerules.
How to install swift-style
1Skills CLI (Vercel)
npx skills add johnrogers/claude-swift-engineering --skill swift-style -a claude-code2Manually: put the files in place
~/.claude/skills/swift-style/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/swift-style/
1Skills CLI (Vercel)
npx skills add johnrogers/claude-swift-engineering --skill swift-style -a codex2Manually: put the files in place
.agents/skills/swift-style/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add johnrogers/claude-swift-engineering --skill swift-style -a cursor2Manually: put the files in place
.cursor/skills/swift-style/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install johnrogers/claude-swift-engineering swift-style2Manually: put the files in place
.github/skills/swift-style/SKILL.md1Skills CLI (Vercel)
npx skills add johnrogers/claude-swift-engineering --skill swift-style -a gemini-cli2Platform CLI
gemini skills install https://github.com/johnrogers/claude-swift-engineering --path plugins/swift-engineering/skills/swift-styleManually: put the files in place
.devin/skills/swift-style/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add johnrogers/claude-swift-engineering --skill swift-style -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about swift-style
How do I install swift-style in Claude Code?
Run npx skills add johnrogers/claude-swift-engineering --skill swift-style -a claude-code. The skill file is placed at ~/.claude/skills/swift-style/SKILL.md.
What does swift-style do?
It gives an agent conventions for Swift naming, formatting, control flow, code organization, and access control.
Which abbreviations does swift-style allow?
The guide favors fully spelled-out names and permits URL, ID, and UUID as exceptions. It also recommends consistent handling of self.
Source text
SKILL.md · MIT
---
name: swift-style
description: Swift code style conventions for clean, readable code. Use when writing Swift code to ensure consistent formatting, naming, organization, and idiomatic patterns.
---
# Swift Style Guide
Code style conventions for clean, readable Swift code.
## Core Principles
**Clarity > Brevity > Consistency**
Code should compile without warnings.
## Naming
- `UpperCamelCase` — Types, protocols
- `lowerCamelCase` — Everything else
- Clarity at call site
- No abbreviations except universal (URL, ID)
```swift
// Preferred
let maximumWidgetCount = 100
func fetchUser(byID id: String) -> User
```
## Golden Path
Left-hand margin is the happy path. Don't nest `if` statements.
```swift
// Preferred
func process(value: Int?) throws -> Result {
guard let value = value else {
throw ProcessError.nilValue
}
guard value > 0 else {
throw ProcessError.invalidValue
}
return compute(value)
}
```
## Code Organization
Use extensions and MARK comments:
```swift
class MyViewController: UIViewController {
// Core implementation
}
// MARK: - UITableViewDataSource
extension MyViewController: UITableViewDataSource { }
```
## Spacing
- Braces open on same line, close on new line
- One blank line between methods
- Colon: no space before, one space after
## Self
Avoid `self` unless required by compiler.
```swift
// Preferred
func configure() {
backgroundColor = .systemBackground
}
```
## Computed Properties
Omit `get` for read-only:
```swift
var diameter: Double {
radius * 2
}
```
## Closures
Trailing closure only for single closure parameter.
## Type Inference
Let compiler infer when clear. For empty collections, use type annotation:
```swift
var names: [String] = []
```
## Syntactic Sugar
```swift
// Preferred
var items: [String]
var cache: [String: Int]
var name: String?
```
## Access Control
- `private` over `fileprivate`
- Don't add `internal` (it's the default)
- Access control as leading specifier
## Memory Management
```swift
resource.request().onComplete { [weak self] response in
guard let self else { return }
self.updateModel(response)
}
```
## Comments
- Explain **why**, not what
- Use `//` or `///`, avoid `/* */`
- Keep up-to-date or delete
## Constants
Use case-less enum for namespacing:
```swift
enum Math {
static let pi = 3.14159
}
```
## Common Mistakes
1. **Abbreviations beyond URL, ID, UUID** — Abbreviations like `cfg`, `mgr`, `ctx`, `desc` hurt readability. Spell them out: `configuration`, `manager`, `context`, `description`. The three exceptions are URL, ID, UUID.
2. **Nested guard/if statements** — Deep nesting makes code hard to follow. Use early returns and guards to keep the happy path left-aligned.
3. **Inconsistent self usage** — Either always omit `self` (preferred) or always use it. Mixing makes code scanning harder and confuses capture semantics.
4. **Overly generic type names** — `Manager`, `Handler`, `Helper`, `Coordinator` are too vague. Names should explain responsibility: `PaymentProcessor`, `EventDispatcher`, `ImageCache`, `NavigationCoordinator`.
5. **Implied access control** — Don't skip access control. Explicit `private`, `public` helps future maintainers understand module boundaries. `internal` is default, so omit it.
© johnrogers · MIT · johnrogers/claude-swift-engineering