Your MacBook has feelings. And it's not afraid to express them.
Every hardware event triggers a personality response:
- π Slap it β it complains (and remembers)
- π Plug in USB β it gets curious
- β‘ Connect charger β it sighs with relief
- πͺ« Battery dying β it begs for its life
- πΆ WiFi drops β existential crisis
- π§ Plug in headphones β "just the two of us now"
- π€ AI finishes code β celebrates your generated code
Your MacBook's mood evolves based on how you treat it. Slap it too much? It gets grumpy. Charge it? It forgives you. Maybe.
Using Homebrew:
brew install dinakars777/tap/moodyDeveloper build from source:
go install github.com/dinakars777/moody@latest
sudo cp "$(go env GOPATH)/bin/moody" /usr/local/bin/moodyRelease builds report the tagged version. Source builds may report dev unless
you build with -ldflags "-X main.version=<version>".
Maintainers: see docs/releasing.md for the tag release flow.
# Start moody (SFW mode)
sudo moody
# NSFW mode π
sudo moody --spicy
# Show live animated mood dashboard
sudo moody --dashboard
# List available sensors
sudo moody --list-sensors
# Explain sensor compatibility and fixes
moody doctor
moody doctor --json
# Adjust slap sensitivity
sudo moody --min-amplitude 0.15
# Fast mode (quicker detection, shorter cooldown)
sudo moody --fast
# Silent mode (disables TTS voice, text only)
sudo moody --silent
# Verbose logging
sudo moody --verbose- macOS on Apple Silicon (M2+ or M1 Pro)
sudo(for accelerometer access)- Go 1.26.1+ (if building from source)
See docs/compatibility.md for the sensor support matrix.
- Reads accelerometer data via IOKit HID to detect physical impacts
- Monitors USB, power, battery, and lid state via IOKit
- Monitors WiFi and Headphone connections using
networksetupandCoreAudio - Monitors external display changes
- Monitors AI IDE activity (Kiro) for code generation completion
- Maintains a 3-axis mood engine (happiness, energy, trust)
- Mood persists to
~/.moody/state.jsonβ your MacBook remembers - Selects personality-appropriate responses based on current mood
- Speaks the response aloud using macOS Text-to-Speech (TTS) with mood-specific voices
Your MacBook's mood shifts with every event:
| Mood | Trigger | Personality |
|---|---|---|
| π Happy | Charged, USB in | Cheerful, friendly |
| π€ Grumpy | Slapped, charger removed | Sarcastic, snippy |
| π° Anxious | Battery low, WiFi lost | Panicky, desperate |
| π Dramatic | Multiple negative events | Over-the-top theatrical |
| π Dead Inside | Sustained abuse | Nihilistic, apathetic |
# List installed packs
moody --packs
# Validate a local community pack
moody pack validate ./my-pack
# Use NSFW pack
sudo moody --spicyBuilt-in packs:
en_defaultβ Passive-aggressive office coworker (SFW)en_spicyβ Your MacBook is... very friendly (NSFW π)ja_spicyβ Anime-inspired Japanese pack (NSFW π)hi_defaultβ Hindi default pack (SFW)hi_spicyβ Hindi spicy pack (NSFW π)en_pirateβ Pirate speak pack (SFW)en_dramaticβ Overly Dramatic pack (SFW)
| Flag | Description |
|---|---|
--spicy |
Enable NSFW voice pack |
--pack <NAME> |
Use specific voice pack |
--dashboard |
Show live animated TUI mood dashboard |
--mute |
Track mood without responses |
--silent |
Disable TTS audio (text output only) |
--fast |
Faster polling, shorter cooldown |
--min-amplitude <F> |
Accelerometer sensitivity (default: 0.05) |
--cooldown <MS> |
Min ms between responses (default: 750) |
--no-accel |
Disable accelerometer |
--no-usb |
Disable USB sensor |
--no-power |
Disable power sensor |
--no-lid |
Disable lid sensor |
--no-wifi |
Disable WiFi sensor |
--no-headphones |
Disable headphone sensor |
--no-display |
Disable external display sensor |
--no-ai |
Disable AI IDE monitoring |
--verbose |
Log all events |
--list-sensors |
Show available sensors |
--json |
Print JSON with --list-sensors |
--packs |
List voice packs |
--version |
Print version |
moody doctor
moody doctor --jsondoctor reports OS, architecture, root status, and per-sensor support details.
If a sensor cannot run, the report includes a reason and suggested fix.
Moody can notify you when your AI coding assistant finishes generating code!
Supported IDEs:
- Kiro - Automatically detected
- Cursor - Coming soon
- Windsurf - Coming soon
When AI finishes generating code, your Mac celebrates (or complains, depending on its mood).
Related Projects:
- ai-done-hooks - Simple notification configs
- ai-done - Standalone menu bar app
Contributions welcome! Especially:
- More voice packs (languages, personalities)
- More AI IDE integrations (Cursor, Windsurf)
- Gordon Ramsay voice pack
- HAL 9000 voice pack
When adding a built-in personality, update the interactive demo in docs/ at the same time.
Voice pack authors can start with docs/voice-pack-authoring.md. Please read CONTRIBUTING.md before opening a PR.
Moody runs locally and does not send telemetry. See docs/privacy.md.
MIT
