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>