Build Go aos-say client and launchd socket relay #518

Closed
opened 2026-07-14 08:45:31 +00:00 by coilyco-ops · 2 comments
Member

Goal

Ship a Mac-integrated speech helper in AOS so host shells and ward containers can say short status messages without Kai manually starting a server.

Decision

Use Go. AOS authors the helper. Infrastructure owns host rollout.

Scope

  • Add a small Go module or command under AOS for the speech helper.
  • Ship one user-facing command, aos-say.
  • Ship one relay entrypoint suitable for launchd socket activation.
  • macOS direct path: aos-say calls /usr/bin/say when running on Darwin.
  • container/Linux path: aos-say connects to the configured host relay and sends one request.
  • Relay path: read one request from launchd-provided socket/stdin, execute /usr/bin/say by argv, then exit.
  • Include flags for voice, rate, dry-run, and notification mode if the implementation can keep them small.
  • Include tests for request parsing, argv construction, missing relay diagnostics, and shell-metacharacter safety.

Guardrails

  • No shell eval.
  • No always-on Python server.
  • No tracked token or host-specific secret.
  • No infra rollout in AOS beyond documented expectations and local helper behavior.

Infra dependency

Infrastructure should install and manage the macOS LaunchAgent/socket. See the paired infrastructure issue once filed.

Source discussion: coilysiren/inbox#210 follow-up.

## Goal Ship a Mac-integrated speech helper in AOS so host shells and ward containers can say short status messages without Kai manually starting a server. ## Decision Use Go. AOS authors the helper. Infrastructure owns host rollout. ## Scope - Add a small Go module or command under AOS for the speech helper. - Ship one user-facing command, aos-say. - Ship one relay entrypoint suitable for launchd socket activation. - macOS direct path: aos-say calls /usr/bin/say when running on Darwin. - container/Linux path: aos-say connects to the configured host relay and sends one request. - Relay path: read one request from launchd-provided socket/stdin, execute /usr/bin/say by argv, then exit. - Include flags for voice, rate, dry-run, and notification mode if the implementation can keep them small. - Include tests for request parsing, argv construction, missing relay diagnostics, and shell-metacharacter safety. ## Guardrails - No shell eval. - No always-on Python server. - No tracked token or host-specific secret. - No infra rollout in AOS beyond documented expectations and local helper behavior. ## Infra dependency Infrastructure should install and manage the macOS LaunchAgent/socket. See the paired infrastructure issue once filed. Source discussion: coilysiren/inbox#210 follow-up.
Author
Member

WARDED_WORKFLOW: reservation-held

reservation details

Holder: launch intent for container engineer-codex-agentic-os-518 on host kais-macbook-pro-2.local.

Accepted by ward agent --harness codex (reserved 2026-07-14T08:46:42Z). Concurrent ward agent runs are blocked until this intent becomes visible or the intent is released. The stale-intent fallback is still TTL-bounded (3h TTL). --override-reservation overrides.

Do not comment on or edit this issue to steer the run while it is reserved. The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a new issue, dispatched fresh. That is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494).

run seed context — what this run is carrying (ward#609)
  • Resolved: coilyco-flight-deck/agentic-os#518 · branch issue-518 · harness codex · workflow pull-request-and-merge
  • Run: engineer-codex-agentic-os-518 · ward v0.672.0 · dispatched 2026-07-14T08:46:39Z
  • Comment thread: 0 included in the pre-flight read, 0 stripped (ward's own automated comments).

Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.672.0).

— Codex, via ward agent

<!-- ward-agent-reservation --> WARDED_WORKFLOW: reservation-held <details><summary>reservation details</summary> Holder: launch intent for container `engineer-codex-agentic-os-518` on host `kais-macbook-pro-2.local`. Accepted by `ward agent --harness codex` (reserved 2026-07-14T08:46:42Z). Concurrent `ward agent` runs are blocked until this intent becomes visible or the intent is released. The stale-intent fallback is still TTL-bounded (3h TTL). `--override-reservation` overrides. **Do not comment on or edit this issue to steer the run while it is reserved.** The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a **new issue, dispatched fresh**. That is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494). <details><summary>run seed context — what this run is carrying (ward#609)</summary> - **Resolved:** `coilyco-flight-deck/agentic-os#518` · branch `issue-518` · harness `codex` · workflow `pull-request-and-merge` - **Run:** `engineer-codex-agentic-os-518` · ward `v0.672.0` · dispatched `2026-07-14T08:46:39Z` - **Comment thread:** 0 included in the pre-flight read, 0 stripped (ward's own automated comments). Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.672.0). </details> </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
Author
Member

WARDED_WORKFLOW: merge-ready

details workflow: pull-request-and-merge; review summary: review gate skipped by ~/.ward/config.yaml default pr: #519 felt: the helper stayed compact, and the relay path was the only real wiring work. confidence: high surprises: Forgejo merge state lagged the checks, then the director lane caught up. follow-ups: none.
WARDED_WORKFLOW: merge-ready <details><summary>details</summary> workflow: pull-request-and-merge; review summary: review gate skipped by ~/.ward/config.yaml default pr: https://forgejo.coilysiren.me/coilyco-flight-deck/agentic-os/pulls/519 felt: the helper stayed compact, and the relay path was the only real wiring work. confidence: high surprises: Forgejo merge state lagged the checks, then the director lane caught up. follow-ups: none. </details>
Sign in to join this conversation.
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#518
No description provided.