@markusylisiurunen/tau 0.3.79 → 0.3.80

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 (240) hide show
  1. package/dist/core/agent/agent_runtime.js +68 -76
  2. package/dist/core/agent/agent_runtime.js.map +1 -1
  3. package/dist/core/auth/auth_manager.js +3 -7
  4. package/dist/core/auth/auth_manager.js.map +1 -1
  5. package/dist/core/auth/auth_messages.js +1 -1
  6. package/dist/core/auth/auth_messages.js.map +1 -1
  7. package/dist/core/auth/auth_storage.js +71 -7
  8. package/dist/core/auth/auth_storage.js.map +1 -1
  9. package/dist/core/auth/cli.js +8 -7
  10. package/dist/core/auth/cli.js.map +1 -1
  11. package/dist/core/auth/credential_store.js +88 -186
  12. package/dist/core/auth/credential_store.js.map +1 -1
  13. package/dist/core/auth/index.js +1 -1
  14. package/dist/core/auth/index.js.map +1 -1
  15. package/dist/core/auth/providers/openai_codex.js +51 -229
  16. package/dist/core/auth/providers/openai_codex.js.map +1 -1
  17. package/dist/core/cli.js +1 -2
  18. package/dist/core/cli.js.map +1 -1
  19. package/dist/core/config/content_loader.js +27 -130
  20. package/dist/core/config/content_loader.js.map +1 -1
  21. package/dist/core/config/index.js.map +1 -1
  22. package/dist/core/config/paths.js +0 -1
  23. package/dist/core/config/paths.js.map +1 -1
  24. package/dist/core/config/runtime.js +3 -2
  25. package/dist/core/config/runtime.js.map +1 -1
  26. package/dist/core/config/runtime_config_snapshot.js +23 -9
  27. package/dist/core/config/runtime_config_snapshot.js.map +1 -1
  28. package/dist/core/config/schema.js +13 -69
  29. package/dist/core/config/schema.js.map +1 -1
  30. package/dist/core/config/skills_loader.js +6 -2
  31. package/dist/core/config/skills_loader.js.map +1 -1
  32. package/dist/core/debug.js +1 -16
  33. package/dist/core/debug.js.map +1 -1
  34. package/dist/core/index.js +2 -2
  35. package/dist/core/index.js.map +1 -1
  36. package/dist/core/models/catalog.js +2 -239
  37. package/dist/core/models/catalog.js.map +1 -1
  38. package/dist/core/personas.js +0 -14
  39. package/dist/core/personas.js.map +1 -1
  40. package/dist/core/runtime/agent_model.js +0 -3
  41. package/dist/core/runtime/agent_model.js.map +1 -1
  42. package/dist/core/runtime/chat_runtime.js +16 -13
  43. package/dist/core/runtime/chat_runtime.js.map +1 -1
  44. package/dist/core/runtime/runtime_bootstrap.js +12 -59
  45. package/dist/core/runtime/runtime_bootstrap.js.map +1 -1
  46. package/dist/core/session/auto_compaction_archive.js +1 -1
  47. package/dist/core/session/auto_compaction_archive.js.map +1 -1
  48. package/dist/core/session/compaction.js +79 -506
  49. package/dist/core/session/compaction.js.map +1 -1
  50. package/dist/core/static/tau_docs/config-reference.md +12 -37
  51. package/dist/core/static/tau_docs/configuration.md +3 -16
  52. package/dist/core/static/tau_docs/credentials.md +20 -50
  53. package/dist/core/static/tau_docs/index.md +2 -1
  54. package/dist/core/static/tau_docs/manifest.json +1 -0
  55. package/dist/core/static/tau_docs/models.md +8 -159
  56. package/dist/core/static/tau_docs/openrouter.md +165 -0
  57. package/dist/core/static/tau_docs/ownership-and-scope.md +3 -3
  58. package/dist/core/static/tau_docs/personas.md +9 -41
  59. package/dist/core/static/tau_docs/prompts-and-project-context.md +10 -44
  60. package/dist/core/static/tau_docs/remote-sessions.md +6 -7
  61. package/dist/core/static/tau_docs/security.md +4 -5
  62. package/dist/core/static/tau_docs/session-protocol-methods.md +0 -1
  63. package/dist/core/static/tau_docs/session-protocol.md +11 -9
  64. package/dist/core/static/tau_docs/sessions.md +8 -6
  65. package/dist/core/static/tau_docs/skills.md +8 -32
  66. package/dist/core/static/tau_docs/subagents.md +2 -2
  67. package/dist/core/static/tau_docs/telegram.md +2 -2
  68. package/dist/core/static/tau_docs/tools.md +2 -1
  69. package/dist/core/static/tau_docs/troubleshooting.md +11 -12
  70. package/dist/core/static/tau_docs/tui.md +4 -2
  71. package/dist/core/subagents/agent_supervisor.js +0 -1
  72. package/dist/core/subagents/agent_supervisor.js.map +1 -1
  73. package/dist/core/telegram/adapter.js +1 -1
  74. package/dist/core/telegram/adapter.js.map +1 -1
  75. package/dist/core/tool/cli.js +10 -2
  76. package/dist/core/tool/cli.js.map +1 -1
  77. package/dist/core/tool/openrouter.js +291 -0
  78. package/dist/core/tool/openrouter.js.map +1 -0
  79. package/dist/core/tool/openrouter_decisions.js +97 -0
  80. package/dist/core/tool/openrouter_decisions.js.map +1 -0
  81. package/dist/core/tool/openrouter_media.js +180 -0
  82. package/dist/core/tool/openrouter_media.js.map +1 -0
  83. package/dist/core/tools/tau_docs.js +1 -0
  84. package/dist/core/tools/tau_docs.js.map +1 -1
  85. package/dist/core/utils/model_stream.js +47 -34
  86. package/dist/core/utils/model_stream.js.map +1 -1
  87. package/dist/core/utils/user_metadata.js +2 -27
  88. package/dist/core/utils/user_metadata.js.map +1 -1
  89. package/dist/core/version.js +2 -2
  90. package/dist/core/version.js.map +1 -1
  91. package/dist/diff_tool/app/dist/assets/{ada-C5qYipkI.js → ada-X3Y2mlq2.js} +1 -1
  92. package/dist/diff_tool/app/dist/assets/{ahk-CA9gdOdF.js → ahk-DwADkxyd.js} +1 -1
  93. package/dist/diff_tool/app/dist/assets/{angular-html-CnO8qept.js → angular-html-BbLgbIhq.js} +1 -1
  94. package/dist/diff_tool/app/dist/assets/{angular-ts-DPXUio9Z.js → angular-ts-DXk17TRM.js} +1 -1
  95. package/dist/diff_tool/app/dist/assets/{apl-X8YsymsQ.js → apl-BsvksCXR.js} +1 -1
  96. package/dist/diff_tool/app/dist/assets/{astro-BQ9k8AQ0.js → astro-DH775E4V.js} +1 -1
  97. package/dist/diff_tool/app/dist/assets/beancount-C2IN4Vk8.js +1 -0
  98. package/dist/diff_tool/app/dist/assets/{blade-DZ1LYIzB.js → blade-Ck99Rm59.js} +1 -1
  99. package/dist/diff_tool/app/dist/assets/{c-VLTwNh7z.js → c-DJpHqu5J.js} +1 -1
  100. package/dist/diff_tool/app/dist/assets/{chapel-5s-sGN8D.js → chapel-Owff0Csy.js} +1 -1
  101. package/dist/diff_tool/app/dist/assets/{cobol-C9RzwrVu.js → cobol-Cv2gZuhO.js} +1 -1
  102. package/dist/diff_tool/app/dist/assets/{coffee-BHvjZ343.js → coffee-Bji0YCf_.js} +1 -1
  103. package/dist/diff_tool/app/dist/assets/coq-CGaSfhwR.js +1 -0
  104. package/dist/diff_tool/app/dist/assets/{cpp-CBTVXbBp.js → cpp-DTjA_yFF.js} +1 -1
  105. package/dist/diff_tool/app/dist/assets/{crystal-DQJua4y4.js → crystal-Dd00NOeb.js} +1 -1
  106. package/dist/diff_tool/app/dist/assets/csharp-dmMxLVLW.js +1 -0
  107. package/dist/diff_tool/app/dist/assets/css-D44TN1V6.js +1 -0
  108. package/dist/diff_tool/app/dist/assets/dart-CHZY9Xhz.js +1 -0
  109. package/dist/diff_tool/app/dist/assets/dotenv-CuH5my32.js +1 -0
  110. package/dist/diff_tool/app/dist/assets/{edge-BmdmXGH4.js → edge-CVmGSi2m.js} +1 -1
  111. package/dist/diff_tool/app/dist/assets/{elixir-oiOLs98L.js → elixir-B8Mq7no2.js} +1 -1
  112. package/dist/diff_tool/app/dist/assets/{elm-BgYuiU4E.js → elm-CXS0I3Z2.js} +1 -1
  113. package/dist/diff_tool/app/dist/assets/emacs-lisp-DR2vtWaj.js +1 -0
  114. package/dist/diff_tool/app/dist/assets/{erb-CvFrXpyY.js → erb-B9oDKaUo.js} +1 -1
  115. package/dist/diff_tool/app/dist/assets/{git-rebase-D3Zo1BLH.js → git-rebase-DT-YFebH.js} +1 -1
  116. package/dist/diff_tool/app/dist/assets/{glimmer-js-B4-8E3lJ.js → glimmer-js-s0DXlNjq.js} +1 -1
  117. package/dist/diff_tool/app/dist/assets/{glimmer-ts-CtKkD0t_.js → glimmer-ts-QgEB5S2z.js} +1 -1
  118. package/dist/diff_tool/app/dist/assets/{glsl-BAqforx_.js → glsl-NA0icwbY.js} +1 -1
  119. package/dist/diff_tool/app/dist/assets/gn-CAXYAgV-.js +1 -0
  120. package/dist/diff_tool/app/dist/assets/{graphql-DuE1RMyL.js → graphql-0_dOlfV0.js} +1 -1
  121. package/dist/diff_tool/app/dist/assets/{hack-CHBcXjz1.js → hack-D-mr7l1l.js} +1 -1
  122. package/dist/diff_tool/app/dist/assets/{haml-DAs2z3tD.js → haml-B0-oQmz7.js} +1 -1
  123. package/dist/diff_tool/app/dist/assets/handlebars-Yq9bXpWN.js +1 -0
  124. package/dist/diff_tool/app/dist/assets/{html-D5co0BLD.js → html-B8bMmdRK.js} +1 -1
  125. package/dist/diff_tool/app/dist/assets/{html-derivative-BZaWEmAT.js → html-derivative-BpxSlQb_.js} +1 -1
  126. package/dist/diff_tool/app/dist/assets/{http-Cii5MjJE.js → http-hS_53mxt.js} +1 -1
  127. package/dist/diff_tool/app/dist/assets/{hurl-Bur-XdJO.js → hurl-B2ST1kwl.js} +1 -1
  128. package/dist/diff_tool/app/dist/assets/index-CBT_sNIz.js +340 -0
  129. package/dist/diff_tool/app/dist/assets/{java-DN39wI4w.js → java-D4mj0lZJ.js} +1 -1
  130. package/dist/diff_tool/app/dist/assets/{javascript-VUReF1H4.js → javascript-wC7rrKiV.js} +1 -1
  131. package/dist/diff_tool/app/dist/assets/{jinja-BcrfV1JB.js → jinja-DbQ3o87F.js} +1 -1
  132. package/dist/diff_tool/app/dist/assets/{jison-Bez5Mtmy.js → jison-CrE9FdvP.js} +1 -1
  133. package/dist/diff_tool/app/dist/assets/{json-ChV8m0Le.js → json-xjicDyWN.js} +1 -1
  134. package/dist/diff_tool/app/dist/assets/{jsx-D0SXNtM0.js → jsx-m28lXojQ.js} +1 -1
  135. package/dist/diff_tool/app/dist/assets/{julia-DvhpcBwG.js → julia-19xkOmop.js} +1 -1
  136. package/dist/diff_tool/app/dist/assets/{just-BGwe8S6x.js → just-Cf7OorTr.js} +1 -1
  137. package/dist/diff_tool/app/dist/assets/latex-DDb7GQOy.js +1 -0
  138. package/dist/diff_tool/app/dist/assets/{liquid-UdnqDjKz.js → liquid-DHOuQ0rf.js} +1 -1
  139. package/dist/diff_tool/app/dist/assets/{lua-CjDHeHEr.js → lua-BGyIvonw.js} +1 -1
  140. package/dist/diff_tool/app/dist/assets/luau-VGWVLoqX.js +1 -0
  141. package/dist/diff_tool/app/dist/assets/marko-DB5OqI1C.js +1 -0
  142. package/dist/diff_tool/app/dist/assets/{mdc-BOLj6Oyq.js → mdc-DTyNMupO.js} +1 -1
  143. package/dist/diff_tool/app/dist/assets/monokai-BscAjiQZ.js +1 -0
  144. package/dist/diff_tool/app/dist/assets/moonbit-D9W784E_.js +1 -0
  145. package/dist/diff_tool/app/dist/assets/nextflow-CSgcYZcx.js +1 -0
  146. package/dist/diff_tool/app/dist/assets/{nextflow-groovy-DJMQeKeT.js → nextflow-groovy-D7IRt6Pp.js} +1 -1
  147. package/dist/diff_tool/app/dist/assets/{nginx-5r5xPc2T.js → nginx-DfF0fMYD.js} +1 -1
  148. package/dist/diff_tool/app/dist/assets/{nim-9exKQYMz.js → nim-BbwsXuZD.js} +1 -1
  149. package/dist/diff_tool/app/dist/assets/nushell--0fT3PI1.js +1 -0
  150. package/dist/diff_tool/app/dist/assets/one-dark-pro-C6YyR8OD.js +1 -0
  151. package/dist/diff_tool/app/dist/assets/{org-B2fpAlbt.js → org-BkOBBl1f.js} +1 -1
  152. package/dist/diff_tool/app/dist/assets/{perl-DV2fcwyY.js → perl-BTXTOl4K.js} +1 -1
  153. package/dist/diff_tool/app/dist/assets/php-DIMVQWiA.js +1 -0
  154. package/dist/diff_tool/app/dist/assets/{powershell-CCSX75yM.js → powershell-QtSnmXcu.js} +1 -1
  155. package/dist/diff_tool/app/dist/assets/{pug-DuKcQxFj.js → pug-B_nrb4dJ.js} +1 -1
  156. package/dist/diff_tool/app/dist/assets/{qml-C16b4SYx.js → qml-1PXi8G8Z.js} +1 -1
  157. package/dist/diff_tool/app/dist/assets/{r-B1ZldnJf.js → r-CJrAkc2Z.js} +1 -1
  158. package/dist/diff_tool/app/dist/assets/{razor-TYmslaAB.js → razor-DgPUftNd.js} +1 -1
  159. package/dist/diff_tool/app/dist/assets/red-CYlAq2b0.js +1 -0
  160. package/dist/diff_tool/app/dist/assets/{regexp-dWCffmDD.js → regexp-C2hS8XvL.js} +1 -1
  161. package/dist/diff_tool/app/dist/assets/{rst-DEkLr2YR.js → rst-CDouhKnc.js} +1 -1
  162. package/dist/diff_tool/app/dist/assets/{ruby-BJnJzr4u.js → ruby-CAjKW1uO.js} +1 -1
  163. package/dist/diff_tool/app/dist/assets/rust-DpiIf5JO.js +1 -0
  164. package/dist/diff_tool/app/dist/assets/{sas-DeRsDbUE.js → sas-qAHkHLc1.js} +1 -1
  165. package/dist/diff_tool/app/dist/assets/{scss-SGV_CwKm.js → scss-Bfx2Ydid.js} +1 -1
  166. package/dist/diff_tool/app/dist/assets/{shellscript-BI7khmmR.js → shellscript-Bu76R8y2.js} +1 -1
  167. package/dist/diff_tool/app/dist/assets/{shellsession-Nupw_Vvw.js → shellsession-BU8BL0oL.js} +1 -1
  168. package/dist/diff_tool/app/dist/assets/solarized-dark-b97czJOk.js +1 -0
  169. package/dist/diff_tool/app/dist/assets/solarized-light-DFPxpIYQ.js +1 -0
  170. package/dist/diff_tool/app/dist/assets/{soy-B96cBzxv.js → soy-FRl8ozP-.js} +1 -1
  171. package/dist/diff_tool/app/dist/assets/sql-BacQgsEs.js +1 -0
  172. package/dist/diff_tool/app/dist/assets/{stata-Dnq48cE6.js → stata-B9kkG-ET.js} +1 -1
  173. package/dist/diff_tool/app/dist/assets/{surrealql-D6lw4TiD.js → surrealql-qvETr7iY.js} +1 -1
  174. package/dist/diff_tool/app/dist/assets/{svelte-ChVoq9tB.js → svelte-B0z1MgHc.js} +1 -1
  175. package/dist/diff_tool/app/dist/assets/{templ-Dh1EXuHD.js → templ-DTnPshKb.js} +1 -1
  176. package/dist/diff_tool/app/dist/assets/{tex-KTYusNFe.js → tex-Cosab9_H.js} +1 -1
  177. package/dist/diff_tool/app/dist/assets/{ts-tags-DC2RU1_R.js → ts-tags-DNYvLFUH.js} +1 -1
  178. package/dist/diff_tool/app/dist/assets/{tsx-DtIM39Jy.js → tsx-Dstq6j1a.js} +1 -1
  179. package/dist/diff_tool/app/dist/assets/twig-BzqZdwaX.js +1 -0
  180. package/dist/diff_tool/app/dist/assets/{typescript-BGAE5iuw.js → typescript-YOQ_oE25.js} +1 -1
  181. package/dist/diff_tool/app/dist/assets/typespec-BGhR2SqG.js +1 -0
  182. package/dist/diff_tool/app/dist/assets/{typst-nWoGZ22y.js → typst-DTffwfpc.js} +1 -1
  183. package/dist/diff_tool/app/dist/assets/{vue-iyHf-l4z.js → vue-D4OMj_C5.js} +1 -1
  184. package/dist/diff_tool/app/dist/assets/{vue-html-prNdIjLu.js → vue-html-kT4WrHGK.js} +1 -1
  185. package/dist/diff_tool/app/dist/assets/{vue-vine-KSSlnVeg.js → vue-vine-CxeapeMO.js} +1 -1
  186. package/dist/diff_tool/app/dist/assets/{xml-DdCC83Xd.js → xml-DWVpuurg.js} +1 -1
  187. package/dist/diff_tool/app/dist/assets/{xsl-DSqZxsez.js → xsl-C0ciup5a.js} +1 -1
  188. package/dist/diff_tool/app/dist/assets/{yaml-CZcBUWvf.js → yaml-98Fvyfpc.js} +1 -1
  189. package/dist/diff_tool/app/dist/index.html +1 -1
  190. package/dist/execution/execution_environment.js.map +1 -1
  191. package/dist/execution/fly_sprite_execution_environment.js +5 -10
  192. package/dist/execution/fly_sprite_execution_environment.js.map +1 -1
  193. package/dist/execution/tool_backend_execution_environment.js +0 -2
  194. package/dist/execution/tool_backend_execution_environment.js.map +1 -1
  195. package/dist/host/execution_runtime.js +5 -4
  196. package/dist/host/execution_runtime.js.map +1 -1
  197. package/dist/host/hosted_ephemeral_agent_session.js +0 -2
  198. package/dist/host/hosted_ephemeral_agent_session.js.map +1 -1
  199. package/dist/host/local_session_host.js +15 -31
  200. package/dist/host/local_session_host.js.map +1 -1
  201. package/dist/main.js +14 -29
  202. package/dist/main.js.map +1 -1
  203. package/dist/protocol/session_protocol.d.ts +3 -6
  204. package/dist/protocol/session_protocol.js +3 -6
  205. package/dist/protocol/session_protocol.js.map +1 -1
  206. package/dist/sdk/local_client.js +3 -3
  207. package/dist/sdk/local_client.js.map +1 -1
  208. package/dist/store/session_snapshot_migrations.js +28 -1
  209. package/dist/store/session_snapshot_migrations.js.map +1 -1
  210. package/dist/tui/session_chat_app.js +2 -4
  211. package/dist/tui/session_chat_app.js.map +1 -1
  212. package/dist/tui/session_chat_controller.js +10 -1
  213. package/dist/tui/session_chat_controller.js.map +1 -1
  214. package/package.json +8 -8
  215. package/dist/diff_tool/app/dist/assets/beancount-D-usSTwE.js +0 -1
  216. package/dist/diff_tool/app/dist/assets/coq-DuBRPxYg.js +0 -1
  217. package/dist/diff_tool/app/dist/assets/csharp-oqKa8noW.js +0 -1
  218. package/dist/diff_tool/app/dist/assets/css-BQflXFb6.js +0 -1
  219. package/dist/diff_tool/app/dist/assets/dart-CnvKMtbv.js +0 -1
  220. package/dist/diff_tool/app/dist/assets/dotenv-_5a1GRtc.js +0 -1
  221. package/dist/diff_tool/app/dist/assets/emacs-lisp-c_oH4hRZ.js +0 -1
  222. package/dist/diff_tool/app/dist/assets/gn-ilITqXS6.js +0 -1
  223. package/dist/diff_tool/app/dist/assets/handlebars-CfAla6QK.js +0 -1
  224. package/dist/diff_tool/app/dist/assets/index-CZUi_I-p.js +0 -340
  225. package/dist/diff_tool/app/dist/assets/latex-pWSag83P.js +0 -1
  226. package/dist/diff_tool/app/dist/assets/luau-C2pBCSgt.js +0 -1
  227. package/dist/diff_tool/app/dist/assets/marko-yLX6iW68.js +0 -1
  228. package/dist/diff_tool/app/dist/assets/monokai-B_bV9PQ9.js +0 -1
  229. package/dist/diff_tool/app/dist/assets/moonbit-DgjMoLWr.js +0 -1
  230. package/dist/diff_tool/app/dist/assets/nextflow-BJtWHP5T.js +0 -1
  231. package/dist/diff_tool/app/dist/assets/nushell-DHYfO66s.js +0 -1
  232. package/dist/diff_tool/app/dist/assets/one-dark-pro-CLwyXe_n.js +0 -1
  233. package/dist/diff_tool/app/dist/assets/php-D-AthX_E.js +0 -1
  234. package/dist/diff_tool/app/dist/assets/red-DX1BQOs8.js +0 -1
  235. package/dist/diff_tool/app/dist/assets/rust-Cfkwpbl8.js +0 -1
  236. package/dist/diff_tool/app/dist/assets/solarized-dark-UdsmMDCL.js +0 -1
  237. package/dist/diff_tool/app/dist/assets/solarized-light-C1IUL_tW.js +0 -1
  238. package/dist/diff_tool/app/dist/assets/sql-CsIdKfaO.js +0 -1
  239. package/dist/diff_tool/app/dist/assets/twig-C6D_TA3n.js +0 -1
  240. package/dist/diff_tool/app/dist/assets/typespec-BRdr0IET.js +0 -1
@@ -0,0 +1,165 @@
1
+ # OpenRouter
2
+
3
+ `tau tool openrouter` provides standalone, single-request utilities for typed decisions and text or media understanding. They work from a shell inside or outside Tau, without a session, persona, conversation, tools, or session accounting. Only explicitly supplied content is sent to OpenRouter and its selected provider. Judgments are advisory model output, not a security or permission boundary.
4
+
5
+ ## Credentials and requirements
6
+
7
+ Install Tau and configure `OPENROUTER_API_KEY`, or put `apiKeys.openrouter` in the global `~/.config/tau/config.json` on the machine running the command. A nonblank environment key takes precedence. Project configuration cannot supply API keys. There is no key flag.
8
+
9
+ Tau's local Bash removes inherited credential-shaped environment variables. When invoking through Bash, configure the key on that machine through global configuration or its own supported environment setup. See [credentials](credentials.md) and [tools](tools.md).
10
+
11
+ Audio and video require `ffprobe` from FFmpeg on `PATH`: `brew install ffmpeg` on macOS or `apt install ffmpeg` on Debian/Ubuntu. Text and images do not require FFmpeg. Media is validated locally, not transcoded.
12
+
13
+ ```sh
14
+ tau tool openrouter --help
15
+ tau tool openrouter decisions --help
16
+ tau tool openrouter chat --help
17
+ tau tool openrouter decisions --list-models
18
+ tau tool openrouter chat --list-models
19
+ ```
20
+
21
+ Help and model listing require neither credentials nor network access and never read stdin. `--list-models` is a separate mode, incompatible with request flags, and prints one JSON object containing `models`, with each model's `id`, `inputs`, `reasoning` settings, and `role` guidance. `--help` and `-h` print text help.
22
+
23
+ ## Fixed model choices
24
+
25
+ An actual request requires an exact `--model` ID from this table. There is no default, arbitrary-ID escape hatch, live discovery, refresh, or automatic model substitution. A versioned ID is not necessarily an immutable provider snapshot; output records the returned model separately.
26
+
27
+ | Operation | Model | Inputs and suggested role | Reasoning efforts |
28
+ | --- | --- | --- | --- |
29
+ | `decisions` | `typesafe/jev-1.13` | Structured state and questions; classification, scoring, verification with probabilities | Not supported |
30
+ | `chat` | `google/gemini-3.8-flash` | Text, images, audio, video; first choice for audio/video and image-heavy analysis | `low`, `medium`, `high` |
31
+ | `chat` | `openai/gpt-6-luna` | Text and images; cheap everyday extraction, summarization, and routine questions | `none`, `low`, `medium`, `high`, `xhigh`, `max` |
32
+ | `chat` | `openai/gpt-6.1-sol` | Text and images; coding, debugging, technical reasoning | `low`, `medium`, `high`, `xhigh`, `max` |
33
+ | `chat` | `anthropic/claude-opus-5.5` | Text and images; premium generalist for writing, synthesis, difficult reasoning, and second opinions | `low`, `medium`, `high`, `xhigh`, `max` |
34
+
35
+ Roles are selection guidance, not benchmark guarantees or restrictions on tasks. Unsupported settings and modalities fail locally rather than switching models, transcribing audio, or extracting video frames.
36
+
37
+ ## Input and examples
38
+
39
+ ### Decisions
40
+
41
+ ```sh
42
+ tau tool openrouter decisions --model typesafe/jev-1.13 --input ./decision.json
43
+ ```
44
+
45
+ `--input` is required. A file path reads a UTF-8 JSON document. Exactly `--input -` reads one complete document from stdin until EOF:
46
+
47
+ ```sh
48
+ tau tool openrouter decisions --model typesafe/jev-1.13 --input - <<'JSON'
49
+ {
50
+ "state": { "ticket": "The checkout page crashes when I click Pay." },
51
+ "questions": {
52
+ "is_bug": {
53
+ "type": "noul",
54
+ "instructions": "Does this report describe broken product behavior?"
55
+ },
56
+ "team": {
57
+ "type": "choice",
58
+ "instructions": "Which team should own this ticket?",
59
+ "criteria": {
60
+ "payments": "Checkout or billing problems",
61
+ "other": "Problems unrelated to payments"
62
+ }
63
+ },
64
+ "urgency": {
65
+ "type": "score",
66
+ "instructions": "How urgent is the issue?",
67
+ "criteria": ["Can wait", "Fix soon", "Blocking revenue"]
68
+ }
69
+ }
70
+ }
71
+ JSON
72
+ ```
73
+
74
+ Stdin must not be a terminal and must reach EOF within 30 seconds. Empty input, malformed JSON, multiple documents, invalid UTF-8, and oversized input fail before any request.
75
+
76
+ The input contains exactly `state` and `questions`. The model belongs only in `--model`, not the document. `state` is a string, JSON object, or array. `questions` is a nonempty map of nonempty names to questions:
77
+
78
+ - `noul`: required `instructions`; optional `criteria` with both `true` and `false`. The answer's `noul` is a probability from zero to one, not a boolean.
79
+ - `choice`: required `instructions` and a nonempty `criteria` object mapping category names to guidance. The answer's `choice` names a supplied category; optional `probabilities` and `confidence` retain provider probabilities.
80
+ - `score`: required `instructions` and a nonempty ordered `criteria` array. The answer's `score` is a numeric position from zero to the last rubric index, possibly fractional. Optional `legend`, `probabilities`, and `confidence` retain distribution details.
81
+
82
+ Instructions and criterion guidance accept strings, JSON objects, or arrays; choice criterion values may also be `null`. Unknown question fields and the reserved question/category name `__proto__` are rejected. Arbitrary keys within state and guidance are preserved. Several independent questions can share one state; dependent questions require separate calls.
83
+
84
+ The command posts once to OpenRouter's alpha Decisions endpoint. It validates answer names, types, categories, rubric ranges, and probability bounds. Successful output is one JSON object:
85
+
86
+ ```json
87
+ {
88
+ "requested_model": "typesafe/jev-1.13",
89
+ "model": "typesafe/jev-1.13-20260917",
90
+ "answers": { "is_bug": { "type": "noul", "noul": 0.96 } },
91
+ "usage": { "input_tokens": 100, "output_tokens": 10, "cost": 0.00001 }
92
+ }
93
+ ```
94
+
95
+ This illustrates a single-question response; every submitted question must have an answer. Provider `id` and `provider` are included when supplied. Usage contains reported token counts and optional reported cost, never an estimated cost. Negative judgments and low confidence still exit successfully. No thresholds or prose explanations are invented.
96
+
97
+ ### Chat
98
+
99
+ ```sh
100
+ tau tool openrouter chat \
101
+ --model openai/gpt-6.1-sol \
102
+ --system 'Review carefully. Separate observations from assumptions.' \
103
+ --prompt-file ./review-context.txt \
104
+ --image ./error.png \
105
+ --reasoning high
106
+ ```
107
+
108
+ Flags belong after `chat`. No positional arguments are accepted.
109
+
110
+ | Flag | Contract |
111
+ | --- | --- |
112
+ | `--model <id>` | Required exact shipped chat model ID |
113
+ | `--prompt <text>` or `--prompt-file <path>` | Exactly one required; nonblank UTF-8 user prompt |
114
+ | `--system <text>` or `--system-file <path>` | Optional, mutually exclusive, nonblank explicit system instructions |
115
+ | `--image <path>` | Repeatable local PNG, JPEG, or WebP image |
116
+ | `--audio <path>` | Repeatable local WAV or MP3 audio; Gemini only |
117
+ | `--video <path>` | Local MP4 video; Gemini only |
118
+ | `--reasoning <effort>` | Optional model-supported effort from the table |
119
+
120
+ All file paths resolve relative to the invoking working directory. Prompt/system files name regular files; `-` has special stdin meaning only for decisions. Omitting system instructions sends no system message. Omitting reasoning leaves that parameter to the provider, not necessarily disabled. Effort does not request a written reasoning trace.
121
+
122
+ Media flags may be mixed; the request contains the prompt first, followed by attachments in command-line order. Files are embedded inline as data URLs or base64 audio, not uploaded to public hosting. There are no remote URL inputs, generated media, automatic resizing, clipping, conversion, chunking, conversation history, or tool execution.
123
+
124
+ ```sh
125
+ tau tool openrouter chat \
126
+ --model google/gemini-3.8-flash \
127
+ --prompt 'Compare this recording with the reference and spoken requirements.' \
128
+ --video ./recording.mp4 \
129
+ --image ./reference.png \
130
+ --audio ./requirements.wav > ./analysis.json
131
+ ```
132
+
133
+ Chat sends one non-streaming completion request. It imposes no output token cap: neither `max_tokens` nor `max_completion_tokens` is sent, and there is no `--max-tokens` flag. Provider defaults, remaining context, and model limits still apply; omission does not mean unlimited output.
134
+
135
+ Successful stdout contains one JSON object with `requested_model`, returned `model`, `answer` (text or `null`), and `finish_reason`. Reported `id`, `provider`, `usage` (including cost and token details), `native_finish_reason`, and `refusal` appear when supplied. Missing optional metadata is not fabricated. Reasoning is never substituted for the answer or returned as answer text.
136
+
137
+ - `stop` with no refusal is a complete answer.
138
+ - `length` is truncated output, even if answer text is empty.
139
+ - `content_filter` or a nonempty `refusal` indicates refusal, not a complete answer.
140
+
141
+ These are successful exchanges with distinguishable outcomes; scripts must inspect them. Provider errors, malformed responses, unexpected tool calls, and a normal stop with neither answer nor refusal fail instead of masquerading as an answer.
142
+
143
+ ## Outputs and recovery
144
+
145
+ These are conservative utility safety limits, not promises of every provider's maximum capacity. All byte limits use decimal bytes.
146
+
147
+ | Resource | Limit |
148
+ | --- | --- |
149
+ | Decisions JSON, each prompt or system input | 1,000,000 UTF-8 bytes |
150
+ | Attachments per request | 16 total, including at most 4 audio files and 1 video |
151
+ | Each image | 5,000,000 bytes, 8,000 pixels per edge, 32 megapixels; one frame |
152
+ | Each audio or video | 12,000,000 bytes |
153
+ | Audio formats | Single-stream PCM 16-bit little-endian WAV or MP3 |
154
+ | Video format | H.264 MP4 up to 3840×2160 with optional AAC audio |
155
+ | Audio/video duration | Known positive duration; 600 seconds combined |
156
+ | Complete encoded JSON request | 20,000,000 bytes, including base64 expansion and text |
157
+ | Response | 8,000,000 bytes |
158
+ | Local media probe | 15 seconds per file |
159
+ | HTTP request and response | 10 minutes |
160
+
161
+ Oversized or unsupported inputs fail before sending. Audio/video validation uses private temporary copies of the exact bytes being submitted and removes those copies after probing. Keep FFmpeg current when handling untrusted media.
162
+
163
+ Diagnostics go to stderr and failures exit nonzero. Authentication, insufficient credits, permission failures, rate limits, and provider/service failures report distinct status diagnostics without dumping provider bodies. There are no automatic retries, including after timeouts or interrupted connections: the provider may already have charged for an unknown outcome. A response exceeding the safety bound can fail after a billable request.
164
+
165
+ No paid inference compatibility guarantee follows from local validation. OpenRouter's alpha Decisions contract and provider availability can change independently of Tau. Review the actual output and current service errors rather than treating model judgments as verified facts.
@@ -22,7 +22,7 @@ The intrinsic `tau_docs` tool is also host-owned. It reads documentation package
22
22
 
23
23
  ### Execution environment
24
24
 
25
- The **execution environment** is the machine the agent can act on. It owns the agent-visible working directory (`cwd`), home, platform, environment, filesystem, processes, project repository, project configuration and content, `AGENTS.md` files, model overlays, skills, and command resolution.
25
+ The **execution environment** is the machine the agent can act on. It owns the agent-visible working directory (`cwd`), home, platform, environment, filesystem, processes, project repository, project configuration and content, `AGENTS.md` files, skills, and command resolution.
26
26
 
27
27
  Tau asks the execution environment to read or execute against those resources. The host must not treat its own filesystem as a shortcut, even when a local execution environment happens to share it.
28
28
 
@@ -52,9 +52,9 @@ A Fly Sprite can place the execution environment on another target while the hos
52
52
  | Resource or behavior | Canonical owner | Consequence |
53
53
  | --- | --- | --- |
54
54
  | Agent `cwd`, home, repository, files, and commands | Execution environment | Use target paths in prompts, `session.create`, and agent tool calls. |
55
- | `.tau/config.json`, `.tau/models.json`, personas, prompts, skills, and `AGENTS.md` used by a session | Execution environment | Edit them on the target and relative to the session `cwd`. |
55
+ | `.tau/config.json`, personas, prompts, skills, and `AGENTS.md` used by a session | Execution environment | Edit them on the target and relative to the session `cwd`. |
56
56
  | Global runtime content for a session | Execution-environment home | `~/.config/tau` is the target user's home when runtime content is collected. |
57
- | Model and host-tool credentials | Host | Set environment secrets where the host process runs. Runtime `apiKeys` may be loaded from execution-environment config and consumed by the host. |
57
+ | Model and host-tool credentials | Host | Set environment secrets where the host process runs. API keys come from the host environment or private global host configuration. |
58
58
  | Codex OAuth accounts | Host home | Run `tau auth …` on the host machine. Do not edit auth storage. |
59
59
  | Session snapshots | Host home | Local defaults live under the host's Tau config directory. Do not edit session files. |
60
60
  | Local transcript history and remote history outbox | Host home | History follows the host, not an attached TUI or execution target. |
@@ -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 and skills. 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. 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 subagent supervision tools.
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 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
 
@@ -44,7 +44,7 @@ These locations belong to the execution environment. An attached TUI does not co
44
44
 
45
45
  ## Persona file contract
46
46
 
47
- A persona is Markdown with YAML frontmatter. `id`, `provider`, and `model` are required. The Markdown body is the persona's base system prompt.
47
+ A persona is Markdown with YAML frontmatter. `id`, `provider`, and `model` are required. A non-empty Markdown body is required and supplies the persona's own base system prompt.
48
48
 
49
49
  ```markdown
50
50
  ---
@@ -58,8 +58,6 @@ allowedReasoningLevels:
58
58
  - medium
59
59
  - high
60
60
  - xhigh
61
- skills:
62
- - release-check
63
61
  tools:
64
62
  - bash
65
63
  - write
@@ -82,22 +80,20 @@ The frontmatter must be a YAML object between valid delimiters. Unknown fields a
82
80
  | `provider` | Non-empty provider ID from the installed [model catalog](models.md). |
83
81
  | `model` | Non-empty model ID for that provider. The ID may be unbundled when the provider is known. |
84
82
 
85
- `provider` and `model` are required even when the persona extends a built-in. Tau does not inherit them because selecting a model is the persona's central explicit contract.
83
+ Each custom persona is self-contained: it supplies its provider, model, prompt, and optional settings.
86
84
 
87
85
  ### Optional fields
88
86
 
89
87
  | Field | Contract |
90
88
  | --- | --- |
91
- | `extends` | ID of a shipped built-in persona whose optional behavior is used as a base. |
92
- | `label` | Display label. A blank or omitted label falls back to the base label or `custom`. |
89
+ | `label` | Display label. A blank or omitted label falls back to `custom`. |
93
90
  | `description` | Short catalog description. |
94
91
  | `reasoning` | Default effort: `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, or `max`. |
95
92
  | `serviceTier` | `priority` or `flex`. Currently meaningful for `openai` and `openai-codex`. |
96
93
  | `allowedReasoningLevels` | Array of reasoning efforts offered by the TUI selector. |
97
- | `skills` | `"*"`, a list of discovered skill names, or `[]`. |
98
94
  | `tools` | Explicit list of persona-controlled tools. |
99
95
 
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.
96
+ Every persona exposes all discovered skills. If a custom persona 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.
101
97
 
102
98
  The persona-controlled tool names are:
103
99
 
@@ -106,32 +102,6 @@ The persona-controlled tool names are:
106
102
 
107
103
  An explicit `tools` array replaces defaults. Names are normalized to lowercase, duplicates are removed, and unknown names reject the persona. `tools: []` leaves the persona without these persona-controlled tools. Some host capabilities, such as goal management, are supplied independently of this list. Listing `nook` does not make it usable without effective Nook configuration. Listing `mcp` requires enabled MCP servers configured on the host. [Tools](tools.md) explains eligibility and ownership.
108
104
 
109
- ## Extending a built-in
110
-
111
- `extends` reuses one shipped built-in persona as a base while still requiring an explicit provider and model:
112
-
113
- ```markdown
114
- ---
115
- id: concise-haiku-coder
116
- extends: opus-5.5-coder
117
- provider: anthropic
118
- model: claude-haiku-4-5
119
- reasoning: low
120
- ---
121
- ```
122
-
123
- Because the body is empty, this persona inherits the built-in's base prompt. It also inherits the base label, description, settings not explicitly overridden, allowed reasoning levels, skills, tools, and subagent map.
124
-
125
- Important boundaries are:
126
-
127
- - `extends` resolves shipped built-ins, not another custom persona.
128
- - Lookup of the built-in ID is case-insensitive.
129
- - A non-empty Markdown body replaces the inherited base prompt.
130
- - Explicit `skills` or `tools` replaces the inherited selection.
131
- - `reasoning` and `serviceTier` override their individual inherited settings; omitted settings remain inherited.
132
-
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.
134
-
135
105
  ## Selecting a persona
136
106
 
137
107
  `defaultPersona` in `config.json` selects the startup default. It accepts an exact persona ID or an ID plus reasoning override:
@@ -166,13 +136,13 @@ The TUI resolves that command against the session catalog case-insensitively. `C
166
136
 
167
137
  `allowedReasoningLevels` controls which values the TUI cycles for that persona. It is a presentation allowlist, not a protocol-level prohibition. When omitted, the TUI offers the standard reasoning enum for a reasoning-capable model. For a model whose catalog entry says `reasoning: false`, the selector resolves to `none`.
168
138
 
169
- An empty `allowedReasoningLevels` does not create an empty selector. For an extending persona it falls back to inherited levels; otherwise the TUI uses its normal model-aware choices.
139
+ An empty `allowedReasoningLevels` does not create an empty selector. The TUI uses its normal model-aware choices.
170
140
 
171
141
  `serviceTier` is passed with supported OpenAI and OpenAI Codex requests. `priority` requests the provider's priority service and `flex` requests flex service. Availability, billing, and rejection behavior remain provider-account concerns. Other providers do not currently use this setting.
172
142
 
173
143
  ## Reloading changes
174
144
 
175
- Run `/reload` while the TUI session is idle after editing personas, `models.json`, skills, or project context. Reload re-discovers the effective catalog and rebuilds the current session prompt and tools.
145
+ Run `/reload` while the TUI session is idle after editing personas, skills, or project context. Reload re-discovers the effective catalog and rebuilds the current session prompt and tools.
176
146
 
177
147
  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.
178
148
 
@@ -183,12 +153,10 @@ A reload does not alter a turn already in progress, and the TUI refuses the oper
183
153
  An invalid persona is skipped and reported as a configuration warning. Other valid personas still load. Frequent causes are:
184
154
 
185
155
  - malformed YAML, missing frontmatter delimiters, or frontmatter that is not an object;
186
- - missing `id`, `provider`, or `model`;
156
+ - missing `id`, `provider`, `model`, or a non-empty prompt body;
187
157
  - an `id` that does not exactly match the filename;
188
158
  - an unknown provider or an unresolved model;
189
- - an `extends` target that is not a shipped built-in;
190
159
  - an invalid reasoning effort or service tier;
191
- - `skills` that is neither `"*"` nor a string list, or contains a blank entry;
192
160
  - an unknown persona tool.
193
161
 
194
162
  `/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.
@@ -1,8 +1,8 @@
1
1
  # Prompts and project context
2
2
 
3
- Tau has several ways to provide instructions or reusable text, and they enter a session at different points. Prompt templates fill the editor on demand. `AGENTS.md` files provide standing project instructions. Additional context files extend that `AGENTS.md` set. Leading hidden system blocks attach model-facing instructions to one user message.
3
+ Tau has several ways to provide instructions or reusable text, and they enter a session at different points. Prompt templates fill the editor on demand. `AGENTS.md` files provide standing project instructions. Leading hidden system blocks attach model-facing instructions to one user message.
4
4
 
5
- These mechanisms do not choose models or tool access. [Personas](personas.md) own the base system prompt, model settings, skill selection, and tool allowlist. Model-specific system notices are configured separately in the [configuration reference](config-reference.md).
5
+ These mechanisms do not choose models or tool access. [Personas](personas.md) own the base system prompt, model settings and tool allowlist. Model-specific system notices are configured separately in the [configuration reference](config-reference.md).
6
6
 
7
7
  ## Prompt templates fill the editor
8
8
 
@@ -17,27 +17,19 @@ Tau discovers prompt files from:
17
17
 
18
18
  The global location is in scope only when the execution-environment working directory is inside its home directory. Tau walks project levels from the working directory toward home, or toward the filesystem root when outside home. The nearest project definition wins over parent and global definitions. Prompt IDs are compared case-insensitively for precedence and lookup.
19
19
 
20
- A prompt file needs YAML frontmatter with an `id` that exactly matches its filename without `.md`:
20
+ A prompt's ID is its filename without `.md`. Each file requires YAML frontmatter with a non-empty display `label`. For example, `release-summary.md`:
21
21
 
22
22
  ```markdown
23
23
  ---
24
- id: release-summary
25
24
  label: release summary
26
- description: Summarize changes for a release announcement.
27
25
  ---
28
26
 
29
27
  Summarize the changes since the previous release. Separate user-visible changes from internal maintenance, and call out any migration steps.
30
28
  ```
31
29
 
32
- The fields are:
30
+ The required `label` appears in TUI autocomplete and the Telegram prompt picker. Unknown frontmatter fields are discarded. The Markdown body is the text inserted into the editor.
33
31
 
34
- - `id`: required, non-empty, and exactly equal to the filename stem.
35
- - `label`: optional display label.
36
- - `description`: optional catalog and autocomplete description.
37
-
38
- Unknown fields are discarded. The Markdown body is the text inserted into the editor.
39
-
40
- Only files ending in lowercase `.md` are discovered. Invalid YAML, non-object frontmatter, a missing `id`, or an ID/filename mismatch causes Tau to skip the file and report a warning.
32
+ Only files ending in lowercase `.md` are discovered. Invalid YAML, non-object frontmatter, or a missing or invalid label causes Tau to skip the file and report a warning.
41
33
 
42
34
  ### Invoke a prompt
43
35
 
@@ -101,32 +93,6 @@ When scanning directly from the execution home, Tau also skips direct children m
101
93
 
102
94
  It additionally skips the direct `Library` child on macOS and `snap` on Linux. A project directory with one of these names is still scanned when it is not a direct child of home.
103
95
 
104
- The limits and exclusions apply only to automatic descendant discovery. They do not constrain explicitly configured context files.
105
-
106
- ## Add explicit context files
107
-
108
- `agentContextFiles` adds specific text files to the full injected context. The files can use any name:
109
-
110
- ```json
111
- {
112
- "agentContextFiles": ["docs/AI_GUIDE.md", "services/api/AGENTS.md"]
113
- }
114
- ```
115
-
116
- Paths are resolved from the level that declares them:
117
-
118
- - A global path in `~/.config/tau/config.json` is relative to home.
119
- - A project path in `<project>/.tau/config.json` is relative to `<project>`, the directory containing `.tau/`.
120
- - Absolute paths remain absolute.
121
-
122
- Values are additive across configuration levels, from global through the nearest project level. Tau resolves them to paths and removes exact duplicates while preserving order.
123
-
124
- An explicit path must resolve to a real file whose directory is an ancestor or descendant of the working directory. An in-home session cannot escape home through a path or symlink. Sibling files, missing files, and ineligible files are not injected.
125
-
126
- Explicit files bypass the automatic child scan's depth, directory-count, and excluded-directory rules. Tau still discovers only `AGENTS.md` automatically; every other filename must be configured explicitly.
127
-
128
- Use this setting when important project instructions live outside the ordinary `AGENTS.md` hierarchy. Every included file is sent to the model as project context, so do not include secrets or unrelated content.
129
-
130
96
  ## Disable project context
131
97
 
132
98
  Start Tau with:
@@ -135,7 +101,7 @@ Start Tau with:
135
101
  tau --no-agent-context-files
136
102
  ```
137
103
 
138
- This disables ancestor `AGENTS.md` injection, configured `agentContextFiles`, and the descendant paths-only scan. It does not disable personas, prompt templates, or [skills](skills.md).
104
+ This disables ancestor `AGENTS.md` injection and the descendant paths-only scan. It does not disable personas, prompt templates, or [skills](skills.md).
139
105
 
140
106
  The option applies to local TUI sessions and to hosts started with `tau serve`. For the Node SDK, `noAgentContextFiles: true` provides the same host-level behavior. An attached client cannot retroactively change how an existing remote host session was created.
141
107
 
@@ -146,10 +112,10 @@ A subagent normally inherits the parent session's working directory and composed
146
112
  The alternate directory controls:
147
113
 
148
114
  - target environment and repository metadata,
149
- - target applicable `AGENTS.md` and `agentContextFiles`,
150
- - target-discovered skills filtered by the parent persona.
115
+ - target applicable `AGENTS.md`,
116
+ - all target-discovered skills.
151
117
 
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.
118
+ The parent session remains the source of truth for the selected persona, model catalog, model settings, and tool policy. 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
119
 
154
120
  ## Leading hidden system blocks
155
121
 
@@ -176,4 +142,4 @@ tau --debug --persona release-coder
176
142
 
177
143
  Add `--no-agent-context-files` to verify the context-free variant. Debug mode is TUI startup functionality and is not available with `tau serve`.
178
144
 
179
- If expected context is missing, verify the execution-environment `cwd` and `home`, not just the attached client's current directory. Then check exact filenames, canonical path eligibility, configuration-level path bases, scan exclusions, and reload warnings. See [troubleshooting](troubleshooting.md) for broader diagnostics.
145
+ If expected context is missing, verify the execution-environment `cwd` and `home`, not just the attached client's current directory. Then check exact filenames, canonical path eligibility, scan exclusions, and reload warnings. See [troubleshooting](troubleshooting.md) for broader diagnostics.
@@ -105,19 +105,18 @@ The host process executes agent-visible filesystem and command operations on its
105
105
 
106
106
  ### Fly Sprite
107
107
 
108
- The host must already have a named API target in `flySprites.apis`, and the Sprite must already exist:
108
+ The host must already have a connection configured in `flySprites`, and the Sprite must already exist:
109
109
 
110
110
  ```sh
111
111
  tau attach \
112
112
  --new \
113
113
  --execution-kind fly-sprite \
114
- --fly-api production \
115
114
  --fly-sprite tau-build-7 \
116
115
  --cwd /home/sprite/tau \
117
116
  wss://tau.example.com
118
117
  ```
119
118
 
120
- `--fly-api` identifies host configuration. `--fly-sprite` names an existing Sprite. Tau does not provision it or prepare its repository.
119
+ `--fly-sprite` names an existing Sprite. Tau does not provision it or prepare its repository.
121
120
 
122
121
  Bridge URLs, API targets, home paths, and credential environment variables are host-owned [configuration](configuration.md). Session creation resolves Tau project configuration and content from the execution cwd through the selected environment. The execution environment itself remains a generic filesystem and process target; it does not own Tau’s configuration precedence or session policy.
123
122
 
@@ -146,7 +145,7 @@ An attached session spans three logical machines even when two happen to share o
146
145
  ### The execution environment owns
147
146
 
148
147
  - the agent-visible cwd, home, files, and repository
149
- - project `.tau` content, model overlays, prompts, skills, and AGENTS.md files
148
+ - project `.tau` content, prompts, skills, and AGENTS.md files
150
149
  - command execution, platform, PATH, and runtime dependencies
151
150
  - automatic-compaction archives and other target-side temporary files
152
151
 
@@ -158,15 +157,15 @@ Different changes have different owners:
158
157
 
159
158
  | Change | Action |
160
159
  | --- | --- |
161
- | Project config, model overlays, personas, prompts, skills, or AGENTS.md in the execution environment | Wait for idle, then run `/reload`. |
162
- | Effective model `apiKeys` in execution-environment or session configuration | Wait for idle, then run `/reload`; new sessions also resolve the current values. |
160
+ | Project config, personas, prompts, skills, or AGENTS.md in the execution environment | Wait for idle, then run `/reload`. |
161
+ | Global model `apiKeys` on the host | Restart the host. |
163
162
  | Managed Codex auth changed with `tau auth` | No host restart; auth storage is read again on later credential resolutions. |
164
163
  | Attaching themes, speech config, or configured client tools | Restart `tau attach`. |
165
164
  | Host process environment variables, history target, WebSocket listener, Fly API target, or host startup flags | Restart `tau serve`. |
166
165
  | Host Tau package, built-in tools, protocol, session recovery code, or built-in documentation | Upgrade and restart the host. |
167
166
  | TUI package, keybindings, rendering, local speech, or client-tool implementation | Upgrade and restart the attaching client. |
168
167
 
169
- `/reload` is a session operation. It asks the host to resolve session-owned content, including configured model `apiKeys`, from the execution environment and does not reload either process’s executable code or environment. Managed Codex auth storage is separate and is read again on later credential resolutions. For a long-running WebSocket host, restarting only the client cannot update the model-facing built-in docs or host tools. For an old client against a new host, restarting only the host cannot update local TUI behavior. See [credentials](credentials.md) for complete precedence and apply boundaries.
168
+ `/reload` is a session operation. It asks the host to resolve session-owned content, from the execution environment and does not reload either process’s executable code or environment. Managed Codex auth storage is separate and is read again on later credential resolutions. For a long-running WebSocket host, restarting only the client cannot update the model-facing built-in docs or host tools. For an old client against a new host, restarting only the host cannot update local TUI behavior. See [credentials](credentials.md) for complete precedence and apply boundaries.
170
169
 
171
170
  ## Reconnect and observe safely
172
171
 
@@ -22,26 +22,25 @@ Interruption, timeouts, output limits, and process-group termination bound execu
22
22
 
23
23
  ## Treat project content as executable policy
24
24
 
25
- The execution environment supplies more than source files. Tau can load project `.tau/config.json`, `.tau/models.json`, personas, prompts, skills, `.agents/skills`, and `AGENTS.md` from the working directory and its discovery path. This content can change model endpoints and headers, select tools, add instructions, define workflows, or alter which globally trusted client tools are advertised.
25
+ The execution environment supplies more than source files. Tau can load project `.tau/config.json`, personas, prompts, skills, `.agents/skills`, and `AGENTS.md` from the working directory and its discovery path. This content can select models and tools, add instructions, define workflows, or alter which globally trusted client tools are advertised.
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
29
  - persona system prompts, tool lists, and model launch allowlists;
30
30
  - skill instructions and any scripts they direct the agent to run;
31
- - model overlays that replace endpoints, headers, capabilities, or token limits;
32
31
  - project configuration that supplies API keys, Nook targets, model notices, or hosted-environment definitions;
33
32
  - `enabledClientTools`, which can select commands previously trusted in the user's global configuration; and
34
33
  - provision scripts or other repository automation used by integrations such as Telegram.
35
34
 
36
35
  Project configuration cannot define a command client-tool executable. It can only select definitions from global configuration. That restriction prevents a checkout from directly introducing a new client process, but it does not make a selected command harmless.
37
36
 
38
- `--no-agent-context-files` disables `AGENTS.md` and configured context injection. It does not disable project configuration, personas, skills, model overlays, or tools. `--no-client-tools` disables TUI-provided tools, not host tools. Use the appropriate control rather than treating either flag as a general safe mode.
37
+ `--no-agent-context-files` disables automatic `AGENTS.md` injection and descendant path discovery. It does not disable project configuration, personas, skills, or tools. `--no-client-tools` disables TUI-provided tools, not host tools. Use the appropriate control rather than treating either flag as a general safe mode.
39
38
 
40
39
  Prompt templates are inserted into the editor for review rather than submitted automatically. Leading `<system>` blocks, persona prompts, model notices, and committed session messages are model-facing and may become durable session content. Do not place secrets in instructions, prompts, or model notices.
41
40
 
42
41
  ## Trust remote model metadata as routing configuration
43
42
 
44
- A model-owning Tau host refreshes compatible provider catalogs from `pi.dev` and caches them in `~/.config/tau/models-store.json`. This is a trusted software-update channel, not informational discovery: a remote model record can replace its API adapter, endpoint, headers, compatibility behavior, limits, and pricing before execution-environment `models.json` overlays are applied. Compromise or misconfiguration of that service could redirect provider requests and credentials. Set `TAU_OFFLINE` to disable automatic catalog requests, and use a reviewed `models.json` overlay when a provider must stay on a fixed endpoint.
43
+ A model-owning Tau host refreshes compatible provider catalogs from `pi.dev` and caches them in `~/.config/tau/models-store.json`. This is a trusted software-update channel, not informational discovery: a remote model record can replace its API adapter, endpoint, headers, compatibility behavior, limits, and pricing. Compromise or misconfiguration of that service could redirect provider requests and credentials. Set `TAU_OFFLINE` to disable automatic catalog requests.
45
44
 
46
45
  ## Keep secrets with the process that needs them
47
46
 
@@ -53,7 +52,7 @@ Prefer host process environment variables or private global configuration over p
53
52
 
54
53
  Never put credentials in:
55
54
 
56
- - committed `.tau/config.json` or `.tau/models.json` files;
55
+ - committed project files;
57
56
  - persona, prompt, skill, `AGENTS.md`, or model-notice text;
58
57
  - Bash command lines likely to enter shell history or process listings;
59
58
  - tool results, session messages, issue comments, or debug output; or
@@ -65,7 +65,6 @@ params: {
65
65
  | { kind: "local"; cwd: string; env?: Record<string, string> }
66
66
  | {
67
67
  kind: "fly-sprite";
68
- apiId: string;
69
68
  spriteName: string;
70
69
  cwd: string;
71
70
  };
@@ -18,7 +18,7 @@ The server sends `ready` as its first message:
18
18
 
19
19
  ```json
20
20
  {
21
- "version": 15,
21
+ "version": 16,
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": 15,
33
+ "version": 16,
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": 15,
53
+ "version": 16,
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": 15,
67
+ "version": 16,
68
68
  "type": "response",
69
69
  "id": "req-42",
70
70
  "ok": true,
@@ -101,13 +101,15 @@ Observation controls delivery, not session ownership. `session.unobserve` stops
101
101
  | `lifecycle` | `idle` or `running`. |
102
102
  | `agentState` | Independent agent revision, model context key, and optional usage checkpoint. |
103
103
  | `goal`, `settings`, `costTotal` | Current goal, persona and reasoning settings, and accumulated session cost. |
104
- | `bootstrap`, `catalog` | Selected model and prompt metadata plus available personas, prompt metadata, and skills. |
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. |
107
107
  | `timeline` | Ordered active transcript placement. |
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
+ `catalog.mcpServers` lists enabled MCP server names from the host configuration. It does not indicate live connections; servers connect lazily when used. Only names are exposed, not connection settings or credentials.
112
+
111
113
  `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
114
 
113
115
  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.
@@ -130,7 +132,7 @@ Observed snapshot changes arrive as `session.delta`:
130
132
 
131
133
  ```json
132
134
  {
133
- "version": 15,
135
+ "version": 16,
134
136
  "type": "session.delta",
135
137
  "sessionId": "0195d6e4-4cf9-7f44-a2d8-f8f7f49ee9d3",
136
138
  "fromRevision": 8,
@@ -168,7 +170,7 @@ Not all observed state belongs in the recoverable snapshot. Each live channel ha
168
170
 
169
171
  ```json
170
172
  {
171
- "version": 15,
173
+ "version": 16,
172
174
  "type": "session.pendingUserMessages",
173
175
  "sessionId": "...",
174
176
  "state": {
@@ -205,7 +207,7 @@ An initialized client that advertised a tool can receive:
205
207
 
206
208
  ```json
207
209
  {
208
- "version": 15,
210
+ "version": 16,
209
211
  "type": "session.clientTool.call",
210
212
  "sessionId": "...",
211
213
  "agentId": "main",
@@ -229,7 +231,7 @@ Error responses use `ok: false`:
229
231
 
230
232
  ```json
231
233
  {
232
- "version": 15,
234
+ "version": 16,
233
235
  "type": "response",
234
236
  "id": "req-42",
235
237
  "ok": false,