Mac Control is a small protected local web control panel for macOS. It was split out from the AI Chat project as an independent open-source tool.
- Admin-protected login with JWT authentication.
- Volume and mute controls.
- Brightness control.
- Memory summary.
- Running application list with open and close actions.
- Bluetooth power toggle.
- VPN connect and disconnect controls.
The terminal feature is intentionally not exposed by this project.
- macOS
- Node.js 18+
- Python 3
- Python packages from
mac-controller/requirements.txt - Optional macOS tools for specific controls:
brightnessblueutil
One-command local deployment:
./deploy.shThis installs Node dependencies, creates a local .env with generated secrets when needed, prepares the Python controller virtual environment, runs checks, and starts the app.
Manual setup:
npm install
cp .env.example .envEdit .env and set a strong JWT_SECRET. The first registered user whose username matches ADMIN_USERNAME becomes an admin.
To install controller Python dependencies:
python3 -m venv mac-controller/.venv
mac-controller/.venv/bin/pip install -r mac-controller/requirements.txtnpm startOpen http://localhost:3303, create the admin account, then sign in.
After signing in as admin, open Settings from the top bar. The panel can edit local deployment settings such as port, admin username, database path, controller host/port, and controller auto-start.
Secrets are never displayed in the browser. Use the rotate checkboxes to generate new values for JWT_SECRET or CONTROL_INTERNAL_TOKEN. Restart the app after saving server-level settings.
- Keep this app bound to localhost unless you fully understand the risk.
- Set
CONTROL_INTERNAL_TOKENso only the Node app can call the controller API. - Do not expose this app directly to the public internet.
- Admin authorization is enforced server-side, not only in the UI.
npm run check
npm run smoke:startup
npm run smoke:auth