Monorepo for Aesthetic.Computer aesthetic.computer
core toolchain macos fleet JOINING.md
5.5 kB
Markdown
at main

Joining the family #

A family Mac is a full AC workstation: its own checkout, the shared Fish commands, and tracked editor settings. Neo and Blueberry are the reference; Frisbee exposed the missing step between a Slab-only machine and a workstation. A running menu bar does not mean the development environment is installed.

Connect and check out AC #

Give the Mac its own hostname, join Tailscale, enable Remote Login, and authorize an existing operator's public SSH key. Keep each machine's private key local. The examples assume the personal jas account; use the actual login for another host. Verify SSH before provisioning:

ssh jas@frisbee 'hostname; whoami; uname -m'

On the new Mac, clone AC if absent:

git clone https://knot.aesthetic.computer/aesthetic.computer/core ~/aesthetic-computer

For an existing checkout, inspect git status first. A Slab-only sparse checkout needs expansion; this downloads the remaining tracked files without changing branches or discarding edits:

cd ~/aesthetic-computer
git sparse-checkout disable

Keep repositories out of Desktop. Desktop's Shelf alias points to ~/Documents/Shelf; see the Mac conventions.

Install the shared environment #

Run in Terminal on the new Mac, as the login user:

bash ~/aesthetic-computer/scripts/mac-family-setup.sh

Homebrew and the default-shell change request the administrator password locally. The installer adds Fish, fnm, the repo's Node version, jq, ripgrep, Starship, Neovim, and coreutils. Fish loads the AC commands and c/co helpers from the checkout. Neovim, Starship, and Emacs configuration link to tracked dotfiles. Starship configuration is available; the shared AC Fish prompt remains active. Emacs itself is optional and is not installed by this baseline.

Replaced settings move to ~/.local/state/ac-dotfiles/backup.*. Fish history, universal variables, and other local files stay on the machine. Put intentional machine-specific shell additions in ~/.config/fish/config.local.fish, loaded after the shared configuration. Re-running setup preserves matching links.

--dotfiles-only installs configuration without packages or administrator access. The old dotfiles/install.sh and dotfiles/symlink.sh route Macs here too. The broader mac-native-bootstrap.sh is a separate development-server recipe; it also changes certificates, services, sudoers, and /workspaces, so it is not the family baseline.

Verify before calling it ready #

bash ~/aesthetic-computer/scripts/mac-family-setup.sh --check
fish -ic 'ac-help'

The check fails on missing baseline tools, dotfile links, AC shell commands, a non-Fish login shell, or missing sleep-control permission when Slab is installed. Setup installs that permission for an existing Slab installation. Open a fresh Terminal tab and confirm it starts in Fish. Repo updates carry shared shell changes; local overrides remain separate. Use git pull --ff-only only after reviewing local work, and rerun setup when .node-version or package requirements change.

Development-server dependencies and private configuration are a second step: install the relevant project's dependencies, provision its own vault access, and configure local certificates if it needs HTTPS. Do not copy another Mac's whole home, browser profile, agent credentials, or Fish universal variables. A shell check does not prove the site or authenticated services are working.

Add the machine's role #

Slab, Deskflow, agent CLIs, media tools, and compute workers have their own installers. Preserve those already present; install the ones the new machine will use. Test each role separately, including required macOS permissions. For Slab's Stay awake (lid closed) control, install its sleep permission rule from Terminal, then verify the actual setting:

bash ~/aesthetic-computer/slab/install.sh --sleep-control-only
~/.local/bin/claude-sleep awake
~/.local/bin/claude-sleep status

The last command must report SleepDisabled=1. Without this administrator-installed rule, a prompt-host-only Slab installation cannot apply the menu toggle. Use claude-sleep auto to restore normal sleep. Verify SSH remains reachable after closing the lid before relying on unattended work.

Choose its cursor/accent identity through the fleet tools.

For a browser-automation host, provision the ordinary Chrome profile and enable remote debugging through chrome://inspect/#remote-debugging. Keep a window open in that profile, and use the resident Puppet service for CDP. With the operator's fleet debugging policy authorized, install the shared consent handler:

node ~/aesthetic-computer/slab/captutor/bin/install-nag-fighter.mjs --allow-remote-debugging

It starts at login and remembers that policy across tool restarts. Verify a connection and a remote-debugging handled event in ~/.local/share/captutor/nag-fighter/events.jsonl; also check status.json for Accessibility failures or a locked desktop. The dialog may appear briefly before the handler acts. Use --deny-remote-debugging to revoke this policy. Details: Modalpolice.

For the fourth Mac, repeat these steps with its own name. No new Fish fork or copied Neo home directory is needed. Record exceptions in the machine's local configuration, and improve this shared path when another missing step appears.