Skip to content

Commit 91ae428

Browse files
committed
docs(MIGRATION): Cross-link the tools and variables it names
why: `CHANGES` links every tool it mentions, and the migration page named the same tools and variables as bare code. A reader working out which toolset a tool moved into had no way to reach the tool's page from the table that told them. what: - Link the toolset membership lists, the tool-name table, and the batch rationale, using `{toolref}` in enumerations and `{tooliconl}` for a single tool named in prose, matching `docs/topics/trust.md` - Link `LIBTMUX_TOOLSETS`, `LIBTMUX_TOOLS`, `LIBTMUX_EXCLUDE_TOOLS` and `LIBTMUX_MCP_WAIT_MAX_SECONDS`, and point the safety-topic sentence at `{ref}`trust`` - Link the tools and the wait ceiling the 0.1.0a19 notes already named - Leave `LIBTMUX_SAFETY` and the removed batch wrappers as literals: the variable has no `{envvar}` directive, and the wrappers have no pages, so a role on either resolves to nothing
1 parent 0954e99 commit 91ae428

1 file changed

Lines changed: 31 additions & 23 deletions

File tree

‎MIGRATION‎

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ stopped working would leave you believing a surface was narrower than it is.
3737

3838
#### The new default names no environment variables
3939

40-
An unset `LIBTMUX_TOOLSETS` selects `inspect,manage,execute` — the surface
40+
An unset {envvar}`LIBTMUX_TOOLSETS` selects `inspect,manage,execute` — the surface
4141
`mutating` gave you. If you were on the old default, delete `LIBTMUX_SAFETY`
4242
from your client config and put nothing in its place:
4343

@@ -62,8 +62,9 @@ Name a variable only to move off that default.
6262
| `LIBTMUX_SAFETY=mutating` (the default) | nothing — the default is `inspect,manage,execute` |
6363
| `LIBTMUX_SAFETY=destructive` | `LIBTMUX_TOOLSETS=inspect,manage,execute,teardown` |
6464

65-
Two variables are new. `LIBTMUX_TOOLS` enables individual tools regardless
66-
of toolset, and `LIBTMUX_EXCLUDE_TOOLS` refuses them regardless of every
65+
Two variables are new. {envvar}`LIBTMUX_TOOLS` enables individual tools
66+
regardless of toolset, and {envvar}`LIBTMUX_EXCLUDE_TOOLS` refuses them
67+
regardless of every
6768
enable above. An unknown name in any of the three fails startup the same way.
6869

6970
### Surfaces the tiers could not express
@@ -81,43 +82,47 @@ An agent that can look and clean up, but not type.
8182

8283
| Before | After |
8384
| --- | --- |
84-
| `call_readonly_tools_batch` | `call_read_tools_batch` |
85+
| `call_readonly_tools_batch` | {tooliconl}`call-read-tools-batch` |
8586
| `call_mutating_tools_batch` | removed — call the tool directly |
8687
| `call_destructive_tools_batch` | removed — call the tool directly |
8788

8889
A batch gives every nested call the wrapper's name, so a client rule keyed
89-
on `kill_session` never fires for a `kill_session` run inside one. That is
90+
on {tooliconl}`kill-session` never fires for a `kill_session` run inside one. That is
9091
tolerable for reads and not for writes.
9192

9293
### Which toolset a tool is in
9394

9495
`inspect`
95-
: Every `list_*`, `get_*`, `show_*`, `capture_*`, `snapshot_pane`,
96-
`search_panes`, `find_pane_by_position`, `display_message`,
97-
`wait_for_text`, `call_read_tools_batch`.
96+
: Every `list_*`, `get_*`, `show_*`, `capture_*`, {toolref}`snapshot-pane`,
97+
{toolref}`search-panes`, {toolref}`find-pane-by-position`,
98+
{toolref}`display-message`, {toolref}`wait-for-text`,
99+
{toolref}`call-read-tools-batch`.
98100

99101
`manage`
100-
: `rename_*`, `select_*`, `resize_*`, `move_window`, `swap_pane`,
101-
`set_pane_title`, `enter_copy_mode`, `exit_copy_mode`,
102-
`wait_for_channel`, `signal_channel`, `load_buffer`.
102+
: `rename_*`, `select_*`, `resize_*`, {toolref}`move-window`,
103+
{toolref}`swap-pane`, {toolref}`set-pane-title`, {toolref}`enter-copy-mode`,
104+
{toolref}`exit-copy-mode`, {toolref}`wait-for-channel`,
105+
{toolref}`signal-channel`, {toolref}`load-buffer`.
103106

104107
`execute`
105-
: `create_session`, `create_window`, `split_window`, `respawn_pane`,
106-
`run_command`, `send_keys`, `send_keys_batch`, `paste_text`,
107-
`paste_buffer`, `pipe_pane`, `set_option`, `set_environment`.
108+
: {toolref}`create-session`, {toolref}`create-window`,
109+
{toolref}`split-window`, {toolref}`respawn-pane`, {toolref}`run-command`,
110+
{toolref}`send-keys`, {toolref}`send-keys-batch`, {toolref}`paste-text`,
111+
{toolref}`paste-buffer`, {toolref}`pipe-pane`, {toolref}`set-option`,
112+
{toolref}`set-environment`.
108113

109114
`set_option` and `set_environment` are here rather than in `manage`
110115
because tmux runs some stored values later: a `#(...)` job in a status
111116
format runs when tmux draws it and repeats on the status interval, and
112117
`default-command` decides what every future pane runs.
113118

114119
`teardown`
115-
: `kill_pane`, `kill_window`, `kill_session`, `kill_server`, `clear_pane`,
116-
`delete_buffer`.
120+
: {toolref}`kill-pane`, {toolref}`kill-window`, {toolref}`kill-session`,
121+
{toolref}`kill-server`, {toolref}`clear-pane`, {toolref}`delete-buffer`.
117122

118123
### Documentation
119124

120-
The safety topic is now the trust page. The old URL redirects.
125+
The safety topic is now the {ref}`trust` page. The old URL redirects.
121126

122127
### MCP annotations
123128

@@ -134,7 +139,7 @@ the direct operation libtmux-mcp requests.
134139

135140
### `wait_for_text` takes `patterns`, and `wait_for_content_change` is gone
136141

137-
`wait_for_text` accepted a single `pattern` string. It now takes `patterns`, a
142+
{tooliconl}`wait-for-text` accepted a single `pattern` string. It now takes `patterns`, a
138143
list — or `null` to wait for any new output at all. The schema rejects the old
139144
argument rather than silently ignoring it, so a call written against the old
140145
signature fails loudly with `Remove or correct the unrecognized argument(s):
@@ -163,8 +168,9 @@ which the old tool did not.
163168

164169
### Waits are capped by the server
165170

166-
`wait_for_text`, `wait_for_channel`, and `run_command` are all bounded by
167-
`LIBTMUX_MCP_WAIT_MAX_SECONDS` (30 seconds by default, clamped to `[1, 120]`).
171+
{toolref}`wait-for-text`, {toolref}`wait-for-channel`, and
172+
{toolref}`run-command` are all bounded by
173+
{envvar}`LIBTMUX_MCP_WAIT_MAX_SECONDS` (30 seconds by default, clamped to `[1, 120]`).
168174
An over-large `timeout` is **clamped, not rejected** — the call succeeds and
169175
reports the value actually enforced, so read `effective_timeout` rather than
170176
assuming your value was honoured. A wait that previously blocked for an hour
@@ -179,14 +185,16 @@ The result's loose booleans are replaced by one `outcome` field taking
179185
`matched`, `any_output`, `stopped`, `alternate_screen`, or `timeout`.
180186
`risk_band_warned` is removed; the history-limit trim signal is delivered as an
181187
MCP warning notification instead. Clients that cannot surface notifications
182-
should compose `tmux wait-for -S` into the command and use `wait_for_channel`,
188+
should compose `tmux wait-for -S` into the command and use
189+
{tooliconl}`wait-for-channel`,
183190
which does not read the pane at all.
184191

185192
### Self-bounded tools cannot be batched
186193

187-
`run_command`, `wait_for_text`, and `wait_for_channel` are rejected by the
194+
{toolref}`run-command`, {toolref}`wait-for-text`, and
195+
{toolref}`wait-for-channel` are rejected by the
188196
batch wrappers per operation, because batching one multiplied the wait ceiling
189-
by the operation count. Use `send_keys_batch` for command sequences, or call
197+
by the operation count. Use {tooliconl}`send-keys-batch` for command sequences, or call
190198
the tool directly.
191199

192200
## libtmux-mcp 0.1.0a6 (2026-05-09)

0 commit comments

Comments
 (0)