@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,12 +1,12 @@
1
1
  # Troubleshooting
2
2
 
3
- Tau failures usually become straightforward once the failing component is identified. The same path can mean a laptop path, a host path, or an execution-environment path, and the same configuration field can require a session reload, client restart, host restart, or new session.
3
+ Most Tau problems become clear once you know which part is failing. The same path can be a laptop path, a host path, or an execution environment path, and a configuration change may need a session reload, a client restart, a host restart, or a new session.
4
4
 
5
- Work from the observed symptom. Keep checks narrow, preserve durable state, and avoid dumping configuration, environments, snapshots, databases, or transcripts into diagnostics.
5
+ Start from the symptom. Keep checks narrow, keep saved state intact, and never paste configuration, environments, saved sessions, databases, or transcripts into diagnostics.
6
6
 
7
7
  ## Start with the installed command and owner
8
8
 
9
- Use the help shipped with the executable that is actually failing:
9
+ Use the help of the executable that is actually failing:
10
10
 
11
11
  ```sh
12
12
  tau --help
@@ -17,24 +17,24 @@ tau nook --help
17
17
  tau telegram --help
18
18
  ```
19
19
 
20
- Help reflects that installed binary. The `tau_docs` corpus reflects the installed host binary. An attached TUI, remote host, and deployed History or Nook service can run different versions, so do not assume host documentation describes an older client's flags or a separately deployed service's behavior.
20
+ Help describes that installed binary, and `tau_docs` describes the host's installed version. An attached TUI, a remote host, and deployed history or Nook services can each run a different version, so the host's documentation may not match an older client's flags or a separately deployed service.
21
21
 
22
- For a local startup, `tau --debug` resolves configuration and content from the current directory, prints warnings and effective catalog information, then exits without opening the TUI:
22
+ For a local startup, `tau --debug` loads configuration and content from the current directory, prints warnings and catalog information, and exits without opening the TUI:
23
23
 
24
24
  ```sh
25
25
  cd /path/that-should-own-the-session
26
26
  tau --debug
27
27
  ```
28
28
 
29
- Add `--persona <exact-id>` when checking one persona. Debug output includes complete model-facing project context. Keep it private and never use it as a convenient configuration dump. It cannot inspect a running remote host, a hosted target, or an attached client's effective state.
29
+ Add `--persona <exact-id>` to check one persona. The output includes the complete project context sent to the model, so keep it private and do not use it to dump configuration. It cannot inspect a running remote host, a hosted environment, or an attached client.
30
30
 
31
- Inside the TUI, `/help` shows current commands, loaded skills, and injected context-file paths. It is useful for current session visibility, while `/reload` is the operation that asks the host to recollect runtime content.
31
+ Inside the TUI, `/help` shows the commands, loaded skills, and context file paths of the current session. `/reload` asks the host to load session content again.
32
32
 
33
33
  ## A configuration change has no effect
34
34
 
35
- Identify the consumer in [ownership and scope](ownership-and-scope.md). Session content and host tools come from the execution environment and host. Themes, speech, diff launchers, and TUI client tools come from the client. History and environment resolvers are host-owned. Telegram routing and workspaces come from its separate runner configuration.
35
+ Find what reads the setting, using [ownership and scope](ownership-and-scope.md). Session content and host tools come from the execution environment and the host. Themes, speech, and TUI client tools come from the client. History and hosted environment connections belong to the host. Telegram routing and workspaces come from the runner's own configuration.
36
36
 
37
- Confirm that component's machine, `cwd`, home, and tool path. In an attached session these safe checks report the execution environment, not the laptop:
37
+ Confirm that part's machine, `cwd`, home, and tool paths. In an attached session, these checks report the execution environment, not the laptop:
38
38
 
39
39
  ```text
40
40
  !!pwd
@@ -42,134 +42,132 @@ Confirm that component's machine, `cwd`, home, and tool path. In an attached ses
42
42
  !!command -v git
43
43
  ```
44
44
 
45
- A global Tau level is omitted when the relevant `cwd` is outside that component's home. Tau applies every recognized ancestor level using field-specific rules. Check warnings and [configuration](configuration.md) for these common causes:
45
+ The global level is skipped when the relevant `cwd` is outside home. Every project level on the path applies, with rules that depend on the field. Read the warnings and [configuration](configuration.md) for these common causes:
46
46
 
47
- - a nearer scalar, object, or `enabledClientTools` list replaced the broader value;
47
+ - a nearer value, object, or `enabledClientTools` list replaced the broader one;
48
48
  - a merging field kept keys from another level;
49
49
  - a relative path resolved from the level that declared it;
50
- - an invalid nearer value was skipped, leaving a broader value effective; or
51
- - a misspelled unknown field was silently stripped.
50
+ - an invalid nearer value was skipped, so a broader value still applies; or
51
+ - a misspelled field was removed without a warning.
52
52
 
53
- Validate JSON without displaying it:
53
+ Validate JSON without printing it:
54
54
 
55
55
  ```sh
56
56
  node -e 'JSON.parse(require("node:fs").readFileSync(process.argv[1], "utf8"))' \
57
57
  /path/to/config.json
58
58
  ```
59
59
 
60
- Use `tau --debug` from the intended directory for a new local startup. For a live session, run `/reload` while idle and read every warning.
60
+ Run `tau --debug` from the intended directory for a new local startup. For a running session, run `/reload` while idle and read every warning.
61
61
 
62
- | Change owner | Apply boundary |
62
+ | Change | How to apply |
63
63
  | --- | --- |
64
- | Current session runtime content | `/reload` while idle |
65
- | Theme, diff, speech, or TUI client tools | Restart `tau` or `tau attach` |
66
- | Host environment, History, resolver, listener, or binary | Restart the host |
67
- | Default persona or environment identity | Create a new session if it must change |
64
+ | Session configuration and content | `/reload` while idle |
65
+ | Theme, speech, or TUI client tools | Restart `tau` or `tau attach` |
66
+ | Host environment, `apiKeys`, history, hosted environments, listener, or Tau version | Restart the host |
67
+ | Default persona or execution environment | Create a new session if it must change |
68
68
  | Telegram config, routing, speech, or workspaces | Restart the runner |
69
69
 
70
- ## `/reload` is unavailable, refused, or insufficient
70
+ ## `/reload` is unavailable, refused, or not enough
71
71
 
72
- `/reload` is a TUI command backed by the current session. It is unavailable in a plain shell and is refused while a turn or conflicting session operation is active. Wait for the turn to settle or interrupt it deliberately, then run the command again.
72
+ `/reload` is a TUI command for the current session. It is refused while a turn or another conflicting operation is running. Wait for the turn to finish, or interrupt it, and run the command again.
73
73
 
74
- Reload updates runtime configuration, personas, prompts, skills, `AGENTS.md` context, and the host-tool registry for future turns. It does not:
74
+ Reload updates configuration, personas, prompts, skills, `AGENTS.md` context, and host tools for later turns. It does not:
75
75
 
76
- - alter the execution environment's kind, identity, `cwd`, or home;
77
- - rebuild an attached client's themes, diff launcher, speech configuration, or advertised tools;
78
- - reread environment variables into an already-running process;
79
- - rebuild host-wide History or hosted-environment resolvers;
80
- - update executable code or built-in documentation; or
81
- - reconfigure an already spawned subagent thread.
76
+ - change the execution environment, its `cwd`, or its home;
77
+ - reload an attached client's themes, speech settings, or tools;
78
+ - read environment variables again in a running process;
79
+ - reload the host's history service or hosted environment settings;
80
+ - update Tau's code or built-in documentation; or
81
+ - change subagents that are already running.
82
82
 
83
- A logical turn captures its persona, model settings, tools, and policies when it starts. Reasoning changes and reloads do not change that active turn or its steering continuations. A queued message captures current state only when it later starts. If behavior appears stale, let one independently submitted turn begin after reload before concluding that the change failed.
83
+ A turn keeps the persona, model settings, tools, and policies it started with. Reasoning changes and reloads do not affect the running turn or its steering. A queued message uses the settings current when it starts. If behavior seems unchanged, let a new turn start after the reload before deciding the change failed.
84
84
 
85
- Protocol and SDK clients can call `session.reload` directly, but the same idle and ownership rules apply.
85
+ Protocol and SDK clients can call `session.reload` directly, with the same rules.
86
86
 
87
87
  ## A persona, prompt, skill, model, or theme is missing
88
88
 
89
- Session resources come from the execution environment; themes come from the TUI client. Check the exact discovery path and `/reload` warning.
89
+ Session content comes from the execution environment, and themes come from the TUI. Check the exact discovery path and the `/reload` warnings.
90
90
 
91
91
  ### Persona
92
92
 
93
- For a new local session, run `tau --debug --persona <exact-id>`. The Markdown filename must match `id`; `provider`, `model`, and a non-empty prompt body are required. Startup IDs are exact and case-sensitive. If built-ins are disabled, at least one custom persona must remain. See [personas](personas.md).
93
+ For a new local session, run `tau --debug --persona <exact-id>`. The filename must match `id`, and `provider`, `model`, and a non-empty prompt body are required. Startup IDs are exact and case-sensitive. See [personas](personas.md).
94
94
 
95
95
  ### Prompt
96
96
 
97
- Run `/reload` after changing prompt metadata. Bodies load lazily, so an invocation can fail if the execution-environment file later becomes unreadable or invalid. `/prompt:<id>` only fills the editor; it does not submit. See [prompts and project context](prompts-and-project-context.md).
97
+ Run `/reload` after adding, removing, or renaming a prompt or changing its label. The body is read each time the prompt is used, so using it fails if the file has since become unreadable or invalid. `/prompt:<id>` only fills the editor. See [prompts and project context](prompts-and-project-context.md).
98
98
 
99
99
  ### Skill
100
100
 
101
- Use `/help` to inspect loaded skills. A skill needs uppercase `SKILL.md`, valid frontmatter, a lowercase-dash name, and a matching directory name. `.tau/skills` wins over `.agents/skills` at one level; nearer levels win overall.
101
+ Use `/help` to see loaded skills. A skill needs `SKILL.md` in uppercase, valid frontmatter, a lowercase name with dashes, and a matching directory name. At one level, `.tau/skills` wins over `.agents/skills`, and nearer levels win overall.
102
102
 
103
- Every persona exposes all discovered skills; the trigger determines when the agent opens a skill. `allowed-tools` is currently ignored. See [skills](skills.md).
103
+ Every persona can use all discovered skills. The trigger decides when the agent opens one. `allowed-tools` is ignored. See [skills](skills.md).
104
104
 
105
105
  ### Model
106
106
 
107
- Providers must be known and model IDs are exact and case-sensitive. Check warnings for unknown provider/model references. `tau --debug --persona <id>` shows local resolution; a small request proves endpoint, account, and credential access. Refresh the remote catalog and reload while idle. See [models](models.md).
107
+ Providers must be known, and model IDs are exact and case-sensitive. Check warnings for unknown providers or models. `tau --debug --persona <id>` shows how a local startup resolves the model, and a small request confirms the endpoint, account, and credentials. Refresh the catalog and reload while idle. See [models](models.md).
108
108
 
109
109
  ### Theme
110
110
 
111
- Check the exact built-in theme ID and the client’s `defaultTheme`. Select `/theme:<id>` for the current run, or restart the TUI to apply a new startup default. A remote host’s theme selection does not affect an attached client.
111
+ Check the exact built-in theme ID and the client's `defaultTheme`. Use `/theme:<id>` for the current run, or restart the TUI to apply a new default. A remote host's theme does not affect attached clients.
112
112
 
113
113
  ## A tool or subagent is unavailable
114
114
 
115
- Classify the missing capability before changing configuration.
115
+ Work out which kind of tool is missing before changing configuration.
116
116
 
117
- For a persona-controlled host tool, inspect the active persona's exact `tools` list. An explicit list replaces defaults. Run `tau --debug --persona <id>` for a new local session or reload the current session while idle. Credentials can make a selected tool fail, but usually do not remove its schema. Nook is the exception: it also requires effective `nook` configuration.
117
+ For a host tool, check the active persona's `tools` list. A list replaces the defaults. Run `tau --debug --persona <id>` for a new local session, or reload the current session while idle. Missing credentials make a tool fail but usually do not remove it. Nook is the exception: it also needs `nook` configuration.
118
118
 
119
- For a subagent, check these three gates:
119
+ For subagents, check three things:
120
120
 
121
- 1. The main persona exposes `spawn_agent` and any other needed supervision tools.
122
- 2. A requested launch model exactly matches the configured subagent allowlist.
123
- 3. Fewer than eight subagent runs are currently active.
121
+ 1. The main persona has `spawn_agent` and any other subagent tools needed.
122
+ 2. A requested model exactly matches an entry in the launch allowlist.
123
+ 3. Fewer than eight subagents are running.
124
124
 
125
- An already spawned thread keeps its captured model, tools, and working directory after reload. Recovery does not restore subagent threads, so old agent IDs cannot receive follow-ups after a host restart. Use `list_agents` to inspect live records. See [subagents](subagents.md).
125
+ A running subagent keeps its model, tools, and working directory after a reload. Recovery does not restore subagents, so old IDs cannot receive follow-ups after a host restart. Use `list_agents` to see live subagents. See [subagents](subagents.md).
126
126
 
127
- For `tau_docs`, absence indicates a host runtime or version problem, not a persona list. Confirm the host package and restart it.
127
+ If `tau_docs` is missing, the problem is the host's installation or version, not a persona. Check the host package and restart it.
128
128
 
129
129
  ## A command client tool is missing or fails
130
130
 
131
- A configured command client tool exists only while its owning client observes the session. Check the client side in this order:
131
+ A command client tool exists only while its client observes the session. On the client side, check:
132
132
 
133
- 1. The definition is in eligible global configuration on the client machine.
134
- 2. The entry is valid and has a root object JSON Schema.
135
- 3. The nearest project `enabledClientTools` includes the exact case-sensitive name, or `defaultEnabled` applies because no project selection exists.
133
+ 1. The definition is in global configuration on the client machine, and the client's `cwd` is inside home.
134
+ 2. The entry is valid and its schema has an object root.
135
+ 3. The nearest project `enabledClientTools` includes the exact, case-sensitive name, or no project sets the field and `defaultEnabled` applies.
136
136
  4. The TUI was not started with `--no-client-tools`.
137
- 5. No other observer or host tool already owns the same name.
137
+ 5. No other client and no host tool uses the same name.
138
138
  6. The client was restarted or reconnected after the configuration change.
139
139
 
140
- Unknown selection names are ignored. An empty `enabledClientTools` intentionally selects none. `/reload` does not re-advertise client tools.
140
+ Unknown names in the selection are ignored, and an empty `enabledClientTools` selects none. `/reload` does not refresh client tools.
141
141
 
142
- For execution failures, decide which half failed. “Command client tool” launch, permission, `PATH`, timeout, stderr, framing, and nonzero-exit errors belong to the client machine. Errors from `executionEnvironment.exec` belong to the session target. The executable runs directly, not through a shell, and inherits the client process's current directory and environment unchanged.
142
+ For failures, find which side failed. Launch, permission, `PATH`, timeout, stderr, framing, and nonzero-exit errors come from the client machine. Errors from `executionEnvironment.exec` come from the session machine. The executable runs directly, without a shell, with the client process's directory and environment.
143
143
 
144
- A detached owning client makes its tools unavailable and cancels active calls. Reconnect does not resume the previous process. See [client tools](client-tools.md).
144
+ When the client detaches, its tools disappear and running calls are cancelled. Reconnecting does not resume the earlier process. See [client tools](client-tools.md).
145
145
 
146
146
  ## A credential is reported missing or rejected
147
147
 
148
- Find the process making the request:
148
+ Find the process that makes the request:
149
149
 
150
- | Operation | Owner |
151
- | ---------------------------------------- | ------------ |
152
- | Model, host `web`, `history`, or `nook` | Host |
153
- | `/listen`, `/speak`, or TUI client tool | Client |
154
- | Telegram bot or transcription | Runner |
155
- | `tau nook`, `tau history`, or PDF unpack | Invoking CLI |
156
- | Fly Sprite resolution | Host startup |
150
+ | Operation | Where the credential belongs |
151
+ | --- | --- |
152
+ | Model calls, host `web`, `history`, or `nook` | Host |
153
+ | `/listen`, `/speak`, or TUI client tools | Client |
154
+ | Telegram bot or transcription | Runner |
155
+ | `tau nook`, `tau history`, or `tau tool` commands | The machine running the command |
156
+ | Fly Sprite connection | Host startup configuration |
157
157
 
158
- A laptop variable does not update a remote host. Environment changes require an owner restart. Global `apiKeys` belong to the owning process and require its restart.
158
+ A variable set on the laptop does not reach a remote host. After changing environment variables or `apiKeys`, restart the process that uses them. `apiKeys` in a project file are rejected; check the process's environment and its global configuration.
159
159
 
160
- Never print the secret, environment, or whole configuration. Privately confirm the expected source, read the missing-credential message, and make one small request. See [credentials](credentials.md). Project `apiKeys` are rejected; inspect the owning process's environment and private global configuration.
160
+ Never print the secret, the environment, or the whole configuration. Check the expected source privately, read the error message, and make one small request. See [credentials](credentials.md).
161
161
 
162
162
  ## A Codex account cannot be selected
163
163
 
164
- Run this on the session host, not an attached client:
164
+ Run this on the session host, not on an attached client:
165
165
 
166
166
  ```sh
167
167
  tau auth list
168
168
  ```
169
169
 
170
- The output shows stored account identities, active selection, credential refresh health, and informational usage windows without showing tokens.
171
-
172
- Use the supported commands for the condition shown:
170
+ It shows stored accounts, which one is active, refresh status, and usage windows, without showing tokens. Fix the problem with these commands:
173
171
 
174
172
  ```sh
175
173
  tau auth login codex
@@ -177,112 +175,59 @@ tau auth use codex --account developer@example.com
177
175
  tau auth logout codex --account developer@example.com
178
176
  ```
179
177
 
180
- Re-login when credentials are expired or refresh failed. Select an account explicitly with `auth use`. Logging out the active account leaves none active; Tau never switches based on usage or provider failure. Selection applies to later requests across sessions without changing requests already in flight.
178
+ Log in again when credentials have expired or refresh failed. Choose an account with `auth use`. Logging out the active account leaves none active, and Tau never switches accounts because of usage or failures. A new selection applies to later requests in every session, not to requests already in progress.
181
179
 
182
- Do not edit `~/.config/tau/auth.json`; the auth commands coordinate updates and preserve permissions.
180
+ Do not edit `~/.config/tau/auth.json`; the auth commands handle updates and permissions.
183
181
 
184
182
  ## Bash prints unexpected text, prompts, or reports no TTY
185
183
 
186
- Every Tau command uses a fresh non-interactive login Bash in the execution environment. Reproduce startup safely with `!!bash -lc 'printf ok'`. Check `/etc/profile`, the first user login file, `BASH_ENV`, and any `.bashrc` sourced from them. A file that prints, reads stdin, prompts, runs terminal setup, or exits affects every command.
184
+ Every command runs in a fresh non-interactive login Bash in the execution environment. Test startup with `!!bash -lc 'printf ok'`. Check `/etc/profile`, the first user login file, `BASH_ENV`, and any `.bashrc` they source. A file that prints, reads stdin, prompts, sets up the terminal, or exits affects every command.
187
185
 
188
- Use automation-safe command flags. Configure credentials before invocation, set Git and SSH up for noninteractive access, and avoid editors or tools that require terminal control. Shell aliases, variables, `cd`, and functions do not persist between calls, so pass `workingDirectory` or use a complete command each time.
186
+ Use flags that avoid prompts. Set up credentials beforehand, configure Git and SSH to work without prompts, and avoid editors and tools that need a terminal. Aliases, variables, `cd`, and functions do not carry over between calls, so pass `workingDirectory` or write a complete command each time.
189
187
 
190
- Local command sanitization removes inherited credential-shaped variable names. If a target command needs authentication, use the tool's own secure noninteractive credential mechanism rather than broad environment forwarding. Hosted targets use their own environment.
188
+ In local environments, Tau removes inherited variables with credential-like names. If a command needs authentication, use that tool's own non-interactive credential setup instead of passing the whole environment through. Hosted environments use their own environment.
191
189
 
192
190
  ## WebSocket attachment is unauthorized or unsafe
193
191
 
194
- Confirm that client and server use the same token source. `--auth-token` wins when supplied; otherwise `TAU_WS_AUTH_TOKEN` can supply either process. Check presence and process configuration without logging the value.
192
+ Confirm that client and server use the same token. `--auth-token` wins when given; otherwise `TAU_WS_AUTH_TOKEN` can supply it on either side. Check that it is set without logging its value.
195
193
 
196
- Tau sends the token as the `tau_token` WebSocket query parameter. A reverse proxy must preserve the query string and WebSocket upgrade. It should also redact query strings from logs. An authentication failure currently appears to clients as an unexpected WebSocket close, so correlate it with the server or proxy's redacted status logs.
194
+ Tau sends the token as the `tau_token` query parameter. A reverse proxy must pass through the query string and the WebSocket upgrade, and should remove query strings from its logs. A rejected token shows up in the client as an unexpected WebSocket close, so compare with the server's or proxy's logs.
197
195
 
198
- Tau does not terminate TLS. Use `wss://` behind a trusted TLS reverse proxy, or keep the server on loopback and use an SSH tunnel. An unauthenticated listener is acceptable only within a boundary where every reachable client is trusted with full session access.
196
+ Tau does not handle TLS. Use `wss://` behind a trusted TLS reverse proxy, or keep the server on loopback and use an SSH tunnel. Run without a token only where every client that can connect is trusted with full session access.
199
197
 
200
- If attachment reports an unsupported protocol version or invalid peer message, upgrade the host and client to the same Tau release and restart both. Do not downgrade a host that may have written newer session documents.
198
+ If attachment reports an unsupported protocol version or an invalid message, upgrade host and client to the same Tau release and restart both. Do not downgrade a host that may have saved sessions in a newer format.
201
199
 
202
200
  ## Remote attach uses the wrong directory or cannot create a session
203
201
 
204
- For `tau attach --new`, `--cwd` must be an absolute path inside the selected execution environment. With the default local execution kind it is a host path, not a path on the attaching machine. Tau does not create the directory, clone a repository, or infer remote repository attributes.
202
+ For `tau attach --new`, `--cwd` must be an absolute path inside the chosen execution environment. With the default local kind, it is a path on the host, not on the attaching machine. Tau does not create the directory, clone a repository, or detect repository attributes.
205
203
 
206
- For Fly Sprite creation, verify on the host that:
204
+ For a Fly Sprite session, check on the host that:
207
205
 
208
- - the named API id exists in startup configuration;
209
- - its credential is available to the host process;
210
- - the named Sprite already exists;
211
- - the absolute target `cwd` exists there; and
212
- - the configured execution home matches the intended target account.
206
+ - `flySprites` is set in the host's startup configuration;
207
+ - its token is available to the host process;
208
+ - the named Sprite exists;
209
+ - the absolute `cwd` exists in the Sprite; and
210
+ - the configured `home` matches the account you intend to use.
213
211
 
214
- Changing a resolver definition or credential requires a host restart. `/reload` cannot replace a session's environment identity or repair a missing target.
212
+ Changing the Sprite connection or its token requires a host restart. `/reload` cannot change a session's environment or fix a missing target.
215
213
 
216
- Without `--session` or `--new`, attach needs a TTY for its selector. In automation, pass one explicitly. Normal local startup `--persona` flags are not attach options; choose the host default for new sessions or switch the attached session with `/persona:<id>` while idle.
214
+ Without `--session` or `--new`, attach needs a TTY for its selector, so pass one of them in scripts. Local `--persona` flags are not attach options. Set the host's default for new sessions, or switch with `/persona:<id>` while idle.
217
215
 
218
216
  ## A session is missing, interrupted, or will not recover
219
217
 
220
- A selector shows only sessions this host can load and restore. Confirm its machine, OS user, home, Tau version, resolver configuration, and target still match the creator. Another user's `~/.config/tau/sessions` is a different store. Restore missing API definitions, credentials, local directory, or Sprite. Never edit session JSON to substitute a target or `cwd`.
221
-
222
- Recovery returns idle, aborts unfinished turns, cancels running maintenance, and removes live subagents. Review the last assistant and tools, then safely check `!!pwd` and `!!git status --short`. Retry continues current history without rerunning completed tools automatically.
223
-
224
- A WebSocket client disconnect does not interrupt the long-running host; server shutdown does. Closing a local TUI shuts down its owned host, so interrupted recovery is expected.
225
-
226
- A newer storage version requires that Tau version or later. For invalid JSON, snapshot, or ID errors, preserve the file and exact error, stop competing hosts, and investigate normal recovery. Do not edit or delete it first. Newer Tau migrates supported older documents automatically.
227
-
228
- ## History is unavailable, empty, or not current
229
-
230
- History is host-owned and independent of session snapshots. Its default database is in the host home, and a failure warns without stopping the session. Check the host user and home, permissions, free space, Node version, and unexpected competing processes. Restart the host after correction. Do not open, edit, replace, or delete SQLite files as an initial repair.
231
-
232
- The `history` tool appears only when the active persona selects it. Its agent-facing description requires one documentation-only call when the API documentation is not already visible, then reuses the visible documentation for later calls. If the tool is missing, fix the persona and reload. The tool is intended only for requests or active instructions that directly call for historical transcripts.
233
-
234
- With remote History configured, queries use the remote collection while local SQLite remains the durable first write and outbox. Replication is asynchronous. An empty result can mean the wrong host/home, filters, endpoint, deployment credential, network path, or pending replication. Restart the host after changing the global target or environment, then run one narrow query.
235
-
236
- Do not inspect outbox rows, databases, keys, or unrelated transcripts. Removing remote configuration does not erase replicated data. See [history](history.md).
237
-
238
- ## Nook is missing, unauthorized, or serving the wrong visibility
239
-
240
- The model-facing tool needs both `nook` in the active persona and effective session configuration. Fix the execution-environment level, `/reload` while idle, and start a later turn. Subagents cannot receive Nook.
241
-
242
- The CLI instead uses the invoking machine's configuration and credentials. A laptop command does not prove a remote host tool works. Start with installed `tau nook --help` and `tau nook list`; the latter uses effective configured credentials and reports URLs and visibility without printing credential values.
243
-
244
- For `401` or Access failures, verify the domain, client id, secret source, service-auth policy, and the deployed Worker's Access team domain and audience. Access must protect only `https://<domain>/__nook/*`, with the Cookie Path Attribute disabled. Private-browser redirect loops usually indicate Access or cookie configuration.
245
-
246
- Deploys are private unless `--public` is supplied. Public assets are anonymous and public browser KV is anonymously writable. If visibility is wrong, verify with `list` and redeploy reviewed content without `--public`. Rotate exposed credentials immediately. Use deliberate `delete` only when taking the site offline is intended. KV survives redeploy, so remove sensitive KV with supported commands.
247
-
248
- Copy needs an existing empty destination. Static deploys require `index.html`, reject hidden files and symlinks, and reserve `/__nook`. Setup and destroy also require noninteractive Wrangler authentication. Compare the [Nook](nook.md) page and installed help with the deployed Worker version before upgrading or changing infrastructure.
249
-
250
- ## Telegram ignores messages or selects the wrong project
251
-
252
- The Telegram runner uses the JSON file passed to `--config-file`, not a Tau project `config.json`. Relative workspace and project paths resolve from that file's directory. Restart the runner after editing it.
253
-
254
- If a private message is ignored, check both `allowedChatIds` and `allowedUserIds`. An omitted list does not restrict private access by that dimension. If a group message is ignored, the group id must be in `allowedChatIds`, the triggering message must explicitly mention the bot, and the sender must pass `allowedUserIds` when that list is configured.
255
-
256
- Messages in an allowed group that do not trigger the bot can be buffered as context for the next mentioned turn, including attachments, audio transcripts, and processing errors. Confirm that this sharing is intended before broadening a chat allowlist.
257
-
258
- Each bot can restrict `allowedProjectIds`. `/use_<project>` changes the preference for future `/new` sessions but does not move the active session. Use `/status` to distinguish the active session's project from the saved preference.
259
-
260
- Runner startup config errors name every invalid bot or project field. Use `tau telegram --help`, validate JSON syntax without printing the file, and fix all reported references, persona suffixes, project kinds, or allowlist IDs before restarting. Keep the file private because it contains bot tokens.
261
-
262
- ## Telegram workspace preparation or recovery fails
263
-
264
- Repository projects need runner-side `gh`, Git, network access, and noninteractive credentials. Check `repo`, `ref`, workspace-root permissions and space, and `workingDirectory` after checkout. Tau maintains a bare cache and can reinitialize it when the repository changes. Do not delete caches or workspaces first; preserve logs and fix access or configuration.
265
-
266
- Persistent-directory projects require the configured directory to exist and intentionally share it across sessions. Recovery rejects a stored `cwd` that differs from current configuration. Restore the mapping or create a new session in the new directory, rather than editing state.
267
-
268
- Tau reconstructs missing managed workspaces. A preserved repository or composite workspace is reused as-is: recovery does not reprovision it or rewrite generated composite metadata from the current Telegram project configuration. New and reconstructed repositories may run executable `.tau/scripts/provision` asynchronously after the session is available. Failure notifies chats but leaves the session usable. Fix the script or dependencies, then run it manually only when its contract allows, or create a fresh session to provision again.
269
-
270
- Recovery needs the same `workspaceRoot`, project definitions, host home, and Tau sessions. Inspect runner logs and `/status`. Do not edit runner state, project preferences, snapshots, or managed workspaces to force a match.
271
-
272
- ## Telegram audio or attachment processing fails
273
-
274
- Telegram audio transcription uses Gemini and needs `GEMINI_API_KEY` or `apiKeys.google`. Set the credential for the runner process and restart it after changing the environment or configured key.
275
-
276
- Distinguish download, materialization, format, and transcription errors. The reply or runner log states which stage failed. Confirm Telegram can deliver the file to the bot, the attachment type is supported, the runner can write its temporary directory, and Gemini accepts the media type. Do not log media bytes or transcripts merely to prove they exist.
218
+ The selector shows only sessions the host can load and reconnect. Confirm that the machine, OS user, home, Tau version, hosted environment settings, and target match the ones that created the session. Another user's `~/.config/tau/sessions` is a separate store. Restore missing settings, credentials, directories, or Sprites. Never edit session files to change the target or `cwd`.
277
219
 
278
- Successful audio turns echo `transcribed: …` before submission. In groups, non-triggering audio can be buffered for later mentioned context. If that is inappropriate for the chat, narrow `allowedChatIds` or avoid enabling the group.
220
+ A recovered session is idle. Unfinished turns are recorded as aborted, running maintenance is cancelled, and subagents are gone. Look at the last assistant message and tool results, then check `!!pwd` and `!!git status --short`. Retry continues from the current history without running completed tools again.
279
221
 
280
- Outgoing `/tts_on` voice responses need both `OPENAI_API_KEY` or `apiKeys.openai` for rewriting and `ELEVENLABS_API_KEY` or `apiKeys.elevenlabs` for synthesis. Check [`speech.voiceId`](config-reference.md#speech) if a configured voice is unavailable. They also require runner-side `ffmpeg` with Opus support. A generation or delivery failure sends `voice response failed. please try again.` while detailed diagnostics remain in runner logs. The original text response remains delivered.
222
+ A WebSocket client disconnecting does not interrupt a long-running host, but a server shutdown does. Closing a local TUI shuts down its host, so recovering an interrupted turn is expected there.
281
223
 
282
- ## Telegram replies or notifications are delayed or missing
224
+ A session saved in a newer storage format needs that Tau version or later. Newer Tau versions upgrade supported older sessions automatically. For invalid JSON, snapshot, or ID errors, keep the file and the exact error, stop other hosts using the same store, and investigate through normal recovery. Do not edit or delete the file first.
283
225
 
284
- Each outbound chunk has a deadline and retries retryable failures twice. Telegram `retry_after` is honored, and per-chat ordering holds later notifications. Large replies are split, so only a later chunk may have failed.
226
+ ## History, Nook, or Telegram
285
227
 
286
- Check runner logs for method, redacted status, retry class, attempt, chat, session, and message identity. Correct network, rate limit, token, or chat permissions on the runner. Before manual resend, check delivered chunks because ambiguous failures can duplicate them.
228
+ These features have their own troubleshooting sections:
287
229
 
288
- Failed/blocked turn and confirmed-unaccepted request notifications persist until delivery succeeds; runner restart rehydrates them. A delivery failure is not a Tau turn failure, and a provision failure is not a session failure. Use `/status` and logs to separate these states. Never repair delivery by editing runner state.
230
+ - [History](history.md#troubleshooting): missing API key, service errors, sessions missing from remote search, and local history failures.
231
+ - [Nook](nook.md#common-errors): configuration, Access and authorization errors, wrong visibility, and deploy rejections.
232
+ - [Telegram](telegram.md#troubleshooting): ignored messages, project selection, audio, voice replies, and late or missing replies.
233
+ - [Telegram projects and workspaces](telegram-projects.md#troubleshooting): repository preparation, provisioning, and workspace recovery.