@markusylisiurunen/tau 0.3.77 → 0.3.78

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 (209) hide show
  1. package/dist/core/agent/agent_runtime.js +6 -11
  2. package/dist/core/agent/agent_runtime.js.map +1 -1
  3. package/dist/core/cli.js +2 -2
  4. package/dist/core/cli.js.map +1 -1
  5. package/dist/core/commands/registry.js +2 -1
  6. package/dist/core/commands/registry.js.map +1 -1
  7. package/dist/core/config/content_loader.js +9 -193
  8. package/dist/core/config/content_loader.js.map +1 -1
  9. package/dist/core/config/index.js +1 -1
  10. package/dist/core/config/index.js.map +1 -1
  11. package/dist/core/config/runtime.js +1 -2
  12. package/dist/core/config/runtime.js.map +1 -1
  13. package/dist/core/config/schema.js +10 -151
  14. package/dist/core/config/schema.js.map +1 -1
  15. package/dist/core/config/virtual_bundle.js +2 -5
  16. package/dist/core/config/virtual_bundle.js.map +1 -1
  17. package/dist/core/config/virtual_defaults.js +0 -2
  18. package/dist/core/config/virtual_defaults.js.map +1 -1
  19. package/dist/core/debug.js +8 -23
  20. package/dist/core/debug.js.map +1 -1
  21. package/dist/core/diff_review/bridge.js +2 -24
  22. package/dist/core/diff_review/bridge.js.map +1 -1
  23. package/dist/core/index.js.map +1 -1
  24. package/dist/core/personas.js +4 -8
  25. package/dist/core/personas.js.map +1 -1
  26. package/dist/core/runtime/agent_model.js +0 -2
  27. package/dist/core/runtime/agent_model.js.map +1 -1
  28. package/dist/core/runtime/chat_runtime.js +4 -6
  29. package/dist/core/runtime/chat_runtime.js.map +1 -1
  30. package/dist/core/runtime/session_prompt_composer.js +12 -27
  31. package/dist/core/runtime/session_prompt_composer.js.map +1 -1
  32. package/dist/core/static/index.js +4 -4
  33. package/dist/core/static/index.js.map +1 -1
  34. package/dist/core/static/tau_docs/client-tools.md +1 -1
  35. package/dist/core/static/tau_docs/config-reference.md +13 -94
  36. package/dist/core/static/tau_docs/configuration.md +4 -11
  37. package/dist/core/static/tau_docs/ownership-and-scope.md +2 -2
  38. package/dist/core/static/tau_docs/personas.md +6 -19
  39. package/dist/core/static/tau_docs/prompts-and-project-context.md +1 -1
  40. package/dist/core/static/tau_docs/remote-sessions.md +2 -2
  41. package/dist/core/static/tau_docs/security.md +2 -2
  42. package/dist/core/static/tau_docs/session-protocol.md +2 -0
  43. package/dist/core/static/tau_docs/sessions.md +2 -14
  44. package/dist/core/static/tau_docs/skills.md +1 -1
  45. package/dist/core/static/tau_docs/subagents.md +26 -99
  46. package/dist/core/static/tau_docs/telegram.md +10 -13
  47. package/dist/core/static/tau_docs/tools.md +6 -6
  48. package/dist/core/static/tau_docs/troubleshooting.md +4 -5
  49. package/dist/core/static/tau_docs/tui.md +10 -21
  50. package/dist/core/subagents/agent_supervisor.js +5 -6
  51. package/dist/core/subagents/agent_supervisor.js.map +1 -1
  52. package/dist/core/subagents/format.js +1 -1
  53. package/dist/core/subagents/format.js.map +1 -1
  54. package/dist/core/subagents/prompt.js +7 -0
  55. package/dist/core/subagents/prompt.js.map +1 -0
  56. package/dist/core/subagents/registry.js +14 -43
  57. package/dist/core/subagents/registry.js.map +1 -1
  58. package/dist/core/subagents/types.js +2 -2
  59. package/dist/core/subagents/types.js.map +1 -1
  60. package/dist/core/telegram/adapter.js +6 -10
  61. package/dist/core/telegram/adapter.js.map +1 -1
  62. package/dist/core/telegram/config.js +32 -57
  63. package/dist/core/telegram/config.js.map +1 -1
  64. package/dist/core/telegram/local_session_client.js +0 -3
  65. package/dist/core/telegram/local_session_client.js.map +1 -1
  66. package/dist/core/telegram/runtime.js +0 -3
  67. package/dist/core/telegram/runtime.js.map +1 -1
  68. package/dist/core/telegram/session_manager.js +29 -52
  69. package/dist/core/telegram/session_manager.js.map +1 -1
  70. package/dist/core/telegram/workspace.js +13 -18
  71. package/dist/core/telegram/workspace.js.map +1 -1
  72. package/dist/core/tools/catalog.js +10 -5
  73. package/dist/core/tools/catalog.js.map +1 -1
  74. package/dist/core/tools/send_input_to_agent.js +1 -1
  75. package/dist/core/tools/send_input_to_agent.js.map +1 -1
  76. package/dist/core/tools/spawn_agent.js +13 -30
  77. package/dist/core/tools/spawn_agent.js.map +1 -1
  78. package/dist/core/tools/view_image.js +12 -17
  79. package/dist/core/tools/view_image.js.map +1 -1
  80. package/dist/core/types.js.map +1 -1
  81. package/dist/core/usage/logs.js.map +1 -1
  82. package/dist/core/version.js +1 -1
  83. package/dist/diff_tool/app/dist/assets/{angular-html-BjHlbeCk.js → angular-html-CnO8qept.js} +1 -1
  84. package/dist/diff_tool/app/dist/assets/{angular-ts-5J5hsUV-.js → angular-ts-DPXUio9Z.js} +1 -1
  85. package/dist/diff_tool/app/dist/assets/{apl-ChIs51_N.js → apl-X8YsymsQ.js} +1 -1
  86. package/dist/diff_tool/app/dist/assets/{astro-RtGdbaIT.js → astro-BQ9k8AQ0.js} +1 -1
  87. package/dist/diff_tool/app/dist/assets/{blade-Cuc0ZzS1.js → blade-DZ1LYIzB.js} +1 -1
  88. package/dist/diff_tool/app/dist/assets/{c-IpjS3QEt.js → c-VLTwNh7z.js} +1 -1
  89. package/dist/diff_tool/app/dist/assets/{chapel-BvHOmF40.js → chapel-5s-sGN8D.js} +1 -1
  90. package/dist/diff_tool/app/dist/assets/{cobol-BWLkapNx.js → cobol-C9RzwrVu.js} +1 -1
  91. package/dist/diff_tool/app/dist/assets/{coffee-lfdf_MuK.js → coffee-BHvjZ343.js} +1 -1
  92. package/dist/diff_tool/app/dist/assets/{cpp-GvMfdutG.js → cpp-CBTVXbBp.js} +1 -1
  93. package/dist/diff_tool/app/dist/assets/{crystal--kdmUeXB.js → crystal-DQJua4y4.js} +1 -1
  94. package/dist/diff_tool/app/dist/assets/{css-CnlOazId.js → css-BQflXFb6.js} +1 -1
  95. package/dist/diff_tool/app/dist/assets/{edge-CwnxQiFe.js → edge-BmdmXGH4.js} +1 -1
  96. package/dist/diff_tool/app/dist/assets/{elixir-BVO19qQd.js → elixir-oiOLs98L.js} +1 -1
  97. package/dist/diff_tool/app/dist/assets/{elm-BK3istEo.js → elm-BgYuiU4E.js} +1 -1
  98. package/dist/diff_tool/app/dist/assets/{erb-CO4uKwKD.js → erb-CvFrXpyY.js} +1 -1
  99. package/dist/diff_tool/app/dist/assets/{git-rebase-CDrrgbGV.js → git-rebase-D3Zo1BLH.js} +1 -1
  100. package/dist/diff_tool/app/dist/assets/{glimmer-js-7CFSyo6c.js → glimmer-js-B4-8E3lJ.js} +1 -1
  101. package/dist/diff_tool/app/dist/assets/{glimmer-ts-Ofllf2Yo.js → glimmer-ts-CtKkD0t_.js} +1 -1
  102. package/dist/diff_tool/app/dist/assets/{glsl-K_36bq1K.js → glsl-BAqforx_.js} +1 -1
  103. package/dist/diff_tool/app/dist/assets/{graphql-BMZnssUN.js → graphql-DuE1RMyL.js} +1 -1
  104. package/dist/diff_tool/app/dist/assets/{hack-MG_t8QNs.js → hack-CHBcXjz1.js} +1 -1
  105. package/dist/diff_tool/app/dist/assets/{haml-0hDK-uCt.js → haml-DAs2z3tD.js} +1 -1
  106. package/dist/diff_tool/app/dist/assets/{handlebars-D4_MRJPB.js → handlebars-CfAla6QK.js} +1 -1
  107. package/dist/diff_tool/app/dist/assets/{html-BCi--7qp.js → html-D5co0BLD.js} +1 -1
  108. package/dist/diff_tool/app/dist/assets/{html-derivative-DYq2AWiD.js → html-derivative-BZaWEmAT.js} +1 -1
  109. package/dist/diff_tool/app/dist/assets/{http-BmLFm2Pm.js → http-Cii5MjJE.js} +1 -1
  110. package/dist/diff_tool/app/dist/assets/{hurl-CT71cK69.js → hurl-Bur-XdJO.js} +1 -1
  111. package/dist/diff_tool/app/dist/assets/index-CZUi_I-p.js +340 -0
  112. package/dist/diff_tool/app/dist/assets/{java-Bm2FCq-d.js → java-DN39wI4w.js} +1 -1
  113. package/dist/diff_tool/app/dist/assets/{javascript-C7oEny21.js → javascript-VUReF1H4.js} +1 -1
  114. package/dist/diff_tool/app/dist/assets/{jinja-igQBS-SS.js → jinja-BcrfV1JB.js} +1 -1
  115. package/dist/diff_tool/app/dist/assets/{jison-BrOUp4rK.js → jison-Bez5Mtmy.js} +1 -1
  116. package/dist/diff_tool/app/dist/assets/{json-DsuR7Nai.js → json-ChV8m0Le.js} +1 -1
  117. package/dist/diff_tool/app/dist/assets/{jsx-BdomFXcA.js → jsx-D0SXNtM0.js} +1 -1
  118. package/dist/diff_tool/app/dist/assets/{julia-DqOG4pbM.js → julia-DvhpcBwG.js} +1 -1
  119. package/dist/diff_tool/app/dist/assets/{just-ZrSTuT0n.js → just-BGwe8S6x.js} +1 -1
  120. package/dist/diff_tool/app/dist/assets/{latex-DbmtZIwN.js → latex-pWSag83P.js} +1 -1
  121. package/dist/diff_tool/app/dist/assets/{liquid-DKnUlRIp.js → liquid-UdnqDjKz.js} +1 -1
  122. package/dist/diff_tool/app/dist/assets/{lua-Cyq3f59a.js → lua-CjDHeHEr.js} +1 -1
  123. package/dist/diff_tool/app/dist/assets/{marko-hmOsFPHQ.js → marko-yLX6iW68.js} +1 -1
  124. package/dist/diff_tool/app/dist/assets/{mdc-BnnQmDC-.js → mdc-BOLj6Oyq.js} +1 -1
  125. package/dist/diff_tool/app/dist/assets/{nginx-C0zLUSna.js → nginx-5r5xPc2T.js} +1 -1
  126. package/dist/diff_tool/app/dist/assets/{nim-Oljl3c5n.js → nim-9exKQYMz.js} +1 -1
  127. package/dist/diff_tool/app/dist/assets/{org-Cp4CA-0c.js → org-B2fpAlbt.js} +1 -1
  128. package/dist/diff_tool/app/dist/assets/{perl-DstDVYmJ.js → perl-DV2fcwyY.js} +1 -1
  129. package/dist/diff_tool/app/dist/assets/{php-Cc3bNZ7J.js → php-D-AthX_E.js} +1 -1
  130. package/dist/diff_tool/app/dist/assets/{pug-B3xDUzl0.js → pug-DuKcQxFj.js} +1 -1
  131. package/dist/diff_tool/app/dist/assets/{qml-B9iDahKk.js → qml-C16b4SYx.js} +1 -1
  132. package/dist/diff_tool/app/dist/assets/{r-B7M5ZSBC.js → r-B1ZldnJf.js} +1 -1
  133. package/dist/diff_tool/app/dist/assets/{razor-BlfV6bjQ.js → razor-TYmslaAB.js} +1 -1
  134. package/dist/diff_tool/app/dist/assets/{regexp-BVT0NBj6.js → regexp-dWCffmDD.js} +1 -1
  135. package/dist/diff_tool/app/dist/assets/{rst-Cq-Mcher.js → rst-DEkLr2YR.js} +1 -1
  136. package/dist/diff_tool/app/dist/assets/{ruby-5uCK_s01.js → ruby-BJnJzr4u.js} +1 -1
  137. package/dist/diff_tool/app/dist/assets/{sas-m4dYluKN.js → sas-DeRsDbUE.js} +1 -1
  138. package/dist/diff_tool/app/dist/assets/{scss-DFiJcBQH.js → scss-SGV_CwKm.js} +1 -1
  139. package/dist/diff_tool/app/dist/assets/{shellscript-DCtSkJJQ.js → shellscript-BI7khmmR.js} +1 -1
  140. package/dist/diff_tool/app/dist/assets/{shellsession-_DntbpLM.js → shellsession-Nupw_Vvw.js} +1 -1
  141. package/dist/diff_tool/app/dist/assets/{soy-Dd1fWsG8.js → soy-B96cBzxv.js} +1 -1
  142. package/dist/diff_tool/app/dist/assets/{sql-Bygp5F-5.js → sql-CsIdKfaO.js} +1 -1
  143. package/dist/diff_tool/app/dist/assets/{stata-CqIA1VQD.js → stata-Dnq48cE6.js} +1 -1
  144. package/dist/diff_tool/app/dist/assets/{surrealql-C2-2C-z3.js → surrealql-D6lw4TiD.js} +1 -1
  145. package/dist/diff_tool/app/dist/assets/{svelte-CrTy7VSb.js → svelte-ChVoq9tB.js} +1 -1
  146. package/dist/diff_tool/app/dist/assets/{templ-B_h9AHFJ.js → templ-Dh1EXuHD.js} +1 -1
  147. package/dist/diff_tool/app/dist/assets/{tex-AwlGuBDG.js → tex-KTYusNFe.js} +1 -1
  148. package/dist/diff_tool/app/dist/assets/{ts-tags--oqU6stH.js → ts-tags-DC2RU1_R.js} +1 -1
  149. package/dist/diff_tool/app/dist/assets/{tsx-Cx-oUPFA.js → tsx-DtIM39Jy.js} +1 -1
  150. package/dist/diff_tool/app/dist/assets/{twig-DMQw3R9O.js → twig-C6D_TA3n.js} +1 -1
  151. package/dist/diff_tool/app/dist/assets/{typescript-BCtu9W7E.js → typescript-BGAE5iuw.js} +1 -1
  152. package/dist/diff_tool/app/dist/assets/{typst-jGrqJHSo.js → typst-nWoGZ22y.js} +1 -1
  153. package/dist/diff_tool/app/dist/assets/{vue-html-DTMalvg7.js → vue-html-prNdIjLu.js} +1 -1
  154. package/dist/diff_tool/app/dist/assets/{vue-GFZcsvXd.js → vue-iyHf-l4z.js} +1 -1
  155. package/dist/diff_tool/app/dist/assets/{vue-vine-BwDeqLrM.js → vue-vine-KSSlnVeg.js} +1 -1
  156. package/dist/diff_tool/app/dist/assets/{xml-CoXyuOzf.js → xml-DdCC83Xd.js} +1 -1
  157. package/dist/diff_tool/app/dist/assets/{xsl-BQFm34CN.js → xsl-DSqZxsez.js} +1 -1
  158. package/dist/diff_tool/app/dist/assets/{yaml-CbO2A_pF.js → yaml-CZcBUWvf.js} +1 -1
  159. package/dist/diff_tool/app/dist/index.html +1 -1
  160. package/dist/diff_tool/http_server.js +2 -9
  161. package/dist/diff_tool/http_server.js.map +1 -1
  162. package/dist/diff_tool/index.js +2 -2
  163. package/dist/diff_tool/index.js.map +1 -1
  164. package/dist/diff_tool/launcher.js +14 -8
  165. package/dist/diff_tool/launcher.js.map +1 -1
  166. package/dist/diff_tool/protocol_client.js +0 -7
  167. package/dist/diff_tool/protocol_client.js.map +1 -1
  168. package/dist/diff_tool/review_state.js +4 -10
  169. package/dist/diff_tool/review_state.js.map +1 -1
  170. package/dist/diff_tool/review_state_persistence.js +12 -7
  171. package/dist/diff_tool/review_state_persistence.js.map +1 -1
  172. package/dist/diff_tool/shared_types.js +0 -48
  173. package/dist/diff_tool/shared_types.js.map +1 -1
  174. package/dist/host/execution_runtime.js +1 -1
  175. package/dist/host/execution_runtime.js.map +1 -1
  176. package/dist/host/hosted_ephemeral_agent_session.js +1 -1
  177. package/dist/host/hosted_ephemeral_agent_session.js.map +1 -1
  178. package/dist/host/local_session_host.js +8 -18
  179. package/dist/host/local_session_host.js.map +1 -1
  180. package/dist/main.js +1 -15
  181. package/dist/main.js.map +1 -1
  182. package/dist/protocol/index.d.ts +1 -1
  183. package/dist/protocol/index.js.map +1 -1
  184. package/dist/protocol/session_protocol.d.ts +2 -8
  185. package/dist/protocol/session_protocol.js +2 -10
  186. package/dist/protocol/session_protocol.js.map +1 -1
  187. package/dist/store/session_snapshot_migrations.js +32 -1
  188. package/dist/store/session_snapshot_migrations.js.map +1 -1
  189. package/dist/tui/chat_controller/diff_review_service.js +0 -15
  190. package/dist/tui/chat_controller/diff_review_service.js.map +1 -1
  191. package/dist/tui/chat_view.js +5 -1
  192. package/dist/tui/chat_view.js.map +1 -1
  193. package/dist/tui/session_chat_app.js +1 -2
  194. package/dist/tui/session_chat_app.js.map +1 -1
  195. package/dist/tui/session_chat_controller.js +30 -37
  196. package/dist/tui/session_chat_controller.js.map +1 -1
  197. package/dist/tui/ui/custom_editor.js +21 -15
  198. package/dist/tui/ui/custom_editor.js.map +1 -1
  199. package/dist/tui/ui/slash_autocomplete.js +1 -8
  200. package/dist/tui/ui/slash_autocomplete.js.map +1 -1
  201. package/dist/tui/ui/subagent_panel.js +1 -12
  202. package/dist/tui/ui/subagent_panel.js.map +1 -1
  203. package/package.json +1 -1
  204. package/dist/core/config/diff_tool.js +0 -51
  205. package/dist/core/config/diff_tool.js.map +0 -1
  206. package/dist/core/subagents/default.js +0 -8
  207. package/dist/core/subagents/default.js.map +0 -1
  208. package/dist/diff_tool/app/dist/assets/index-DyaXBald.js +0 -340
  209. /package/dist/core/static/prompts/{default-subagent-wrapper.md → subagent-wrapper.md} +0 -0
@@ -64,12 +64,10 @@ Within the project, the effective default persona is `gpt-6.1-sol-coder:high`.
64
64
  A few fields intentionally use other rules:
65
65
 
66
66
  - `apiKeys` merges by provider id. A more-specific key replaces only the same provider's value.
67
- - `autoCompact` merges by field on top of shipped defaults.
68
67
  - `modelSystemNotices` merges by normalized `<provider>/<model>` key.
69
68
  - `flySprites.apis` merges by API id. A more-specific API replaces the complete API entry with that id.
70
69
  - `agentContextFiles` is additive across levels, resolves each entry at its owning level, and removes duplicate resolved paths while preserving order.
71
- - `diffTool` and `builtInDiffTool` select the complete object from the most-specific level that defines them.
72
- - `subagents.defaultLaunchModels` selects the most-specific list.
70
+ - `subagents.launchModels` selects the most-specific list.
73
71
  - `clientTools` is defined only at global scope. `enabledClientTools` at the most-specific project level is an exact selection from those definitions.
74
72
  - `history` is accepted only at global scope.
75
73
 
@@ -89,22 +87,18 @@ Relative path bases belong to the level that declares the value:
89
87
 
90
88
  - Global `agentContextFiles` entries resolve from home.
91
89
  - Project `agentContextFiles` entries resolve from the directory containing `.tau`.
92
- - A relative `diffTool.command` containing a slash resolves from the same level root.
93
90
  - A global `clientTools[].command` containing a slash resolves from home.
94
- - A bare command such as `review-ui` is left bare and resolves through the owning process's `PATH`.
91
+ - A bare command such as `git` is left bare and resolves through the owning process's `PATH`.
95
92
 
96
93
  For example, in `/home/ada/work/ledger/.tau/config.json`:
97
94
 
98
95
  ```json
99
96
  {
100
- "agentContextFiles": ["docs/AI_GUIDE.md"],
101
- "diffTool": {
102
- "command": "./tools/review-ui"
103
- }
97
+ "agentContextFiles": ["docs/AI_GUIDE.md"]
104
98
  }
105
99
  ```
106
100
 
107
- Tau resolves the paths as `/home/ada/work/ledger/docs/AI_GUIDE.md` and `/home/ada/work/ledger/tools/review-ui`. In an attached session, `diffTool` used by the TUI comes from the client-local load, so this resolved command is a client path.
101
+ Tau resolves the path as `/home/ada/work/ledger/docs/AI_GUIDE.md`.
108
102
 
109
103
  Other strings that happen to contain paths are not automatically rebased unless their field contract says so. In particular, hosted execution-environment `home` values are passed as configured.
110
104
 
@@ -158,7 +152,6 @@ Never verify a secret by printing the full config or environment into a shared t
158
152
  Tau loads startup configuration and content before opening the TUI. Restart the local TUI or `tau attach` to apply client-owned changes such as:
159
153
 
160
154
  - `defaultTheme`
161
- - `diffTool` and `builtInDiffTool`
162
155
  - `clientTools` and `enabledClientTools`
163
156
  - client environment variables
164
157
 
@@ -57,7 +57,7 @@ A Fly Sprite can place the execution environment on another target while the hos
57
57
  | Session snapshots | Host home | Local defaults live under the host's Tau config directory. Do not edit session files. |
58
58
  | Local transcript history and remote history outbox | Host home | History follows the host, not an attached TUI or execution target. |
59
59
  | Terminal theme and `/theme` | TUI client | An attached client selects from Tau’s built-in themes. Themes are not session state. |
60
- | `/diff` process | TUI client | `diffTool.command` must exist on the client machine. Repository capture still runs through the session execution environment. |
60
+ | `/diff` process | TUI client | Tau’s built-in browser tool runs on the client machine. Repository capture still runs through the session execution environment. |
61
61
  | Configured command client tools | Owning client | Commands and their environment are client-local; their execution-environment facade reaches the session target explicitly. |
62
62
  | `/listen` and `/speak` capture or playback | TUI client | Required programs, devices, and media credentials belong on the client machine. |
63
63
  | Host execution-environment targets | Host startup | Fly Sprite API definitions must be available to the host before it accepts sessions using them. |
@@ -84,7 +84,7 @@ tau attach --new --cwd /srv/ledger ws://devbox.example:8787
84
84
 
85
85
  The path `/srv/ledger` is interpreted by the host and its local execution environment. Project personas and `.tau/config.json` are read from `/srv/ledger` and its ancestors on `devbox.example`. The laptop's current directory does not influence that session runtime.
86
86
 
87
- The laptop still loads its own theme, `diffTool`, and command client tools before attaching. If `/diff` launches `review-ui`, that executable must exist on the laptop. Git snapshot commands for the review run through the session and therefore see `/srv/ledger` on the execution environment.
87
+ The laptop still loads its own theme and command client tools before attaching. `/diff` launches Tau’s built-in browser tool on the laptop. Git snapshot commands for the review run through the session and therefore see `/srv/ledger` on the execution environment.
88
88
 
89
89
  If the selected persona needs a provider credential, the host on `devbox.example` makes the model call. Export the provider environment variable for `tau serve` there, or make the appropriate runtime configuration available to that host. Setting it only in the laptop shell does not authenticate the remote host.
90
90
 
@@ -1,12 +1,12 @@
1
1
  # Personas
2
2
 
3
- A persona is Tau's complete model-facing working profile. It chooses a provider and model, supplies the base system prompt, sets reasoning and service behavior, and selects tools, skills, and subagents. Changing persona changes how future turns run without creating a new session.
3
+ A persona is Tau's complete model-facing working profile. It chooses a provider and model, supplies the base system prompt, sets reasoning and service behavior, and selects tools and skills. Changing persona changes how future turns run without creating a new session.
4
4
 
5
5
  Tau ships generated built-in personas and discovers custom persona Markdown from the execution environment. The effective list is version-specific and scope-specific, so inspect the current catalog rather than relying on a memorized list of names.
6
6
 
7
7
  ## Built-in and effective personas
8
8
 
9
- Built-in personas are generated from Tau's current model catalog. Most model families have separate chat and coder variants; some families expose only the variants Tau supports. Built-ins carry Tau-maintained prompts, defaults, tool selections, skills, and the built-in `default` subagent.
9
+ Built-in personas are generated from Tau's current model catalog. Most model families have separate chat and coder variants; some families expose only the variants Tau supports. Built-ins carry Tau-maintained prompts, defaults, tool selections, skills, and subagent supervision tools.
10
10
 
11
11
  The Opus 5.5 chat and coder personas are available only when `anthropic/claude-opus-5-5` is present in the effective model catalog. The Sonnet 5.5 variants (`sonnet-5.5-chat` and `sonnet-5.5-coder`) likewise require `anthropic/claude-sonnet-5-5`.
12
12
 
@@ -16,7 +16,7 @@ All built-in personas default to medium reasoning. The startup default is `sonne
16
16
 
17
17
  After a remote catalog refresh, `/reload` adopts the updated catalog for an existing session.
18
18
 
19
- Set `disableBuiltinPersonas: true` in `config.json` to omit built-ins from the effective catalog. Custom personas can also replace a built-in by using the same ID. A shipped built-in is therefore not necessarily available in a particular session.
19
+ Built-in personas are always included in the catalog. Custom personas can replace a built-in by using the same ID.
20
20
 
21
21
  Use one of these to inspect the current effective list:
22
22
 
@@ -67,14 +67,6 @@ tools:
67
67
  - view_image
68
68
  - web
69
69
  - history
70
- subagents:
71
- default: false
72
- verifier:
73
- description: Verify release state independently. Trigger: balanced.
74
- systemPrompt: Verify the requested release state and report concrete blockers.
75
- tools:
76
- - bash
77
- - history
78
70
  ---
79
71
 
80
72
  Work as a release engineer. Inspect repository policy before changing release state.
@@ -104,9 +96,8 @@ The frontmatter must be a YAML object between valid delimiters. Unknown fields a
104
96
  | `allowedReasoningLevels` | Array of reasoning efforts offered by the TUI selector. |
105
97
  | `skills` | `"*"`, a list of discovered skill names, or `[]`. |
106
98
  | `tools` | Explicit list of persona-controlled tools. |
107
- | `subagents` | Map of enabled subagent definitions. |
108
99
 
109
- If a standalone custom persona omits `skills`, Tau selects all discovered skills with `"*"`. If it omits `subagents`, Tau enables the built-in `default` subagent. Tool defaults then include the ordinary host tools plus subagent supervision tools. See [skills](skills.md) and [subagents](subagents.md) for those contracts.
100
+ If a standalone custom persona omits `skills`, Tau selects all discovered skills with `"*"`. If it omits `tools`, Tau enables the ordinary host tools plus subagent supervision tools. An explicit `tools` list without `spawn_agent` prevents subagent launches. See [skills](skills.md) and [subagents](subagents.md) for those contracts.
110
101
 
111
102
  The persona-controlled tool names are:
112
103
 
@@ -135,10 +126,8 @@ Important boundaries are:
135
126
 
136
127
  - `extends` resolves shipped built-ins, not another custom persona.
137
128
  - Lookup of the built-in ID is case-insensitive.
138
- - It remains available as an inheritance base even when `disableBuiltinPersonas` hides built-ins from the effective catalog.
139
129
  - A non-empty Markdown body replaces the inherited base prompt.
140
130
  - Explicit `skills` or `tools` replaces the inherited selection.
141
- - Explicit `subagents` builds a new subagent map rather than merging custom entries into the inherited map. Unless that map contains `default: false`, Tau adds the built-in `default` subagent.
142
131
  - `reasoning` and `serviceTier` override their individual inherited settings; omitted settings remain inherited.
143
132
 
144
133
  Extending a built-in is useful when Tau's maintained behavior is the desired base. A standalone body is more stable when the persona must not change as Tau updates its built-in prompts.
@@ -187,7 +176,7 @@ Run `/reload` while the TUI session is idle after editing personas, `models.json
187
176
 
188
177
  If the current persona ID still exists, Tau applies its newly loaded definition. This can reset runtime settings such as reasoning or service tier to the definition's values. If the ID disappeared, Tau selects the first effective persona. Existing session messages remain; changing a persona does not rewrite prior model-facing history.
189
178
 
190
- A reload does not alter a turn already in progress, and the TUI refuses the operation while one is running. Existing live subagent threads retain the runtime with which they were created; newly spawned subagents use the reloaded persona definition. See [subagents](subagents.md).
179
+ A reload does not alter a turn already in progress, and the TUI refuses the operation while one is running. Existing live subagent threads retain the runtime with which they were created; newly spawned subagents inherit the reloaded persona. See [subagents](subagents.md).
191
180
 
192
181
  ## Validation and common mistakes
193
182
 
@@ -200,8 +189,6 @@ An invalid persona is skipped and reported as a configuration warning. Other val
200
189
  - an `extends` target that is not a shipped built-in;
201
190
  - an invalid reasoning effort or service tier;
202
191
  - `skills` that is neither `"*"` nor a string list, or contains a blank entry;
203
- - an unknown persona tool;
204
- - an invalid subagent name, missing custom `systemPrompt`, unsupported subagent tool, or invalid launch model; and
205
- - attempting to override the built-in `default` subagent instead of using `default: false`.
192
+ - an unknown persona tool.
206
193
 
207
194
  `/reload` surfaces warning paths directly in the transcript. For a new local TUI session, `tau --debug --persona <id>` shows the selected model, settings, skills, subagents, tools, and complete effective prompt. If a remote edit appears to have no effect, confirm the session execution environment and `cwd` before changing another copy of the file. [Troubleshooting](troubleshooting.md) covers that check in more detail.
@@ -149,7 +149,7 @@ The alternate directory controls:
149
149
  - target applicable `AGENTS.md` and `agentContextFiles`,
150
150
  - target-discovered skills filtered by the parent persona.
151
151
 
152
- The parent session remains the source of truth for the selected persona, subagent definition, model catalog, model settings, and tool policy. Tau filters skills discovered at the alternate directory through the parent persona's skill selection. It does not replace the source persona with a persona found in the target directory. See [subagents](subagents.md) for the full launch contract.
152
+ The parent session remains the source of truth for the selected persona, model catalog, model settings, and tool policy. Tau filters skills discovered at the alternate directory through the parent persona's skill selection. It does not replace the source persona with a persona found in the target directory. See [subagents](subagents.md) for the full launch contract.
153
153
 
154
154
  ## Leading hidden system blocks
155
155
 
@@ -150,7 +150,7 @@ An attached session spans three logical machines even when two happen to share o
150
150
  - command execution, platform, PATH, and runtime dependencies
151
151
  - automatic-compaction archives and other target-side temporary files
152
152
 
153
- This is why changing a host’s theme selection does not affect a remote TUI, why `!git status` runs against the execution environment, and why a custom diff application opens on the attaching machine. [Ownership and scope](ownership-and-scope.md) applies the same model across Tau.
153
+ This is why changing a host’s theme selection does not affect a remote TUI, why `!git status` runs against the execution environment, and why the built-in diff review tool opens on the attaching machine. [Ownership and scope](ownership-and-scope.md) applies the same model across Tau.
154
154
 
155
155
  ## Reload or restart the correct process
156
156
 
@@ -161,7 +161,7 @@ Different changes have different owners:
161
161
  | Project config, model overlays, personas, prompts, skills, or AGENTS.md in the execution environment | Wait for idle, then run `/reload`. |
162
162
  | Effective model `apiKeys` in execution-environment or session configuration | Wait for idle, then run `/reload`; new sessions also resolve the current values. |
163
163
  | Managed Codex auth changed with `tau auth` | No host restart; auth storage is read again on later credential resolutions. |
164
- | Attaching themes, diff launcher, speech config, or configured client tools | Restart `tau attach`. |
164
+ | Attaching themes, speech config, or configured client tools | Restart `tau attach`. |
165
165
  | Host process environment variables, history target, WebSocket listener, Fly API target, or host startup flags | Restart `tau serve`. |
166
166
  | Host Tau package, built-in tools, protocol, session recovery code, or built-in documentation | Upgrade and restart the host. |
167
167
  | TUI package, keybindings, rendering, local speech, or client-tool implementation | Upgrade and restart the attaching client. |
@@ -26,7 +26,7 @@ The execution environment supplies more than source files. Tau can load project
26
26
 
27
27
  A repository checkout is therefore part of Tau's trust boundary. Before using it with meaningful credentials or write access, inspect relevant `.tau/`, `.agents/`, and `AGENTS.md` content, including nearer nested levels. Pay particular attention to:
28
28
 
29
- - persona system prompts, tool lists, subagent definitions, and model launch allowlists;
29
+ - persona system prompts, tool lists, and model launch allowlists;
30
30
  - skill instructions and any scripts they direct the agent to run;
31
31
  - model overlays that replace endpoints, headers, capabilities, or token limits;
32
32
  - project configuration that supplies API keys, Nook targets, model notices, or hosted-environment definitions;
@@ -100,7 +100,7 @@ Before enabling one:
100
100
 
101
101
  A project `enabledClientTools` list is permission to select an already trusted global definition. Unknown selected names are ignored, so verify effective advertisement after changes. Start an untrusted project with `--no-client-tools` until its selection has been reviewed.
102
102
 
103
- The TUI's diff launcher is also a client-local process. A custom `diffTool.command` and its configured environment should be treated as trusted code.
103
+ The TUI's built-in diff review tool is also a client-local process.
104
104
 
105
105
  ## Use code mode as a capability boundary
106
106
 
@@ -108,6 +108,8 @@ Observation controls delivery, not session ownership. `session.unobserve` stops
108
108
  | `tools`, `operations`, `agents` | Mutable semantic state referenced by timeline items or client views. |
109
109
  | `facets` | Versioned client-facing metadata. Unknown facet kinds and versions should be ignored. |
110
110
 
111
+ `bootstrap.prompt.subagentSystemPrompt` is present when subagent launches are enabled. Each catalog persona has a `subagentLaunchModels` allowlist. Subagent records have task titles and IDs, not worker-type names.
112
+
111
113
  Render active transcript order from `timeline.items`, not by sorting or filtering `messages`. A timeline item either contains a notice or references a message, tool, or operation in the corresponding snapshot collection. Some model-visible messages intentionally have no timeline item.
112
114
 
113
115
  The timeline has an `epoch`, a per-epoch sequence high-water mark, and ordered items. Successful compaction replaces the active recoverable timeline and advances the epoch. Rewind stays in the same epoch, removes later items, and preserves the sequence high-water mark so sequence numbers are not reused.
@@ -36,7 +36,7 @@ Only one logical turn runs at a time. Input sent during active work has two usef
36
36
  - A queued message waits for the session to become idle, then starts an independent turn.
37
37
  - Steering joins the active logical turn at a safe continuation boundary.
38
38
 
39
- In the TUI, Enter queues and Ctrl+Enter steers while work is active. When idle, either starts a normal turn. Pending messages are visible to every observer of the same live hosted session. Alt+Up cancels queued messages and steering that has not been applied and restores the text to the editor.
39
+ In the TUI, Enter steers and Ctrl+Enter queues while work is active. When idle, either starts a normal turn. Pending messages are visible to every observer of the same live hosted session. Alt+Up cancels queued messages and steering that has not been applied and restores the text to the editor.
40
40
 
41
41
  A turn captures its model, persona, reasoning, system prompt, tools, retry policy, and compaction policy when it starts. Tool subturns and steering continuations keep that captured specification even if reasoning or host configuration changes meanwhile. A queued turn captures the then-current specification when it later starts.
42
42
 
@@ -107,7 +107,7 @@ Compaction replaces older model-visible conversation context with a synthetic su
107
107
 
108
108
  ### Automatic compaction
109
109
 
110
- Automatic compaction runs before a model subturn when fresh provider usage plus newly added estimated context exceeds the configured threshold. The threshold is the model context window minus `autoCompact.reserveTokens`. Tau keeps a recent tail bounded by `autoCompact.keepRecentTokens`, summarizes older context, and can compact more than once during a long logical turn.
110
+ Automatic compaction runs before a model subturn when fresh provider usage plus newly added estimated context exceeds the fixed threshold. The threshold is the model context window minus 16,384 tokens. Tau keeps a recent tail with a target budget of 20,000 tokens, capped by that threshold, summarizes older context, and can compact more than once during a long logical turn.
111
111
 
112
112
  The summary model may copy important original user messages verbatim into the summary. Recent retained messages stay available to the model, although unusually large textual tool and recovery results may be truncated in retained context. Tau records the compaction as a new active context segment.
113
113
 
@@ -119,18 +119,6 @@ The continuation also requires the archive guide to be present in model context
119
119
 
120
120
  These archives are temporary recovery aids, not backups. Archive failure does not block compaction, and execution-environment cleanup may remove them.
121
121
 
122
- Configure the policy in [configuration](configuration.md):
123
-
124
- ```json
125
- {
126
- "autoCompact": {
127
- "enabled": true,
128
- "reserveTokens": 16384,
129
- "keepRecentTokens": 20000
130
- }
131
- }
132
- ```
133
-
134
122
  ### Intermediate system instructions
135
123
 
136
124
  Tau supports plain-text system instructions in conversation history separately from the persona/base prompt. These records are hidden in the TUI, persisted for recovery, recorded as system entries in searchable transcript history, and sent to the model in conversation order. The initial persona/base prompt is not recorded in transcript history. Providers that cannot represent intermediate system messages may fold their instructions into the leading prompt through the model adapter.
@@ -79,7 +79,7 @@ The frontmatter contract is:
79
79
  | `metadata` | Optional map whose keys and values are strings. |
80
80
  | `allowed-tools` | Optional non-empty string. It is accepted for skills-format compatibility but currently ignored by Tau. |
81
81
 
82
- Unknown frontmatter fields are discarded. `allowed-tools` does not enable, disable, or restrict any tool. Tool availability comes from the active persona and, for a subagent, its subagent definition. See [tools](tools.md) and [subagents](subagents.md).
82
+ Unknown frontmatter fields are discarded. `allowed-tools` does not enable, disable, or restrict any tool. Tool availability comes from the active persona; subagents inherit its eligible tools. See [tools](tools.md) and [subagents](subagents.md).
83
83
 
84
84
  Keep the description useful without copying the full workflow into it. Tau initially exposes the name, description, and `SKILL.md` path. The agent opens the file after activation, then reads only the referenced resources needed for the task.
85
85
 
@@ -1,87 +1,24 @@
1
1
  # Subagents
2
2
 
3
- Subagents are host-supervised background agent threads created by the main agent. They are useful when work can proceed independently, needs a separate context, or benefits from a deliberately narrower tool set. A subagent is not a second session and does not have its own persona file. Its definition belongs to the active persona.
3
+ Subagents are host-supervised background agent threads created by the main agent. They are useful when work can proceed independently or needs a separate context. A subagent is not a second session and does not have its own persona file.
4
4
 
5
- The persona decides which subagent names exist. The host enforces launch models, tools, working directory, concurrency, follow-up state, interruption, and cleanup.
5
+ ## Background workers
6
6
 
7
- ## The built-in `default` subagent
7
+ Subagents are general-purpose background workers with no named types. Multiple instances can run concurrently, each with its own task and conversation.
8
8
 
9
- Tau provides one built-in subagent named `default`. It is a general-purpose background worker and has explicit trigger sensitivity. Built-in personas enable it, and a standalone custom persona also enables it when `subagents` is omitted.
9
+ The worker inherits the active main persona's model-facing behavior through Tau's maintained wrapper. Its instructions and description are not configuration surfaces. Supply task-specific instructions in the launch prompt, including any relevant skill guidance.
10
10
 
11
- The `default` subagent inherits the active main persona's model-facing behavior through Tau's maintained wrapper. Its wrapper and built-in prompt are implementation-owned and are not configuration surfaces. It cannot be overridden in persona frontmatter.
12
-
13
- Disable it explicitly when a persona should expose only named custom workers or no subagents:
14
-
15
- ```yaml
16
- subagents:
17
- default: false
18
- ```
19
-
20
- If `subagents` is omitted by a persona that extends a built-in, Tau inherits the base persona's entire subagent map. If a persona supplies a `subagents` map, Tau builds a new map from it and adds `default` unless the map says `default: false`.
21
-
22
- ## Defining custom subagents
23
-
24
- Custom definitions live under `subagents` in a [persona](personas.md):
25
-
26
- ```yaml
27
- subagents:
28
- default: false
29
- dependency-auditor:
30
- description: Audit dependency changes and report concrete risks. Trigger: explicit.
31
- systemPrompt: >-
32
- Inspect the requested dependency change. Verify lockfile and release implications,
33
- then return prioritized findings with paths.
34
- tools:
35
- - bash
36
- - history
37
- launchModels:
38
- - anthropic/claude-haiku-4-5:low
39
- - openai/gpt-6.1-sol:high
40
- ```
41
-
42
- A custom subagent name must:
43
-
44
- - contain 1 to 64 characters;
45
- - use lowercase letters and digits;
46
- - use single dashes between segments; and
47
- - begin and end with a letter or digit.
48
-
49
- `dependency-auditor` and `review2` are valid. `DependencyAuditor`, `dependency_auditor`, and `-review` are not.
50
-
51
- Each custom definition accepts:
52
-
53
- | Field | Contract |
54
- | --- | --- |
55
- | `systemPrompt` | Required non-empty string containing the subagent's base instructions. |
56
- | `description` | Optional non-empty catalog description. Include trigger sensitivity here when needed. |
57
- | `tools` | Optional list of eligible subagent tools. Omission inherits eligible tools from the main persona. |
58
- | `launchModels` | Optional allowlist of exact model overrides accepted by `spawn_agent`. |
59
-
60
- Unknown fields are discarded. In particular, `provider`, `model`, `reasoning`, and `serviceTier` inside a subagent definition do not configure its runtime. Use `launchModels` for approved launch-time model changes.
61
-
62
- A custom entry cannot be `false`; only `default: false` has disable semantics. Every custom entry requires `systemPrompt`.
11
+ Availability follows the main persona's tool list. Built-in personas and standalone custom personas that omit `tools` enable the five supervision tools. A custom persona can prevent launches by providing an explicit `tools` list without `spawn_agent`; omit all five supervision tools when no subagent interaction is wanted. There is no separate subagent enable or disable setting. See [personas](personas.md).
63
12
 
64
13
  ## Trigger sensitivity
65
14
 
66
- Trigger sensitivity is expressed in the `description`, not in a separate field:
67
-
68
- - **eager**: use proactively whenever the capability would help;
69
- - **balanced**: use when the request clearly matches, which is the default when no trigger is stated;
70
- - **explicit**: use only when an active instruction names the subagent.
71
-
72
- Use a clear phrase such as `Trigger: explicit.`. An exact user reference looks like:
73
-
74
- ```text
75
- @@agent:dependency-auditor
76
- ```
77
-
78
- An exact reference in the user request, an active `AGENTS.md` instruction, or the instructions of an already-active skill explicitly activates that subagent. A subagent reference tells the main agent which capability to use; it does not itself create a thread. The main agent still calls `spawn_agent`.
15
+ The main agent launches subagents only when the user or active instructions explicitly request delegation. Ask for a subagent in ordinary language; no named agent tag is needed. A request does not itself create a thread: the main agent still calls `spawn_agent`.
79
16
 
80
- Trigger sensitivity is agent-facing policy. The host enforces whether the named subagent exists, but it does not infer whether a prompt semantically satisfied `eager`, `balanced`, or `explicit`.
17
+ This is agent-facing policy. The host validates launches but does not infer whether a prompt semantically authorized delegation.
81
18
 
82
19
  ## Tool inheritance and restriction
83
20
 
84
- The persona-configurable subagent tool subset contains only:
21
+ The eligible inherited tools are:
85
22
 
86
23
  - `bash`
87
24
  - `write`
@@ -89,14 +26,13 @@ The persona-configurable subagent tool subset contains only:
89
26
  - `view_image`
90
27
  - `web`
91
28
  - `history`
29
+ - `nook`, when Nook is configured
92
30
 
93
- Tau then adds intrinsic `tau_docs` to every subagent registry, independently of this subset. Neither a persona nor a subagent `tools` list can disable it. Apart from `tau_docs`, subagents do not receive Nook, goal controls, subagent supervision tools, client tools, or TUI-local tools.
31
+ 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.
94
32
 
95
- When `tools` is omitted, Tau filters the main persona's tool list to the eligible names above. For example, a main persona with `bash`, `edit`, `history`, and `spawn_agent` gives an omitted subagent list of `bash`, `edit`, and `history`.
33
+ The worker inherits the intersection of the main persona's tools and those seven eligible names. 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.
96
34
 
97
- An explicit `tools` list replaces inheritance. It may select any of the six eligible subagent tools, even if that name is absent from the main persona's own list. Use `tools: []` for a worker with no persona-configurable tools; it still receives `tau_docs`. Names are normalized to lowercase, duplicate entries are removed, and an unknown name rejects the containing persona.
98
-
99
- The main persona must itself expose the subagent supervision tools for the model to operate subagents. Defining a subagent while omitting `spawn_agent` from an explicit persona `tools` list leaves the definition present but not launchable by the main agent. See [tools](tools.md) for the broader availability contract.
35
+ Subagents cannot launch other subagents: supervision tools are never included in a child's registry. See [tools](tools.md) for the broader availability contract.
100
36
 
101
37
  ## Models and settings
102
38
 
@@ -110,18 +46,18 @@ A launch override must use exact form:
110
46
 
111
47
  The provider is normalized to lowercase. The model ID remains exact and case-sensitive. Effort is one of `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, or `max`.
112
48
 
113
- `launchModels` is an allowlist, not a default selection. The main agent should normally omit the `model` argument to `spawn_agent`; when omitted, the subagent inherits the active persona model and reasoning. When supplied, the normalized value must exactly match an entry in the selected subagent's allowlist. The override changes provider, model, and reasoning. Other inherited settings remain.
49
+ The configured launch-model list is an allowlist, not a default selection. The main agent should normally omit the `model` argument to `spawn_agent`; when omitted, the subagent inherits the active persona model and reasoning. When supplied, the normalized value must exactly match an entry in the configured allowlist. The override changes provider, model, and reasoning. Other inherited settings remain.
114
50
 
115
- Model IDs may be unbundled when their provider is known, following the synthesis rules in [models](models.md). Invalid provider, model, effort, or format rejects the persona during content loading. Duplicate normalized entries are removed.
51
+ Model IDs may be unbundled when their provider is known, following the synthesis rules in [models](models.md). Invalid provider, model, effort, or format rejects the configuration field. Duplicate normalized entries are removed.
116
52
 
117
- ### Allowing overrides for `default`
53
+ ### Allowing model overrides
118
54
 
119
- The built-in `default` definition cannot be edited in persona frontmatter. Configure its launch allowlist through `subagents.defaultLaunchModels` in `config.json`:
55
+ Configure the built-in worker’s launch allowlist through `subagents.launchModels` in `config.json`:
120
56
 
121
57
  ```json
122
58
  {
123
59
  "subagents": {
124
- "defaultLaunchModels": [
60
+ "launchModels": [
125
61
  "anthropic/claude-haiku-4-5:low",
126
62
  "openai/gpt-6.1-sol:high"
127
63
  ]
@@ -129,7 +65,7 @@ The built-in `default` definition cannot be edited in persona frontmatter. Confi
129
65
  }
130
66
  ```
131
67
 
132
- This list is layered configuration. The nearest defined `defaultLaunchModels` array replaces the broader array rather than appending to it. Tau applies the effective list to every persona that currently enables `default`; it does not add `default` to a persona that disabled it.
68
+ This list is layered configuration. The nearest defined `launchModels` array replaces the broader array rather than appending to it. Tau applies the effective list to every persona that exposes `spawn_agent`.
133
69
 
134
70
  ## Working-directory context
135
71
 
@@ -137,7 +73,7 @@ This list is layered configuration. The nearest defined `defaultLaunchModels` ar
137
73
 
138
74
  When the resolved path differs from the parent `cwd`, Tau rebuilds prompt context from that target directory. It discovers the target platform and repository metadata, reads applicable `AGENTS.md` and configured context files, discovers target skills, and filters those skills through the parent persona's skill selection.
139
75
 
140
- The target directory does **not** select a different persona, subagent definition, model catalog, runtime configuration, credential source, or tool policy for the child. Those remain under parent-session authority. Target configuration is consulted only where needed to rebuild target prompt context, such as target `agentContextFiles` and skill discovery.
76
+ The target directory does **not** select a different persona, model catalog, runtime configuration, credential source, or tool policy for the child. Those remain under parent-session authority. Target configuration is consulted only where needed to rebuild target prompt context, such as target `agentContextFiles` and skill discovery.
141
77
 
142
78
  This distinction matters in monorepos and hosted environments. `workingDirectory` is an execution-environment path. The host and attached client must not reinterpret it against their own filesystems.
143
79
 
@@ -145,11 +81,11 @@ A launch is blocked if Tau cannot build target context, the directory is invalid
145
81
 
146
82
  ## Lifecycle and supervision tools
147
83
 
148
- Subagent threads are addressed by host-generated IDs. Names identify configurations; IDs identify live thread records.
84
+ Subagent threads are addressed by host-generated IDs. IDs identify individual live thread records.
149
85
 
150
86
  ### Spawn
151
87
 
152
- `spawn_agent` validates the configured name, optional launch model, title, prompt, and working directory. The prompt is the child's only initial user input, so it should be self-contained. A successful call returns immediately with the new ID while the child continues in the background.
88
+ `spawn_agent` accepts a title, prompt, optional launch model, and optional working directory. The prompt is the child's only initial user input, so it should be self-contained. A successful call returns immediately with the new ID while the child continues in the background.
153
89
 
154
90
  At most eight subagent runs may be active concurrently within one main session. Completed or interrupted idle threads do not consume active capacity.
155
91
 
@@ -165,7 +101,7 @@ The host also publishes bounded live subagent activity to observing clients. Tha
165
101
 
166
102
  `send_input_to_agent` starts another run on an existing idle thread. The thread retains its conversation state, model, settings, tools, and working directory. It must finish or be interrupted before another input is accepted.
167
103
 
168
- Starting a follow-up replaces the previously retained response in the thread's latest-run state. Read any needed result before sending the next input. Follow-ups do not reread a changed persona definition or adopt a newly reloaded launch model.
104
+ Starting a follow-up replaces the previously retained response in the thread's latest-run state. Read any needed result before sending the next input. Follow-ups do not reread a changed persona definition or adopt a newly reloaded launch allowlist.
169
105
 
170
106
  ### Interrupt
171
107
 
@@ -185,19 +121,10 @@ Plan durable work accordingly. Important conclusions should be returned to the m
185
121
 
186
122
  ## Reloading and validation
187
123
 
188
- Persona and global launch-policy changes take effect after `/reload` in an idle TUI session or in a newly created session. Reload updates which subagent definitions new `spawn_agent` calls see. It does not kill, rename, or reconfigure already spawned threads, and follow-ups continue on their captured runtime.
189
-
190
- An invalid subagent definition rejects its containing persona. Common content warnings include:
124
+ Persona tool selections and launch-policy changes take effect after `/reload` in an idle TUI session or in a newly created session. Reload updates new launches without reconfiguring already spawned threads. Follow-ups continue on their captured runtime.
191
125
 
192
- - a name outside the lowercase-dash contract or longer than 64 characters;
193
- - `subagents` that is not an object;
194
- - `default` set to anything other than `false`;
195
- - a custom entry set to `false` or missing `systemPrompt`;
196
- - blank descriptions, prompts, or list entries;
197
- - unknown subagent tools;
198
- - `launchModels` or `defaultLaunchModels` that is not a string array; and
199
- - an unknown provider or model, invalid effort, or malformed `<provider>/<model>:<effort>` value.
126
+ `subagents.launchModels` must be a string array of valid `<provider>/<model>:<effort>` values. Unknown providers, invalid efforts, and malformed entries produce configuration diagnostics.
200
127
 
201
- At execution time, launches can still be blocked by an unenabled name, a model outside the allowlist, exhausted concurrency, invalid arguments, missing prompt composition, or target-context failure. Follow-up, wait, and interrupt calls reject unknown IDs; follow-up also rejects a thread that is still running.
128
+ At execution time, launches can be blocked by invalid arguments, a model outside the allowlist, exhausted concurrency, missing prompt composition, or target-context failure. Follow-up, wait, and interrupt calls reject unknown IDs; follow-up also rejects a thread that is still running.
202
129
 
203
- Use `tau --debug --persona <id>` before starting a local TUI to inspect effective subagent names, inherited model and settings, and tool lists. It does not reveal managed prompt bodies for built-in subagents. In a running session, `/reload` reports exact file warnings and `list_agents` verifies live runtime choices.
130
+ Use `tau --debug --persona <id>` before starting a local TUI to inspect effective tool availability, inherited model and settings, and the child tool list. In a running session, `/reload` reports file warnings and `list_agents` shows live thread state.
@@ -56,7 +56,6 @@ Unknown object fields are stripped, so a misspelled field can have no effect wit
56
56
  | `projects` | Yes | Object keyed by project ID. Bots select from these definitions. |
57
57
  | `workspaceRoot` | No | Base for managed workspaces; defaults to `.tau/telegram-workspaces` beside the Telegram config file. |
58
58
  | `maxSessions` | No | Positive integer cap on active sessions across the whole runner. |
59
- | `systemMessage` | No | Non-empty model-facing instruction prepended to every Telegram turn. |
60
59
 
61
60
  A relative top-level `workspaceRoot` resolves from the Telegram config file's directory. Tau persists runner session records at `<workspaceRoot>-sessions.json` and per-chat preferences at `<workspaceRoot>-project-preferences.json`. These are runner-owned state files, not operator editing surfaces. Session snapshots remain in the normal host store under the runner user's Tau home.
62
61
 
@@ -74,8 +73,8 @@ Each `bots.<id>` object supports:
74
73
  | `allowedChatIds` | No | Integer chat IDs allowed to interact with the bot; also opts groups in. |
75
74
  | `defaultProjectId` | No | Initial project preference, and must be allowed for this bot. |
76
75
  | `systemMessage` | No | Additional instruction for turns from this bot. |
77
- | `pollIntervalMs` | No | Positive polling retry interval, default 1,000 ms. |
78
- | `requestTimeoutSeconds` | No | Positive Telegram long-poll timeout, default 30 seconds. |
76
+
77
+ The runner retries failed polling after 1,000 ms and uses a 30-second Telegram long-poll timeout.
79
78
 
80
79
  An absent or empty `allowedUserIds` means no user restriction. An absent or empty `allowedChatIds` allows DMs but allows no groups. When `allowedChatIds` is non-empty, it restricts DMs to listed chat IDs and enables only listed groups. Group IDs are usually negative integers.
81
80
 
@@ -95,7 +94,7 @@ platform_api
95
94
  release2026
96
95
  ```
97
96
 
98
- Every project can have an optional non-empty `description`. Repository and persistent-directory projects can select `persona` as `<id>` or `<id>:<reasoning>`, and can set `noAgentContextFiles` to disable `AGENTS.md` injection for that session. Composite projects require their own persona and do not support `noAgentContextFiles`.
97
+ Every project can have an optional non-empty `description`. Repository and persistent-directory projects can select `persona` as `<id>` or `<id>:<reasoning>`. Composite projects require their own persona. Sessions load applicable `AGENTS.md` instructions.
99
98
 
100
99
  Each project must define exactly one workspace source: `repo`, `directory`, or `projectIds`.
101
100
 
@@ -110,9 +109,7 @@ A repository project clones one GitHub repository into a session-specific manage
110
109
  "repo": "acme/ledger",
111
110
  "ref": "main",
112
111
  "workingDirectory": "packages/api",
113
- "workspaceRoot": "/var/lib/tau/ledger-workspaces",
114
- "persona": "gpt-6.1-sol-coder",
115
- "noAgentContextFiles": false
112
+ "persona": "gpt-6.1-sol-coder"
116
113
  }
117
114
  }
118
115
  }
@@ -120,7 +117,7 @@ A repository project clones one GitHub repository into a session-specific manage
120
117
 
121
118
  `repo` must use GitHub `owner/repo` syntax. Arbitrary Git URLs are not accepted. The runner needs `gh` and `git` on its login-shell `PATH`, and `gh` must already be authenticated for the repository.
122
119
 
123
- A relative project `workspaceRoot` resolves from the Telegram config file's directory and replaces the top-level root for that project's managed workspaces. A session workspace is:
120
+ All managed projects use the top-level `workspaceRoot`. A session workspace is:
124
121
 
125
122
  ```text
126
123
  <effective-workspace-root>/<project-id>/<telegram-session-id>
@@ -179,7 +176,7 @@ A composite project creates a root containing multiple repositories:
179
176
  "persona": "gpt-6.1-sol-coder:high",
180
177
  "instructions": "Keep shared contracts synchronized.",
181
178
  "subagents": {
182
- "defaultLaunchModels": ["openai/gpt-6.1-sol:high"]
179
+ "launchModels": ["openai/gpt-6.1-sol:high"]
183
180
  }
184
181
  }
185
182
  }
@@ -190,11 +187,11 @@ A composite project creates a root containing multiple repositories:
190
187
 
191
188
  Members live at `<composite-root>/<member-project-id>` and use each repository's cache, ref, and working directory. The root is the session `cwd`. At creation, Tau writes a root `AGENTS.md` listing the members and optional `instructions`, plus root `.tau/config.json` containing `subagents` or `{}`. These are workspace files, not synchronized mirrors of Telegram configuration, and are not regenerated when a preserved session reconnects.
192
189
 
193
- `subagents.defaultLaunchModels` sets the built-in `default` launch override allowlist. Runtime config resolves and enforces entries. See [subagents](subagents.md) for model syntax and custom policy.
190
+ `subagents.launchModels` sets the subagent launch override allowlist. Runtime config resolves and enforces entries. See [subagents](subagents.md) for model syntax and inheritance.
194
191
 
195
192
  The composite owns the parent persona, subagents, model catalog, config, settings, and tools. Child `.tau/config.json` files are not merged. A subagent in a member directory rebuilds only target context: environment and repository metadata, applicable `AGENTS.md` and `agentContextFiles`, and skills filtered by the parent persona.
196
193
 
197
- Composite preparation is all-or-nothing. If one member cannot be prepared, Tau removes the generated composite workspace. The composite's optional `workspaceRoot` controls the generated root; member repository caches continue to use each member's configured root or the top-level default.
194
+ Composite preparation is all-or-nothing. If one member cannot be prepared, Tau removes the generated composite workspace. Composite workspaces and member repository caches use the top-level `workspaceRoot`.
198
195
 
199
196
  ## Managed workspace lifecycle
200
197
 
@@ -218,11 +215,11 @@ New and reconstructed workspaces run their hooks; preserved workspaces and persi
218
215
 
219
216
  After preparation, Tau creates an ordinary local session at the workspace `cwd`. Runtime discovery reads normal `~/.config/tau` and ancestor `.tau` content visible from that path: models, personas, prompts, skills, project context, host tools, and other session settings work as they do in the TUI.
220
217
 
221
- A project `persona` overrides the normal default for that session. `noAgentContextFiles: true` suppresses `AGENTS.md` injection for repository or persistent-directory sessions. Composite root context is generated deliberately and uses its required persona.
218
+ A project `persona` overrides the normal default for that session. Sessions include applicable `AGENTS.md` instructions. Composite root context is generated deliberately and uses its required persona.
222
219
 
223
220
  Every Telegram turn starts with hidden `<system>` guidance identifying Telegram as the source and reply destination. It favors direct simple answers and brief acknowledgements or meaningful progress updates for tool-driven or multi-step work, since users cannot see tool activity.
224
221
 
225
- Top-level and per-bot `systemMessage` values share a second hidden block after the default, in that order. Audio transcripts receive another warning that they may contain noise or errors. Unlike project context, hidden guidance is persisted with user turns and can appear in history, so never put credentials in configured messages.
222
+ A per-bot `systemMessage` appears in a second hidden block after the default. Audio transcripts receive another warning that they may contain noise or errors. Unlike project context, hidden guidance is persisted with user turns and can appear in history, so never put credentials in configured messages.
226
223
 
227
224
  The runner's speech credentials and `speech.voiceId` are loaded at startup from its environment and normal Tau config, based on the runner process's startup `cwd`. Restart the runner after changing those settings.
228
225
 
@@ -47,7 +47,7 @@ list_agents
47
47
  interrupt_agent
48
48
  ```
49
49
 
50
- When a custom persona extends another persona and omits `tools`, it inherits the base persona's list. A non-extending custom persona that omits `tools` enables `bash`, `write`, `edit`, `view_image`, `web`, `nook`, and `history`. If that persona has any enabled subagents, Tau also enables the five subagent-management tools. Built-in personas enable the same base and subagent tool sets.
50
+ When a custom persona extends another persona and omits `tools`, it inherits the base persona's list. A non-extending custom persona that omits `tools` enables `bash`, `write`, `edit`, `view_image`, `web`, `nook`, and `history`. It also enables the five subagent-management tools. Built-in personas enable the same base and subagent tool sets.
51
51
 
52
52
  An empty list disables every persona-controlled host tool:
53
53
 
@@ -131,7 +131,7 @@ Neither tool provides a general read operation. Use a scoped non-interactive Bas
131
131
 
132
132
  `view_image` reads an image from the execution environment and returns it to a multimodal model. Tau's built-in instruction limits use to cases where the user explicitly asks to view or analyze an image.
133
133
 
134
- The supported formats are JPEG, PNG, and WebP. Source reads are capped at 50 MiB. Images larger than 2,000 pixels in either dimension or 2.5 MiB of model payload are resized or re-encoded while preserving aspect ratio. If Tau cannot reduce a valid image below the model payload limit, the call fails. Relative paths resolve from the execution-environment working directory.
134
+ The supported formats are JPEG, PNG, and WebP. Source reads are capped at 50 MiB. Images with both dimensions at most 4,096 pixels and a model payload at most 3.5 MiB are returned unchanged. Images exceeding the dimension limit are resized to fit within 4,096 pixels while preserving aspect ratio, without upscaling. Tau tries lossless encoding before lossy compression and reduces dimensions further only if needed to meet the payload limit. Transparency is preserved. If Tau cannot reduce a valid image below the model payload limit, the call fails. Relative paths resolve from the execution-environment working directory.
135
135
 
136
136
  ## Command-line tools
137
137
 
@@ -175,7 +175,7 @@ The effective history query may be machine-local or backed by a configured remot
175
175
 
176
176
  ### Nook
177
177
 
178
- `nook` manages the configured Nook static mini-app platform. It is available only to a main-session persona that lists `nook` and only when Nook is configured. Subagents cannot receive it.
178
+ `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.
179
179
 
180
180
  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).
181
181
 
@@ -184,12 +184,12 @@ The tool is intended for explicit requests to inspect or manage Nook, publish a
184
184
  A subagent can receive only:
185
185
 
186
186
  ```text
187
- bash write edit view_image web history
187
+ bash write edit view_image web history nook
188
188
  ```
189
189
 
190
- A subagent definition may list an exact subset. If it omits `tools`, Tau inherits the intersection of the main persona's tools and those six eligible names. Duplicate names are normalized. `tau_docs` is then added intrinsically regardless of the subset.
190
+ Tau inherits the intersection of the main persona’s tools and those seven eligible names. `tau_docs` is then added intrinsically. There is no separate child tool selection. Nook is bound only when configured, just as for the parent.
191
191
 
192
- Subagents do not receive Nook, 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.
192
+ 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.
193
193
 
194
194
  ## Client-owned tools
195
195