Projects
expo-whisperkit
On-device speech to text for Expo apps on iOS, written because the only community wrapper was 40 lines of Swift on a two-year-old WhisperKit pin, and packaging cost the same either way.
downloadProgress { model: 'base', fraction: 0.42 } modelState { model: 'base', state: 'loaded' } streamingUpdate confirmed: "Add tahini and" pending: "za'atar to the" streamingUpdate confirmed: "Add tahini and za'atar to the" pending: "list" stopStreaming → { text: "Add tahini and za'atar to the list", language: 'en' }
I wanted the app to choose the model, download it when the user asks with visible progress, and know whether it was already on the device, instead of the library picking a default and fetching it silently on first use. I also wanted live streaming, typed errors, and a fork to own when something broke. And a vocabulary prompt, so an app can steer recognition toward domain-specific terms instead of hoping the general model guesses right. The existing wrapper offered one transcribe call on WhisperKit's default model, a boolean for errors, and none of the rest. Either route still had to wire WhisperKit into the iOS build through a config plugin, so the wrapper saved half a day of Swift and nothing else. This module's plugin builds WhisperKit from source with no CocoaPods plugin or Ruby gem. The API covers push-to-talk, file transcription, and streaming with partial results. A manifest pins each model to a repo commit and per-file hash, and every download is verified before it counts as present, so an upstream change fails loudly instead of silently changing what the app runs. Phone calls, Siri, and backgrounding end capture without an error and keep the audio for the next stop.
TypeScript Swift Expo Modules WhisperKit CoreML Maestro
Claude Code setup
A versioned Claude Code config: a hook that catches every spec and plan, and a second model that reviews them before I do.
Write docs/superpowers/specs/2026-10-11-edge-analytics-design.md hook spec-review-nudge: this is a spec; run cross-model-review before the user gate Skill cross-model-review Agent cross-model-reviewer · opus · Read, Grep, Glob · clean context Reviewer model: claude-opus-5-5 1. should-fix · Data flow · the Worker never sets the sampling header the spec assumes 2. minor · Testing · no case for a request with no referrer Finding 1 of 2. Accept, reject, or discuss?
chezmoi renders the settings from a shared file and a per-machine overlay that never gets committed. A PostToolUse hook catches writes to superpowers specs and plans, however they happen, and nudges the session to run the cross-model review. Subagents get a different nudge: report the change up and let the caller review. The review goes to a read-only agent on a second model with a clean context, and the skill walks me through its findings one at a time.
Bash jq chezmoi Claude Code hooks Claude Code skills
Claude Code status line
Where a long session is at a glance: a Haiku summary of your first prompt, your latest one, and the current step.
[signup-e2e] · Opus 5.5 · 83% ctx · $7.90 Started: Figure out why the signup flow test passes locally but times out in CI Now: check if the email mock is racing the redirect Doing: Run the signup spec 20 times with trace on (3m 05s)
Each session shows its name, model, context used and cost, then what you first asked (Started), what you asked last (Now) and the step the agent is on with how long it has taken (Doing). Everything comes from the session transcript, so there is no saved state. When the first prompt is too long for a row, a one-line Haiku summary is generated once in the background and cached.
Bash jq Claude Code