1 pointby coolwulf5 hours ago1 comment
  • coolwulf5 hours ago
    Hey HN,

    I've been building CoolWulf AI (https://coolwulfai.com), a self-hosted personal AI assistant. After seeing OpenClaw blow up, I wanted to share what I've been working on — a different approach to the same problem.

    *Why I built this:*

    I tried OpenClaw and found the Node.js/TypeScript stack heavy for what's essentially a local agent. pnpm, Node 22+, React — lots of moving parts. I wanted something that's a single binary, zero runtime dependencies, and feels native on macOS. So I built it in Go.

    *How it's different from OpenClaw:*

    - *Single binary, no runtime needed.* Download, set your API key, run. No Node.js, no pnpm, no build step. One ~100 MB binary. - *Built in Go.* Fast startup, low memory footprint, compiles to a native executable. No garbage collector pauses from a JS runtime sitting in the background. - *macOS-native integrations.* Deep AppleScript-based control of Apple Notes, Reminders, Calendar, Terminal.app, and WeChat desktop. These aren't browser hacks — they use the native accessibility and scripting APIs. - *WeChat support.* This was a big one for me. WeChat desktop on macOS is a native Cocoa/Qt app with a readable accessibility tree. CoolWulf can read messages, send messages, search contacts, and navigate chats — all via AX APIs and CGEvent. I haven't seen another AI agent do this. - *Simpler setup.* Web-based first-time wizard. Configure your LLM provider, connect Gmail/Calendar via OAuth, enable messaging connectors — all from the browser. No terminal wizards, no YAML files.

    *What it does:*

    - 20+ LLM providers (OpenAI, Claude, Gemini, DeepSeek, Groq, Ollama, local models via vLLM/LM Studio) - Messaging: WhatsApp, Teams, Telegram, Slack, WeChat - Email: Gmail and Yahoo Mail with full OAuth - Calendar: Google Calendar + Apple Calendar - Browser automation: Chrome CDP + Playwright via MCP - Task management: org-mode style with scheduled tasks, cron jobs, automatic execution - Persistent memory: SQLite + vector embeddings for semantic search across conversations - Background heartbeat: runs 24/7, monitors your systems, executes due tasks, sends alerts - Web dashboard for chat, tasks, scheduled jobs, and settings

    *Architecture choices:*

    Go was the right call. The binary compiles in seconds, cross-compiles trivially, and the concurrency model (goroutines for heartbeat, browser sessions, connector polling) maps perfectly to an always-on agent. SQLite with vector extensions (sqlite-vec) gives us semantic memory without running a separate vector DB.

    Try it: https://coolwulfai.com

    Happy to answer questions about the Go implementation, WeChat automation, or the macOS accessibility approach.