3.3 KiB
name, description
| name | description |
|---|---|
| add-statusbar | Add a macOS menu bar status indicator for NanoClaw. Shows a ⚡ icon with a green/red dot indicating whether NanoClaw is running, with Start, Stop, and Restart controls. macOS only. |
Add macOS Menu Bar Status Indicator
Adds a persistent menu bar icon that shows NanoClaw's running status and lets the user start, stop, or restart the service — similar to how Docker Desktop appears in the menu bar.
macOS only. Requires Xcode Command Line Tools (swiftc).
Phase 1: Pre-flight
Check platform
If not on macOS, stop and tell the user:
This skill is macOS only. The menu bar status indicator uses AppKit and requires
swiftc(Xcode Command Line Tools).
Check for swiftc
which swiftc
If not found, tell the user:
Xcode Command Line Tools are required. Install them by running:
xcode-select --installThen re-run
/add-statusbar.
Check if already installed
launchctl list | grep com.nanoclaw.statusbar
If it returns a PID (not -), tell the user it's already installed and skip to Phase 4 (Verify).
Phase 2: Apply Code Changes
Initialize skills system (if needed)
If .nanoclaw/ directory doesn't exist yet:
npx tsx scripts/apply-skill.ts --init
Apply the skill
npx tsx scripts/apply-skill.ts .claude/skills/add-statusbar
This copies src/statusbar.swift into the project and records the application in .nanoclaw/state.yaml.
Phase 3: Compile and Install
Compile the Swift binary
swiftc -O -o dist/statusbar src/statusbar.swift
This produces a small (~55KB) native binary at dist/statusbar.
Create the launchd plist
Determine the absolute project root:
pwd
Create ~/Library/LaunchAgents/com.nanoclaw.statusbar.plist, substituting the actual values for {PROJECT_ROOT} and {HOME}:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.nanoclaw.statusbar</string>
<key>ProgramArguments</key>
<array>
<string>{PROJECT_ROOT}/dist/statusbar</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>EnvironmentVariables</key>
<dict>
<key>HOME</key>
<string>{HOME}</string>
</dict>
<key>StandardOutPath</key>
<string>{PROJECT_ROOT}/logs/statusbar.log</string>
<key>StandardErrorPath</key>
<string>{PROJECT_ROOT}/logs/statusbar.error.log</string>
</dict>
</plist>
Load the service
launchctl load ~/Library/LaunchAgents/com.nanoclaw.statusbar.plist
Phase 4: Verify
launchctl list | grep com.nanoclaw.statusbar
The first column should show a PID (not -).
Tell the user:
The ⚡ icon should now appear in your macOS menu bar. Click it to see NanoClaw's status and control the service.
- Green dot — NanoClaw is running
- Red dot — NanoClaw is stopped
Use Restart after making code changes, and View Logs to open the log file directly.
Removal
launchctl unload ~/Library/LaunchAgents/com.nanoclaw.statusbar.plist
rm ~/Library/LaunchAgents/com.nanoclaw.statusbar.plist
rm dist/statusbar
rm src/statusbar.swift