Back to browse
PAI, a Linux-y personal-assistant for Mac

PAI, a Linux-y personal-assistant for Mac

by ardatasci·Jul 6, 2026·2 points·0 comments

Post Description

Hi HN!

I've been spending the past month on PAI, a Linux-esque harness for a personal assistant AI for your Mac. Instead of giving a chatbot a bunch of tools, I wanted to just drop the LLM into a terminal and see how it'd fare.

I've been using it to manage my calendar, 5+ email accounts, and engaging with / responding to people in a timely manner (casus belli for this entire project).

After seeing how other always-on assistants were designed, I thought the Unix / Linux philosophy of system design could be applied to AI harnesses, and I wanted to experiment with how it'd hold up compared to them. So, I built PAI with the following things in mind:

1. Engaging "code mode" in the LLM (LLMs are natural SDEs / SysAdmins) - If you remember the [code mode](https://blog.cloudflare.com/code-mode/) post from a while ago, I wanted to try and utilize those capabilities within the model for it to naturally interface with the harness rather than trying to load it up with a bunch of exposition. An LLM naturally knows that config-related things belong in /etc/, how to `cd`, `cat`, `tail` stuff, etc.

2. Avoid polling with an LLM. - I wanted to see if I could avoid polling because it's a waste of tokens and an arbitrary interval seems inelegant. - Instead, I created an event bus that wakes the LLM and accepts arbitrary sources that PAI might wire up itself. - Polling with a script is sometimes unavoidable and fine.

3. PAI has its own FHS(-ish) directory - The directory hosts several different users (agents) in ~/.pai/home/; Default configuration is a root agent, the user-facing agent, and the `librarian' which handles memory consolidation and learning and whatnot. - Each agent can subscribe to different events from the source, have different perms to access/run stuff.

4. Tools are binaries, APIs / connectors are drivers (& everything is a file) - This is more of a suggestion than a rule I strictly followed, but basically every tool is an executable and every event producer follows the shape of a driver in Linux. Everything is a process that lands in /proc/, events are files, etc.

5. PAI has its own package manager - Aptly called `paiman`, this is just a way for PAIs to share new things they write upstream. I realize this is insanely insecure (not sure how to make it secure if I'm being honest) so I haven't actually made upstream commits possible.

6. Is grep ~ vector search? - I wanted to see if just grep (rg) is good enough since realistically latency is a non-issue here anyway. I might experiment with vector search later.

7. I hate logging in to all my accounts - I used the local SQLite DBs that were stored on Mac to integrate with iMessage and Mail. It works out-of-box (given that your Mac has those apps set up).

*Things you should know before trying * There is no sandbox. PAI expects full disk access. PAI copies your chrome cookies into a separate chrome instance for playwright. You can see everything it's doing though. FOSS & BYOK. I've been using $5 of credit w/ Deepseek and I've yet to run out. If there's interest I might turn it into a cloud thing but I doubt it :D

Try it out with the instructions at https://whitematterlabs.ai | gh: https://github.com/whitematterlabs/pai . Also please excuse the shameless LLM-generated site :-)

Any comments, thoughts, or suggestions would be much appreciated. You can also just tell PAI to change whatever you might not like about it.

Similar Projects

Open a Linux Container (for Mac)

Browser-accessible Linux shell in a container, but unclear what problem it solves.

Ship It
dpweb
204mo ago