Installation
Get Irrlicht running on your Mac in under two minutes via the package installer, or build everything from source.
Prerequisites
- macOS 13 (Ventura) or later — Irrlicht uses SwiftUI APIs that require Ventura as a minimum.
- Linux (daemon-only) — x86-64 or ARM64, Linux 5.3+ (for
pidfdexit detection). Irrlicht runs as a daemon (a background process,irrlichd) headless, with the web dashboard as its UI; there is no menu-bar app on Linux yet. See Linux setup below. - At least one supported AI coding agent installed and working:
- Claude Code
- OpenAI Codex CLI
- Pi
- Aider
- OpenCode
- Kiro CLI
- Gemini CLI
- Antigravity (agy CLI or IDE)
- Mistral Vibe
- GitHub Copilot CLI
- Hermes Agent
If you plan to build from source, you will also need:
- Go 1.25+ — the daemon is written in Go
- Swift 5.9+ — the menu-bar app is a native SwiftUI application
- Xcode Command Line Tools — install with
xcode-select --install
Install via Homebrew (Recommended)
For Mac users with Homebrew, this is the simplest path. The cask points at the same Developer-ID signed + Apple-notarized DMG as the GitHub release, and lets brew upgrade handle future versions. Starting in v0.4.7 the app also auto-updates itself via Sparkle, so manual upgrades become optional.
brew tap ingo-eichhorst/irrlicht
brew install --cask irrlicht
To upgrade later:
brew upgrade --cask irrlicht
Install via curl
One command. No Gatekeeper prompts. The script downloads the Developer-ID signed and Apple-notarized app, verifies the SHA-256 checksum, and launches it.
curl -fsSL https://irrlicht.io/install.sh | sh
Options:
--daemon-only— install justirrlichdto~/.local/bin/(no menu bar app)--version X.Y.Z— pin a specific version instead of latest
# Daemon only
curl -fsSL https://irrlicht.io/install.sh | sh -s -- --daemon-only
# Specific version
curl -fsSL https://irrlicht.io/install.sh | sh -s -- --version 0.5.1
Install via DMG / PKG
Manual drag-and-drop install. Use this if you prefer not to run a shell script, or if you're installing offline.
-
Download the DMG or PKG
Grab
Irrlicht-<version>.dmgorIrrlicht-<version>-mac-installer.pkgfrom the GitHub Releases page. -
Install the app
Open the DMG and drag Irrlicht.app to Applications. You may need to approve the app in System Settings → Privacy & Security if Gatekeeper blocks it.
-
What gets installed
Component Location Irrlicht.app (menu-bar app + embedded daemon) /Applications/Irrlicht.appThe daemon (
irrlichd) is embedded inside the app bundle and managed automatically. No separate services or LaunchAgents needed. -
Launch the app
Open Irrlicht from Applications. A dimmed grey flame appears in the menu bar, and the daemon starts automatically in the background.
On first launch the app also registers itself as a macOS login item (via
SMAppService), so the menu-bar overlay is up before you open your first terminal after a reboot. Toggle this off in Settings → "Open at Login" if you prefer to launch the app manually; the choice is persisted and the default never re-applies.
Linux (daemon-only)
On Linux, Irrlicht ships as a headless daemon — the same irrlichd as on macOS, observing sessions via /proc and pidfd instead of lsof/kqueue. There is no tray app yet; the web dashboard at http://127.0.0.1:7837 is the UI. Session detection, states, costs, token metrics, and lifecycle all work; terminal-window focus is macOS-only and degrades cleanly to "unsupported."
The curl installer auto-detects Linux and installs the daemon only (it picks the right amd64/arm64 build):
curl -fsSL https://irrlicht.io/install.sh | sh
This installs irrlichd to ~/.local/bin/, the dashboard assets to ~/.local/share/irrlicht/web/, and a systemd user unit at ~/.config/systemd/user/irrlichd.service (written but not enabled). Start it directly with ~/.local/bin/irrlichd &, or enable the unit for autostart.
Autostart with systemd
The installer already wrote the unit, so just enable it:
systemctl --user enable --now irrlichd
If you built from source instead of using the installer, create the unit yourself (%h expands to your home directory):
mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/irrlichd.service <<'EOF'
[Unit]
Description=Irrlicht — AI coding-agent session monitor
Documentation=https://irrlicht.io/docs/installation.html
[Service]
ExecStart=%h/.local/bin/irrlichd
Restart=on-failure
RestartSec=2
[Install]
WantedBy=default.target
EOF
systemctl --user daemon-reload
systemctl --user enable --now irrlichd
On a headless server, allow the user service to keep running after you log out:
loginctl enable-linger "$USER"
Check it: systemctl --user status irrlichd, then open http://127.0.0.1:7837. The curl installer's --uninstall flag stops and removes the unit.
Build from Source
Building from source gives you the full installer package, identical to the release download.
One-command build
git clone https://github.com/ingo-eichhorst/Irrlicht.git
cd Irrlicht
./tools/build-release.sh
The script produces a .dmg (and optionally a .pkg) in the build directory.
What the build script does
Under the hood, build-release.sh performs these steps in order:
- Syncs the web frontend — embeds the latest HTML/CSS/JS assets into the daemon binary.
- Cross-compiles the daemon — builds
irrlichdfor botharm64(Apple Silicon) andamd64(Intel). - Creates a universal binary — merges both architectures with
liposo one binary runs natively on any Mac. - Builds the Swift menu-bar app — compiles
Irrlicht.appfrom the SwiftUI source. - Embeds the daemon — places the universal
irrlichdbinary insideIrrlicht.app/Contents/MacOS/. - Packages into DMG and installer — creates a
.dmgfor drag-and-drop install and a.pkginstaller.
Manual build (individual components)
If you prefer to build each component separately for development:
Daemon only
cd core && go build ./cmd/irrlichd/
Menu-bar app only
cd platforms/macos && swift build
build-release.sh which embeds the daemon into the app bundle. Manual builds are useful for development but require running the daemon separately.
Post-Installation
Once installed (via either method), Irrlicht is ready to go.
- The app manages everything — the embedded daemon starts automatically when the app launches. No separate services or LaunchAgents needed.
- The menu-bar app appears in your menu bar as a flame icon. Click it to see the current state of all detected AI agent sessions.
Verify the daemon is running
curl http://127.0.0.1:7837/state
A successful response returns a JSON object with the current global state. If the daemon is not running, verify the app is launched and check logs.
Check logs
Daemon logs are written to:
~/Library/Application Support/Irrlicht/logs/
Inspect these if the daemon fails to start or you encounter unexpected behaviour.
127.0.0.1:7837 by default. This port is not exposed to the network. See the Configuration page to change the bind address or port.
statusLine.command entry in ~/.claude/settings.json. Any Claude Code session already running at that point won't pick it up — close and reopen it once to activate the integration.
Uninstalling
Use the installer's --uninstall flag. It stops the daemon, removes the app bundle, the irrlichd binary and the LaunchAgent (or systemd user unit on Linux), and clears the hook entries Irrlicht wrote into your agent configs:
curl -fsSL https://irrlicht.io/install.sh | sh -s -- --uninstall
Your session history and configuration in ~/Library/Application Support/Irrlicht/ are kept. To remove those too:
rm -rf ~/Library/Application\ Support/Irrlicht/
Application Support/Irrlicht/ directory deletes all local session history and configuration. Back up anything you want to keep before running the command above.
rm -rf /Applications/Irrlicht.app, the hook entries stay in your agent configs and keep firing at a port nothing is listening on. Run --uninstall above instead — or, if the binary is already gone, clear Irrlicht's entries from ~/.claude/settings.json and ~/.codex/hooks.json yourself.