@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,171 +1,182 @@
1
1
  # Sessions
2
2
 
3
- A Tau session is the durable home of one conversation and its execution environment. It keeps enough state to continue after detaching or restarting the host, while deliberately leaving short-lived client and process state out. Understanding that boundary makes interruption, recovery, compaction, and remote work predictable.
3
+ A Tau session holds one conversation and the execution environment it works in. It saves enough state to continue after you detach or the host restarts. Short-lived client and process state is not saved. This page explains what is kept, so interruption, recovery, compaction, and remote work behave as you expect.
4
4
 
5
5
  ## Create a session
6
6
 
7
- Running `tau` creates a fresh local session with the current directory as its execution cwd. The host resolves [configuration](configuration.md), models, [personas](personas.md), [skills](skills.md), prompts, and project context from that execution environment before the first turn.
7
+ Running `tau` creates a new local session whose working directory is the current directory. Before the first turn, the host loads [configuration](configuration.md), models, [personas](personas.md), [skills](skills.md), prompts, and project context from that execution environment.
8
8
 
9
- The session also receives immutable creation attributes. They are bounded string pairs used for provenance and [history](history.md), not mutable runtime settings. Conventional attributes are:
9
+ A session also gets creation attributes, which never change. They are short string pairs that record where the session came from and are used by [history](history.md). They are not settings. Common attributes are:
10
10
 
11
- - `source`, identifying the creating client, such as `tui` or `sdk`.
12
- - `repository`, using a normalized `host/owner/repository` value. Composite workspaces use comma-delimited repository values.
11
+ - `source`: the client that created the session, such as `tui` or `sdk`.
12
+ - `repository`: a normalized `host/owner/repository` value. Composite workspaces use a comma-separated list.
13
13
 
14
- For a local TUI, Tau can derive `repository` before creation because that client directly manages the local execution environment. A remote host does not inspect an execution path to infer attributes. Remote TUI creation supplies `source: "tui"`; SDK and protocol clients should provide complete authoritative attributes themselves.
14
+ A local TUI can fill in `repository` before creating the session, because it manages the local execution environment directly. A remote host never inspects a path to work out attributes. The remote TUI sends `source: "tui"`. SDK and protocol clients should send complete attributes themselves.
15
15
 
16
- A session’s execution-environment identity and cwd are fixed at creation. `/new` creates another session in the same environment with the current persona and reasoning settings. It does not clear or reuse the existing session.
16
+ A session's execution environment and working directory are fixed when it is created. `/new` creates another session in the same environment, with the current persona and reasoning settings. The existing session is kept, unchanged.
17
17
 
18
18
  ## Know what owns the session
19
19
 
20
- Three components can be physically colocated but remain logically separate:
20
+ Three parts can run on one machine but stay separate:
21
21
 
22
- - The TUI or SDK client submits input, observes updates, and may provide client-local tools.
23
- - The session host orchestrates turns, resolves credentials, persists sessions, and supervises execution environments.
24
- - The execution environment owns the agent-visible cwd, files, repository, project configuration, commands, platform, and runtime tools.
22
+ - The TUI or SDK client sends input, receives updates, and may offer client tools.
23
+ - The session host runs turns, resolves credentials, saves sessions, and manages execution environments.
24
+ - The execution environment holds the agent's working directory, files, repository, project configuration, commands, platform, and tools.
25
25
 
26
- The host persists ordinary sessions under `~/.config/tau/sessions` for the host user. These versioned documents are managed storage, not an editing interface. Never modify them directly. Use Tau’s session operations, normal project configuration, and recovery path instead.
26
+ The host saves sessions under `~/.config/tau/sessions` in the host user's home. These are versioned files that Tau manages. Never edit them directly. Use Tau's session operations, project configuration, and recovery instead.
27
27
 
28
- Session-owned [background Bash jobs](tools.md#bash) survive turns, interruption, and client detach. Running jobs retain an otherwise unobserved live session without blocking new turns. They stop on orderly session disposal or host shutdown, and are not recovered after restart. Crash or forced-kill cleanup is not guaranteed.
28
+ [Background Bash jobs](tools.md#bash) belong to the session. They survive turns, interruption, and clients detaching. A running job keeps a session loaded even when no client is attached, and does not block new turns. Jobs stop when the session is closed normally or the host shuts down, and are not restored after a restart. Cleanup after a crash or forced kill is not guaranteed.
29
29
 
30
30
  ## Submit, queue, and steer
31
31
 
32
- A normal submission is accepted and persisted before model work begins. Tau then runs model and tool subturns until the turn completes, fails, is blocked, or is interrupted. The model decides when its response is complete; Tau does not automatically start another turn after a final response. Automatic compaction can continue an unfinished turn within a new context window.
32
+ A submitted message is accepted and saved before any model work starts. Tau then runs model calls and tool calls until the turn completes, fails, is blocked, or is interrupted. The model decides when its response is complete, and Tau does not start another turn by itself after a final response. Automatic compaction can continue an unfinished turn in a new context window.
33
33
 
34
- Only one logical turn runs at a time. Input sent during active work has two useful delivery modes:
34
+ Only one turn runs at a time. While work is running, there are two ways to send more input:
35
35
 
36
- - A queued message waits for the session to become idle, then starts an independent turn.
37
- - Steering joins the active logical turn at a safe continuation boundary.
36
+ - A queued message waits until the session is idle, then starts its own turn.
37
+ - Steering joins the running turn at the next safe point.
38
38
 
39
- In the TUI, Enter steers and Ctrl+Enter queues while work is active. When idle, either starts a normal turn. Pending messages are visible to every observer of the same live hosted session. Alt+Up cancels queued messages and steering that has not been applied and restores the text to the editor.
39
+ In the TUI, Enter steers and Ctrl+Enter queues while work is running. When idle, both start a normal turn. Pending messages are visible to every client attached to the same live session. Alt+Up cancels queued messages and steering that has not been applied yet, and puts the text back in the editor.
40
40
 
41
- A turn captures its model, persona, reasoning, system prompt, tools, retry policy, and compaction policy when it starts. Tool subturns and steering continuations keep that captured specification even if reasoning or host configuration changes meanwhile. A queued turn captures the then-current specification when it later starts.
41
+ A turn fixes its model, persona, reasoning, system prompt, tools, retry policy, and compaction policy when it starts. Tool calls and steering within the turn keep these, even if reasoning or host configuration changes meanwhile. A queued turn uses the settings current when it actually starts.
42
42
 
43
- Pending queue and steering state survives client detach only while the hosted session remains alive in memory. It is not part of durable recovery and starts empty after a host restart.
43
+ Queued and steering messages survive a client detaching only while the session stays loaded on the host. They are not saved and are empty after a host restart.
44
44
 
45
45
  ## Interrupt and retry
46
46
 
47
- Ordinary session interruption is cooperative. It requests cancellation of the main session’s active turn, all direct executions, isolated model samples, and maintenance work. An interrupted turn records an interrupted assistant result where one exists. It does not stop independently running supervised subagents; select one with Alt+Down and use Ctrl+G, or call `session.interruptSubagent` from a protocol client. Host shutdown or session disposal cleans up those child runtimes. In the TUI, Escape interrupts client-local foreground work such as diff review, recording, or speech playback before requesting main-session interruption from the host.
47
+ Interruption asks work to stop. It cancels the main session's running turn, direct commands, standalone model calls, and maintenance work. An interrupted turn records an interrupted assistant result where there is one. Interruption does not stop subagents: select one with Alt+Down and press Ctrl+G, or call `session.interruptSubagent` from a protocol client. Host shutdown or session disposal stops subagents. In the TUI, Escape first stops local work such as diff review, recording, or speech playback, and only then asks the host to interrupt the session.
48
48
 
49
- Retry runs another assistant turn from the current session history. It does not remove the interrupted or failed result, rewind context, or submit the previous user text again. This lets Tau continue from completed tool results without automatically rerunning them. In the TUI, press Enter twice on an empty editor while idle.
49
+ Retry runs another assistant turn from the current history. It does not remove the interrupted or failed result, rewind context, or send the previous user text again. Tau can therefore continue from completed tool results without running those tools again. In the TUI, press Enter twice on an empty editor while idle.
50
50
 
51
- Retry is unavailable when there is no prior user turn.
51
+ Retry is unavailable when there is no earlier user turn.
52
52
 
53
- Detaching is not the same as interrupting. Closing one observer of a long-running host leaves the hosted turn running. By contrast, a local TUI owns its in-process host, so closing it causes that host to shut down and interrupt active work. See [remote sessions](remote-sessions.md).
53
+ Detaching is not interrupting. Closing one client of a long-running host leaves the turn running. A local TUI, however, owns its in-process host, so closing it shuts that host down and interrupts running work. See [remote sessions](remote-sessions.md).
54
54
 
55
- ## Change persona and reasoning safely
55
+ ## Change persona and reasoning
56
56
 
57
- The selected persona and reasoning level are durable session settings.
57
+ The persona and reasoning level are saved session settings.
58
58
 
59
- Persona changes require idle state because they rebuild the effective model, system instructions, skills, and tools from the execution environment’s current configuration. In the TUI, use `/persona:<id>` or Ctrl+P.
59
+ A persona change requires an idle session, because it rebuilds the model, system instructions, skills, and tools from the execution environment's current configuration. In the TUI, use `/persona:<id>` or Ctrl+P.
60
60
 
61
- Reasoning can be changed while work is active. The current turn keeps its captured reasoning, while the next independently started or queued turn uses the new setting. Use Shift+Tab in the TUI.
61
+ Reasoning can change while work is running. The running turn keeps its reasoning, and the next turn uses the new setting. In the TUI, use Shift+Tab.
62
62
 
63
- After a host restart, recovery resolves current runtime configuration so providers and model definitions remain usable, then reapplies the session’s persisted persona and reasoning settings where possible. The effective recovered bootstrap can change when the current installation or model catalog has changed, but the session’s committed semantic content remains the recovery source of truth.
63
+ After a host restart, recovery loads the current configuration so providers and models work, then reapplies the session's saved persona and reasoning where possible. The result can differ from before if the installation or model catalog has changed. The saved conversation stays the same.
64
64
 
65
65
  ## Detach, reattach, and recover
66
66
 
67
- A session is persisted throughout its lifetime, not only when the TUI exits. Reattaching to a live host returns the current state and continues receiving updates. Reattaching after host restart loads the stored session and restores its execution environment through a configured resolver.
67
+ A session is saved throughout its life, not only when the TUI exits. Reattaching to a running host returns the current state and continues with live updates. Reattaching after a host restart loads the saved session and reconnects its execution environment, using the host's configuration for that environment type.
68
68
 
69
- Recovery preserves user-visible durable state including:
69
+ Recovery keeps:
70
70
 
71
- - committed conversation messages and terminal tool results
72
- - current persona and reasoning settings
73
- - cumulative usage cost and context accounting needed for continuation
74
- - execution-environment identity, cwd, and creation attributes
75
- - compaction and rewind results
71
+ - the conversation messages and finished tool results
72
+ - the persona and reasoning settings
73
+ - the total cost so far, and the context accounting needed to continue
74
+ - the execution environment, working directory, and creation attributes
75
+ - the results of compaction and rewind
76
76
 
77
- Recovery intentionally does not recreate every live process. It returns the session idle, settles any accepted but unfinished turn as aborted, cancels running maintenance operations, and normalizes tools whose completion cannot be proven. Supervised subagents and their live activity do not survive restart.
77
+ Recovery does not restart live processes. The session comes back idle. A turn that was accepted but not finished is recorded as aborted, running maintenance is cancelled, and tools whose outcome is unknown are marked as such. Subagents and their activity do not survive a restart.
78
78
 
79
- A stored session is listed or recovered only when the current host has a resolver capable of restoring its execution-environment kind and named target. Recovery can therefore fail even when the session document is valid, for example when a Cloudflare bridge was removed, a Fly API target is no longer configured, or the underlying sandbox, Sprite, directory, or credentials are unavailable.
79
+ The host lists or recovers a saved session only if it can reconnect that session's execution environment type and target. Recovery can therefore fail for a valid session, for example when a Fly Sprite connection is no longer configured, or when the Sprite, directory, or credentials are no longer available.
80
80
 
81
- Newer Tau versions preserve the openability of supported stored sessions through storage migrations and recovery normalization. This promises access to recoverable semantic data, not byte-for-byte files or identical historical presentation. A genuinely newer unsupported storage version or corrupted document can still be rejected.
81
+ Newer Tau versions can open saved sessions from supported older versions. The conversation and other important data stay available, but the files may be rewritten and old content may display differently. Tau rejects corrupted sessions, and sessions saved by a newer Tau version that it does not support.
82
82
 
83
83
  ## Compact model context
84
84
 
85
- Compaction replaces model-visible conversation context with a checkpoint so the same session can continue within the model’s context window. It changes active model context, not the independent searchable transcript.
85
+ Compaction replaces the conversation the model sees with a summary, called a checkpoint, so the session can continue within the model's context window. It changes only what the model sees. Searchable history is not affected.
86
86
 
87
- The working model creates the checkpoint from its native conversation context, including the base instructions, previous checkpoint, and reasoning state supported by its provider. The checkpoint covers the whole active context and does not depend on knowing which recent messages will remain. It is an isolated maintenance request with no tool execution, not a submitted user turn. Reasoning continuity depends on the provider; the checkpoint records useful conclusions and rationale rather than reproducing internal thinking.
87
+ The session's model writes the checkpoint from its own view of the conversation, including the base instructions, any earlier checkpoint, and reasoning state where the provider supports it. The checkpoint covers the whole context and does not depend on which recent messages will be kept. It is written in a separate maintenance request that runs no tools and is not a user turn. How much reasoning carries over depends on the provider. The checkpoint records useful conclusions and their reasons instead of reproducing the model's internal thinking.
88
88
 
89
- The summary is intended to support both immediate continuation and recognition of earlier work. Recent and unfinished work receives the most detail; older work is compressed into its purpose, outcomes, and significant decisions. Across repeated compactions, the agent integrates the previous summary with newer conversation rather than discarding topics solely because they are old or completed. Important ongoing constraints retain precision regardless of age. Compaction is lossy: this cumulative overview does not preserve every topic or detail indefinitely.
89
+ The summary aims both to let work continue right away and to keep earlier work recognizable. Recent and unfinished work gets the most detail. Older work is reduced to its purpose, results, and important decisions. Across repeated compactions, the model merges the previous summary with the newer conversation, and does not drop topics just because they are old or finished. Important constraints stay precise however old they are. Compaction still loses information: over time, not every topic or detail survives.
90
90
 
91
91
  ### Automatic compaction
92
92
 
93
- Automatic compaction runs before a model subturn when fresh provider usage plus newly added estimated context exceeds the threshold. The threshold is the model context window minus a fixed reserve of 16,384 tokens. Checkpoint generation inherits the normal model stream settings without a compaction-specific output limit. Requests whose input cannot fit fail rather than falling back to a flattened transcript. Compaction can run more than once during a long logical turn.
93
+ Automatic compaction runs before a model call when the provider's latest token count, plus an estimate for content added since, exceeds the threshold. The threshold is the model's context window minus a fixed reserve of 16,384 tokens. Writing the checkpoint uses the normal model settings, with no special output limit.
94
94
 
95
- The compaction summary describes the conversation, completed work, findings, and remaining work without copying large user messages or tool output verbatim. It can identify details to revisit in the transcript archive and explain why they matter. Tau retains a contiguous recent suffix within a budget of 20,000 estimated tokens, capped by the compaction threshold. Cuts can occur within a user turn, but messages are kept whole and an assistant tool-call message stays together with all its results. Retained messages, including tool-recovery messages, are not truncated. Tau does not skip an oversized exchange to fill unused budget with earlier messages. If the latest exchange cannot fit, only the checkpoint remains. Tau records the compaction as a new active context segment.
95
+ For both automatic and manual compaction, Tau checks that the request fits, using a valid token count from the provider plus estimates for new content and the summary instruction. Without a valid count, it estimates the whole request. If the request cannot fit, compaction fails; Tau never falls back to sending a flattened transcript. Compaction can run several times during one long turn.
96
96
 
97
- Before replacing context, Tau makes a best-effort transcript archive in the execution environment’s temporary directory. Each automatic compaction adds a numbered `.txt` and `.json` pair under a directory isolated by agent id. The text file supports bounded search and truncates large tool results; the JSON file retains the archived content without those tool-result truncations, excluding assistant thinking. A private `README.md` in the same directory describes the formats and adaptable lookup examples. The continuation message includes all three exact paths when archiving succeeds.
97
+ The summary describes the conversation, completed work, findings, and remaining work, without copying long user messages or tool output word for word. It can point to details worth looking up in the transcript archive and say why they matter.
98
98
 
99
- These files recover details removed from the current session’s model context. The `history` tool instead queries a separate host-owned transcript collection, which may be remotely replicated, stale, truncated, or unavailable, and its transcript entry ids do not identify archive records. The continuation message identifies the execution-environment archive as the recovery source for compacted context.
99
+ Tau keeps the most recent messages, without gaps, within a budget of 20,000 estimated tokens, and never more than the compaction threshold:
100
100
 
101
- The continuation includes the complete archive guide directly, so the agent does not need a separate file read before resuming. The guide also remains available on disk. Its retrieval guidance favors bounded access by known entry id or distinctive evidence, with a concise chronological overview as an optional discovery step. Earlier numbered pairs can contain details that predate the current compaction. Tau does not generate or require a fixed overview projection.
101
+ - The cut can fall inside a user turn, but messages are kept whole, and an assistant message with tool calls stays together with all its results.
102
+ - Kept messages, including tool-recovery messages, are never truncated.
103
+ - Tau does not skip a large exchange to fit earlier messages into the remaining budget.
104
+ - If the latest exchange does not fit, only the checkpoint remains.
102
105
 
103
- These archives are temporary recovery aids, not backups. Archive failure does not block compaction, and execution-environment cleanup may remove them.
106
+ Tau records the compaction as the start of a new context segment.
107
+
108
+ Before replacing the context, Tau tries to save a transcript archive in the execution environment's temporary directory. Each automatic compaction adds a numbered `.txt` and `.json` pair, in a directory specific to the agent. The text file is meant for searching, with large tool results shortened. The JSON file keeps the full tool results, but not assistant thinking. A `README.md` in the same directory describes both formats, with example lookups. When archiving succeeds, the continuation message includes all three paths.
109
+
110
+ These files hold details removed from the session's model context. The `history` tool is different: it searches a separate collection on the host, which may be copied to a remote service, out of date, truncated, or unavailable, and its entry IDs do not match archive records. The continuation message names the archive as the place to recover compacted details.
111
+
112
+ The continuation message includes the full archive guide, so the agent can continue without reading the file first. The guide also stays on disk. It recommends looking up entries by known ID or distinctive text, with a short chronological overview as an optional first step. Earlier numbered pairs can hold details from before the current compaction.
113
+
114
+ Archives are temporary recovery aids, not backups. If archiving fails, compaction still runs, and the execution environment may delete archives during cleanup.
104
115
 
105
116
  ### Intermediate system instructions
106
117
 
107
- Tau supports plain-text system instructions in conversation history separately from the persona/base prompt. These records are hidden in the TUI, persisted for recovery, recorded as system entries in searchable transcript history, and sent to the model in conversation order. The initial persona/base prompt is not recorded in transcript history. Providers that cannot represent intermediate system messages may fold their instructions into the leading prompt through the model adapter.
118
+ Besides the persona's base prompt, the conversation history can contain plain-text system instructions. The TUI hides them. They are saved with the session, recorded as system entries in searchable history, and sent to the model in conversation order. The persona's base prompt is never recorded in history. Providers that do not support system messages in the middle of a conversation may receive these instructions merged into the leading prompt.
108
119
 
109
- Compaction treats ordinary intermediate instructions as historical context: their relevant consequences can enter the summary, while instructions in the retained recent tail remain unchanged. The persona/base prompt is supplied separately and is not replaced by the summary. Structured continuation metadata identifies obsolete compaction guidance, which is excluded from both summarization and retained context. Instructions needing exact long-lived preservation must be regenerated or retained by their owning feature rather than relying on system-role authority alone. Rewind removes intermediate instructions after the selected boundary.
120
+ Compaction treats these instructions as part of the history: what they caused can enter the summary, and instructions among the kept recent messages stay unchanged. The base prompt is sent separately and is never replaced by the summary. Instructions that only guided an earlier compaction are left out of both the summary and the kept messages. An instruction that must survive exactly for a long time cannot rely on being a system message; the feature that added it must add it again or keep it some other way. Rewind removes these instructions along with everything after the rewind point.
110
121
 
111
- Existing hidden `<system>` blocks and instruction producers are unchanged. Native system-message support does not promote user-authored tags into privileged instructions.
122
+ A `<system>` block written by a user never becomes a system instruction (see [prompts and project context](prompts-and-project-context.md)).
112
123
 
113
124
  ### Manual compaction
114
125
 
115
- Manual compaction requires idle state and summarizes the whole active model history rather than retaining an automatic recent tail.
126
+ Manual compaction requires an idle session. It summarizes the whole conversation and keeps no recent messages.
116
127
 
117
128
  ```text
118
129
  /compact-all preserve the deployment constraints
119
130
  ```
120
131
 
121
- `/compact-all` replaces context with the generated summary. `/compact-keep-last` also asks the summary to include the prior last assistant response verbatim when one is available. Text after either command is optional guidance to the compaction model, not a new conversation turn.
132
+ `/compact-all` replaces the context with the summary. `/compact-keep-last` also asks the summary to include the last assistant response word for word, when there is one. Text after either command is optional guidance for the summary, not a new message in the conversation.
122
133
 
123
- A failed, skipped, or interrupted compaction leaves the previous context active. Manual compaction does not create the automatic pre-compaction archive.
134
+ If compaction fails, is skipped, or is interrupted, the previous context stays. Manual compaction does not save a transcript archive.
124
135
 
125
136
  ## Rewind deliberately
126
137
 
127
- `/rewind` opens a picker of eligible user messages. Selecting one removes that selected message and everything after it from the active session, then returns the selected text to the editor so it can be revised and resubmitted.
138
+ `/rewind` opens a list of user messages you can return to. Selecting one removes that message and everything after it from the session, and puts the selected text back in the editor so you can change and resend it.
128
139
 
129
- Rewind requires the session to be idle with no pending submissions. It truncates messages, tool state, turn outcomes, and searchable transcript entries from the selected boundary onward. It is not a display-only operation and has no built-in undo. If the intent is merely to correct course without deleting history, submit a new message or steer the active turn instead.
140
+ Rewind requires an idle session with no pending messages. It removes messages, tool state, turn results, and searchable history entries from that point on. It cannot be undone. To change direction without deleting anything, send a new message or steer the running turn instead.
130
141
 
131
- Compaction and rewind differ in an important way: compaction preserves the flat transcript history, while rewind truncates it to match the chosen session boundary.
142
+ Compaction keeps searchable history, while rewind cuts it back to the rewind point.
132
143
 
133
144
  ## Reload session content
134
145
 
135
- Run `/reload` from the TUI while the session is idle. The host rereads runtime configuration and personas, prompts, skills, and AGENTS.md context from the execution environment cwd. It keeps the current persona if that id still exists and otherwise selects the first available persona. Reload warnings appear in the transcript.
146
+ Run `/reload` in the TUI while the session is idle. The host reads configuration, personas, prompts, skills, and `AGENTS.md` context again from the session's working directory. It keeps the current persona if its ID still exists, and otherwise selects the first available persona. Warnings appear in the transcript.
136
147
 
137
- Reload updates future turns. It does not rewrite committed conversation content or change the execution environment. It also does not reload client-owned themes, diff launchers, speech settings, or client tools. Restart the attaching TUI for those. Effective configured model `apiKeys` update through `/reload`, while managed Codex auth storage is read again on later credential resolutions. Restart the host for changed process environment variables, listener settings, resolver targets, or the Tau binary. [Credentials](credentials.md) has the canonical distinctions, and [remote sessions](remote-sessions.md) identifies each owner.
148
+ Reload affects later turns. It never changes the saved conversation or the execution environment. It does not reload anything owned by the client, such as themes, speech settings, or client tools; restart the TUI for those. Codex auth storage is read again on every new request. Restart the host after changing its environment variables, `apiKeys`, listener settings, hosted environment settings, or the Tau version. [Credentials](credentials.md) and [remote sessions](remote-sessions.md) describe where each setting belongs.
138
149
 
139
- Protocol clients can request mutations directly, but should still wait for idle state. Mutating operations can interrupt current work and reject pending messages so the session reaches one canonical configuration.
150
+ Protocol clients can request changes directly, but should still wait for an idle session. Some changes interrupt running work and reject pending messages, so the session ends up with one consistent configuration.
140
151
 
141
- ## Session state and transcript history are different
152
+ ## Session state and searchable history
142
153
 
143
- Tau keeps two durable views for different jobs:
154
+ Tau keeps two separate records for different purposes:
144
155
 
145
- - The session snapshot is the recoverable source of truth for continuing one conversation. It contains the current active model context and user-visible session state.
146
- - Transcript history is a flat sequence of committed user entries, intermediate system instructions, assistant text, and completed tools used for cross-session search and reading. It is stored separately in the host’s history database and may also replicate to a configured history service.
156
+ - The saved session is what Tau uses to continue one conversation. It contains the model's current context and the session state you see.
157
+ - Searchable history is a flat list of user messages, intermediate system instructions, assistant text, and finished tool calls, used to search and read across sessions. It is stored in the host's history database and can also be copied to a configured history service.
147
158
 
148
- Compaction changes the session snapshot’s active context but leaves transcript history intact. Rewind truncates both from the removed boundary. Transcript history cannot reconstruct all session runtime state and is not used to recover a session. See [history](history.md) for storage, replication, and the history tool.
159
+ Compaction changes the saved session's model context but leaves searchable history as it was. Rewind cuts both back to the rewind point. History cannot rebuild a session and is never used to recover one. See [history](history.md) for storage, replication, and the history tool.
149
160
 
150
161
  ## Inspect model usage
151
162
 
152
- Tau writes host-owned usage records to daily `~/.config/tau/logs/usage-YYYY-MM-DD.jsonl` files under the host user’s home. Records cover finalized assistant model responses from main sessions, supervised subagents, and ephemeral threads. They include timestamps and session, persona, provider, model, reasoning, and agent attribution, plus input, output, cache-read, cache-write, total-token, and Tau-recorded cost values. They do not contain prompt or response text and are separate from session snapshots and transcript history.
163
+ Tau writes usage records on the host to daily files, `~/.config/tau/logs/usage-YYYY-MM-DD.jsonl`, in the host user's home. Each record is one finished model response from a main session, subagent, or ephemeral thread. Records include the time, the session, persona, provider, model, reasoning, and agent, and the input, output, cache-read, cache-write, and total tokens with Tau's cost estimate. They do not contain prompt or response text, and they are separate from saved sessions and searchable history.
153
164
 
154
- Run the summary command as the user who runs the host:
165
+ Run the summary command as the user that runs the host:
155
166
 
156
167
  ```sh
157
168
  tau usage
158
169
  ```
159
170
 
160
- It groups by day by default and prints request count, each token category, total tokens, cost, and an overall total. The supported options are:
171
+ By default it groups by day and prints the request count, each token category, total tokens, cost, and an overall total. The options are:
161
172
 
162
173
  | Option | Behavior |
163
174
  | --- | --- |
164
- | `--since <date>` | Include entries on or after an inclusive `YYYY-MM-DD` or ISO date. |
175
+ | `--since <date>` | Include entries on or after a `YYYY-MM-DD` or ISO date. |
165
176
  | `--persona <id>` | Match an exact persona id, case-insensitively. |
166
177
  | `--provider <name>` | Match an exact provider, case-insensitively. |
167
178
  | `--model <id>` | Match an exact model id, case-insensitively. |
168
- | `--group-by day\|model` | Group by calendar day or by `provider/model`; the default is `day`. |
179
+ | `--group-by day\|model` | Group by calendar day or by `provider/model`. The default is `day`. |
169
180
  | `--help`, `-h` | Show the command help. |
170
181
 
171
182
  Filters can be combined:
@@ -174,36 +185,36 @@ Filters can be combined:
174
185
  tau usage --since 2026-08-01 --provider openai-codex --group-by model
175
186
  ```
176
187
 
177
- There is no `--until`, `--session`, or `--agent` filter. For a remote session, run `tau usage` on the host under the same user as `tau serve`; running it on an attaching client reads that client user’s logs instead. The command is read-only, but the raw files still reveal timestamps, session identifiers, model choices, token volume, and cost activity. Prefer the filtered aggregate output over copying raw JSONL into a shared transcript, and treat Tau-recorded costs as operational estimates rather than a provider invoice.
188
+ There is no `--until`, `--session`, or `--agent` filter. For a remote session, run `tau usage` on the host as the user that runs `tau serve`. Running it on an attached client reads that client user's logs instead. The command only reads, but the raw files still show times, session IDs, model choices, token volumes, and costs. Share the filtered summary instead of raw JSONL, and treat Tau's costs as estimates, not an invoice.
178
189
 
179
- ## What survives each boundary
190
+ ## What survives each event
180
191
 
181
- | Event | Durable session state | Pending input | Active turns and subagents | Client-local state |
192
+ | Event | Saved session | Pending messages | Running turns and subagents | Client state |
182
193
  | --- | --- | --- | --- | --- |
183
- | Another client detaches from a live WebSocket host | Preserved | Preserved in host memory | Continue | Detached client tools, themes, drafts, and local tasks are lost |
184
- | Local TUI exits | Persisted by owned-host shutdown | Cancelled | Interrupted and settled where possible | Lost |
185
- | WebSocket host restarts | Recovered from storage | Lost | Returns idle; subagents are not restored | Each client reconnects separately |
186
- | TUI restarts while host stays live | Preserved | Preserved in host memory | Continue | Reloaded from the new client process |
187
- | `/new` | Old session remains stored | Not copied | New idle session | Same TUI process continues |
194
+ | Another client detaches from a running WebSocket host | Kept | Kept in host memory | Continue | That client's tools, themes, drafts, and local tasks are gone |
195
+ | Local TUI exits | Saved as its host shuts down | Cancelled | Interrupted and recorded where possible | Lost |
196
+ | WebSocket host restarts | Recovered from storage | Lost | Session returns idle; subagents are not restored | Each client reconnects on its own |
197
+ | TUI restarts while the host keeps running | Kept | Kept in host memory | Continue | Loaded again by the new client process |
198
+ | `/new` | Old session stays saved | Not copied | New idle session | Same TUI process continues |
188
199
 
189
- An unsent editor draft belongs only to the TUI. Use Ctrl+S to move it to the local clipboard before restarting a client.
200
+ An unsent draft exists only in the TUI. Press Ctrl+S to copy it to the clipboard before restarting a client.
190
201
 
191
- ## Verify a recovered session safely
202
+ ## Check a recovered session
192
203
 
193
- Use normal Tau operations rather than opening or editing session files.
204
+ Use normal Tau operations, not the session files.
194
205
 
195
- 1. Wait for active work to finish or interrupt it intentionally.
196
- 2. Note the session id shown in the TUI startup block.
206
+ 1. Wait for running work to finish, or interrupt it.
207
+ 2. Note the session ID shown at the top of the TUI.
197
208
  3. Exit cleanly and reattach through the same host.
198
- 4. Confirm the expected messages, persona, and reasoning level.
199
- 5. Run non-contextual environment checks with `!!`, for example `!!pwd` and `!!git status --short`.
200
- 6. Submit a small read-only request before resuming destructive work.
209
+ 4. Confirm the messages, persona, and reasoning level.
210
+ 5. Check the environment without adding to the context using `!!`, for example `!!pwd` and `!!git status --short`.
211
+ 6. Send a small read-only request before continuing with work that changes things.
201
212
 
202
- For a local stored session, start a WebSocket host under the same user and attach from another terminal:
213
+ To reopen a saved local session, start a WebSocket host as the same user and attach from another terminal:
203
214
 
204
215
  ```sh
205
216
  tau serve
206
217
  tau attach --session 0195d6e4-4cf9-7f44-a2d8-f8f7f49ee9d3 ws://127.0.0.1:8787
207
218
  ```
208
219
 
209
- If recovery fails, verify the host version, execution-environment resolver configuration, target availability, and credentials before assuming the stored session is damaged. [Remote sessions](remote-sessions.md) covers those checks.
220
+ If recovery fails, check the host version, the hosted environment configuration, whether the target is available, and credentials before assuming the session is damaged. [Remote sessions](remote-sessions.md) covers those checks.
@@ -1,8 +1,13 @@
1
1
  # Skills
2
2
 
3
- Skills are local packages of instructions and supporting material that teach an agent how to handle a particular kind of work. Tau discovers them from the execution environment, shows all discovered skills to every persona, and lets the agent open a skill only when the task calls for it.
3
+ A skill is a directory of instructions and supporting files that teaches an agent how to handle one kind of work. Tau finds skills on the execution environment and lists all of them for every persona. The agent opens a skill only when the task calls for it.
4
4
 
5
- A skill is not a prompt template, a persona, or project context. A [prompt template](prompts-and-project-context.md) is text placed in the input editor. A [persona](personas.md) chooses the model, system prompt, and tools for a session. `AGENTS.md` gives standing instructions for a directory tree. A skill is a reusable, selectively activated workflow with its own directory.
5
+ Skills differ from Tau's other content:
6
+
7
+ - A [prompt template](prompts-and-project-context.md) is text you insert into the input editor.
8
+ - A [persona](personas.md) chooses the model, system prompt, and tools for a session.
9
+ - `AGENTS.md` gives standing instructions for a directory tree.
10
+ - A skill is a reusable workflow that the agent loads only when it applies.
6
11
 
7
12
  ## Where Tau discovers skills
8
13
 
@@ -13,9 +18,9 @@ Tau looks for skill directories at global and project levels:
13
18
  | Global | `~/.config/tau/skills/<name>/SKILL.md` and `~/.agents/skills/<name>/SKILL.md` |
14
19
  | Project | `<level>/.tau/skills/<name>/SKILL.md` and `<level>/.agents/skills/<name>/SKILL.md` |
15
20
 
16
- The global level is in scope only when the session working directory is inside the execution environment's home directory. For project discovery, Tau walks from the working directory toward home, or toward the filesystem root when the working directory is outside home. A directory participates as a project level when it contains `.tau/` or `.agents/skills/`.
21
+ The global level applies only when the session's working directory is inside the execution environment's home directory. For project levels, Tau searches from the working directory up to home, or up to the filesystem root when the working directory is outside home. A directory counts as a project level when it contains `.tau/` or `.agents/skills/`.
17
22
 
18
- Skills are keyed by name. Precedence runs from broadest to most specific:
23
+ Skills are identified by name. When two levels define the same name, the more specific one wins:
19
24
 
20
25
  1. Global skills are the base layer.
21
26
  2. Parent project levels override global and more distant parent levels.
@@ -32,11 +37,11 @@ For example, with a session in `~/code/atlas/apps/api`, these definitions of `re
32
37
 
33
38
  `~/.config/tau/skills/` also overrides `~/.agents/skills/` for a same-named global skill.
34
39
 
35
- All discovery happens in the execution environment. A remote host does not inspect the attached client's filesystem for skills.
40
+ Discovery happens only on the execution environment. Skills on an attached client's machine are never used.
36
41
 
37
42
  ## The skill directory contract
38
43
 
39
- Each skill is a directory containing an exact uppercase `SKILL.md` filename:
44
+ Each skill is a directory that contains a file named exactly `SKILL.md`, in uppercase:
40
45
 
41
46
  ```text
42
47
  .tau/skills/release-check/
@@ -49,7 +54,7 @@ Each skill is a directory containing an exact uppercase `SKILL.md` filename:
49
54
  └── checklist.txt
50
55
  ```
51
56
 
52
- Only `SKILL.md` is required. `references/`, `scripts/`, and `assets/` are conventional optional directories, not separately registered content. The instructions in `SKILL.md` decide when and how to use them. Paths mentioned by a skill are relative to the skill directory unless the skill says otherwise.
57
+ Only `SKILL.md` is required. `references/`, `scripts/`, and `assets/` are optional directories by convention; Tau does not treat them specially. The instructions in `SKILL.md` say when and how to use them. Paths in a skill are relative to the skill directory unless the skill says otherwise.
53
58
 
54
59
  `SKILL.md` starts with YAML frontmatter followed by Markdown instructions:
55
60
 
@@ -68,7 +73,7 @@ allowed-tools: bash, view_image
68
73
  Check the release branch, run the repository verification commands, and report only blocking failures.
69
74
  ```
70
75
 
71
- The frontmatter contract is:
76
+ The frontmatter fields are:
72
77
 
73
78
  | Field | Requirement |
74
79
  | --- | --- |
@@ -77,15 +82,15 @@ The frontmatter contract is:
77
82
  | `license` | Optional non-empty string. |
78
83
  | `compatibility` | Optional non-empty string of at most 500 characters. |
79
84
  | `metadata` | Optional map whose keys and values are strings. |
80
- | `allowed-tools` | Optional non-empty string. It is accepted for skills-format compatibility but currently ignored by Tau. |
85
+ | `allowed-tools` | Optional non-empty string. Accepted so that skills written for other tools load, but Tau ignores it. |
81
86
 
82
- Unknown frontmatter fields are discarded. `allowed-tools` does not enable, disable, or restrict any tool. Tool availability comes from the active persona; subagents inherit its eligible tools. See [tools](tools.md) and [subagents](subagents.md).
87
+ Unknown frontmatter fields are ignored. `allowed-tools` does not enable, disable, or restrict any tool. Tools come from the active persona, and subagents inherit the eligible ones. See [tools](tools.md) and [subagents](subagents.md).
83
88
 
84
- Keep the description useful without copying the full workflow into it. Tau initially exposes the name, description, and `SKILL.md` path. The agent opens the file after activation, then reads only the referenced resources needed for the task.
89
+ Keep the description short and useful, without the full workflow. Until a skill is activated, the agent sees only its name, description, and `SKILL.md` path. After activation the agent opens the file and reads only the referenced files the task needs.
85
90
 
86
91
  ## Skill availability
87
92
 
88
- Every persona exposes all discovered skills. Discovery does not run a skill on every turn; it makes the skill available to the agent under its activation policy.
93
+ Every persona can use all discovered skills. A discovered skill does not run on every turn. The agent activates it according to its trigger sensitivity.
89
94
 
90
95
  ## Activation and trigger sensitivity
91
96
 
@@ -95,7 +100,7 @@ A skill declares trigger sensitivity in its `description`. The supported policy
95
100
  - **balanced**: activate when the request clearly matches the skill. This is the default when no trigger is stated.
96
101
  - **explicit**: activate only when the skill is explicitly named by an active instruction.
97
102
 
98
- Use a clear phrase such as `Trigger: eager.`, `Trigger: balanced.`, or `Trigger: explicit.` in the description. Trigger sensitivity is an agent-facing convention carried by the description, not a separate frontmatter field.
103
+ Put a clear phrase such as `Trigger: eager.`, `Trigger: balanced.`, or `Trigger: explicit.` in the description. There is no separate frontmatter field; the agent reads the policy from the description.
99
104
 
100
105
  An exact skill reference has this form:
101
106
 
@@ -105,26 +110,26 @@ An exact skill reference has this form:
105
110
 
106
111
  A reference in the current user request, active `AGENTS.md` instructions, or an already-active skill explicitly activates that skill. Generic wording or a coincidental keyword does not activate an explicit skill.
107
112
 
108
- Skill references compose. If `release-check` instructs the agent to use `@@skill:dependency-audit`, Tau's activation policy allows the second skill to activate transitively. Each skill activates at most once per request, so repeated references and cycles do not reopen it.
113
+ A skill can activate another skill. If `release-check` tells the agent to use `@@skill:dependency-audit`, that second skill activates too. Each skill activates at most once per request, so repeated references and cycles do not open it again.
109
114
 
110
- After activation, the agent reads `SKILL.md` from the path in the discovered index. It should load only relevant files from `references/` or `assets/`, and prefer provided scripts when they implement the required workflow. Skills are treated as read-only unless the user explicitly asks to edit them.
115
+ After activation, the agent reads `SKILL.md` from the listed path. It loads only the relevant files from `references/` or `assets/`, and uses the skill's scripts when they do what the workflow needs. The agent does not edit skills unless the user explicitly asks.
111
116
 
112
117
  ## Applying changes and checking discovery
113
118
 
114
- A running TUI session keeps its current content catalog and prompt context until it reloads. Run:
119
+ A running session keeps its current skills and prompt context until it reloads. Run:
115
120
 
116
121
  ```text
117
122
  /reload
118
123
  ```
119
124
 
120
- Reloading re-discovers skills and rebuilds the effective skill index. Tau refuses to reload while a session turn is running. If the active persona disappeared, reload selects the first available persona; if no personas remain, reload fails.
125
+ Reload finds skills again and rebuilds the list the agent sees. Tau refuses to reload while a turn is running. If the active persona no longer exists, reload selects the first available persona. If no personas remain, reload fails.
121
126
 
122
- For a new local TUI session, `tau --debug` prints the discovered skills and the effective system prompt without starting the TUI. Combine it with `--persona` to inspect its effective prompt:
127
+ For a new local session, `tau --debug` prints the discovered skills and the system prompt without starting the TUI. Add `--persona` to see the prompt for a specific persona:
123
128
 
124
129
  ```bash
125
130
  tau --debug --persona release-coder
126
131
  ```
127
132
 
128
- Invalid skills are skipped and reported as configuration warnings. Common causes are malformed YAML, non-object frontmatter, a missing required field, an invalid name, a directory/name mismatch, an unreadable file, or an unreadable skills directory. A subdirectory without `SKILL.md` is simply not a skill.
133
+ Invalid skills are skipped and reported as configuration warnings. Common causes are malformed YAML, frontmatter that is not an object, a missing required field, an invalid name, a name that differs from the directory name, or a file or skills directory that cannot be read. A subdirectory without `SKILL.md` is not a skill and produces no warning.
129
134
 
130
- When troubleshooting precedence, check the session's execution-environment working directory first. Discovery is based on that path, not necessarily the filesystem where the TUI is running. Broader configuration diagnostics are covered in [troubleshooting](troubleshooting.md).
135
+ When a skill does not resolve as expected, first check the session's working directory on the execution environment. Discovery starts from that path, which may be on a different machine from the TUI. Broader configuration diagnostics are covered in [troubleshooting](troubleshooting.md).
@@ -18,11 +18,11 @@ Voice listing prints one JSON object per voice, containing `voice_id` and `name`
18
18
 
19
19
  ## Models
20
20
 
21
- `--model` is required; the CLI has no implicit default. Use `eleven_v4_turbo` for lower-latency speech, as shown in the examples. Use `eleven_v4` when maximum quality matters more than latency. Both support narration and multi-speaker dialogue.
21
+ `--model` is required; there is no default. Use `eleven_v4_turbo` for lower-latency speech, as shown in the examples. Use `eleven_v4` when maximum quality matters more than latency. Both support narration and multi-speaker dialogue.
22
22
 
23
23
  ## Input and examples
24
24
 
25
- Supply a UTF-8 JSON document with exactly `voices` and `chunks`. `voices` maps speaker names to voice IDs; `chunks` is an ordered, nonempty array of nonempty arrays of speaker turns. Each turn contains exactly `speaker` and nonblank `text`.
25
+ Give a UTF-8 JSON document with exactly two fields, `voices` and `chunks`. `voices` maps speaker names to voice IDs; `chunks` is an ordered, nonempty array of nonempty arrays of speaker turns. Each turn contains exactly `speaker` and nonblank `text`.
26
26
 
27
27
  ```json
28
28
  {
@@ -68,7 +68,7 @@ Single-speaker narration uses the same shape with one voice. All chunks are vali
68
68
  - Each chunk contains at most 2,000 Unicode code points across its text, including whitespace and delivery tags.
69
69
  - Every speaker must resolve to a voice. At most 10 distinct voices may be used.
70
70
 
71
- Tau packs consecutive whole chunks into requests of at most 2,000 characters, following the [dialogue endpoint's reliability recommendation](https://elevenlabs.io/docs/api-reference/text-to-dialogue/convert). The caller chooses chunk boundaries; text and turn order are preserved.
71
+ Tau combines consecutive whole chunks into requests of at most 2,000 characters, as the [dialogue endpoint documentation](https://elevenlabs.io/docs/api-reference/text-to-dialogue/convert) recommends for reliability. You choose where chunks break; text and turn order are kept.
72
72
 
73
73
  ## Conversational assistant replies
74
74
 
@@ -152,7 +152,7 @@ The output parent directory must exist. Neither the requested WAV nor `<output>.
152
152
 
153
153
  Stdout on success is one JSON object with absolute `output`, `artifacts`, and the number of `batches`. The manifest contains the script text; keep artifacts private for sensitive scripts.
154
154
 
155
- Failures exit nonzero and identify invalid script fields, chunks, or turns before generation, or the failed batch and processing stage afterward. Existing output or artifact paths require a fresh `--output` path; preserve recovery artifacts. Errors after output preparation report the retained directory, which may be incomplete. If final publication fails, copy the completed `assembled.wav` to a fresh path instead of generating again. Requests are not automatically retried because a failed request may already have incurred a charge; another generation request may incur another charge.
155
+ Failures exit nonzero. Before generation, the error names the invalid field, chunk, or turn. After it starts, the error names the failed batch and step. If the output or `.parts` path already exists, choose a new `--output` path, and keep the existing files in case you need them. Errors after the output directory is created give its path; it may be incomplete. If only the final copy fails, copy the finished `assembled.wav` 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.
156
156
 
157
157
  To recover after a later batch fails, inspect the manifest's `completed` flags and chunk mapping. Generate only the unfinished chunks to a fresh output path, then assemble the completed PCM files from both runs in script order. Request stitching does not carry over between invocations.
158
158
 
@@ -178,4 +178,4 @@ Standard rates from the [ElevenLabs API pricing page](https://elevenlabs.io/pric
178
178
 
179
179
  Check current API pricing for plan and voice-specific rates. The manifest's `characterCost` preserves the provider's billing header verbatim.
180
180
 
181
- See [command-line tools](tools.md) for command discovery and execution ownership.
181
+ See [command-line tools](tools.md) for the other tools and where commands run.