sessionkit 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.
@@ -0,0 +1,439 @@
1
+ Metadata-Version: 2.4
2
+ Name: sessionkit
3
+ Version: 0.3.2
4
+ Summary: Session Kit gives your Claude Code sessions voice, mail, a phone line and a tmux sidebar, in one install.
5
+ Author: Mike Bailey
6
+ Author-email: Mike Bailey <mike@sessionkit.ai>
7
+ License-Expression: AGPL-3.0-or-later
8
+ License-File: LICENSE
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Requires-Dist: click>=8.1
11
+ Requires-Dist: sessionmail>=0.3.2
12
+ Requires-Dist: sessiontools>=0.3.2
13
+ Requires-Dist: sessionphone[media]>=0.3.2
14
+ Requires-Dist: sessionview>=0.3.2
15
+ Requires-Dist: sessionvoice[capture]>=0.3.2
16
+ Requires-Python: >=3.11, <3.15
17
+ Project-URL: Homepage, https://github.com/sessionkit/sessionkit
18
+ Project-URL: Repository, https://github.com/sessionkit/sessionkit
19
+ Description-Content-Type: text/markdown
20
+
21
+ # Session Kit
22
+
23
+ Session Kit lets your Claude Code sessions mail each other, hear you and
24
+ answer aloud. One install brings the five family packages and their Claude
25
+ Code plugins.
26
+
27
+ ## Installation
28
+
29
+ You need:
30
+
31
+ - macOS.
32
+ - [Claude Code][claude-code].
33
+ - Have Claude Code: nothing to run.
34
+ - No Claude Code: install it with Anthropic's installer.
35
+
36
+ ```bash
37
+ curl -fsSL https://claude.ai/install.sh | bash
38
+ ```
39
+
40
+ - Its "Setup notes" say `~/.local/bin is not in your PATH`? The installer
41
+ does not change your PATH itself. Add the folder with Anthropic's two
42
+ lines for zsh, the Mac's shell:
43
+
44
+ ```bash
45
+ echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
46
+ source ~/.zshrc
47
+ ```
48
+
49
+ - Claude Code asks you to sign in the first time you start it.
50
+ - [Homebrew][brew] or at least Apple's Command Line Tools. Homebrew
51
+ installs the Command Line Tools for you ([prerequisites][prereqs]), and
52
+ the kit needs two of their tools: the plugin lines clone with git, and the
53
+ ears build a Swift helper with `swiftc`.
54
+ - Have Homebrew: nothing to run. It installed the Command Line Tools.
55
+ - No Homebrew: get the Command Line Tools alone.
56
+
57
+ ```bash
58
+ xcode-select --install
59
+ ```
60
+
61
+ - uv.
62
+ - Have uv: nothing to run.
63
+ - No uv: install it.
64
+
65
+ ```bash
66
+ curl -LsSf https://astral.sh/uv/install.sh | sh
67
+ ```
68
+
69
+ - Then open a new terminal, so `uv` is on your PATH. Or run:
70
+
71
+ ```bash
72
+ source ~/.zshrc
73
+ ```
74
+
75
+ - For a call on a Mac: [Homebrew][brew], then ffmpeg from it. A call needs
76
+ ffmpeg, and Homebrew is how a Mac gets it. The Command Line Tools alone
77
+ are not enough for a call.
78
+ - Have Homebrew: go on to ffmpeg.
79
+ - No Homebrew: install it with its own installer, from [brew.sh][brew].
80
+ - Then install ffmpeg:
81
+
82
+ ```bash
83
+ brew install ffmpeg
84
+ ```
85
+
86
+ - Homebrew lists what ffmpeg needs, then asks
87
+ `Do you want to proceed with the installation? [y/n]`. Press `y`. It
88
+ goes on at once, with no Return.
89
+ - Then the speech server, then link the phone: the phone bullets below.
90
+ - A call without Homebrew is the workaround case. This guide does not
91
+ cover it.
92
+
93
+ Then install the kit:
94
+
95
+ ```bash
96
+ uv tool install --python 3.14 sessionkit
97
+ claude plugin marketplace add sessionkit/sessionkit
98
+ claude plugin install sessionkit@sessionkit
99
+ ```
100
+
101
+ The first line puts the commands on your PATH. The other two install the
102
+ kit's plugin and the five family plugins it depends on.
103
+
104
+ - **Keep `--python 3.14`.** Without it, uv takes the Python it finds: 3.15,
105
+ where a voice library has no build yet and the install fails, or the
106
+ Command Line Tools' 3.11. The kit is tested on 3.14.
107
+ - To upgrade:
108
+
109
+ ```bash
110
+ uv tool upgrade sessionkit
111
+ ```
112
+
113
+ It keeps the Python the install chose.
114
+ - To reinstall, give the pin again:
115
+
116
+ ```bash
117
+ uv tool install --python 3.14 --reinstall sessionkit
118
+ ```
119
+
120
+ Without it, uv drops the pin from its record, or, with `--force`, builds
121
+ the kit again on the Python it finds.
122
+ - **A dialog may ask to install the Command Line Tools.** On a Mac without
123
+ them, the first `uv tool install` opens it. Click Install and let it
124
+ finish: the plugin lines need the git it brings. The dialog can open
125
+ behind the Terminal window: look for it in the Dock or with Cmd-Tab.
126
+ - **Phone calls are installed, and walked for a session started with
127
+ `session start <name>`.** A fresh Mac took a real call and passed. A plain
128
+ `claude` session does not hear calls you make to it yet. Whether the phone
129
+ bot signs its mail to your Claude follows your mail carrier:
130
+ [bot mail signing][phone-signing].
131
+ - **The speech server comes before the phone.** A call hears you through
132
+ it, so it is installed before you link your phone.
133
+ - No phone: nothing to run now. [Hearing and speaking][hearing]
134
+ installs the speech server with the rest of the voice.
135
+ - A phone: first Homebrew, then ffmpeg, as the call item under "You
136
+ need" says.
137
+
138
+ ```bash
139
+ brew install ffmpeg
140
+ ```
141
+
142
+ - At Homebrew's `[y/n]`, press `y`.
143
+ - Then install the speech server. It builds the server and fetches its
144
+ weights, about 2.9 GB.
145
+
146
+ ```bash
147
+ ears services install --only speech
148
+ ```
149
+
150
+ - Then link the phone. This makes its account on a public relay and
151
+ prints the invite link. The name people see in their chat list goes in
152
+ place of NAME:
153
+
154
+ ```bash
155
+ sessionphone setup --name NAME
156
+ ```
157
+
158
+ A name with a space in it needs quotes, or the shell splits it in two
159
+ and setup refuses the second word:
160
+
161
+ ```bash
162
+ sessionphone setup --name "Ada Lovelace"
163
+ ```
164
+
165
+ - The rest of linking is in [sessionphone][pkg-phone]'s docs.
166
+
167
+ - **Then quit Claude Code and start it again**, every window of it, before
168
+ you run anything else.
169
+
170
+ A plugin installed from the shell loads only when Claude Code starts, so a
171
+ session that was already open has no plugin commands on its PATH, and no
172
+ plugin hooks.
173
+
174
+ Then set up mail. This makes the box `claude`, which your first session
175
+ needs to hear mail and calls:
176
+
177
+ ```bash
178
+ sessionkit setup
179
+ ```
180
+
181
+ - **On a fresh Mac it exits 4, and that is expected.** It leaves two
182
+ notmuch steps for later: [the manual install][setup] shows its last
183
+ lines.
184
+
185
+ The three install lines leave the ears without the model they listen
186
+ with. Fetch it once:
187
+
188
+ ```bash
189
+ ears install
190
+ ```
191
+
192
+ It downloads the 2.3 MB voice-activity model from GitHub (one pinned
193
+ release of Silero VAD, checked against its SHA-256) to
194
+ `~/.cache/ears/silero_vad.onnx`, with no sudo, and prints `done`. Without
195
+ it the ears cannot hear you, and `ears services install`, the step that
196
+ starts them ([hearing and speaking][hearing]), refuses with
197
+ `silero MISSING`. The Swift helper is built later, when those services start.
198
+
199
+ - **The mail hooks start off.** They tell an agent about new mail between
200
+ its tool calls. To turn them on, set `"hooks": true` in
201
+ `~/.sessionkit/mail/settings/mail.json`. The plugin writes that file,
202
+ with the hooks off, the first time a Claude Code session runs a tool,
203
+ and it holds other settings too, so change only that key. Never write
204
+ the file over: that deletes the other keys. This works whether the file
205
+ is there yet or not, and whether it has a `hooks` key or not:
206
+
207
+ ```bash
208
+ f=~/.sessionkit/mail/settings/mail.json
209
+ if [ -f "$f" ]; then
210
+ perl -0777 -pi -e '
211
+ if (/"hooks"\s*:/) { s/"hooks"\s*:\s*false/"hooks": true/ }
212
+ elsif (/\A\s*\{\s*\}\s*\z/) { s/\{\s*\}/{"hooks": true}/ }
213
+ else { s/\{(\s*)/"{$1" . q("hooks": true,) . ($1 || " ")/e }
214
+ ' "$f"
215
+ else
216
+ mkdir -p ~/.sessionkit/mail/settings
217
+ echo '{"version": 1, "hooks": true, "sendmail": "drop"}' > "$f"
218
+ fi
219
+ ```
220
+
221
+ A `"hooks": false` becomes `true`. A file with no `hooks` key gets
222
+ `"hooks": true` as its first key, and its other keys stay as they were.
223
+ If the file is not there yet, this writes what the plugin would have
224
+ written, with the hooks on. The plugin never replaces a file that is
225
+ already there.
226
+
227
+ Step by step, with every step that needs you marked: [the manual
228
+ install][install].
229
+
230
+ To see what this Mac is still missing, run the kit's check. It installs
231
+ nothing. It prints one line for each thing the kit needs, and under each
232
+ missing one, the command that adds it:
233
+
234
+ ```bash
235
+ sessionkit doctor
236
+ ```
237
+
238
+ It exits 0 when nothing the kit needs is missing, and 1 when something is.
239
+ The phone bot and the session key are shown, but they never fail it.
240
+
241
+ - No kit yet, or `sessionkit` will not start? The installer runs the same
242
+ check. Its address is not live yet. From a clone of this repository,
243
+ run `bash install.sh --check`. Once the address is live:
244
+
245
+ ```bash
246
+ curl -fsSL https://sessionkit.ai/install.sh | bash -s -- --check
247
+ ```
248
+
249
+ ## Quick start
250
+
251
+ ```bash
252
+ sessionkit --version
253
+ ```
254
+
255
+ It lists the kit and each family package, with its version. Each `X.Y.Z`
256
+ is the version you installed:
257
+
258
+ ```text
259
+ sessionkit, version X.Y.Z
260
+ sessionmail X.Y.Z
261
+ sessiontools X.Y.Z
262
+ sessionphone X.Y.Z
263
+ sessionview X.Y.Z
264
+ sessionvoice X.Y.Z
265
+ ```
266
+
267
+ Start Claude in a project folder, not in your home folder, where a new
268
+ Terminal opens. Started in the home folder, Claude Code asks macOS for
269
+ access to folders such as Desktop, Downloads, Photos and Media Library.
270
+ Make a folder, go into it, and start Claude there:
271
+
272
+ ```bash
273
+ mkdir -p ~/work && cd ~/work
274
+ session start
275
+ ```
276
+
277
+ - **The first session on this Mac is `claude`, and it hears Delta.** Your
278
+ phone's Delta messages and calls go to the box `claude`, and only the
279
+ session that holds `claude` hears them. It says so as it starts:
280
+
281
+ ```text
282
+ session start: this session is claude, the default seat on this host (box claude)
283
+ ```
284
+
285
+ - **A second session starts plain.** Start another the same way while the
286
+ first one runs, and it is a plain Claude Code session. It does not hear
287
+ Delta, and its one line names the session that holds `claude`:
288
+
289
+ ```text
290
+ session start: starting plain: the default seat claude is held by session 6161d8f8-d49f-4826-9f80-095bd2e6aaed (pid 6993, live 2s), so this session will NOT hear Delta messages or calls; that one does
291
+ ```
292
+
293
+ - **Never a bare `claude`.** Mail to your agent's box, your phone's
294
+ included, reaches only a session started as that agent.
295
+ - **Without the box `claude`, the first session starts plain too.** The
296
+ mail setup under Installation makes the box ([first checks][checks]).
297
+ The line names the repair:
298
+
299
+ ```text
300
+ session start: starting plain: box claude is missing, so this session will NOT hear Delta messages or calls; repair: message setup --box claude
301
+ ```
302
+
303
+ Then, from your agent inside a Claude Code session, list your live
304
+ sessions:
305
+
306
+ ```bash
307
+ session list
308
+ ```
309
+
310
+ Mail another agent, its box name in place of TO:
311
+
312
+ ```bash
313
+ message send TO -s "PR ready" -f note.md
314
+ ```
315
+
316
+ Speak one line:
317
+
318
+ ```bash
319
+ mouth say "the build is green"
320
+ ```
321
+
322
+ - **Mail works inside a session.** `message` and `pager` read who is asking
323
+ from the session. A plain terminal has no session, so they refuse with
324
+ `no seat in the environment ... set an identity` ([first checks][checks]).
325
+ A send never makes a box: the address must have one already ([mail
326
+ between agents][mail]).
327
+ - **The mouth plays on your Mac's default output** when no device is set.
328
+ `mouth devices` lists the others, and `--device DEVICE` picks one.
329
+ - **To hear you**, the ears need a speech-to-text server: [hearing and
330
+ speaking][hearing].
331
+ - **Your agent talks with the kit's mouth and ears.** sessionvoice's ears
332
+ skill sets the default:
333
+
334
+ > **With the kit, an agent talks through the kit's own mouth and ears: it
335
+ > speaks with `mouth say` and listens by arming the ears with `ears-arm`. That
336
+ > is the default whenever the user asks it to talk, speak, listen or use voice,
337
+ > even on a host that also has VoiceMode's `converse` tool. It uses `converse`
338
+ > only when the user asks for converse by name.**
339
+
340
+ ## Requirements
341
+
342
+ - [x] macOS (tested on macOS 27, Apple silicon)
343
+ - [ ] Linux
344
+ - [ ] WSL
345
+ - [ ] Windows
346
+
347
+ What the kit depends on, what needs each one, and how to upgrade it:
348
+ [dependencies][dependencies].
349
+
350
+ ## Uninstall
351
+
352
+ ```bash
353
+ claude plugin marketplace remove sessionkit
354
+ uv tool uninstall sessionkit
355
+ ```
356
+
357
+ Removing the marketplace removes its six plugins too, but not the copies they
358
+ ran from. Those copies, the services and your data have their own steps:
359
+ [uninstall][uninstall].
360
+
361
+ ## Usage
362
+
363
+ Every command answers `--help`, and each has a page: [components][components].
364
+
365
+ ## The family
366
+
367
+ Session Kit installs these together:
368
+
369
+ - [sessionmail][pkg-mail]: mail for coding agents. `message`, `pager` and
370
+ `memory` over one maildir.
371
+ - [sessiontools][pkg-tools]: sessions, status and idle. `session`.
372
+ - [sessionvoice][pkg-voice]: ambient voice. `ears` hears; `mouth` speaks.
373
+ - [sessionphone][pkg-phone]: phone calls to a session over Delta Chat.
374
+ Installed, and walked on a fresh Mac for a session started with
375
+ `session start <name>`. A plain `claude` session does not hear calls you
376
+ make to it yet.
377
+ - [sessionview][pkg-view]: a tmux sidebar of your projects and your agents.
378
+ `sessionview` (said "session view").
379
+
380
+ ## Components
381
+
382
+ The commands, services and folders the install adds, and where each
383
+ package logs: [components][components].
384
+
385
+ ## Configuration
386
+
387
+ Each package configures itself: [configuration][configuration]. How the
388
+ settings files stack: [the settings guide][settings].
389
+
390
+ ## Logs
391
+
392
+ Each package keeps its own log: [logs][logs]. Which one to read for a
393
+ symptom: [troubleshooting][troubleshooting].
394
+
395
+ ## Development
396
+
397
+ ```bash
398
+ git clone https://github.com/sessionkit/sessionkit
399
+ cd sessionkit
400
+ make install
401
+ make check
402
+ ```
403
+
404
+ `make install` installs the kit editable, with uv. `make check` runs ruff,
405
+ shellcheck, then the tests.
406
+
407
+ The rules for changing the kit: [AGENTS.md][agents].
408
+
409
+ ## Status
410
+
411
+ Alpha, 0.3.2. Tested on macOS 27 on Apple silicon; Linux and Windows are
412
+ untested. What you may still hit: [known gaps][gaps].
413
+
414
+ Licence: [AGPL-3.0][licence].
415
+
416
+ [claude-code]: https://code.claude.com/docs/en/overview
417
+ [brew]: https://brew.sh
418
+ [install]: INSTALL.md
419
+ [prereqs]: INSTALL.md#1-prerequisites-human
420
+ [setup]: INSTALL.md#2-install-the-kit
421
+ [checks]: INSTALL.md#4-first-checks
422
+ [hearing]: INSTALL.md#5-hearing-and-speaking-it-hears-me-and-speaks
423
+ [mail]: INSTALL.md#mail-between-agents
424
+ [uninstall]: INSTALL.md#8-uninstall
425
+ [gaps]: INSTALL.md#7-known-gaps-you-will-hit
426
+ [components]: docs/components.md
427
+ [dependencies]: docs/dependencies.md
428
+ [logs]: docs/components.md#logs
429
+ [configuration]: docs/configuration.md
430
+ [settings]: docs/settings.md
431
+ [troubleshooting]: docs/troubleshooting.md
432
+ [agents]: AGENTS.md
433
+ [licence]: LICENSE
434
+ [pkg-mail]: https://github.com/sessionkit/sessionmail
435
+ [pkg-tools]: https://github.com/sessionkit/sessiontools
436
+ [pkg-voice]: https://github.com/sessionkit/sessionvoice
437
+ [pkg-phone]: https://github.com/sessionkit/sessionphone
438
+ [phone-signing]: https://github.com/sessionkit/sessionphone/blob/HEAD/docs/bot-mail-signing.md
439
+ [pkg-view]: https://github.com/sessionkit/sessionview