sessionview 0.3.0__tar.gz → 0.3.2__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 (56) hide show
  1. sessionview-0.3.2/PKG-INFO +444 -0
  2. sessionview-0.3.2/README.md +427 -0
  3. {sessionview-0.3.0 → sessionview-0.3.2}/bin/sessionview +51 -9
  4. {sessionview-0.3.0 → sessionview-0.3.2}/bin/sessionview-app-install +9 -0
  5. {sessionview-0.3.0 → sessionview-0.3.2}/bin/sessionview-autostart +31 -2
  6. {sessionview-0.3.0 → sessionview-0.3.2}/bin/sessionview-config +68 -14
  7. {sessionview-0.3.0 → sessionview-0.3.2}/bin/sessionview-frame +58 -16
  8. {sessionview-0.3.0 → sessionview-0.3.2}/bin/sessionview-from +5 -0
  9. {sessionview-0.3.0 → sessionview-0.3.2}/bin/sessionview-install +89 -6
  10. {sessionview-0.3.0 → sessionview-0.3.2}/bin/sessionview-messages +33 -5
  11. {sessionview-0.3.0 → sessionview-0.3.2}/bin/sessionview-newtab +21 -4
  12. {sessionview-0.3.0 → sessionview-0.3.2}/bin/sessionview-send +10 -2
  13. {sessionview-0.3.0 → sessionview-0.3.2}/bin/sessionview-session +107 -36
  14. {sessionview-0.3.0 → sessionview-0.3.2}/bin/sessionview-sidebar-toggle +11 -5
  15. {sessionview-0.3.0 → sessionview-0.3.2}/bin/sessionview-terminal +8 -0
  16. {sessionview-0.3.0 → sessionview-0.3.2}/bin/sessionview-usermail +9 -6
  17. {sessionview-0.3.0 → sessionview-0.3.2}/bin/tmux-send-agent +14 -4
  18. {sessionview-0.3.0 → sessionview-0.3.2}/bin/tmux-sidebar +351 -68
  19. sessionview-0.3.2/changelog.d/README.md +102 -0
  20. {sessionview-0.3.0 → sessionview-0.3.2}/config/README.md +12 -3
  21. {sessionview-0.3.0 → sessionview-0.3.2}/config/config.json +6 -2
  22. sessionview-0.3.2/docs/configuration.md +197 -0
  23. sessionview-0.3.2/docs/decisions/state-and-log-home.md +557 -0
  24. sessionview-0.3.2/docs/dependencies.md +161 -0
  25. sessionview-0.3.2/docs/sessionview.md +101 -0
  26. sessionview-0.3.2/docs/settings.md +136 -0
  27. sessionview-0.3.2/lib/landing.sh +67 -0
  28. sessionview-0.3.2/lib/state.sh +99 -0
  29. {sessionview-0.3.0 → sessionview-0.3.2}/macos/SessionView.applescript +31 -5
  30. {sessionview-0.3.0 → sessionview-0.3.2}/pyproject.toml +8 -2
  31. {sessionview-0.3.0 → sessionview-0.3.2}/src/sessionview/__init__.py +1 -1
  32. {sessionview-0.3.0 → sessionview-0.3.2}/tmux/frame.conf +4 -1
  33. sessionview-0.3.0/PKG-INFO +0 -300
  34. sessionview-0.3.0/README.md +0 -283
  35. sessionview-0.3.0/lib/state.sh +0 -13
  36. {sessionview-0.3.0 → sessionview-0.3.2}/.gitignore +0 -0
  37. {sessionview-0.3.0 → sessionview-0.3.2}/LICENSE +0 -0
  38. {sessionview-0.3.0 → sessionview-0.3.2}/config/keys.md +0 -0
  39. {sessionview-0.3.0 → sessionview-0.3.2}/config/neomuttrc +0 -0
  40. {sessionview-0.3.0 → sessionview-0.3.2}/lib/client.sh +0 -0
  41. {sessionview-0.3.0 → sessionview-0.3.2}/lib/python.sh +0 -0
  42. {sessionview-0.3.0 → sessionview-0.3.2}/lib/sessionview-config-screen +0 -0
  43. {sessionview-0.3.0 → sessionview-0.3.2}/macos/dreamcatcher.icns +0 -0
  44. {sessionview-0.3.0 → sessionview-0.3.2}/plugins/session/plugin.toml +0 -0
  45. {sessionview-0.3.0 → sessionview-0.3.2}/plugins/session/start-agent +0 -0
  46. {sessionview-0.3.0 → sessionview-0.3.2}/plugins/taskmaster/plugin.toml +0 -0
  47. {sessionview-0.3.0 → sessionview-0.3.2}/plugins/taskmaster/tasks-tab +0 -0
  48. {sessionview-0.3.0 → sessionview-0.3.2}/plugins/voicemode/plugin.toml +0 -0
  49. {sessionview-0.3.0 → sessionview-0.3.2}/plugins/voicemode/speak +0 -0
  50. {sessionview-0.3.0 → sessionview-0.3.2}/skills/tmux/SKILL.md +0 -0
  51. {sessionview-0.3.0 → sessionview-0.3.2}/skills/tmux/scripts/tmux-peek +0 -0
  52. {sessionview-0.3.0 → sessionview-0.3.2}/skills/tmux/scripts/tmux-show +0 -0
  53. {sessionview-0.3.0 → sessionview-0.3.2}/skills/tmux/scripts/tmux-type +0 -0
  54. {sessionview-0.3.0 → sessionview-0.3.2}/skills/tmux/scripts/tmux-where +0 -0
  55. {sessionview-0.3.0 → sessionview-0.3.2}/tmux/agent-menu.conf +0 -0
  56. {sessionview-0.3.0 → sessionview-0.3.2}/tmux/tabs-top.conf +0 -0
@@ -0,0 +1,444 @@
1
+ Metadata-Version: 2.5
2
+ Name: sessionview
3
+ Version: 0.3.2
4
+ Summary: A sidebar for tmux: your projects (sessions) and your agents, here and on remote hosts.
5
+ Project-URL: Homepage, https://github.com/sessionkit/sessionview
6
+ Project-URL: Repository, https://github.com/sessionkit/sessionview
7
+ Author-email: Mike Bailey <mike@sessionkit.ai>
8
+ License-Expression: AGPL-3.0-or-later
9
+ License-File: LICENSE
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Environment :: Console
12
+ Classifier: Operating System :: MacOS
13
+ Classifier: Operating System :: POSIX :: Linux
14
+ Classifier: Topic :: Terminals :: Terminal Emulators/X Terminals
15
+ Requires-Python: <3.15,>=3.11
16
+ Description-Content-Type: text/markdown
17
+
18
+ # sessionview
19
+
20
+ A sidebar for tmux, in the spirit of herdr: your projects (tmux sessions)
21
+ and your agents (seats), here and on remote hosts, one click away, with a
22
+ right-click menu built from what is installed. Session's TUI — a
23
+ controller and view for the `session` tools, drawn beside tmux.
24
+
25
+ Install from PyPI: `uv tool install sessionview` (see [Install](#install)).
26
+
27
+ sessionview
28
+
29
+ In this terminal, that puts the sidebar on the left and a tmux session
30
+ on the right; a private outer tmux holds the two panes. The session is
31
+ one tmux already has: your default assistant's, else the one you last
32
+ attached, else the newest. Only when tmux has no session at all does
33
+ sessionview make one, named `main`.
34
+ `sessionview NAME` attaches the session NAME instead, which must exist.
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).
37
+
38
+ Read [SPEC.md](SPEC.md) first: what sessionview is, the rules of the view, the
39
+ contract with `session`, the plugin manifest, config, known limits.
40
+ This repo is the **reference implementation**: session integrates from
41
+ the spec; this stays comparable and runnable.
42
+
43
+ ## Requirements
44
+
45
+ - [x] macOS (tested on macOS 27, Apple silicon)
46
+ - [ ] Linux
47
+ - [ ] WSL
48
+ - [ ] Windows
49
+
50
+ The direct dependencies and the tools a user meets, what needs each one,
51
+ and how to upgrade it: [dependencies](docs/dependencies.md).
52
+
53
+ ## Features
54
+
55
+ Grouped by component, named in the terms a comparison matrix would use.
56
+
57
+ **Sidebar** — projects (tmux sessions) above, agents (seats) below.
58
+
59
+ - *Collapsible* — the `◧` glyph at the far left of the tab bar hides it
60
+ and shows it again; it keeps running, nothing restarts, and it comes
61
+ back at the width it had.
62
+ - *Resizable* — drag the border. The width you drag to is remembered
63
+ for the next open.
64
+ - *Auto-sizing* (`fit: auto`) — fits its contents: the widest row plus
65
+ one, between `width_min` and `width_max`. Grows at once, gives width
66
+ back after a few quiet redraws. Chrome never changes the width; only
67
+ your content does. A drag switches back to a fixed width.
68
+ - *Remote hosts* — sessions and agents on other machines, over an ssh
69
+ control master you already hold. The sidebar never opens a connection
70
+ of its own, so a hardware key is never asked for a touch by a redraw.
71
+
72
+ ### Menus
73
+
74
+ - *Overflow menu* — three dots `⋯` at the right of the selected session
75
+ open its menu (rename, new tab, config, settings, start an agent,
76
+ close). Right-click opens the same menu on any row.
77
+ - *Light dismiss* — a click outside an open menu closes it, and so does
78
+ a click into the main pane (focus leaves the sidebar).
79
+ - *Keyboard* — ↑↓ / j k move, the letter or enter picks, esc closes.
80
+
81
+ **Tabbed windows** — the tab bar on top: one tab per tmux window, the
82
+ name once the window is named, the number until then; click to select,
83
+ drag to reorder, `+` for a new tab, `×` to close (with a confirm). New
84
+ tab - the `+`, or the session menu - is a picker: the session's standard
85
+ windows (`windows` in config: repo, git, project, tasks, editor, shell)
86
+ listed, typing narrows, enter opens the highlighted one or a plain tab
87
+ of the name you typed. The same picker starts an agent (the `+` under
88
+ agents, or the menu): the names `session start` knows, pinned ones first.
89
+
90
+ ### Agents
91
+
92
+ - *Start an agent* — `+` under the agents list, or *Start an agent* on a
93
+ project's menu. The list you pick from is the launcher's own
94
+ (`session start --list-agents`), so it cannot offer a name that will
95
+ not start. An agent already running is never started twice.
96
+ - *Agents have a home* — an agent's own file says where it wakes
97
+ (`start: directory:`); a project's menu starts it in the project.
98
+ - *Consent on first open* — the first time it opens, sessionview asks
99
+ which agent to start whenever it opens, and remembers the answer. It
100
+ says *sessionview can start an agent for you each time it opens*, lists
101
+ your agents by number and asks `Which? (number, name, or "n")`. When it cannot get the
102
+ list it asks `Which agent? (a name, or "no" to never ask again)`. `n` or
103
+ `no` means never; `autostart_agent` in Settings changes it later.
104
+
105
+ **Settings** — every setting, its default, its note and where its value
106
+ comes from, in a small screen (project menu → Settings); the rows come
107
+ from the template, so a new key needs no second edit.
108
+
109
+ **Your terminal** — the dock app opens sessionview in the terminal you
110
+ use (`terminal` in config: iterm, ghostty or terminal), not whichever
111
+ happened to be running.
112
+
113
+ **Standard tmux** — the frame is an outer tmux holding two panes; every
114
+ view is a tmux session, window or pane. No daemon, no GUI toolkit, no
115
+ tmux fork or plugin manager.
116
+
117
+ ## Terminals
118
+
119
+ Tested: Terminal.app, iTerm2, Ghostty (macOS). The sidebar needs mouse
120
+ reporting and focus reporting from the terminal; anything that gives
121
+ tmux those should work, but only the three above have been driven by
122
+ hand. Blink Shell on iPad is wanted and not yet connecting.
123
+
124
+ ## Layout
125
+
126
+ bin/tmux-sidebar the view, the clicks, the menus (Python 3.11+, stdlib)
127
+ bin/sessionview the front door (the frame) + the sidebar supervisor
128
+ bin/sessionview-frame the frame: outer tmux, sidebar pane + client pane
129
+ bin/sessionview-session a project session with its configured tabs (repo / git / project / tasks)
130
+ bin/sessionview-newtab the tab bar's "+": the new-tab picker, in a popup
131
+ bin/sessionview-config settings: no verb opens the screen; list / get / set / unset / dump / path
132
+ bin/sessionview-autostart the consent-on-open question; --start NAME is the + under agents
133
+ bin/sessionview-sidebar-toggle hide / show the sidebar (the ◧ glyph)
134
+ bin/sessionview-terminal which terminal the dock app opens
135
+ tmux/frame.conf the sessionview look, session-scoped (sourced with S= and SESSIONVIEW_ROOT=)
136
+ tmux/tabs-top.conf the same look, global and OPTIONAL (source-file it from ~/.tmux.conf
137
+ to have it outside sessionview too; the frame applies frame.conf itself)
138
+ config/config.json every default, explicit; ~/.sessionkit/view/settings/view.json is made from it
139
+ plugins/*/ plugin.toml (+ scripts): session, voicemode, taskmaster
140
+ .claude-plugin/ sessionview is a Claude Code plugin; its skills load as
141
+ skills/*/SKILL.md sessionview:NAME - sessionview, tmux, lazygit, neovim,
142
+ claude-code: short, safe driving skills with tools
143
+
144
+ Paths resolve from the checkout (`SESSIONVIEW_ROOT`); state lives in
145
+ `~/.sessionkit/view/state` (`SESSIONVIEW_STATE`) and the log in
146
+ `~/.sessionkit/view/log` (`SESSIONVIEW_LOG`). Its direct dependencies:
147
+ [dependencies](docs/dependencies.md).
148
+
149
+ ## Install
150
+
151
+ From PyPI:
152
+
153
+ uv tool install sessionview
154
+ sessionview install
155
+
156
+ That puts `sessionview`, `sessionview-config`, `sessionview-session` and
157
+ `sessionview-messages` on PATH; `sessionview install` then checks every
158
+ requirement and links nothing.
159
+
160
+ From a checkout:
161
+
162
+ git clone https://github.com/sessionkit/sessionview ~/Code/sessionview
163
+ ~/Code/sessionview/bin/sessionview-install
164
+
165
+ That links the tools into `~/.local/bin` (`make install` in the checkout
166
+ does the same) and checks every requirement,
167
+ saying PASS / WARN / MISSING with the fix for each (tmux below 3.7 is
168
+ the one that bites: an older tmux satisfies `brew install tmux`
169
+ silently). It installs nothing else and never edits your shell config.
170
+ `sessionview-install --check` reports without changing anything. Then,
171
+ in a new terminal: `sessionview`.
172
+
173
+ The installer never moves links that already run another checkout (a
174
+ second clone, a git worktree, or `uv tool install`'s commands): it lists
175
+ them, changes nothing and exits 3. `--check` lists the same links as
176
+ WARN lines. Run `bin/sessionview-install --relink` from the checkout you
177
+ want to run, or set `PREFIX=DIR` to install somewhere else. A bare `make`
178
+ only lists the targets; installing is always `make install`.
179
+
180
+ The Claude Code plugin brings sessionview's skills. From a clone:
181
+ `claude plugin marketplace add <path-to-clone>`, then
182
+ `claude plugin install sessionview@sessionview`.
183
+
184
+ show-me (github.com/mbailey/show-me) is referenced, not bundled.
185
+
186
+ ### Dock app (macOS, optional)
187
+
188
+ sessionview install --app
189
+
190
+ That builds `SessionView.app` from `macos/SessionView.applescript` and
191
+ puts it in `~/Applications` (`make app` in a checkout does the same);
192
+ drag it to the Dock and one click opens sessionview in your preferred
193
+ terminal (see Terminals above). It is a front door, not the product --
194
+ `sessionview` in any shell does the same job.
195
+
196
+ On a cold click the app reuses the window Terminal opens for itself at
197
+ launch, rather than adding a second one. If your Terminal profile runs a
198
+ command of its own (Settings > Profiles > Shell > Run command) that
199
+ window is busy, so the app opens its own and you get two.
200
+
201
+ Full screen on click is off by default; turn it on with
202
+
203
+ sessionview-config set fullscreen true
204
+
205
+ On Terminal.app that needs Accessibility permission for SessionView
206
+ (System Settings > Privacy & Security > Accessibility) -- the app asks
207
+ in a dialog the first time rather than failing quietly. iTerm and
208
+ Ghostty need no permission.
209
+
210
+ Rebuilding the app (`make app`) gives it a fresh ad-hoc signature, which
211
+ macOS treats as a different app -- so the Accessibility permission has to
212
+ be granted again after every rebuild. A stable signing identity would fix
213
+ that; the app does not have one yet.
214
+
215
+ ## What an install changes
216
+
217
+ `uv tool install sessionview` changes two places and fills uv's own
218
+ cache, and it touches no shell startup file and nothing in `~/.claude`.
219
+ `sessionview install` after it checks the requirements and changes
220
+ nothing. Everything else below appears only when you run the verb named
221
+ beside it. Each line says what puts it there and what takes it away.
222
+
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.
227
+ From a checkout instead, `bin/sessionview-install` (or `make install`)
228
+ links the checkout's `bin/sessionview*` tools and `tmux-sidebar` into
229
+ `~/.local/bin`, or into `PREFIX/bin` when `PREFIX` is set, and makes
230
+ nothing else. [Uninstall](#uninstall) has the line that deletes them.
231
+ - **The program:** `~/.local/share/uv/tools/sessionview/`, its own
232
+ Python environment, or in `UV_TOOL_DIR`. sessionview has no Python
233
+ dependencies: the environment holds sessionview and the files it ships
234
+ (its tools, the tmux confs, the sidebar's plugins and the Dock app's
235
+ source). `uv tool uninstall` removes it. If uv finds no Python 3.11 or
236
+ newer, it downloads one into its own folder (`uv python dir`,
237
+ `~/.local/share/uv/python/` by default). `uv tool uninstall` leaves
238
+ that Python; `uv python uninstall` removes it.
239
+ - **uv's cache:** the install fills it with what it downloaded and
240
+ built. It is uv's, shared by everything uv installs, not sessionview's.
241
+ `uv cache dir` prints where it is (`~/.cache/uv` by default, or
242
+ `UV_CACHE_DIR`). `uv tool uninstall` leaves it; `uv cache clean
243
+ sessionview` drops this package's entries, and `uv cache prune` drops
244
+ the ones nothing uses.
245
+ - **Folders, each made by a verb you run:**
246
+ - `~/.sessionkit/view/state/`: the state folder, mode 0700, made the
247
+ first time `sessionview` opens (or `sessionview session` or
248
+ `sessionview messages` runs). `SESSIONVIEW_STATE` names another
249
+ folder instead. Each file sessionview makes in it is private (mode
250
+ 0600). In it:
251
+ - `frame-PID.tty`, one while each frame is open. The frame deletes
252
+ it when it closes; a frame killed outright can leave it behind.
253
+ - `recent.tsv`, a line each time `sessionview session` opens a
254
+ project, for the picker's order.
255
+ - `picker-order`, when you flip the picker's sort.
256
+ - `sidebar-mail.txt`, the last message typed at the sidebar's
257
+ message prompt.
258
+ - `plugin-PLUGIN-ACTION.txt`, the text a plugin's menu item last
259
+ sent (the session plugin's Message or Continue, say), one for
260
+ each item you have used.
261
+ - `sidebar-remote-HOST.json`, what the sidebar last saw from each
262
+ host in your `remotes` setting.
263
+ - `mutt/`, an rc file for each box `sessionview messages` opens.
264
+ - `~/.sessionkit/view/log/`: the log folder, mode 0700, made at the
265
+ same time. It holds `sessionview.log` ([Logs](#logs)).
266
+ `SESSIONVIEW_LOG` names another log file. When `SESSIONVIEW_STATE`
267
+ is set, the log is `sessionview.log` in that folder instead.
268
+ - `~/.local/state/sessionview/`: the state folder of releases before
269
+ this one. Nothing new is made there. On an upgrade, the first start
270
+ hard-links `recent.tsv`, `picker-order`, `sidebar-mail.txt` and each
271
+ file in `mutt/` into the new state folder. The old names are kept,
272
+ so the two names are one file, and a sidebar still running from
273
+ before the upgrade stays correct. The old folder is left in place,
274
+ with the old `sessionview.log`, `sidebar-mouse.log`, the frame pins
275
+ and the plugin and remote files, which are not carried over. One
276
+ line is added to the end of the old log, naming the new one. Each
277
+ start sets the old folder to mode 0700, so the old names are private
278
+ too; the files in it keep their modes. An
279
+ older release's `~/.local/state/herd/` is renamed to this folder
280
+ first, when only the herd one exists.
281
+ - `~/Applications/SessionView.app`: `sessionview install --app` (or
282
+ `make app` in a checkout), or in `DEST` when that is set. It is
283
+ built in a temporary folder that is deleted after, and a rebuild
284
+ replaces it.
285
+ - **Services (launchd agents):** none. sessionview runs no daemon and
286
+ writes nothing in `~/Library/LaunchAgents/`. While a frame is open it
287
+ runs a tmux server of its own, `sessionview-frame`, beside yours; the
288
+ server exits when the last frame closes.
289
+ - **Plugin and skills, optional:** `claude plugin marketplace add` and
290
+ `claude plugin install` ([Install](#install)). Claude Code names the
291
+ marketplace and the plugin in `~/.claude/settings.json`
292
+ (`extraKnownMarketplaces`, `enabledPlugins`), lists them in
293
+ `~/.claude/plugins/`, and keeps a copy in
294
+ `~/.claude/plugins/cache/sessionview/`. The plugin brings five skills
295
+ (`sessionview`, `tmux`, `lazygit`, `neovim`, `claude-code`) and no
296
+ hooks. Uninstalling the plugin takes it out of the settings and leaves
297
+ the cached copy.
298
+ The sidebar's own plugins (`plugins/`: session, taskmaster, voicemode)
299
+ ship inside the program and install nothing. `SESSIONVIEW_PLUGINS`
300
+ names a folder of your own.
301
+ - **Settings:** the install writes none.
302
+ `~/.sessionkit/view/settings/view.json` is made from the shipped
303
+ template the first time anything reads your settings: `sessionview`,
304
+ or a `sessionview-config` verb such as `get` (`path` only prints it).
305
+ `sessionview-config set` writes it. `SESSIONVIEW_CONFIG` names another
306
+ file instead. `~/.sessionkit/view/settings/neomuttrc` is there only if
307
+ you write it.
308
+ - **Your tmux server, while it runs:** a frame binds keys on the tmux
309
+ server it attaches to: `prefix H` (the sidebar as a popup) and three
310
+ mouse bindings on the status line (`MouseDown1Status`,
311
+ `MouseDown1StatusRight`, `MouseDrag1Status`). It gives each session it
312
+ opens the sessionview look, with options set on that session only.
313
+ With `pane_menu` on, it also binds a right-click in a pane
314
+ (`MouseDown3Pane`), in place of yours, and sets two global
315
+ `@sessionview_agent_menu_` options. Nothing is written to
316
+ `~/.tmux.conf`: these last until that tmux server exits.
317
+ - **Outside these folders, only on a verb:** with `fullscreen` on, the
318
+ Dock app on Terminal.app needs the Accessibility permission you grant
319
+ in System Settings, and macOS keeps it there until you turn it off.
320
+ *Start an agent* runs `session start`, and a message from the menu is
321
+ sent with `message`: what those make is in sessiontools' and
322
+ sessionmail's own lists. The `editor` tab, when it runs neovim,
323
+ listens on a socket in `$TMPDIR` while it runs. With no `TMPDIR`, the
324
+ socket goes in `XDG_RUNTIME_DIR`, or in `~/.local/run`, which is made
325
+ then and stays.
326
+
327
+ ## Uninstall
328
+
329
+ Close every sessionview frame first. Then remove the plugin, if you
330
+ installed it, and the command. Skip the lines for what you never
331
+ installed:
332
+
333
+ ```console
334
+ claude plugin uninstall sessionview@sessionview
335
+ claude plugin marketplace remove sessionview
336
+ uv tool uninstall sessionview
337
+ ```
338
+
339
+ Installed from a checkout instead, delete the links it made, and the
340
+ checkout if you want it gone:
341
+
342
+ ```console
343
+ rm ~/.local/bin/sessionview ~/.local/bin/sessionview-* ~/.local/bin/tmux-sidebar
344
+ ```
345
+
346
+ That leaves what the verbs made, listed above. The Dock app, the
347
+ plugin's cached copy, and the state and log folders are sessionview's
348
+ alone. To delete them:
349
+
350
+ ```bash
351
+ rm -rf "${HOME:?}/Applications/SessionView.app"
352
+ rm -rf "${HOME:?}/.claude/plugins/cache/sessionview"
353
+ rm -rf "${HOME:?}/.sessionkit/view/state" "${HOME:?}/.sessionkit/view/log"
354
+ rm -rf "${HOME:?}/.local/state/sessionview"
355
+ ```
356
+
357
+ The last line is for an upgrade from an earlier release: it removes the
358
+ old state folder, with the old log in it.
359
+
360
+ uv's cache stays too, with the other things uv installed; `uv cache
361
+ clean sessionview` drops this package's entries. The key bindings go
362
+ when your tmux server next exits.
363
+
364
+ The rest is your data: delete it by hand only if you want it gone.
365
+ `~/.sessionkit/view/settings/` holds your settings, and the kit's other packages
366
+ keep theirs beside it in `~/.sessionkit/`.
367
+
368
+ ## Keys and clicks
369
+
370
+ - sidebar: click a project or seat → go there; right-click, or the `⋯`
371
+ on the selected project → its menu; `+` between the lists → a session
372
+ picker (type to filter, ↑↓, enter); `+` at the bottom → start an
373
+ agent; the store name → that store's session and store view, its `⋯`
374
+ (or `s`) → Switch store, right-click → Kick; `all · grouped` on the agents
375
+ heading are toggles; drag the border to resize; `q` reloads, `Q`
376
+ quits, esc backs out of any view
377
+ - tab bar: `◧` at the far left hides/shows the sidebar; click selects,
378
+ drag reorders, `+` new tab (the picker); a close `×`, on by default;
379
+ `tmux set -g @sessionview_tab_close 0` turns it off
380
+ - menu: ↑↓ / j k move, the letter or enter picks, esc or a click
381
+ anywhere else closes
382
+ - agent panes (opt-in): right-click an agent's pane for Speak, Continue,
383
+ Read Clipboard, Park or Succeed; each mails that agent. Turn it on
384
+ with `sessionview-config set pane_menu true`. It replaces your own tmux right-click menu, which is
385
+ why it is off by default. Using tmux without session view? Add
386
+ `source-file -q /path/to/sessionview/tmux/agent-menu.conf` to
387
+ `~/.tmux.conf` and reload.
388
+
389
+ The look follows herdr's; its colours were matched from herdr's own window.
390
+
391
+ ## Configuration
392
+
393
+ - **Settings:** JSON, in layers, a later one winning. The template
394
+ `config/config.json` holds every key and its default.
395
+ `~/.sessionkit/view/settings/view.json` is yours, made from it on first
396
+ use; a store's and a project's `.sessionview` come after it.
397
+ `sessionview-config set KEY VALUE` writes yours, and
398
+ `sessionview-config dump --where` names the file behind each key.
399
+ An older install's settings are never read. Moving them is one step,
400
+ in [Upgrading from 0.1.0](docs/configuration.md#upgrading-from-010).
401
+ Until then sessionview makes nothing and refuses: `sessionview-config`
402
+ exits 3 and prints the move to run, and the sidebar shows the same
403
+ message. If the old file is left beside the new one, it uses the new one
404
+ and warns you to remove the old one.
405
+ - **Your neomutt view:** `~/.sessionkit/view/settings/neomuttrc`,
406
+ optional, read after the shipped `config/neomuttrc`.
407
+ - **Plugins:** `plugins/<name>/plugin.toml` in the checkout.
408
+ - **Environment:** `SESSIONVIEW_CONFIG` (another file for yours),
409
+ `SESSIONVIEW_FROM` (the name mail is sent as, else `mail_from`, else
410
+ `$USER`; `sessionview from` prints the name in effect), `SESSIONVIEW_STATE`
411
+ (state, default `~/.sessionkit/view/state`), `SESSIONVIEW_LOG` (the log
412
+ file, default `~/.sessionkit/view/log/sessionview.log`),
413
+ `SESSIONVIEW_PLUGINS` (another plugin directory).
414
+ - sessionview does not read the kit's settings cascade today, only these.
415
+
416
+ Every file, variable and tmux option is in
417
+ [Configuration](docs/configuration.md),
418
+ and every key in
419
+ [Settings](docs/settings.md).
420
+
421
+ ## Logs
422
+
423
+ - `~/.sessionkit/view/log/sessionview.log`: what went wrong, one
424
+ entry each, starting with the time (a failed tmux call, an uncaught
425
+ error with its traceback). Follow it with
426
+ `tail -f ~/.sessionkit/view/log/sessionview.log` when a click
427
+ seems to do nothing.
428
+ - **After an upgrade:** the log of earlier releases,
429
+ `~/.local/state/sessionview/sessionview.log`, stays where it is and
430
+ is never moved. Its last line names the new log, and the new log's
431
+ first line names the old one.
432
+ - **Levels:** `log_level` in your settings (or `$SESSIONVIEW_LOG_LEVEL`
433
+ for one run). `error`, the default, logs only what went wrong.
434
+ `timing` adds a line per click or key with its milliseconds, and each
435
+ command that took 50 ms or more, so a slow click names its slow part.
436
+ `debug` adds every command and every mouse event (what the old
437
+ `sidebar-mouse.log` held).
438
+ - `$SESSIONVIEW_LOG` names another log file. Without it, a
439
+ `$SESSIONVIEW_STATE` that names another folder keeps the log there, as
440
+ `sessionview.log`. It is not rotated: turn `timing` or `debug` on
441
+ while you look, then back to `error`.
442
+ - **Health:** `sessionview install --check`: exit 0 and `ready` when
443
+ every requirement is present, exit 1 with each MISSING one named
444
+ otherwise. It checks the machine, not a running sidebar.