Over the past few weeks I have been building Quasnooze, an MIT-licensed personal AI assistant designed to run on your own machine without pulling in a massive dependency tree or hiding its behavior behind prompts.
Most assistant projects I tried either required Docker plus hundreds of npm packages or trusted a system prompt not to do anything destructive. I wanted the opposite: something small enough to read end to end, honest about what it can and cannot do, and strict about permissions in actual code.
A few things that came out of building it this way:
Zero mandatory runtime dependencies. Everything runs on the Node.js 22+ standard library in plain ESM with no TypeScript and no build step. That meant writing things like the Discord gateway RFC 6455 WebSocket client, SSE token streaming, and incremental BM25 workspace document search directly on Node built-ins. A fresh clone runs right away, and npm run demo boots a local canned brain in about two seconds with no Ollama install or API keys needed.
Local by default, explicit boundaries everywhere else. Ollama is the default model provider, and conversations, memories, reminders, and tasks live as plain files in data/ on your machine. Cloud endpoints and chat channels (Telegram, Discord, Slack, WhatsApp) exist, but only when you explicitly configure them.
Code-enforced guardrails instead of prompt promises. Shell and file tools go through a deterministic risk classifier: read-only commands pass through, state-changing actions pause at a human Allow once / Deny gate with redacted previews, and destructive commands stay blocked. Workspace paths are resolved through realpathSync to stop symlink escapes, child processes have credentials scrubbed from their environment, and a post-reply guard checks what the model claimed it did against the tools that actually ran (so it cannot claim it sent an email or visited a URL when nothing ran).
Honest UI signals. The web interface includes a 2D canvas audio visualizer with five distinct states (idle, listening, processing, speaking, interrupted) and reduced-motion support, and it never pretends synthetic motion is live microphone audio or lets an animation approve a tool call.
Caveats up front: local files are plain JSON/Markdown (not encrypted at rest), local JS plugins run with normal process privileges rather than an OS sandbox, and the native Windows speech companion and browser conversation deck are still in preview. Every capability claimed in the docs is tied directly to source files and verified by 770+ node:test cases plus 18 adversarial self-check probes.
The repo is Quasynvo/Quasnooze on GitHub. Would love feedback on the architecture, threat model, or anything you think is missing — and contributors are very welcome!