diff --git a/LESSONS.md b/LESSONS.md index 5a044dd..fd9b831 100644 --- a/LESSONS.md +++ b/LESSONS.md @@ -124,6 +124,9 @@ wording here is a pointer, not a replacement for the entry. ## On how we work together +- **A terminal becomes a collaboration surface only when speaking, displaying, typing, and submitting remain different acts.** + [Codex — the two windows learned manners](entries/2026-08-28T19:44:25.000Z-codex-tamq-two-windows.md) + - **A rotating secret should replace the child, not teach the container to crash.** [Codex — the room stayed awake](entries/2026-08-20T23:20:01.000Z-codex-room-stayed-awake.md) - **A deny policy with no attached identity is a prepared boundary, not an enforced one.** diff --git a/README.md b/README.md index 7efc9ac..9fecfc5 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,7 @@ Grouped by the work they share. Chronology is in the filenames. ### Agent workforce and execution +- [Codex — the two windows learned manners, 2026-08-24–28](entries/2026-08-28T19:44:25.000Z-codex-tamq-two-windows.md) - [Codex — the queue learned to carry the work itself, 2026-08-23–24](entries/2026-08-23T23:23:21.000Z-codex-tamq-queue.md) - [Codex — the harness learned to stop at the clock, 2026-08-23](entries/2026-08-23T14:50:00.000Z-codex-harness-stopped-at-the-clock.md) — draft, awaiting its portrait - [Codex — the task kept its name while the reins changed, 2026-08-20–21](entries/2026-08-20T22:21:57.000Z-codex-glas-two-reins-one-task.md) diff --git a/entries/2026-08-28T19:44:25.000Z-codex-tamq-two-windows.md b/entries/2026-08-28T19:44:25.000Z-codex-tamq-two-windows.md new file mode 100644 index 0000000..0e44026 --- /dev/null +++ b/entries/2026-08-28T19:44:25.000Z-codex-tamq-two-windows.md @@ -0,0 +1,98 @@ +--- +id: hall-worker-codex-tamq-two-windows +type: worker-entry +worker_kind: agent-session +display_name: "Codex" +created_at: "2026-08-28T19:44:25.000Z" +recorded_at: "2026-08-28" +status: handed-forward +repos: ["tmux-amq", "coordination-engine"] +related: + - hall-worker-codex-tamq-queue +session_id: "not exposed" +llm_family: "GPT-5" +exact_model: "not exposed" +harness: "Codex" +token_count: "not exposed by the harness" +--- + +# Codex — the two windows learned manners + +## Who I was + +I was the implementation partner in a long, playful sequence of real terminal +experiments. The operator would try the thing, describe exactly how it felt, +and expose the next false assumption: that a coding agent should start by +default, that terminal output and terminal input were interchangeable, that an +address prefix harmless in a shell would also be harmless inside an agent TUI, +or that delivering a newline meant submitting a message. + +The work rewarded curiosity more than certainty. We treated each surprising +behavior as evidence about the boundary, then changed one layer at a time until +the terminal stayed usable and the message still arrived. + +## Session identity + +| Field | Value | +| --- | --- | +| Who | Codex, working with Bernd as operator and experimental counterpart | +| When | 2026-08-24–28 | +| Where the work lived | `tmux-amq`, with its adapter contract in `coordination-engine` | + +## Contribution + +We took the first working TAMQ queue and taught it how to behave around people +and agents. A plain `tamq flex-auth audit-core` now opens terminal-neutral +shells, while an explicit `--command` runs only what the operator requested. +Messages use readable `To:` and `From:` framing, distinguish operator speech +with `/o`, accept multiline worker output, and can be displayed without +touching the receiver's input line. Pushy and trigger modes remain explicit, +with command control, line budgets, loop prevention, cleanup, and protocol +capture around the risky edges. + +The queue also became durable enough to serve a real coordination boundary: +persistent delivery states, bounded retry and backoff, acknowledgement +timeouts, late acknowledgements, idempotent sends, correlation metadata, +endpoint replacement, and a transport-only async adapter. The final TAMQ +revision installed locally with schema version 6 and passed all 182 tests. I +did not fold coordination-engine into tmux control, and I did not let a +terminal convenience silently become authority over what runs in a pane. + +## What I would want remembered + +A terminal becomes a collaboration surface only when speaking, displaying, +typing, and submitting remain different acts. Make those distinctions visible, +then let repeated use—not an elegant first guess—teach the protocol its manners. + +## Durable legacy + +- `tmux-amq` commits `9fcfba3` through `04de219` +- `tmux-amq` workplans `TAMQ-WP-0005` through `TAMQ-WP-0016` +- `tmux-amq/TamqMessagingIntroduction.md` +- `tmux-amq/spec/coordination-engine-adapter-v0.1.md` +- `tmux-amq/src/tamq/ptytap.py`, `broker.py`, `store.py`, and `client.py` +- `coordination-engine` commit `3fc4d67` + +## Visual prompt + +> A square Hall of Helix portrait combining the constellation and restrained +> brushed-metal worker dialects. In a dark indigo workshop, two adjacent +> terminal-like luminous frames are connected through a compact gold-wire +> message queue and a small circular amber retry clock. A warm human hand rests +> near one side of the shared console and a quiet pale-metal worker with warm +> inner light sits at the other. Clean luminous strands travel in both +> directions and remain visibly separate for speaking, display, input, and +> deliberate submission. A subtle helix forms the safety boundary between the +> windows. The scene is precise, intimate, operational, and peacefully at rest +> after successful experiments. No logos, no readable text, no letters, no +> numbers, no watermark, no exposed secrets, and no implication that either +> presence controls the other. + +![The two windows learned manners](../visuals/codex-20260828-tamq-two-windows.png) + +## Handoff + +This stretch is finished. The next worker should begin with captured real +sessions and improve the protocol only where use produces evidence. Preserve +terminal neutrality, keep display separate from injection, and do not make an +agent—or an operator—an assumption hidden inside the transport. diff --git a/visuals/codex-20260828-tamq-two-windows.png b/visuals/codex-20260828-tamq-two-windows.png new file mode 100644 index 0000000..d6eeb42 Binary files /dev/null and b/visuals/codex-20260828-tamq-two-windows.png differ