@markusylisiurunen/tau 0.3.82 → 0.3.83

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 (147) hide show
  1. package/README.md +1 -3
  2. package/dist/core/agent/agent_runtime.js +6 -4
  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/history/cli.js +48 -0
  9. package/dist/core/history/cli.js.map +1 -1
  10. package/dist/core/history/history_manager.js +9 -3
  11. package/dist/core/history/history_manager.js.map +1 -1
  12. package/dist/core/history/local_history_store.js +9 -2
  13. package/dist/core/history/local_history_store.js.map +1 -1
  14. package/dist/core/history/remote_history_client.js +18 -3
  15. package/dist/core/history/remote_history_client.js.map +1 -1
  16. package/dist/core/models/openrouter.js +17 -5
  17. package/dist/core/models/openrouter.js.map +1 -1
  18. package/dist/core/models/openrouter_decisions.js +16 -1
  19. package/dist/core/models/openrouter_decisions.js.map +1 -1
  20. package/dist/core/static/tau_docs/client-tools.md +53 -53
  21. package/dist/core/static/tau_docs/config-reference.md +46 -43
  22. package/dist/core/static/tau_docs/configuration.md +40 -36
  23. package/dist/core/static/tau_docs/credentials.md +32 -31
  24. package/dist/core/static/tau_docs/getting-started.md +28 -28
  25. package/dist/core/static/tau_docs/history.md +114 -79
  26. package/dist/core/static/tau_docs/image-generation.md +20 -18
  27. package/dist/core/static/tau_docs/index.md +30 -31
  28. package/dist/core/static/tau_docs/manifest.json +1 -0
  29. package/dist/core/static/tau_docs/models.md +17 -17
  30. package/dist/core/static/tau_docs/node-sdk.md +69 -69
  31. package/dist/core/static/tau_docs/nook.md +75 -69
  32. package/dist/core/static/tau_docs/openrouter.md +28 -13
  33. package/dist/core/static/tau_docs/ownership-and-scope.md +21 -23
  34. package/dist/core/static/tau_docs/pdf-unpacking.md +6 -6
  35. package/dist/core/static/tau_docs/personas.md +29 -27
  36. package/dist/core/static/tau_docs/prompts-and-project-context.md +41 -39
  37. package/dist/core/static/tau_docs/remote-sessions.md +38 -38
  38. package/dist/core/static/tau_docs/sdk-diff-review.md +16 -12
  39. package/dist/core/static/tau_docs/security.md +72 -72
  40. package/dist/core/static/tau_docs/session-protocol-methods.md +45 -45
  41. package/dist/core/static/tau_docs/session-protocol.md +43 -43
  42. package/dist/core/static/tau_docs/sessions.md +99 -88
  43. package/dist/core/static/tau_docs/skills.md +25 -20
  44. package/dist/core/static/tau_docs/speech-generation.md +5 -5
  45. package/dist/core/static/tau_docs/subagents.md +42 -44
  46. package/dist/core/static/tau_docs/telegram-projects.md +142 -0
  47. package/dist/core/static/tau_docs/telegram.md +64 -181
  48. package/dist/core/static/tau_docs/tools.md +72 -80
  49. package/dist/core/static/tau_docs/troubleshooting.md +94 -149
  50. package/dist/core/static/tau_docs/tui.md +124 -80
  51. package/dist/core/tool/image_generate.js +5 -17
  52. package/dist/core/tool/image_generate.js.map +1 -1
  53. package/dist/core/tool/openrouter.js +21 -2
  54. package/dist/core/tool/openrouter.js.map +1 -1
  55. package/dist/core/utils/gemini_transcription.js +43 -13
  56. package/dist/core/utils/gemini_transcription.js.map +1 -1
  57. package/dist/core/utils/model_stream.js +17 -1
  58. package/dist/core/utils/model_stream.js.map +1 -1
  59. package/dist/core/version.js +2 -2
  60. package/dist/diff_tool/app/dist/assets/{angular-html-D20byCHL.js → angular-html-x29PkEoY.js} +1 -1
  61. package/dist/diff_tool/app/dist/assets/{angular-ts-CvVQslm2.js → angular-ts-CsWCqoCf.js} +1 -1
  62. package/dist/diff_tool/app/dist/assets/{apl-DNIxlYWe.js → apl-CEvdc7jl.js} +1 -1
  63. package/dist/diff_tool/app/dist/assets/{astro-DDOw4EUG.js → astro-Cgi6YxH2.js} +1 -1
  64. package/dist/diff_tool/app/dist/assets/{blade-DlhB-SLW.js → blade-B0pr7Zx6.js} +1 -1
  65. package/dist/diff_tool/app/dist/assets/{c-C1f4vhDm.js → c-DDVLgtVy.js} +1 -1
  66. package/dist/diff_tool/app/dist/assets/{chapel-Ctt8xOX1.js → chapel-Bk9M7Jej.js} +1 -1
  67. package/dist/diff_tool/app/dist/assets/{cobol-BXw71PAA.js → cobol-DyEvnPuC.js} +1 -1
  68. package/dist/diff_tool/app/dist/assets/{coffee-CRh_5Nmr.js → coffee-Di2-m3Jq.js} +1 -1
  69. package/dist/diff_tool/app/dist/assets/{cpp-IlI-zWOZ.js → cpp-CWpAaUgO.js} +1 -1
  70. package/dist/diff_tool/app/dist/assets/{crystal-CXeL28i7.js → crystal-CUker9Zt.js} +1 -1
  71. package/dist/diff_tool/app/dist/assets/{css-BfST9hFI.js → css-D4XpBIiJ.js} +1 -1
  72. package/dist/diff_tool/app/dist/assets/{edge--Q22k_ty.js → edge-CVxhhF7L.js} +1 -1
  73. package/dist/diff_tool/app/dist/assets/{elixir-CIfC_rQx.js → elixir-B_FS9APl.js} +1 -1
  74. package/dist/diff_tool/app/dist/assets/{elm-OkZ29XRO.js → elm-1KyefTkH.js} +1 -1
  75. package/dist/diff_tool/app/dist/assets/{erb-B8ZXgEqv.js → erb-CCgO9dRW.js} +1 -1
  76. package/dist/diff_tool/app/dist/assets/{git-rebase-CxkO_WGd.js → git-rebase-D0VYo_oY.js} +1 -1
  77. package/dist/diff_tool/app/dist/assets/{glimmer-js-BVadyIrr.js → glimmer-js-Ce07ngjZ.js} +1 -1
  78. package/dist/diff_tool/app/dist/assets/{glimmer-ts-D5J3Qb7n.js → glimmer-ts-BmOM4djO.js} +1 -1
  79. package/dist/diff_tool/app/dist/assets/{glsl-B6iy73-Y.js → glsl-D-jkLYJ8.js} +1 -1
  80. package/dist/diff_tool/app/dist/assets/{graphql-Dc3rUXf5.js → graphql-DZOwJE5e.js} +1 -1
  81. package/dist/diff_tool/app/dist/assets/{hack-q8Utf8Jp.js → hack-Cgvn19h8.js} +1 -1
  82. package/dist/diff_tool/app/dist/assets/{haml-mjMIlj_2.js → haml-JTmDSYQl.js} +1 -1
  83. package/dist/diff_tool/app/dist/assets/{handlebars-CA-BL8Ks.js → handlebars-CChh7Dy5.js} +1 -1
  84. package/dist/diff_tool/app/dist/assets/{html-BmPxhYCX.js → html-BKgzx_cb.js} +1 -1
  85. package/dist/diff_tool/app/dist/assets/{html-derivative-CvknIjuB.js → html-derivative-CdFl0BmX.js} +1 -1
  86. package/dist/diff_tool/app/dist/assets/{http-DNxLDRIi.js → http-DZeL7KvH.js} +1 -1
  87. package/dist/diff_tool/app/dist/assets/{hurl-kbd3Eq2V.js → hurl-CqKevOlQ.js} +1 -1
  88. package/dist/diff_tool/app/dist/assets/index-BXyr8GCM.js +341 -0
  89. package/dist/diff_tool/app/dist/assets/{java-BuZshgf1.js → java-Sq3MCkId.js} +1 -1
  90. package/dist/diff_tool/app/dist/assets/{javascript-DfL2oeFU.js → javascript-CHZB4Nse.js} +1 -1
  91. package/dist/diff_tool/app/dist/assets/{jinja-Bu0KQihU.js → jinja-C4ucJVla.js} +1 -1
  92. package/dist/diff_tool/app/dist/assets/{jison-Bqn7Mf3Q.js → jison-D3mprebA.js} +1 -1
  93. package/dist/diff_tool/app/dist/assets/{json-BuX5LKaB.js → json-DgPfCYJ1.js} +1 -1
  94. package/dist/diff_tool/app/dist/assets/{jsx-DdVJ-ZBp.js → jsx-BG-Tx0cw.js} +1 -1
  95. package/dist/diff_tool/app/dist/assets/{julia-CQeijOoQ.js → julia-B1GnFeUC.js} +1 -1
  96. package/dist/diff_tool/app/dist/assets/{just-vzAktFGR.js → just-_MZzo0MF.js} +1 -1
  97. package/dist/diff_tool/app/dist/assets/{latex-Dm60cg0k.js → latex-DI0kqjQy.js} +1 -1
  98. package/dist/diff_tool/app/dist/assets/{liquid-vxKzm2P8.js → liquid-BtMAPeHl.js} +1 -1
  99. package/dist/diff_tool/app/dist/assets/{lua-DIoqi4dd.js → lua-CFxaP0To.js} +1 -1
  100. package/dist/diff_tool/app/dist/assets/{marko-BTHgFKby.js → marko-BIJocuFI.js} +1 -1
  101. package/dist/diff_tool/app/dist/assets/{mdc-CEfz8gZ9.js → mdc-BAgrdjTH.js} +1 -1
  102. package/dist/diff_tool/app/dist/assets/{nginx-DNlFDEfJ.js → nginx-DE-3CsYn.js} +1 -1
  103. package/dist/diff_tool/app/dist/assets/{nim-DnvT_0lZ.js → nim-DOxeXLhb.js} +1 -1
  104. package/dist/diff_tool/app/dist/assets/{org-BbD-ElVf.js → org-KTfP0tHA.js} +1 -1
  105. package/dist/diff_tool/app/dist/assets/{perl-DTsbnAmK.js → perl-BH-NxpgK.js} +1 -1
  106. package/dist/diff_tool/app/dist/assets/{php-CwEsJe-W.js → php-vuiVEXZK.js} +1 -1
  107. package/dist/diff_tool/app/dist/assets/{pug-BOttMVH-.js → pug-VlIlTMUy.js} +1 -1
  108. package/dist/diff_tool/app/dist/assets/{qml-C8KkSItN.js → qml-k6wTtGG-.js} +1 -1
  109. package/dist/diff_tool/app/dist/assets/{r-K4ksJj_R.js → r-Ccjcb2zh.js} +1 -1
  110. package/dist/diff_tool/app/dist/assets/{razor-yuWRrrG6.js → razor-BNhYgSCv.js} +1 -1
  111. package/dist/diff_tool/app/dist/assets/{regexp-CV-jhnUz.js → regexp-C4LFejPu.js} +1 -1
  112. package/dist/diff_tool/app/dist/assets/{rst-CLA3Attc.js → rst-DXLxI-UJ.js} +1 -1
  113. package/dist/diff_tool/app/dist/assets/{ruby-DiHR2-DX.js → ruby-BPuL4jDV.js} +1 -1
  114. package/dist/diff_tool/app/dist/assets/{sas-DxIjbYJ5.js → sas-B3Yz8snb.js} +1 -1
  115. package/dist/diff_tool/app/dist/assets/{scss-CShwEaV4.js → scss-B2AJ5vpk.js} +1 -1
  116. package/dist/diff_tool/app/dist/assets/{shellscript-CeezOnrF.js → shellscript-zyDexxnC.js} +1 -1
  117. package/dist/diff_tool/app/dist/assets/{shellsession-CjSS2r7j.js → shellsession-C8b8xluk.js} +1 -1
  118. package/dist/diff_tool/app/dist/assets/{soy-CI_v23nJ.js → soy-DKWe_XML.js} +1 -1
  119. package/dist/diff_tool/app/dist/assets/{sql-D9GaB00A.js → sql-uEbz-Epf.js} +1 -1
  120. package/dist/diff_tool/app/dist/assets/{stata-hK92TPE_.js → stata-DieRPmHY.js} +1 -1
  121. package/dist/diff_tool/app/dist/assets/{surrealql-UO8LtPJG.js → surrealql-Dbk3Sp1P.js} +1 -1
  122. package/dist/diff_tool/app/dist/assets/{svelte-kIlaw_oh.js → svelte-CjPbRmkM.js} +1 -1
  123. package/dist/diff_tool/app/dist/assets/{templ-DFRz1JP6.js → templ-Do_f5vc4.js} +1 -1
  124. package/dist/diff_tool/app/dist/assets/{tex-CfxIXk_z.js → tex-UjLP4qUm.js} +1 -1
  125. package/dist/diff_tool/app/dist/assets/{ts-tags-BtUHl0ff.js → ts-tags-5L2FutA6.js} +1 -1
  126. package/dist/diff_tool/app/dist/assets/{tsx-Cd4SAe2C.js → tsx-B1pNtpUr.js} +1 -1
  127. package/dist/diff_tool/app/dist/assets/{twig-CWk4q5Y3.js → twig-O41Vg_IM.js} +1 -1
  128. package/dist/diff_tool/app/dist/assets/{typescript-BqxGJiP0.js → typescript-Bj9uwnnJ.js} +1 -1
  129. package/dist/diff_tool/app/dist/assets/{typst-D9nAun2p.js → typst-DsibO7oD.js} +1 -1
  130. package/dist/diff_tool/app/dist/assets/{vue-D6HYhg6_.js → vue-DPhaEurv.js} +1 -1
  131. package/dist/diff_tool/app/dist/assets/{vue-html-1VRlaENS.js → vue-html-DDV9NSy1.js} +1 -1
  132. package/dist/diff_tool/app/dist/assets/{vue-vine-BaH0We9y.js → vue-vine-Dh4jOifx.js} +1 -1
  133. package/dist/diff_tool/app/dist/assets/{xml-C4RWnUuj.js → xml-DtIulkQk.js} +1 -1
  134. package/dist/diff_tool/app/dist/assets/{xsl-D1iD38ga.js → xsl-DoWtb58Z.js} +1 -1
  135. package/dist/diff_tool/app/dist/assets/{yaml-yAb4W0G-.js → yaml-CZC-l1Dg.js} +1 -1
  136. package/dist/diff_tool/app/dist/index.html +1 -1
  137. package/dist/history/worker/index.js +87 -83
  138. package/dist/history/worker/index.js.map +1 -1
  139. package/dist/main.js +6 -7
  140. package/dist/main.js.map +1 -1
  141. package/dist/tui/session_chat_controller.js +14 -3
  142. package/dist/tui/session_chat_controller.js.map +1 -1
  143. package/dist/tui/ui/footer.js +2 -4
  144. package/dist/tui/ui/footer.js.map +1 -1
  145. package/package.json +9 -9
  146. package/dist/diff_tool/app/dist/assets/index-D8ZI_2RC.js +0 -340
  147. package/dist/nook/README.md +0 -123
@@ -1,83 +1,83 @@
1
1
  # History
2
2
 
3
- Tau keeps transcript history so earlier work can be found without reopening every session. This store is separate from the resumable session snapshot: the snapshot is the host's recovery source of truth, while history is a flat, searchable record for discovery and reading.
3
+ Tau keeps a searchable transcript history so you can find earlier work without reopening every session. History is separate from saved sessions. The host uses the saved session to continue and recover a conversation, while history is a flat record for searching and reading.
4
4
 
5
- That distinction matters when diagnosing recovery, compaction, or privacy. Deleting or losing history does not provide a way to reconstruct a session, and retaining history does not make a missing session snapshot resumable. See [sessions](sessions.md) for snapshot persistence and recovery.
5
+ This matters for recovery, compaction, and privacy. History cannot rebuild a lost session, and keeping history does not make a missing session resumable. See [sessions](sessions.md) for saving and recovery.
6
6
 
7
7
  ## What local history records
8
8
 
9
- Every Tau host opens a machine-local SQLite database at:
9
+ Every Tau host opens a SQLite database on its own machine:
10
10
 
11
11
  ```text
12
12
  ~/.config/tau/history.sqlite
13
13
  ```
14
14
 
15
- The path belongs to the **host home**. An attached TUI and a remote execution environment do not get separate history stores merely because they participate in the session. Local `tau`, `tau serve`, and the default SDK host all use the host machine's database.
15
+ The file is in the **host user's home**. An attached TUI or a remote execution environment does not get its own history. Local `tau`, `tau serve`, and the default SDK host all use the host machine's database.
16
16
 
17
- For each session, history stores its immutable creation attributes and an ordered active transcript containing:
17
+ For each session, history stores the creation attributes and the active transcript, in order:
18
18
 
19
- - committed user content as a string or an array of text and image blocks, after Tau's internal metadata is removed
20
- - committed intermediate system instructions as plain text, labeled as system entries, without Tau metadata (the initial persona/base prompt is excluded)
21
- - assistant text segments as strings, including committed preambles and responses, but not thinking
22
- - completed tool calls with the tool name, arguments, result, and terminal outcome
19
+ - user messages, as text or as text and image blocks, with Tau's internal metadata removed
20
+ - intermediate system instructions as plain text, marked as system entries, without Tau metadata (the persona's base prompt is not included)
21
+ - assistant text, including preambles and responses, but not thinking
22
+ - finished tool calls, with the tool name, arguments, result, and outcome
23
23
 
24
- Leading model-facing `<system>...</system>` blocks in user messages remain in history. Tool arguments and results can contain file contents, command output, or other sensitive data. Treat the database as private user data. Tau creates its history directory and database with private permissions, but the host user and machine administrators can still access them. Do not copy the database into a repository or expose it through a shared artifact.
24
+ `<system>...</system>` blocks at the start of user messages stay in history. Tool arguments and results can contain file contents, command output, and other sensitive data, so treat the database as private. Tau creates its directory and file with private permissions, but the host user and the machine's administrators can still read them. Never copy the database into a repository or share it.
25
25
 
26
- History capture is best effort. If the local store cannot open or a later projection fails, Tau keeps the session running, adds one durable `history unavailable` warning to that session, and disables history for the rest of the host process. Restarting the host retries local initialization; it does not erase the earlier warning from the recovered session.
26
+ Recording history is best effort. If the database cannot open, or a later write fails, the session keeps running. Tau adds one `history unavailable` warning to the session, which stays in the session, and turns history off until the host restarts. A restart tries to open the database again.
27
27
 
28
28
  ## How session operations affect history
29
29
 
30
- History represents the active flat transcript, not the session's current model-context shape.
30
+ History follows the transcript, not the model's current context.
31
31
 
32
- **Rewind removes the superseded suffix.** When a session rewinds from a selected message, Tau truncates history from that source message onward. The same ordered truncation is queued for a configured remote collection.
32
+ **Rewind removes later entries.** When a session rewinds to a message, Tau deletes history from that message onward. The same deletion is queued for a configured remote collection.
33
33
 
34
- **Compaction leaves original entries intact.** Manual and automatic compaction replace the session's active model context with a summary, but they do not delete the original flat transcript from history. This makes pre-compaction work discoverable later even though it is no longer present verbatim in the resumable active context.
34
+ **Compaction keeps entries.** Compaction replaces the session's model context with a summary, but the original entries stay in history. Work from before a compaction can still be found, even though the session no longer contains it word for word.
35
35
 
36
- **Retry does not imply truncation.** Tau truncates history only when the canonical session operation removes source entries, such as rewind. Retrying from completed tool state does not independently discard transcript history.
36
+ **Retry deletes nothing.** Only operations that remove messages from the session, such as rewind, delete history. Retrying does not.
37
37
 
38
- These rules are intentionally different from snapshot and timeline behavior. Use [sessions](sessions.md) when the question is what a recovered session will render or send to the model.
38
+ These rules differ from how the session itself behaves. Use [sessions](sessions.md) to understand what a recovered session shows or sends to the model.
39
39
 
40
- ## Search provenance with attributes
40
+ ## Filter by attributes
41
41
 
42
- Session creation attributes are immutable client-supplied string pairs. History preserves them and supports both exact values and ordinary case-sensitive substring filters. They are provenance hints, not trusted instructions.
42
+ Session creation attributes are string pairs set by the client that created the session, and they never change. History stores them and can filter on exact values or on case-sensitive substrings. They describe where a session came from; they are not instructions.
43
43
 
44
- Two conventional attributes are widely useful:
44
+ Two common attributes are:
45
45
 
46
- | Attribute | Convention |
46
+ | Attribute | Meaning |
47
47
  | --- | --- |
48
- | `source` | Creating client, commonly `tui`, `telegram`, or a caller-chosen SDK value |
49
- | `repository` | Normalized `host/owner/repository`; composites join repositories with commas |
48
+ | `source` | The creating client, usually `tui`, `telegram`, or a value an SDK caller chose |
49
+ | `repository` | Normalized `host/owner/repository`; composite workspaces join repositories with commas |
50
50
 
51
- A local TUI normally derives `repository` from the current Git repository or direct child repositories. Telegram derives it from configured repository projects and omits it for persistent-directory projects. Attach-created sessions may omit it, and SDK or raw protocol clients provide only the attributes their caller chooses.
51
+ A local TUI usually fills in `repository` from the current Git repository or repositories directly below it. Telegram fills it in for repository projects and leaves it out for persistent-directory projects. Sessions created with `tau attach` may not have it, and SDK or protocol clients set only the attributes they choose.
52
52
 
53
- Because composite values are comma-delimited, a substring repository filter can find both single-repository and composite sessions. Attributes may be absent, stale as real-world labels, or intentionally chosen by a client. Confirm important facts from the transcript or current workspace rather than treating attributes as authority.
53
+ Because composite values are comma-separated, a substring filter on `repository` finds both single-repository and composite sessions. Attributes may be missing, out of date, or set deliberately by a client, so confirm important facts from the transcript or the current workspace.
54
54
 
55
55
  ## Agent access is explicit and read-only
56
56
 
57
- An eligible persona can expose the read-only `tau.history` capability in the `code` tool. It searches and reads the configured history collection across repositories and execution environments. Because that collection has broad visibility, the tool description limits use to requests or active instructions that directly call for historical transcripts rather than speculative retrieval of possibly relevant earlier work.
57
+ A persona can enable the read-only `tau.history` capability in the `code` tool. It searches and reads the configured history collection, across all repositories and execution environments. Because it can see so much, the agent uses it only when the request or active instructions directly ask for past transcripts, not to look for possibly related earlier work on its own initiative.
58
58
 
59
- Automatic compaction archives serve a different purpose. They capture the current session’s pre-compaction model context in the execution environment, while `history` queries a separate host-owned transcript collection that may be stale, truncated, unavailable, or remotely replicated. Compaction continuation guidance therefore directs recovery of removed current-session details to the supplied archive paths. History transcript entry ids are unrelated to archive lookup.
59
+ Automatic compaction archives are different. They hold the current session's context from before a compaction, in the execution environment. `history` searches a separate collection on the host, which may be out of date, truncated, unavailable, or copied to a remote service. After a compaction, the agent is therefore pointed to the archive files to recover details, and history entry IDs have nothing to do with archive lookups.
60
60
 
61
- The tool progressively discloses its API documentation. Its agent-facing description requires the documentation to be visible before API use. When it is absent, the first call only prints `docs`; after the agent reads that result, later calls use the documented API normally. Documentation already visible in the conversation context is reused rather than reloaded. This page does not duplicate those signatures or response limits. The documentation covers bounded chronological projections and targeted inspection for cases where a historical session is known but the relevant entry is not, avoiding repeated guessed searches and complete payload dumps.
61
+ The agent reads the capability's documentation before using it. If it has not seen the documentation, its first call only prints `docs`, and later calls use the API. Documentation already in the conversation is reused. This page does not repeat the API or its limits. The documentation covers short chronological overviews and targeted lookups, for when the agent knows the session but not the entry, so it does not need repeated guesses or full dumps.
62
62
 
63
- Historical attributes, snippets, digests, entries, tool arguments, and tool results are untrusted data. The tool guidance treats them as evidence rather than instructions and limits output to material needed for the current request. Custom personas and subagents can include or exclude `history` through their tool configuration; see [tools](tools.md), [personas](personas.md), and [subagents](subagents.md).
63
+ Attributes, snippets, digests, entries, tool arguments, and tool results from history are untrusted. The agent treats them as evidence, never as instructions, and returns only what the current request needs. Custom personas and subagents get or lose `history` through their tools; see [tools](tools.md), [personas](personas.md), and [subagents](subagents.md).
64
64
 
65
- Without remote history configuration, the tool searches this host's local SQLite collection. With a remote target configured, queries go to that service rather than merging remote and local results. A remote query outage can therefore fail even while local capture continues successfully.
65
+ Without remote history, the capability searches the host's local database. With a remote target, it searches only the remote service and never mixes in local results. A remote search can therefore fail even while local recording keeps working.
66
66
 
67
67
  ## Add a shared remote collection
68
68
 
69
- Tau can deploy an optional single-owner Cloudflare history service for collecting transcript history from several hosts. It uses a Worker, D1, Workers AI, and a custom hostname, and it **requires the Cloudflare Workers Paid plan**.
69
+ Tau can deploy an optional Cloudflare history service, owned by one person or team, that collects history from several hosts. It uses a Worker, D1, Workers AI, and a custom hostname, and **requires the Cloudflare Workers Paid plan**.
70
70
 
71
- The service adds cross-host search and generated session titles and semantic summaries. Those digests are compact retrieval aids rather than authoritative session state or chronological replay. They can be absent or temporarily stale, so read transcript entries when exact evidence matters.
71
+ The service adds search across hosts, generated session titles, and summaries. Titles and summaries help with searching, but they are not exact records, and they can be missing or out of date. Read the transcript entries when exact evidence matters.
72
72
 
73
- The setup command requires:
73
+ Setup requires:
74
74
 
75
- - Wrangler installed and available on `PATH`
76
- - a Cloudflare zone containing the chosen history hostname
77
- - `CLOUDFLARE_API_TOKEN` available to the command for non-interactive Wrangler authentication
78
- - a history API key and separate viewer password supplied securely, or permission for setup to generate them
75
+ - Wrangler installed and on `PATH`
76
+ - a Cloudflare zone that contains the chosen hostname
77
+ - `CLOUDFLARE_API_TOKEN` available to the command, so Wrangler authenticates without prompts
78
+ - a history API key and a separate viewer password, supplied securely, or setup can generate both
79
79
 
80
- Run setup on an operator machine with Cloudflare access:
80
+ Run setup on a machine with Cloudflare access:
81
81
 
82
82
  ```sh
83
83
  tau history setup \
@@ -85,33 +85,40 @@ tau history setup \
85
85
  --zone-name example.net
86
86
  ```
87
87
 
88
- `TAU_HISTORY_DOMAIN` and `TAU_HISTORY_ZONE_NAME` can provide the two values instead. Setup creates or reuses the `tau-history` D1 database, applies the bundled migrations, deploys the `tau-history` Worker route, and installs the history API key and viewer password as separate Worker secrets.
88
+ `TAU_HISTORY_DOMAIN` and `TAU_HISTORY_ZONE_NAME` can provide the two values instead. Setup creates or reuses the `tau-history` D1 database, applies its migrations, deploys the `tau-history` Worker route, and stores the API key and viewer password as separate Worker secrets.
89
89
 
90
- For the API key used during setup, `--api-key` takes precedence over `TAU_HISTORY_API_KEY`; otherwise setup generates a new key. For the viewer password, `--viewer-password` takes precedence over `TAU_HISTORY_VIEWER_PASSWORD`; otherwise setup generates one. The API key and viewer password must differ. Prefer a secret manager or protected process environment over command-line values, which may enter shell history. Do not paste either credential into a session transcript.
90
+ For the API key, `--api-key` wins over `TAU_HISTORY_API_KEY`, and setup generates a key if neither is given. For the viewer password, `--viewer-password` wins over `TAU_HISTORY_VIEWER_PASSWORD`, and setup generates one if neither is given. The two must differ. Prefer a secret manager or a protected environment over command-line values, which can end up in shell history. Never paste either credential into a session.
91
91
 
92
92
  ## Browse remote conversations
93
93
 
94
- Open the configured service origin, for example `https://history.example.net/`, to browse the private read-only history collection. HTTP Basic authentication uses the fixed username `tau` and the viewer password installed by setup. Setup prints generated viewer passwords but does not echo supplied credentials. External HTTP viewer requests redirect to HTTPS before authentication; loopback HTTP remains available for local development. The credential is never placed in a URL, and browser responses are not cached. Keep the viewer password private because it grants read access to transcripts, attributes, tool arguments, and tool results across every host using that service.
94
+ Open the service's address, for example `https://history.example.net/`, to browse the collection read-only. Sign in with HTTP Basic authentication, username `tau`, and the viewer password from setup.
95
95
 
96
- The index lists recently updated sessions with generated titles, summaries, timestamps, attributes, and a server-rendered search form. Repository and source inputs filter metadata by case-sensitive substring match; both filters combine with text search and remain active across pages. The Older sessions button loads the next index page; the index never advances automatically. A digest can be pending or stale while the underlying transcript is already available. Session pages initially show an empty transcript, then automatically fetch bounded batches and append them in chronological order without scrolling or pagination controls. The Copy conversation button at the top stays disabled until the full transcript has loaded. Failed loads show a retry button and keep copying disabled. The adjacent copy selector defaults to Messages only, which omits tool entries. Include tool calls adds tool names, arguments, and outcomes without results; Include everything includes results too. These options do not depend on whether tool cards are expanded. Individual entry Copy buttons still copy the complete entry. Omitting tools or results reduces noise, but does not sanitize sensitive content in messages or arguments. API reads remain paginated. Tool entries are collapsed by default. Text and metadata are escaped rather than interpreted as HTML or Markdown. Valid PNG, JPEG, GIF, and WebP content blocks render as inline images; other structured content falls back to escaped text.
96
+ - Setup prints passwords it generates, but never prints ones you supplied.
97
+ - Plain HTTP requests from outside are redirected to HTTPS before sign-in. HTTP on loopback works for local development.
98
+ - The password never appears in a URL, and pages are not cached by the browser.
99
+ - The password gives read access to transcripts, attributes, tool arguments, and tool results from every host that uses the service. Keep it private.
97
100
 
98
- Remote history search and read results include a stable `webUrl` for each session. The `tau.history` capability can return this URL when asked for a conversation link. The URL alone does not grant access; the browser still needs the viewer credential. Local-only history has no web URL.
101
+ The index lists recently updated sessions with titles, summaries, times, and attributes, plus a search form.
99
102
 
100
- ## Develop the browser view locally
103
+ - Repository and source filters match case-sensitive substrings. They combine with text search and stay active across pages.
104
+ - **Older sessions** loads the next page; pages never load by themselves.
105
+ - A summary can be pending or out of date while the transcript is already available.
101
106
 
102
- From a source checkout with dependencies installed, run:
107
+ A session page starts empty, then loads the transcript in batches and adds them in order, with no scrolling or page controls. Tool entries start collapsed. Text and metadata are shown as plain text, never as HTML or Markdown. Valid PNG, JPEG, GIF, and WebP blocks are shown as images, and other structured content as plain text.
103
108
 
104
- ```sh
105
- npm run history:dev
106
- ```
109
+ **Copy conversation** at the top works once the whole transcript has loaded. If loading fails, a retry button appears and copying stays off. The selector next to it chooses what to copy:
110
+
111
+ - **Messages only** (the default) leaves out tool entries.
112
+ - **Include tool calls** adds tool names, arguments, and outcomes, without results.
113
+ - **Include everything** adds results too.
107
114
 
108
- The command applies the canonical Worker migration to a local-only `tau-history-dev` D1 database, loads an idempotent fixture conversation, and starts the TypeScript Worker with Wrangler. Open the local URL printed by Wrangler and use username `tau` with password `tau-history-dev-password`. The local API key is `tau-history-dev-api-key`.
115
+ These options do not depend on which tool cards are expanded. Each entry's own **Copy** button copies the complete entry. Leaving out tools or results reduces noise but does not remove sensitive content from messages or arguments. The API still returns results page by page.
109
116
 
110
- The checked-in development configuration does not contain a production route or remote D1 database identifier. Wrangler keeps its local state under `src/history/worker/.wrangler/`; rerunning the command preserves that local database and safely reapplies the migration and fixture.
117
+ Remote search and read results include a stable `webUrl` for each session, which `tau.history` can return when asked for a link. The URL alone grants no access; the browser still needs the viewer password. Local-only history has no web URL.
111
118
 
112
119
  ## Configure hosts to replicate
113
120
 
114
- Remote history is accepted only in the host's eligible global Tau config, normally `~/.config/tau/config.json`:
121
+ Remote history can be set only in the host's global Tau config, normally `~/.config/tau/config.json`:
115
122
 
116
123
  ```json
117
124
  {
@@ -122,69 +129,97 @@ Remote history is accepted only in the host's eligible global Tau config, normal
122
129
  }
123
130
  ```
124
131
 
125
- `endpoint` must be an HTTP or HTTPS URL without credentials, a query, or a hash. Tau removes trailing slashes. The API key resolves on the host in this order:
132
+ `endpoint` must be an HTTP or HTTPS URL without credentials, query, or fragment. Tau removes trailing slashes. The host uses the first API key it finds:
126
133
 
127
134
  1. `TAU_HISTORY_API_KEY`
128
135
  2. the host environment variable named by `history.apiKeyEnv`
129
136
  3. inline `history.apiKey`
130
137
 
131
- If the block exists but no key resolves, host construction fails instead of silently using an unauthenticated or local-only target. The key remains host-owned and is not exposed to history code-mode programs. See [credentials](credentials.md) for safe placement.
138
+ If `history` is set but no key is found, the host fails to start, instead of quietly running without remote history. The key stays on the host and is never visible to history code-mode programs. See [credentials](credentials.md) for where to put it.
132
139
 
133
- Restart the host after changing this block or its environment. `/reload` updates session runtime content but does not rebuild the host-wide history manager.
140
+ Restart the host after changing this block or its environment variables. `/reload` does not reload it.
134
141
 
135
142
  ## Replication and outages
136
143
 
137
- Remote replication is local-first:
144
+ Replication starts locally:
145
+
146
+ 1. Tau writes each history change to local SQLite.
147
+ 2. In the same transaction, it adds the change to a local outbox on disk.
148
+ 3. The host sends pending changes to the endpoint in the background.
149
+ 4. Changes the service accepts are removed from the outbox.
150
+
151
+ A service outage does not block sessions or local recording. Pending changes stay on disk and are sent again later, including after a host restart or the next history activity. The service applies each change only once, even if it arrives twice. Changes for one session are sent in order, and each session is sent independently of the others.
152
+
153
+ If the service permanently rejects a change, for example because the session's attributes conflict with what it already has, Tau stops sending changes for that session only. The pending changes and the error stay in local SQLite, later changes for that session wait, and other sessions keep replicating. Temporary network, authentication, rate-limit, and service errors leave changes pending for a later retry. Both kinds of failure produce a `history_replication_failed` host diagnostic, without the API key:
154
+
155
+ - Headless Tau commands print it to stderr.
156
+ - The TUI distinguishes blocked replication from a retryable delay in the footer. A transcript notice keeps the affected session, operation ID (when known), and error.
157
+ - An in-process SDK host delivers it only through `onDiagnostic`, when configured.
158
+
159
+ Local entries keep everything recorded. For the remote copy, an entry larger than 1 MiB keeps its ID and metadata, but oversized content, arguments, or results are truncated in the middle with a marker. The host's local entry can therefore contain details the shared copy leaves out.
160
+
161
+ With a remote target configured, history searches go only to the service. Tau never falls back to local results when the service is unreachable, because that would change which collection you are searching. Do not assume sessions recorded before you added the configuration appear remotely.
138
162
 
139
- 1. Tau commits each history mutation to local SQLite.
140
- 2. The same transaction appends an ordered operation to a durable local outbox.
141
- 3. The host sends pending operations to the configured endpoint asynchronously.
142
- 4. Successful acknowledgements remove those operations from the outbox.
163
+ ## Recover blocked replication
143
164
 
144
- A service outage does not block session execution or local transcript capture. Pending operations remain durable and are retried when replication is scheduled again, including after host restart or later history activity. The remote service applies operations idempotently. Tau preserves operation order within each session while processing separate session lanes independently.
165
+ A permanent rejection blocks that session until you explicitly retry it. Restarting the host does not clear the block, also called a quarantine.
145
166
 
146
- A permanent operation-domain rejection, such as conflicting immutable session metadata, quarantines only that session's replication lane. Its pending operations and diagnostic remain in local SQLite, later operations for that session stay blocked, and unrelated sessions continue replicating. Transient transport, authentication, rate-limit, and service failures do not quarantine a lane; they leave endpoint replication pending for a later retry. Both kinds of failure produce a structured `history_replication_failed` host diagnostic without exposing the API key. Headless Tau commands write that diagnostic to stderr, the TUI presents a concise nonfatal footer notice without writing through the active renderer, and an in-process SDK host delivers it only through `onDiagnostic` when configured.
167
+ Run this on the affected host with its remote history configuration:
147
168
 
148
- Local entries retain their complete captured payloads. For remote replication, an entry larger than 1 MiB keeps its identity and metadata but middle-truncates oversized content, arguments, or results with an explicit marker. Remote history is therefore useful for retrieval, but the host's local entry can contain details that the shared copy intentionally omits.
169
+ ```sh
170
+ tau history status
171
+ ```
172
+
173
+ The command prints persisted quarantines for the configured endpoint as JSON. It does not require an API key. When a change fails, its diagnostic identifies the failed operation, even if earlier changes in the same request succeeded. Request-level and transport failures may have no operation ID.
149
174
 
150
- Configuring a remote target changes history-tool queries to use that service. Tau does not fall back to local query results when the service is unreachable, because that would silently change collection scope. Existing histories that were never associated with the target should not be assumed to appear remotely merely because the config block was added later.
175
+ Fix the underlying service or data problem before retrying. If the service needs an update, deploy it with `tau history setup` using the setup requirements above and the existing credentials. Then, on the affected host, run:
176
+
177
+ ```sh
178
+ tau history retry --session <session-id>
179
+ ```
180
+
181
+ Retry requires the host's history API key. It clears only the named session's quarantine and sends pending changes with their original operation IDs. Local history and queued changes are preserved. The command can also send pending changes for other unblocked sessions at the same endpoint; other quarantines stay blocked.
182
+
183
+ If the service permanently rejects the session again, Tau restores its quarantine. A temporary failure leaves changes pending for a later retry. The command exits unsuccessfully if the selected session remains blocked or a temporary failure prevents replication from completing.
151
184
 
152
185
  ## Verify operation
153
186
 
154
- Verify the owning boundary rather than inspecting credentials or dumping transcripts:
187
+ Check that each step works, without looking at credentials or dumping transcripts:
155
188
 
156
- 1. Confirm setup completed its D1 migration and Worker deployment without errors.
157
- 2. Add the global config and key environment to one host, then restart it.
158
- 3. Create a small disposable session with distinctive, nonsensitive text.
159
- 4. Explicitly ask the agent to search history for that session, following the history tool's `docs` step.
160
- 5. If using several hosts, repeat from another host and allow for asynchronous replication and digest generation.
189
+ 1. Confirm setup finished the D1 migration and Worker deployment without errors.
190
+ 2. Add the global config and the key's environment variable on one host, then restart it.
191
+ 3. Create a small throwaway session with distinctive, non-sensitive text.
192
+ 4. Ask the agent explicitly to search history for that session. It reads the capability's `docs` first.
193
+ 5. With several hosts, repeat from another host, and allow time for replication and summaries.
161
194
 
162
- A transcript can become remotely searchable before its generated digest appears. Search results without a digest are not evidence of a failed import. Open the service URL and sign in to the browser view to confirm the session card and transcript are available.
195
+ A transcript can become searchable before its summary appears, so a missing summary does not mean replication failed. Open the service in a browser and sign in to confirm the session and its transcript are there.
163
196
 
164
- Cloudflare operational failures are visible through normal Worker logs, Cron Events, and D1 diagnostics. The service has no separate Tau administration dashboard or status endpoint.
197
+ Cloudflare problems show up in the normal Worker logs, Cron Events, and D1 diagnostics. The service has no separate admin dashboard or status endpoint.
165
198
 
166
199
  ## Troubleshooting
167
200
 
168
- **`history` is configured but no API key is available.** Set `TAU_HISTORY_API_KEY`, populate the environment variable named by `apiKeyEnv`, or use an inline key only when the config file is appropriately protected. Restart the host.
201
+ **`history` is configured but no API key is available.** Set `TAU_HISTORY_API_KEY`, set the variable named by `apiKeyEnv`, or use an inline key only if the config file is well protected. Restart the host.
202
+
203
+ **The agent has no history capability.** The active persona must select `history`. Fix the persona and run `/reload` while idle.
169
204
 
170
- **The history tool returns a service error while the session still works.** Remote queries and asynchronous replication can fail independently of session execution. Check endpoint reachability and Worker logs without printing the bearer key. Local capture should continue unless the session also contains a `history unavailable` warning.
205
+ **The history capability returns a service error while the session works.** Remote searches and replication can fail without affecting the session. Check that the endpoint is reachable and read the Worker logs, without printing the key. Local recording continues unless the session also shows a `history unavailable` warning.
171
206
 
172
- **The browser view repeatedly asks for credentials.** Use the fixed username `tau` and the viewer password installed by the latest setup. The history API key is a bearer credential for hosts and does not authenticate the browser.
207
+ **The browser keeps asking for credentials.** Use username `tau` and the viewer password from the latest setup. The API key is for hosts and does not work in the browser.
173
208
 
174
- **A session does not appear in remote search.** Confirm that the host was restarted with the global remote config, that the session was opened while that target was active, and that later history activity has had a chance to flush the durable outbox. Check host logs for `history_replication_failed`; a quarantined failure affects only the named session, while an unquarantined endpoint failure remains retryable. Do not assume remote digests are immediate.
209
+ **A session does not appear in remote search.** Confirm the host was restarted with the remote config, the session was used while the config was active, and enough history activity has happened to send the outbox. Check host logs for `history_replication_failed`. A permanent rejection affects only the named session, while other failures are retried. Summaries are not immediate.
175
210
 
176
- **Local history became unavailable.** Check host-side filesystem access, free space, and ownership for `~/.config/tau`. Restarting is required to reopen a manager disabled by an earlier local failure.
211
+ **Local history became unavailable.** On the host, check that you are running as the expected user and home, and check file access, free space, and ownership of `~/.config/tau`, the Node version, and whether another process is using the database. A restart is needed to reopen history after a local failure. Do not open, edit, replace, or delete the SQLite files as a first repair, and do not inspect outbox rows or keys.
177
212
 
178
- **Search finds material removed from model context.** This is expected after compaction. It is not expected after a successful rewind of that suffix; if the remote copy lags, wait for its truncation operation to replicate.
213
+ **Search finds material removed from the model's context.** This is expected after compaction. After a rewind, the removed entries should disappear; if the remote copy still has them, wait for the deletion to replicate.
179
214
 
180
215
  ## Destroy the remote service
181
216
 
182
- `tau history destroy --yes` permanently deletes the bundled `tau-history` Worker and D1 database. This removes the shared remote transcripts and digests. It does not delete each host's local `history.sqlite` database, and it is not a substitute for a retention or export plan.
217
+ `tau history destroy --yes` permanently deletes the `tau-history` Worker and D1 database, and with them the shared transcripts and summaries. It does not delete any host's local `history.sqlite`, and it is not a substitute for a retention or export plan.
183
218
 
184
- Run destruction only after confirming that the service and its data are no longer needed:
219
+ Run it only once you are sure the service and its data are no longer needed:
185
220
 
186
221
  ```sh
187
222
  tau history destroy --yes
188
223
  ```
189
224
 
190
- The command requires `CLOUDFLARE_API_TOKEN`. It reports each resource separately and treats already-absent Tau history resources as absent. If one deletion fails, inspect the reported partial result before retrying. Remove obsolete host `history` config and restart those hosts afterward, otherwise their remote queries and replication attempts will continue to fail.
225
+ The command needs `CLOUDFLARE_API_TOKEN`. It reports each resource separately and treats Tau history resources that are already gone as deleted. If one deletion fails, read the partial result before retrying. Afterward, remove the `history` config from your hosts and restart them; otherwise their remote searches and replication keep failing.
@@ -16,18 +16,20 @@ Requires an OpenAI or Google API key for the selected model. See [feature-specif
16
16
 
17
17
  ## Models and capabilities
18
18
 
19
- `--model` is required; the CLI has no implicit default. Start with `gpt-image-2.5-flare` at `--quality medium` for everyday generation and editing. Increase quality or choose `gpt-image-2.5-sunburst` when precise edits justify the extra effort. See [approximate cost](#approximate-cost) before choosing settings.
19
+ `--model` is required; there is no default. Start with `gpt-image-2.5-flare` at `--quality medium` for everyday generation and editing, balancing quality and cost.
20
20
 
21
- Choose size, resolution, and aspect ratio for the intended use; there is no recommended universal size. Dimensions in the examples illustrate particular use cases. Omitted controls use provider defaults, except `--format`, which defaults to `png`. Unsupported options fail before generation.
21
+ For demanding generation and editing where image quality is the priority, choose `gemini-nano-banana-2.1` or `gpt-image-2.5-sunburst`. Nano Banana supports very wide aspect ratios and resolution tiers up to `4K`. Sunburst supports exact dimensions, transparent backgrounds, and PNG/JPEG/WebP output. See [approximate cost](#approximate-cost) before choosing settings.
22
+
23
+ Choose size, resolution, and aspect ratio for the intended use; no single size fits everything. The sizes in the examples are for those particular cases. Options you leave out use the provider's defaults, except `--format`, which defaults to `png`. Unsupported options fail before anything is generated.
22
24
 
23
25
  | Model | Resolution | Aspect ratios | Thinking | Other controls |
24
26
  | --- | --- | --- | --- | --- |
25
- | `gemini-3-pro-image` | `1K`, `2K`, `4K` | Standard | Provider-managed | PNG |
26
- | `gemini-3.1-flash-image` | `512`, `1K`, `2K`, `4K` | Standard and wide | `minimal`, `high` | PNG |
27
- | `gemini-3.1-flash-lite-image` | `1K` | Standard and wide | `minimal`, `high` | PNG |
27
+ | `gemini-nano-banana-2.1` | `1K`, `2K`, `4K` | Standard and wide | `minimal`, `medium`, `high` | PNG |
28
28
  | `gpt-image-2.5-flare` | Exact `--size` | Through dimensions | Not exposed | Quality, background, encoding, compression |
29
29
  | `gpt-image-2.5-sunburst` | Exact `--size` | Through dimensions | Not exposed | Quality, background, encoding, compression |
30
30
 
31
+ Google's defaults are `1K` resolution and `medium` thinking. Use `--thinking minimal` for faster generation and lower thinking-token usage.
32
+
31
33
  Standard `--aspect-ratio` values are `1:1`, `2:3`, `3:2`, `3:4`, `4:3`, `4:5`, `5:4`, `9:16`, `16:9`, `21:9`. Wide values additionally include `1:4`, `4:1`, `1:8`, `8:1`. Resolution tiers describe approximate output size.
32
34
 
33
35
  OpenAI controls:
@@ -42,9 +44,9 @@ Gemini does not support transparent-background generation ([Google documentation
42
44
 
43
45
  ## Input and examples
44
46
 
45
- Supply exactly one of `--prompt` and `--prompt-file` (UTF-8). Repeat `--reference` for local PNG, JPEG, or WebP files. References retain their order and original bytes. OpenAI reference requests use the edit endpoint.
47
+ Give exactly one of `--prompt` and `--prompt-file` (UTF-8). Repeat `--reference` for each local PNG, JPEG, or WebP reference image. References are sent in order and unchanged. With references, OpenAI requests use the edit endpoint.
46
48
 
47
- Up to 16 references are accepted for OpenAI and 14 for Gemini; Flash Lite is not optimized for multiple references. Each reference is limited to 50 MB. Gemini's complete serialized request is limited to 19 MB, including the prompt, base64-encoded references, and JSON escaping.
49
+ Up to 16 references are accepted for OpenAI and 14 for Gemini. Each reference is limited to 50 MB. Gemini's complete serialized request is limited to 19 MB, including the prompt, base64-encoded references, and JSON escaping.
48
50
 
49
51
  Create an asset:
50
52
 
@@ -69,7 +71,7 @@ Generate at a higher resolution using a reference:
69
71
 
70
72
  ```bash
71
73
  tau tool image-generate \
72
- --model gemini-3-pro-image --reference ./sauna.png \
74
+ --model gemini-nano-banana-2.1 --reference ./sauna.png \
73
75
  --prompt 'Recreate this image at higher resolution. Preserve composition and colors; refine fine detail.' \
74
76
  --aspect-ratio 16:9 --resolution 4K --output ./sauna-4k.png
75
77
  ```
@@ -84,7 +86,7 @@ for i in 1 2 3 4; do
84
86
  done
85
87
  ```
86
88
 
87
- Each invocation is independent; edits use only the supplied prompt and references.
89
+ Each run is independent; an edit sees only the prompt and references you give it.
88
90
 
89
91
  ## Outputs and recovery
90
92
 
@@ -94,13 +96,13 @@ The output's parent directory must exist. Neither the output nor `<output>.parts
94
96
  - `image.<format>`: the published image. Gemini responses are converted to PNG when needed; OpenAI bytes are saved as returned.
95
97
  - `manifest.json`: model, output path, usage, and `source` with the original filename and provider-declared MIME type (`null` when absent).
96
98
 
97
- Original bytes and usage remain available if conversion fails. Conversion may discard embedded metadata; use the original when provenance matters.
99
+ The original bytes and usage are kept even if conversion fails. Conversion may drop embedded metadata, so use the original when provenance matters.
98
100
 
99
- Failures exit nonzero and identify the invalid option or failed processing stage. Existing output or artifact paths require a fresh `--output` path; preserve retained recovery artifacts. Once generation starts, errors report the retained directory, which may be empty or incomplete. If final publication fails, the error points to the completed image to copy to a fresh path without generating again. Requests are not automatically retried because a failed request may already have incurred a charge; another generation request may incur another charge.
101
+ Failures exit nonzero and name the invalid option or the step that failed. If the output or `.parts` path already exists, choose a new `--output` path, and keep the existing files in case you need them. Once generation has started, errors give the path of the kept directory, which may be empty or incomplete. If only the final copy to `--output` fails, the error points to the finished image, so copy it to a new path instead of generating again. Requests are never retried automatically, because a failed request may already have been charged, and a new request may be charged again.
100
102
 
101
103
  ## Approximate cost
102
104
 
103
- Use Flare for fast everyday images and drafts; reserve Sunburst for demanding edits where preservation and precision matter most. Start at `medium`, use `low` for inexpensive exploration, and increase quality only when the result needs it. Explicit `--size` and `--quality` make budgeting more predictable than `auto`.
105
+ For OpenAI models, start at `--quality medium`, use `low` for inexpensive exploration, and increase quality when the result needs it. Explicit `--size` and `--quality` make budgeting more predictable than `auto`. For Nano Banana, account for resolution and thinking usage as well as input costs.
104
106
 
105
107
  ### OpenAI: cost per image
106
108
 
@@ -121,12 +123,12 @@ For example, 100 square 1024-pixel drafts at `low` have an estimated output cost
121
123
 
122
124
  Approximate USD image-output costs from [Google pricing](https://ai.google.dev/gemini-api/docs/pricing), excluding input and text/thinking usage:
123
125
 
124
- | Model | 1K | 2K | 4K | When to choose it |
125
- | --- | --- | --- | --- | --- |
126
- | `gemini-3.1-flash-lite-image` | $0.034 | Unsupported | Unsupported | Simple 1K images; not optimized for multiple references |
127
- | `gemini-3.1-flash-image` | $0.067 | $0.101 | $0.151 | Resolution tiers and very wide aspect ratios |
128
- | `gemini-3-pro-image` | $0.134 | $0.134 | $0.24 | Higher-resolution reference-based work with standard aspect ratios |
126
+ | Model | 1K | 2K | 4K |
127
+ | ------------------------ | ------- | ------- | ------ |
128
+ | `gemini-nano-banana-2.1` | $0.0336 | $0.0504 | $0.113 |
129
+
130
+ Input costs $1.50 per million tokens. Text and thinking output cost $7.50 per million tokens, in addition to image output. The manifest records provider-reported usage.
129
131
 
130
132
  Use OpenAI when transparent backgrounds or JPEG/WebP output are required. Compare the quality needed for the task, not just matching tier names across providers. Check [OpenAI pricing](https://developers.openai.com/api/docs/guides/image-generation#gpt-image-25-costs) and Google pricing for current rates before large batches.
131
133
 
132
- See [command-line tools](tools.md) for command discovery and execution ownership.
134
+ See [command-line tools](tools.md) for the other tools and where commands run.
@@ -1,48 +1,47 @@
1
1
  # Tau documentation
2
2
 
3
- Tau ships this canonical product guide with the host so agents and people can work from the same version-matched contracts. It covers supported operation, configuration, integrations, and troubleshooting, including the machine boundaries that matter in local and remote sessions.
4
-
5
- The intrinsic `tau_docs` tool reads one exact Markdown path at a time. It does not search files, list current settings, or inspect client-local state. Start here, choose the page that matches the task, and pass its flat path exactly.
3
+ These pages describe how to install, configure, operate, and integrate the version of Tau they ship with. Tau's agent reads the same pages through its built-in documentation tool, one page at a time.
6
4
 
7
5
  ## Start and orient
8
6
 
9
- - [Getting started](getting-started.md) covers installation, provider setup, and a first local session.
10
- - [Ownership and scope](ownership-and-scope.md) explains the client, host, execution environment, and Telegram runner. Read it before changing paths or remote-session configuration.
11
- - [TUI](tui.md) covers interactive commands, keybindings, themes, speech, and local presentation behavior.
12
- - [Troubleshooting](troubleshooting.md) provides checks for common startup, configuration, provider, tool, and remote-session failures.
7
+ - [Getting started](getting-started.md): install Tau, set up a provider, and run a first local session.
8
+ - [Ownership and scope](ownership-and-scope.md): which machine runs what in local and remote sessions. Read it before changing paths or remote-session configuration.
9
+ - [TUI](tui.md): interactive commands, keybindings, themes, speech, and other terminal behavior.
10
+ - [Troubleshooting](troubleshooting.md): checks for common startup, configuration, provider, tool, and remote-session problems.
13
11
 
14
12
  ## Configure Tau
15
13
 
16
- - [Configuration](configuration.md) explains discovery, precedence, safe edits, reload behavior, and common scope mistakes.
17
- - [Configuration reference](config-reference.md) defines every current top-level `config.json` field and its apply boundary.
18
- - [Credentials](credentials.md) covers API keys, Codex OAuth accounts, secret precedence, and credential ownership.
19
- - [Models](models.md) explains the bundled and remotely refreshed model catalog.
20
- - [Personas](personas.md) covers model-facing behavior, reasoning, tools, and persona files.
21
- - [Subagents](subagents.md) explains available subagents, launch policy, model overrides, and supervision.
22
- - [Skills](skills.md) covers discovery, frontmatter, trigger sensitivity, and tool eligibility.
23
- - [Prompts and project context](prompts-and-project-context.md) explains prompt templates, `AGENTS.md`, and additional context files.
24
- - [Client tools](client-tools.md) covers command-backed tools that execute on the owning client.
25
- - [Security](security.md) summarizes trust boundaries, secret handling, process execution, and remote access.
14
+ - [Configuration](configuration.md): where configuration lives, which layer wins, how to edit safely, and when changes apply.
15
+ - [Configuration reference](config-reference.md): every top-level `config.json` field and when a change takes effect.
16
+ - [Credentials](credentials.md): API keys, Codex OAuth accounts, key precedence, and where credentials belong.
17
+ - [Models](models.md): the bundled model catalog and how it is refreshed.
18
+ - [Personas](personas.md): model, instructions, reasoning, tools, and custom persona files.
19
+ - [Subagents](subagents.md): when agents can start subagents, which models they may use, and how to supervise them.
20
+ - [Skills](skills.md): skill discovery, frontmatter, trigger sensitivity, and tool eligibility.
21
+ - [Prompts and project context](prompts-and-project-context.md): prompt templates, `AGENTS.md`, and extra context files.
22
+ - [Client tools](client-tools.md): command-backed tools that run on the machine of the attached client.
23
+ - [Security](security.md): trust boundaries, secrets, process execution, and remote access.
26
24
 
27
25
  ## Build integrations
28
26
 
29
- - [Session protocol](session-protocol.md) explains transports, envelopes, observed state, delta application, errors, and client rules.
30
- - [Session protocol method reference](session-protocol-methods.md) defines the complete current request surface and result shapes.
31
- - [Node SDK](node-sdk.md) covers client choices, the public session facade, streamed state, client tools, cancellation, and exported types.
32
- - [SDK browser diff review](sdk-diff-review.md) covers hosting the built-in review UI, durable state, one-shot submission, and lifecycle ownership.
27
+ - [Session protocol](session-protocol.md): transports, message envelopes, session state, deltas, errors, and rules for clients.
28
+ - [Session protocol method reference](session-protocol-methods.md): every request method and its result.
29
+ - [Node SDK](node-sdk.md): choosing a client, the session API, streamed state, client tools, cancellation, and exported types.
30
+ - [SDK browser diff review](sdk-diff-review.md): hosting the built-in review UI from an SDK application.
33
31
 
34
32
  ## Work with sessions and services
35
33
 
36
- - [Tools](tools.md) explains built-in tool availability, execution, cancellation, and code-mode tools.
37
- - [Sessions](sessions.md) covers creation, turns, queueing, compaction, rewind, recovery, and persistence.
38
- - [Remote sessions](remote-sessions.md) explains `serve`, `attach`, remote paths, and transport authentication.
39
- - [History](history.md) covers local transcript history, optional remote replication, and the history tool.
40
- - [Nook](nook.md) explains configuration and operation of the optional static mini-app platform.
41
- - [Telegram](telegram.md) covers runner configuration, projects, workspaces, routing, and recovery.
34
+ - [Tools](tools.md): built-in tools, when they are available, how they run and stop, and code-mode tools.
35
+ - [Sessions](sessions.md): creating sessions, turns, queueing, compaction, rewind, recovery, and storage.
36
+ - [Remote sessions](remote-sessions.md): `serve`, `attach`, remote paths, and authentication.
37
+ - [History](history.md): searchable local history, optional remote replication, and the history tool.
38
+ - [Nook](nook.md): setting up and running the optional static mini-app platform.
39
+ - [Telegram](telegram.md): running the Telegram runner, bot access, chat commands, attachments, and recovery.
40
+ - [Telegram projects and workspaces](telegram-projects.md): repository, persistent-directory, and composite projects, workspace lifecycle, and provision hooks.
42
41
 
43
42
  ## Run command-line tools
44
43
 
45
- - [PDF unpacking](pdf-unpacking.md) covers PDF OCR with Mistral, Markdown extraction, and page-image patches.
46
- - [Image generation](image-generation.md) covers image generation and reference editing with Google and OpenAI.
47
- - [Speech generation](speech-generation.md) covers caller-chunked narration and dialogue, ElevenLabs voices, and long-form WAV assembly.
48
- - [OpenRouter](openrouter.md) covers standalone typed decisions and text, image, audio, and video understanding with fixed model choices.
44
+ - [PDF unpacking](pdf-unpacking.md): OCR PDFs with Mistral into Markdown and page images.
45
+ - [Image generation](image-generation.md): generate and edit images with Google and OpenAI.
46
+ - [Speech generation](speech-generation.md): narration and dialogue with ElevenLabs voices, assembled into long WAV files.
47
+ - [OpenRouter](openrouter.md): typed decisions and text, image, audio, and video understanding with fixed models.
@@ -27,6 +27,7 @@
27
27
  "history.md",
28
28
  "nook.md",
29
29
  "telegram.md",
30
+ "telegram-projects.md",
30
31
  "security.md",
31
32
  "troubleshooting.md"
32
33
  ]