Help with a local AI assistant on Mac — blocked verification of the RO/DE voice app

Hello everyone,

I have no background in IT or programming, and I do not have technical knowledge about computers. Because of my health problems, I have been trying to build a personal assistant, with the help of AI tools, to support me in my everyday work and activities.

I would like to make clear from the outset that my goal is a local AI assistant running on my own Mac, including voice conversations, with my data and conversations staying on the computer. I am looking for help building this local solution, not recommendations for cloud chatbots or cloud voice services. Using online AI tools to help with development does not change that goal.

That is the purpose of this project: to have assistance I can rely on, especially with things I do not know how to do on my own. The first step is to be able to have stable conversations with it in Romanian and German.

However, I have become stuck while preparing to verify the app before installation, and I do not know how to continue safely without losing existing conversations or data.

If someone with macOS experience could guide me or provide practical help to get past this step, it would mean a great deal to me. The technical appendix below was prepared with the help of AI tools, based on recorded technical evidence.

Technical appendix

Verification goal

Before replacing the existing app, a separate copy needs to be verified in an isolated environment: without access to personal files unrelated to the test, without network access, and without affecting the existing app or its data.

Complete saving and restoration of the actual conversations remain requirements that must be demonstrated before replacement; we do not consider them already verified.

Environment and recorded error

When this question was being prepared, system information reported macOS 27.0.1, build 26A434. However, the error below comes from a saved earlier attempt, not a new reproduction. The record of that attempt does not include the macOS or Ruby versions.

The preparation used a custom sandbox-exec/SBPL profile and a /usr/bin/ruby supervisor, which was intended to launch /usr/bin/codesign to ad-hoc sign a verification copy.

After removing the personal path prefix, the error was:

bounded_child.rb: Operation not permitted @ realpath_rec - /Users (Errno::EPERM)

The Ruby supervisor exited with code 1. No PID or outcome for the codesign process was recorded, and the copy remained unchanged and unsigned. We therefore do not present this result as a demonstrated failure of the signing tool or an Apple restriction on voice apps.

Findings and corrections

Source inspection showed that the preparation mechanism enumerated the ancestor directories beneath /Users but omitted /Users itself. The profile restricted reads in this area and did not have an explicit exception for metadata access to that directory. This finding is consistent with the observed denial, but it is not a diagnosis confirmed by a new access test.

In a separate, inert copy, the directory enumeration and preflight check were corrected: if the necessary permissions are missing, launch is stopped. Tests of this correction verify only the preparation logic, not actual access within the sandbox.

The denied attempt has not been repeated, the profile has not been broadened, and the candidate has not subsequently been signed, installed, or launched.

Specific question

While researching the project, we found this Apple DTS explanation of the difference between custom SBPL profiles and App Sandbox configured through entitlements. I am not looking for undocumented rules or a way to bypass the access denial.

What is the documented, Apple-supported approach for isolating this verification workflow? Is an App Sandbox/XPC architecture appropriate when the workflow needs to invoke an Apple signing tool, or should app preparation, signing, and verification be separated into other isolation environments, such as a dedicated macOS virtual machine?

Guidance on the appropriate mechanisms and their limitations would help us define the next safe step for the local app.

Help in Romanian, German, or English is welcome.

My heartfelt thanks to everyone who takes the time to read this and help.

Answered by DTS Engineer in 910409022

I would do this verification in a VM.

The immediate issue you’re having is that you’re trying to re-initialise the sandbox. That’s not allowed. Once a process is in a sandbox, it can neither get out of that sandbox nor apply a different sandbox.

Furthermore, it looks like the third-party infrastructure you’re using is playing games with a custom SBPL sandbox. That’s not something we support, as I explained in that other thread you found.

Finally, the nice thing about using a VM in this context is that you start fresh each time. That guarantees that state from build N of your product doesn’t affect build N+1.

Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

I would do this verification in a VM.

The immediate issue you’re having is that you’re trying to re-initialise the sandbox. That’s not allowed. Once a process is in a sandbox, it can neither get out of that sandbox nor apply a different sandbox.

Furthermore, it looks like the third-party infrastructure you’re using is playing games with a custom SBPL sandbox. That’s not something we support, as I explained in that other thread you found.

Finally, the nice thing about using a VM in this context is that you start fresh each time. That guarantees that state from build N of your product doesn’t affect build N+1.

Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Hi Quinn,

Thank you very much for taking the time to explain this. Your reply really helps me understand where we got stuck.

I don’t want to bypass Apple’s security protections. I want to build and test the application using methods that Apple supports and recommends.

My understanding is that we could keep the existing Minea project and use a virtual machine for verification, before installing the application normally on my Mac. Would that be the simplest approach for our situation, or is there an easier supported alternative? Preserving my existing conversations and data is especially important to me.

I come from a completely different professional background and started building this local AI assistant with no programming knowledge, using AI tools to help me. Guidance from an experienced person would mean a great deal to me—even if it means simplifying the project.

If your time and the rules of your role allow it, would you be willing to help us further? I would also be open to paid assistance, after discussing the scope and cost beforehand. If that isn’t possible for you, a recommendation for a suitable specialist or an appropriate Apple support option would be very helpful.

Thank you again, with no pressure at all. I genuinely appreciate any guidance you can offer.

Warm regards, Adrian MineaHi Quinn,

Thank you very much for taking the time to explain this. Your reply really helps me understand where we got stuck.

I don’t want to bypass Apple’s security protections. I want to build and test the application using methods that Apple supports and recommends.

My understanding is that we could keep the existing Minea project and use a virtual machine for verification, before installing the application normally on my Mac. Would that be the simplest approach for our situation, or is there an easier supported alternative? Preserving my existing conversations and data is especially important to me.

I come from a completely different professional background and started building this local AI assistant with no programming knowledge, using AI tools to help me. Guidance from an experienced person would mean a great deal to me—even if it means simplifying the project.

If your time and the rules of your role allow it, would you be willing to help us further? I would also be open to paid assistance, after discussing the scope and cost beforehand. If that isn’t possible for you, a recommendation for a suitable specialist or an appropriate Apple support option would be very helpful.

Thank you again, with no pressure at all. I genuinely appreciate any guidance you can offer.

Warm regards,

Adrian Minea

If your time and the rules of your role allow it, would you be willing to help us further?

DTS’s role here at Apple is to help developers with technical issues related to Apple’s APIs and tools. And some Apple developer focused services. Oh, and we also support accessory developers. We are, as you might imagine, quite busy (-: And given all of that, we can’t help with this sort of one-on-one consulting work.

a recommendation for a suitable specialist

Sorry, I can’t help you with that one either.

Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Hi Quinn,

Thank you again for your help. We have prepared a separate macOS environment in VirtualBuddy, with Xcode, to build and test AI Minea. We are now facing two blockers:

  1. Transferring files and retrieving test results. The method we chose uses RAW/ExFAT disk images and requires shutting down the virtual machine. At the same time, I asked for the sessions to remain open because I was afraid of losing unsaved work. This appears to be a conflict in our own workflow, rather than a general restriction imposed by Apple.

  2. Stopping tests safely. Our mechanism for collecting results and stopping processes when a test hangs encountered an "Operation not permitted" (EPERM) error. The exact cause has not yet been established, and this part of the testing infrastructure has not been validated.

What simple approach, using mechanisms supported by Apple, would you recommend for these two issues?

(I would also like to take a step back and explain what I actually want to achieve. I want to use my Mac as a local AI assistant that can work without an internet connection: listen to me and speak Romanian and German, have conversations with me, and carry out practical tasks on the computer at my request—for example, opening applications and helping with everyday tasks.

I come from a completely different field and have no programming background. It is possible that I have made this project far too complicated. If you think there is a simpler solution, an existing application, or a combination of tools that can do these things locally, I would really appreciate your perspective. I am also open to a paid option if it is suitable and affordable for me. It would help to understand what it can do, its limitations, and roughly what it would cost, including whether subscriptions are required.

I am not attached to the technical approach we have chosen so far. What matters to me is the result: a useful, reliable local assistant. If we have taken an unnecessarily complicated path, please feel free to tell me honestly.)

I do not want to bypass Apple's protections or risk losing data. I simply want to find a sound, realistic way forward.

Thank you very much for your time and patience,
Adrian — MineaVoiceDev

Written by MineaVoiceDev in 910925022

What simple approach … would you recommend for these two issues?

If I were setting this up I’d lean into SSH. If you enable SSH on the VM, you can use it to:

  • Copy files to and from the VM using scp.
  • Start and stop work on the VM.

That last one is a bit tricky depending on the nature of the work. When you log in to a Mac via SSH, your shell runs in a non-GUI login context. If the code you’re trying to test expects a GUI login context, you’re testing an app say, then you can’t run it directly. One way around this is to:

  1. Enable autologin on the VM, so that it logs in as a GUI user on boot.
  2. Configure the system so it starts a launchd agent in every GUI login context.
  3. From the SSH session, communicate with your launchd agent to have it start and stop your work.

Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"