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>