Shim: needle_shim.py on the Mac Mini translates OpenAI-style requests into Needle CLI calls, one subprocess per request. Runs as a LaunchDaemon.
HA side: HACS’s extended_openai_conversation (not core, which can’t point at a custom base_url), plus a manual openai version patch to its manifest.
Tools: per-entity functions didn’t disambiguate “the light” well, so redesigned around the kitchen’s group light entity instead of the two individual fixtures. (was using the kitchen lights as a test)