npx claudepluginhub plurigrid/asi --plugin asiThis skill uses the workspace's default tool permissions.
- **Source**: `/Users/alice/worlds/w/MagicTodoWatch/`
Builds, tests, archives, and deploys Swift packages and Xcode projects for Apple platforms including iOS, macOS, tvOS. Manages simulators, physical devices, code signing, profiling, and distribution.
Builds and runs iOS/macOS apps with xcodebuild and xcrun simctl. Manages simulators, compiles Swift, runs UI/unit tests, captures logs/screenshots, automates interactions.
Builds native iPhone apps in Swift with SwiftUI/UIKit via CLI (xcodebuild, simctl). Full lifecycle: create, debug, feature add, test, optimize, ship. No Xcode, iOS 18+ compatible.
Share bugs, ideas, or general feedback.
/Users/alice/worlds/w/MagicTodoWatch//Users/alice/worlds/magic-todo-watch/monaduck1069/magic-todo-watch (private)com.monaduck1069.MagicTodoWatchcom.monaduck1069.MagicTodoWatch.watchkitappFLLV2L2D4K00008150-00123D3E0C46401CXcode is at /Users/alice/Downloads/Xcode.app. xcode-select points at CommandLineTools, so ALL xcodebuild/xcrun commands need:
DEVELOPER_DIR=/Users/alice/Downloads/Xcode.app/Contents/Developer
For xcrun (simctl, devicectl):
DEVELOPER_DIR=/Users/alice/Downloads/Xcode.app/Contents/Developer /usr/bin/xcrun simctl ...
For xcodebuild:
DEVELOPER_DIR=/Users/alice/Downloads/Xcode.app/Contents/Developer /Users/alice/Downloads/Xcode.app/Contents/Developer/usr/bin/xcodebuild ...
XC="DEVELOPER_DIR=/Users/alice/Downloads/Xcode.app/Contents/Developer /Users/alice/Downloads/Xcode.app/Contents/Developer/usr/bin/xcodebuild"
DC="DEVELOPER_DIR=/Users/alice/Downloads/Xcode.app/Contents/Developer /Users/alice/Downloads/Xcode.app/Contents/Developer/usr/bin/devicectl"
PROJ="-project /Users/alice/worlds/w/MagicTodoWatch/MagicTodoWatch.xcodeproj"
DEVICE="id=00008150-00123D3E0C46401C"
# Build (includes embedded watch app)
$XC $PROJ -scheme MagicTodoWatch -configuration Debug -destination "$DEVICE" -allowProvisioningUpdates clean build
# Install
APP_PATH=$(ls -d ~/Library/Developer/Xcode/DerivedData/MagicTodoWatch-*/Build/Products/Debug-iphoneos/MagicTodoWatch.app | head -1)
$DC device install app --device 00008150-00123D3E0C46401C "$APP_PATH"
# Launch (phone must be unlocked)
$DC device process launch --device 00008150-00123D3E0C46401C com.monaduck1069.MagicTodoWatch
SIMCTL="DEVELOPER_DIR=/Users/alice/Downloads/Xcode.app/Contents/Developer /usr/bin/xcrun simctl"
IPHONE_SIM=E7F1ADC6-21F1-4BA4-944A-B99D693571B3 # iPhone 17
WATCH_SIM=FE8B667A-A976-4F71-9CE6-F1C7414F5C25 # Apple Watch Series 10 46mm
# Boot
$SIMCTL boot $IPHONE_SIM
$SIMCTL boot $WATCH_SIM
# Build for sim
$XC $PROJ -scheme MagicTodoWatch -destination "id=$IPHONE_SIM" -allowProvisioningUpdates build
# Install
$SIMCTL install $IPHONE_SIM ~/Library/Developer/Xcode/DerivedData/MagicTodoWatch-*/Build/Products/Debug-iphonesimulator/MagicTodoWatch.app
$SIMCTL install $WATCH_SIM ~/Library/Developer/Xcode/DerivedData/MagicTodoWatch-*/Build/Products/Debug-watchsimulator/MagicTodoWatchWatch.app
# Launch
$SIMCTL launch $IPHONE_SIM com.monaduck1069.MagicTodoWatch
$SIMCTL launch $WATCH_SIM com.monaduck1069.MagicTodoWatch.watchkitapp
# Open Simulator.app
open /Users/alice/Downloads/Xcode.app/Contents/Developer/Applications/Simulator.app
Watch (watchOS 10+) Phone (iOS 17+)
┌──────────────────┐ ┌──────────────────────────┐
│ AudioCaptureMgr │─── PCM chunks ──→│ PhoneSessionManager │
│ LiveTranscriber │ (WCSession) │ ├─ SFSpeechRecognizer │
│ WatchSessionMgr │←── transcripts ──│ ├─ TodoProcessor │
│ WatchContentView │ + todos │ │ ├─ LocalModelService│
└──────────────────┘ │ │ └─ regex fallback │
│ └─ CaptureBufferBridge │
│ └─ JSON → Files app │
└──────────────────────────┘
│
~/Documents/capture-buffer/
│
┌────────────▼─────────────┐
│ Desktop Pipeline │
│ p/orchestrate.py │
│ W→T→A→M→P→E↔C │
└──────────────────────────┘
| File | Role |
|---|---|
App/Services/PhoneSessionManager.swift | WCSessionDelegate, SFSpeech, main coordinator |
App/Services/TodoProcessor.swift | 3-stage extraction chain (NLP → regex → MLX) |
App/Services/LocalModelService.swift | NLTagger POS/NER on-device extraction |
App/Services/CaptureBufferBridge.swift | JSON export to App Group + Files app |
App/Services/VoiceMemoBridge.swift | Voice memo audio bridge |
| File | Role |
|---|---|
Watch/Services/AudioCaptureManager.swift | AVAudioEngine mic capture |
Watch/Services/LiveTranscriber.swift | Float32→Int16 conversion, chunked send |
Watch/Services/WatchSessionManager.swift | WCSession send/receive |
File exists but isn't in project.pbxproj. Add three entries:
Pipeline scripts must work on system Python 3.9.6. Use from __future__ import annotations instead of X | None union syntax.
Both App.entitlements and Watch.entitlements MUST contain group.com.magictodo.capture App Group for CaptureBufferBridge to work.
devicectl device process launch fails with "Locked" — phone must be unlocked first. Install still works while locked.
# Dry-run the orchestrator
python3 /Users/alice/worlds/p/orchestrate.py --dry-run --verbose
# Run arena forge conversion
python3 /Users/alice/worlds/p/task_to_arena.py /Users/alice/worlds/p/capture-buffer-canonical.org --dry-run
# Regenerate olog from arena
python3 /Users/alice/worlds/p/task-olog-export.py --input /Users/alice/worlds/p/arena_forge.json --output /Users/alice/worlds/p/task-olog.json --pretty
JJ=/nix/store/jjyhca8bymk8zvgc65q5cy19wm9pqkmd-jujutsu-0.38.0/bin/jj
cd /Users/alice/worlds/magic-todo-watch
$JJ status
$JJ log
$JJ describe -m "description"
$JJ new
$JJ bookmark set main -r @-
$JJ git push --bookmark main
Generate with Swift (renders emoji to 1024x1024 PNG):
# See /tmp/gen_icon.swift — renders emoji onto rounded-rect background
# Output: App/Assets.xcassets/AppIcon.appiconset/icon_1024.png
/usr/bin/swift /tmp/gen_icon.swift