Implements the tier-2 half of DEC-013 — macOS and Windows are first class; Linux is supported and headless, because it is the machine AI works on.
Current state
# scripts/macos-ai-tools.sh:262
[[ "$(uname -s)" == "Darwin" ]] || abort "This script supports macOS only."
There is no Linux script. scripts/ contains only macos-* and windows-*. The only Linux awareness anywhere is the root-check exemption for containers (/.dockerenv, /run/.containerenv), which exists for CI.
Why it matters — this already cost us
The weekly CSA-source sweep (#49, docs/periodic-sweep.md) was designed, built, and moved to a Claude cloud routine — then parked disabled, because the cloud sandbox ships no gh binary and wiring one needs a CSA-Internal PAT in cloud config. That is a fully built automation sitting shelved for want of a tier-2 baseline.
What tier 2 is, and is not
Is: CLI tools and authentication on VMs, containers, CI runners, cloud sandboxes. Non-interactive as the primary path, not a fallback.
Is not: a human desktop. No 1Password GUI, Slack, Zoom, Chrome, Claude Desktop, or ChatGPT Desktop. No assumption of a person at the keyboard.
The hard part is auth, not packages
Packages are mostly solved already, and by the vendors:
| tool |
Linux story |
| Claude Code |
signed apt / dnf / apk repositories, published by Anthropic |
| Codex |
Linux musl + gnu binaries, plus curl https://chatgpt.com/codex/install.sh | sh |
| Gemini CLI |
npm, same as everywhere |
| uv |
one static binary, all platforms (DEC-012) |
| git / gh |
distro packages |
The real work is the browser-dependent flows. gh auth login, claude login, and MCP OAuth (/mcp) all assume a browser and a human. "It works once you log in" is not a tier-2 answer. This needs device-code flows or injected credentials, and it is a credential-policy decision as much as a technical one — the same one that parked the sweep routine.
Suggested scope for a first pass
- Decide whether tier 2 is a
linux-ai-tools.sh or a portable path inside the existing script. The base layer (git, gh, node, python, the three CLIs, plugins, MCP registration) is largely shared; the package manager and the GUI-app block are what differ.
- Prefer the OS-agnostic vendor install methods above over per-distro packaging, so this does not become a third codebase to keep in sync — the repo already carries the cost of two.
- Treat the auth story as its own decision, not a detail of the script.
Note the existing duplication discipline (tools/check-duplication.py) will apply to any shared functions a third script introduces, which is an argument for portability over a separate file.
Implements the tier-2 half of DEC-013 — macOS and Windows are first class; Linux is supported and headless, because it is the machine AI works on.
Current state
There is no Linux script.
scripts/contains onlymacos-*andwindows-*. The only Linux awareness anywhere is the root-check exemption for containers (/.dockerenv,/run/.containerenv), which exists for CI.Why it matters — this already cost us
The weekly CSA-source sweep (#49,
docs/periodic-sweep.md) was designed, built, and moved to a Claude cloud routine — then parked disabled, because the cloud sandbox ships noghbinary and wiring one needs a CSA-Internal PAT in cloud config. That is a fully built automation sitting shelved for want of a tier-2 baseline.What tier 2 is, and is not
Is: CLI tools and authentication on VMs, containers, CI runners, cloud sandboxes. Non-interactive as the primary path, not a fallback.
Is not: a human desktop. No 1Password GUI, Slack, Zoom, Chrome, Claude Desktop, or ChatGPT Desktop. No assumption of a person at the keyboard.
The hard part is auth, not packages
Packages are mostly solved already, and by the vendors:
curl https://chatgpt.com/codex/install.sh | shThe real work is the browser-dependent flows.
gh auth login,claudelogin, and MCP OAuth (/mcp) all assume a browser and a human. "It works once you log in" is not a tier-2 answer. This needs device-code flows or injected credentials, and it is a credential-policy decision as much as a technical one — the same one that parked the sweep routine.Suggested scope for a first pass
linux-ai-tools.shor a portable path inside the existing script. The base layer (git, gh, node, python, the three CLIs, plugins, MCP registration) is largely shared; the package manager and the GUI-app block are what differ.Note the existing duplication discipline (
tools/check-duplication.py) will apply to any shared functions a third script introduces, which is an argument for portability over a separate file.