Back to skills directory
wendylabsinc/claude-skills

wendylabsinc/claude-skills

@wendylabsinc 58

Swift server development skills with automated linting for Claude Code.

swiftserver-side-swifthummingbirdswift-niolintingclaude-skillsswift-concurrencypostgres-niocoding

Install

$ npx skills add wendylabsinc/claude-skills

README

# GitHub Repository: wendylabsinc/claude-skills

**URL:** https://github.com/wendylabsinc/claude-skills
**Author:** wendylabsinc
**Description:** 
**Homepage:** 
**Language:** Swift

## Stats
- Stars: 58
- Forks: 5
- Open Issues: 1
- Commits: 32
- Created: 2026-01-21T10:20:24Z
- Updated: 2026-06-09T20:09:37Z
- Pushed: 2026-06-09T20:09:23Z

## README
# Swift Server Skills & Linting

A collection of Claude skills for guidance on Swift (Server) development, along with a linting tool that enforces best practices.

## The Technique

Claude, as any LLM (or Human) makes mistakes. When Claude makes a mistake, most people have one of two reactions:
- Tell Claude it sucks, and let it try again.
- Open up some social media, and vent about how Claude sucks.

However, trying the same with Humans has proven extremely ineffective. *Humans bite back.*

### The solution

The solution is a pretty simple feedback loop:
1. Whenever you generate code, _read it_ before you commit.
2. If you see a mistake, try to articulate what should be improved and _why_.
3. Iterate 2. until you have a rationale Claude can follow easily.
4. Add the rationale with a small code sample to a Claude skill, to ensure future iterations have the same context.

And now the critical step: **Encode your newfound rule/skill as a linter rule.**

This last step ensures that future code generated by Claude will follow these same rules, independently of whether the skill is in the LLM's context window.

## Overview

This repository contains two main components:

1. **Skills** - Knowledge bases that provide expert guidance on Swift server topics
2. **swift-server-lint** - A linting tool that enforces best practices from the skills

## Setup with Claude Code

### 1. Install Skills

Clone this repository and symlink the skills into your Claude home directory:

```bash
git clone https://github.com/joannis/skills.git
ln -s "$(pwd)/skills" ~/.claude/skills
```

Claude Code automatically loads skills from `~/.claude/skills/*/SKILL.md`.

### 2. Build the Linter

```bash
cd skills/swift-server-lint
swift build
```

### 3. Auto-Lint with a Hook

Add a **PostToolUse hook** to `~/.claude/settings.json` so that `swift-server-lint` runs automatically after every `swift build`:

```json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/swift-server-lint.sh"
          }
        ]
      }
    ]
  }
}
```

Then create `~/.claude/hooks/swift-server-lint.sh`:

```bash
#!/bin/bash
INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

if echo "$COMMAND" | grep -q 'swift build'; then
  LINT_BIN=~/.claude/skills/swift-server-lint/.build/debug/swift-server-lint
  if [ -x "$LINT_BIN" ]; then
    OUTPUT=$("$LINT_BIN" 2>&1)
    EXIT_CODE=$?
    if [ $EXIT_CODE -ne 0 ]; then
      echo "---"
      echo "$OUTPUT"
      echo "---"
      echo '{"decision": "block", "reason": "swift-server-lint found issues. Fix them before continuing."}'
    fi
  fi
fi
exit 0
```

```bash
chmod +x ~/.claude/hooks/swift-server-lint.sh
```

### 4. Allow the Linter in Permissions

Add the linter to your project's `.claude/settings.local.json` so Claude can run it without prompting:

```json
{
  "permissions": {
    "allow": [
      "Bash(.build/debug/swift-server-lint:*)"
    ]
  }
}
```

### IDE Integration

- **VS Code** - Install the "Claude Code" extension from the marketplace. All `~/.claude/` configuration (skills, hooks, settings) is shared automatically.
- **Xcode** - No native extension. Use `claude` in a terminal alongside Xcode.

Information

Language
Swift
Created
2026/6/18
Updated
2026/6/18