Wintermolt
Open-source AI agent CLI built in Zig. A pure Zig rewrite of OpenClaw — one ~5MB binary, zero Node.js. Agentic loop, SSE streaming, tool dispatch, SQLite history, and multi-backend support (Claude, Ollama, OpenAI-compatible). Cross-compiles Mac & Linux in one command.
Install / Use
/learn @lupin4/WintermoltQuality Score
Category
Data & AnalyticsSupported Platforms
README
$ wintermolt
Wintermolt v0.1.0 — AI Agent CLI
Backend: claude (claude-sonnet-4-5)
> Refactor all error handling in src/ to use proper Zig error unions
[grep] Searching for catch unreachable patterns...
[file_edit] src/api/client.zig: replaced 4 catch unreachable with proper error returns
[file_edit] src/tools/http.zig: wrapped 2 unsafe casts in error handling
[bash] zig build — compiled successfully, 0 errors
Done. Fixed 11 error handling issues across 6 files. All tests pass.
> /schedule add deploy-check every 30m bash deploy_status.sh
[scheduler] Job "deploy-check" added — runs every 30 minutes
> /look What's on my whiteboard?
[camera] Capturing from default camera...
I can see a system architecture diagram with three boxes labeled "API",
"Worker", and "DB". There are arrows showing request flow...
> /tailscale
Tailscale peers:
dev-macbook 100.64.0.1 macOS online
prod-server 100.64.0.2 Linux online (last seen: 2m ago)
jetson-robot 100.64.0.3 Linux online (last seen: 30s ago)
Why Wintermolt?
Most AI coding tools ship hundreds of megabytes of Electron or Node.js runtime just to send API calls and edit files. Wintermolt compiles to a single 3 MB native binary that cross-compiles to any platform Zig supports — including ARM boards like Jetson and Raspberry Pi.
| | Wintermolt | Claude Code | Cursor | Aider | |---|:---:|:---:|:---:|:---:| | Binary size | 3 MB | ~200 MB | ~500 MB | ~50 MB | | Runtime | None | Node.js 18+ | Electron | Python 3.8+ | | Cross-compile | One command | N/A | N/A | N/A | | Runs on Jetson/Pi | Yes | Barely | No | Slow | | AI backends | 6 | 1 | Multiple | Multiple | | Camera + vision | Built-in | No | No | No | | Browser automation | Built-in | No | No | No | | MCP client + server | Both | Client only | Client only | No | | Chat bridges | 4 platforms | No | No | No | | Cron scheduler | Built-in | No | No | No | | Mesh networking | Tailscale | No | No | No | | Menu bar app | macOS native | No | No | No | | License | AGPL-3.0 | Proprietary | Proprietary | Apache-2.0 |
Quick Start
Prerequisites
- Zig 0.15.2+ (single binary, no installer needed)
- libcurl + sqlite3 (pre-installed on macOS and most Linux distros)
- An API key:
ANTHROPIC_API_KEY,OPENAI_API_KEY,DEEPSEEK_API_KEY, or just run Ollama locally
Build & Run
git clone https://github.com/lupin4/wintermolt.git
cd wintermolt
zig build
./zig-out/bin/wintermolt --setup # interactive wizard — sets up API keys
Three lines. No npm install. No pip install. No Docker. Just Zig.
Cross-Compile (one command)
# ARM Linux — Jetson Orin, Raspberry Pi 5
zig build -Dtarget=aarch64-linux-gnu
# x86_64 Linux — servers, CI, cloud VMs
zig build -Dtarget=x86_64-linux-gnu
# Same 3MB binary. Same features. Zero config.
Features
Agentic Loop
Wintermolt doesn't just answer questions — it plans and executes multi-step tasks autonomously, calling tools in sequence until the job is done. Up to 25 tool iterations per turn.
> Find all security vulnerabilities in this Express app and fix them
[grep] Searching for SQL injection patterns...
[file_read] Reading src/routes/users.js...
[file_edit] Parameterizing raw SQL query on line 47...
[file_edit] Adding input sanitization to /api/upload...
[grep] Checking for XSS in template files...
[file_edit] Escaping user input in 3 Handlebars templates...
[bash] npm test — 47 passed, 0 failed
Fixed 5 vulnerabilities: 2 SQL injection, 2 XSS, 1 path traversal. All tests pass.
6 AI Backends — Switch Instantly
> /model claude — Anthropic Claude (Haiku, Sonnet, Opus)
> /model ollama — Local models (Llama, Qwen, Mistral, Phi — no API key)
> /model openai — OpenAI GPT-4o, GPT-4.1
> /model deepseek — DeepSeek V3/R1
> /model qwen — Qwen 2.5+ Cloud
> /model gemini — Google Gemini
All backends support streaming. Ollama runs 100% local, air-gapped, no API key.
15 Built-in Tools
The AI invokes these autonomously. No plugins needed.
| Tool | What it does |
|------|-------------|
| bash | Execute shell commands with safety guardrails |
| file_read | Read any file (text, images via multimodal) |
| file_write | Create or overwrite files |
| file_edit | Surgical find-and-replace editing |
| glob | Recursive file search by pattern |
| grep | Content search with regex |
| http_request | HTTP GET/POST/PUT/DELETE to any URL |
| web_search | DuckDuckGo search (no API key needed) |
| camera_capture | Camera snapshots + screenshots + OAK-D depth |
| image_process | Format conversion (BMP, PNG via sips/ffmpeg) |
| browser_control | Full Chrome automation via DevTools Protocol |
| memory_search | Semantic search over conversation history |
| schedule | Cron jobs — schedule recurring commands |
| tailscale | Mesh VPN — query peers, devices, connectivity |
| canvas_update | A2UI — render rich UI surfaces in terminal or web |
Cron Scheduler
Schedule commands to run automatically. Jobs persist across restarts via SQLite.
> /schedule add health-check every 5m bash curl -s https://myapp.com/health
[scheduler] Job "health-check" created — runs every 5 minutes
> /schedule add backup at 03:00 bash ./scripts/backup.sh
[scheduler] Job "backup" created — runs daily at 03:00
> /schedule add report cron 0 9 * * 1 bash ./generate_weekly_report.sh
[scheduler] Job "report" created — runs every Monday at 9:00 AM
> /schedule list
ID Name Schedule Next Run Status
─────────────────────────────────────────────────────────────────
a7f3b2c1 health-check every 5m 2 min from now enabled
d4e8a9f0 backup daily 03:00 in 6 hours enabled
b1c2d3e4 report 0 9 * * 1 Monday 09:00 enabled
> /schedule remove a7f3b2c1
[scheduler] Removed "health-check"
Tailscale Mesh Networking
Query your Tailscale network directly from the agent. See all devices, check connectivity, coordinate across machines.
> /tailscale
Tailscale Network Status:
dev-laptop 100.64.0.1 macOS 15.3 online
build-server 100.64.0.2 Ubuntu 24.04 online (3s ago)
jetson-orin 100.64.0.3 Linux 6.1 online (12s ago)
raspberry-pi 100.64.0.4 Linux 6.6 offline (2h ago)
> Ask the AI: "Deploy the latest build to jetson-orin via Tailscale"
[tailscale] Checking connectivity to 100.64.0.3...
[bash] scp -o StrictHostKeyChecking=no ./build/app jetson@100.64.0.3:~/deploy/
[bash] ssh jetson@100.64.0.3 'systemctl restart wintermolt-agent'
Deployed and restarted on jetson-orin. Service is healthy.
macOS Menu Bar App
A native Swift sidecar that lives in your menu bar. Send prompts, see streaming responses, get notifications — without switching windows.
wintermolt --menubar
┌─────────────────────────────────────┐
│ W⚡ Wintermolt │
├─────────────────────────────────────┤
│ Wintermolt — claude/sonnet (1.2k) │
│ ───────────────────────────────── │
│ Quick Prompt... ⌘P │
│ New Chat ⌘N │
│ ───────────────────────────────── │
│ Last: "Deployed to prod, all..." │
│ ───────────────────────────────── │
│ Quit ⌘Q │
└─────────────────────────────────────┘
Built with AppKit NSStatusBar — no Electron, no web views. Communicates with the Zig backend via JSON lines over stdin/stdout, same battle-tested IPC pattern used by the chat and web bridges.
Canvas / A2UI
The AI can render rich UI surfaces — tables, layouts, code blocks — directly in your terminal using box-drawing characters, or in the browser via the web bridge.
> Show me a dashboard of my project health
┌─ Project Health ─────────────────────────────────────┐
│ │
│ ┌─ Build ────────┐ ┌─ Tests ────────┐ │
│ │ Status: passing │ │ 147 passed │ │
│ │ Time: 2.3s │ │ 0 failed │ │
│ │ Binary: 3.1 MB │ │ 3 skipped │ │
│ └─────────────────┘ └────────────────┘ │
│ │
│ ┌─ Dependencies ──────────────────────┐ │
│ │ libcurl 4.5.0 system OK │ │
│ │ sqlite3 3.45 system OK │ │
│ └─────────────────────────────────────┘ │
└───────────────────────────────────────────────────────┘
Uses Google's A2UI protocol (Agent-to-UI) — the agent describes what to render, the client decides how. Terminal gets ANSI box-drawing. Web UI ge
