Problem
Message delivery to running sessions is tmux keystroke emulation: set-buffer + paste-buffer + separate Enter. Every harness has its own TUI paste quirks, and we're accumulating timing hacks to compensate:
paste_settle works but it's a race dressed as a config value — flagged by jerpint at review as something to fix properly.
Direction
Per-harness programmatic input where it exists, keystrokes only as fallback:
The harness table already supports this shape: deliver() becomes a per-harness strategy (api | acp | tmux-paste) instead of tmux-paste with per-harness timing knobs.
Non-goals for now
The tmux-attach model for humans stays — this is about how the bot delivers messages, not how humans interact.
🤖 Generated with Claude Code
Problem
Message delivery to running sessions is tmux keystroke emulation:
set-buffer+paste-buffer+ separateEnter. Every harness has its own TUI paste quirks, and we're accumulating timing hacks to compensate:paste_settle: 0.5property (Add codex harness (stacked on #356) #357)paste_settleworks but it's a race dressed as a config value — flagged by jerpint at review as something to fix properly.Direction
Per-harness programmatic input where it exists, keystrokes only as fallback:
opencode serveHTTP API — real message injectionThe harness table already supports this shape:
deliver()becomes a per-harness strategy (api | acp | tmux-paste) instead of tmux-paste with per-harness timing knobs.Non-goals for now
The tmux-attach model for humans stays — this is about how the bot delivers messages, not how humans interact.
🤖 Generated with Claude Code