Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 5 additions & 31 deletions nix/home/macmini.nix
Original file line number Diff line number Diff line change
Expand Up @@ -72,37 +72,6 @@ in
--add-dir "$HOME/.dotfiles" \
"$@"
'')
# chrome-automation: the same shape the workstation uses. Chrome here is only ever an
# automation target (Playwright MCP attaches over CDP on 9222, and claude-login-broker
# drives it), so it gets its own profile, comes up windowless in the background, and is
# expected to be shut down when the job is done rather than left resident.
#
# Not `--headless`: the workstation proved on 2026-08-10 that the extension's native host
# never starts in that mode. What was actually running on this machine were one-shot
# `--print-to-pdf` / `--screenshot` invocations that failed to exit — one had been stuck
# for three days holding 250M. `stop` matches on the profile path so it can only ever take
# down the automation instance.
(pkgs.writeShellScriptBin "chrome-automation" ''
profile="$HOME/Library/Application Support/Google/Chrome-automation"
case "''${1:-start}" in
start)
/usr/bin/open -gjn -a "Google Chrome" --args \
--user-data-dir="$profile" \
--no-startup-window \
--remote-debugging-port=9222
;;
stop)
/usr/bin/pkill -f "Chrome-automation" || true
;;
status)
/usr/bin/pgrep -fl "Chrome-automation" || echo "not running"
;;
*)
echo "usage: chrome-automation [start|stop|status]" >&2
exit 2
;;
esac
'')
];

# launchd does not create the parent of StandardOutPath, and the dashboard agent's log moved out
Expand Down Expand Up @@ -188,6 +157,11 @@ in
CODEX_HOME = "${config.xdg.dataHome}/codex";
CODEX_SQLITE_HOME = "${config.xdg.stateHome}/codex/sqlite";
XDG_CONFIG_HOME = "${config.xdg.configHome}";
# Orca's bundled agent-browser picks a browser by walking /Applications in the order
# Google Chrome, Chrome Canary, Chromium, Brave. Helium matches none of those names, so
# this pin is what makes it the target at all — and it also keeps a Chrome that some
# installer drops back in from quietly taking the job over again.
AGENT_BROWSER_EXECUTABLE_PATH = "/Applications/Helium.app/Contents/MacOS/Helium";
};
RunAtLoad = true;
KeepAlive = true;
Expand Down
20 changes: 16 additions & 4 deletions nix/hosts/macmini.nix
Original file line number Diff line number Diff line change
Expand Up @@ -307,10 +307,22 @@ in
# (RustDesk was here for remote GUI. It never got its unattended access or its Screen
# Recording grant, so it had never once been used, while macOS Screen Sharing on :5900
# already covers the same job over the tailnet with nothing to install.)
# For Claude browser automation (Playwright MCP + claude-login-broker). Driven through the
# `chrome-automation` wrapper (home/macmini.nix): own profile, windowless, CDP on 9222, and
# stopped when the job ends. The chrome-launch.sh this comment used to point at never existed.
"google-chrome"
# Helium for agent-driven browsing, replacing google-chrome (2026-09-11). Both reasons
# the Chrome line used to give had expired: the resident Playwright MCP was deleted in
# #561, and login fills moved to the Safari native helper. What actually kept Chrome in
# service was Orca's bundled agent-browser, which resolves a browser by walking
# /Applications on its own, and Google's build happens to sit first in that order.
#
# Helium is the ungoogled-chromium build the workstation already treats as its Chromium
# of record, so both hosts now drive the same browser. agent-browser's search list only
# knows Chrome, Chrome Canary, Chromium and Brave, so it cannot find Helium on its own —
# the pin lives in AGENT_BROWSER_EXECUTABLE_PATH on the Orca agent (home/macmini.nix),
# which is also where that ordering stops mattering.
#
# No no_quarantine, unlike Orca above: it is notarized (Developer ID: imput LLC), spctl
# accepts it, and it launched headlessly on this host with the quarantine attribute still
# attached. The cask is auto_updates, so the app owns its own updates.
"helium-browser"
# Creative Cloud is the supported installer and license runtime for After Effects. Adobe
# manages AE itself after this bootstrap, but declaring the CC installer keeps brew's
# cleanup=uninstall from removing it on a later rebuild. Login secrets are filled through
Expand Down
Loading