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>
49 lines
2.2 KiB
Bash
Executable File
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
|