start-ios

Start iOS development with Simulator, dev server, and optional Poltergeist auto-rebuild

Best use case

start-ios is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Start iOS development with Simulator, dev server, and optional Poltergeist auto-rebuild

Teams using start-ios should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/start-ios/SKILL.md --create-dirs "https://raw.githubusercontent.com/stevengonsalvez/agents-in-a-box/main/toolkit/packages/skills/start-ios/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/start-ios/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How start-ios Compares

Feature / Agentstart-iosStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Start iOS development with Simulator, dev server, and optional Poltergeist auto-rebuild

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# /start-ios - Start iOS Development Environment in tmux

Start iOS development with Simulator, dev server, and optional Poltergeist auto-rebuild.

## Usage

```bash
/start-ios                     # Debug build, .env.development
/start-ios Staging             # Staging build, .env.staging
/start-ios Release             # Release build, .env.production
/start-ios Debug iPhone15Pro   # Specific simulator
```

## Process

### Step 1: Determine Build Configuration

```bash
CONFIGURATION=${1:-Debug}
DEVICE=${2:-"iPhone 15 Pro"}

case $CONFIGURATION in
    Debug)
        ENV_FILE=".env.development"
        SCHEME="Debug"
        ;;
    Staging)
        ENV_FILE=".env.staging"
        SCHEME="Staging"
        ;;
    Production|Release)
        ENV_FILE=".env.production"
        SCHEME="Release"
        ;;
esac

[ ! -f "$ENV_FILE" ] && ENV_FILE=".env"
```

### Step 2: Detect Project Type

```bash
detect_ios_project() {
    if [ -d "ios" ] && [ -f "ios/Podfile" ]; then
        echo "react-native"
    elif [ -f "capacitor.config.json" ] || [ -f "capacitor.config.ts" ]; then
        echo "capacitor"
    elif [ -f "ios/"*.xcworkspace ]; then
        echo "native-pods"
    elif [ -f "ios/"*.xcodeproj ]; then
        echo "native"
    else
        echo "unknown"
    fi
}

PROJECT_TYPE=$(detect_ios_project)

[ ! -d "ios" ] && echo "❌ ios/ directory not found" && exit 1
```

### Step 3: Install Dependencies

```bash
# CocoaPods
if [ -f "ios/Podfile" ] && [ ! -d "ios/Pods" ]; then
    cd ios && pod install && cd ..
fi

# npm
if [ -f "package.json" ] && [ ! -d "node_modules" ]; then
    npm install
fi
```

### Step 4: Setup Simulator

```bash
SIMULATOR_UDID=$(xcrun simctl list devices | grep "$DEVICE" | grep -v "unavailable" | head -1 | grep -oE '\([A-F0-9-]+\)' | tr -d '()')

[ -z "$SIMULATOR_UDID" ] && echo "❌ Simulator '$DEVICE' not found" && xcrun simctl list devices | grep -E "iPhone|iPad" && exit 1

SIMULATOR_STATE=$(xcrun simctl list devices | grep "$SIMULATOR_UDID" | grep -oE '\((Booted|Shutdown)\)' | tr -d '()')

if [ "$SIMULATOR_STATE" != "Booted" ]; then
    xcrun simctl boot "$SIMULATOR_UDID"
    open -a Simulator
    sleep 3
fi
```

### Step 5: Configure Poltergeist (Optional)

```bash
POLTERGEIST_AVAILABLE=false

if command -v poltergeist &> /dev/null; then
    POLTERGEIST_AVAILABLE=true

    [ ! -f ".poltergeist.yml" ] && cat > .poltergeist.yml <<EOF
platform: ios
watchPaths:
  - ios/**/*.swift
  - ios/**/*.m
  - ios/**/*.h
ignorePaths:
  - ios/Pods/**
  - ios/build/**
buildCommand: |
  xcodebuild -workspace ios/*.xcworkspace -scheme $SCHEME -configuration $CONFIGURATION -destination "id=$SIMULATOR_UDID" build
EOF
fi
```

### Step 6: Create tmux Session

```bash
PROJECT_NAME=$(basename "$(pwd)")
BRANCH=$(git branch --show-current 2>/dev/null || echo "main")
TIMESTAMP=$(date +%s)
SESSION="ios-${PROJECT_NAME}-${TIMESTAMP}"

tmux new-session -d -s "$SESSION" -n build
```

### Step 7: Build & Install

```bash
case $PROJECT_TYPE in
    react-native)
        tmux send-keys -t "$SESSION:build" "npx react-native run-ios --simulator='$DEVICE' --configuration $CONFIGURATION" C-m
        ;;
    capacitor)
        tmux send-keys -t "$SESSION:build" "npx cap sync ios && npx cap run ios --target='$SIMULATOR_UDID' --configuration=$CONFIGURATION" C-m
        ;;
    native-pods|native)
        WORKSPACE=$(find ios -name "*.xcworkspace" -maxdepth 1 | head -1)
        if [ -n "$WORKSPACE" ]; then
            tmux send-keys -t "$SESSION:build" "xcodebuild -workspace $WORKSPACE -scheme $SCHEME -configuration $CONFIGURATION -destination 'id=$SIMULATOR_UDID' build" C-m
        fi
        ;;
esac
```

### Step 8: Setup Additional Windows

```bash
# Dev server (if needed)
if [ "$PROJECT_TYPE" = "react-native" ] || grep -q "\"dev\":" package.json 2>/dev/null; then
    DEV_PORT=$(shuf -i 3000-9999 -n 1)
    tmux new-window -t "$SESSION" -n dev-server
    tmux send-keys -t "$SESSION:dev-server" "PORT=$DEV_PORT npm start 2>&1 | tee dev-server.log" C-m
fi

# Poltergeist (if available)
if [ "$POLTERGEIST_AVAILABLE" = true ]; then
    tmux new-window -t "$SESSION" -n poltergeist
    tmux send-keys -t "$SESSION:poltergeist" "poltergeist watch --platform ios 2>&1 | tee poltergeist.log" C-m
fi

# Logs
tmux new-window -t "$SESSION" -n logs
tmux send-keys -t "$SESSION:logs" "xcrun simctl spawn $SIMULATOR_UDID log stream --level debug" C-m

# Git
tmux new-window -t "$SESSION" -n git
tmux send-keys -t "$SESSION:git" "git status" C-m
```

### Step 9: Save Metadata

```bash
cat > .tmux-ios-session.json <<EOF
{
  "session": "$SESSION",
  "project_name": "$PROJECT_NAME",
  "branch": "$BRANCH",
  "type": "$PROJECT_TYPE",
  "configuration": "$CONFIGURATION",
  "environment": "$ENV_FILE",
  "simulator": {
    "name": "$DEVICE",
    "udid": "$SIMULATOR_UDID"
  },
  "dev_port": ${DEV_PORT:-null},
  "poltergeist": $POLTERGEIST_AVAILABLE,
  "created": "$(date -Iseconds)"
}
EOF
```

### Step 10: Display Summary

```bash
echo ""
echo "✨ iOS Dev Environment Started: $SESSION"
echo ""
echo "Configuration: $CONFIGURATION ($ENV_FILE)"
echo "Simulator: $DEVICE"
[ "$POLTERGEIST_AVAILABLE" = true ] && echo "Poltergeist: Auto-rebuild enabled"
echo ""
echo "Attach: tmux attach -t $SESSION"
echo "Status: /tmux-status"
echo ""
```

## Notes

- Auto-detects: React Native, Capacitor, Native iOS
- Maps build config to environment file
- Poltergeist enables auto-rebuild on file changes
- Session persists across disconnects

Related Skills

start-local

8
from stevengonsalvez/agents-in-a-box

Start local development environment with auto-detected services in a persistent tmux session

start-android

8
from stevengonsalvez/agents-in-a-box

Start Android development with Emulator, dev server, and optional Poltergeist auto-rebuild

workflow

8
from stevengonsalvez/agents-in-a-box

Guide through structured delivery workflow with plan, implement, validate phases

webapp-testing

8
from stevengonsalvez/agents-in-a-box

Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.

validate

8
from stevengonsalvez/agents-in-a-box

Verify implementation against specifications

ui-ux-pro-max

8
from stevengonsalvez/agents-in-a-box

UI/UX design intelligence. 67 styles, 96 palettes, 57 font pairings, 25 charts, 13 stacks (React, Next.js, Vue, Svelte, Astro, Nuxt, SwiftUI, React Native, Flutter, Tailwind, shadcn/ui, Jetpack Compose). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient.

tui-style-guide

8
from stevengonsalvez/agents-in-a-box

TUI style guide for consistent terminal interface design

token-usage

8
from stevengonsalvez/agents-in-a-box

Show Claude Code token usage across sessions — daily, weekly, per-project, and per-session breakdowns. Parses {{HOME_TOOL_DIR}}/projects/**/*.jsonl for consumption data. Use when the user asks about token usage, costs, how many tokens were used, session statistics, or wants a usage report.

tmux-status

8
from stevengonsalvez/agents-in-a-box

Show status of all tmux sessions including dev environments, spawned agents, and running processes

tmux-monitor

8
from stevengonsalvez/agents-in-a-box

Monitor and report status of all tmux sessions including dev environments, spawned agents, and running processes. Uses tmuxwatch for enhanced visibility.

tmux-message

8
from stevengonsalvez/agents-in-a-box

Reliable peer-to-peer message delivery to other Claude Code instances via tmux send-keys. Use as a fallback when claude-peers MCP send_message fails to surface in the receiver's inbox (delivered server-side but receiver never picks it up — observed behaviour). Also use when sending a directive to a known Claude Code TUI session by tmux session name or fuzzy hint, or when injecting a multi-line directive into a peer's prompt and submitting it. Trigger phrases — "claude-peers fallback", "tmux send-keys", "send to peer via tmux", "inject directive", "deliver to nanoclaw/hermes peer", "peer message". Tmux-only — won't reach peers running outside tmux.

test-driven-development

8
from stevengonsalvez/agents-in-a-box

Use when implementing any feature or bugfix, before writing implementation code. Enforces RED-GREEN-REFACTOR cycle with test-first approach.