@markusylisiurunen/tau 0.3.81 → 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/commands/registry.js +0 -22
- package/dist/core/commands/registry.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/runtime/chat_runtime.js +2 -13
- package/dist/core/runtime/chat_runtime.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 -72
- 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 +46 -91
- package/dist/core/static/tau_docs/session-protocol.md +54 -54
- package/dist/core/static/tau_docs/sessions.md +97 -107
- 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 +65 -182
- package/dist/core/static/tau_docs/tools.md +72 -91
- package/dist/core/static/tau_docs/troubleshooting.md +94 -149
- package/dist/core/static/tau_docs/tui.md +124 -81
- package/dist/core/telegram/adapter.js +1 -6
- package/dist/core/telegram/adapter.js.map +1 -1
- 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/tools/catalog.js +0 -11
- package/dist/core/tools/catalog.js.map +1 -1
- package/dist/core/tools/tool_names.js +0 -6
- package/dist/core/tools/tool_names.js.map +1 -1
- package/dist/core/utils/gemini_transcription.js +103 -28
- 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/utils/user_metadata.js +0 -14
- package/dist/core/utils/user_metadata.js.map +1 -1
- package/dist/core/version.js +2 -2
- package/dist/diff_tool/app/dist/assets/{angular-html-BbLgbIhq.js → angular-html-x29PkEoY.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{angular-ts-DXk17TRM.js → angular-ts-CsWCqoCf.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{apl-BsvksCXR.js → apl-CEvdc7jl.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{astro-DH775E4V.js → astro-Cgi6YxH2.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{blade-Ck99Rm59.js → blade-B0pr7Zx6.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{c-DJpHqu5J.js → c-DDVLgtVy.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{chapel-Owff0Csy.js → chapel-Bk9M7Jej.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cobol-Cv2gZuhO.js → cobol-DyEvnPuC.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{coffee-Bji0YCf_.js → coffee-Di2-m3Jq.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cpp-DTjA_yFF.js → cpp-CWpAaUgO.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{crystal-Dd00NOeb.js → crystal-CUker9Zt.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{css-D44TN1V6.js → css-D4XpBIiJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{edge-CVmGSi2m.js → edge-CVxhhF7L.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elixir-B8Mq7no2.js → elixir-B_FS9APl.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elm-CXS0I3Z2.js → elm-1KyefTkH.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{erb-B9oDKaUo.js → erb-CCgO9dRW.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{git-rebase-DT-YFebH.js → git-rebase-D0VYo_oY.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-js-s0DXlNjq.js → glimmer-js-Ce07ngjZ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-ts-QgEB5S2z.js → glimmer-ts-BmOM4djO.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glsl-NA0icwbY.js → glsl-D-jkLYJ8.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{graphql-0_dOlfV0.js → graphql-DZOwJE5e.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hack-D-mr7l1l.js → hack-Cgvn19h8.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{haml-B0-oQmz7.js → haml-JTmDSYQl.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{handlebars-Yq9bXpWN.js → handlebars-CChh7Dy5.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-B8bMmdRK.js → html-BKgzx_cb.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-derivative-BpxSlQb_.js → html-derivative-CdFl0BmX.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{http-hS_53mxt.js → http-DZeL7KvH.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hurl-B2ST1kwl.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-D4mj0lZJ.js → java-Sq3MCkId.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{javascript-wC7rrKiV.js → javascript-CHZB4Nse.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jinja-DbQ3o87F.js → jinja-C4ucJVla.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jison-CrE9FdvP.js → jison-D3mprebA.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{json-xjicDyWN.js → json-DgPfCYJ1.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jsx-m28lXojQ.js → jsx-BG-Tx0cw.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{julia-19xkOmop.js → julia-B1GnFeUC.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{just-Cf7OorTr.js → just-_MZzo0MF.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{latex-DDb7GQOy.js → latex-DI0kqjQy.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{liquid-DHOuQ0rf.js → liquid-BtMAPeHl.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{lua-BGyIvonw.js → lua-CFxaP0To.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{marko-DB5OqI1C.js → marko-BIJocuFI.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{mdc-DTyNMupO.js → mdc-BAgrdjTH.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nginx-DfF0fMYD.js → nginx-DE-3CsYn.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nim-BbwsXuZD.js → nim-DOxeXLhb.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{org-BkOBBl1f.js → org-KTfP0tHA.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{perl-BTXTOl4K.js → perl-BH-NxpgK.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{php-DIMVQWiA.js → php-vuiVEXZK.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{pug-B_nrb4dJ.js → pug-VlIlTMUy.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{qml-1PXi8G8Z.js → qml-k6wTtGG-.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{r-CJrAkc2Z.js → r-Ccjcb2zh.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{razor-DgPUftNd.js → razor-BNhYgSCv.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{regexp-C2hS8XvL.js → regexp-C4LFejPu.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{rst-CDouhKnc.js → rst-DXLxI-UJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ruby-CAjKW1uO.js → ruby-BPuL4jDV.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sas-qAHkHLc1.js → sas-B3Yz8snb.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{scss-Bfx2Ydid.js → scss-B2AJ5vpk.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellscript-Bu76R8y2.js → shellscript-zyDexxnC.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellsession-BU8BL0oL.js → shellsession-C8b8xluk.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{soy-FRl8ozP-.js → soy-DKWe_XML.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sql-BacQgsEs.js → sql-uEbz-Epf.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{stata-B9kkG-ET.js → stata-DieRPmHY.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{surrealql-qvETr7iY.js → surrealql-Dbk3Sp1P.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{svelte-B0z1MgHc.js → svelte-CjPbRmkM.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{templ-DTnPshKb.js → templ-Do_f5vc4.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tex-Cosab9_H.js → tex-UjLP4qUm.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ts-tags-DNYvLFUH.js → ts-tags-5L2FutA6.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tsx-Dstq6j1a.js → tsx-B1pNtpUr.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{twig-BzqZdwaX.js → twig-O41Vg_IM.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typescript-YOQ_oE25.js → typescript-Bj9uwnnJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typst-DTffwfpc.js → typst-DsibO7oD.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-D4OMj_C5.js → vue-DPhaEurv.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-html-kT4WrHGK.js → vue-html-DDV9NSy1.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-vine-CxeapeMO.js → vue-vine-Dh4jOifx.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xml-DWVpuurg.js → xml-DtIulkQk.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xsl-C0ciup5a.js → xsl-DoWtb58Z.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{yaml-98Fvyfpc.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/host/local_session_host.js +24 -318
- package/dist/host/local_session_host.js.map +1 -1
- package/dist/host/session_host.js.map +1 -1
- package/dist/host/session_protocol_handler.js +0 -98
- package/dist/host/session_protocol_handler.js.map +1 -1
- package/dist/main.js +6 -7
- package/dist/main.js.map +1 -1
- package/dist/protocol/index.d.ts +1 -1
- package/dist/protocol/index.js.map +1 -1
- package/dist/protocol/session_protocol.d.ts +3 -28
- package/dist/protocol/session_protocol.js +1 -56
- package/dist/protocol/session_protocol.js.map +1 -1
- package/dist/sdk/index.d.ts +1 -1
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/session.js +0 -20
- package/dist/sdk/session.js.map +1 -1
- package/dist/sdk/types.d.ts +1 -7
- package/dist/store/session_snapshot_migrations.js +72 -1
- package/dist/store/session_snapshot_migrations.js.map +1 -1
- package/dist/tui/session_chat_controller.js +14 -30
- package/dist/tui/session_chat_controller.js.map +1 -1
- package/dist/tui/ui/footer.js +4 -9
- package/dist/tui/ui/footer.js.map +1 -1
- package/package.json +9 -9
- package/dist/core/session/goal.js +0 -54
- package/dist/core/session/goal.js.map +0 -1
- package/dist/core/tools/goal.js +0 -167
- package/dist/core/tools/goal.js.map +0 -1
- package/dist/diff_tool/app/dist/assets/index-CBT_sNIz.js +0 -340
- package/dist/nook/README.md +0 -123
|
@@ -1,73 +1,75 @@
|
|
|
1
1
|
# Terminal interface
|
|
2
2
|
|
|
3
|
-
Tau
|
|
3
|
+
Tau's terminal interface works both for local sessions and for sessions on a remote host. The editor, commands, and review workflow are the same in both. The session host holds the conversation and runs the model, while the TUI handles the terminal and local features such as themes, the clipboard, speech, and the diff tool.
|
|
4
4
|
|
|
5
5
|
## Start the TUI
|
|
6
6
|
|
|
7
|
-
Run `tau` in the project directory
|
|
7
|
+
Run `tau` in the project directory to start a new local session:
|
|
8
8
|
|
|
9
9
|
```sh
|
|
10
10
|
cd ~/Code/tau
|
|
11
11
|
tau
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
The agent works in that directory. You can choose a persona and reasoning level at startup:
|
|
15
15
|
|
|
16
16
|
```sh
|
|
17
17
|
tau --persona gpt-6.1-sol-coder:high
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
`-p` is the short form. `--no-agent-context-files`
|
|
20
|
+
`-p` is the short form. `--no-agent-context-files` turns off `AGENTS.md` loading and the scan for nested `AGENTS.md` files. `--no-client-tools` stops the TUI from offering its built-in and configured [client tools](client-tools.md).
|
|
21
21
|
|
|
22
|
-
Piped stdin becomes the first message
|
|
22
|
+
Piped stdin becomes the first message of a local session:
|
|
23
23
|
|
|
24
24
|
```sh
|
|
25
25
|
printf 'summarize the current changes' | tau
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
Use `tau attach` for a session hosted elsewhere. The terminal, themes, clipboard, speech commands, built-in diff review tool, and command
|
|
28
|
+
Use `tau attach` for a session hosted elsewhere. The terminal, themes, clipboard, speech commands, built-in diff review tool, and command client tools stay on the attaching machine. Bash tools, file access, project configuration, and model calls use the session's execution environment. See [remote sessions](remote-sessions.md) for connecting and creating sessions.
|
|
29
29
|
|
|
30
|
-
The startup summary lists discovered skills, project context files, configured client tools, and enabled MCP
|
|
30
|
+
The startup summary lists discovered skills, project context files, configured client tools, and enabled MCP servers. MCP servers are shown as configured, not connected, because connections open on first use. In attached sessions, the MCP list comes from the host. Empty sections are left out.
|
|
31
31
|
|
|
32
32
|
## Work in the editor
|
|
33
33
|
|
|
34
|
-
Enter submits
|
|
34
|
+
Enter submits. Shift+Enter or Ctrl+J inserts a newline. Up and Down move within the editor, and recall earlier submissions when the editor is empty.
|
|
35
35
|
|
|
36
|
-
Tau recognizes these
|
|
36
|
+
Tau recognizes these mentions and completes them with Tab:
|
|
37
37
|
|
|
38
38
|
- `@src/main.ts` mentions a file in the execution environment.
|
|
39
39
|
- `@@skill:code-review` explicitly activates an available skill.
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
Other forms, such as `@file:`, `@skill:`, or `@agent:`, are not mentions. File paths and skill names come from the session, not from the attaching machine's filesystem.
|
|
42
42
|
|
|
43
|
-
Typing `/` at the start of a line opens command completion. Slash commands
|
|
43
|
+
Typing `/` at the start of a line opens command completion. Slash commands work only in single-line submissions. Multiline input that starts with `/`, and unknown slash commands, are sent to the agent as ordinary messages.
|
|
44
44
|
|
|
45
45
|
## Submit, queue, and steer
|
|
46
46
|
|
|
47
|
-
When Tau is idle, Enter and Ctrl+Enter both start a normal turn. While a turn is
|
|
47
|
+
When Tau is idle, Enter and Ctrl+Enter both start a normal turn. While a turn is running:
|
|
48
48
|
|
|
49
|
-
- Ctrl+Enter queues the text as a new turn
|
|
50
|
-
- Enter steers the
|
|
51
|
-
- Alt+Up cancels all
|
|
49
|
+
- Ctrl+Enter queues the text as a new turn that runs when the session becomes idle.
|
|
50
|
+
- Enter steers the running turn. Tau applies steering at the next safe point, never in the middle of a model response or tool call.
|
|
51
|
+
- Alt+Up cancels all queued messages and steering not yet applied, and puts their text back in the editor, separated by `---`.
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
Some messages carry hidden guidance, such as a note that text was transcribed from speech. Hidden guidance stays hidden in the pending list and the editor. When messages are restored, their guidance is kept, in order, after any guidance the draft already has. On submission, all guidance goes at the start of the combined message. Editing a non-empty draft keeps its guidance, and clearing the draft removes it.
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
Pending input is shared by all clients attached to the session while the host keeps running. It is not saved and is lost when the host restarts. A queued turn uses the persona, reasoning, tools, and model settings current when it actually starts. Steering belongs to the running turn and uses the settings that turn started with.
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
Escape interrupts work. If local work is in the foreground, such as diff review, voice input, or speech playback, Escape stops that first. Otherwise it asks the host to interrupt the session, which also cancels a running manual compaction. Once compaction has replaced the context, a late interruption does not undo it or turn the saved result into a failure. Escape does not stop subagents; select one with Alt+Down and press Ctrl+G. Press Escape twice to clear the editor.
|
|
58
|
+
|
|
59
|
+
Press Enter twice on an empty editor to retry from the current history. Retry does not rewind or repeat the last user message.
|
|
58
60
|
|
|
59
61
|
## Choose persona, reasoning, and thought visibility
|
|
60
62
|
|
|
61
|
-
The current persona and reasoning level
|
|
63
|
+
The editor header shows the current persona and reasoning level.
|
|
62
64
|
|
|
63
|
-
- `/persona:<id>` selects a persona by
|
|
65
|
+
- `/persona:<id>` selects a persona by ID.
|
|
64
66
|
- Ctrl+P cycles through available personas.
|
|
65
|
-
- Shift+Tab cycles through the
|
|
66
|
-
- Ctrl+T shows or hides
|
|
67
|
+
- Shift+Tab cycles through the persona's allowed reasoning levels.
|
|
68
|
+
- Ctrl+T shows or hides the assistant's thinking in this TUI.
|
|
67
69
|
|
|
68
|
-
Persona changes require
|
|
70
|
+
Persona changes require an idle session, because they can change the model, instructions, skills, and tools. Reasoning can change while a turn is running, but that turn and its steering keep their settings. The new level applies from the next turn.
|
|
69
71
|
|
|
70
|
-
|
|
72
|
+
Ctrl+T affects only what this TUI displays. It does not turn on reasoning, change its effort, or change the session history.
|
|
71
73
|
|
|
72
74
|
For example:
|
|
73
75
|
|
|
@@ -75,35 +77,34 @@ For example:
|
|
|
75
77
|
/persona:opus-5.5-coder
|
|
76
78
|
```
|
|
77
79
|
|
|
78
|
-
Then use Shift+Tab to
|
|
80
|
+
Then use Shift+Tab to choose a reasoning level. A newly added persona appears only after `/reload`.
|
|
79
81
|
|
|
80
82
|
## Slash commands
|
|
81
83
|
|
|
82
|
-
`/help` prints the commands, keybindings, loaded skills, and context
|
|
84
|
+
`/help` prints the commands, keybindings, loaded skills, and context file paths for the current session.
|
|
83
85
|
|
|
84
86
|
| Command | Behavior |
|
|
85
87
|
| --- | --- |
|
|
86
88
|
| `/help` | Show commands, keys, skills, and context paths. |
|
|
87
|
-
| `/new` | Create a
|
|
88
|
-
| `/exit` | Close this TUI.
|
|
89
|
-
| `/rewind` | Pick an earlier user message, remove it and everything after it, and
|
|
90
|
-
| `/diff [git diff args...]` | Open the
|
|
91
|
-
| `/
|
|
92
|
-
| `/compact-
|
|
93
|
-
| `/
|
|
94
|
-
| `/
|
|
95
|
-
| `/
|
|
96
|
-
| `/speak` |
|
|
97
|
-
| `/auto-speak [on | off]` | Toggle automatic reading of final responses, or explicitly enable or disable it. |
|
|
89
|
+
| `/new` | Create a new session in the same execution environment, keeping the current persona, reasoning, and `repository` attribute. |
|
|
90
|
+
| `/exit` | Close this TUI. On a long-running remote host, this detaches; the session is not deleted. |
|
|
91
|
+
| `/rewind` | Pick an earlier user message, remove it and everything after it, and put its text back in the editor. |
|
|
92
|
+
| `/diff [git diff args...]` | Open the local diff review tool on a snapshot taken from the execution environment. |
|
|
93
|
+
| `/compact-all [guidance]` | Replace the model's context with a generated summary. |
|
|
94
|
+
| `/compact-keep-last [guidance]` | Same, and include the last assistant response in the summary when there is one. |
|
|
95
|
+
| `/reload` | Reload session configuration and content from the execution environment. |
|
|
96
|
+
| `/listen [retry/discard]` | Record speech, or retry or discard a failed recording. macOS only. |
|
|
97
|
+
| `/speak` | Read the last assistant response aloud. macOS only. |
|
|
98
|
+
| `/auto-speak [on | off]` | Toggle automatic reading of final responses, or turn it on or off. |
|
|
98
99
|
| `/copy-text` | Copy the last assistant response as plain text. |
|
|
99
|
-
| `/copy-code` | Copy code blocks from the last assistant response. |
|
|
100
|
+
| `/copy-code` | Copy the code blocks from the last assistant response. |
|
|
100
101
|
| `/persona:<id>` | Switch persona while idle. |
|
|
101
|
-
| `/prompt:<id>` |
|
|
102
|
-
| `/theme:<id>` | Switch this TUI
|
|
102
|
+
| `/prompt:<id>` | Load a prompt from the execution environment into the editor without sending it. |
|
|
103
|
+
| `/theme:<id>` | Switch this TUI's theme until it exits. |
|
|
103
104
|
|
|
104
|
-
|
|
105
|
+
Run commands that change the context, such as persona changes, compaction, rewind, and reload, while idle. `/auto-speak`, `/listen`, `/prompt:<id>`, and `/exit` do little during a running turn. Other commands wait until Tau is idle.
|
|
105
106
|
|
|
106
|
-
|
|
107
|
+
[Sessions](sessions.md) describes compaction, rewind, recovery, and retry. [Prompts and project context](prompts-and-project-context.md) covers prompt files.
|
|
107
108
|
|
|
108
109
|
## Keyboard shortcuts
|
|
109
110
|
|
|
@@ -111,80 +112,103 @@ Compaction, rewind, goals, recovery, and retry are described in [sessions](sessi
|
|
|
111
112
|
| --- | --- |
|
|
112
113
|
| Shift+Tab | Cycle reasoning effort. |
|
|
113
114
|
| Ctrl+P | Cycle persona while idle. |
|
|
114
|
-
| Ctrl+T |
|
|
115
|
-
| Ctrl+S | Copy the expanded editor contents to the
|
|
115
|
+
| Ctrl+T | Show or hide thinking in this TUI. |
|
|
116
|
+
| Ctrl+S | Copy the expanded editor contents to the clipboard, then clear the editor. |
|
|
116
117
|
| Ctrl+Y | Start or stop voice recording without submitting. |
|
|
117
|
-
| Enter | Steer
|
|
118
|
-
| Ctrl+Enter | Queue another turn, or submit
|
|
119
|
-
| Alt+Up | Cancel pending input and
|
|
120
|
-
| Alt+Down |
|
|
121
|
-
| Ctrl+G | Interrupt the selected
|
|
122
|
-
| Enter twice | Retry when the editor is empty and the session is idle. |
|
|
123
|
-
| Escape | Interrupt
|
|
124
|
-
| Escape twice | Clear the
|
|
118
|
+
| Enter | Steer a running turn, or submit while idle. |
|
|
119
|
+
| Ctrl+Enter | Queue another turn, or submit while idle. |
|
|
120
|
+
| Alt+Up | Cancel pending input and put it back in the editor. |
|
|
121
|
+
| Alt+Down | Select the next running subagent. |
|
|
122
|
+
| Ctrl+G | Interrupt the selected subagent. |
|
|
123
|
+
| Enter twice | Retry, when the editor is empty and the session is idle. |
|
|
124
|
+
| Escape | Interrupt local work or the session. |
|
|
125
|
+
| Escape twice | Clear the editor. |
|
|
125
126
|
| Ctrl+C twice | Exit the TUI. |
|
|
126
127
|
|
|
127
|
-
Ctrl+C
|
|
128
|
+
A single Ctrl+C asks for confirmation; it does not interrupt the assistant. Use Escape to interrupt.
|
|
128
129
|
|
|
129
|
-
## Run
|
|
130
|
+
## Run Bash commands directly
|
|
130
131
|
|
|
131
|
-
A leading `!` runs a fresh non-interactive login Bash in the
|
|
132
|
+
A leading `!` runs a command in a fresh non-interactive login Bash in the execution environment, without going through the model:
|
|
132
133
|
|
|
133
134
|
```text
|
|
134
135
|
!git status --short
|
|
135
136
|
```
|
|
136
137
|
|
|
137
|
-
The command and
|
|
138
|
+
The command and its output are added to the session, so the agent can use them later. A double `!!` runs the command without adding it to the model's context:
|
|
138
139
|
|
|
139
140
|
```text
|
|
140
141
|
!!git diff --stat
|
|
141
142
|
```
|
|
142
143
|
|
|
143
|
-
`!!`
|
|
144
|
+
Use `!!` for checks that should not use up context. Its card still appears in the current TUI, but the command and output are not saved in the conversation.
|
|
144
145
|
|
|
145
|
-
Direct commands require
|
|
146
|
+
Direct commands require an idle session. In an attached TUI, `!pwd` shows the execution environment's directory, not the attaching machine's. Command [client tools](client-tools.md) are different: they run on the client machine and can ask the session to run commands in the execution environment.
|
|
146
147
|
|
|
147
148
|
## Use themes
|
|
148
149
|
|
|
149
|
-
Themes belong to the TUI
|
|
150
|
+
Themes belong to the TUI and are never saved in the session. Tau's built-in themes adapt to the terminal's light or dark appearance.
|
|
150
151
|
|
|
151
|
-
Set the startup theme with `defaultTheme` in the
|
|
152
|
+
Set the startup theme with `defaultTheme` in the client's [configuration](configuration.md), or switch for the current run:
|
|
152
153
|
|
|
153
154
|
```text
|
|
154
155
|
/theme:gold
|
|
155
156
|
```
|
|
156
157
|
|
|
157
|
-
Theme
|
|
158
|
+
Theme IDs are exact and case-sensitive. `/theme` does not save the choice. Restart the TUI to apply a new `defaultTheme`. A remote host's theme setting does not affect attached clients.
|
|
158
159
|
|
|
159
160
|
## Review a diff
|
|
160
161
|
|
|
161
|
-
`/diff`
|
|
162
|
+
`/diff` takes a Git snapshot in the execution environment, then opens the built-in browser review tool on the TUI machine. Arguments are passed to `git diff`, for example:
|
|
162
163
|
|
|
163
164
|
```text
|
|
164
165
|
/diff --staged
|
|
165
166
|
```
|
|
166
167
|
|
|
167
|
-
|
|
168
|
+
`tau diff-tool` is the tool's own command, and `tau diff-tool --help` shows its help, but normal reviews start from `/diff`, which sets up its environment.
|
|
169
|
+
|
|
170
|
+
A snapshot's patch can be at most 16 MiB. Narrow the Git arguments if a larger diff is rejected. A plain working-tree snapshot includes non-binary untracked files of up to 4 MiB each, within that total.
|
|
168
171
|
|
|
169
|
-
The
|
|
172
|
+
The tool opens in **Guide** mode and starts preparing an orientation, focused topics, and likely reviewer questions as soon as the review context is ready. You can comment on the guide, ask for another topic or question, or switch to **Diff** mode for review threads on files and lines.
|
|
170
173
|
|
|
171
|
-
|
|
174
|
+
Guide comments and unresolved diff threads go into the returned Markdown, which stands on its own: it names the reviewed scope, gives change-level comments their context, and explains who took part in each discussion and in what role. **Submit** first opens a preview of the exact text to be returned, where you can exclude feedback and copy the full review before submitting. **Approve** returns right away when no feedback remains. If feedback appears while approval is being checked, the preview opens instead.
|
|
172
175
|
|
|
173
|
-
The
|
|
176
|
+
The session host provides temporary review agents, and the local tool runs the browser interface. The returned review is added to the session as a user message, but Tau does not start an assistant turn when the tool closes. Send a follow-up message when the review should lead to more work.
|
|
177
|
+
|
|
178
|
+
The TUI also offers diff review to the agent as a client tool, unless `--no-client-tools` is set. `/diff` works either way. See [client tools](client-tools.md) for what this means with several clients.
|
|
174
179
|
|
|
175
180
|
## Use speech
|
|
176
181
|
|
|
177
|
-
|
|
182
|
+
### Dictation
|
|
183
|
+
|
|
184
|
+
`/listen` and Ctrl+Y work only on macOS. Recording uses the local `ffmpeg` with AVFoundation audio input. It stops when you press Ctrl+Y again or after 9 minutes, which leaves time to finish within Gemini's 10-minute live session. Startup fails if the microphone gives no audio within 15 seconds.
|
|
185
|
+
|
|
186
|
+
- Enter or Ctrl+Enter while recording stops capture, finishes transcription, and submits the editor text. While a turn is running, Enter steers and Ctrl+Enter queues, as usual.
|
|
187
|
+
- Ctrl+Y, or reaching the time limit, finishes transcription and inserts the transcript at the cursor without submitting it.
|
|
188
|
+
|
|
189
|
+
The shortcut can be changed with [`speech.recordingShortcut`](config-reference.md#speech), including single-press or double-tap printable keys such as `§`. The editor hint shows the configured gesture. Starting a recording stops speech playback.
|
|
190
|
+
|
|
191
|
+
While you speak, Gemini shows a live preview in muted italics at the cursor. During pauses, Gemini finalizes segments of speech while recording continues. Tau keeps finalized segments and replaces only the current preview. After recording stops:
|
|
192
|
+
|
|
193
|
+
- Tau tells Gemini the audio has ended. It finishes right away if a finalized segment ends exactly at the end of the audio and generation is complete.
|
|
194
|
+
- Otherwise it keeps receiving results until two seconds pass with no updates. If new speech is detected after stopping, Tau signals the end of audio again to flush it.
|
|
195
|
+
- The final transcript comes from the live stream. Normal recordings are not uploaded again for a second transcription.
|
|
196
|
+
- Unfinished speech must be finalized before Tau accepts the result. Finalization has a 30-second deadline, and Escape cancels the wait.
|
|
178
197
|
|
|
179
|
-
The
|
|
198
|
+
The final transcript replaces the preview in normal text, without duplication. An empty transcript inserts nothing. Tau does not detect silence locally, and the end of one speech segment does not count as the end of the recording.
|
|
180
199
|
|
|
181
|
-
|
|
200
|
+
A submitted draft that contains dictation carries hidden guidance saying that some or all of the message may have been transcribed from speech and may contain errors. The guidance survives edits and is removed when the draft is emptied.
|
|
182
201
|
|
|
183
|
-
|
|
202
|
+
The editor is locked from the start of recording until finalization. Escape cancels voice input at any stage: startup, recording, microphone shutdown, transcription, or retry. Cancelling removes the preview at once, restores the original draft, and unlocks the editor without inserting or submitting anything. The cancelled recording is deleted once pending file work finishes. A failure also restores the original draft. A recording or retry cannot start while another editor update is pending.
|
|
184
203
|
|
|
185
|
-
|
|
204
|
+
For live transcription, GPT-6 Luna, with reasoning disabled, extracts spelling hints from the recent conversation while recording starts. Tau buffers audio until the transcription session is ready, then streams it. Gemini uses `gemini-3.5-transcribe-live` in verbatim mode with English (`en-US`) and Finnish (`fi-FI`) language hints. Missing OpenAI credentials or a failed hint extraction do not stop transcription.
|
|
186
205
|
|
|
187
|
-
If transcription fails, Tau
|
|
206
|
+
If transcription fails, Tau keeps the local WAV file and reports its path:
|
|
207
|
+
|
|
208
|
+
- `/listen retry` transcribes the same audio again with Gemini and the current conversation context. Gemini uploads the file for `gemini-3.5-transcribe` verbatim transcription with the same language hints, and Tau tries to delete the uploaded file afterward. Recordings longer than 20 minutes are rejected instead of being sent.
|
|
209
|
+
- `/listen discard` deletes the file.
|
|
210
|
+
|
|
211
|
+
Tau keeps at most one failed recording. A new recording deletes it only once the new capture is producing audio. Exiting leaves the file at the reported path so you can recover it.
|
|
188
212
|
|
|
189
213
|
Install `ffmpeg`:
|
|
190
214
|
|
|
@@ -192,22 +216,41 @@ Install `ffmpeg`:
|
|
|
192
216
|
brew install ffmpeg
|
|
193
217
|
```
|
|
194
218
|
|
|
195
|
-
|
|
219
|
+
Transcription uses Gemini and needs `GEMINI_API_KEY` or `apiKeys.google`. The TUI process reads these credentials, also when attached to a remote host.
|
|
220
|
+
|
|
221
|
+
### Reading responses aloud
|
|
222
|
+
|
|
223
|
+
`/speak` also works only on macOS. It rewrites the last assistant response with GPT-6 Luna (reasoning disabled), streams Eleven v4 Turbo audio, and plays it at 1.15× speed through `ffplay`, which comes with `ffmpeg`.
|
|
224
|
+
|
|
225
|
+
- It needs `OPENAI_API_KEY` or `apiKeys.openai` for rewriting, and `ELEVENLABS_API_KEY` or `apiKeys.elevenlabs` for synthesis.
|
|
226
|
+
- It runs only while the session is idle. Escape stops it.
|
|
227
|
+
- Longer responses are split into balanced parts, each aiming for at most two minutes of speech.
|
|
228
|
+
- The source and rewritten text are limited to 10,000 Unicode characters, and generation stops after 32 MiB of raw audio.
|
|
229
|
+
- Voice lookups and synthesis requests have a two-minute deadline.
|
|
230
|
+
|
|
231
|
+
See [`speech` configuration](config-reference.md#speech) for the default Maisie and Caleb voices and for choosing your own.
|
|
232
|
+
|
|
233
|
+
`/auto-speak` toggles automatic reading of successful final answers, and briefly confirms the new mode. `/auto-speak on` and `/auto-speak off` set it explicitly, and turning it off also stops current playback.
|
|
196
234
|
|
|
197
|
-
|
|
235
|
+
- It starts off and applies only to the current session in this TUI, also when attached remotely. `/new` turns it off.
|
|
236
|
+
- It does not affect other clients or read earlier answers.
|
|
237
|
+
- Commentary, tool activity, and failed or interrupted answers are not read.
|
|
238
|
+
- Answers that arrive while recording or playing speech are not saved for later playback.
|
|
239
|
+
- Escape stops playback without turning the mode off.
|
|
240
|
+
- It uses the same voice, credentials, and rewriting as `/speak`. It never opens the microphone or submits dictation.
|
|
198
241
|
|
|
199
242
|
## Reload the right component
|
|
200
243
|
|
|
201
|
-
Run `/reload` while idle after changing
|
|
244
|
+
Run `/reload` while idle after changing configuration, personas, prompts, skills, or `AGENTS.md` content in the execution environment. The host reads them again from the session's working directory, keeps the current persona if it still exists, and otherwise selects the first available persona. Warnings appear in the transcript.
|
|
202
245
|
|
|
203
|
-
Restart the TUI instead after changing
|
|
246
|
+
Restart the TUI instead after changing themes, speech settings, or configured client tools. Codex auth storage is read again on every new request. Restart the host after changing its Tau version, environment variables, `apiKeys`, WebSocket listener, or hosted execution environment settings. [Credentials](credentials.md) and [remote sessions](remote-sessions.md) explain which process owns what.
|
|
204
247
|
|
|
205
248
|
## Common mistakes
|
|
206
249
|
|
|
207
|
-
- `!` and `!!` run in the execution environment, not on the attaching
|
|
250
|
+
- `!` and `!!` run in the execution environment, not on the attaching machine.
|
|
208
251
|
- Enter during a turn steers it. Use Ctrl+Enter to queue another turn.
|
|
209
|
-
- Ctrl+T changes
|
|
210
|
-
- `/prompt:<id>` fills the editor but does not
|
|
211
|
-
- `/diff`
|
|
252
|
+
- Ctrl+T changes only what is displayed. Use Shift+Tab to change reasoning effort.
|
|
253
|
+
- `/prompt:<id>` fills the editor but does not send it.
|
|
254
|
+
- `/diff` adds the returned review to the session but does not ask the assistant to act on it.
|
|
212
255
|
- `/reload` does not reload client themes or client tools.
|
|
213
|
-
- Exiting a WebSocket attachment does not delete
|
|
256
|
+
- Exiting a WebSocket attachment does not delete the session and does not necessarily stop it. Exiting a local TUI shuts down its host, so running work is interrupted and saved where possible.
|
|
@@ -328,16 +328,11 @@ function formatSessionStatus(session, project, snapshot, preferredProjectId) {
|
|
|
328
328
|
if (!snapshot) {
|
|
329
329
|
return `${status}${preferenceStatus}`;
|
|
330
330
|
}
|
|
331
|
-
const goalStatus = snapshot.goal
|
|
332
|
-
? snapshot.goal.status === "active"
|
|
333
|
-
? " it is pursuing a goal."
|
|
334
|
-
: " its goal is blocked."
|
|
335
|
-
: "";
|
|
336
331
|
const model = snapshot.bootstrap.model.name || snapshot.bootstrap.model.id;
|
|
337
332
|
const reasoning = snapshot.settings.reasoning ?? "none";
|
|
338
333
|
const context = formatTelegramContextUsage(snapshot);
|
|
339
334
|
const cost = formatTelegramSessionCost(getTelegramSessionCostTotal(snapshot));
|
|
340
|
-
return `${status}
|
|
335
|
+
return `${status} it is using ${model} with ${reasoning} reasoning. context usage is ${context}. cumulative cost is ${cost}.${preferenceStatus}`;
|
|
341
336
|
}
|
|
342
337
|
function ensureTerminalPunctuation(text) {
|
|
343
338
|
const trimmed = text.trim();
|