The smallest correct step out of #402, available today with no primitive and no code — a change to three agent rows.
The state
All three Operator agents declare the generic terminal connector's tools:
terminal_list_targets · terminal_capture · terminal_run_command
terminal_send_keys · terminal_new_target · terminal_kill_target
terminal_list_targets takes backend: "all" | "tmux" | "kitty" | "iterm2" and defaults to all (connectors/terminal.ts:50). So the tmux Operator, the kitty Operator and the iTerm2 Operator are the same agent with three names and three descriptions, each of which is false about the other two.
Observed: the owner asked the tmux Operator about tmux sessions and it correctly reported two iTerm2 windows, because that is genuinely what it can reach.
The fix
A tmux-only connector already exists in the registry (registry.ts id: "tmux") with six backend-exclusive tools — tmux_list_sessions, tmux_capture_pane, tmux_run_command, tmux_send_keys, tmux_new_session, tmux_kill_session. Declaring those in the tmux Operator's capabilities.tools makes it a tmux agent by construction: there is no iTerm2 code path behind them to reach.
Why bother, given #402 supersedes it
Because it is free and it makes one agent honest now, and because it clarifies the general ticket: the reason kitty and iTerm2 cannot be fixed the same way is precisely the argument for the primitive. Shipping a third and fourth parallel connector to express "one backend" is the workaround that does not scale.
Direction: docs/capability-constraints.md.
The smallest correct step out of #402, available today with no primitive and no code — a change to three agent rows.
The state
All three Operator agents declare the generic terminal connector's tools:
terminal_list_targetstakesbackend: "all" | "tmux" | "kitty" | "iterm2"and defaults toall(connectors/terminal.ts:50). So the tmux Operator, the kitty Operator and the iTerm2 Operator are the same agent with three names and three descriptions, each of which is false about the other two.Observed: the owner asked the tmux Operator about tmux sessions and it correctly reported two iTerm2 windows, because that is genuinely what it can reach.
The fix
A tmux-only connector already exists in the registry (
registry.tsid: "tmux") with six backend-exclusive tools —tmux_list_sessions,tmux_capture_pane,tmux_run_command,tmux_send_keys,tmux_new_session,tmux_kill_session. Declaring those in the tmux Operator'scapabilities.toolsmakes it a tmux agent by construction: there is no iTerm2 code path behind them to reach.tmux_*tools.kitty_*oriterm2_*connector. They keep the generic tools and must wait for [design] A "tmux Operator" can drive iTerm2 — a creator cannot declare which backend an agent may touch, or that it owns exactly one terminal #402'sbackendsceiling. Say so in their descriptions in the meantime, or unpublish them — a catalog entry named "kitty Operator" that drives tmux is the description-vs-capability defect [bug] The catalog claims lint runs on agent create but not on update — the path where descriptions actually change #362's lint exists to catch, and it is currently passing because the capability genuinely is "all terminals".lintAgentClaimsover the three rows afterwards.Why bother, given #402 supersedes it
Because it is free and it makes one agent honest now, and because it clarifies the general ticket: the reason kitty and iTerm2 cannot be fixed the same way is precisely the argument for the primitive. Shipping a third and fourth parallel connector to express "one backend" is the workaround that does not scale.
Direction:
docs/capability-constraints.md.