bytelyst-devops-tools/agent-queue/agent-queue-boot.sh
saravanakumardb1 d574f5dda3 feat(agent-queue): macOS LaunchAgent boot-persistence (auto-start + KeepAlive)
Adds agent-queue-boot.sh (PATH repair + ~/.agent-queue.env overrides + caffeinate
wrap) and launchd/ (install.sh + README) so the run loop auto-starts on login and
survives reboot/crash — the persistence layer tmux+caffeinate alone cannot give.
No secrets tracked (host config lives in untracked ~/.agent-queue.env).

Generated with [Devin](https://cli.devin.ai/docs)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-06-01 00:25:16 -07:00

49 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# agent-queue-boot.sh — boot/login entrypoint for the agent-queue run loop.
#
# Launched by the macOS LaunchAgent (see launchd/) so the folder-kanban worker
# auto-starts on login AND survives reboot/crash (LaunchAgent KeepAlive). This is
# the reboot-persistence layer that tmux + caffeinate alone cannot provide.
#
# It does three things launchd's minimal environment needs:
# 1. Repairs PATH so the agent CLIs (codex/devin/claude) + caffeinate are found.
# 2. Loads optional overrides from ~/.agent-queue.env.
# 3. Wraps `agent-queue run` in caffeinate (macOS) so the Mac won't sleep while
# a job is running. NOTE: because the run loop is long-lived, this keeps the
# machine awake for as long as the LaunchAgent runs — intended for a dedicated
# overnight runner. Set AGENT_QUEUE_NO_CAFFEINATE=1 to allow idle sleep.
#
set -uo pipefail
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd -P)"
# launchd hands processes a bare PATH — prepend the usual CLI install locations
# (Homebrew arm64/intel, ~/.local/bin for devin, system dirs) ahead of it.
export PATH="$HOME/.local/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:${PATH:-}"
# Optional per-machine overrides (engine, concurrency, tokens, NETWORK, etc.).
# This file is NOT tracked — keep secrets/host-specific config here.
if [ -f "$HOME/.agent-queue.env" ]; then
# shellcheck disable=SC1091
. "$HOME/.agent-queue.env"
fi
# Recommended default for a local monorepo overnight runner (see long-running-jobs
# cheat sheet): codex runs in-repo so @bytelyst/* workspace links resolve locally.
: "${AGENT_QUEUE_ENGINE:=codex}"
export AGENT_QUEUE_ENGINE
echo "[agent-queue-boot] $(date '+%Y-%m-%d %H:%M:%S') starting run loop" \
"(engine=$AGENT_QUEUE_ENGINE, max=${AGENT_QUEUE_MAX:-3})"
# Keep the Mac awake for the lifetime of the loop unless explicitly opted out.
keep=""
if [ "${AGENT_QUEUE_NO_CAFFEINATE:-0}" != "1" ] && command -v caffeinate >/dev/null 2>&1; then
keep="caffeinate -dimsu"
fi
# exec so the LaunchAgent tracks the real worker PID (clean KeepAlive restarts).
# shellcheck disable=SC2086
exec $keep "$SCRIPT_DIR/agent-queue.sh" run