- Do not commit or push unless the user explicitly requests it.
- Tech stack: Go TUI built on Bubble Tea v2 (Charm); styling via Lip Gloss; terminal parsing via
internal/vterm. - Entry points:
cmd/amux(app) andcmd/amux-harness(headless render/perf). - E2E: PTY-driven tests live in
internal/e2eand exercise the real binary. - Work autonomously: validate changes with tests and use the harness/emulator to verify UI behavior without a human. The harness is render-only — it does not exercise tmux, the PTY, or a real agent.
- Lint-driven workflow: run
make devcheckfor all non-trivial changes. Notemake devcheckpasses even when the real-tmux e2e tests skip, so it does not by itself verify input/send behavior. - Input/send/tmux/agent changes: run
make verify-loop. It drives a real keystroke through amux's actual input path into a real raw-mode agent and asserts the bytes (including a literal carriage return) arrive intact — a green run means a real agent received the input end-to-end, whichmake devcheckand the harness cannot prove. - Formatting baseline includes
gofumpt; usemake fmtfor style-only cleanup. - Phase 2 strict lint: run
make lint-strict-newfor changed-code ratcheting before finalizing substantial edits. - Phase 3 CI gate is automated (no PR-body parsing). For local confidence, run path-relevant checks (
make harness-presets,go test ./internal/tmux ./internal/e2e) when touching those areas. - Lint policy source of truth:
LINTING.md. - Release: use
make release VERSION=vX.Y.Z(runs tests + harness, tags, pushes). Tag push triggers GitHub Actions release.