fix(aterm): make a bundle launch reach the harness, and name it for who answers #1279

Merged
coilysiren merged 1 commit from aos/claude/rc44-bundle-fixes into main 2026-08-26 08:25:40 +00:00
Member

Four things from the first real use of the .app bundles.

The harness was not on PATH

Pinning aos, agent-compose, and kitty covered what aterm resolves itself, but agent-compose launch resolves the harness off PATH. So a Finder launch reached shadow init and then died on claude not found: it lives in ~/.local/bin, which a login PATH of /usr/bin:/bin:/usr/sbin:/sbin does not carry.

The wrapper now rebuilds PATH from a login shell, which stays current as tools move, over a generation-time copy for a profile that exports none. That copy drops entries that do not resolve, so a generating session's scratch directories do not outlive it inside seven bundles.

The window opened small

kitty's default font is 11.0 and its default state is a normal window, both sized for a terminal rather than a session read all day. aterm now passes --start-as maximized and font_size 14.5, matching kitty/kitty.conf, with --start-as and --font-size to override and a refusal for a value kitty would reject.

This is aterm-wide rather than bundle-only, since the bundle opens the same window the command does. Say so if you want terminal launches left alone.

The name said nothing

A bundle is now Claude // Vera // Systems Administrator. A POSIX filename cannot hold a slash, so the name is stored with :: and macOS renders each colon as one, which is also why the executable inside stays a plain aterm-<role>. Nothing clips at 255 bytes, though Finder and Launchpad wrap a name this long across two lines.

Renaming, safely

Identifying a bundle by a marker inside it rather than by its filename means the bundles the previous release wrote are reported rather than orphaned, so ~/Applications can be cleaned up deliberately.

Verification

  • The generated launcher run under env -i PATH=/usr/bin:/bin:/usr/sbin:/sbin now resolves claude at /Users/kai/.local/bin/claude, plus agent-compose and kitty. That is the exact failure this fixes.
  • macOS renders the stored :: as //, confirmed through the display layer.
  • 97 tests green, pre-commit run --all-files green, plutil -lint clean.
  • The release gate now asserts the window options, which is what would catch a regression on the second point.

Icons are still deliberately out of scope: every tile uses the system app icon, and per-role icons from each role's favorite color remain follow-up work.

Four things from the first real use of the `.app` bundles. ## The harness was not on PATH Pinning `aos`, `agent-compose`, and kitty covered what `aterm` resolves itself, but `agent-compose launch` resolves the harness off `PATH`. So a Finder launch reached shadow init and then died on `claude` not found: it lives in `~/.local/bin`, which a login `PATH` of `/usr/bin:/bin:/usr/sbin:/sbin` does not carry. The wrapper now rebuilds `PATH` from a login shell, which stays current as tools move, over a generation-time copy for a profile that exports none. That copy drops entries that do not resolve, so a generating session's scratch directories do not outlive it inside seven bundles. ## The window opened small kitty's default font is 11.0 and its default state is a normal window, both sized for a terminal rather than a session read all day. `aterm` now passes `--start-as maximized` and `font_size 14.5`, matching `kitty/kitty.conf`, with `--start-as` and `--font-size` to override and a refusal for a value kitty would reject. This is aterm-wide rather than bundle-only, since the bundle opens the same window the command does. Say so if you want terminal launches left alone. ## The name said nothing A bundle is now `Claude // Vera // Systems Administrator`. A POSIX filename cannot hold a slash, so the name is stored with ` :: ` and macOS renders each colon as one, which is also why the executable inside stays a plain `aterm-<role>`. Nothing clips at 255 bytes, though Finder and Launchpad wrap a name this long across two lines. ## Renaming, safely Identifying a bundle by a marker inside it rather than by its filename means the bundles the previous release wrote are reported rather than orphaned, so `~/Applications` can be cleaned up deliberately. ## Verification - The generated launcher run under `env -i PATH=/usr/bin:/bin:/usr/sbin:/sbin` now resolves `claude` at `/Users/kai/.local/bin/claude`, plus `agent-compose` and kitty. That is the exact failure this fixes. - macOS renders the stored `::` as `//`, confirmed through the display layer. - 97 tests green, `pre-commit run --all-files` green, `plutil -lint` clean. - The release gate now asserts the window options, which is what would catch a regression on the second point. Icons are still deliberately out of scope: every tile uses the system app icon, and per-role icons from each role's favorite color remain follow-up work.
fix(aterm): make a bundle launch reach the harness, and name it for who answers
All checks were successful
ci / ward-doctor (pull_request) Successful in 12s
ci / gate (pull_request) Successful in 1m4s
ci / aos-eval-tests (pull_request) Successful in 1m22s
ci / aos-cli-tests (pull_request) Successful in 1m39s
4e281aee1f
Four things Kai hit on the first real use of the .app bundles.

**The harness was not on PATH.** Pinning aos, agent-compose, and kitty
covered what aterm resolves itself, but `agent-compose launch` resolves
the harness off PATH, so a Finder launch reached shadow init and then
died on `claude` not found: it lives in ~/.local/bin, which a login
PATH of /usr/bin:/bin:/usr/sbin:/sbin does not carry. The wrapper now
rebuilds PATH from a login shell, which stays current as tools move,
over a generation-time copy for a profile that exports none. That copy
drops entries that do not resolve, so a generating session's scratch
directories do not outlive it inside seven bundles.

**The window opened small.** kitty's default font is 11.0 and its
default state is a normal window, both set for a terminal rather than a
session read all day. aterm now passes --start-as maximized and
font_size 14.5, matching kitty/kitty.conf, with --start-as and
--font-size to override and a refusal for a value kitty would reject.
This is aterm-wide rather than bundle-only, since the bundle opens the
same window the command does.

**The name said nothing.** A bundle is now `Claude // Vera // Systems
Administrator`. A POSIX filename cannot hold a slash, so the name is
stored with ` :: ` and macOS renders each colon as one, which is also
why the executable inside stays a plain aterm-<role>. Nothing clips at
255 bytes, though Finder and Launchpad wrap a name this long.

Renaming meant identifying a bundle by a marker inside it rather than by
its filename, so the bundles the previous release wrote are reported
instead of orphaned. The release gate now asserts the window options,
which is what would catch a regression on the second point.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Agent-Role: platform
coilysiren deleted branch aos/claude/rc44-bundle-fixes 2026-08-26 08:25:40 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/agentic-os!1279
No description provided.