@markusylisiurunen/tau 0.3.81 → 0.3.83

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 (180) hide show
  1. package/README.md +1 -3
  2. package/dist/core/agent/agent_runtime.js +6 -4
  3. package/dist/core/agent/agent_runtime.js.map +1 -1
  4. package/dist/core/cli.js +2 -2
  5. package/dist/core/cli.js.map +1 -1
  6. package/dist/core/code_mode/models.js +61 -22
  7. package/dist/core/code_mode/models.js.map +1 -1
  8. package/dist/core/commands/registry.js +0 -22
  9. package/dist/core/commands/registry.js.map +1 -1
  10. package/dist/core/history/cli.js +48 -0
  11. package/dist/core/history/cli.js.map +1 -1
  12. package/dist/core/history/history_manager.js +9 -3
  13. package/dist/core/history/history_manager.js.map +1 -1
  14. package/dist/core/history/local_history_store.js +9 -2
  15. package/dist/core/history/local_history_store.js.map +1 -1
  16. package/dist/core/history/remote_history_client.js +18 -3
  17. package/dist/core/history/remote_history_client.js.map +1 -1
  18. package/dist/core/models/openrouter.js +17 -5
  19. package/dist/core/models/openrouter.js.map +1 -1
  20. package/dist/core/models/openrouter_decisions.js +16 -1
  21. package/dist/core/models/openrouter_decisions.js.map +1 -1
  22. package/dist/core/runtime/chat_runtime.js +2 -13
  23. package/dist/core/runtime/chat_runtime.js.map +1 -1
  24. package/dist/core/static/tau_docs/client-tools.md +53 -53
  25. package/dist/core/static/tau_docs/config-reference.md +46 -43
  26. package/dist/core/static/tau_docs/configuration.md +40 -36
  27. package/dist/core/static/tau_docs/credentials.md +32 -31
  28. package/dist/core/static/tau_docs/getting-started.md +28 -28
  29. package/dist/core/static/tau_docs/history.md +114 -79
  30. package/dist/core/static/tau_docs/image-generation.md +20 -18
  31. package/dist/core/static/tau_docs/index.md +30 -31
  32. package/dist/core/static/tau_docs/manifest.json +1 -0
  33. package/dist/core/static/tau_docs/models.md +17 -17
  34. package/dist/core/static/tau_docs/node-sdk.md +69 -72
  35. package/dist/core/static/tau_docs/nook.md +75 -69
  36. package/dist/core/static/tau_docs/openrouter.md +28 -13
  37. package/dist/core/static/tau_docs/ownership-and-scope.md +21 -23
  38. package/dist/core/static/tau_docs/pdf-unpacking.md +6 -6
  39. package/dist/core/static/tau_docs/personas.md +29 -27
  40. package/dist/core/static/tau_docs/prompts-and-project-context.md +41 -39
  41. package/dist/core/static/tau_docs/remote-sessions.md +38 -38
  42. package/dist/core/static/tau_docs/sdk-diff-review.md +16 -12
  43. package/dist/core/static/tau_docs/security.md +72 -72
  44. package/dist/core/static/tau_docs/session-protocol-methods.md +46 -91
  45. package/dist/core/static/tau_docs/session-protocol.md +54 -54
  46. package/dist/core/static/tau_docs/sessions.md +97 -107
  47. package/dist/core/static/tau_docs/skills.md +25 -20
  48. package/dist/core/static/tau_docs/speech-generation.md +5 -5
  49. package/dist/core/static/tau_docs/subagents.md +42 -44
  50. package/dist/core/static/tau_docs/telegram-projects.md +142 -0
  51. package/dist/core/static/tau_docs/telegram.md +65 -182
  52. package/dist/core/static/tau_docs/tools.md +72 -91
  53. package/dist/core/static/tau_docs/troubleshooting.md +94 -149
  54. package/dist/core/static/tau_docs/tui.md +124 -81
  55. package/dist/core/telegram/adapter.js +1 -6
  56. package/dist/core/telegram/adapter.js.map +1 -1
  57. package/dist/core/tool/image_generate.js +5 -17
  58. package/dist/core/tool/image_generate.js.map +1 -1
  59. package/dist/core/tool/openrouter.js +21 -2
  60. package/dist/core/tool/openrouter.js.map +1 -1
  61. package/dist/core/tools/catalog.js +0 -11
  62. package/dist/core/tools/catalog.js.map +1 -1
  63. package/dist/core/tools/tool_names.js +0 -6
  64. package/dist/core/tools/tool_names.js.map +1 -1
  65. package/dist/core/utils/gemini_transcription.js +103 -28
  66. package/dist/core/utils/gemini_transcription.js.map +1 -1
  67. package/dist/core/utils/model_stream.js +17 -1
  68. package/dist/core/utils/model_stream.js.map +1 -1
  69. package/dist/core/utils/user_metadata.js +0 -14
  70. package/dist/core/utils/user_metadata.js.map +1 -1
  71. package/dist/core/version.js +2 -2
  72. package/dist/diff_tool/app/dist/assets/{angular-html-BbLgbIhq.js → angular-html-x29PkEoY.js} +1 -1
  73. package/dist/diff_tool/app/dist/assets/{angular-ts-DXk17TRM.js → angular-ts-CsWCqoCf.js} +1 -1
  74. package/dist/diff_tool/app/dist/assets/{apl-BsvksCXR.js → apl-CEvdc7jl.js} +1 -1
  75. package/dist/diff_tool/app/dist/assets/{astro-DH775E4V.js → astro-Cgi6YxH2.js} +1 -1
  76. package/dist/diff_tool/app/dist/assets/{blade-Ck99Rm59.js → blade-B0pr7Zx6.js} +1 -1
  77. package/dist/diff_tool/app/dist/assets/{c-DJpHqu5J.js → c-DDVLgtVy.js} +1 -1
  78. package/dist/diff_tool/app/dist/assets/{chapel-Owff0Csy.js → chapel-Bk9M7Jej.js} +1 -1
  79. package/dist/diff_tool/app/dist/assets/{cobol-Cv2gZuhO.js → cobol-DyEvnPuC.js} +1 -1
  80. package/dist/diff_tool/app/dist/assets/{coffee-Bji0YCf_.js → coffee-Di2-m3Jq.js} +1 -1
  81. package/dist/diff_tool/app/dist/assets/{cpp-DTjA_yFF.js → cpp-CWpAaUgO.js} +1 -1
  82. package/dist/diff_tool/app/dist/assets/{crystal-Dd00NOeb.js → crystal-CUker9Zt.js} +1 -1
  83. package/dist/diff_tool/app/dist/assets/{css-D44TN1V6.js → css-D4XpBIiJ.js} +1 -1
  84. package/dist/diff_tool/app/dist/assets/{edge-CVmGSi2m.js → edge-CVxhhF7L.js} +1 -1
  85. package/dist/diff_tool/app/dist/assets/{elixir-B8Mq7no2.js → elixir-B_FS9APl.js} +1 -1
  86. package/dist/diff_tool/app/dist/assets/{elm-CXS0I3Z2.js → elm-1KyefTkH.js} +1 -1
  87. package/dist/diff_tool/app/dist/assets/{erb-B9oDKaUo.js → erb-CCgO9dRW.js} +1 -1
  88. package/dist/diff_tool/app/dist/assets/{git-rebase-DT-YFebH.js → git-rebase-D0VYo_oY.js} +1 -1
  89. package/dist/diff_tool/app/dist/assets/{glimmer-js-s0DXlNjq.js → glimmer-js-Ce07ngjZ.js} +1 -1
  90. package/dist/diff_tool/app/dist/assets/{glimmer-ts-QgEB5S2z.js → glimmer-ts-BmOM4djO.js} +1 -1
  91. package/dist/diff_tool/app/dist/assets/{glsl-NA0icwbY.js → glsl-D-jkLYJ8.js} +1 -1
  92. package/dist/diff_tool/app/dist/assets/{graphql-0_dOlfV0.js → graphql-DZOwJE5e.js} +1 -1
  93. package/dist/diff_tool/app/dist/assets/{hack-D-mr7l1l.js → hack-Cgvn19h8.js} +1 -1
  94. package/dist/diff_tool/app/dist/assets/{haml-B0-oQmz7.js → haml-JTmDSYQl.js} +1 -1
  95. package/dist/diff_tool/app/dist/assets/{handlebars-Yq9bXpWN.js → handlebars-CChh7Dy5.js} +1 -1
  96. package/dist/diff_tool/app/dist/assets/{html-B8bMmdRK.js → html-BKgzx_cb.js} +1 -1
  97. package/dist/diff_tool/app/dist/assets/{html-derivative-BpxSlQb_.js → html-derivative-CdFl0BmX.js} +1 -1
  98. package/dist/diff_tool/app/dist/assets/{http-hS_53mxt.js → http-DZeL7KvH.js} +1 -1
  99. package/dist/diff_tool/app/dist/assets/{hurl-B2ST1kwl.js → hurl-CqKevOlQ.js} +1 -1
  100. package/dist/diff_tool/app/dist/assets/index-BXyr8GCM.js +341 -0
  101. package/dist/diff_tool/app/dist/assets/{java-D4mj0lZJ.js → java-Sq3MCkId.js} +1 -1
  102. package/dist/diff_tool/app/dist/assets/{javascript-wC7rrKiV.js → javascript-CHZB4Nse.js} +1 -1
  103. package/dist/diff_tool/app/dist/assets/{jinja-DbQ3o87F.js → jinja-C4ucJVla.js} +1 -1
  104. package/dist/diff_tool/app/dist/assets/{jison-CrE9FdvP.js → jison-D3mprebA.js} +1 -1
  105. package/dist/diff_tool/app/dist/assets/{json-xjicDyWN.js → json-DgPfCYJ1.js} +1 -1
  106. package/dist/diff_tool/app/dist/assets/{jsx-m28lXojQ.js → jsx-BG-Tx0cw.js} +1 -1
  107. package/dist/diff_tool/app/dist/assets/{julia-19xkOmop.js → julia-B1GnFeUC.js} +1 -1
  108. package/dist/diff_tool/app/dist/assets/{just-Cf7OorTr.js → just-_MZzo0MF.js} +1 -1
  109. package/dist/diff_tool/app/dist/assets/{latex-DDb7GQOy.js → latex-DI0kqjQy.js} +1 -1
  110. package/dist/diff_tool/app/dist/assets/{liquid-DHOuQ0rf.js → liquid-BtMAPeHl.js} +1 -1
  111. package/dist/diff_tool/app/dist/assets/{lua-BGyIvonw.js → lua-CFxaP0To.js} +1 -1
  112. package/dist/diff_tool/app/dist/assets/{marko-DB5OqI1C.js → marko-BIJocuFI.js} +1 -1
  113. package/dist/diff_tool/app/dist/assets/{mdc-DTyNMupO.js → mdc-BAgrdjTH.js} +1 -1
  114. package/dist/diff_tool/app/dist/assets/{nginx-DfF0fMYD.js → nginx-DE-3CsYn.js} +1 -1
  115. package/dist/diff_tool/app/dist/assets/{nim-BbwsXuZD.js → nim-DOxeXLhb.js} +1 -1
  116. package/dist/diff_tool/app/dist/assets/{org-BkOBBl1f.js → org-KTfP0tHA.js} +1 -1
  117. package/dist/diff_tool/app/dist/assets/{perl-BTXTOl4K.js → perl-BH-NxpgK.js} +1 -1
  118. package/dist/diff_tool/app/dist/assets/{php-DIMVQWiA.js → php-vuiVEXZK.js} +1 -1
  119. package/dist/diff_tool/app/dist/assets/{pug-B_nrb4dJ.js → pug-VlIlTMUy.js} +1 -1
  120. package/dist/diff_tool/app/dist/assets/{qml-1PXi8G8Z.js → qml-k6wTtGG-.js} +1 -1
  121. package/dist/diff_tool/app/dist/assets/{r-CJrAkc2Z.js → r-Ccjcb2zh.js} +1 -1
  122. package/dist/diff_tool/app/dist/assets/{razor-DgPUftNd.js → razor-BNhYgSCv.js} +1 -1
  123. package/dist/diff_tool/app/dist/assets/{regexp-C2hS8XvL.js → regexp-C4LFejPu.js} +1 -1
  124. package/dist/diff_tool/app/dist/assets/{rst-CDouhKnc.js → rst-DXLxI-UJ.js} +1 -1
  125. package/dist/diff_tool/app/dist/assets/{ruby-CAjKW1uO.js → ruby-BPuL4jDV.js} +1 -1
  126. package/dist/diff_tool/app/dist/assets/{sas-qAHkHLc1.js → sas-B3Yz8snb.js} +1 -1
  127. package/dist/diff_tool/app/dist/assets/{scss-Bfx2Ydid.js → scss-B2AJ5vpk.js} +1 -1
  128. package/dist/diff_tool/app/dist/assets/{shellscript-Bu76R8y2.js → shellscript-zyDexxnC.js} +1 -1
  129. package/dist/diff_tool/app/dist/assets/{shellsession-BU8BL0oL.js → shellsession-C8b8xluk.js} +1 -1
  130. package/dist/diff_tool/app/dist/assets/{soy-FRl8ozP-.js → soy-DKWe_XML.js} +1 -1
  131. package/dist/diff_tool/app/dist/assets/{sql-BacQgsEs.js → sql-uEbz-Epf.js} +1 -1
  132. package/dist/diff_tool/app/dist/assets/{stata-B9kkG-ET.js → stata-DieRPmHY.js} +1 -1
  133. package/dist/diff_tool/app/dist/assets/{surrealql-qvETr7iY.js → surrealql-Dbk3Sp1P.js} +1 -1
  134. package/dist/diff_tool/app/dist/assets/{svelte-B0z1MgHc.js → svelte-CjPbRmkM.js} +1 -1
  135. package/dist/diff_tool/app/dist/assets/{templ-DTnPshKb.js → templ-Do_f5vc4.js} +1 -1
  136. package/dist/diff_tool/app/dist/assets/{tex-Cosab9_H.js → tex-UjLP4qUm.js} +1 -1
  137. package/dist/diff_tool/app/dist/assets/{ts-tags-DNYvLFUH.js → ts-tags-5L2FutA6.js} +1 -1
  138. package/dist/diff_tool/app/dist/assets/{tsx-Dstq6j1a.js → tsx-B1pNtpUr.js} +1 -1
  139. package/dist/diff_tool/app/dist/assets/{twig-BzqZdwaX.js → twig-O41Vg_IM.js} +1 -1
  140. package/dist/diff_tool/app/dist/assets/{typescript-YOQ_oE25.js → typescript-Bj9uwnnJ.js} +1 -1
  141. package/dist/diff_tool/app/dist/assets/{typst-DTffwfpc.js → typst-DsibO7oD.js} +1 -1
  142. package/dist/diff_tool/app/dist/assets/{vue-D4OMj_C5.js → vue-DPhaEurv.js} +1 -1
  143. package/dist/diff_tool/app/dist/assets/{vue-html-kT4WrHGK.js → vue-html-DDV9NSy1.js} +1 -1
  144. package/dist/diff_tool/app/dist/assets/{vue-vine-CxeapeMO.js → vue-vine-Dh4jOifx.js} +1 -1
  145. package/dist/diff_tool/app/dist/assets/{xml-DWVpuurg.js → xml-DtIulkQk.js} +1 -1
  146. package/dist/diff_tool/app/dist/assets/{xsl-C0ciup5a.js → xsl-DoWtb58Z.js} +1 -1
  147. package/dist/diff_tool/app/dist/assets/{yaml-98Fvyfpc.js → yaml-CZC-l1Dg.js} +1 -1
  148. package/dist/diff_tool/app/dist/index.html +1 -1
  149. package/dist/history/worker/index.js +87 -83
  150. package/dist/history/worker/index.js.map +1 -1
  151. package/dist/host/local_session_host.js +24 -318
  152. package/dist/host/local_session_host.js.map +1 -1
  153. package/dist/host/session_host.js.map +1 -1
  154. package/dist/host/session_protocol_handler.js +0 -98
  155. package/dist/host/session_protocol_handler.js.map +1 -1
  156. package/dist/main.js +6 -7
  157. package/dist/main.js.map +1 -1
  158. package/dist/protocol/index.d.ts +1 -1
  159. package/dist/protocol/index.js.map +1 -1
  160. package/dist/protocol/session_protocol.d.ts +3 -28
  161. package/dist/protocol/session_protocol.js +1 -56
  162. package/dist/protocol/session_protocol.js.map +1 -1
  163. package/dist/sdk/index.d.ts +1 -1
  164. package/dist/sdk/index.js.map +1 -1
  165. package/dist/sdk/session.js +0 -20
  166. package/dist/sdk/session.js.map +1 -1
  167. package/dist/sdk/types.d.ts +1 -7
  168. package/dist/store/session_snapshot_migrations.js +72 -1
  169. package/dist/store/session_snapshot_migrations.js.map +1 -1
  170. package/dist/tui/session_chat_controller.js +14 -30
  171. package/dist/tui/session_chat_controller.js.map +1 -1
  172. package/dist/tui/ui/footer.js +4 -9
  173. package/dist/tui/ui/footer.js.map +1 -1
  174. package/package.json +9 -9
  175. package/dist/core/session/goal.js +0 -54
  176. package/dist/core/session/goal.js.map +0 -1
  177. package/dist/core/tools/goal.js +0 -167
  178. package/dist/core/tools/goal.js.map +0 -1
  179. package/dist/diff_tool/app/dist/assets/index-CBT_sNIz.js +0 -340
  180. package/dist/nook/README.md +0 -123
@@ -1,73 +1,75 @@
1
1
  # Terminal interface
2
2
 
3
- Tau’s terminal interface is both a local chat client and a remote session client. The same editor, commands, and review workflow are available in either mode, but their ownership matters: the session host owns conversation state and model work, while the TUI owns terminal presentation and client-local features such as themes, clipboard access, speech, and the diff-tool process.
3
+ Tau's terminal interface works both for local sessions and for sessions on a remote host. The editor, commands, and review workflow are the same in both. The session host holds the conversation and runs the model, while the TUI handles the terminal and local features such as themes, the clipboard, speech, and the diff tool.
4
4
 
5
5
  ## Start the TUI
6
6
 
7
- Run `tau` in the project directory for a new local session:
7
+ Run `tau` in the project directory to start a new local session:
8
8
 
9
9
  ```sh
10
10
  cd ~/Code/tau
11
11
  tau
12
12
  ```
13
13
 
14
- Tau creates a local execution environment rooted at that directory. A startup persona and reasoning level can be selected together:
14
+ The agent works in that directory. You can choose a persona and reasoning level at startup:
15
15
 
16
16
  ```sh
17
17
  tau --persona gpt-6.1-sol-coder:high
18
18
  ```
19
19
 
20
- `-p` is the short form. `--no-agent-context-files` omits `AGENTS.md` injection and the descendant context-file scan, and `--no-client-tools` prevents the TUI from advertising its built-in and configured [client tools](client-tools.md).
20
+ `-p` is the short form. `--no-agent-context-files` turns off `AGENTS.md` loading and the scan for nested `AGENTS.md` files. `--no-client-tools` stops the TUI from offering its built-in and configured [client tools](client-tools.md).
21
21
 
22
- Piped stdin becomes the first message in a local TUI session:
22
+ Piped stdin becomes the first message of a local session:
23
23
 
24
24
  ```sh
25
25
  printf 'summarize the current changes' | tau
26
26
  ```
27
27
 
28
- Use `tau attach` for a session hosted elsewhere. The terminal, themes, clipboard, speech commands, built-in diff review tool, and command-backed client tools still belong to the attaching machine. Bash tools, file access, project configuration, and model work use the session’s execution environment. See [remote sessions](remote-sessions.md) for transport and creation examples.
28
+ Use `tau attach` for a session hosted elsewhere. The terminal, themes, clipboard, speech commands, built-in diff review tool, and command client tools stay on the attaching machine. Bash tools, file access, project configuration, and model calls use the session's execution environment. See [remote sessions](remote-sessions.md) for connecting and creating sessions.
29
29
 
30
- The startup summary lists discovered skills, project context files, configured client tools, and enabled MCP server names. MCP servers are labeled configured, not connected: connections open lazily on first use. In attached sessions, the MCP list comes from the session host. Empty sections are omitted.
30
+ The startup summary lists discovered skills, project context files, configured client tools, and enabled MCP servers. MCP servers are shown as configured, not connected, because connections open on first use. In attached sessions, the MCP list comes from the host. Empty sections are left out.
31
31
 
32
32
  ## Work in the editor
33
33
 
34
- Enter submits the editor. Shift+Enter or Ctrl+J inserts a newline. Up and Down move through the editor and recall prior submissions when the editor is empty.
34
+ Enter submits. Shift+Enter or Ctrl+J inserts a newline. Up and Down move within the editor, and recall earlier submissions when the editor is empty.
35
35
 
36
- Tau recognizes these mention forms and offers Tab completion:
36
+ Tau recognizes these mentions and completes them with Tab:
37
37
 
38
38
  - `@src/main.ts` mentions a file in the execution environment.
39
39
  - `@@skill:code-review` explicitly activates an available skill.
40
40
 
41
- The older `@file:`, `@skill:`, and `@agent:` forms are not mention syntax. Paths and available skill names come from the hosted session, not from the attaching TUI’s filesystem.
41
+ Other forms, such as `@file:`, `@skill:`, or `@agent:`, are not mentions. File paths and skill names come from the session, not from the attaching machine's filesystem.
42
42
 
43
- Typing `/` at the start of a line opens command completion. Slash commands are recognized only for single-line submissions. A multiline input beginning with `/`, or an unknown slash-prefixed input, is sent to the agent as an ordinary message.
43
+ Typing `/` at the start of a line opens command completion. Slash commands work only in single-line submissions. Multiline input that starts with `/`, and unknown slash commands, are sent to the agent as ordinary messages.
44
44
 
45
45
  ## Submit, queue, and steer
46
46
 
47
- When Tau is idle, Enter and Ctrl+Enter both start a normal turn. While a turn is active:
47
+ When Tau is idle, Enter and Ctrl+Enter both start a normal turn. While a turn is running:
48
48
 
49
- - Ctrl+Enter queues the text as a new turn to run when the session becomes idle.
50
- - Enter steers the active turn. Tau applies steering at a safe continuation boundary rather than injecting it into a model response or tool execution in progress.
51
- - Alt+Up cancels all pending queued messages and steering that has not yet been applied, then restores their text to the editor. Multiple messages are separated with `---`. Hidden guidance, such as transcription warnings, stays hidden in the pending list and editor. Restoring messages preserves their guidance in order after any guidance already attached to the draft. Submission places all guidance at the beginning of the combined message. Editing a non-empty draft preserves it; clearing the draft clears it.
49
+ - Ctrl+Enter queues the text as a new turn that runs when the session becomes idle.
50
+ - Enter steers the running turn. Tau applies steering at the next safe point, never in the middle of a model response or tool call.
51
+ - Alt+Up cancels all queued messages and steering not yet applied, and puts their text back in the editor, separated by `---`.
52
52
 
53
- Pending input is session state shared by attached clients while the host remains alive. It is not durable across host restart or session recovery. A queued turn captures the persona, reasoning, tools, and model settings when that turn actually starts. Steering remains part of the active logical turn and keeps the settings captured when that turn began.
53
+ Some messages carry hidden guidance, such as a note that text was transcribed from speech. Hidden guidance stays hidden in the pending list and the editor. When messages are restored, their guidance is kept, in order, after any guidance the draft already has. On submission, all guidance goes at the start of the combined message. Editing a non-empty draft keeps its guidance, and clearing the draft removes it.
54
54
 
55
- Escape interrupts foreground client work or the main session’s active work. If a local diff review, voice input, or speech playback task owns the foreground, Escape stops that task first; otherwise it requests main-session interruption from the host, including cancellation of a running manual compaction. Once compaction has replaced model context, a late interruption does not undo it or turn successful persistence into a failure. It does not stop independently running supervised subagents; select one with Alt+Down and use Ctrl+G. Press Escape twice to clear the current editor text.
55
+ Pending input is shared by all clients attached to the session while the host keeps running. It is not saved and is lost when the host restarts. A queued turn uses the persona, reasoning, tools, and model settings current when it actually starts. Steering belongs to the running turn and uses the settings that turn started with.
56
56
 
57
- Press Enter twice on an empty editor to retry from the current session history. Retry does not rewind or duplicate the last user message. Goal-controlled turns cannot be retried; resume a blocked goal instead.
57
+ Escape interrupts work. If local work is in the foreground, such as diff review, voice input, or speech playback, Escape stops that first. Otherwise it asks the host to interrupt the session, which also cancels a running manual compaction. Once compaction has replaced the context, a late interruption does not undo it or turn the saved result into a failure. Escape does not stop subagents; select one with Alt+Down and press Ctrl+G. Press Escape twice to clear the editor.
58
+
59
+ Press Enter twice on an empty editor to retry from the current history. Retry does not rewind or repeat the last user message.
58
60
 
59
61
  ## Choose persona, reasoning, and thought visibility
60
62
 
61
- The current persona and reasoning level appear in the editor header.
63
+ The editor header shows the current persona and reasoning level.
62
64
 
63
- - `/persona:<id>` selects a persona by id.
65
+ - `/persona:<id>` selects a persona by ID.
64
66
  - Ctrl+P cycles through available personas.
65
- - Shift+Tab cycles through the current persona’s allowed reasoning levels.
66
- - Ctrl+T shows or hides stored and streamed assistant thinking in this TUI.
67
+ - Shift+Tab cycles through the persona's allowed reasoning levels.
68
+ - Ctrl+T shows or hides the assistant's thinking in this TUI.
67
69
 
68
- Persona changes require the session to be idle because they can change the model, instructions, skills, and tools. Reasoning can be changed while a turn is running, but the active turn and its steering continuations keep their captured settings. The new reasoning level applies to the next independently started or queued turn.
70
+ Persona changes require an idle session, because they can change the model, instructions, skills, and tools. Reasoning can change while a turn is running, but that turn and its steering keep their settings. The new level applies from the next turn.
69
71
 
70
- Thought visibility is client-local presentation. Ctrl+T does not enable model reasoning, change its effort, or alter the session history.
72
+ Ctrl+T affects only what this TUI displays. It does not turn on reasoning, change its effort, or change the session history.
71
73
 
72
74
  For example:
73
75
 
@@ -75,35 +77,34 @@ For example:
75
77
  /persona:opus-5.5-coder
76
78
  ```
77
79
 
78
- Then use Shift+Tab to select an allowed reasoning level. Newly added personas do not appear until session content has been reloaded.
80
+ Then use Shift+Tab to choose a reasoning level. A newly added persona appears only after `/reload`.
79
81
 
80
82
  ## Slash commands
81
83
 
82
- `/help` prints the commands, keybindings, loaded skills, and context-file paths visible to the current session.
84
+ `/help` prints the commands, keybindings, loaded skills, and context file paths for the current session.
83
85
 
84
86
  | Command | Behavior |
85
87
  | --- | --- |
86
88
  | `/help` | Show commands, keys, skills, and context paths. |
87
- | `/new` | Create a fresh session in the same execution environment, carrying over the current persona, reasoning, and conventional repository attribute. |
88
- | `/exit` | Close this TUI. It detaches from a long-running remote host rather than deleting the session. |
89
- | `/rewind` | Pick an earlier user message, remove it and everything after it, and return its text to the editor. |
90
- | `/diff [git diff args...]` | Open the client-local diff review tool for a snapshot captured from the execution environment. |
91
- | `/goal [objective\|resume\|clear]` | Show, start, resume, or clear the persistent session goal. |
92
- | `/compact-all [guidance]` | Replace model context with a generated summary. |
93
- | `/compact-keep-last [guidance]` | Generate a summary that also includes the previous last assistant response when available. |
94
- | `/reload` | Reload session-owned configuration and content from the execution environment. |
95
- | `/listen [retry/discard]` | Record speech, retry a retained failed recording, or discard it on macOS. |
96
- | `/speak` | Read the last assistant response aloud on macOS. |
97
- | `/auto-speak [on | off]` | Toggle automatic reading of final responses, or explicitly enable or disable it. |
89
+ | `/new` | Create a new session in the same execution environment, keeping the current persona, reasoning, and `repository` attribute. |
90
+ | `/exit` | Close this TUI. On a long-running remote host, this detaches; the session is not deleted. |
91
+ | `/rewind` | Pick an earlier user message, remove it and everything after it, and put its text back in the editor. |
92
+ | `/diff [git diff args...]` | Open the local diff review tool on a snapshot taken from the execution environment. |
93
+ | `/compact-all [guidance]` | Replace the model's context with a generated summary. |
94
+ | `/compact-keep-last [guidance]` | Same, and include the last assistant response in the summary when there is one. |
95
+ | `/reload` | Reload session configuration and content from the execution environment. |
96
+ | `/listen [retry/discard]` | Record speech, or retry or discard a failed recording. macOS only. |
97
+ | `/speak` | Read the last assistant response aloud. macOS only. |
98
+ | `/auto-speak [on | off]` | Toggle automatic reading of final responses, or turn it on or off. |
98
99
  | `/copy-text` | Copy the last assistant response as plain text. |
99
- | `/copy-code` | Copy code blocks from the last assistant response. |
100
+ | `/copy-code` | Copy the code blocks from the last assistant response. |
100
101
  | `/persona:<id>` | Switch persona while idle. |
101
- | `/prompt:<id>` | Resolve a prompt from the execution environment and place it in the editor without submitting it. |
102
- | `/theme:<id>` | Switch this TUI’s theme for the current run. |
102
+ | `/prompt:<id>` | Load a prompt from the execution environment into the editor without sending it. |
103
+ | `/theme:<id>` | Switch this TUI's theme until it exits. |
103
104
 
104
- Commands that mutate context, such as persona changes, compaction, rewind, and reload, should be run while idle. `/goal` display and clear, `/auto-speak`, `/listen`, `/prompt:<id>`, and `/exit` have limited useful behavior during a running turn. Ordinary command submissions are otherwise held back until Tau is idle.
105
+ Run commands that change the context, such as persona changes, compaction, rewind, and reload, while idle. `/auto-speak`, `/listen`, `/prompt:<id>`, and `/exit` do little during a running turn. Other commands wait until Tau is idle.
105
106
 
106
- Compaction, rewind, goals, recovery, and retry are described in [sessions](sessions.md). Prompt discovery and insertion are covered in [prompts and project context](prompts-and-project-context.md).
107
+ [Sessions](sessions.md) describes compaction, rewind, recovery, and retry. [Prompts and project context](prompts-and-project-context.md) covers prompt files.
107
108
 
108
109
  ## Keyboard shortcuts
109
110
 
@@ -111,80 +112,103 @@ Compaction, rewind, goals, recovery, and retry are described in [sessions](sessi
111
112
  | --- | --- |
112
113
  | Shift+Tab | Cycle reasoning effort. |
113
114
  | Ctrl+P | Cycle persona while idle. |
114
- | Ctrl+T | Toggle thought visibility in this TUI. |
115
- | Ctrl+S | Copy the expanded editor contents to the local clipboard, then clear the editor. |
115
+ | Ctrl+T | Show or hide thinking in this TUI. |
116
+ | Ctrl+S | Copy the expanded editor contents to the clipboard, then clear the editor. |
116
117
  | Ctrl+Y | Start or stop voice recording without submitting. |
117
- | Enter | Steer an active turn, or submit normally while idle. |
118
- | Ctrl+Enter | Queue another turn, or submit normally while idle. |
119
- | Alt+Up | Cancel pending input and restore it to the editor. |
120
- | Alt+Down | Cycle the selected active subagent. |
121
- | Ctrl+G | Interrupt the selected active subagent. |
122
- | Enter twice | Retry when the editor is empty and the session is idle. |
123
- | Escape | Interrupt foreground client or main-session work. |
124
- | Escape twice | Clear the current editor text. |
118
+ | Enter | Steer a running turn, or submit while idle. |
119
+ | Ctrl+Enter | Queue another turn, or submit while idle. |
120
+ | Alt+Up | Cancel pending input and put it back in the editor. |
121
+ | Alt+Down | Select the next running subagent. |
122
+ | Ctrl+G | Interrupt the selected subagent. |
123
+ | Enter twice | Retry, when the editor is empty and the session is idle. |
124
+ | Escape | Interrupt local work or the session. |
125
+ | Escape twice | Clear the editor. |
125
126
  | Ctrl+C twice | Exit the TUI. |
126
127
 
127
- Ctrl+C once asks for confirmation rather than interrupting the assistant. Use Escape for interruption.
128
+ A single Ctrl+C asks for confirmation; it does not interrupt the assistant. Use Escape to interrupt.
128
129
 
129
- ## Run direct Bash commands
130
+ ## Run Bash commands directly
130
131
 
131
- A leading `!` runs a fresh non-interactive login Bash in the session execution environment without asking the model to create a tool call:
132
+ A leading `!` runs a command in a fresh non-interactive login Bash in the execution environment, without going through the model:
132
133
 
133
134
  ```text
134
135
  !git status --short
135
136
  ```
136
137
 
137
- The command and result are added to session context, so the agent can use them later. A double prefix runs the command without adding it to model context:
138
+ The command and its output are added to the session, so the agent can use them later. A double `!!` runs the command without adding it to the model's context:
138
139
 
139
140
  ```text
140
141
  !!git diff --stat
141
142
  ```
142
143
 
143
- `!!` is useful for checks that should not consume context. Its transient card is still visible in the current TUI, but the command and output are not recorded as session conversation state.
144
+ Use `!!` for checks that should not use up context. Its card still appears in the current TUI, but the command and output are not saved in the conversation.
144
145
 
145
- Direct commands require the session to be idle. In an attached TUI, `!pwd` reports the execution environment’s directory, not the attaching machine’s directory. Command-backed [client tools](client-tools.md) are different: their processes run on the client machine and can explicitly request execution-environment commands through the session.
146
+ Direct commands require an idle session. In an attached TUI, `!pwd` shows the execution environment's directory, not the attaching machine's. Command [client tools](client-tools.md) are different: they run on the client machine and can ask the session to run commands in the execution environment.
146
147
 
147
148
  ## Use themes
148
149
 
149
- Themes belong to the TUI process and never become session state. Tau’s built-in themes adapt to detected terminal appearance.
150
+ Themes belong to the TUI and are never saved in the session. Tau's built-in themes adapt to the terminal's light or dark appearance.
150
151
 
151
- Set the startup theme with `defaultTheme` in the attaching client’s [configuration](configuration.md), or switch for the current run:
152
+ Set the startup theme with `defaultTheme` in the client's [configuration](configuration.md), or switch for the current run:
152
153
 
153
154
  ```text
154
155
  /theme:gold
155
156
  ```
156
157
 
157
- Theme ids are exact and case-sensitive. `/theme` does not persist the selection. Restart the TUI to apply a new `defaultTheme`. A remote host’s theme selection does not affect an attached client.
158
+ Theme IDs are exact and case-sensitive. `/theme` does not save the choice. Restart the TUI to apply a new `defaultTheme`. A remote host's theme setting does not affect attached clients.
158
159
 
159
160
  ## Review a diff
160
161
 
161
- `/diff` captures a Git snapshot through the session execution environment, then launches a diff-tool process on the TUI machine. The built-in browser tool is the review interface. `tau diff-tool` is its process entry point. `tau diff-tool --help` shows its help, while `/diff` supplies the environment required for normal reviews. Arguments are passed as Git diff arguments, for example:
162
+ `/diff` takes a Git snapshot in the execution environment, then opens the built-in browser review tool on the TUI machine. Arguments are passed to `git diff`, for example:
162
163
 
163
164
  ```text
164
165
  /diff --staged
165
166
  ```
166
167
 
167
- Captured snapshot patches are limited to 16 MiB. Narrow the Git arguments when a larger scope is rejected. A plain working-tree snapshot includes non-binary untracked files up to 4 MiB each within that aggregate limit.
168
+ `tau diff-tool` is the tool's own command, and `tau diff-tool --help` shows its help, but normal reviews start from `/diff`, which sets up its environment.
169
+
170
+ A snapshot's patch can be at most 16 MiB. Narrow the Git arguments if a larger diff is rejected. A plain working-tree snapshot includes non-binary untracked files of up to 4 MiB each, within that total.
168
171
 
169
- The built-in tool opens in Guide mode and starts preparing reviewer orientation, focused topics, and likely questions as soon as its shared review context is ready. Reviewers can comment on that guide, ask for another topic or question, or switch to Diff mode for file and line-level review threads. Guide comments and unresolved diff threads are included in self-contained returned Markdown that identifies the reviewed scope, gives change-level comments their relevant context, and explains the participants and roles in review discussions. Submit first opens the exact return-text preview, where included feedback can be excluded and the full review can be copied before submission. Approve returns immediately when no feedback remains; if feedback appears while approval is being checked, the preview opens instead.
172
+ The tool opens in **Guide** mode and starts preparing an orientation, focused topics, and likely reviewer questions as soon as the review context is ready. You can comment on the guide, ask for another topic or question, or switch to **Diff** mode for review threads on files and lines.
170
173
 
171
- The session host supplies ephemeral review agents, while the local tool owns its browser or interface process. Returned review feedback is recorded as a user entry in the session so it remains available, but Tau does not automatically start an assistant turn after the tool closes. Submit a follow-up message when the review should drive more work.
174
+ Guide comments and unresolved diff threads go into the returned Markdown, which stands on its own: it names the reviewed scope, gives change-level comments their context, and explains who took part in each discussion and in what role. **Submit** first opens a preview of the exact text to be returned, where you can exclude feedback and copy the full review before submitting. **Approve** returns right away when no feedback remains. If feedback appears while approval is being checked, the preview opens instead.
172
175
 
173
- The TUI also advertises diff review as a client tool unless `--no-client-tools` is set. Manual `/diff` remains a TUI command even when model-facing client tools are disabled. See [client tools](client-tools.md) for attachment and multiple-client implications.
176
+ The session host provides temporary review agents, and the local tool runs the browser interface. The returned review is added to the session as a user message, but Tau does not start an assistant turn when the tool closes. Send a follow-up message when the review should lead to more work.
177
+
178
+ The TUI also offers diff review to the agent as a client tool, unless `--no-client-tools` is set. `/diff` works either way. See [client tools](client-tools.md) for what this means with several clients.
174
179
 
175
180
  ## Use speech
176
181
 
177
- `/listen` and Ctrl+Y are currently macOS-only. Recording uses local `ffmpeg` with the AVFoundation audio input and stops when Ctrl+Y is pressed again or at the 9-minute recording limit. The Gemini limit leaves time for setup and finalization within its 10-minute live session. Startup fails if the microphone produces no audio within 15 seconds. Pressing Enter or Ctrl+Enter while recording stops capture, finishes transcription, and submits the finalized editor text. While a turn is active, Enter steers it and Ctrl+Enter queues another turn, just like normal editor submission. Pressing Ctrl+Y again or reaching the recording limit finishes transcription and inserts the transcript at the cursor for review without submitting it.
182
+ ### Dictation
183
+
184
+ `/listen` and Ctrl+Y work only on macOS. Recording uses the local `ffmpeg` with AVFoundation audio input. It stops when you press Ctrl+Y again or after 9 minutes, which leaves time to finish within Gemini's 10-minute live session. Startup fails if the microphone gives no audio within 15 seconds.
185
+
186
+ - Enter or Ctrl+Enter while recording stops capture, finishes transcription, and submits the editor text. While a turn is running, Enter steers and Ctrl+Enter queues, as usual.
187
+ - Ctrl+Y, or reaching the time limit, finishes transcription and inserts the transcript at the cursor without submitting it.
188
+
189
+ The shortcut can be changed with [`speech.recordingShortcut`](config-reference.md#speech), including single-press or double-tap printable keys such as `§`. The editor hint shows the configured gesture. Starting a recording stops speech playback.
190
+
191
+ While you speak, Gemini shows a live preview in muted italics at the cursor. During pauses, Gemini finalizes segments of speech while recording continues. Tau keeps finalized segments and replaces only the current preview. After recording stops:
192
+
193
+ - Tau tells Gemini the audio has ended. It finishes right away if a finalized segment ends exactly at the end of the audio and generation is complete.
194
+ - Otherwise it keeps receiving results until two seconds pass with no updates. If new speech is detected after stopping, Tau signals the end of audio again to flush it.
195
+ - The final transcript comes from the live stream. Normal recordings are not uploaded again for a second transcription.
196
+ - Unfinished speech must be finalized before Tau accepts the result. Finalization has a 30-second deadline, and Escape cancels the wait.
178
197
 
179
- The recording shortcut is configurable with [`speech.recordingShortcut`](config-reference.md#speech), including single-press and double-tap printable keys such as `§`. The editor hint shows the configured gesture. Starting a recording stops speech playback.
198
+ The final transcript replaces the preview in normal text, without duplication. An empty transcript inserts nothing. Tau does not detect silence locally, and the end of one speech segment does not count as the end of the recording.
180
199
 
181
- `/auto-speak` toggles automatic reading of successful final answers. `/auto-speak on` and `/auto-speak off` explicitly select the mode; turning it off also stops current playback. It starts off and applies only to the current session in this TUI, including when attached remotely. `/new` resets it. It does not change other clients or replay historical answers. Commentary, tool activity, and failed or interrupted answers are not automatically spoken. Responses arriving while recording or playing speech are not queued for later playback. Escape stops playback without disabling the mode. Automatic playback uses the same voice, credentials, and rewriting as `/speak`; it does not open the microphone or automatically submit dictation.
200
+ A submitted draft that contains dictation carries hidden guidance saying that some or all of the message may have been transcribed from speech and may contain errors. The guidance survives edits and is removed when the draft is emptied.
182
201
 
183
- Gemini displays a replaceable live preview in muted italic text at the original cursor position. Finalized dictation uses normal text once transcription settles. Its final transcript replaces the preview without duplication. Submitting a draft containing finalized dictation includes hidden guidance that some or all of the message may have been transcribed from speech and may contain transcription errors. The guidance remains after edits and clears when the draft is emptied. Editing stays disabled from recording startup through finalization. Escape cancels voice input during startup, recording, microphone shutdown, transcription, or retry. Cancellation immediately removes the preview, restores the original draft, and re-enables editing without inserting or submitting speech. The cancelled recording is deleted after pending capture or file work settles. Failure also restores the original draft. Recording and retries cannot start while another editor update is pending.
202
+ The editor is locked from the start of recording until finalization. Escape cancels voice input at any stage: startup, recording, microphone shutdown, transcription, or retry. Cancelling removes the preview at once, restores the original draft, and unlocks the editor without inserting or submitting anything. The cancelled recording is deleted once pending file work finishes. A failure also restores the original draft. A recording or retry cannot start while another editor update is pending.
184
203
 
185
- A completed empty transcription inserts nothing. Tau does not detect silence locally or infer completion from Gemini’s activity-end notification. If Gemini does not complete transcription, Tau waits up to 30 seconds after the live session is ready before reporting failure; Escape cancels this wait.
204
+ For live transcription, GPT-6 Luna, with reasoning disabled, extracts spelling hints from the recent conversation while recording starts. Tau buffers audio until the transcription session is ready, then streams it. Gemini uses `gemini-3.5-transcribe-live` in verbatim mode with English (`en-US`) and Finnish (`fi-FI`) language hints. Missing OpenAI credentials or a failed hint extraction do not stop transcription.
186
205
 
187
- If transcription fails, Tau retains the local WAV and reports its path. Run `/listen retry` to transcribe the same audio again with Gemini and the current conversation context, or `/listen discard` to delete it. Retained recordings longer than 20 minutes are rejected rather than sent to the provider. A replacement recording deletes the retained file only after the new capture starts producing audio. Tau keeps at most one failed recording, and exiting leaves that file at the reported path for manual recovery. For live transcription, GPT-6 Luna extracts spelling hints from recent conversation while recording begins, with reasoning disabled. Tau buffers audio until the transcription session is ready and then streams subsequent audio. Gemini uses `gemini-3.5-transcribe-live` in verbatim mode with English (`en-US`) and Finnish (`fi-FI`) language hints. Missing OpenAI credentials or hint extraction failure does not fail transcription. On retry, Gemini uploads the retained recording for `gemini-3.5-transcribe` verbatim transcription with the same language hints and attempts to delete the remote file afterward.
206
+ If transcription fails, Tau keeps the local WAV file and reports its path:
207
+
208
+ - `/listen retry` transcribes the same audio again with Gemini and the current conversation context. Gemini uploads the file for `gemini-3.5-transcribe` verbatim transcription with the same language hints, and Tau tries to delete the uploaded file afterward. Recordings longer than 20 minutes are rejected instead of being sent.
209
+ - `/listen discard` deletes the file.
210
+
211
+ Tau keeps at most one failed recording. A new recording deletes it only once the new capture is producing audio. Exiting leaves the file at the reported path so you can recover it.
188
212
 
189
213
  Install `ffmpeg`:
190
214
 
@@ -192,22 +216,41 @@ Install `ffmpeg`:
192
216
  brew install ffmpeg
193
217
  ```
194
218
 
195
- Speech transcription uses Gemini and requires `GEMINI_API_KEY` or `apiKeys.google`. Credentials are read by the TUI process, including during remote attachment.
219
+ Transcription uses Gemini and needs `GEMINI_API_KEY` or `apiKeys.google`. The TUI process reads these credentials, also when attached to a remote host.
220
+
221
+ ### Reading responses aloud
222
+
223
+ `/speak` also works only on macOS. It rewrites the last assistant response with GPT-6 Luna (reasoning disabled), streams Eleven v4 Turbo audio, and plays it at 1.15× speed through `ffplay`, which comes with `ffmpeg`.
224
+
225
+ - It needs `OPENAI_API_KEY` or `apiKeys.openai` for rewriting, and `ELEVENLABS_API_KEY` or `apiKeys.elevenlabs` for synthesis.
226
+ - It runs only while the session is idle. Escape stops it.
227
+ - Longer responses are split into balanced parts, each aiming for at most two minutes of speech.
228
+ - The source and rewritten text are limited to 10,000 Unicode characters, and generation stops after 32 MiB of raw audio.
229
+ - Voice lookups and synthesis requests have a two-minute deadline.
230
+
231
+ See [`speech` configuration](config-reference.md#speech) for the default Maisie and Caleb voices and for choosing your own.
232
+
233
+ `/auto-speak` toggles automatic reading of successful final answers, and briefly confirms the new mode. `/auto-speak on` and `/auto-speak off` set it explicitly, and turning it off also stops current playback.
196
234
 
197
- `/speak` is also macOS-only. It rewrites the last assistant response with GPT-6 Luna (reasoning disabled), streams Eleven v4 Turbo audio, and plays it at 1.15× speed through the local `ffplay` command included with `ffmpeg`. It requires both `OPENAI_API_KEY` or `apiKeys.openai` for rewriting and `ELEVENLABS_API_KEY` or `apiKeys.elevenlabs` for synthesis, runs only while the session is idle, and can be stopped with Escape. Longer responses are divided into balanced segments targeting at most two minutes of generated speech each. Speech source and rewritten text are limited to 10,000 Unicode characters, and generation stops after 32 MiB of raw audio. Voice lookups and synthesis requests have a two-minute deadline. See [`speech` configuration](config-reference.md#speech) for the default Maisie/Caleb lookup and custom voice selection.
235
+ - It starts off and applies only to the current session in this TUI, also when attached remotely. `/new` turns it off.
236
+ - It does not affect other clients or read earlier answers.
237
+ - Commentary, tool activity, and failed or interrupted answers are not read.
238
+ - Answers that arrive while recording or playing speech are not saved for later playback.
239
+ - Escape stops playback without turning the mode off.
240
+ - It uses the same voice, credentials, and rewriting as `/speak`. It never opens the microphone or submits dictation.
198
241
 
199
242
  ## Reload the right component
200
243
 
201
- Run `/reload` while idle after changing session-owned configuration, personas, prompts, skills, or AGENTS.md content in the execution environment. The host resolves them again from the session cwd, keeps the current persona when it still exists, and otherwise selects the first available persona. Warnings are shown in the transcript.
244
+ Run `/reload` while idle after changing configuration, personas, prompts, skills, or `AGENTS.md` content in the execution environment. The host reads them again from the session's working directory, keeps the current persona if it still exists, and otherwise selects the first available persona. Warnings appear in the transcript.
202
245
 
203
- Restart the TUI instead after changing client-owned themes, the diff launcher, speech settings, or configured client tools. Effective model `apiKeys` in session configuration can update through `/reload`, and managed Codex auth storage is read again on later credential resolutions. Restart the host after changing its binary, process environment variables, WebSocket listener, or hosted execution-environment resolver configuration. [Credentials](credentials.md) has the canonical apply boundaries, and [remote sessions](remote-sessions.md) explains the component split.
246
+ Restart the TUI instead after changing themes, speech settings, or configured client tools. Codex auth storage is read again on every new request. Restart the host after changing its Tau version, environment variables, `apiKeys`, WebSocket listener, or hosted execution environment settings. [Credentials](credentials.md) and [remote sessions](remote-sessions.md) explain which process owns what.
204
247
 
205
248
  ## Common mistakes
206
249
 
207
- - `!` and `!!` run in the execution environment, not on the attaching client.
250
+ - `!` and `!!` run in the execution environment, not on the attaching machine.
208
251
  - Enter during a turn steers it. Use Ctrl+Enter to queue another turn.
209
- - Ctrl+T changes visibility only. Use Shift+Tab to change reasoning effort.
210
- - `/prompt:<id>` fills the editor but does not submit it.
211
- - `/diff` records returned feedback but does not automatically ask the assistant to act on it.
252
+ - Ctrl+T changes only what is displayed. Use Shift+Tab to change reasoning effort.
253
+ - `/prompt:<id>` fills the editor but does not send it.
254
+ - `/diff` adds the returned review to the session but does not ask the assistant to act on it.
212
255
  - `/reload` does not reload client themes or client tools.
213
- - Exiting a WebSocket attachment does not delete or necessarily stop the hosted session. Exiting a local TUI shuts down its owned host, so active work is interrupted and persisted before recovery where possible.
256
+ - Exiting a WebSocket attachment does not delete the session and does not necessarily stop it. Exiting a local TUI shuts down its host, so running work is interrupted and saved where possible.
@@ -328,16 +328,11 @@ function formatSessionStatus(session, project, snapshot, preferredProjectId) {
328
328
  if (!snapshot) {
329
329
  return `${status}${preferenceStatus}`;
330
330
  }
331
- const goalStatus = snapshot.goal
332
- ? snapshot.goal.status === "active"
333
- ? " it is pursuing a goal."
334
- : " its goal is blocked."
335
- : "";
336
331
  const model = snapshot.bootstrap.model.name || snapshot.bootstrap.model.id;
337
332
  const reasoning = snapshot.settings.reasoning ?? "none";
338
333
  const context = formatTelegramContextUsage(snapshot);
339
334
  const cost = formatTelegramSessionCost(getTelegramSessionCostTotal(snapshot));
340
- return `${status}${goalStatus} it is using ${model} with ${reasoning} reasoning. context usage is ${context}. cumulative cost is ${cost}.${preferenceStatus}`;
335
+ return `${status} it is using ${model} with ${reasoning} reasoning. context usage is ${context}. cumulative cost is ${cost}.${preferenceStatus}`;
341
336
  }
342
337
  function ensureTerminalPunctuation(text) {
343
338
  const trimmed = text.trim();