sessionview 0.3.3__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. {sessionview-0.3.3 → sessionview-0.4.0}/PKG-INFO +105 -28
  2. {sessionview-0.3.3 → sessionview-0.4.0}/README.md +104 -27
  3. {sessionview-0.3.3 → sessionview-0.4.0}/bin/sessionview +3 -1
  4. {sessionview-0.3.3 → sessionview-0.4.0}/bin/sessionview-app-install +3 -2
  5. {sessionview-0.3.3 → sessionview-0.4.0}/bin/sessionview-autostart +2 -2
  6. {sessionview-0.3.3 → sessionview-0.4.0}/bin/sessionview-config +65 -22
  7. {sessionview-0.3.3 → sessionview-0.4.0}/bin/sessionview-frame +1 -1
  8. {sessionview-0.3.3 → sessionview-0.4.0}/bin/sessionview-from +2 -2
  9. {sessionview-0.3.3 → sessionview-0.4.0}/bin/sessionview-install +19 -1
  10. {sessionview-0.3.3 → sessionview-0.4.0}/bin/sessionview-messages +2 -2
  11. {sessionview-0.3.3 → sessionview-0.4.0}/bin/sessionview-session +6 -6
  12. sessionview-0.4.0/bin/sessionview-show +787 -0
  13. {sessionview-0.3.3 → sessionview-0.4.0}/bin/sessionview-terminal +1 -1
  14. {sessionview-0.3.3 → sessionview-0.4.0}/bin/sessionview-usermail +1 -1
  15. {sessionview-0.3.3 → sessionview-0.4.0}/bin/tmux-sidebar +341 -47
  16. {sessionview-0.3.3 → sessionview-0.4.0}/config/README.md +7 -7
  17. {sessionview-0.3.3 → sessionview-0.4.0}/config/config.json +4 -4
  18. {sessionview-0.3.3 → sessionview-0.4.0}/docs/configuration.md +9 -8
  19. {sessionview-0.3.3 → sessionview-0.4.0}/docs/dependencies.md +8 -8
  20. sessionview-0.4.0/docs/images/agent-pane-menu.png +0 -0
  21. sessionview-0.4.0/docs/images/sidebar-agent-menu.png +0 -0
  22. {sessionview-0.3.3 → sessionview-0.4.0}/docs/sessionview.md +15 -2
  23. {sessionview-0.3.3 → sessionview-0.4.0}/docs/settings.md +4 -4
  24. {sessionview-0.3.3 → sessionview-0.4.0}/lib/sessionview-config-screen +5 -5
  25. {sessionview-0.3.3 → sessionview-0.4.0}/macos/SessionView.applescript +1 -1
  26. {sessionview-0.3.3 → sessionview-0.4.0}/pyproject.toml +5 -7
  27. sessionview-0.4.0/src/sessionview/__init__.py +25 -0
  28. {sessionview-0.3.3 → sessionview-0.4.0}/tmux/agent-menu.conf +7 -2
  29. sessionview-0.3.3/src/sessionview/__init__.py +0 -26
  30. {sessionview-0.3.3 → sessionview-0.4.0}/.gitignore +0 -0
  31. {sessionview-0.3.3 → sessionview-0.4.0}/LICENSE +0 -0
  32. {sessionview-0.3.3 → sessionview-0.4.0}/bin/sessionview-newtab +0 -0
  33. {sessionview-0.3.3 → sessionview-0.4.0}/bin/sessionview-send +0 -0
  34. {sessionview-0.3.3 → sessionview-0.4.0}/bin/sessionview-sidebar-toggle +0 -0
  35. {sessionview-0.3.3 → sessionview-0.4.0}/bin/tmux-send-agent +0 -0
  36. {sessionview-0.3.3 → sessionview-0.4.0}/changelog.d/README.md +0 -0
  37. {sessionview-0.3.3 → sessionview-0.4.0}/config/keys.md +0 -0
  38. {sessionview-0.3.3 → sessionview-0.4.0}/config/neomuttrc +0 -0
  39. {sessionview-0.3.3 → sessionview-0.4.0}/docs/decisions/state-and-log-home.md +0 -0
  40. {sessionview-0.3.3 → sessionview-0.4.0}/lib/client.sh +0 -0
  41. {sessionview-0.3.3 → sessionview-0.4.0}/lib/landing.sh +0 -0
  42. {sessionview-0.3.3 → sessionview-0.4.0}/lib/pane-menu.sh +0 -0
  43. {sessionview-0.3.3 → sessionview-0.4.0}/lib/python.sh +0 -0
  44. {sessionview-0.3.3 → sessionview-0.4.0}/lib/state.sh +0 -0
  45. {sessionview-0.3.3 → sessionview-0.4.0}/macos/dreamcatcher.icns +0 -0
  46. {sessionview-0.3.3 → sessionview-0.4.0}/plugins/session/plugin.toml +0 -0
  47. {sessionview-0.3.3 → sessionview-0.4.0}/plugins/session/start-agent +0 -0
  48. {sessionview-0.3.3 → sessionview-0.4.0}/plugins/taskmaster/plugin.toml +0 -0
  49. {sessionview-0.3.3 → sessionview-0.4.0}/plugins/taskmaster/tasks-tab +0 -0
  50. {sessionview-0.3.3 → sessionview-0.4.0}/plugins/voicemode/plugin.toml +0 -0
  51. {sessionview-0.3.3 → sessionview-0.4.0}/plugins/voicemode/speak +0 -0
  52. {sessionview-0.3.3 → sessionview-0.4.0}/skills/tmux/SKILL.md +0 -0
  53. {sessionview-0.3.3 → sessionview-0.4.0}/skills/tmux/scripts/tmux-peek +0 -0
  54. {sessionview-0.3.3 → sessionview-0.4.0}/skills/tmux/scripts/tmux-show +0 -0
  55. {sessionview-0.3.3 → sessionview-0.4.0}/skills/tmux/scripts/tmux-type +0 -0
  56. {sessionview-0.3.3 → sessionview-0.4.0}/skills/tmux/scripts/tmux-where +0 -0
  57. {sessionview-0.3.3 → sessionview-0.4.0}/tmux/frame.conf +0 -0
  58. {sessionview-0.3.3 → sessionview-0.4.0}/tmux/tabs-top.conf +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sessionview
3
- Version: 0.3.3
3
+ Version: 0.4.0
4
4
  Summary: A sidebar for tmux: your projects (sessions) and your agents, here and on remote hosts.
5
5
  Project-URL: Homepage, https://github.com/sessionkit/sessionview
6
6
  Project-URL: Repository, https://github.com/sessionkit/sessionview
@@ -33,9 +33,9 @@ attached, else the newest. Only when tmux has no session at all does
33
33
  sessionview make one, named `main`.
34
34
  `sessionview NAME` attaches the session NAME instead, which must exist.
35
35
  In any tmux client, `prefix H` opens the same sidebar as a popup.
36
- Every verb, its form and an example: [the sessionview command](docs/sessionview.md).
36
+ Every verb, its form and an example: [the sessionview command](https://github.com/sessionkit/sessionview/blob/HEAD/docs/sessionview.md).
37
37
 
38
- Read [SPEC.md](SPEC.md) first: what sessionview is, the rules of the view, the
38
+ Read [SPEC.md](https://github.com/sessionkit/sessionview/blob/HEAD/SPEC.md) first: what sessionview is, the rules of the view, the
39
39
  contract with `session`, the plugin manifest, config, known limits.
40
40
  This repo is the **reference implementation**: session integrates from
41
41
  the spec; this stays comparable and runnable.
@@ -48,7 +48,7 @@ the spec; this stays comparable and runnable.
48
48
  - [ ] Windows
49
49
 
50
50
  The direct dependencies and the tools a user meets, what needs each one,
51
- and how to upgrade it: [dependencies](docs/dependencies.md).
51
+ and how to upgrade it: [dependencies](https://github.com/sessionkit/sessionview/blob/HEAD/docs/dependencies.md).
52
52
 
53
53
  ## Features
54
54
 
@@ -73,7 +73,8 @@ Grouped by component, named in the terms a comparison matrix would use.
73
73
 
74
74
  - *Overflow menu* — three dots `⋯` at the right of the selected session
75
75
  open its menu (rename, new tab, config, settings, start an agent,
76
- close). Right-click opens the same menu on any row.
76
+ close). Right-click opens a row's menu on any row: a project's is this
77
+ one, an agent's is the [agent menu](#agent-menu).
77
78
  - *Light dismiss* — a click outside an open menu closes it, and so does
78
79
  a click into the main pane (focus leaves the sidebar).
79
80
  - *Keyboard* — ↑↓ / j k move, the letter or enter picks, esc closes.
@@ -102,6 +103,38 @@ agents, or the menu): the names `session start` knows, pinned ones first.
102
103
  list it asks `Which agent? (a name, or "no" to never ask again)`. `n` or
103
104
  `no` means never; `autostart_agent` in Settings changes it later.
104
105
 
106
+ ### Agent menu
107
+
108
+ A menu on one agent: send it a word, or act on its pane. There are two,
109
+ in two places.
110
+
111
+ - *In the sidebar* — right-click an agent's row, or the `⋯` on the
112
+ selected agent row. The sidebar draws it, and it is always there:
113
+ no setting. *Copy name*, *Jump to* (greyed when the agent has no pane
114
+ to go to) and *Keys*; then the agent verbs from the plugins:
115
+ *Message* (asks for the text), *Continue*, *Settle*, *Stand down* and
116
+ *Succeed* (the last two ask first). With voicemode installed, *Speak*
117
+ comes last; it is greyed for an agent that runs without voice. Each of
118
+ these verbs mails that agent.
119
+
120
+ ![The sidebar's agent menu, open on the agent worker.demo: Copy name, Jump to, Keys, then Message, Continue, Settle, Stand down and Succeed](https://raw.githubusercontent.com/sessionkit/sessionview/HEAD/docs/images/sidebar-agent-menu.png)
121
+
122
+ - *On the agent's own pane* (opt-in) — right-click, or Option +
123
+ right-click, the pane an agent runs in. tmux draws it. *Speak*,
124
+ *Continue*, *Read Clipboard*, *Park* and *Succeed*, each followed by the
125
+ agent's name and each a mail to it, sit on top of tmux's own pane menu
126
+ (splits, swap, *Kill*, *Respawn*, *Mark*, *Zoom*). It opens even when the
127
+ program in the pane uses the mouse, as Claude Code does. *Kill* on a
128
+ remote tab kills nothing and says on the bar which host the agent runs
129
+ on. Turn it on with `sessionview-config set pane_menu true`; it is off by
130
+ default because it replaces your own tmux right-click bindings. Details
131
+ in [Keys and clicks](#keys-and-clicks).
132
+
133
+ ![The agent pane menu, open over Claude Code on the agent worker.demo: Speak, Continue, Read Clipboard, Park and Succeed above the tmux pane menu with Kill](https://raw.githubusercontent.com/sessionkit/sessionview/HEAD/docs/images/agent-pane-menu.png)
134
+
135
+ Which right-click reaches which menu, and when you need Option: [Right-click
136
+ and Option](#right-click-and-option).
137
+
105
138
  **Settings** — every setting, its default, its note and where its value
106
139
  comes from, in a small screen (project menu → Settings); the rows come
107
140
  from the template, so a new key needs no second edit.
@@ -121,6 +154,45 @@ reporting and focus reporting from the terminal; anything that gives
121
154
  tmux those should work, but only the three above have been driven by
122
155
  hand. Blink Shell on iPad is wanted and not yet connecting.
123
156
 
157
+ ### Right-click and Option
158
+
159
+ A right-click passes two places before a menu opens: your terminal, then
160
+ tmux.
161
+
162
+ 1. **The terminal** has to report the click to tmux. That is mouse
163
+ reporting, which sessionview needs on. In Terminal.app it is
164
+ View > Allow Mouse Reporting, and Apple's guide says each new window
165
+ has it on. If your terminal shows its own context menu, the click
166
+ stopped there and tmux never saw it. Some terminals turn mouse
167
+ reporting off while a modifier key is held. iTerm2's documentation
168
+ says Option does this, so in iTerm2 an Option + right-click may open
169
+ iTerm2's menu instead of reaching tmux. How each terminal above handles
170
+ a plain right-click and an Option + right-click has not been measured
171
+ yet.
172
+ 2. **tmux** decides what a click that reached it does. Over a program
173
+ that uses the mouse, as Claude Code does, tmux hands a plain
174
+ right-click to the program and keeps Option + right-click for its own
175
+ menu. sessionview changes that only for agents:
176
+
177
+ | you right-click | plain right-click | Option + right-click |
178
+ | --- | --- | --- |
179
+ | an agent's row in the sidebar | the sidebar's agent menu | the frame's own tmux menu, no agent items |
180
+ | an agent's pane, `pane_menu` on | the agent pane menu | the agent pane menu |
181
+ | another pane, its program uses the mouse | goes to the program | tmux's pane menu, no agent items |
182
+ | another pane, its program does not | tmux's pane menu | tmux's pane menu |
183
+
184
+ With `pane_menu` off, every pane keeps tmux's own right-clicks, and the
185
+ agent menu is in the sidebar only. In session view, an Option +
186
+ right-click on a pane then opens the frame's own tmux menu, for the
187
+ frame pane that holds your tmux, and your tmux never sees the click:
188
+ the frame passes it through to yours only with `pane_menu` on.
189
+
190
+ So Option + right-click is what you need for your tmux's own menu over a
191
+ program that uses the mouse, such as Claude Code in a pane that is not an
192
+ agent's; in session view that takes `pane_menu` on. For an agent, a plain
193
+ right-click is enough: on its sidebar row always, and on its pane with
194
+ `pane_menu` on.
195
+
124
196
  ## Layout
125
197
 
126
198
  bin/tmux-sidebar the view, the clicks, the menus (Python 3.11+, stdlib)
@@ -144,7 +216,7 @@ hand. Blink Shell on iPad is wanted and not yet connecting.
144
216
  Paths resolve from the checkout (`SESSIONVIEW_ROOT`); state lives in
145
217
  `~/.sessionkit/view/state` (`SESSIONVIEW_STATE`) and the log in
146
218
  `~/.sessionkit/view/log` (`SESSIONVIEW_LOG`). Its direct dependencies:
147
- [dependencies](docs/dependencies.md).
219
+ [dependencies](https://github.com/sessionkit/sessionview/blob/HEAD/docs/dependencies.md).
148
220
 
149
221
  ## Install
150
222
 
@@ -153,9 +225,9 @@ From PyPI:
153
225
  uv tool install sessionview
154
226
  sessionview install
155
227
 
156
- That puts `sessionview`, `sessionview-config`, `sessionview-session` and
157
- `sessionview-messages` on PATH; `sessionview install` then checks every
158
- requirement and links nothing.
228
+ That puts one command, `sessionview`, on PATH; every other tool is a verb
229
+ of it, such as `sessionview config`. `sessionview install` then checks
230
+ every requirement and links nothing.
159
231
 
160
232
  From a checkout:
161
233
 
@@ -200,7 +272,7 @@ window is busy, so the app opens its own and you get two.
200
272
 
201
273
  Full screen on click is off by default; turn it on with
202
274
 
203
- sessionview-config set fullscreen true
275
+ sessionview config set fullscreen true
204
276
 
205
277
  On Terminal.app that needs Accessibility permission for SessionView
206
278
  (System Settings > Privacy & Security > Accessibility) -- the app asks
@@ -220,14 +292,15 @@ cache, and it touches no shell startup file and nothing in `~/.claude`.
220
292
  nothing. Everything else below appears only when you run the verb named
221
293
  beside it. Each line says what puts it there and what takes it away.
222
294
 
223
- - **PATH:** `~/.local/bin/sessionview`, `sessionview-config`,
224
- `sessionview-session` and `sessionview-messages`, or in
225
- `UV_TOOL_BIN_DIR` when that is set. uv says so if the folder is not on
226
- your PATH, and edits no shell file. `uv tool uninstall` removes them.
295
+ - **PATH:** `~/.local/bin/sessionview`, or in `UV_TOOL_BIN_DIR` when
296
+ that is set. uv says so if the folder is not on your PATH, and edits no
297
+ shell file. `uv tool uninstall` removes it.
227
298
  From a checkout instead, `bin/sessionview-install` (or `make install`)
228
299
  links the checkout's `bin/sessionview*` tools and `tmux-sidebar` into
229
300
  `~/.local/bin`, or into `PREFIX/bin` when `PREFIX` is set, and makes
230
- nothing else. [Uninstall](#uninstall) has the line that deletes them.
301
+ nothing else. It links no config, session or messages tool: you type
302
+ those as `sessionview config`, `sessionview session` and
303
+ `sessionview messages`. [Uninstall](#uninstall) has the line that deletes them.
231
304
  - **The program:** `~/.local/share/uv/tools/sessionview/`, its own
232
305
  Python environment, or in `UV_TOOL_DIR`. sessionview has no Python
233
306
  dependencies: the environment holds sessionview and the files it ships
@@ -303,8 +376,8 @@ beside it. Each line says what puts it there and what takes it away.
303
376
  - **Settings:** the install writes none.
304
377
  `~/.sessionkit/view/settings/view.json` is made from the shipped
305
378
  template the first time anything reads your settings: `sessionview`,
306
- or a `sessionview-config` verb such as `get` (`path` only prints it).
307
- `sessionview-config set` writes it. `SESSIONVIEW_CONFIG` names another
379
+ or a `sessionview config` verb such as `get` (`path` only prints it).
380
+ `sessionview config set` writes it. `SESSIONVIEW_CONFIG` names another
308
381
  file instead. `~/.sessionkit/view/settings/neomuttrc` is there only if
309
382
  you write it.
310
383
  - **Your tmux server, while it runs:** a frame binds keys on the tmux
@@ -370,9 +443,12 @@ keep theirs beside it in `~/.sessionkit/`.
370
443
 
371
444
  ## Keys and clicks
372
445
 
373
- - sidebar: click a project or seat → go there; right-click, or the `⋯`
374
- on the selected project → its menu; `+` between the lists → a session
375
- picker (type to filter, ↑↓, enter); `+` at the bottom → start an
446
+ - sidebar: click a project or seat → go there; right-click a project or
447
+ seat, or the `⋯` on the selected row → its menu (a seat's is the
448
+ [agent menu](#agent-menu)); `+` between the lists → a session
449
+ picker (type to filter, ↑↓, enter; each project shows its eggs, `^g`
450
+ shows only the ones with eggs, space or `^a` marks rows and enter opens
451
+ every marked one); `+` at the bottom → start an
376
452
  agent; the store name → that store's session and store view, its `⋯`
377
453
  (or `s`) → Switch store, right-click → Kick; `all · grouped` on the agents
378
454
  heading are toggles (the first cycles all / store / project); drag the border to resize; `q` reloads, `Q`
@@ -386,8 +462,9 @@ keep theirs beside it in `~/.sessionkit/`.
386
462
  pane for Speak, Continue, Read Clipboard, Park or Succeed; each mails
387
463
  that agent. It opens even on an agent whose program uses the mouse, as
388
464
  Claude Code does. An agent's pane is one whose title is
389
- `<glyph> <address>`. Turn it on with
390
- `sessionview-config set pane_menu true`. It replaces your own tmux
465
+ `<glyph> <address>`. On a remote tab Kill kills nothing and says on
466
+ the bar which host the agent runs on. Turn it on with
467
+ `sessionview config set pane_menu true`. It replaces your own tmux
391
468
  right-click menus, which is why it is off by default. Using tmux without session view? Add
392
469
  `source-file -q /path/to/sessionview/tmux/agent-menu.conf` to
393
470
  `~/.tmux.conf` and reload.
@@ -400,11 +477,11 @@ The look follows herdr's; its colours were matched from herdr's own window.
400
477
  `config/config.json` holds every key and its default.
401
478
  `~/.sessionkit/view/settings/view.json` is yours, made from it on first
402
479
  use; a store's and a project's `.sessionview` come after it.
403
- `sessionview-config set KEY VALUE` writes yours, and
404
- `sessionview-config dump --where` names the file behind each key.
480
+ `sessionview config set KEY VALUE` writes yours, and
481
+ `sessionview config dump --where` names the file behind each key.
405
482
  An older install's settings are never read. Moving them is one step,
406
- in [Upgrading from 0.1.0](docs/configuration.md#upgrading-from-010).
407
- Until then sessionview makes nothing and refuses: `sessionview-config`
483
+ in [Upgrading from 0.1.0](https://github.com/sessionkit/sessionview/blob/HEAD/docs/configuration.md#upgrading-from-010).
484
+ Until then sessionview makes nothing and refuses: `sessionview config`
408
485
  exits 3 and prints the move to run, and the sidebar shows the same
409
486
  message. If the old file is left beside the new one, it uses the new one
410
487
  and warns you to remove the old one.
@@ -420,9 +497,9 @@ The look follows herdr's; its colours were matched from herdr's own window.
420
497
  - sessionview does not read the kit's settings cascade today, only these.
421
498
 
422
499
  Every file, variable and tmux option is in
423
- [Configuration](docs/configuration.md),
500
+ [Configuration](https://github.com/sessionkit/sessionview/blob/HEAD/docs/configuration.md),
424
501
  and every key in
425
- [Settings](docs/settings.md).
502
+ [Settings](https://github.com/sessionkit/sessionview/blob/HEAD/docs/settings.md).
426
503
 
427
504
  ## Logs
428
505
 
@@ -16,9 +16,9 @@ attached, else the newest. Only when tmux has no session at all does
16
16
  sessionview make one, named `main`.
17
17
  `sessionview NAME` attaches the session NAME instead, which must exist.
18
18
  In any tmux client, `prefix H` opens the same sidebar as a popup.
19
- Every verb, its form and an example: [the sessionview command](docs/sessionview.md).
19
+ Every verb, its form and an example: [the sessionview command](https://github.com/sessionkit/sessionview/blob/HEAD/docs/sessionview.md).
20
20
 
21
- Read [SPEC.md](SPEC.md) first: what sessionview is, the rules of the view, the
21
+ Read [SPEC.md](https://github.com/sessionkit/sessionview/blob/HEAD/SPEC.md) first: what sessionview is, the rules of the view, the
22
22
  contract with `session`, the plugin manifest, config, known limits.
23
23
  This repo is the **reference implementation**: session integrates from
24
24
  the spec; this stays comparable and runnable.
@@ -31,7 +31,7 @@ the spec; this stays comparable and runnable.
31
31
  - [ ] Windows
32
32
 
33
33
  The direct dependencies and the tools a user meets, what needs each one,
34
- and how to upgrade it: [dependencies](docs/dependencies.md).
34
+ and how to upgrade it: [dependencies](https://github.com/sessionkit/sessionview/blob/HEAD/docs/dependencies.md).
35
35
 
36
36
  ## Features
37
37
 
@@ -56,7 +56,8 @@ Grouped by component, named in the terms a comparison matrix would use.
56
56
 
57
57
  - *Overflow menu* — three dots `⋯` at the right of the selected session
58
58
  open its menu (rename, new tab, config, settings, start an agent,
59
- close). Right-click opens the same menu on any row.
59
+ close). Right-click opens a row's menu on any row: a project's is this
60
+ one, an agent's is the [agent menu](#agent-menu).
60
61
  - *Light dismiss* — a click outside an open menu closes it, and so does
61
62
  a click into the main pane (focus leaves the sidebar).
62
63
  - *Keyboard* — ↑↓ / j k move, the letter or enter picks, esc closes.
@@ -85,6 +86,38 @@ agents, or the menu): the names `session start` knows, pinned ones first.
85
86
  list it asks `Which agent? (a name, or "no" to never ask again)`. `n` or
86
87
  `no` means never; `autostart_agent` in Settings changes it later.
87
88
 
89
+ ### Agent menu
90
+
91
+ A menu on one agent: send it a word, or act on its pane. There are two,
92
+ in two places.
93
+
94
+ - *In the sidebar* — right-click an agent's row, or the `⋯` on the
95
+ selected agent row. The sidebar draws it, and it is always there:
96
+ no setting. *Copy name*, *Jump to* (greyed when the agent has no pane
97
+ to go to) and *Keys*; then the agent verbs from the plugins:
98
+ *Message* (asks for the text), *Continue*, *Settle*, *Stand down* and
99
+ *Succeed* (the last two ask first). With voicemode installed, *Speak*
100
+ comes last; it is greyed for an agent that runs without voice. Each of
101
+ these verbs mails that agent.
102
+
103
+ ![The sidebar's agent menu, open on the agent worker.demo: Copy name, Jump to, Keys, then Message, Continue, Settle, Stand down and Succeed](https://raw.githubusercontent.com/sessionkit/sessionview/HEAD/docs/images/sidebar-agent-menu.png)
104
+
105
+ - *On the agent's own pane* (opt-in) — right-click, or Option +
106
+ right-click, the pane an agent runs in. tmux draws it. *Speak*,
107
+ *Continue*, *Read Clipboard*, *Park* and *Succeed*, each followed by the
108
+ agent's name and each a mail to it, sit on top of tmux's own pane menu
109
+ (splits, swap, *Kill*, *Respawn*, *Mark*, *Zoom*). It opens even when the
110
+ program in the pane uses the mouse, as Claude Code does. *Kill* on a
111
+ remote tab kills nothing and says on the bar which host the agent runs
112
+ on. Turn it on with `sessionview-config set pane_menu true`; it is off by
113
+ default because it replaces your own tmux right-click bindings. Details
114
+ in [Keys and clicks](#keys-and-clicks).
115
+
116
+ ![The agent pane menu, open over Claude Code on the agent worker.demo: Speak, Continue, Read Clipboard, Park and Succeed above the tmux pane menu with Kill](https://raw.githubusercontent.com/sessionkit/sessionview/HEAD/docs/images/agent-pane-menu.png)
117
+
118
+ Which right-click reaches which menu, and when you need Option: [Right-click
119
+ and Option](#right-click-and-option).
120
+
88
121
  **Settings** — every setting, its default, its note and where its value
89
122
  comes from, in a small screen (project menu → Settings); the rows come
90
123
  from the template, so a new key needs no second edit.
@@ -104,6 +137,45 @@ reporting and focus reporting from the terminal; anything that gives
104
137
  tmux those should work, but only the three above have been driven by
105
138
  hand. Blink Shell on iPad is wanted and not yet connecting.
106
139
 
140
+ ### Right-click and Option
141
+
142
+ A right-click passes two places before a menu opens: your terminal, then
143
+ tmux.
144
+
145
+ 1. **The terminal** has to report the click to tmux. That is mouse
146
+ reporting, which sessionview needs on. In Terminal.app it is
147
+ View > Allow Mouse Reporting, and Apple's guide says each new window
148
+ has it on. If your terminal shows its own context menu, the click
149
+ stopped there and tmux never saw it. Some terminals turn mouse
150
+ reporting off while a modifier key is held. iTerm2's documentation
151
+ says Option does this, so in iTerm2 an Option + right-click may open
152
+ iTerm2's menu instead of reaching tmux. How each terminal above handles
153
+ a plain right-click and an Option + right-click has not been measured
154
+ yet.
155
+ 2. **tmux** decides what a click that reached it does. Over a program
156
+ that uses the mouse, as Claude Code does, tmux hands a plain
157
+ right-click to the program and keeps Option + right-click for its own
158
+ menu. sessionview changes that only for agents:
159
+
160
+ | you right-click | plain right-click | Option + right-click |
161
+ | --- | --- | --- |
162
+ | an agent's row in the sidebar | the sidebar's agent menu | the frame's own tmux menu, no agent items |
163
+ | an agent's pane, `pane_menu` on | the agent pane menu | the agent pane menu |
164
+ | another pane, its program uses the mouse | goes to the program | tmux's pane menu, no agent items |
165
+ | another pane, its program does not | tmux's pane menu | tmux's pane menu |
166
+
167
+ With `pane_menu` off, every pane keeps tmux's own right-clicks, and the
168
+ agent menu is in the sidebar only. In session view, an Option +
169
+ right-click on a pane then opens the frame's own tmux menu, for the
170
+ frame pane that holds your tmux, and your tmux never sees the click:
171
+ the frame passes it through to yours only with `pane_menu` on.
172
+
173
+ So Option + right-click is what you need for your tmux's own menu over a
174
+ program that uses the mouse, such as Claude Code in a pane that is not an
175
+ agent's; in session view that takes `pane_menu` on. For an agent, a plain
176
+ right-click is enough: on its sidebar row always, and on its pane with
177
+ `pane_menu` on.
178
+
107
179
  ## Layout
108
180
 
109
181
  bin/tmux-sidebar the view, the clicks, the menus (Python 3.11+, stdlib)
@@ -127,7 +199,7 @@ hand. Blink Shell on iPad is wanted and not yet connecting.
127
199
  Paths resolve from the checkout (`SESSIONVIEW_ROOT`); state lives in
128
200
  `~/.sessionkit/view/state` (`SESSIONVIEW_STATE`) and the log in
129
201
  `~/.sessionkit/view/log` (`SESSIONVIEW_LOG`). Its direct dependencies:
130
- [dependencies](docs/dependencies.md).
202
+ [dependencies](https://github.com/sessionkit/sessionview/blob/HEAD/docs/dependencies.md).
131
203
 
132
204
  ## Install
133
205
 
@@ -136,9 +208,9 @@ From PyPI:
136
208
  uv tool install sessionview
137
209
  sessionview install
138
210
 
139
- That puts `sessionview`, `sessionview-config`, `sessionview-session` and
140
- `sessionview-messages` on PATH; `sessionview install` then checks every
141
- requirement and links nothing.
211
+ That puts one command, `sessionview`, on PATH; every other tool is a verb
212
+ of it, such as `sessionview config`. `sessionview install` then checks
213
+ every requirement and links nothing.
142
214
 
143
215
  From a checkout:
144
216
 
@@ -183,7 +255,7 @@ window is busy, so the app opens its own and you get two.
183
255
 
184
256
  Full screen on click is off by default; turn it on with
185
257
 
186
- sessionview-config set fullscreen true
258
+ sessionview config set fullscreen true
187
259
 
188
260
  On Terminal.app that needs Accessibility permission for SessionView
189
261
  (System Settings > Privacy & Security > Accessibility) -- the app asks
@@ -203,14 +275,15 @@ cache, and it touches no shell startup file and nothing in `~/.claude`.
203
275
  nothing. Everything else below appears only when you run the verb named
204
276
  beside it. Each line says what puts it there and what takes it away.
205
277
 
206
- - **PATH:** `~/.local/bin/sessionview`, `sessionview-config`,
207
- `sessionview-session` and `sessionview-messages`, or in
208
- `UV_TOOL_BIN_DIR` when that is set. uv says so if the folder is not on
209
- your PATH, and edits no shell file. `uv tool uninstall` removes them.
278
+ - **PATH:** `~/.local/bin/sessionview`, or in `UV_TOOL_BIN_DIR` when
279
+ that is set. uv says so if the folder is not on your PATH, and edits no
280
+ shell file. `uv tool uninstall` removes it.
210
281
  From a checkout instead, `bin/sessionview-install` (or `make install`)
211
282
  links the checkout's `bin/sessionview*` tools and `tmux-sidebar` into
212
283
  `~/.local/bin`, or into `PREFIX/bin` when `PREFIX` is set, and makes
213
- nothing else. [Uninstall](#uninstall) has the line that deletes them.
284
+ nothing else. It links no config, session or messages tool: you type
285
+ those as `sessionview config`, `sessionview session` and
286
+ `sessionview messages`. [Uninstall](#uninstall) has the line that deletes them.
214
287
  - **The program:** `~/.local/share/uv/tools/sessionview/`, its own
215
288
  Python environment, or in `UV_TOOL_DIR`. sessionview has no Python
216
289
  dependencies: the environment holds sessionview and the files it ships
@@ -286,8 +359,8 @@ beside it. Each line says what puts it there and what takes it away.
286
359
  - **Settings:** the install writes none.
287
360
  `~/.sessionkit/view/settings/view.json` is made from the shipped
288
361
  template the first time anything reads your settings: `sessionview`,
289
- or a `sessionview-config` verb such as `get` (`path` only prints it).
290
- `sessionview-config set` writes it. `SESSIONVIEW_CONFIG` names another
362
+ or a `sessionview config` verb such as `get` (`path` only prints it).
363
+ `sessionview config set` writes it. `SESSIONVIEW_CONFIG` names another
291
364
  file instead. `~/.sessionkit/view/settings/neomuttrc` is there only if
292
365
  you write it.
293
366
  - **Your tmux server, while it runs:** a frame binds keys on the tmux
@@ -353,9 +426,12 @@ keep theirs beside it in `~/.sessionkit/`.
353
426
 
354
427
  ## Keys and clicks
355
428
 
356
- - sidebar: click a project or seat → go there; right-click, or the `⋯`
357
- on the selected project → its menu; `+` between the lists → a session
358
- picker (type to filter, ↑↓, enter); `+` at the bottom → start an
429
+ - sidebar: click a project or seat → go there; right-click a project or
430
+ seat, or the `⋯` on the selected row → its menu (a seat's is the
431
+ [agent menu](#agent-menu)); `+` between the lists → a session
432
+ picker (type to filter, ↑↓, enter; each project shows its eggs, `^g`
433
+ shows only the ones with eggs, space or `^a` marks rows and enter opens
434
+ every marked one); `+` at the bottom → start an
359
435
  agent; the store name → that store's session and store view, its `⋯`
360
436
  (or `s`) → Switch store, right-click → Kick; `all · grouped` on the agents
361
437
  heading are toggles (the first cycles all / store / project); drag the border to resize; `q` reloads, `Q`
@@ -369,8 +445,9 @@ keep theirs beside it in `~/.sessionkit/`.
369
445
  pane for Speak, Continue, Read Clipboard, Park or Succeed; each mails
370
446
  that agent. It opens even on an agent whose program uses the mouse, as
371
447
  Claude Code does. An agent's pane is one whose title is
372
- `<glyph> <address>`. Turn it on with
373
- `sessionview-config set pane_menu true`. It replaces your own tmux
448
+ `<glyph> <address>`. On a remote tab Kill kills nothing and says on
449
+ the bar which host the agent runs on. Turn it on with
450
+ `sessionview config set pane_menu true`. It replaces your own tmux
374
451
  right-click menus, which is why it is off by default. Using tmux without session view? Add
375
452
  `source-file -q /path/to/sessionview/tmux/agent-menu.conf` to
376
453
  `~/.tmux.conf` and reload.
@@ -383,11 +460,11 @@ The look follows herdr's; its colours were matched from herdr's own window.
383
460
  `config/config.json` holds every key and its default.
384
461
  `~/.sessionkit/view/settings/view.json` is yours, made from it on first
385
462
  use; a store's and a project's `.sessionview` come after it.
386
- `sessionview-config set KEY VALUE` writes yours, and
387
- `sessionview-config dump --where` names the file behind each key.
463
+ `sessionview config set KEY VALUE` writes yours, and
464
+ `sessionview config dump --where` names the file behind each key.
388
465
  An older install's settings are never read. Moving them is one step,
389
- in [Upgrading from 0.1.0](docs/configuration.md#upgrading-from-010).
390
- Until then sessionview makes nothing and refuses: `sessionview-config`
466
+ in [Upgrading from 0.1.0](https://github.com/sessionkit/sessionview/blob/HEAD/docs/configuration.md#upgrading-from-010).
467
+ Until then sessionview makes nothing and refuses: `sessionview config`
391
468
  exits 3 and prints the move to run, and the sidebar shows the same
392
469
  message. If the old file is left beside the new one, it uses the new one
393
470
  and warns you to remove the old one.
@@ -403,9 +480,9 @@ The look follows herdr's; its colours were matched from herdr's own window.
403
480
  - sessionview does not read the kit's settings cascade today, only these.
404
481
 
405
482
  Every file, variable and tmux option is in
406
- [Configuration](docs/configuration.md),
483
+ [Configuration](https://github.com/sessionkit/sessionview/blob/HEAD/docs/configuration.md),
407
484
  and every key in
408
- [Settings](docs/settings.md).
485
+ [Settings](https://github.com/sessionkit/sessionview/blob/HEAD/docs/settings.md).
409
486
 
410
487
  ## Logs
411
488
 
@@ -12,6 +12,8 @@
12
12
  # sessionview config settings: no verb opens the screen (get/set/list ...)
13
13
  # sessionview session NAME open a project session with its standard tabs
14
14
  # sessionview messages PROJECT a project's mail, read-only, in NeoMutt
15
+ # sessionview show FILE bring FILE to the front: the frame moves to its
16
+ # server, session, window and pane, and its Neovim shows it
15
17
  # sessionview install check requirements (--app: the macOS Dock app)
16
18
  # sessionview autostart --status which agent starts when sessionview opens
17
19
  # sessionview terminal the terminal sessionview opens in (--why: how chosen)
@@ -58,7 +60,7 @@ version() {
58
60
  case "${1:-}" in
59
61
  -h|--help|help) usage; exit 0;;
60
62
  --version) version; exit;;
61
- config|session|messages|install|autostart|terminal|usermail|from|sidebar-toggle)
63
+ config|session|messages|install|autostart|terminal|usermail|from|sidebar-toggle|show)
62
64
  export SESSIONVIEW_ROOT; sub="$1"; shift; exec "$SESSIONVIEW_ROOT/bin/sessionview-$sub" "$@";;
63
65
  sidebar)
64
66
  case "${2:-}" in -h|--help) export SESSIONVIEW_ROOT; exec "$SESSIONVIEW_ROOT/bin/tmux-sidebar" "$2";; esac
@@ -76,8 +76,9 @@ echo "drag it to your Dock; one click opens sessionview in your preferred termin
76
76
  # The ad-hoc signature is a fresh identity every build, and macOS keys TCC
77
77
  # permissions to it -- so a rebuild silently revokes the Accessibility tick
78
78
  # that `fullscreen` needs on Terminal.app. Say so, every time, rather than
79
- # letting it look like the feature broke.
80
- if [ "$(command -v sessionview-config >/dev/null 2>&1 && sessionview-config get fullscreen 2>/dev/null)" = "true" ]; then
79
+ # letting it look like the feature broke. The config tool is asked BY PATH, in
80
+ # this checkout: it is not on PATH, and SESSIONVIEW_ROOT may be unset here.
81
+ if [ "$("$ROOT/bin/sessionview-config" get fullscreen 2>/dev/null)" = "true" ]; then
81
82
  echo
82
83
  echo "note: fullscreen is on, and this REBUILD resets its Accessibility permission."
83
84
  echo " System Settings > Privacy & Security > Accessibility > turn SessionView back on."
@@ -82,8 +82,8 @@ want() {
82
82
  fi
83
83
  }
84
84
 
85
- # Remember the answer in the home layer (`sessionview-config path`) through
86
- # `sessionview-config set`, the one writer: it writes this key and nothing
85
+ # Remember the answer in the home layer (`sessionview config path`) through
86
+ # `sessionview config set`, the one writer: it writes this key and nothing
87
87
  # else, via a temp file and a rename.
88
88
  remember() { "$CFG" set autostart_agent "$1"; }
89
89