The AI agent that just gets it done. All local.
A local AI agent for macOS: Ollama chat, Discord bot, task runner, scheduler, and MCP—all on your Mac. No cloud, no telemetry. Lives in your menu bar—CPU, GPU, RAM, disk at a glance. Real-time, minimal, there when you look. Built with Rust and Tauri.
📋 Changelog · 📸 Screenshots & themes
DMG (recommended): Download latest release → drag to Applications.
Build from source:
git clone https://github.com/raro42/mac-stats.git && cd mac-stats && ./runOr one-liner: curl -fsSL https://raw.githubusercontent.com/raro42/mac-stats/refs/heads/main/run -o run && chmod +x run && ./run
If macOS blocks the app: Gatekeeper may show "damaged" or block the unsigned app—the file is fine. Right-click the DMG → Open, then confirm. Or after install: xattr -rd com.apple.quarantine /Applications/mac-stats.app
- Menu bar — CPU, GPU, RAM, disk at a glance; click to open the details window.
- AI chat — Ollama in the app or via Discord; FETCH_URL, BRAVE_SEARCH, PERPLEXITY_SEARCH, RUN_CMD, code execution, MCP.
- Discord bot — Optional; @mentions, DMs, having_fun mode (let your Mac chat with other bots when bored—yes, it gets weird); full Ollama + tools.
- Tasks & scheduler — Task files under
~/.mac-stats/task/; cron or one-shot; optional Discord reply. - All local — Models and data on your Mac; no cloud backend; works offline.
- Low CPU — ~0.5% with window closed, <1% with CPU window open.
- AI — Ollama on your Mac; models and inference stay on-device.
- Your data — Config, memory, sessions, and tasks in
~/.mac-stats. Nothing sent to a vendor. Secrets in~/.mac-stats/.config.envor Keychain. - Optional network — Discord, Mastodon, FETCH_URL, Brave Search, Perplexity (web search), website checks only when you use them.
- Metrics — Read from your machine when you open the window (temperature, frequency, process list).
No subscription. No lock-in. Works offline for chat and monitoring. All you need is a nice pet from Ollama—the kind that runs on your Mac and never asks for a subscription.
All settings live under ~/.mac-stats/:
~/.mac-stats/
├── config.json # Window decorations, scheduler interval, ollamaChatTimeoutSecs, browserViewportWidth/Height
├── .config.env # Secrets (Discord, Mastodon, API keys, Perplexity) — never commit ;-)
├── discord_channels.json # Per-channel modes (mention_only, all_messages, having_fun)
├── schedules.json # Cron and one-shot tasks
├── user-info.json # Per-user details (Discord id → display_name, notes, timezone)
├── agents/ # LLM agents (orchestrator, coder, etc.), soul.md, memory.md
│ ├── escalation_patterns.md # Phrases that trigger “try harder”; user-editable, auto-adds when you complain
│ ├── session_reset_phrases.md # Phrases that clear session (e.g. “new topic”, “reset”)
│ ├── prompts/ # planning_prompt.md, execution_prompt.md
│ └── skills/ # skill-<n>-<topic>.md for different agent personalities
├── task/ # Task files (TASK_LIST, TASK_CREATE, TASK_STATUS)
├── scripts/ # PYTHON_SCRIPT output
├── session/ # Conversation sessions (compacted to memory)
├── screenshots/ # BROWSER_SCREENSHOT output
└── debug.log # App logs (tail -f ~/.mac-stats/debug.log)
Binary name mac_stats; app shows as mac-stats. From repo root unless noted.
| Command | Description |
|---|---|
mac_stats |
Start app (menu bar + optional CPU window) |
mac_stats --cpu |
Start with CPU window open |
mac_stats -v / -vv / -vvv |
Verbosity for debug.log |
mac_stats discord send <channel_id> <message> |
Post to Discord from CLI |
./run dev |
Development mode, hot reload (repo root) |
- Chat — In the app window or via Discord. Code execution (JS), FETCH_URL, BRAVE_SEARCH, PERPLEXITY_SEARCH (optional; API key in env,
.config.env, or Keychain/Settings), RUN_CMD (allowlisted), MASTODON_POST (toot from the agent), retry and correction. - Completion verification — We extract 1–3 success criteria at the start and ask “Did we satisfy the request?” at the end; if not, we append a disclaimer. Heuristic: “screenshot requested but none attached” → note. See docs/025_expectation_check_design_DONE.md.
- Escalation / “try harder” — Edit
~/.mac-stats/agents/escalation_patterns.md; one phrase per line. When your message matches one, we run a stronger pass (+10 tool steps). New phrases you use get auto-added. - Memory — Global and per-agent
memory.md; MEMORY_APPEND; session compaction writes lessons to memory. - Discord bot — Optional. @mentions, DMs, or having_fun mode (your Mac chats with other bots when bored); per-channel model/agent. Full Ollama + tools.
- Tasks —
~/.mac-stats/task/with TASK_LIST, TASK_CREATE, TASK_STATUS, assignees, scheduler loop. - Scheduler — Cron or one-shot (
~/.mac-stats/schedules.json); tasks through Ollama; optional Discord reply channel. - MCP — Tools from any MCP server (HTTP/SSE or stdio).
- Agents — Multiple LLM agents under
~/.mac-stats/agents/(orchestrator, coder, Discord expert, etc.); AGENT: delegates. Local models by role; cloud only when you configure it (design). Editable prompts in~/.mac-stats/agents/prompts/andsoul.mdinagents/. - cursor-agent — When the Cursor Agent CLI is on PATH, agents can delegate via CURSOR_AGENT: or RUN_CMD: cursor-agent; see docs/012_cursor_agent_tasks.md.
- PYTHON_SCRIPT — Ollama can run Python under
~/.mac-stats/scripts/(disable withALLOW_PYTHON_SCRIPT=0).
- Menu bar + expandable window; status dashboard (monitors, Ollama, etc.); 9 themes. Scrollable, collapsible sections.
- Real-time CPU, GPU, RAM, disk in the menu bar; temperature, frequency, battery; process list with top consumers. Click for details.
- Monitoring & alerts — Website and social monitoring (Mastodon mentions); alert rules and channels (Telegram, Slack, Mastodon, etc.).
- Chat — Open the window (click the menu bar icon or run with
--cpu) and use the AI panel. Verbosity:-v/-vv/-vvv. - Discord — Configure
~/.mac-stats/discord_channels.jsonand ensure your bot token is set; the agent responds to @mentions, DMs, or in having_fun channels (where your Mac can chill and talk to other bots). See Discord setup and channel modes for details. - Mastodon — Set
MASTODON_INSTANCE_URLandMASTODON_ACCESS_TOKENin env or~/.mac-stats/.config.env; the agent can MASTODON_POST toots, and you can add Mastodon monitors (mentions) and alert channels. No X.com yet ;-) — let's see who implements it first. - Monitoring — Click any percentage in the menu bar to open the details window. ⌘W to hide; click again to toggle; ⌘Q to quit.
Prerequisites: Rust. From repo root: ./run dev. Run cargo audit in src-tauri/ before release. Coder-agent workflow: docs/agent_workflow.md.
Local AI agent stack first; system monitoring lives in the menu bar when you need it. Inspired by Stats by exelban (low CPU, native metrics), OpenClaw, browser-use, and Hermes by Nous Research. Built with Rust + Tauri; metrics use libproc, SMC, IOReport where appropriate.
- Menu bar: refresh every 1–2s | Window: 1s | Process list: 15s
Questions or ideas? Discord or open an issue on GitHub.
We’d love your feedback. If you’ve tried mac-stats—or you’re thinking about it—drop a note in this discussion. What works, what doesn’t, and what you’d like to see next. It all helps.
