hydra

Terminal replacement for Loopback — virtual audio devices and routing on macOS, from a ratatui TUI.
Log | Files | Refs | README | LICENSE

commit d5a350c4c2c39f2c6f7ee1d3ca43813282f2dee4
parent 40d8e66a9cee902179b6b5d23ad1a32e0fe114e6
Author: Matthew Gantenbein <ganten1998@gmail.com>
Date:   Sun, 31 May 2026 21:02:08 -0500

fix: restart coreaudiod via killall, not kickstart (SIP blocks kickstart)

`launchctl kickstart -k system/com.apple.audio.coreaudiod` fails under SIP with
"Operation not permitted". `sudo killall coreaudiod` is permitted and launchd
respawns it immediately. Updated install-driver.sh, uninstall.sh, and docs.
(The LaunchAgent kickstart in install-agent.sh is in the gui domain — not
SIP-protected — so it stays.)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Diffstat:
MTESTING.md | 2+-
Mdriver/README.md | 2+-
Mscripts/install-driver.sh | 8+++++---
Muninstall.sh | 3++-
4 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/TESTING.md b/TESTING.md @@ -49,7 +49,7 @@ choose **Hydra** as the microphone — it should receive the routed audio. Uninstall any time: ```sh -sudo rm -rf "/Library/Audio/Plug-Ins/HAL/Hydra.driver" && sudo launchctl kickstart -k system/com.apple.audio.coreaudiod +sudo rm -rf "/Library/Audio/Plug-Ins/HAL/Hydra.driver" && sudo killall coreaudiod ``` ## 3. Run as a background agent (optional) diff --git a/driver/README.md b/driver/README.md @@ -43,7 +43,7 @@ bundle id is `com.ganten.hydra.driver`, factory symbol exported. Deliberately a manual step — the daemon never installs a system driver silently. ```sh -./scripts/install-driver.sh # copies to /Library/Audio/Plug-Ins/HAL, kickstarts coreaudiod +./scripts/install-driver.sh # copies to /Library/Audio/Plug-Ins/HAL, restarts coreaudiod (killall; SIP blocks kickstart) # verify: system_profiler SPAudioDataType | grep -i hydra # or Hydra's own device list ``` diff --git a/scripts/install-driver.sh b/scripts/install-driver.sh @@ -32,12 +32,14 @@ sudo mkdir -p "$MANIFEST_DIR" sudo chmod 755 "$MANIFEST_DIR" echo "• restarting coreaudiod" -sudo launchctl kickstart -k system/com.apple.audio.coreaudiod +# SIP blocks `launchctl kickstart` of coreaudiod ("Operation not permitted while SIP is +# engaged"). Killing it is allowed — launchd respawns it immediately. +sudo killall coreaudiod 2>/dev/null || true -sleep 1 +sleep 2 echo echo "✓ installed. Verify:" echo " system_profiler SPAudioDataType | grep -i hydra" echo " or in the Hydra TUI's device list." echo -echo "Uninstall: sudo rm -rf \"$HAL/Hydra.driver\" && sudo launchctl kickstart -k system/com.apple.audio.coreaudiod" +echo "Uninstall: sudo rm -rf \"$HAL/Hydra.driver\" && sudo killall coreaudiod" diff --git a/uninstall.sh b/uninstall.sh @@ -17,7 +17,8 @@ sudo rm -f /usr/local/bin/hydra 2>/dev/null || rm -f /usr/local/bin/hydra 2>/dev if [ -d "$HAL" ]; then say "Removing the driver (sudo; restarts coreaudiod, ~1s audio glitch)" sudo rm -rf "$HAL" - sudo launchctl kickstart -k system/com.apple.audio.coreaudiod + # SIP blocks kickstart of coreaudiod; killing it is allowed (launchd respawns it). + sudo killall coreaudiod 2>/dev/null || true fi say "Removing the control socket"