@markusylisiurunen/tau 0.3.82 → 0.3.84

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 (183) hide show
  1. package/README.md +1 -3
  2. package/dist/core/agent/agent_runtime.js +10 -6
  3. package/dist/core/agent/agent_runtime.js.map +1 -1
  4. package/dist/core/cli.js +2 -2
  5. package/dist/core/cli.js.map +1 -1
  6. package/dist/core/code_mode/models.js +61 -22
  7. package/dist/core/code_mode/models.js.map +1 -1
  8. package/dist/core/commands/auto_compact.js +16 -0
  9. package/dist/core/commands/auto_compact.js.map +1 -0
  10. package/dist/core/commands/registry.js +13 -0
  11. package/dist/core/commands/registry.js.map +1 -1
  12. package/dist/core/history/cli.js +48 -0
  13. package/dist/core/history/cli.js.map +1 -1
  14. package/dist/core/history/history_manager.js +9 -3
  15. package/dist/core/history/history_manager.js.map +1 -1
  16. package/dist/core/history/local_history_store.js +9 -2
  17. package/dist/core/history/local_history_store.js.map +1 -1
  18. package/dist/core/history/remote_history_client.js +18 -3
  19. package/dist/core/history/remote_history_client.js.map +1 -1
  20. package/dist/core/models/openrouter.js +17 -5
  21. package/dist/core/models/openrouter.js.map +1 -1
  22. package/dist/core/models/openrouter_decisions.js +16 -1
  23. package/dist/core/models/openrouter_decisions.js.map +1 -1
  24. package/dist/core/runtime/chat_runtime.js +5 -0
  25. package/dist/core/runtime/chat_runtime.js.map +1 -1
  26. package/dist/core/session/auto_compaction_threshold.js +4 -0
  27. package/dist/core/session/auto_compaction_threshold.js.map +1 -0
  28. package/dist/core/static/tau_docs/client-tools.md +53 -53
  29. package/dist/core/static/tau_docs/config-reference.md +46 -43
  30. package/dist/core/static/tau_docs/configuration.md +40 -36
  31. package/dist/core/static/tau_docs/credentials.md +32 -31
  32. package/dist/core/static/tau_docs/getting-started.md +28 -28
  33. package/dist/core/static/tau_docs/history.md +114 -79
  34. package/dist/core/static/tau_docs/image-generation.md +20 -18
  35. package/dist/core/static/tau_docs/index.md +30 -31
  36. package/dist/core/static/tau_docs/manifest.json +1 -0
  37. package/dist/core/static/tau_docs/models.md +17 -17
  38. package/dist/core/static/tau_docs/node-sdk.md +74 -69
  39. package/dist/core/static/tau_docs/nook.md +75 -69
  40. package/dist/core/static/tau_docs/openrouter.md +28 -13
  41. package/dist/core/static/tau_docs/ownership-and-scope.md +21 -23
  42. package/dist/core/static/tau_docs/pdf-unpacking.md +6 -6
  43. package/dist/core/static/tau_docs/personas.md +29 -27
  44. package/dist/core/static/tau_docs/prompts-and-project-context.md +41 -39
  45. package/dist/core/static/tau_docs/remote-sessions.md +38 -38
  46. package/dist/core/static/tau_docs/sdk-diff-review.md +16 -12
  47. package/dist/core/static/tau_docs/security.md +72 -72
  48. package/dist/core/static/tau_docs/session-protocol-methods.md +69 -45
  49. package/dist/core/static/tau_docs/session-protocol.md +59 -52
  50. package/dist/core/static/tau_docs/sessions.md +112 -88
  51. package/dist/core/static/tau_docs/skills.md +25 -20
  52. package/dist/core/static/tau_docs/speech-generation.md +5 -5
  53. package/dist/core/static/tau_docs/subagents.md +42 -44
  54. package/dist/core/static/tau_docs/telegram-projects.md +142 -0
  55. package/dist/core/static/tau_docs/telegram.md +67 -181
  56. package/dist/core/static/tau_docs/tools.md +72 -80
  57. package/dist/core/static/tau_docs/troubleshooting.md +94 -149
  58. package/dist/core/static/tau_docs/tui.md +127 -80
  59. package/dist/core/subagents/agent_supervisor.js +1 -0
  60. package/dist/core/subagents/agent_supervisor.js.map +1 -1
  61. package/dist/core/telegram/adapter.js +31 -1
  62. package/dist/core/telegram/adapter.js.map +1 -1
  63. package/dist/core/telegram/session_manager.js +11 -0
  64. package/dist/core/telegram/session_manager.js.map +1 -1
  65. package/dist/core/tool/image_generate.js +5 -17
  66. package/dist/core/tool/image_generate.js.map +1 -1
  67. package/dist/core/tool/openrouter.js +21 -2
  68. package/dist/core/tool/openrouter.js.map +1 -1
  69. package/dist/core/utils/gemini_transcription.js +43 -13
  70. package/dist/core/utils/gemini_transcription.js.map +1 -1
  71. package/dist/core/utils/model_stream.js +17 -1
  72. package/dist/core/utils/model_stream.js.map +1 -1
  73. package/dist/core/version.js +2 -2
  74. package/dist/diff_tool/app/dist/assets/{angular-html-D20byCHL.js → angular-html-Dr923UVo.js} +1 -1
  75. package/dist/diff_tool/app/dist/assets/{angular-ts-CvVQslm2.js → angular-ts-DOChuIbB.js} +1 -1
  76. package/dist/diff_tool/app/dist/assets/{apl-DNIxlYWe.js → apl-Bs_bcAcm.js} +1 -1
  77. package/dist/diff_tool/app/dist/assets/{astro-DDOw4EUG.js → astro-a4yvqyGV.js} +1 -1
  78. package/dist/diff_tool/app/dist/assets/{blade-DlhB-SLW.js → blade-BD5OxwVc.js} +1 -1
  79. package/dist/diff_tool/app/dist/assets/{c-C1f4vhDm.js → c-CPWQkPLc.js} +1 -1
  80. package/dist/diff_tool/app/dist/assets/{chapel-Ctt8xOX1.js → chapel-DaQatW92.js} +1 -1
  81. package/dist/diff_tool/app/dist/assets/{cobol-BXw71PAA.js → cobol-Dv7H5p9m.js} +1 -1
  82. package/dist/diff_tool/app/dist/assets/{coffee-CRh_5Nmr.js → coffee-BUGvGi57.js} +1 -1
  83. package/dist/diff_tool/app/dist/assets/{cpp-IlI-zWOZ.js → cpp-fo_wPsB8.js} +1 -1
  84. package/dist/diff_tool/app/dist/assets/{crystal-CXeL28i7.js → crystal--pI-R_dD.js} +1 -1
  85. package/dist/diff_tool/app/dist/assets/{css-BfST9hFI.js → css-BssyxPkY.js} +1 -1
  86. package/dist/diff_tool/app/dist/assets/{edge--Q22k_ty.js → edge-CZ8t3-Ec.js} +1 -1
  87. package/dist/diff_tool/app/dist/assets/{elixir-CIfC_rQx.js → elixir-UZt0J7RJ.js} +1 -1
  88. package/dist/diff_tool/app/dist/assets/{elm-OkZ29XRO.js → elm-DIbchse0.js} +1 -1
  89. package/dist/diff_tool/app/dist/assets/{erb-B8ZXgEqv.js → erb-BOBhlFtI.js} +1 -1
  90. package/dist/diff_tool/app/dist/assets/{git-rebase-CxkO_WGd.js → git-rebase-BAOt70YV.js} +1 -1
  91. package/dist/diff_tool/app/dist/assets/{glimmer-js-BVadyIrr.js → glimmer-js-CEvU-NQC.js} +1 -1
  92. package/dist/diff_tool/app/dist/assets/{glimmer-ts-D5J3Qb7n.js → glimmer-ts-BTMr7YQb.js} +1 -1
  93. package/dist/diff_tool/app/dist/assets/{glsl-B6iy73-Y.js → glsl-BdwQytbZ.js} +1 -1
  94. package/dist/diff_tool/app/dist/assets/{graphql-Dc3rUXf5.js → graphql-MVXf_Gip.js} +1 -1
  95. package/dist/diff_tool/app/dist/assets/{hack-q8Utf8Jp.js → hack-BKsyThYd.js} +1 -1
  96. package/dist/diff_tool/app/dist/assets/{haml-mjMIlj_2.js → haml-aYjo4kTQ.js} +1 -1
  97. package/dist/diff_tool/app/dist/assets/{handlebars-CA-BL8Ks.js → handlebars-CkBj5nNj.js} +1 -1
  98. package/dist/diff_tool/app/dist/assets/{html-BmPxhYCX.js → html-V_XLZjq3.js} +1 -1
  99. package/dist/diff_tool/app/dist/assets/{html-derivative-CvknIjuB.js → html-derivative-CLtkZVT2.js} +1 -1
  100. package/dist/diff_tool/app/dist/assets/{http-DNxLDRIi.js → http-nUN1ldGy.js} +1 -1
  101. package/dist/diff_tool/app/dist/assets/{hurl-kbd3Eq2V.js → hurl-BBwLfekr.js} +1 -1
  102. package/dist/diff_tool/app/dist/assets/index-Dt2v7POE.js +341 -0
  103. package/dist/diff_tool/app/dist/assets/{java-BuZshgf1.js → java-DLkxtNEL.js} +1 -1
  104. package/dist/diff_tool/app/dist/assets/{javascript-DfL2oeFU.js → javascript-CVr4Rx0e.js} +1 -1
  105. package/dist/diff_tool/app/dist/assets/{jinja-Bu0KQihU.js → jinja-BOSJTyD0.js} +1 -1
  106. package/dist/diff_tool/app/dist/assets/{jison-Bqn7Mf3Q.js → jison-Di3-hBGP.js} +1 -1
  107. package/dist/diff_tool/app/dist/assets/{json-BuX5LKaB.js → json-D9C8xfZt.js} +1 -1
  108. package/dist/diff_tool/app/dist/assets/{jsx-DdVJ-ZBp.js → jsx-CUDhGSfU.js} +1 -1
  109. package/dist/diff_tool/app/dist/assets/{julia-CQeijOoQ.js → julia-CRy8R7YY.js} +1 -1
  110. package/dist/diff_tool/app/dist/assets/{just-vzAktFGR.js → just-tUqjHI43.js} +1 -1
  111. package/dist/diff_tool/app/dist/assets/{latex-Dm60cg0k.js → latex-8_LCZmZN.js} +1 -1
  112. package/dist/diff_tool/app/dist/assets/{liquid-vxKzm2P8.js → liquid-CvGorueR.js} +1 -1
  113. package/dist/diff_tool/app/dist/assets/{lua-DIoqi4dd.js → lua-DR_7pVFC.js} +1 -1
  114. package/dist/diff_tool/app/dist/assets/{marko-BTHgFKby.js → marko-sTN8ZOd5.js} +1 -1
  115. package/dist/diff_tool/app/dist/assets/{mdc-CEfz8gZ9.js → mdc-xRsS5Ubl.js} +1 -1
  116. package/dist/diff_tool/app/dist/assets/{nginx-DNlFDEfJ.js → nginx-ypaVSshx.js} +1 -1
  117. package/dist/diff_tool/app/dist/assets/{nim-DnvT_0lZ.js → nim-DTc1FpAl.js} +1 -1
  118. package/dist/diff_tool/app/dist/assets/{org-BbD-ElVf.js → org-B7I2tEAw.js} +1 -1
  119. package/dist/diff_tool/app/dist/assets/{perl-DTsbnAmK.js → perl-CTNhHvKx.js} +1 -1
  120. package/dist/diff_tool/app/dist/assets/{php-CwEsJe-W.js → php-LzxyOsOP.js} +1 -1
  121. package/dist/diff_tool/app/dist/assets/{pug-BOttMVH-.js → pug-D5FIy7qc.js} +1 -1
  122. package/dist/diff_tool/app/dist/assets/{qml-C8KkSItN.js → qml-CfdV5Js7.js} +1 -1
  123. package/dist/diff_tool/app/dist/assets/{r-K4ksJj_R.js → r-CZ-EMZDs.js} +1 -1
  124. package/dist/diff_tool/app/dist/assets/{razor-yuWRrrG6.js → razor-BhyBjPmN.js} +1 -1
  125. package/dist/diff_tool/app/dist/assets/{regexp-CV-jhnUz.js → regexp-iPvMX04S.js} +1 -1
  126. package/dist/diff_tool/app/dist/assets/{rst-CLA3Attc.js → rst-Dpp9DE6Q.js} +1 -1
  127. package/dist/diff_tool/app/dist/assets/{ruby-DiHR2-DX.js → ruby-CVyShlOK.js} +1 -1
  128. package/dist/diff_tool/app/dist/assets/{sas-DxIjbYJ5.js → sas-DFmollAV.js} +1 -1
  129. package/dist/diff_tool/app/dist/assets/{scss-CShwEaV4.js → scss-Di6lsIQE.js} +1 -1
  130. package/dist/diff_tool/app/dist/assets/{shellscript-CeezOnrF.js → shellscript-CRHervLi.js} +1 -1
  131. package/dist/diff_tool/app/dist/assets/{shellsession-CjSS2r7j.js → shellsession-CHP7Q5Ym.js} +1 -1
  132. package/dist/diff_tool/app/dist/assets/{soy-CI_v23nJ.js → soy-CNXyGE_T.js} +1 -1
  133. package/dist/diff_tool/app/dist/assets/{sql-D9GaB00A.js → sql-DnPFF_uz.js} +1 -1
  134. package/dist/diff_tool/app/dist/assets/{stata-hK92TPE_.js → stata-CobN2W6n.js} +1 -1
  135. package/dist/diff_tool/app/dist/assets/{surrealql-UO8LtPJG.js → surrealql-DqvGXHs7.js} +1 -1
  136. package/dist/diff_tool/app/dist/assets/{svelte-kIlaw_oh.js → svelte-ChhfFBzQ.js} +1 -1
  137. package/dist/diff_tool/app/dist/assets/{templ-DFRz1JP6.js → templ-DKi2U_4-.js} +1 -1
  138. package/dist/diff_tool/app/dist/assets/{tex-CfxIXk_z.js → tex-Cjl-M5D5.js} +1 -1
  139. package/dist/diff_tool/app/dist/assets/{ts-tags-BtUHl0ff.js → ts-tags-CV2veQhe.js} +1 -1
  140. package/dist/diff_tool/app/dist/assets/{tsx-Cd4SAe2C.js → tsx-Dw0DYsvT.js} +1 -1
  141. package/dist/diff_tool/app/dist/assets/{twig-CWk4q5Y3.js → twig-r46-w1o_.js} +1 -1
  142. package/dist/diff_tool/app/dist/assets/{typescript-BqxGJiP0.js → typescript-QuYM-098.js} +1 -1
  143. package/dist/diff_tool/app/dist/assets/{typst-D9nAun2p.js → typst-B9jAU5LS.js} +1 -1
  144. package/dist/diff_tool/app/dist/assets/{vue-D6HYhg6_.js → vue-CIrFiYWU.js} +1 -1
  145. package/dist/diff_tool/app/dist/assets/{vue-html-1VRlaENS.js → vue-html-bfczklzO.js} +1 -1
  146. package/dist/diff_tool/app/dist/assets/{vue-vine-BaH0We9y.js → vue-vine-BmBCOwQI.js} +1 -1
  147. package/dist/diff_tool/app/dist/assets/{xml-C4RWnUuj.js → xml-DYPsS0xh.js} +1 -1
  148. package/dist/diff_tool/app/dist/assets/{xsl-D1iD38ga.js → xsl-DZFDwCkt.js} +1 -1
  149. package/dist/diff_tool/app/dist/assets/{yaml-yAb4W0G-.js → yaml-9CQ32JJD.js} +1 -1
  150. package/dist/diff_tool/app/dist/index.html +1 -1
  151. package/dist/history/worker/index.js +87 -83
  152. package/dist/history/worker/index.js.map +1 -1
  153. package/dist/host/hosted_ephemeral_agent_session.js +1 -0
  154. package/dist/host/hosted_ephemeral_agent_session.js.map +1 -1
  155. package/dist/host/local_session_host.js +30 -1
  156. package/dist/host/local_session_host.js.map +1 -1
  157. package/dist/host/session_protocol_handler.js +18 -0
  158. package/dist/host/session_protocol_handler.js.map +1 -1
  159. package/dist/main.js +6 -7
  160. package/dist/main.js.map +1 -1
  161. package/dist/protocol/index.d.ts +1 -1
  162. package/dist/protocol/index.js.map +1 -1
  163. package/dist/protocol/session_protocol.d.ts +13 -2
  164. package/dist/protocol/session_protocol.js +31 -1
  165. package/dist/protocol/session_protocol.js.map +1 -1
  166. package/dist/sdk/index.d.ts +1 -1
  167. package/dist/sdk/index.js.map +1 -1
  168. package/dist/sdk/session.js +11 -0
  169. package/dist/sdk/session.js.map +1 -1
  170. package/dist/sdk/types.d.ts +2 -0
  171. package/dist/store/session_snapshot_migrations.js +19 -1
  172. package/dist/store/session_snapshot_migrations.js.map +1 -1
  173. package/dist/tui/session_chat_controller.js +41 -4
  174. package/dist/tui/session_chat_controller.js.map +1 -1
  175. package/dist/tui/terminal.js +1 -0
  176. package/dist/tui/terminal.js.map +1 -1
  177. package/dist/tui/ui/chat_container.js +34 -17
  178. package/dist/tui/ui/chat_container.js.map +1 -1
  179. package/dist/tui/ui/footer.js +2 -4
  180. package/dist/tui/ui/footer.js.map +1 -1
  181. package/package.json +11 -10
  182. package/dist/diff_tool/app/dist/assets/index-D8ZI_2RC.js +0 -340
  183. package/dist/nook/README.md +0 -123
@@ -1,6 +1,6 @@
1
1
  # Configuration
2
2
 
3
- Tau builds configuration from a working directory, not from one universal file. It combines shipped defaults, an eligible global level, and every project level on the path to that working directory. Knowing whose working directory is in use is as important as knowing the field name.
3
+ Tau builds configuration for a working directory. It combines the shipped defaults, the global level when it applies, and every project level on the path to that directory. The same field can therefore have different values on different machines or in different directories, so first find out which working directory applies.
4
4
 
5
5
  This page explains how the layers behave. Use [configuration reference](config-reference.md) for the fields themselves and [ownership and scope](ownership-and-scope.md) when more than one machine is involved.
6
6
 
@@ -16,7 +16,7 @@ Tau recognizes these `config.json` locations:
16
16
 
17
17
  When `cwd` is inside home, discovery stops at home. When it is outside home, the global level is omitted and project discovery continues to the filesystem root.
18
18
 
19
- Tau recognizes a project level when that ancestor contains either `.tau/` or `.agents/skills/`. A `config.json` file is optional at a recognized level. This allows skill-only levels to participate in content discovery without requiring an empty config file.
19
+ A directory counts as a project level when it contains `.tau/` or `.agents/skills/`. The level does not need a `config.json` file, so a directory with only skills still takes part in content discovery.
20
20
 
21
21
  For this layout:
22
22
 
@@ -37,11 +37,11 @@ starting from `/home/ada/work/ledger/packages/api` loads, from least to most spe
37
37
  /home/ada/work/ledger/packages/api/.tau/config.json
38
38
  ```
39
39
 
40
- In a remote session, the session runtime uses the execution environment's `cwd` and home. An attached TUI separately loads client-local settings from the attach process's `cwd` and home.
40
+ In a remote session, the session uses the `cwd` and home of the execution environment. An attached TUI loads its own client settings from the `cwd` and home of the `tau attach` process.
41
41
 
42
42
  ## How levels combine
43
43
 
44
- Most scalar or whole-object settings use **most-specific wins**. A value in the nearest project level replaces the corresponding value from broader levels.
44
+ For most fields, **the most specific level wins**. A value in the nearest project level replaces the same field from broader levels, including whole objects.
45
45
 
46
46
  In `~/.config/tau/config.json`:
47
47
 
@@ -61,7 +61,7 @@ In `~/work/ledger/.tau/config.json`:
61
61
 
62
62
  Within the project, the effective default persona is `gpt-6.1-sol-coder:high`.
63
63
 
64
- A few fields intentionally use other rules:
64
+ A few fields use other rules:
65
65
 
66
66
  - `apiKeys` is global-only; project values are rejected.
67
67
  - `modelSystemNotices` merges by normalized `<provider>/<model>` key.
@@ -70,7 +70,7 @@ A few fields intentionally use other rules:
70
70
  - `clientTools` is defined only at global scope. `enabledClientTools` at the most-specific project level is an exact selection from those definitions.
71
71
  - `history` is accepted only at global scope.
72
72
 
73
- An empty project `enabledClientTools` list deliberately disables all configured command client tools for that project:
73
+ An empty `enabledClientTools` list in a project disables all command client tools for that project:
74
74
 
75
75
  ```json
76
76
  {
@@ -82,20 +82,20 @@ Without `enabledClientTools`, Tau selects global client tools whose `defaultEnab
82
82
 
83
83
  ## How relative paths resolve
84
84
 
85
- Relative path bases belong to the level that declares the value:
85
+ A relative path resolves from the level that declares it:
86
86
 
87
87
  - A global `clientTools[].command` containing a slash resolves from home.
88
88
  - A bare command such as `git` is left bare and resolves through the owning process's `PATH`.
89
89
 
90
- 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.
90
+ Other fields that contain paths are used as written, unless the field's reference entry says otherwise. For example, the `home` value of a hosted execution environment is passed on unchanged.
91
91
 
92
92
  ## Invalid and unknown fields
93
93
 
94
94
  Each `config.json` must contain a JSON object. Malformed JSON, wrong types, invalid enum values, unknown model targets, and fields used at a forbidden scope produce configuration warnings. Tau keeps valid fields from the same file and continues merging other levels. Run `/reload` in an idle session to see the current warnings.
95
95
 
96
- If a more-specific field is invalid, it is skipped rather than replacing a valid broader value. This can make the broader value remain effective, so do not treat a warning as if the requested override took effect.
96
+ An invalid field is skipped. If a broader level sets the same field validly, that broader value stays in effect. A warning therefore means your override did not apply.
97
97
 
98
- Unknown object fields are accepted and stripped without a warning. This applies at the top level and in validated nested objects. It makes newer configuration tolerable to an older binary, but it also means misspelled fields have no effect:
98
+ Unknown fields are removed without a warning, both at the top level and inside nested objects. This lets an older Tau version read configuration written for a newer one. It also means a misspelled field silently has no effect:
99
99
 
100
100
  ```json
101
101
  {
@@ -103,16 +103,16 @@ Unknown object fields are accepted and stripped without a warning. This applies
103
103
  }
104
104
  ```
105
105
 
106
- The example is valid JSON and produces no setting because `defaultPersnoa` is unknown. Compare edited keys against [configuration reference](config-reference.md), especially when no warning appears.
106
+ This is valid JSON but sets nothing, because `defaultPersnoa` is not a known field. Check edited keys against the [configuration reference](config-reference.md), especially when no warning appears.
107
107
 
108
108
  ## Make a safe edit
109
109
 
110
- First identify the consumer and its `cwd`, home, and machine. Then choose the narrowest valid scope:
110
+ First find out what reads the setting, and on which machine, `cwd`, and home. Then choose the narrowest level that works:
111
111
 
112
- - Personal defaults and secrets usually belong in eligible global configuration.
113
- - Repository behavior shared by collaborators belongs in a project `.tau/config.json` when it contains no secrets or machine-local commands.
114
- - Nested project levels are appropriate only when that subtree genuinely needs a different value.
115
- - Client-only commands should not be placed in a remote execution environment and expected to appear on an attached laptop.
112
+ - Personal defaults and secrets usually belong in global configuration.
113
+ - Settings for a repository that collaborators share belong in the project's `.tau/config.json`, as long as they contain no secrets or machine-specific commands.
114
+ - Use a nested project level only when that subdirectory needs a different value.
115
+ - Client commands belong on the client. Defining them in a remote execution environment does not make them appear on an attached laptop.
116
116
 
117
117
  Keep examples small and edit only the intended field. Validate JSON before asking Tau to load it:
118
118
 
@@ -121,65 +121,69 @@ node -e 'JSON.parse(require("node:fs").readFileSync(process.argv[1], "utf8"))' \
121
121
  ~/.config/tau/config.json
122
122
  ```
123
123
 
124
- That check proves syntax only. Start Tau from the relevant `cwd` to validate field contracts and content references:
124
+ That check covers syntax only. To validate fields and content references, start Tau from the relevant `cwd`:
125
125
 
126
126
  ```sh
127
127
  cd ~/work/ledger
128
128
  tau --debug
129
129
  ```
130
130
 
131
- `--debug` is appropriate for a local startup and can reveal project instructions in its output. It does not query an already running host, remote execution environment, or attached client's state. For a live session runtime, use `/reload` and read its configuration warnings. There is no command that serializes the complete effective configuration.
131
+ `--debug` inspects a local startup, and its output can include project instructions. It cannot show the state of a running host, a remote execution environment, or an attached client. For a running session, use `/reload` and read its configuration warnings. No command prints the complete effective configuration.
132
132
 
133
- Never verify a secret by printing the full config or environment into a shared transcript. Test the operation that needs the credential, and use the auth commands for Codex OAuth accounts.
133
+ Never check a secret by printing the full config or environment into a shared transcript. Instead, run the operation that needs the credential. For Codex OAuth accounts, use the auth commands.
134
134
 
135
135
  ## When changes take effect
136
136
 
137
137
  ### New local or client process
138
138
 
139
- Tau loads startup configuration and content before opening the TUI. Restart the local TUI or `tau attach` to apply client-owned changes such as:
139
+ Tau loads client configuration before opening the TUI. Restart the local TUI or `tau attach` to apply client changes such as:
140
140
 
141
141
  - `defaultTheme`
142
142
  - `clientTools` and `enabledClientTools`
143
143
  - client environment variables
144
144
 
145
- Changing `/theme:<id>` updates only the current client presentation. Themes are not persisted in session snapshots.
145
+ `/theme:<id>` changes only the current client's appearance. Themes are not saved in the session.
146
146
 
147
147
  ### Current session runtime
148
148
 
149
- Run `/reload` when no session turn is active to recollect runtime configuration and content from the execution environment. Reload updates the current session's runtime config, model catalog, personas, prompts, skills, selected persona definition, and project context. It reports warnings and refreshes the session catalog.
149
+ When no turn is running, `/reload` reads configuration and content again from the execution environment. It updates the session's runtime configuration, model catalog, personas, prompts, skills, the selected persona's definition, and project context. It also reports warnings and refreshes the session catalog.
150
150
 
151
- The current persona id is retained if it still exists; otherwise Tau chooses the first available persona. Changing `defaultPersona` does not by itself switch an existing session during reload. It selects new sessions unless a CLI or creation request overrides it.
151
+ The session keeps its current persona if that persona still exists. Otherwise Tau picks the first available persona. Changing `defaultPersona` does not switch an existing session on reload. It applies to new sessions, unless a CLI flag or creation request chooses another persona.
152
152
 
153
- A logical turn captures its persona, model settings, and tools when it starts. Reload is blocked while a turn is active, and reloaded behavior applies to later turns.
153
+ A turn keeps the persona, model settings, and tools it started with. Reload is refused while a turn is running, and reloaded settings apply to later turns.
154
154
 
155
155
  ### Host startup
156
156
 
157
- Restart the host process to apply settings used to construct host-wide services, including:
157
+ Restart the host process to apply settings that the host reads once at startup, including:
158
158
 
159
159
  - `flySprites`
160
160
  - `history`
161
- - host environment variables and Codex account forcing
161
+ - host environment variables
162
162
 
163
- For `tau serve`, make the changes on the host machine and restart the server. Restarting only an attached TUI does not rebuild the host.
163
+ For `tau serve`, make the changes on the host machine and restart the server. Restarting an attached TUI does not restart the host.
164
164
 
165
165
  ### New session or runner
166
166
 
167
- Some settings are choices rather than live mutations. `defaultPersona` and startup persona flags select a new session. Execution-environment kind, identity, `cwd`, and home are fixed when the session is created or recovered.
167
+ Some settings apply only when something new is created. `defaultPersona` and startup persona flags choose the persona of a new session. The execution environment's kind, identity, `cwd`, and home are fixed when the session is created or recovered.
168
168
 
169
- The Telegram runner loads its speech provider and separate runner config at startup. Restart it for speech, project, routing, or workspace-preparation changes. Workspace-preparation changes apply when a managed workspace is created or reconstructed; restarting does not retrofit a preserved workspace. Command client tools are selected when a Telegram session client is created, so configuration changes apply to new sessions; restarting the runner also rebuilds clients while recovering its sessions. Existing sessions retain their recorded execution environment unless the documented recovery behavior reconstructs a managed workspace.
169
+ The Telegram runner loads its speech provider and its runner config at startup. Restart it after changing speech, projects, routing, or workspace preparation.
170
+
171
+ - Workspace-preparation changes apply when a managed workspace is created or reconstructed. Restarting does not change a preserved workspace.
172
+ - Command client tools are chosen when the runner creates the client for a session. Changes apply to new sessions, and also to existing sessions when a runner restart recovers them.
173
+ - Existing sessions keep their recorded execution environment, unless recovery has to reconstruct a missing managed workspace (see [Telegram projects and workspaces](telegram-projects.md)).
170
174
 
171
175
  ## Common precedence mistakes
172
176
 
173
- **Editing global config for a project outside home.** The global level is omitted when the relevant `cwd` is outside home. Add an appropriate project level or change the environment's configured home rather than assuming `~/.config/tau` is always included.
177
+ **Editing global config for a project outside home.** The global level is skipped when the relevant `cwd` is outside home. Add a project level, or change the environment's configured home.
174
178
 
175
- **Editing the laptop for host behavior.** An attached TUI cannot provide credentials, session storage, hosted-environment definitions, or runtime project config to a remote host merely by having them locally.
179
+ **Editing the laptop for host behavior.** Credentials, session storage, hosted-environment definitions, and project configuration on the laptop do not reach a remote host through an attached TUI.
176
180
 
177
- **Editing the host filesystem for target content.** A hosted execution environment owns its project files and home. Put project `.tau` content on that target, not in a similarly named path on the host.
181
+ **Editing the host's files for a hosted environment.** A hosted execution environment has its own project files and home. Put project `.tau` content on that environment, not at a similar path on the host.
178
182
 
179
- **Expecting nested objects to deep-merge.** A project Sprite API entry replaces the complete entry with the same id. Repeat any credentials and settings needed by that API.
183
+ **Expecting nested objects to deep-merge.** A nearer `mcpServers` entry replaces the whole entry with the same name, including its credentials, and a nearer `nook` object replaces the broader one completely. Repeat every setting the entry needs.
180
184
 
181
- **Expecting `/reload` to rebuild the client or server.** Reload is a current-session runtime operation. Restart the component that owns startup-only behavior.
185
+ **Expecting `/reload` to restart the client or server.** Reload affects only the current session. Restart the process that reads the setting at startup.
182
186
 
183
- **Using a project file for global-only fields.** `clientTools` and `history` are rejected outside global config. `enabledClientTools` is rejected outside project config.
187
+ **Using a project file for global-only fields.** `apiKeys`, `clientTools`, and `history` are rejected outside global config. `enabledClientTools` is rejected outside project config.
184
188
 
185
- **Trusting a silent typo.** Unknown fields are stripped. Check exact names and observe the resulting operation rather than assuming valid JSON means valid Tau configuration.
189
+ **Trusting a silent typo.** Unknown fields are removed without a warning. Valid JSON is not necessarily valid Tau configuration, so check exact names and confirm the setting changed behavior.
@@ -1,16 +1,14 @@
1
1
  # Credentials
2
2
 
3
- Tau can read secrets from configuration, process environments, and managed OAuth storage. The correct location depends on which process performs the authenticated operation. In a remote session, the attached terminal is usually not that process.
3
+ Tau reads secrets from configuration, environment variables, and its own OAuth storage. Put each secret on the process that makes the authenticated request. In a remote session, that is usually not the attached terminal.
4
4
 
5
- Treat credentials separately from model definitions. [Models](models.md) describes providers and model metadata; this page describes how authenticated requests obtain secrets.
5
+ This page covers where secrets come from. [Models](models.md) covers providers and model metadata.
6
6
 
7
7
  ## Credential ownership
8
8
 
9
- The host performs model calls and runs host-owned services such as web search and remote history. Its home and process environment therefore own most credentials. The execution environment still owns the `config.json` files used by a session, so a provider key loaded from project configuration crosses into the host for use in model calls.
9
+ The host makes model calls and runs services such as web search and remote history, so most credentials belong in the host's environment or the host user's global configuration. Common cases:
10
10
 
11
- Common cases are:
12
-
13
- | Operation | Credential owner |
11
+ | Operation | Where the credential belongs |
14
12
  | --- | --- |
15
13
  | Main-agent, subagent, sampling, and maintenance model calls | Session host |
16
14
  | OpenAI Codex OAuth accounts | Session host home |
@@ -22,11 +20,11 @@ Common cases are:
22
20
  | Telegram transcription and voice responses | Telegram runner |
23
21
  | Standalone `tau tool` commands | The process running that command |
24
22
 
25
- With local `tau`, these roles normally share one machine. With `tau attach`, setting a key only in the attached client's shell does not authenticate the remote host. Run `tau auth` on the host machine and set host-owned environment variables where `tau serve` or the SDK host actually runs. See [ownership and scope](ownership-and-scope.md) for the full boundary.
23
+ With local `tau`, all of these are usually one machine. With `tau attach`, a key set only in the attached client's shell does not reach the remote host. Run `tau auth` on the host machine, and set host environment variables where `tau serve` or the SDK host runs. See [ownership and scope](ownership-and-scope.md) for the full boundary.
26
24
 
27
25
  ## Provider API keys
28
26
 
29
- Tau accepts provider API keys in private global configuration:
27
+ Tau accepts provider API keys in global configuration:
30
28
 
31
29
  ```json
32
30
  {
@@ -38,15 +36,15 @@ Tau accepts provider API keys in private global configuration:
38
36
  }
39
37
  ```
40
38
 
41
- Keys are provider IDs, not model IDs. `apiKeys` is global-only, in the owning process's `~/.config/tau/config.json`; project values are rejected. Configuration strings are literal and do not expand environment variables.
39
+ The keys of the map are provider IDs, such as `openai`, not model IDs. `apiKeys` is allowed only in the global `~/.config/tau/config.json` of the process that uses it. Project values are rejected. Values are literal strings and do not expand environment variables.
42
40
 
43
- For model API-key authentication, provider-supported environment credentials take precedence over global `apiKeys`. Supported cloud and workload identity authentication remains available. OpenAI uses `OPENAI_API_KEY`; Anthropic also supports `ANTHROPIC_AUTH_TOKEN` and `ANTHROPIC_OAUTH_TOKEN` according to its provider contract. Managed Codex OAuth is separate and always uses the explicitly active stored account.
41
+ For model requests, a provider's environment variable wins over its entry in `apiKeys`. Cloud and workload identity authentication that the provider supports still works. OpenAI uses `OPENAI_API_KEY`. Anthropic also accepts `ANTHROPIC_AUTH_TOKEN` and `ANTHROPIC_OAUTH_TOKEN`. Codex OAuth is separate and always uses the active stored account.
44
42
 
45
- Set model credentials where the host runs. Restart the owning process after changing environment variables or its global API-key configuration.
43
+ Set model credentials where the host runs. Restart that process after changing its environment variables or its `apiKeys`.
46
44
 
47
45
  ## Feature-specific keys
48
46
 
49
- Feature helpers use environment variables first, then global configuration:
47
+ Features check the environment variable first, then global configuration:
50
48
 
51
49
  | Feature | Resolution order |
52
50
  | --- | --- |
@@ -59,9 +57,9 @@ Feature helpers use environment variables first, then global configuration:
59
57
 
60
58
  `web.discover` does not require Exa. `web.search` and `web.fetch` do. `/speak` and Telegram `/tts_on` voice responses require OpenAI for text rewriting and ElevenLabs for synthesis. `/listen` and incoming Telegram voice notes use Google, with optional OpenAI spelling hints. PDF OCR through `tau tool pdf-unpack` uses Mistral.
61
59
 
62
- Set these variables on the process that owns the feature. For example, a remote TUI's `/speak` reads the attached client's `OPENAI_API_KEY` and `ELEVENLABS_API_KEY`, while a Google model selected by the session reads credentials at the host.
60
+ Set these on the process that runs the feature. For example, `/speak` in an attached TUI reads `OPENAI_API_KEY` and `ELEVENLABS_API_KEY` on the client machine, while a session that uses a Google model reads its key on the host.
63
61
 
64
- For `tau tool` commands, credentials and configuration belong to the machine running the command. Tau's agent Bash removes inherited API-key environment variables, so commands invoked through it may need keys in private configuration on that machine. See [configuration](configuration.md) for configuration file locations and [security](security.md) for command environment handling.
62
+ For `tau tool` commands, credentials and configuration belong to the machine that runs the command. The agent's Bash tool removes inherited API-key environment variables, so a command the agent runs may need its key in global configuration on that machine. See [configuration](configuration.md) for configuration file locations and [security](security.md) for command environment handling.
65
63
 
66
64
  ## OpenAI Codex OAuth
67
65
 
@@ -71,9 +69,9 @@ The `openai-codex` provider uses ChatGPT Plus or Pro OAuth accounts managed by T
71
69
  tau auth login codex
72
70
  ```
73
71
 
74
- The flow opens or prints a browser URL and may fall back to a device code or pasted redirect. Tau stores the result under the host user's `~/.config/tau/auth.json` with private file permissions. Do not edit this file directly. The auth commands coordinate concurrent access, refresh tokens when needed, and preserve account state safely.
72
+ The flow opens or prints a browser URL. It may instead ask for a device code or a pasted redirect URL. Tau stores the result in the host user's `~/.config/tau/auth.json` with private file permissions. Do not edit this file directly. The auth commands handle concurrent access and token refresh.
75
73
 
76
- Multiple Codex accounts may be stored, with at most one active account. `tau auth list` displays identities, marks the active account, and shows informational usage windows without revealing tokens.
74
+ Tau can store several Codex accounts, and at most one is active. `tau auth list` shows each identity, marks the active one, and shows usage windows for information, without revealing tokens.
77
75
 
78
76
  ```sh
79
77
  tau auth login codex
@@ -82,11 +80,14 @@ tau auth use codex --account developer@example.com
82
80
  tau auth logout codex --account developer@example.com
83
81
  ```
84
82
 
85
- First login activates the account only when no accounts are stored. Later logins add or refresh an account without changing the active selection. If stored accounts remain but none is active, use `tau auth use` explicitly. Account IDs and email matching are case-insensitive.
86
-
87
- `auth use` replaces the previous active account. Logout removes the account; logging out the active account leaves no account active even if others remain. With no active account, requests fail with instructions to log in or select one. Failed or exhausted accounts surface failures without automatic switching. Usage never determines selection.
83
+ - A login activates the account only when no other accounts are stored. Later logins add or refresh an account without changing which one is active.
84
+ - `auth use` makes an account active and deactivates the previous one.
85
+ - Logout removes the account. Logging out the active account leaves no account active, even if others remain. Choose one with `tau auth use`.
86
+ - With no active account, requests fail with instructions to log in or select an account.
87
+ - Tau never switches accounts automatically, whether an account fails or runs out of usage. Usage never affects selection.
88
+ - Account IDs and emails match case-insensitively.
88
89
 
89
- Auth storage is reloaded for later requests across sessions. Switching accounts does not alter a request already in flight and needs no host restart.
90
+ Every new request reads the current auth storage, in every session. Switching accounts takes effect without a host restart and does not affect a request already in progress.
90
91
 
91
92
  ## History and Nook indirection
92
93
 
@@ -109,7 +110,7 @@ History resolves its API key in this order:
109
110
  2. The host environment variable named by `history.apiKeyEnv`
110
111
  3. Inline `history.apiKey`
111
112
 
112
- If `history` is configured but none resolves, host setup fails for the remote target. Without `history` configuration, transcripts remain machine-local. See [history](history.md) for service behavior.
113
+ If `history` is configured but no key is found, the host fails to start. Without `history`, history stays on the host machine. See [history](history.md) for service behavior.
113
114
 
114
115
  A Nook Access service token uses an ID plus a secret:
115
116
 
@@ -123,11 +124,11 @@ A Nook Access service token uses an ID plus a secret:
123
124
  }
124
125
  ```
125
126
 
126
- If the named `accessClientSecretEnv` has a non-empty value, it wins over inline `accessClientSecret`; otherwise Tau falls back to the inline value. The process performing the Nook operation resolves it. For a session tool that is the host, while `tau nook` commands use the invoking CLI process. Nook setup and destruction also accept their documented command flags and environment variables. See [Nook](nook.md).
127
+ If the variable named by `accessClientSecretEnv` has a non-empty value, it wins over inline `accessClientSecret`. Otherwise Tau uses the inline value. The process that performs the Nook operation reads the secret: the host for the session tool, and the CLI process for `tau nook` commands. Nook setup and destroy also accept the command flags and environment variables listed in [Nook](nook.md). See [Nook](nook.md).
127
128
 
128
129
  ## Hosted execution credentials
129
130
 
130
- The Fly Sprite connection is host-owned configuration. They must be available when the host starts, before a client asks it to create a Sprite session. The connection requires a token:
131
+ The Fly Sprite connection is host configuration. It must be in place when the host starts, before a client asks for a Sprite session. The connection needs a token:
131
132
 
132
133
  ```json
133
134
  {
@@ -138,18 +139,18 @@ The Fly Sprite connection is host-owned configuration. They must be available wh
138
139
  }
139
140
  ```
140
141
 
141
- For Fly, inline `token` wins when present; `tokenEnv` is the fallback. Session creation fails if neither resolves.
142
+ An inline `token` wins when present. Otherwise Tau reads the variable named by `tokenEnv`. Session creation fails if neither gives a token.
142
143
 
143
- These target definitions are read from the host's startup configuration, not from an attached client. `/reload` refreshes session runtime content but does not rebuild the host's execution-environment resolvers. Restart the host after changing Sprite connection settings or their environment.
144
+ The host reads these settings from its own startup configuration, never from an attached client. `/reload` does not reload them. Restart the host after changing the Sprite connection or its environment variables.
144
145
 
145
146
  ## Safe verification
146
147
 
147
- Verify credentials through the operation that owns them, without printing secret values:
148
+ Check a credential by using it, without printing its value:
148
149
 
149
- - Run `tau auth list` to check Codex identities, active selection, refresh health, and informational usage windows.
150
- - Restart the owning process after changing global `apiKeys`.
150
+ - Run `tau auth list` to check Codex identities, the active account, refresh status, and usage windows.
151
+ - Restart the process that uses `apiKeys` after changing them.
151
152
  - Make a small request with the intended persona to verify model authentication and endpoint access.
152
- - Exercise the specific feature after setting Exa, speech, History, Nook or Fly credentials. Their missing-credential errors name the accepted source.
153
- - For remote sessions, first confirm which machine is the host and which process owns the feature.
153
+ - After setting Exa, speech, history, Nook, or Fly credentials, use that feature. If a credential is missing, the error names where Tau looks for it.
154
+ - For remote sessions, first confirm which machine is the host and which process runs the feature.
154
155
 
155
- Do not verify by printing the process environment, dumping `config.json`, or reading `auth.json` into a transcript. If a secret was exposed in shell history, logs, a session, or version control, rotate it at the provider and replace the compromised value. Broader handling guidance is in [security](security.md) and failure checks are in [troubleshooting](troubleshooting.md).
156
+ Do not check by printing the environment, `config.json`, or `auth.json` into a transcript. If a secret ends up in shell history, logs, a session, or version control, rotate it at the provider and replace it. Broader handling guidance is in [security](security.md) and failure checks are in [troubleshooting](troubleshooting.md).
@@ -1,18 +1,18 @@
1
1
  # Getting started
2
2
 
3
- Tau is a terminal chat client that gives model-backed agents tools for working in a project. A local session is the shortest path to understanding it: the terminal client, session host, and execution environment all run on the same machine, while retaining the same boundaries used by remote sessions.
3
+ Tau is a terminal chat client that gives AI agents tools for working in a project. The quickest way to learn it is a local session, where the terminal client, the session host, and the agent's execution environment all run on your machine. Remote sessions use the same three parts on different machines.
4
4
 
5
5
  ## Requirements
6
6
 
7
7
  Tau supports macOS and Linux. Windows is not supported.
8
8
 
9
- The published package requires Node.js 24 or newer. Tau runs commands through fresh non-interactive login Bash processes, so verify that environment from the account that will run Tau before installing:
9
+ The published package requires Node.js 24 or newer. Tau runs every command in a fresh non-interactive login Bash process. Before installing, check that environment from the account that will run Tau:
10
10
 
11
11
  ```sh
12
12
  bash -lc 'command -v node && node --version && command -v npm && npm --version'
13
13
  ```
14
14
 
15
- The command should resolve both executables and finish without prompts, terminal errors, or unrelated startup output. Use the same check for other executables you expect the agent to use.
15
+ The command should find both executables and finish without prompts, terminal errors, or extra startup output. Use the same check for any other executable you expect the agent to use.
16
16
 
17
17
  ## Install or upgrade Tau
18
18
 
@@ -22,14 +22,14 @@ Install the latest published version globally:
22
22
  npm install -g @markusylisiurunen/tau@latest
23
23
  ```
24
24
 
25
- Run the same command to upgrade. Then confirm which executable and version npm installed:
25
+ Run the same command to upgrade. Then check which executable and version npm installed:
26
26
 
27
27
  ```sh
28
28
  command -v tau
29
29
  npm list -g @markusylisiurunen/tau --depth=0
30
30
  ```
31
31
 
32
- The built-in documentation is packaged with Tau. Upgrading the package upgrades the documentation read by `tau_docs` on that host. Tau also refreshes compatible model metadata asynchronously when a model-owning host starts. To force that refresh without upgrading Tau, run:
32
+ The built-in documentation is part of the package, so upgrading Tau also upgrades the documentation its agent reads. Tau also refreshes compatible model metadata in the background when a host that runs models starts. To refresh it without upgrading Tau, run:
33
33
 
34
34
  ```sh
35
35
  tau models refresh
@@ -37,14 +37,14 @@ tau models refresh
37
37
 
38
38
  ## Set up a provider
39
39
 
40
- A session needs credentials for the provider selected by its persona. API-key providers accept ordinary provider environment variables. For example:
40
+ A session needs credentials for the provider that its persona uses. Providers that use API keys read their usual environment variables. For example:
41
41
 
42
42
  ```sh
43
43
  export ANTHROPIC_API_KEY='sk-ant-...'
44
44
  tau
45
45
  ```
46
46
 
47
- Common built-in choices are `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, and `GEMINI_API_KEY`. Keys may instead be placed in `apiKeys` in Tau configuration:
47
+ Common choices are `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, and `GEMINI_API_KEY`. You can also put keys in `apiKeys` in Tau configuration:
48
48
 
49
49
  ```json
50
50
  {
@@ -54,29 +54,29 @@ Common built-in choices are `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, and `GEMINI_A
54
54
  }
55
55
  ```
56
56
 
57
- Put personal secrets in the global config at `~/.config/tau/config.json`, not in a project file likely to be committed. Environment variables and feature-specific key precedence are covered in [credentials](credentials.md).
57
+ Put personal secrets in the global config at `~/.config/tau/config.json`. A project file is likely to be committed. [Credentials](credentials.md) covers environment variables and which key wins for each feature.
58
58
 
59
- The `openai-codex` provider uses ChatGPT subscription OAuth rather than `OPENAI_API_KEY` or `apiKeys.openai`:
59
+ The `openai-codex` provider signs in with a ChatGPT subscription through OAuth. It does not use `OPENAI_API_KEY` or `apiKeys.openai`:
60
60
 
61
61
  ```sh
62
62
  tau auth login codex
63
63
  tau auth list
64
64
  ```
65
65
 
66
- Use the auth commands to manage this storage. Do not edit `~/.config/tau/auth.json` directly.
66
+ Manage this storage with the auth commands. Do not edit `~/.config/tau/auth.json` directly.
67
67
 
68
68
  ## Start a local session
69
69
 
70
- Change to the project directory that should become the execution environment's working directory, then run Tau:
70
+ Change to the project directory you want the agent to work in, then run Tau:
71
71
 
72
72
  ```sh
73
73
  cd ~/Code/ledger-service
74
74
  tau
75
75
  ```
76
76
 
77
- Tau discovers project configuration and content from that directory upward, loads the selected persona, creates a durable local session, and opens the TUI. The agent's file and command tools operate in this execution environment, initially rooted at the selected working directory.
77
+ Tau finds project configuration and content from that directory upward, loads the selected persona, creates a local session that is saved automatically, and opens the TUI. The agent's file and command tools start in this directory.
78
78
 
79
- Type a request and press Enter. Useful first requests are concrete and scoped:
79
+ Type a request and press Enter. Good first requests are concrete and limited in scope:
80
80
 
81
81
  ```text
82
82
  Explain the request flow through this service and point to the key files.
@@ -86,29 +86,29 @@ Explain the request flow through this service and point to the key files.
86
86
  Run the focused tests for the parser, fix the failure, and summarize the change.
87
87
  ```
88
88
 
89
- Use `/help` inside the TUI to see interactive commands. Press `Ctrl+C` twice to exit. Tau persists local sessions through the host, so exiting the TUI does not require manually saving a transcript.
89
+ Use `/help` inside the TUI to see interactive commands. Press `Ctrl+C` twice to exit. Tau saves the session as you go, so there is nothing to save before exiting.
90
90
 
91
91
  ## Choose a persona and reasoning level
92
92
 
93
- A **persona** selects a provider and model together with instructions, tools, skills, and default model settings. Tau ships built-in chat and coder personas and can load custom persona files.
93
+ A **persona** selects a provider and model, together with instructions, tools, skills, and default model settings. Tau ships built-in chat and coder personas and can load custom persona files.
94
94
 
95
- Start with a specific persona by passing its exact id:
95
+ To start with a specific persona, pass its exact id:
96
96
 
97
97
  ```sh
98
98
  tau --persona gpt-6.1-sol-coder
99
99
  ```
100
100
 
101
- Append a reasoning level when the selected model supports it:
101
+ Append a reasoning level when the model supports it:
102
102
 
103
103
  ```sh
104
104
  tau --persona gpt-6.1-sol-coder:high
105
105
  ```
106
106
 
107
- The accepted reasoning levels are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. A persona may expose only a subset in the TUI, and providers that do not support reasoning ignore the setting.
107
+ The reasoning levels are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. A persona may offer only some of them in the TUI. Providers that do not support reasoning ignore the setting.
108
108
 
109
- During a session, `/persona:<id>` changes the persona and `Shift+Tab` cycles the available reasoning levels. A running logical turn keeps the persona, reasoning, model, and tools captured when that turn began. Changes apply to the next independently started turn.
109
+ During a session, `/persona:<id>` changes the persona and `Shift+Tab` cycles through the available reasoning levels. A turn that is already running keeps the persona, reasoning, model, and tools it started with. Changes apply from the next turn.
110
110
 
111
- To choose a default for new sessions, set `defaultPersona`:
111
+ To set a default for new sessions, use `defaultPersona`:
112
112
 
113
113
  ```json
114
114
  {
@@ -116,28 +116,28 @@ To choose a default for new sessions, set `defaultPersona`:
116
116
  }
117
117
  ```
118
118
 
119
- See [personas](personas.md) for custom persona files and exact inheritance behavior, and [models](models.md) for model catalog overrides.
119
+ See [personas](personas.md) for custom persona files and how inheritance works, and [models](models.md) for model catalog overrides.
120
120
 
121
- ## Inspect startup safely
121
+ ## Inspect startup
122
122
 
123
- Start with the normal help output:
123
+ Start with the help output:
124
124
 
125
125
  ```sh
126
126
  tau --help
127
127
  ```
128
128
 
129
- Tau reports configuration and content warnings on stderr during startup. Warnings identify the source path and invalid field or content entry; Tau continues with the valid portions it could load.
129
+ Tau prints configuration and content warnings to stderr at startup. Each warning names the source path and the invalid field or entry. Tau continues with everything else it could load.
130
130
 
131
- For a local startup, `--debug` shows the resources and tool schemas resolved for the selected working directory without opening the TUI:
131
+ For a local startup, `--debug` shows the resources and tool schemas resolved for the current directory without opening the TUI:
132
132
 
133
133
  ```sh
134
134
  tau --debug --persona gpt-6.1-sol-coder:high
135
135
  ```
136
136
 
137
- Debug output can contain project instructions and other model-facing context, so review where it is captured before sharing it. It is a local startup inspection, not a query of an already running remote host or attached client's effective state.
137
+ Debug output can include project instructions and other text sent to the model, so check where it ends up before sharing it. It inspects only a local startup. It cannot show the effective state of a running remote host or an attached client.
138
138
 
139
- After editing session runtime content, `/reload` refreshes it when no turn is active and reports warnings in the transcript. Client-local or host-startup changes require the owning process to restart. [Configuration](configuration.md) explains those boundaries.
139
+ After you edit configuration or content that the session loads, `/reload` refreshes it when no turn is running and reports warnings in the transcript. Changes to client settings or host startup settings need a restart of that process. [Configuration](configuration.md) explains which changes apply where.
140
140
 
141
141
  ## Continue from here
142
142
 
143
- Read [ownership and scope](ownership-and-scope.md) before using `tau attach`, hosted execution environments, the SDK, or Telegram. For ordinary configuration changes, use [configuration](configuration.md) with the complete [configuration reference](config-reference.md). The [TUI](tui.md) page covers daily interaction, while [sessions](sessions.md) explains persistence, recovery, compaction, and rewind.
143
+ Read [ownership and scope](ownership-and-scope.md) before using `tau attach`, hosted execution environments, the SDK, or Telegram. For everyday configuration, use [configuration](configuration.md) together with the [configuration reference](config-reference.md). [TUI](tui.md) covers daily use, and [sessions](sessions.md) explains saving, recovery, compaction, and rewind.