Auto-start configuration for macOS to run Supertag services on boot.
# Install webhook server (auto-starts, restarts on crash)
./scripts/install-launchd.sh server
# Install sync scheduler (runs every 6 hours)
./scripts/install-launchd.sh daily
# Check status
supertag server status
# Test endpoint
curl http://localhost:3100/healthIMPORTANT: The install script automatically configures paths based on where you run it from.
The plist template files contain placeholders that get replaced during installation:
| Placeholder | Replaced With |
|---|---|
/Users/YOUR_USERNAME |
Your $HOME directory |
/usr/local/bin/supertag |
Path to supertag binary in your installation |
From extracted release zip:
cd ~/Downloads/supertag-cli-macos-arm64
./scripts/install-launchd.sh server
# Uses: ~/Downloads/supertag-cli-macos-arm64/supertagFrom cloned repository:
cd ~/Projects/supertag-cli
./scripts/install-launchd.sh server
# Uses: ~/Projects/supertag-cli/supertagAfter moving to permanent location (recommended):
# Move to permanent location first
mv ~/Downloads/supertag-cli-macos-arm64 /usr/local/supertag-cli
cd /usr/local/supertag-cli
./scripts/install-launchd.sh server
# Uses: /usr/local/supertag-cli/supertagIf you move the supertag-cli directory after installing launchd services, you must reinstall:
# After moving to new location
cd /new/path/to/supertag-cli
./scripts/deploy-launchd.sh server
./scripts/deploy-launchd.sh dailyCheck the installed plist to verify paths are correct:
# View installed server plist
cat ~/Library/LaunchAgents/ch.invisible.supertag-server.plist | grep -A1 ProgramArguments
# Should show your actual path, e.g.:
# <string>/usr/local/supertag-cli/supertag</string>- Purpose: HTTP API for searching and querying Tana data
- Behavior: Starts on boot, restarts on crash
- Port: 3100 (localhost only)
- Plist:
ch.invisible.supertag-server.plist
- Purpose: Automated database sync from Tana exports
- Schedule: Every 6 hours (midnight, 6 AM, noon, 6 PM)
- Command:
supertag sync index - Plist:
ch.invisible.supertag-daily.plist
./scripts/install-launchd.sh server./scripts/install-launchd.sh dailyThe install script:
- Copies plist to
~/Library/LaunchAgents/ - Replaces path placeholders with your actual paths
- Loads the service
- Verifies it's running
# All supertag services
launchctl list | grep supertag
# Server specifically
supertag server status# Server logs
tail -f ~/.local/state/supertag/logs/supertag-server.log
# Sync logs
tail -f ~/.local/state/supertag/logs/supertag-daily.log
# Error logs
tail -f ~/.local/state/supertag/logs/supertag-server.error.log# Reload after changes
./scripts/deploy-launchd.sh server
./scripts/deploy-launchd.sh daily
# Or manually
launchctl kickstart -k gui/$(id -u)/ch.invisible.supertag-server# Temporarily (until reboot)
launchctl unload ~/Library/LaunchAgents/ch.invisible.supertag-server.plist# Uninstall server
./scripts/uninstall-launchd.sh server
# Uninstall sync scheduler
./scripts/uninstall-launchd.sh daily
# Uninstall both
./scripts/uninstall-launchd.sh allEdit launchd/ch.invisible.supertag-server.plist:
<string>--port</string>
<string>3200</string> <!-- Change from 3100 -->Then deploy:
./scripts/deploy-launchd.sh serverEdit launchd/ch.invisible.supertag-daily.plist.
Current schedule (every 6 hours):
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Hour</key><integer>0</integer>
<key>Minute</key><integer>0</integer>
</dict>
<dict>
<key>Hour</key><integer>6</integer>
<key>Minute</key><integer>0</integer>
</dict>
<dict>
<key>Hour</key><integer>12</integer>
<key>Minute</key><integer>0</integer>
</dict>
<dict>
<key>Hour</key><integer>18</integer>
<key>Minute</key><integer>0</integer>
</dict>
</array>Once daily at 7:30 AM:
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>7</integer>
<key>Minute</key>
<integer>30</integer>
</dict>Then deploy:
./scripts/deploy-launchd.sh daily# Check logs
tail -50 ~/.local/state/supertag/logs/supertag-server.error.log
# Validate plist syntax
plutil -lint ~/Library/LaunchAgents/ch.invisible.supertag-server.plistCommon causes:
- Database not found: Run
supertag sync indexfirst - Port in use: Check with
lsof -i :3100 - Binary not found: Verify path in plist matches actual location
If paths are incorrect after moving the installation:
# Re-run install from new location
cd /new/path/to/supertag-cli
./scripts/deploy-launchd.sh server# Find what's using port 3100
lsof -i :3100
# Use different port
# Edit plist and deploy, or start manually:
supertag server start --port 3200The server is throttled to restart at most once per 60 seconds. Check error logs:
tail -100 ~/.local/state/supertag/logs/supertag-server.error.log- Localhost only: Bound to 127.0.0.1 (not accessible from network)
- No authentication: Safe because localhost only
- Read-only queries: Server doesn't modify data
- Standard user: Runs as your user, not root
If you need network access (not recommended):
- Edit plist to bind to
0.0.0.0 - Configure firewall
- Add authentication (not included)
- Use HTTPS
| File | Path |
|---|---|
| Server plist (template) | launchd/ch.invisible.supertag-server.plist |
| Daily plist (template) | launchd/ch.invisible.supertag-daily.plist |
| Installed plists | ~/Library/LaunchAgents/ch.invisible.supertag-*.plist |
| Logs | ~/.local/state/supertag/logs/ |