Upstream omacom-io/omaterm deleted the native install path on 2026-06-01
and went Docker-only (omaterm.org/install now installs Docker + a container
launcher). That would split this headless box into a host (Once/once-add/
omarchy-send) and a container (agents) with the baked CLAUDE.md/skill unseen
by an in-container agent.
Instead, keep the unified-host native install by sourcing OMATERM from a
pinned fork:
- All 7 install-native.sh URLs -> 28allday/omaterm @native-frozen
(self-consistent: its setup_git_checkout clones the same frozen branch).
- dotfiles pinned via 28allday/omadots @native-frozen.
- Native first-login flow unchanged (mktemp + /dev/tty sed + exec bash -l
OMATERM-last closer); only the source moved off the deleted upstream path.
- AI agents still come live from mise, so they stay current.
Updated the rationale comment, baked CLAUDE.md, and README fork disclosure.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the real machine names used as examples ("Slate Starburst",
"Gold Cluster") with neutral placeholders ("My Desktop", "My Server").
This script ships to third parties, so the baked skill/CLAUDE.md docs
shouldn't carry the maintainer's personal LAN device names.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Two changes to the host conventions baked into provisioned boxes:
- CLAUDE.md: add a "custom-image deploy" section covering how to get a
locally-built image onto Once as a .local app without root — registry:2
on 127.0.0.1:5000 (Once always docker-pulls), then deploy against
localhost and `once update localhost --host <name>.local` to skip the
re-verification that would need the /etc/hosts sudo edit. Plus the /up
200 health probe, the remove->deploy->update redeploy dance, and the
nginx {n,} quantifier parse gotcha.
- Skill: drop Once's upstream AGENTS.md (kamal-proxy architecture, Go
build/style, "don't make commits"). That's about hacking on the Once
codebase, not operating this host — noise in a host-admin skill. The
skill now ships only SKILL.md.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The installer pulls omarchy-send from its public `main` (live release e66662f),
which has headless send (--to/--message/--send-pin/--wait), TUI messaging, and
desktop notifications — but NOT the message log, AI auto-reply, agentic mode, or
--to-ip/--to-fingerprint reply flags (those are unreleased). The baked SKILL.md
and CLAUDE.md were documenting the unreleased features, over-promising on a real
install.
- SKILL.md: remove the messages.jsonl log section, the AI auto-reply + agentic
sections, and the --to-ip/--to-fingerprint examples; keep TUI, headless send,
notifications.
- CLAUDE.md: drop the JSONL log + auto-reply paragraph; messages show in the TUI
Messages tab (no on-disk log).
- Installer: remove the ~/.local/bin/omarchy-send-reply generator and the
config.json replyCmd seed (live ignores replyCmd; dead plumbing). The
~/.config chown fix goes too — nothing creates ~/.config/~/.local as root
during install anymore (OMATERM creates them as the user).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Brings the first-login server setup back to fully working on a fresh install:
- OMATERM: call install-native.sh directly. omaterm.org/install is now an
interactive native/docker dispatcher that would stall the unattended
first-run; the native branch is what a headless Arch box wants. Verified the
closing `exec bash -l` and bundled AI agents (mise.packages) still hold.
- Rebrand the user-facing "OMATERM + Once" headline to "omalocal" (banner,
setup prompt, closing reboot message); body still names the installed tools.
- Fix tmux "can't use /dev/tty" on first login. OMATERM's installer closes with
`exec bash -l </dev/tty >/dev/tty 2>&1`; with fds on /dev/tty, tmux's client
ttyname is the literal "/dev/tty", which tmux's server_client_open refuses.
Strip that redirect from the downloaded installer and run it without
redirecting our stdin, so the closing shell inherits the login pts
(/dev/pts/N) — which tmux accepts. (script(1) did not work: OMATERM
re-redirects to /dev/tty after it.)
- Fix Once not installing. Once installs before OMATERM (which used to provide
Docker); Once requires Docker and can't install it on Arch (get.docker.com is
unsupported there). Provision Docker in base: pacstrap docker, enable
docker.service in the chroot, and add the install user to the docker group at
install time, so the first-run Once install finds a running daemon and
once/once-add need no sudo. OMATERM's later docker setup no-ops.
- gitignore dated build-*.log files.
Full chain confirmed working on a clean install: Welcome to omalocal -> Once
installs -> Omarchy-Send (optional) -> OMATERM -> lands in tmux.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The reply generator now branches on OMARCHY_AGENTIC (set by omarchy-send):
reply-only (no tools) by default, or agentic (claude with its tools, to act on
the box then report) when the Settings agentic toggle is on. SKILL.md documents
the agentic toggle (g), that it's off by default and may only be enabled with a
PIN set (which gates who can trigger remote command execution), and to keep it
to a trusted LAN.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
omarchy-send gained a built-in "AI auto-reply" toggle (Settings tab), so the
installer no longer ships an omarchy-send-ai wrapper. Instead:
- Install ~/.local/bin/omarchy-send-reply: a reply *generator* that gets the
message in OMARCHY_MSG_* env and prints a short reply via the local claude CLI
(resolved from PATH or mise). Reply-only: --tools "" means it can't act on a
message; --permission-mode bypassPermissions avoids the first-run trust hang.
- Seed ~/.config/omarchy-send/config.json with replyCmd pointing at the
generator via $HOME (no username baked in); omarchy-send fills the rest on
first run. AutoReply stays off until the user flips it in Settings.
- SKILL.md / CLAUDE.md: document the message log (~/.local/state/.../messages.jsonl),
the "receive only while the TUI is open" model, reply-by-ip/fingerprint, and the
AI auto-reply Settings toggle; instruct the agent to use the toggle rather than
build poll-loops or daemons.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
omaterm.org/install now installs the AI agents itself (node/opencode/
claude-code/codex/gemini are in its mise.packages) and its installer ends
with `exec bash -l`, which re-sources ~/.bash_profile.
- Remove our now-redundant "Install AI agents via mise" prompt and its
stale comment (omaterm provides them).
- Guard against the re-sourced .bash_profile re-firing the welcome: the
firstrun script removes itself up-front, so the one-shot stays one-shot.
- Reorder so OMATERM runs last (Once + Omarchy-Send first), since its
`exec bash -l` hijacks the shell and drops the user into their session.
- Update welcome banner + in-script docs to list the bundled AI agents
and the new ordering. Also gitignore build.log.
Verified: pty-backed logic harness (ordering, one-shot, no recursion) and
a full VM boot of the rebuilt ISO (welcome + Once-first + clean no-recursion
shell on omaterm's failure path).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The baked omalocal-server skill (SKILL.md) and CLAUDE.md now cover the
v0.1.6 additions:
- Headless one-shot message send (--to/--message, no TTY) — usable from
scripts/cron/ssh on this headless box to ping a desktop or phone.
- Desktop notifications: noted as a no-op here (self-disables without a
session bus); relevant for the desktop side that receives from this box.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add /etc/profile.d/mise-shims.sh so globally-installed mise tools
(claude, codex, opencode, gemini, node) are runnable from any login
shell — including non-interactive `ssh host <cmd>` — without relying on
`mise activate` in dotfiles. Run `mise reshim` after the agent install
so the shims exist, and install node@latest first since gemini-cli is
npm-based.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Avoids the namespace collision with the official OMATERM toolkit
(omaterm.org). Renamed our own identity strings only; genuine
references to the OMATERM toolkit it bootstraps are left intact.
- script omaterm-iso.sh -> omalocal.sh; dir -> ~/Projects/omalocal
- output ISO omaterm-arch-*.iso -> omalocal-arch-*.iso (+ discovery glob)
- first-run mechanism: .omalocal-firstrun.sh, OMALOCAL_FIRSTRUN /
OMALOCAL_PROFILE_HOOK heredoc tags, comments
- embedded Claude skill omaterm-server -> omalocal-server
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
One-script builder that turns a stock Arch ISO into a headless,
key-only-SSH Arch server installer ISO that, on first login, offers
to bootstrap the OMATERM toolkit (omaterm.org) + Once.
- Header clarifies this is the ISO builder, not the OMATERM toolkit
itself (not affiliated with omaterm.org).
- First-run setup offers an opt-in AI-agents step
(mise use -g opencode claude-code codex gemini), since the
bare-metal omaterm.org installer does not include the agents.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>