@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.
- package/README.md +1 -3
- package/dist/core/agent/agent_runtime.js +6 -4
- package/dist/core/agent/agent_runtime.js.map +1 -1
- package/dist/core/cli.js +2 -2
- package/dist/core/cli.js.map +1 -1
- package/dist/core/code_mode/models.js +61 -22
- package/dist/core/code_mode/models.js.map +1 -1
- package/dist/core/history/cli.js +48 -0
- package/dist/core/history/cli.js.map +1 -1
- package/dist/core/history/history_manager.js +9 -3
- package/dist/core/history/history_manager.js.map +1 -1
- package/dist/core/history/local_history_store.js +9 -2
- package/dist/core/history/local_history_store.js.map +1 -1
- package/dist/core/history/remote_history_client.js +18 -3
- package/dist/core/history/remote_history_client.js.map +1 -1
- package/dist/core/models/openrouter.js +17 -5
- package/dist/core/models/openrouter.js.map +1 -1
- package/dist/core/models/openrouter_decisions.js +16 -1
- package/dist/core/models/openrouter_decisions.js.map +1 -1
- package/dist/core/static/tau_docs/client-tools.md +53 -53
- package/dist/core/static/tau_docs/config-reference.md +46 -43
- package/dist/core/static/tau_docs/configuration.md +40 -36
- package/dist/core/static/tau_docs/credentials.md +32 -31
- package/dist/core/static/tau_docs/getting-started.md +28 -28
- package/dist/core/static/tau_docs/history.md +114 -79
- package/dist/core/static/tau_docs/image-generation.md +20 -18
- package/dist/core/static/tau_docs/index.md +30 -31
- package/dist/core/static/tau_docs/manifest.json +1 -0
- package/dist/core/static/tau_docs/models.md +17 -17
- package/dist/core/static/tau_docs/node-sdk.md +69 -69
- package/dist/core/static/tau_docs/nook.md +75 -69
- package/dist/core/static/tau_docs/openrouter.md +28 -13
- package/dist/core/static/tau_docs/ownership-and-scope.md +21 -23
- package/dist/core/static/tau_docs/pdf-unpacking.md +6 -6
- package/dist/core/static/tau_docs/personas.md +29 -27
- package/dist/core/static/tau_docs/prompts-and-project-context.md +41 -39
- package/dist/core/static/tau_docs/remote-sessions.md +38 -38
- package/dist/core/static/tau_docs/sdk-diff-review.md +16 -12
- package/dist/core/static/tau_docs/security.md +72 -72
- package/dist/core/static/tau_docs/session-protocol-methods.md +45 -45
- package/dist/core/static/tau_docs/session-protocol.md +43 -43
- package/dist/core/static/tau_docs/sessions.md +99 -88
- package/dist/core/static/tau_docs/skills.md +25 -20
- package/dist/core/static/tau_docs/speech-generation.md +5 -5
- package/dist/core/static/tau_docs/subagents.md +42 -44
- package/dist/core/static/tau_docs/telegram-projects.md +142 -0
- package/dist/core/static/tau_docs/telegram.md +64 -181
- package/dist/core/static/tau_docs/tools.md +72 -80
- package/dist/core/static/tau_docs/troubleshooting.md +94 -149
- package/dist/core/static/tau_docs/tui.md +124 -80
- package/dist/core/tool/image_generate.js +5 -17
- package/dist/core/tool/image_generate.js.map +1 -1
- package/dist/core/tool/openrouter.js +21 -2
- package/dist/core/tool/openrouter.js.map +1 -1
- package/dist/core/utils/gemini_transcription.js +43 -13
- package/dist/core/utils/gemini_transcription.js.map +1 -1
- package/dist/core/utils/model_stream.js +17 -1
- package/dist/core/utils/model_stream.js.map +1 -1
- package/dist/core/version.js +2 -2
- package/dist/diff_tool/app/dist/assets/{angular-html-D20byCHL.js → angular-html-x29PkEoY.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{angular-ts-CvVQslm2.js → angular-ts-CsWCqoCf.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{apl-DNIxlYWe.js → apl-CEvdc7jl.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{astro-DDOw4EUG.js → astro-Cgi6YxH2.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{blade-DlhB-SLW.js → blade-B0pr7Zx6.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{c-C1f4vhDm.js → c-DDVLgtVy.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{chapel-Ctt8xOX1.js → chapel-Bk9M7Jej.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cobol-BXw71PAA.js → cobol-DyEvnPuC.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{coffee-CRh_5Nmr.js → coffee-Di2-m3Jq.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cpp-IlI-zWOZ.js → cpp-CWpAaUgO.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{crystal-CXeL28i7.js → crystal-CUker9Zt.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{css-BfST9hFI.js → css-D4XpBIiJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{edge--Q22k_ty.js → edge-CVxhhF7L.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elixir-CIfC_rQx.js → elixir-B_FS9APl.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elm-OkZ29XRO.js → elm-1KyefTkH.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{erb-B8ZXgEqv.js → erb-CCgO9dRW.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{git-rebase-CxkO_WGd.js → git-rebase-D0VYo_oY.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-js-BVadyIrr.js → glimmer-js-Ce07ngjZ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-ts-D5J3Qb7n.js → glimmer-ts-BmOM4djO.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glsl-B6iy73-Y.js → glsl-D-jkLYJ8.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{graphql-Dc3rUXf5.js → graphql-DZOwJE5e.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hack-q8Utf8Jp.js → hack-Cgvn19h8.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{haml-mjMIlj_2.js → haml-JTmDSYQl.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{handlebars-CA-BL8Ks.js → handlebars-CChh7Dy5.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-BmPxhYCX.js → html-BKgzx_cb.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-derivative-CvknIjuB.js → html-derivative-CdFl0BmX.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{http-DNxLDRIi.js → http-DZeL7KvH.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hurl-kbd3Eq2V.js → hurl-CqKevOlQ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/index-BXyr8GCM.js +341 -0
- package/dist/diff_tool/app/dist/assets/{java-BuZshgf1.js → java-Sq3MCkId.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{javascript-DfL2oeFU.js → javascript-CHZB4Nse.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jinja-Bu0KQihU.js → jinja-C4ucJVla.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jison-Bqn7Mf3Q.js → jison-D3mprebA.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{json-BuX5LKaB.js → json-DgPfCYJ1.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jsx-DdVJ-ZBp.js → jsx-BG-Tx0cw.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{julia-CQeijOoQ.js → julia-B1GnFeUC.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{just-vzAktFGR.js → just-_MZzo0MF.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{latex-Dm60cg0k.js → latex-DI0kqjQy.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{liquid-vxKzm2P8.js → liquid-BtMAPeHl.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{lua-DIoqi4dd.js → lua-CFxaP0To.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{marko-BTHgFKby.js → marko-BIJocuFI.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{mdc-CEfz8gZ9.js → mdc-BAgrdjTH.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nginx-DNlFDEfJ.js → nginx-DE-3CsYn.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nim-DnvT_0lZ.js → nim-DOxeXLhb.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{org-BbD-ElVf.js → org-KTfP0tHA.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{perl-DTsbnAmK.js → perl-BH-NxpgK.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{php-CwEsJe-W.js → php-vuiVEXZK.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{pug-BOttMVH-.js → pug-VlIlTMUy.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{qml-C8KkSItN.js → qml-k6wTtGG-.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{r-K4ksJj_R.js → r-Ccjcb2zh.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{razor-yuWRrrG6.js → razor-BNhYgSCv.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{regexp-CV-jhnUz.js → regexp-C4LFejPu.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{rst-CLA3Attc.js → rst-DXLxI-UJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ruby-DiHR2-DX.js → ruby-BPuL4jDV.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sas-DxIjbYJ5.js → sas-B3Yz8snb.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{scss-CShwEaV4.js → scss-B2AJ5vpk.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellscript-CeezOnrF.js → shellscript-zyDexxnC.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellsession-CjSS2r7j.js → shellsession-C8b8xluk.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{soy-CI_v23nJ.js → soy-DKWe_XML.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sql-D9GaB00A.js → sql-uEbz-Epf.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{stata-hK92TPE_.js → stata-DieRPmHY.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{surrealql-UO8LtPJG.js → surrealql-Dbk3Sp1P.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{svelte-kIlaw_oh.js → svelte-CjPbRmkM.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{templ-DFRz1JP6.js → templ-Do_f5vc4.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tex-CfxIXk_z.js → tex-UjLP4qUm.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ts-tags-BtUHl0ff.js → ts-tags-5L2FutA6.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tsx-Cd4SAe2C.js → tsx-B1pNtpUr.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{twig-CWk4q5Y3.js → twig-O41Vg_IM.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typescript-BqxGJiP0.js → typescript-Bj9uwnnJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typst-D9nAun2p.js → typst-DsibO7oD.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-D6HYhg6_.js → vue-DPhaEurv.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-html-1VRlaENS.js → vue-html-DDV9NSy1.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-vine-BaH0We9y.js → vue-vine-Dh4jOifx.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xml-C4RWnUuj.js → xml-DtIulkQk.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xsl-D1iD38ga.js → xsl-DoWtb58Z.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{yaml-yAb4W0G-.js → yaml-CZC-l1Dg.js} +1 -1
- package/dist/diff_tool/app/dist/index.html +1 -1
- package/dist/history/worker/index.js +87 -83
- package/dist/history/worker/index.js.map +1 -1
- package/dist/main.js +6 -7
- package/dist/main.js.map +1 -1
- package/dist/tui/session_chat_controller.js +14 -3
- package/dist/tui/session_chat_controller.js.map +1 -1
- package/dist/tui/ui/footer.js +2 -4
- package/dist/tui/ui/footer.js.map +1 -1
- package/package.json +9 -9
- package/dist/diff_tool/app/dist/assets/index-D8ZI_2RC.js +0 -340
- package/dist/nook/README.md +0 -123
|
@@ -1,171 +1,182 @@
|
|
|
1
1
|
# Sessions
|
|
2
2
|
|
|
3
|
-
A Tau session
|
|
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
|
|
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
|
-
|
|
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
|
|
12
|
-
- `repository
|
|
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
|
-
|
|
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
|
|
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
|
|
20
|
+
Three parts can run on one machine but stay separate:
|
|
21
21
|
|
|
22
|
-
- The TUI or SDK client
|
|
23
|
-
- The session host
|
|
24
|
-
- The execution environment
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
37
|
-
- Steering joins the
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
51
|
+
Retry is unavailable when there is no earlier user turn.
|
|
52
52
|
|
|
53
|
-
Detaching is not
|
|
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
|
|
55
|
+
## Change persona and reasoning
|
|
56
56
|
|
|
57
|
-
The
|
|
57
|
+
The persona and reasoning level are saved session settings.
|
|
58
58
|
|
|
59
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
69
|
+
Recovery keeps:
|
|
70
70
|
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
- execution
|
|
75
|
-
- compaction and rewind
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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`
|
|
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
|
|
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
|
|
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
|
|
152
|
+
## Session state and searchable history
|
|
142
153
|
|
|
143
|
-
Tau keeps two
|
|
154
|
+
Tau keeps two separate records for different purposes:
|
|
144
155
|
|
|
145
|
-
- The session
|
|
146
|
-
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
190
|
+
## What survives each event
|
|
180
191
|
|
|
181
|
-
| Event |
|
|
192
|
+
| Event | Saved session | Pending messages | Running turns and subagents | Client state |
|
|
182
193
|
| --- | --- | --- | --- | --- |
|
|
183
|
-
| Another client detaches from a
|
|
184
|
-
| Local TUI exits |
|
|
185
|
-
| WebSocket host restarts | Recovered from storage | Lost |
|
|
186
|
-
| TUI restarts while host
|
|
187
|
-
| `/new` | Old session
|
|
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
|
|
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
|
-
##
|
|
202
|
+
## Check a recovered session
|
|
192
203
|
|
|
193
|
-
Use normal Tau operations
|
|
204
|
+
Use normal Tau operations, not the session files.
|
|
194
205
|
|
|
195
|
-
1. Wait for
|
|
196
|
-
2. Note the session
|
|
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
|
|
199
|
-
5.
|
|
200
|
-
6.
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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,
|
|
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
|
|
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;
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
181
|
+
See [command-line tools](tools.md) for the other tools and where commands run.
|