diff --git a/scripts/start-local-agent.sh b/scripts/start-local-agent.sh index 1170554..091aa73 100755 --- a/scripts/start-local-agent.sh +++ b/scripts/start-local-agent.sh @@ -5,6 +5,24 @@ ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" CONFIG_PATH="${1:-$ROOT_DIR/local-agent/config.example.json}" NODE_BIN="${BOSS_NODE_BIN:-}" +append_path_if_dir() { + local candidate="$1" + if [[ -d "$candidate" && ":$PATH:" != *":$candidate:"* ]]; then + PATH="$candidate:$PATH" + fi +} + +# launchd starts with a very small PATH. Keep CLI runtimes discoverable for +# Master Codex Node tasks that spawn `codex`, `node`, or Homebrew tools. +append_path_if_dir "/Applications/Codex.app/Contents/Resources" +append_path_if_dir "$HOME/Applications/Codex.app/Contents/Resources" +append_path_if_dir "/opt/homebrew/bin" +append_path_if_dir "/opt/homebrew/sbin" +append_path_if_dir "/usr/local/bin" +append_path_if_dir "$HOME/.local/bin" +append_path_if_dir "$HOME/.bun/bin" +export PATH + if [[ -z "$NODE_BIN" ]]; then NODE_BIN="$(command -v node 2>/dev/null || true)" fi diff --git a/tests/browser-desktop-runtime-config-defaults.test.mjs b/tests/browser-desktop-runtime-config-defaults.test.mjs index b9f263b..898b6f6 100644 --- a/tests/browser-desktop-runtime-config-defaults.test.mjs +++ b/tests/browser-desktop-runtime-config-defaults.test.mjs @@ -185,4 +185,9 @@ test("repo ships browser and desktop runtime scripts", async () => { assert.match(installLocalLaunchAgent, /codexComputerUseWorkdir/); assert.match(startLocalAgent, /BOSS_NODE_BIN/); assert.match(startLocalAgent, /\.boss-runtime\/node-\*\/bin\/node/); + assert.match( + startLocalAgent, + /\/Applications\/Codex\.app\/Contents\/Resources/, + "local-agent launchd startup must include Codex.app CLI in PATH so Master Codex Node can spawn codex", + ); });