MicroFish/docs/hosting/mirofish-host-runbook.md

4.5 KiB

MiroFish Host Runbook

Canonical Runtime

  • Shared source of truth: /Users/adrianlat/Library/Mobile Documents/com~apple~CloudDocs/airShare/MiroFish
  • Canonical operational runtime: /Users/Shared/OpenClaw/mirofish-runtime
  • Canonical operational transcribes: /Users/Shared/OpenClaw/transcribes

The runtime should live outside iCloud because always-on services need stable local files, virtual environments, logs, and uploads that are not subject to iCloud eviction or placeholder behavior.

The iCloud source for breathwork transcribes remains:

  • /Users/adrianlat/Library/Mobile Documents/com~apple~CloudDocs/BreathWork/Transcribes

That iCloud tree should be treated as source only. The shared operational copy should live in /Users/Shared/OpenClaw/transcribes.

Ports

  • Frontend: 3000
  • Backend: 5001

Commands

Run from the runtime root:

./scripts/host-start.sh
./scripts/host-stop.sh
./scripts/host-status.sh
tail -f runtime/logs/backend.log
tail -f runtime/logs/frontend.log
./scripts/host-smoke-test.sh

Sync transcribes from iCloud source to the shared operational path:

./scripts/sync-transcribes.sh

SSH Tunnels

ssh -L 3000:127.0.0.1:3000 openclaw-mirofish
ssh -L 5001:127.0.0.1:5001 openclaw-mirofish

Suggested SSH Alias

Host openclaw-mirofish
  HostName 10.0.0.161
  User airstride
  ServerAliveInterval 30
  ServerAliveCountMax 3
  StrictHostKeyChecking accept-new

Legacy LaunchAgent Template

The current persistent service is the system LaunchDaemon below, running as airstride. Use this LaunchAgent template only for a user-session fallback.

The validated plist is:

  • /Users/adrianlat/Library/Mobile Documents/com~apple~CloudDocs/airShare/MiroFish/ops/launchd/airshare.mirofish.plist

It should be installed by a privileged shell or by a shell already running as airstride. If you are running as airstride, use:

cp /Users/adrianlat/Library/Mobile\ Documents/com~apple~CloudDocs/airShare/MiroFish/ops/launchd/airshare.mirofish.plist ~/Library/LaunchAgents/airshare.mirofish.plist
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/airshare.mirofish.plist
launchctl kickstart -k gui/$(id -u)/airshare.mirofish

If you are running from another admin account, bootstrap into airstride requires root privileges or an interactive airstride session.

Template:

<?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>airshare.mirofish</string>
    <key>ProgramArguments</key>
    <array>
      <string>/bin/zsh</string>
      <string>/Users/Shared/OpenClaw/mirofish-runtime/scripts/host-start.sh</string>
      <string>/Users/Shared/OpenClaw/mirofish-runtime</string>
    </array>
    <key>WorkingDirectory</key>
    <string>/Users/Shared/OpenClaw/mirofish-runtime</string>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>AbandonProcessGroup</key>
    <true/>
    <key>StandardOutPath</key>
    <string>/Users/Shared/OpenClaw/mirofish-runtime/runtime/logs/launchd.log</string>
    <key>StandardErrorPath</key>
    <string>/Users/Shared/OpenClaw/mirofish-runtime/runtime/logs/launchd.err.log</string>
  </dict>
</plist>

Validated Constraints

  • MiroFish is not run from iCloud.
  • Runtime path is local and shared.
  • SSH is LAN-only and should not be published through router/NAT.
  • Docker was not available during validation, so source deployment is the active path.

LaunchDaemon Migration

For a true always-on host, prefer the system LaunchDaemon:

  • Source plist: /Users/Shared/OpenClaw/mirofish-runtime/ops/launchd/com.openclaw.mirofish.plist
  • Installed plist: /Library/LaunchDaemons/com.openclaw.mirofish.plist
  • Label: com.openclaw.mirofish
  • User: airstride

Install with:

sudo /Users/Shared/OpenClaw/mirofish-runtime/scripts/install-mirofish-launchdaemon.sh

Validate with:

sudo launchctl print system/com.openclaw.mirofish
curl -sS http://127.0.0.1:5001/health
curl -sSI http://127.0.0.1:3000/
curl -sS http://127.0.0.1:3000/api/graph/project/list

Hermes Integration

The canonical integration contract for Hermes and OpenClaw lives at:

  • /Users/adrianlat/Library/Mobile Documents/com~apple~CloudDocs/airShare/MiroFish/docs/hosting/mirofish-hermes-integration-contract.md
  • /Users/Shared/OpenClaw/mirofish-runtime/docs/hosting/mirofish-hermes-integration-contract.md