@markusylisiurunen/tau 0.3.80 → 0.3.82

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 (225) hide show
  1. package/dist/code_mode/command.js +4 -16
  2. package/dist/code_mode/command.js.map +1 -1
  3. package/dist/code_mode/images.js +5 -6
  4. package/dist/code_mode/images.js.map +1 -1
  5. package/dist/code_mode/index.d.ts +1 -3
  6. package/dist/code_mode/index.js +1 -2
  7. package/dist/code_mode/index.js.map +1 -1
  8. package/dist/code_mode/runtime.d.ts +8 -4
  9. package/dist/code_mode/runtime.js +52 -63
  10. package/dist/code_mode/runtime.js.map +1 -1
  11. package/dist/core/code_mode/bash.js +269 -0
  12. package/dist/core/code_mode/bash.js.map +1 -0
  13. package/dist/core/code_mode/capability.js +2 -0
  14. package/dist/core/code_mode/capability.js.map +1 -0
  15. package/dist/core/code_mode/history.js +62 -0
  16. package/dist/core/code_mode/history.js.map +1 -0
  17. package/dist/core/code_mode/mcp.js +121 -0
  18. package/dist/core/code_mode/mcp.js.map +1 -0
  19. package/dist/core/code_mode/models.js +256 -0
  20. package/dist/core/code_mode/models.js.map +1 -0
  21. package/dist/core/{tools → code_mode}/nook.js +13 -77
  22. package/dist/core/code_mode/nook.js.map +1 -0
  23. package/dist/core/code_mode/sdk.js +97 -0
  24. package/dist/core/code_mode/sdk.js.map +1 -0
  25. package/dist/core/{tools → code_mode}/web.js +31 -90
  26. package/dist/core/code_mode/web.js.map +1 -0
  27. package/dist/core/commands/registry.js +0 -22
  28. package/dist/core/commands/registry.js.map +1 -1
  29. package/dist/core/config/content_loader.js +3 -1
  30. package/dist/core/config/content_loader.js.map +1 -1
  31. package/dist/core/debug.js +1 -1
  32. package/dist/core/debug.js.map +1 -1
  33. package/dist/core/index.js +1 -1
  34. package/dist/core/index.js.map +1 -1
  35. package/dist/core/models/openrouter.js +171 -0
  36. package/dist/core/models/openrouter.js.map +1 -0
  37. package/dist/core/{tool → models}/openrouter_decisions.js +6 -7
  38. package/dist/core/models/openrouter_decisions.js.map +1 -0
  39. package/dist/core/models/openrouter_media.js +128 -0
  40. package/dist/core/models/openrouter_media.js.map +1 -0
  41. package/dist/core/personas.js +2 -1
  42. package/dist/core/personas.js.map +1 -1
  43. package/dist/core/runtime/chat_runtime.js +2 -13
  44. package/dist/core/runtime/chat_runtime.js.map +1 -1
  45. package/dist/core/session/compaction.js +5 -3
  46. package/dist/core/session/compaction.js.map +1 -1
  47. package/dist/core/static/code_mode/history/documentation.md +95 -167
  48. package/dist/core/static/code_mode/mcp/documentation.md +144 -67
  49. package/dist/core/static/code_mode/nook/documentation.md +108 -169
  50. package/dist/core/static/code_mode/sandbox_runner.mjs +37 -20
  51. package/dist/core/static/code_mode/web/documentation.md +115 -213
  52. package/dist/core/static/tau_docs/client-tools.md +4 -4
  53. package/dist/core/static/tau_docs/history.md +2 -2
  54. package/dist/core/static/tau_docs/index.md +1 -1
  55. package/dist/core/static/tau_docs/node-sdk.md +6 -7
  56. package/dist/core/static/tau_docs/nook.md +2 -2
  57. package/dist/core/static/tau_docs/personas.md +2 -2
  58. package/dist/core/static/tau_docs/remote-sessions.md +2 -2
  59. package/dist/core/static/tau_docs/security.md +4 -4
  60. package/dist/core/static/tau_docs/session-protocol-methods.md +1 -46
  61. package/dist/core/static/tau_docs/session-protocol.md +11 -11
  62. package/dist/core/static/tau_docs/sessions.md +6 -25
  63. package/dist/core/static/tau_docs/subagents.md +3 -2
  64. package/dist/core/static/tau_docs/telegram.md +1 -1
  65. package/dist/core/static/tau_docs/tools.md +40 -48
  66. package/dist/core/static/tau_docs/troubleshooting.md +2 -2
  67. package/dist/core/static/tau_docs/tui.md +8 -7
  68. package/dist/core/subagents/registry.js +2 -1
  69. package/dist/core/subagents/registry.js.map +1 -1
  70. package/dist/core/subagents/types.js +2 -1
  71. package/dist/core/subagents/types.js.map +1 -1
  72. package/dist/core/telegram/adapter.js +1 -6
  73. package/dist/core/telegram/adapter.js.map +1 -1
  74. package/dist/core/tool/image_generate.js +2 -1
  75. package/dist/core/tool/image_generate.js.map +1 -1
  76. package/dist/core/tool/media.js +1 -49
  77. package/dist/core/tool/media.js.map +1 -1
  78. package/dist/core/tool/openrouter.js +24 -156
  79. package/dist/core/tool/openrouter.js.map +1 -1
  80. package/dist/core/tool/openrouter_input.js +77 -0
  81. package/dist/core/tool/openrouter_input.js.map +1 -0
  82. package/dist/core/tool/speech_generate.js +2 -1
  83. package/dist/core/tool/speech_generate.js.map +1 -1
  84. package/dist/core/tools/bash.js +2 -1
  85. package/dist/core/tools/bash.js.map +1 -1
  86. package/dist/core/tools/bash_jobs.js +34 -5
  87. package/dist/core/tools/bash_jobs.js.map +1 -1
  88. package/dist/core/tools/catalog.js +18 -44
  89. package/dist/core/tools/catalog.js.map +1 -1
  90. package/dist/core/tools/code.js +100 -0
  91. package/dist/core/tools/code.js.map +1 -0
  92. package/dist/core/tools/code_mode.js +9 -30
  93. package/dist/core/tools/code_mode.js.map +1 -1
  94. package/dist/core/tools/code_mode_worker.js +2 -2
  95. package/dist/core/tools/presentation.js +2 -1
  96. package/dist/core/tools/presentation.js.map +1 -1
  97. package/dist/core/tools/tool_names.js +5 -7
  98. package/dist/core/tools/tool_names.js.map +1 -1
  99. package/dist/core/utils/gemini_transcription.js +81 -37
  100. package/dist/core/utils/gemini_transcription.js.map +1 -1
  101. package/dist/core/utils/media_validation.js +50 -0
  102. package/dist/core/utils/media_validation.js.map +1 -0
  103. package/dist/core/utils/user_metadata.js +0 -14
  104. package/dist/core/utils/user_metadata.js.map +1 -1
  105. package/dist/core/version.js +2 -2
  106. package/dist/diff_tool/app/dist/assets/{angular-html-BbLgbIhq.js → angular-html-D20byCHL.js} +1 -1
  107. package/dist/diff_tool/app/dist/assets/{angular-ts-DXk17TRM.js → angular-ts-CvVQslm2.js} +1 -1
  108. package/dist/diff_tool/app/dist/assets/{apl-BsvksCXR.js → apl-DNIxlYWe.js} +1 -1
  109. package/dist/diff_tool/app/dist/assets/{astro-DH775E4V.js → astro-DDOw4EUG.js} +1 -1
  110. package/dist/diff_tool/app/dist/assets/{blade-Ck99Rm59.js → blade-DlhB-SLW.js} +1 -1
  111. package/dist/diff_tool/app/dist/assets/{c-DJpHqu5J.js → c-C1f4vhDm.js} +1 -1
  112. package/dist/diff_tool/app/dist/assets/{chapel-Owff0Csy.js → chapel-Ctt8xOX1.js} +1 -1
  113. package/dist/diff_tool/app/dist/assets/{cobol-Cv2gZuhO.js → cobol-BXw71PAA.js} +1 -1
  114. package/dist/diff_tool/app/dist/assets/{coffee-Bji0YCf_.js → coffee-CRh_5Nmr.js} +1 -1
  115. package/dist/diff_tool/app/dist/assets/{cpp-DTjA_yFF.js → cpp-IlI-zWOZ.js} +1 -1
  116. package/dist/diff_tool/app/dist/assets/{crystal-Dd00NOeb.js → crystal-CXeL28i7.js} +1 -1
  117. package/dist/diff_tool/app/dist/assets/{css-D44TN1V6.js → css-BfST9hFI.js} +1 -1
  118. package/dist/diff_tool/app/dist/assets/{edge-CVmGSi2m.js → edge--Q22k_ty.js} +1 -1
  119. package/dist/diff_tool/app/dist/assets/{elixir-B8Mq7no2.js → elixir-CIfC_rQx.js} +1 -1
  120. package/dist/diff_tool/app/dist/assets/{elm-CXS0I3Z2.js → elm-OkZ29XRO.js} +1 -1
  121. package/dist/diff_tool/app/dist/assets/{erb-B9oDKaUo.js → erb-B8ZXgEqv.js} +1 -1
  122. package/dist/diff_tool/app/dist/assets/{git-rebase-DT-YFebH.js → git-rebase-CxkO_WGd.js} +1 -1
  123. package/dist/diff_tool/app/dist/assets/{glimmer-js-s0DXlNjq.js → glimmer-js-BVadyIrr.js} +1 -1
  124. package/dist/diff_tool/app/dist/assets/{glimmer-ts-QgEB5S2z.js → glimmer-ts-D5J3Qb7n.js} +1 -1
  125. package/dist/diff_tool/app/dist/assets/{glsl-NA0icwbY.js → glsl-B6iy73-Y.js} +1 -1
  126. package/dist/diff_tool/app/dist/assets/{graphql-0_dOlfV0.js → graphql-Dc3rUXf5.js} +1 -1
  127. package/dist/diff_tool/app/dist/assets/{hack-D-mr7l1l.js → hack-q8Utf8Jp.js} +1 -1
  128. package/dist/diff_tool/app/dist/assets/{haml-B0-oQmz7.js → haml-mjMIlj_2.js} +1 -1
  129. package/dist/diff_tool/app/dist/assets/{handlebars-Yq9bXpWN.js → handlebars-CA-BL8Ks.js} +1 -1
  130. package/dist/diff_tool/app/dist/assets/{html-B8bMmdRK.js → html-BmPxhYCX.js} +1 -1
  131. package/dist/diff_tool/app/dist/assets/{html-derivative-BpxSlQb_.js → html-derivative-CvknIjuB.js} +1 -1
  132. package/dist/diff_tool/app/dist/assets/{http-hS_53mxt.js → http-DNxLDRIi.js} +1 -1
  133. package/dist/diff_tool/app/dist/assets/{hurl-B2ST1kwl.js → hurl-kbd3Eq2V.js} +1 -1
  134. package/dist/diff_tool/app/dist/assets/index-D8ZI_2RC.js +340 -0
  135. package/dist/diff_tool/app/dist/assets/{java-D4mj0lZJ.js → java-BuZshgf1.js} +1 -1
  136. package/dist/diff_tool/app/dist/assets/{javascript-wC7rrKiV.js → javascript-DfL2oeFU.js} +1 -1
  137. package/dist/diff_tool/app/dist/assets/{jinja-DbQ3o87F.js → jinja-Bu0KQihU.js} +1 -1
  138. package/dist/diff_tool/app/dist/assets/{jison-CrE9FdvP.js → jison-Bqn7Mf3Q.js} +1 -1
  139. package/dist/diff_tool/app/dist/assets/{json-xjicDyWN.js → json-BuX5LKaB.js} +1 -1
  140. package/dist/diff_tool/app/dist/assets/{jsx-m28lXojQ.js → jsx-DdVJ-ZBp.js} +1 -1
  141. package/dist/diff_tool/app/dist/assets/{julia-19xkOmop.js → julia-CQeijOoQ.js} +1 -1
  142. package/dist/diff_tool/app/dist/assets/{just-Cf7OorTr.js → just-vzAktFGR.js} +1 -1
  143. package/dist/diff_tool/app/dist/assets/{latex-DDb7GQOy.js → latex-Dm60cg0k.js} +1 -1
  144. package/dist/diff_tool/app/dist/assets/{liquid-DHOuQ0rf.js → liquid-vxKzm2P8.js} +1 -1
  145. package/dist/diff_tool/app/dist/assets/{lua-BGyIvonw.js → lua-DIoqi4dd.js} +1 -1
  146. package/dist/diff_tool/app/dist/assets/{marko-DB5OqI1C.js → marko-BTHgFKby.js} +1 -1
  147. package/dist/diff_tool/app/dist/assets/{mdc-DTyNMupO.js → mdc-CEfz8gZ9.js} +1 -1
  148. package/dist/diff_tool/app/dist/assets/{nginx-DfF0fMYD.js → nginx-DNlFDEfJ.js} +1 -1
  149. package/dist/diff_tool/app/dist/assets/{nim-BbwsXuZD.js → nim-DnvT_0lZ.js} +1 -1
  150. package/dist/diff_tool/app/dist/assets/{org-BkOBBl1f.js → org-BbD-ElVf.js} +1 -1
  151. package/dist/diff_tool/app/dist/assets/{perl-BTXTOl4K.js → perl-DTsbnAmK.js} +1 -1
  152. package/dist/diff_tool/app/dist/assets/{php-DIMVQWiA.js → php-CwEsJe-W.js} +1 -1
  153. package/dist/diff_tool/app/dist/assets/{pug-B_nrb4dJ.js → pug-BOttMVH-.js} +1 -1
  154. package/dist/diff_tool/app/dist/assets/{qml-1PXi8G8Z.js → qml-C8KkSItN.js} +1 -1
  155. package/dist/diff_tool/app/dist/assets/{r-CJrAkc2Z.js → r-K4ksJj_R.js} +1 -1
  156. package/dist/diff_tool/app/dist/assets/{razor-DgPUftNd.js → razor-yuWRrrG6.js} +1 -1
  157. package/dist/diff_tool/app/dist/assets/{regexp-C2hS8XvL.js → regexp-CV-jhnUz.js} +1 -1
  158. package/dist/diff_tool/app/dist/assets/{rst-CDouhKnc.js → rst-CLA3Attc.js} +1 -1
  159. package/dist/diff_tool/app/dist/assets/{ruby-CAjKW1uO.js → ruby-DiHR2-DX.js} +1 -1
  160. package/dist/diff_tool/app/dist/assets/{sas-qAHkHLc1.js → sas-DxIjbYJ5.js} +1 -1
  161. package/dist/diff_tool/app/dist/assets/{scss-Bfx2Ydid.js → scss-CShwEaV4.js} +1 -1
  162. package/dist/diff_tool/app/dist/assets/{shellscript-Bu76R8y2.js → shellscript-CeezOnrF.js} +1 -1
  163. package/dist/diff_tool/app/dist/assets/{shellsession-BU8BL0oL.js → shellsession-CjSS2r7j.js} +1 -1
  164. package/dist/diff_tool/app/dist/assets/{soy-FRl8ozP-.js → soy-CI_v23nJ.js} +1 -1
  165. package/dist/diff_tool/app/dist/assets/{sql-BacQgsEs.js → sql-D9GaB00A.js} +1 -1
  166. package/dist/diff_tool/app/dist/assets/{stata-B9kkG-ET.js → stata-hK92TPE_.js} +1 -1
  167. package/dist/diff_tool/app/dist/assets/{surrealql-qvETr7iY.js → surrealql-UO8LtPJG.js} +1 -1
  168. package/dist/diff_tool/app/dist/assets/{svelte-B0z1MgHc.js → svelte-kIlaw_oh.js} +1 -1
  169. package/dist/diff_tool/app/dist/assets/{templ-DTnPshKb.js → templ-DFRz1JP6.js} +1 -1
  170. package/dist/diff_tool/app/dist/assets/{tex-Cosab9_H.js → tex-CfxIXk_z.js} +1 -1
  171. package/dist/diff_tool/app/dist/assets/{ts-tags-DNYvLFUH.js → ts-tags-BtUHl0ff.js} +1 -1
  172. package/dist/diff_tool/app/dist/assets/{tsx-Dstq6j1a.js → tsx-Cd4SAe2C.js} +1 -1
  173. package/dist/diff_tool/app/dist/assets/{twig-BzqZdwaX.js → twig-CWk4q5Y3.js} +1 -1
  174. package/dist/diff_tool/app/dist/assets/{typescript-YOQ_oE25.js → typescript-BqxGJiP0.js} +1 -1
  175. package/dist/diff_tool/app/dist/assets/{typst-DTffwfpc.js → typst-D9nAun2p.js} +1 -1
  176. package/dist/diff_tool/app/dist/assets/{vue-D4OMj_C5.js → vue-D6HYhg6_.js} +1 -1
  177. package/dist/diff_tool/app/dist/assets/{vue-html-kT4WrHGK.js → vue-html-1VRlaENS.js} +1 -1
  178. package/dist/diff_tool/app/dist/assets/{vue-vine-CxeapeMO.js → vue-vine-BaH0We9y.js} +1 -1
  179. package/dist/diff_tool/app/dist/assets/{xml-DWVpuurg.js → xml-C4RWnUuj.js} +1 -1
  180. package/dist/diff_tool/app/dist/assets/{xsl-C0ciup5a.js → xsl-D1iD38ga.js} +1 -1
  181. package/dist/diff_tool/app/dist/assets/{yaml-98Fvyfpc.js → yaml-yAb4W0G-.js} +1 -1
  182. package/dist/diff_tool/app/dist/index.html +1 -1
  183. package/dist/host/local_session_host.js +24 -318
  184. package/dist/host/local_session_host.js.map +1 -1
  185. package/dist/host/session_host.js.map +1 -1
  186. package/dist/host/session_protocol_handler.js +0 -98
  187. package/dist/host/session_protocol_handler.js.map +1 -1
  188. package/dist/nook/README.md +1 -1
  189. package/dist/protocol/index.d.ts +1 -1
  190. package/dist/protocol/index.js.map +1 -1
  191. package/dist/protocol/session_protocol.d.ts +3 -28
  192. package/dist/protocol/session_protocol.js +1 -56
  193. package/dist/protocol/session_protocol.js.map +1 -1
  194. package/dist/sdk/code_mode.js +11 -17
  195. package/dist/sdk/code_mode.js.map +1 -1
  196. package/dist/sdk/index.d.ts +2 -2
  197. package/dist/sdk/index.js +1 -1
  198. package/dist/sdk/index.js.map +1 -1
  199. package/dist/sdk/session.js +0 -20
  200. package/dist/sdk/session.js.map +1 -1
  201. package/dist/sdk/types.d.ts +1 -7
  202. package/dist/store/session_snapshot_migrations.js +72 -1
  203. package/dist/store/session_snapshot_migrations.js.map +1 -1
  204. package/dist/tui/session_chat_controller.js +95 -82
  205. package/dist/tui/session_chat_controller.js.map +1 -1
  206. package/dist/tui/ui/footer.js +2 -5
  207. package/dist/tui/ui/footer.js.map +1 -1
  208. package/package.json +7 -7
  209. package/dist/code_mode/files.d.ts +0 -47
  210. package/dist/code_mode/files.js +0 -296
  211. package/dist/code_mode/files.js.map +0 -1
  212. package/dist/core/session/goal.js +0 -54
  213. package/dist/core/session/goal.js.map +0 -1
  214. package/dist/core/tool/openrouter_decisions.js.map +0 -1
  215. package/dist/core/tool/openrouter_media.js +0 -180
  216. package/dist/core/tool/openrouter_media.js.map +0 -1
  217. package/dist/core/tools/goal.js +0 -167
  218. package/dist/core/tools/goal.js.map +0 -1
  219. package/dist/core/tools/history.js +0 -118
  220. package/dist/core/tools/history.js.map +0 -1
  221. package/dist/core/tools/mcp.js +0 -167
  222. package/dist/core/tools/mcp.js.map +0 -1
  223. package/dist/core/tools/nook.js.map +0 -1
  224. package/dist/core/tools/web.js.map +0 -1
  225. package/dist/diff_tool/app/dist/assets/index-CBT_sNIz.js +0 -340
@@ -18,7 +18,7 @@ The server sends `ready` as its first message:
18
18
 
19
19
  ```json
20
20
  {
21
- "version": 16,
21
+ "version": 17,
22
22
  "type": "ready",
23
23
  "methods": ["initialize", "session.create", "session.list"]
24
24
  }
@@ -30,7 +30,7 @@ After `ready`, send `initialize` with non-empty client metadata:
30
30
 
31
31
  ```json
32
32
  {
33
- "version": 16,
33
+ "version": 17,
34
34
  "type": "request",
35
35
  "id": "init-1",
36
36
  "method": "initialize",
@@ -50,7 +50,7 @@ Every request has the same envelope:
50
50
 
51
51
  ```json
52
52
  {
53
- "version": 16,
53
+ "version": 17,
54
54
  "type": "request",
55
55
  "id": "req-42",
56
56
  "method": "session.snapshot",
@@ -64,7 +64,7 @@ Successful responses echo the request id:
64
64
 
65
65
  ```json
66
66
  {
67
- "version": 16,
67
+ "version": 17,
68
68
  "type": "response",
69
69
  "id": "req-42",
70
70
  "ok": true,
@@ -100,7 +100,7 @@ Observation controls delivery, not session ownership. `session.unobserve` stops
100
100
  | `revision` | Monotonic protocol snapshot revision. |
101
101
  | `lifecycle` | `idle` or `running`. |
102
102
  | `agentState` | Independent agent revision, model context key, and optional usage checkpoint. |
103
- | `goal`, `settings`, `costTotal` | Current goal, persona and reasoning settings, and accumulated session cost. |
103
+ | `settings`, `costTotal` | Persona and reasoning settings, and accumulated session cost. |
104
104
  | `bootstrap`, `catalog` | Selected model and prompt metadata plus available personas, prompt metadata, skills, and enabled host-configured MCP server names. |
105
105
  | `executionEnvironment` | The environment kind, identity, `cwd`, and home used for agent-visible work. |
106
106
  | `messages`, `turns` | Synchronized model-facing records and durable logical-turn receipts. |
@@ -124,7 +124,7 @@ Intermediate instructions are committed without a user turn receipt. Their durab
124
124
 
125
125
  Turn requests return a terminal outcome, and accepted user turns are also keyed by `userHistoryEntryId` in `snapshot.turns`. Use that ledger to distinguish an unknown request from accepted running work and settled work. Do not infer request outcomes from notice titles, message counts, or timing.
126
126
 
127
- User-facing behavior such as goals, retry, compaction, rewind, and recovery is described in [sessions](sessions.md).
127
+ User-facing behavior such as retry, compaction, rewind, and recovery is described in [sessions](sessions.md).
128
128
 
129
129
  ## Apply snapshot deltas in order
130
130
 
@@ -132,7 +132,7 @@ Observed snapshot changes arrive as `session.delta`:
132
132
 
133
133
  ```json
134
134
  {
135
- "version": 16,
135
+ "version": 17,
136
136
  "type": "session.delta",
137
137
  "sessionId": "0195d6e4-4cf9-7f44-a2d8-f8f7f49ee9d3",
138
138
  "fromRevision": 8,
@@ -170,7 +170,7 @@ Not all observed state belongs in the recoverable snapshot. Each live channel ha
170
170
 
171
171
  ```json
172
172
  {
173
- "version": 16,
173
+ "version": 17,
174
174
  "type": "session.pendingUserMessages",
175
175
  "sessionId": "...",
176
176
  "state": {
@@ -207,7 +207,7 @@ An initialized client that advertised a tool can receive:
207
207
 
208
208
  ```json
209
209
  {
210
- "version": 16,
210
+ "version": 17,
211
211
  "type": "session.clientTool.call",
212
212
  "sessionId": "...",
213
213
  "agentId": "main",
@@ -231,7 +231,7 @@ Error responses use `ok: false`:
231
231
 
232
232
  ```json
233
233
  {
234
- "version": 16,
234
+ "version": 17,
235
235
  "type": "response",
236
236
  "id": "req-42",
237
237
  "ok": false,
@@ -263,7 +263,7 @@ A WebSocket close, malformed server payload, unsupported version, or other termi
263
263
 
264
264
  The server can accept several requests before earlier requests settle, so responses and streamed messages may interleave.
265
265
 
266
- - Only one ordinary main-session turn or goal turn runs at a time. `session.submit`, `session.retry`, `session.startGoal`, and `session.resumeGoal` return `busy` on conflict.
266
+ - Only one main-session turn runs at a time. `session.submit` and `session.retry` return `busy` on conflict.
267
267
  - `session.queue` waits for idle work. `session.steer` requests the next safe turn boundary. Each request receives its own eventual response.
268
268
  - Session mutations are serialized in arrival order across clients. Mutations that replace context can interrupt active work and reject pending input. `session.rewind` instead requires the session to be idle with no pending input.
269
269
  - `session.setReasoning` is serialized but does not interrupt the active turn. The new setting applies to the next independently started turn.
@@ -29,7 +29,7 @@ Session-owned [background Bash jobs](tools.md#bash) survive turns, interruption,
29
29
 
30
30
  ## Submit, queue, and steer
31
31
 
32
- A normal submission is accepted and persisted before model work begins. Tau then runs model and tool subturns until the turn completes, fails, is blocked, or is interrupted.
32
+ A normal submission is accepted and persisted before model work begins. Tau then runs model and tool subturns until the turn completes, fails, is blocked, or is interrupted. The model decides when its response is complete; Tau does not automatically start another turn after a final response. Automatic compaction can continue an unfinished turn within a new context window.
33
33
 
34
34
  Only one logical turn runs at a time. Input sent during active work has two useful delivery modes:
35
35
 
@@ -48,7 +48,7 @@ Ordinary session interruption is cooperative. It requests cancellation of the ma
48
48
 
49
49
  Retry runs another assistant turn from the current session history. It does not remove the interrupted or failed result, rewind context, or submit the previous user text again. This lets Tau continue from completed tool results without automatically rerunning them. In the TUI, press Enter twice on an empty editor while idle.
50
50
 
51
- Retry is unavailable when there is no prior user turn. It is also unavailable for goal-controlled turns because a blocked goal has an explicit resume operation.
51
+ Retry is unavailable when there is no prior user turn.
52
52
 
53
53
  Detaching is not the same as interrupting. Closing one observer of a long-running host leaves the hosted turn running. By contrast, a local TUI owns its in-process host, so closing it causes that host to shut down and interrupt active work. See [remote sessions](remote-sessions.md).
54
54
 
@@ -71,42 +71,23 @@ Recovery preserves user-visible durable state including:
71
71
  - committed conversation messages and terminal tool results
72
72
  - current persona and reasoning settings
73
73
  - cumulative usage cost and context accounting needed for continuation
74
- - persistent goal state
75
74
  - execution-environment identity, cwd, and creation attributes
76
75
  - compaction and rewind results
77
76
 
78
- Recovery intentionally does not recreate every live process. It returns the session idle, settles any accepted but unfinished turn as aborted, cancels running maintenance operations, and normalizes tools whose completion cannot be proven. Supervised subagents and their live activity do not survive restart. An active persistent goal becomes blocked rather than continuing autonomously without an explicit resume.
77
+ Recovery intentionally does not recreate every live process. It returns the session idle, settles any accepted but unfinished turn as aborted, cancels running maintenance operations, and normalizes tools whose completion cannot be proven. Supervised subagents and their live activity do not survive restart.
79
78
 
80
79
  A stored session is listed or recovered only when the current host has a resolver capable of restoring its execution-environment kind and named target. Recovery can therefore fail even when the session document is valid, for example when a Cloudflare bridge was removed, a Fly API target is no longer configured, or the underlying sandbox, Sprite, directory, or credentials are unavailable.
81
80
 
82
81
  Newer Tau versions preserve the openability of supported stored sessions through storage migrations and recovery normalization. This promises access to recoverable semantic data, not byte-for-byte files or identical historical presentation. A genuinely newer unsupported storage version or corrupted document can still be rejected.
83
82
 
84
- ## Use persistent goals
85
-
86
- A persistent goal lets Tau continue across repeated model turns until the agent marks the objective complete or blocked. Start one from the TUI:
87
-
88
- ```text
89
- /goal prepare the release and verify the package
90
- ```
91
-
92
- Tau stores the objective before running it. While the goal remains active, the host creates continuation turns automatically. The agent’s goal tools can refine the objective, block it when human input is needed, or complete and clear it.
93
-
94
- Use the controls deliberately:
95
-
96
- - `/goal` shows the current objective and status.
97
- - `/goal resume` resumes a blocked goal.
98
- - `/goal clear` clears the goal. If work is active, clearing interrupts it and cancels pending input associated with the old flow.
99
-
100
- Only one goal can exist at a time. Clear it before starting another. Interruption, provider failure, blocked execution, or host recovery changes an active goal to `blocked`. Tau never silently resumes autonomous goal work after recovery. Goal-controlled turns cannot use ordinary retry; use `/goal resume` after resolving the blocker.
101
-
102
- A goal survives client detach and host restart because its objective and status are session state. The process doing the work does not survive restart.
103
-
104
83
  ## Compact model context
105
84
 
106
85
  Compaction replaces model-visible conversation context with a checkpoint so the same session can continue within the model’s context window. It changes active model context, not the independent searchable transcript.
107
86
 
108
87
  The working model creates the checkpoint from its native conversation context, including the base instructions, previous checkpoint, and reasoning state supported by its provider. The checkpoint covers the whole active context and does not depend on knowing which recent messages will remain. It is an isolated maintenance request with no tool execution, not a submitted user turn. Reasoning continuity depends on the provider; the checkpoint records useful conclusions and rationale rather than reproducing internal thinking.
109
88
 
89
+ The summary is intended to support both immediate continuation and recognition of earlier work. Recent and unfinished work receives the most detail; older work is compressed into its purpose, outcomes, and significant decisions. Across repeated compactions, the agent integrates the previous summary with newer conversation rather than discarding topics solely because they are old or completed. Important ongoing constraints retain precision regardless of age. Compaction is lossy: this cumulative overview does not preserve every topic or detail indefinitely.
90
+
110
91
  ### Automatic compaction
111
92
 
112
93
  Automatic compaction runs before a model subturn when fresh provider usage plus newly added estimated context exceeds the threshold. The threshold is the model context window minus a fixed reserve of 16,384 tokens. Checkpoint generation inherits the normal model stream settings without a compaction-specific output limit. Requests whose input cannot fit fail rather than falling back to a flattened transcript. Compaction can run more than once during a long logical turn.
@@ -214,7 +195,7 @@ Use normal Tau operations rather than opening or editing session files.
214
195
  1. Wait for active work to finish or interrupt it intentionally.
215
196
  2. Note the session id shown in the TUI startup block.
216
197
  3. Exit cleanly and reattach through the same host.
217
- 4. Confirm the expected messages, persona, reasoning level, and `/goal` status.
198
+ 4. Confirm the expected messages, persona, and reasoning level.
218
199
  5. Run non-contextual environment checks with `!!`, for example `!!pwd` and `!!git status --short`.
219
200
  6. Submit a small read-only request before resuming destructive work.
220
201
 
@@ -28,10 +28,11 @@ The eligible inherited tools are:
28
28
  - `history`
29
29
  - `nook`, when Nook is configured
30
30
  - `mcp`, when the host has enabled MCP servers
31
+ - `models`
31
32
 
32
- Tau then adds intrinsic `tau_docs` to every subagent registry, independently of this subset. A persona’s `tools` list cannot disable it. Apart from `tau_docs`, subagents do not receive goal controls, subagent supervision tools, client tools, or TUI-local tools.
33
+ Tau then adds intrinsic `tau_docs` to every subagent registry, independently of this subset. A persona’s `tools` list cannot disable it. Apart from `tau_docs`, subagents do not receive subagent supervision tools, client tools, or TUI-local tools.
33
34
 
34
- The worker inherits the intersection of the main persona's tools and those eight eligible names. MCP uses the parent's shared host connections, independent of the child's working directory. For example, a main persona with `bash`, `edit`, `history`, and `spawn_agent` gives the child `bash`, `edit`, and `history`, plus intrinsic `tau_docs`. There is no separate child tool allowlist.
35
+ The worker inherits the intersection of the main persona's tools and those nine eligible names. MCP uses the parent's shared host connections, independent of the child's working directory. For example, a main persona with `bash`, `edit`, `history`, and `spawn_agent` gives the child `bash`, `edit`, and `history`, plus intrinsic `tau_docs`. Service selectors enable namespaces in the child's `code` tool. There is no separate child tool allowlist.
35
36
 
36
37
  Subagents cannot launch other subagents: supervision tools are never included in a child's registry. See [tools](tools.md) for the broader availability contract.
37
38
 
@@ -229,7 +229,7 @@ The runner's speech credentials and `speech.voiceId` are loaded at startup from
229
229
  | --- | --- |
230
230
  | `/use_<projectId>` | Selects the project for future `/new` sessions. |
231
231
  | `/new` | Replaces the active session using the preferred project. |
232
- | `/status` | Reports session state, project, model, reasoning, context usage, cost, and goal. |
232
+ | `/status` | Reports session state, project, model, reasoning, context usage, and cost. |
233
233
  | `/persona` | Switches persona while idle without losing history or starting a turn. |
234
234
  | `/effort_low` | Selects low reasoning for future turns. |
235
235
  | `/effort_medium` | Selects medium reasoning for future turns. |
@@ -6,13 +6,12 @@ Tool availability is captured when a logical turn starts. Persona changes, confi
6
6
 
7
7
  ## Tool categories
8
8
 
9
- Tau uses four distinct categories:
9
+ Tau uses three distinct categories:
10
10
 
11
11
  | Category | Owner and availability |
12
12
  | --- | --- |
13
13
  | Persona-controlled host tools | The host binds implementations that operate against the session execution environment or host services. The active persona's `tools` list selects them. |
14
14
  | Intrinsic tools | Tau binds these outside persona allowlists. `tau_docs` is available to main agents and subagents. |
15
- | Main-session goal tools | `get_goal`, `create_goal`, and `update_goal` are always available to the main session, independently of the persona. They are not subagent tools. |
16
15
  | Client-provided tools | An attached client advertises and executes these. TUI-owned `diff_review` and `prefill_input` are examples. Configured command client tools use the same boundary. |
17
16
 
18
17
  A tool schema tells the model how to call a tool. It does not grant operating-system permissions. Host tools execute with the authority of the execution environment or the configured host service. Client tools execute with the authority of their owning client and may separately request commands in the execution environment. See [ownership and scope](ownership-and-scope.md) and [client tools](client-tools.md).
@@ -30,7 +29,7 @@ tools:
30
29
  - web
31
30
  ```
32
31
 
33
- The supported persona-controlled names are:
32
+ The supported persona-controlled tool and capability selectors are:
34
33
 
35
34
  ```text
36
35
  bash
@@ -41,6 +40,7 @@ web
41
40
  nook
42
41
  history
43
42
  mcp
43
+ models
44
44
  spawn_agent
45
45
  send_input_to_agent
46
46
  wait_for_agents
@@ -48,7 +48,9 @@ list_agents
48
48
  interrupt_agent
49
49
  ```
50
50
 
51
- A custom persona that omits `tools` enables `bash`, `write`, `edit`, `view_image`, `web`, `nook`, `history`, and `mcp`. It also enables the five subagent-management tools. Built-in personas enable the same base and subagent tool sets.
51
+ A custom persona that omits `tools` enables `bash`, `write`, `edit`, `view_image`, `web`, `nook`, `history`, `mcp`, and `models`. It also enables the five subagent-management tools. Built-in personas enable the same base and subagent tool sets.
52
+
53
+ The selectors `web`, `history`, `nook`, `mcp`, and `models` enable namespaces in the single `code` tool, not separate model-facing tools. `bash` enables both the direct Bash tools and `tau.bash` within code mode. Tau registers `code` when at least one eligible composition capability is selected; `code` is not a separate persona selector. A namespace not selected by the persona is absent from the SDK and its documentation index.
52
54
 
53
55
  An empty list disables every persona-controlled host tool:
54
56
 
@@ -56,7 +58,7 @@ An empty list disables every persona-controlled host tool:
56
58
  tools: []
57
59
  ```
58
60
 
59
- It does not remove intrinsic `tau_docs` or the main-session goal tools. It also does not select client-provided tools, which are advertised independently by an observing client.
61
+ It does not remove intrinsic `tau_docs`. It also does not select client-provided tools, which are advertised independently by an observing client.
60
62
 
61
63
  The `nook` name has an additional eligibility check: the effective host configuration must contain a Nook target. Without one, Tau does not register the tool even if the persona lists it. Other credentials and service configuration can affect what an enabled tool can do, but not whether its schema is selected. Persona configuration is covered in [personas](personas.md).
62
64
 
@@ -72,16 +74,6 @@ index.md
72
74
 
73
75
  Then follow paths linked by that page. The tool description also advertises built-in command-line tools with capability summaries and dedicated documentation paths. Agents may read those pages directly when a tool is relevant, without first loading the index. Use of these utilities is optional and depends on the execution environment's prerequisites. Unknown paths are rejected. The corpus describes supported Tau contracts, not the current effective configuration of a particular session, so use configuration inspection or debug output when the answer depends on local state.
74
76
 
75
- ## Main-session goal tools
76
-
77
- The main agent always receives:
78
-
79
- - `get_goal`, which reads the persisted session goal or returns no goal.
80
- - `create_goal`, which creates an active goal only when the user or an active instruction explicitly requests one.
81
- - `update_goal`, which changes, completes, or blocks the current goal.
82
-
83
- These tools are outside persona allowlists because goal lifecycle is a session capability. They are not included in subagent registries or advertised by clients. Goal behavior is described in [sessions](sessions.md).
84
-
85
77
  ## Execution-environment tools
86
78
 
87
79
  ### Bash
@@ -147,65 +139,65 @@ The supported formats are JPEG, PNG, and WebP. Source reads are capped at 50 MiB
147
139
 
148
140
  Each guide covers setup, input, examples, outputs, and failure behavior. Use `tau tool --help` to list commands or `tau tool <command> --help` for command-specific help. The same guides are packaged for `tau_docs` and linked from its `index.md`.
149
141
 
150
- ## Code-mode service tools
142
+ ## Code-mode composition
143
+
144
+ `code` runs a one-shot JavaScript program that composes enabled capabilities through `tau.web`, `tau.history`, `tau.nook`, `tau.mcp`, `tau.bash`, and `tau.models`. Direct Bash, write, edit, and image-viewing tools remain available independently.
151
145
 
152
- `web`, `history`, `nook`, and `mcp` each run a one-shot JavaScript program in Tau's restricted code-mode runtime. They intentionally disclose their exact API at use time rather than embedding signatures in this page.
146
+ ### Documentation and output
153
147
 
154
- Tau exposes each service tool with agent-facing guidance that requires its documentation to be visible before API use. When the documentation is absent, the first useful call is a documentation-only program:
148
+ When the runtime guide is not already visible, the agent first runs a documentation-only program:
155
149
 
156
150
  ```js
157
- console.log(docs);
151
+ printText(docs);
158
152
  ```
159
153
 
160
- The agent reuses visible documentation, without guessing or borrowing another tool's signatures. Shared examples show field selection and text-block extraction for concise plain-text output. Return values are ignored; only console text and images forwarded with `await image(block)` enter the result.
161
-
162
- Code-mode programs have no direct process, environment, credential, import, timer, network, or `fetch` access. They can call only the named API and use agent-scoped scratch files exposed by the runtime. Programs default to 60 seconds (MCP: 15 minutes), allow 128 API requests with eight unresolved at once, and limit each serialized payload to 16 MiB. Undefined object properties are omitted from API arguments; undefined arguments and array entries are invalid. Console output is middle-truncated above roughly 8,192 estimated tokens.
163
-
164
- `await image({ type: "image", data, mimeType })` forwards a base64 image without files. Calls must be awaited before the program exits. JPEG, PNG, and WebP bytes must match the declared MIME type and fit the 16 MiB JSON bridge limit. Source images are limited to 40 megapixels; each program may forward 16 images. Images are resized or re-encoded to fit within 4,096 pixels per dimension and 3.5 MiB each. Adjacent console writes form one text block; awaited images separate the text before and after them. Text truncation keeps images in place. Invalid blocks reject and can be caught. Built-in tools retain valid images if the program later fails.
154
+ The guide covers runtime rules, capabilities, and composition examples. The agent retrieves any unseen capability reference in a separate documentation-only call:
165
155
 
166
- Scratch files are real UTF-8 files in an execution-environment temporary directory shared by code-mode tools for the same agent. Writes are limited to 128 regular files and 64 MiB total. Scratch state is not stored in the session snapshot. The progressively disclosed documentation gives the exact file API.
167
-
168
- ### Web
169
-
170
- `web` is for open-web search and webpage extraction when repository data, a purpose-built CLI, a first-party API or SDK, or another structured source cannot answer the task. For GitHub issues, pull requests, releases, and repository metadata, use `gh`; for checked-out source and history, use Git.
171
-
172
- Web discovery can inspect an ordinary URL through the execution environment without an Exa credential. Search and content extraction require an effective Exa API key. The tool's documentation explains the discovery-first flow and when to retrieve advertised agent-friendly resources with Bash instead of webpage extraction. See [credentials](credentials.md) for key resolution.
173
-
174
- ### History
156
+ ```js
157
+ printText(await tau.docs("web"));
158
+ ```
175
159
 
176
- `history` searches and reads durable Tau transcripts. It is read-only and can have visibility across repositories and execution environments, so use it only when the user or another active instruction directly asks to consult prior sessions. Do not invoke it merely because old context might be useful.
160
+ The agent reuses visible documentation. MCP descriptions and Nook's authoring guide have separate discovery steps. Programs need not print intermediate results.
177
161
 
178
- The effective history query may be machine-local or backed by a configured remote collection. See [history](history.md) for storage, replication, and access scope.
162
+ Only `printText(string)` and awaited `printImage({ data, mimeType })` emit output, in emission order; return values are ignored. Text is middle-truncated to `maxOutputTokens` (default 8,192; range 1–65,536). The agent leaves it unset unless needed, requesting up to 16,384 autonomously; higher budgets require an explicit user request. Truncated built-in text is saved to a temporary execution-environment file when possible, with its path reported. Read it rather than repeat side effects. Files exclude images and text lost to capture limits.
179
163
 
180
- ### Nook
164
+ JPEG, PNG, and WebP images are validated outside the sandbox and prepared within 4,096 pixels per dimension and 3.5 MiB each. Sources are limited to 40 megapixels and 16 images per program. Valid images survive built-in program failure.
181
165
 
182
- `nook` manages the configured Nook static mini-app platform. It is available when the main persona lists `nook` and Nook is configured. Subagents inherit it under the same conditions.
166
+ The pure globals `truncate(text, { maxChars, position? })` and `truncateLines(text, { maxLines, position? })` return bounded strings with omission markers. Position defaults to `middle`; `start` and `end` retain the corresponding edge. They do not print automatically.
183
167
 
184
- The tool is intended for explicit requests to inspect or manage Nook, publish a static artifact or mini-app, or work with Nook KV. Once the built-in documentation is visible, app-authoring work requires a second separate documentation-only call that prints the Nook authoring skill. The agent reads that guide before creating or modifying app files. Nook setup and platform behavior are covered in [Nook](nook.md).
168
+ ```js
169
+ const result = await tau.bash.run({ command: "npm test" });
170
+ printText(truncate(result.stdout, { maxChars: 4000 }));
171
+ ```
185
172
 
186
- ### MCP
173
+ ### Execution and limits
187
174
 
188
- `mcp` discovers and calls tools and reads resources from host-configured Model Context Protocol servers. Personas must allow `mcp`, and the host must configure an enabled server. Subagents inherit access; ephemeral threads do not receive it.
175
+ Programs have no ambient filesystem, process, environment, credential, import, timer, network, or fetch access. Capabilities supply authority; variables hold data and Bash handles files. No scratch-file API.
189
176
 
190
- Servers use stdio or streamable HTTP. Stdio commands run on the host with its environment; HTTP uses host credentials. Server files need not share the agent's workspace. Supported protocol revisions are `2025-11-25`, `2025-06-18`, `2025-03-26`, and `2024-11-05`, not `2026-07-28`.
177
+ `code` defaults to 5 minutes; `timeout` accepts 1–900,000 ms (15 minutes). `tau.bash.run` defaults to 60 seconds, capped at 5 minutes and the enclosing deadline. Programs allow 128 API requests, eight concurrent. Serialized requests and responses are capped at 64 MiB. Undefined object properties are omitted; undefined arguments and array entries are rejected. Programs are not retried; failure or cancellation does not undo actions.
191
178
 
192
- `mcp` lists servers, tools, resources, and templates, inspects schemas, calls tools, and reads URIs. `searchTools` ranks tool metadata with BM25, returning matches and per-server errors. Resources return text or base64 data, without automatic context, file writes, or fetching. Only printed text and images enter context. Tools return `{ content, structuredContent?, isError }`; private MCP `_meta` is stripped. `isError: true` is data; protocol failures throw. Calls/reads default to five minutes, configurable to 15; startup/discovery defaults to 30 seconds. Messages are limited to 16 MiB; oversized results fail.
179
+ ### Capabilities
193
180
 
194
- Connections are lazy, shared across sessions, and closed at shutdown. Later requests reconnect. Mutations are not retried. Tool-list changes invalidate cached discovery; resource listings refresh on each call. Restart does not recover connections or calls. Resource subscriptions, prompts, elicitation, and sampling are unsupported.
181
+ - `tau.web`: metadata discovery, Exa search, and page content retrieval. The agent prefers local data, purpose-built CLIs, first-party APIs, and structured sources over web extraction. GitHub operations use gh or checked-out Git where suitable. Metadata discovery does not need an Exa key; search and content retrieval do.
182
+ - `tau.history`: read-only search and paginated transcript access. The agent uses it only when explicitly instructed to consult historical sessions. Historical content is untrusted data, not instructions. See [history](history.md).
183
+ - `tau.nook`: site deployment, templates, and site-scoped JSON KV. The agent uses it for user-requested publishing or Nook management. App authoring requires reading `tau.nook.skill()` in a separate documentation-only call first. See [Nook](nook.md).
184
+ - `tau.mcp`: discovery and invocation of connected tools and resources. The agent reads each tool's description and schema before calling it. Connections are shared and lazy; mutations are not retried. `isError` is result data; protocol failures throw. Existing MCP server configuration and trust rules apply. See [configuration reference](config-reference.md#mcpservers) and [security](security.md#trust-mcp-servers).
185
+ - `tau.bash`: `run`, `start`, `list`, `read`, `wait`, and `stop`. `run` returns stdout/stderr and exit/termination fields with a 24 MiB capture bound. Overflow keeps a tail; check `truncated` before parsing. Optional UTF-8 `stdin` is limited to 16 MiB and closed after writing (EOF); omitted input is unavailable, `""` is empty. `start` has no stdin. Background jobs share the direct tools' registry and bounded output tails. Jobs survive program exit and interruption; foreground work is cancelled. Shell rules above apply.
186
+ - `tau.models`: lists fixed OpenRouter model choices and performs standalone chat or typed decisions. No session conversation or tools are inherited. Chat media accepts either paths on the agent's machine or inline padded base64 with a matching MIME type. Credentials stay with the host. Provider usage metadata is returned, but external model charges are not included in session cumulative cost or usage logs. Requests are cancellable and not automatically retried. Input, model, media, response, and request limits match [OpenRouter](openrouter.md); inspect completion/refusal status rather than assuming every response is a complete answer.
195
187
 
196
- Servers merge by name from host launch-directory config layers. Restart the host to apply changes. See [configuration reference](config-reference.md#mcpservers) and [security](security.md#trust-mcp-servers).
188
+ SDK and command client tools use the same sandbox globals and output contract with their own explicitly declared APIs. Their default program deadline is 60 seconds unless configured otherwise.
197
189
 
198
190
  ## Subagent tool eligibility
199
191
 
200
192
  A subagent can receive only:
201
193
 
202
194
  ```text
203
- bash write edit view_image web history nook mcp
195
+ bash write edit view_image web history nook mcp models
204
196
  ```
205
197
 
206
- Tau inherits the intersection of the main persona’s tools and those eight eligible names. `tau_docs` is then added intrinsically. There is no separate child tool selection. Nook and MCP require configuration; MCP uses the parent's host connections.
198
+ Tau inherits the intersection of the main persona’s tools and those nine eligible names. `tau_docs` is then added intrinsically. There is no separate child tool selection. Nook and MCP require configuration; MCP uses the parent's host connections.
207
199
 
208
- Subagents do not receive goal tools, subagent-management tools, or client-provided tools. Their Bash and file tools are scoped to the subagent working directory, including an alternate directory selected at launch. See [subagents](subagents.md) for configuration and working-directory context rebuilding.
200
+ Subagents do not receive subagent-management tools or client-provided tools. Their Bash and file tools are scoped to the subagent working directory, including an alternate directory selected at launch. See [subagents](subagents.md) for configuration and working-directory context rebuilding.
209
201
 
210
202
  ## Client-owned tools
211
203
 
@@ -239,7 +231,7 @@ First identify which owner should provide it:
239
231
  - For a host tool, inspect the active persona's `tools`, effective host configuration, and service credentials.
240
232
  - For a subagent tool, inspect both the subagent's explicit list and the eligible inherited set.
241
233
  - For a client tool, confirm that an observing client advertises it and that client tools were not disabled.
242
- - For `tau_docs` or main-session goal tools, a missing schema indicates a runtime or version problem rather than a persona setting.
234
+ - For `tau_docs`, a missing schema indicates a runtime or version problem rather than a persona setting.
243
235
 
244
236
  Then check the execution boundary named in the error. A path that exists on the TUI client may not exist in the execution environment. A command available in the host's `PATH` may not be available in the execution environment's login shell. Client process errors belong to the client machine, while `executionEnvironment.exec` errors belong to the session machine.
245
237
 
@@ -124,7 +124,7 @@ For a subagent, check these three gates:
124
124
 
125
125
  An already spawned thread keeps its captured model, tools, and working directory after reload. Recovery does not restore subagent threads, so old agent IDs cannot receive follow-ups after a host restart. Use `list_agents` to inspect live records. See [subagents](subagents.md).
126
126
 
127
- For `tau_docs` or main-session goal tools, absence indicates a host runtime or version problem, not a persona list. Confirm the host package and restart it.
127
+ For `tau_docs`, absence indicates a host runtime or version problem, not a persona list. Confirm the host package and restart it.
128
128
 
129
129
  ## A command client tool is missing or fails
130
130
 
@@ -219,7 +219,7 @@ Without `--session` or `--new`, attach needs a TTY for its selector. In automati
219
219
 
220
220
  A selector shows only sessions this host can load and restore. Confirm its machine, OS user, home, Tau version, resolver configuration, and target still match the creator. Another user's `~/.config/tau/sessions` is a different store. Restore missing API definitions, credentials, local directory, or Sprite. Never edit session JSON to substitute a target or `cwd`.
221
221
 
222
- Recovery returns idle, aborts unfinished turns, cancels running maintenance, removes live subagents, and blocks an active goal. Review the last assistant and tools, then safely check `!!pwd` and `!!git status --short`. Resume a goal only after understanding the stop. Retry continues current history without rerunning completed tools automatically.
222
+ Recovery returns idle, aborts unfinished turns, cancels running maintenance, and removes live subagents. Review the last assistant and tools, then safely check `!!pwd` and `!!git status --short`. Retry continues current history without rerunning completed tools automatically.
223
223
 
224
224
  A WebSocket client disconnect does not interrupt the long-running host; server shutdown does. Closing a local TUI shuts down its owned host, so interrupted recovery is expected.
225
225
 
@@ -52,9 +52,9 @@ When Tau is idle, Enter and Ctrl+Enter both start a normal turn. While a turn is
52
52
 
53
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.
54
54
 
55
- Escape interrupts foreground client work or the main session’s active work. If a local diff review, recording, 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
+ 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.
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
+ Press Enter twice on an empty editor to retry from the current session history. Retry does not rewind or duplicate the last user message.
58
58
 
59
59
  ## Choose persona, reasoning, and thought visibility
60
60
 
@@ -88,7 +88,6 @@ Then use Shift+Tab to select an allowed reasoning level. Newly added personas do
88
88
  | `/exit` | Close this TUI. It detaches from a long-running remote host rather than deleting the session. |
89
89
  | `/rewind` | Pick an earlier user message, remove it and everything after it, and return its text to the editor. |
90
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
91
  | `/compact-all [guidance]` | Replace model context with a generated summary. |
93
92
  | `/compact-keep-last [guidance]` | Generate a summary that also includes the previous last assistant response when available. |
94
93
  | `/reload` | Reload session-owned configuration and content from the execution environment. |
@@ -101,9 +100,9 @@ Then use Shift+Tab to select an allowed reasoning level. Newly added personas do
101
100
  | `/prompt:<id>` | Resolve a prompt from the execution environment and place it in the editor without submitting it. |
102
101
  | `/theme:<id>` | Switch this TUI’s theme for the current run. |
103
102
 
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.
103
+ Commands that mutate context, such as persona changes, compaction, rewind, and reload, should be run while idle. `/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
104
 
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).
105
+ Compaction, rewind, 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
106
 
108
107
  ## Keyboard shortcuts
109
108
 
@@ -174,13 +173,15 @@ The TUI also advertises diff review as a client tool unless `--no-client-tools`
174
173
 
175
174
  ## Use speech
176
175
 
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, when Escape is pressed, 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.
176
+ `/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.
178
177
 
179
178
  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.
180
179
 
181
180
  `/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.
182
181
 
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, and failure restores the original draft. Recording and retries cannot start while another editor update is pending.
182
+ Gemini displays a replaceable live preview in muted italic text at the original cursor position. Automatic voice activity detection finalizes speech segments during pauses while recording continues. Tau preserves finalized segments and replaces only the current interim preview. When recording stops, Tau signals the end of audio and keeps receiving live results until three seconds pass without transcription or speech-activity updates. If a new speech activity is detected after stopping, Tau signals the end of audio again to flush it. The final transcript comes from the live stream; normal recording does not upload the saved WAV for a second transcription. 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.
183
+
184
+ A completed empty transcription inserts nothing. Tau does not detect silence locally or infer recording completion from live speech-segment notifications. Known unfinished speech must finalize before Tau accepts the result. Live finalization has a 30-second deadline; Escape cancels this wait.
184
185
 
185
186
  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.
186
187
 
@@ -1,4 +1,4 @@
1
- import { TOOL_NAME_BASH, TOOL_NAME_EDIT, TOOL_NAME_HISTORY, TOOL_NAME_MCP, TOOL_NAME_NOOK, TOOL_NAME_SPAWN_AGENT, TOOL_NAME_VIEW_IMAGE, TOOL_NAME_WEB, TOOL_NAME_WRITE, } from "../tools/tool_names.js";
1
+ import { TOOL_NAME_BASH, TOOL_NAME_EDIT, TOOL_NAME_HISTORY, TOOL_NAME_MCP, TOOL_NAME_MODELS, TOOL_NAME_NOOK, TOOL_NAME_SPAWN_AGENT, TOOL_NAME_VIEW_IMAGE, TOOL_NAME_WEB, TOOL_NAME_WRITE, } from "../tools/tool_names.js";
2
2
  const INHERITABLE_TOOL_NAMES = new Set([
3
3
  TOOL_NAME_BASH,
4
4
  TOOL_NAME_WRITE,
@@ -7,6 +7,7 @@ const INHERITABLE_TOOL_NAMES = new Set([
7
7
  TOOL_NAME_WEB,
8
8
  TOOL_NAME_HISTORY,
9
9
  TOOL_NAME_MCP,
10
+ TOOL_NAME_MODELS,
10
11
  TOOL_NAME_NOOK,
11
12
  ]);
12
13
  function normalizeTools(tools) {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/subagents/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAIhC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAmB;IACvD,cAAc;IACd,eAAe;IACf,cAAc;IACd,oBAAoB;IACpB,aAAa;IACb,iBAAiB;IACjB,aAAa;IACb,cAAc;CACf,CAAC,CAAC;AAEH,SAAS,cAAc,CAAC,KAAyB;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;IACzC,MAAM,UAAU,GAAuB,EAAE,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAgB;IACjD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;IAChC,MAAM,QAAQ,GAAuB,EAAE,CAAC;IAExC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,sBAAsB,CAAC,GAAG,CAAC,IAAwB,CAAC,EAAE,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC,IAAwB,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAID,MAAM,UAAU,gCAAgC,CAAC,IAGhD;IACC,MAAM,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC9C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;IAClD,CAAC;IACD,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK;QACpD,QAAQ;QACR,KAAK;KACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACnD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,gCAAgC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,MAAM,CAAC;IACzD,MAAM,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAClD,MAAM,gBAAgB,GACpB,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAE5F,OAAO;QACL,EAAE;QACF,EAAE;QACF,eAAe;QACf,EAAE;QACF,4NAA4N;QAC5N,EAAE;QACF,sBAAsB,SAAS,CAAC,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,SAAS,IAAI;QACrF,4BAA4B,gBAAgB,EAAE;QAC9C,EAAE;QACF,+EAA+E;KAChF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/subagents/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAIhC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAmB;IACvD,cAAc;IACd,eAAe;IACf,cAAc;IACd,oBAAoB;IACpB,aAAa;IACb,iBAAiB;IACjB,aAAa;IACb,gBAAgB;IAChB,cAAc;CACf,CAAC,CAAC;AAEH,SAAS,cAAc,CAAC,KAAyB;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;IACzC,MAAM,UAAU,GAAuB,EAAE,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAgB;IACjD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;IAChC,MAAM,QAAQ,GAAuB,EAAE,CAAC;IAExC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,sBAAsB,CAAC,GAAG,CAAC,IAAwB,CAAC,EAAE,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC,IAAwB,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAID,MAAM,UAAU,gCAAgC,CAAC,IAGhD;IACC,MAAM,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC9C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;IAClD,CAAC;IACD,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK;QACpD,QAAQ;QACR,KAAK;KACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACnD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,gCAAgC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,MAAM,CAAC;IACzD,MAAM,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAClD,MAAM,gBAAgB,GACpB,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAE5F,OAAO;QACL,EAAE;QACF,EAAE;QACF,eAAe;QACf,EAAE;QACF,4NAA4N;QAC5N,EAAE;QACF,sBAAsB,SAAS,CAAC,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,SAAS,IAAI;QACrF,4BAA4B,gBAAgB,EAAE;QAC9C,EAAE;QACF,+EAA+E;KAChF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -1,4 +1,4 @@
1
- import { TOOL_NAME_BASH, TOOL_NAME_EDIT, TOOL_NAME_HISTORY, TOOL_NAME_MCP, TOOL_NAME_NOOK, TOOL_NAME_VIEW_IMAGE, TOOL_NAME_WEB, TOOL_NAME_WRITE, } from "../tools/tool_names.js";
1
+ import { TOOL_NAME_BASH, TOOL_NAME_EDIT, TOOL_NAME_HISTORY, TOOL_NAME_MCP, TOOL_NAME_MODELS, TOOL_NAME_NOOK, TOOL_NAME_VIEW_IMAGE, TOOL_NAME_WEB, TOOL_NAME_WRITE, } from "../tools/tool_names.js";
2
2
  export const SUBAGENT_TOOL_NAMES = [
3
3
  TOOL_NAME_BASH,
4
4
  TOOL_NAME_WRITE,
@@ -7,6 +7,7 @@ export const SUBAGENT_TOOL_NAMES = [
7
7
  TOOL_NAME_WEB,
8
8
  TOOL_NAME_HISTORY,
9
9
  TOOL_NAME_MCP,
10
+ TOOL_NAME_MODELS,
10
11
  TOOL_NAME_NOOK,
11
12
  ];
12
13
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/subagents/types.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAGhC,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,cAAc;IACd,eAAe;IACf,cAAc;IACd,oBAAoB;IACpB,aAAa;IACb,iBAAiB;IACjB,aAAa;IACb,cAAc;CACN,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/subagents/types.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAGhC,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,cAAc;IACd,eAAe;IACf,cAAc;IACd,oBAAoB;IACpB,aAAa;IACb,iBAAiB;IACjB,aAAa;IACb,gBAAgB;IAChB,cAAc;CACN,CAAC"}
@@ -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();