diff --git a/ansible/roles/minikube/files/com.blumeops.minikube-mount.plist b/ansible/roles/minikube/files/com.blumeops.minikube-mount.plist
new file mode 100644
index 0000000..2313c52
--- /dev/null
+++ b/ansible/roles/minikube/files/com.blumeops.minikube-mount.plist
@@ -0,0 +1,41 @@
+
+
+
+
+ Label
+ com.blumeops.minikube-mount
+ ProgramArguments
+
+ /bin/bash
+ -c
+
+# Wait for minikube to be running
+for i in {1..60}; do
+ if /opt/homebrew/bin/minikube status | grep -q "Running"; then
+ break
+ fi
+ sleep 5
+done
+
+# Wait for NFS mount to be available
+for i in {1..30}; do
+ if mount | grep -q "/Volumes/torrents-nfs"; then
+ break
+ fi
+ sleep 2
+done
+
+# Start the mount (this blocks until killed)
+exec /opt/homebrew/bin/minikube mount /Volumes/torrents-nfs:/mnt/torrents
+
+
+ RunAtLoad
+
+ KeepAlive
+
+ StandardErrorPath
+ /tmp/minikube-mount.err
+ StandardOutPath
+ /tmp/minikube-mount.log
+
+
diff --git a/ansible/roles/minikube/files/com.blumeops.nfs-torrents.plist b/ansible/roles/minikube/files/com.blumeops.nfs-torrents.plist
new file mode 100644
index 0000000..1cec7a6
--- /dev/null
+++ b/ansible/roles/minikube/files/com.blumeops.nfs-torrents.plist
@@ -0,0 +1,24 @@
+
+
+
+
+ Label
+ com.blumeops.nfs-torrents
+ ProgramArguments
+
+ /sbin/mount
+ -t
+ nfs
+ -o
+ resvport,rw
+ sifaka:/volume1/torrents
+ /Volumes/torrents-nfs
+
+ RunAtLoad
+
+ StandardErrorPath
+ /tmp/nfs-torrents.err
+ StandardOutPath
+ /tmp/nfs-torrents.log
+
+
diff --git a/ansible/roles/minikube/handlers/main.yml b/ansible/roles/minikube/handlers/main.yml
index 44ad747..8af6513 100644
--- a/ansible/roles/minikube/handlers/main.yml
+++ b/ansible/roles/minikube/handlers/main.yml
@@ -12,3 +12,16 @@
ansible.builtin.command:
cmd: minikube ssh --native-ssh=false "sudo systemctl restart containerd"
changed_when: true
+
+- name: Load NFS mount LaunchDaemon
+ ansible.builtin.command:
+ cmd: launchctl load /Library/LaunchDaemons/com.blumeops.nfs-torrents.plist
+ become: true
+ failed_when: false
+ changed_when: true
+
+- name: Load minikube mount LaunchAgent
+ ansible.builtin.command:
+ cmd: launchctl load {{ ansible_env.HOME }}/Library/LaunchAgents/com.blumeops.minikube-mount.plist
+ failed_when: false
+ changed_when: true
diff --git a/ansible/roles/minikube/tasks/main.yml b/ansible/roles/minikube/tasks/main.yml
index d704ba0..fec9a50 100644
--- a/ansible/roles/minikube/tasks/main.yml
+++ b/ansible/roles/minikube/tasks/main.yml
@@ -106,3 +106,31 @@
changed_when: minikube_registry_config.rc == 0
when: minikube_final_status.rc == 0 and 'Running' in minikube_final_status.stdout
notify: Restart containerd in minikube
+
+# Set up persistent NFS mount from sifaka and minikube mount passthrough
+# NFS mount uses LaunchDaemon (runs as root at boot)
+# Minikube mount uses LaunchAgent (runs in user GUI session at login)
+
+- name: Create NFS mount point
+ ansible.builtin.file:
+ path: /Volumes/torrents-nfs
+ state: directory
+ mode: "0755"
+ become: true
+
+- name: Install NFS mount LaunchDaemon
+ ansible.builtin.copy:
+ src: com.blumeops.nfs-torrents.plist
+ dest: /Library/LaunchDaemons/com.blumeops.nfs-torrents.plist
+ owner: root
+ group: wheel
+ mode: "0644"
+ become: true
+ notify: Load NFS mount LaunchDaemon
+
+- name: Install minikube mount LaunchAgent
+ ansible.builtin.copy:
+ src: com.blumeops.minikube-mount.plist
+ dest: "{{ ansible_env.HOME }}/Library/LaunchAgents/com.blumeops.minikube-mount.plist"
+ mode: "0644"
+ notify: Load minikube mount LaunchAgent