@markusylisiurunen/tau 0.3.77 → 0.3.79
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/dist/code_mode/images.d.ts +3 -0
- package/dist/code_mode/images.js +37 -0
- package/dist/code_mode/images.js.map +1 -0
- package/dist/code_mode/output.d.ts +22 -0
- package/dist/code_mode/output.js +109 -0
- package/dist/code_mode/output.js.map +1 -0
- package/dist/code_mode/runtime.d.ts +2 -1
- package/dist/code_mode/runtime.js +92 -12
- package/dist/code_mode/runtime.js.map +1 -1
- package/dist/core/agent/agent_runtime.js +6 -11
- 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/client_tools/command_client_tools.js +2 -2
- package/dist/core/commands/registry.js +18 -2
- package/dist/core/commands/registry.js.map +1 -1
- package/dist/core/config/content_loader.js +12 -194
- package/dist/core/config/content_loader.js.map +1 -1
- package/dist/core/config/index.js +1 -1
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/config/mcp.js +68 -0
- package/dist/core/config/mcp.js.map +1 -0
- package/dist/core/config/runtime.js +1 -2
- package/dist/core/config/runtime.js.map +1 -1
- package/dist/core/config/schema.js +36 -155
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/config/virtual_bundle.js +2 -5
- package/dist/core/config/virtual_bundle.js.map +1 -1
- package/dist/core/config/virtual_defaults.js +0 -2
- package/dist/core/config/virtual_defaults.js.map +1 -1
- package/dist/core/debug.js +8 -23
- package/dist/core/debug.js.map +1 -1
- package/dist/core/diff_review/bridge.js +2 -24
- package/dist/core/diff_review/bridge.js.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/mcp/manager.js +245 -0
- package/dist/core/mcp/manager.js.map +1 -0
- package/dist/core/mcp/search.js +77 -0
- package/dist/core/mcp/search.js.map +1 -0
- package/dist/core/personas.js +6 -9
- package/dist/core/personas.js.map +1 -1
- package/dist/core/runtime/agent_model.js +0 -2
- package/dist/core/runtime/agent_model.js.map +1 -1
- package/dist/core/runtime/chat_runtime.js +7 -6
- package/dist/core/runtime/chat_runtime.js.map +1 -1
- package/dist/core/runtime/session_prompt_composer.js +12 -27
- package/dist/core/runtime/session_prompt_composer.js.map +1 -1
- package/dist/core/static/code_mode/mcp/documentation.md +113 -0
- package/dist/core/static/code_mode/sandbox_runner.mjs +58 -3
- package/dist/core/static/index.js +4 -4
- package/dist/core/static/index.js.map +1 -1
- package/dist/core/static/tau_docs/client-tools.md +33 -31
- package/dist/core/static/tau_docs/config-reference.md +54 -88
- package/dist/core/static/tau_docs/configuration.md +4 -11
- package/dist/core/static/tau_docs/node-sdk.md +4 -2
- package/dist/core/static/tau_docs/ownership-and-scope.md +4 -2
- package/dist/core/static/tau_docs/personas.md +8 -21
- package/dist/core/static/tau_docs/prompts-and-project-context.md +1 -1
- package/dist/core/static/tau_docs/remote-sessions.md +2 -2
- package/dist/core/static/tau_docs/security.md +15 -3
- package/dist/core/static/tau_docs/session-protocol-methods.md +8 -3
- package/dist/core/static/tau_docs/session-protocol.md +11 -9
- package/dist/core/static/tau_docs/sessions.md +2 -14
- package/dist/core/static/tau_docs/skills.md +1 -1
- package/dist/core/static/tau_docs/subagents.md +27 -99
- package/dist/core/static/tau_docs/telegram.md +10 -13
- package/dist/core/static/tau_docs/tools.md +24 -9
- package/dist/core/static/tau_docs/troubleshooting.md +4 -5
- package/dist/core/static/tau_docs/tui.md +16 -22
- package/dist/core/subagents/agent_supervisor.js +6 -7
- package/dist/core/subagents/agent_supervisor.js.map +1 -1
- package/dist/core/subagents/format.js +1 -1
- package/dist/core/subagents/format.js.map +1 -1
- package/dist/core/subagents/prompt.js +7 -0
- package/dist/core/subagents/prompt.js.map +1 -0
- package/dist/core/subagents/registry.js +15 -43
- package/dist/core/subagents/registry.js.map +1 -1
- package/dist/core/subagents/types.js +3 -2
- package/dist/core/subagents/types.js.map +1 -1
- package/dist/core/telegram/adapter.js +6 -10
- package/dist/core/telegram/adapter.js.map +1 -1
- package/dist/core/telegram/config.js +32 -57
- package/dist/core/telegram/config.js.map +1 -1
- package/dist/core/telegram/local_session_client.js +0 -3
- package/dist/core/telegram/local_session_client.js.map +1 -1
- package/dist/core/telegram/runtime.js +0 -3
- package/dist/core/telegram/runtime.js.map +1 -1
- package/dist/core/telegram/session_manager.js +29 -52
- package/dist/core/telegram/session_manager.js.map +1 -1
- package/dist/core/telegram/workspace.js +13 -18
- package/dist/core/telegram/workspace.js.map +1 -1
- package/dist/core/tools/catalog.js +23 -6
- package/dist/core/tools/catalog.js.map +1 -1
- package/dist/core/tools/code_mode.js +5 -2
- package/dist/core/tools/code_mode.js.map +1 -1
- package/dist/core/tools/code_mode_worker.js +33 -1
- package/dist/core/tools/code_mode_worker.js.map +1 -1
- package/dist/core/tools/history.js +1 -1
- package/dist/core/tools/history.js.map +1 -1
- package/dist/core/tools/mcp.js +167 -0
- package/dist/core/tools/mcp.js.map +1 -0
- package/dist/core/tools/nook.js +1 -1
- package/dist/core/tools/nook.js.map +1 -1
- package/dist/core/tools/send_input_to_agent.js +1 -1
- package/dist/core/tools/send_input_to_agent.js.map +1 -1
- package/dist/core/tools/spawn_agent.js +14 -30
- package/dist/core/tools/spawn_agent.js.map +1 -1
- package/dist/core/tools/tool_names.js +2 -0
- package/dist/core/tools/tool_names.js.map +1 -1
- package/dist/core/tools/view_image.js +1 -110
- package/dist/core/tools/view_image.js.map +1 -1
- package/dist/core/tools/web.js +1 -1
- package/dist/core/tools/web.js.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/usage/logs.js.map +1 -1
- package/dist/core/utils/bm25.js +74 -0
- package/dist/core/utils/bm25.js.map +1 -0
- package/dist/core/utils/model_image.js +106 -0
- package/dist/core/utils/model_image.js.map +1 -0
- package/dist/core/version.js +1 -1
- package/dist/diff_tool/app/dist/assets/{angular-html-BjHlbeCk.js → angular-html-CnO8qept.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{angular-ts-5J5hsUV-.js → angular-ts-DPXUio9Z.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{apl-ChIs51_N.js → apl-X8YsymsQ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{astro-RtGdbaIT.js → astro-BQ9k8AQ0.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{blade-Cuc0ZzS1.js → blade-DZ1LYIzB.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{c-IpjS3QEt.js → c-VLTwNh7z.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{chapel-BvHOmF40.js → chapel-5s-sGN8D.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cobol-BWLkapNx.js → cobol-C9RzwrVu.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{coffee-lfdf_MuK.js → coffee-BHvjZ343.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cpp-GvMfdutG.js → cpp-CBTVXbBp.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{crystal--kdmUeXB.js → crystal-DQJua4y4.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{css-CnlOazId.js → css-BQflXFb6.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{edge-CwnxQiFe.js → edge-BmdmXGH4.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elixir-BVO19qQd.js → elixir-oiOLs98L.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elm-BK3istEo.js → elm-BgYuiU4E.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{erb-CO4uKwKD.js → erb-CvFrXpyY.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{git-rebase-CDrrgbGV.js → git-rebase-D3Zo1BLH.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-js-7CFSyo6c.js → glimmer-js-B4-8E3lJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-ts-Ofllf2Yo.js → glimmer-ts-CtKkD0t_.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glsl-K_36bq1K.js → glsl-BAqforx_.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{graphql-BMZnssUN.js → graphql-DuE1RMyL.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hack-MG_t8QNs.js → hack-CHBcXjz1.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{haml-0hDK-uCt.js → haml-DAs2z3tD.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{handlebars-D4_MRJPB.js → handlebars-CfAla6QK.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-BCi--7qp.js → html-D5co0BLD.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-derivative-DYq2AWiD.js → html-derivative-BZaWEmAT.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{http-BmLFm2Pm.js → http-Cii5MjJE.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hurl-CT71cK69.js → hurl-Bur-XdJO.js} +1 -1
- package/dist/diff_tool/app/dist/assets/index-CZUi_I-p.js +340 -0
- package/dist/diff_tool/app/dist/assets/{java-Bm2FCq-d.js → java-DN39wI4w.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{javascript-C7oEny21.js → javascript-VUReF1H4.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jinja-igQBS-SS.js → jinja-BcrfV1JB.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jison-BrOUp4rK.js → jison-Bez5Mtmy.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{json-DsuR7Nai.js → json-ChV8m0Le.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jsx-BdomFXcA.js → jsx-D0SXNtM0.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{julia-DqOG4pbM.js → julia-DvhpcBwG.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{just-ZrSTuT0n.js → just-BGwe8S6x.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{latex-DbmtZIwN.js → latex-pWSag83P.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{liquid-DKnUlRIp.js → liquid-UdnqDjKz.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{lua-Cyq3f59a.js → lua-CjDHeHEr.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{marko-hmOsFPHQ.js → marko-yLX6iW68.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{mdc-BnnQmDC-.js → mdc-BOLj6Oyq.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nginx-C0zLUSna.js → nginx-5r5xPc2T.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nim-Oljl3c5n.js → nim-9exKQYMz.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{org-Cp4CA-0c.js → org-B2fpAlbt.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{perl-DstDVYmJ.js → perl-DV2fcwyY.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{php-Cc3bNZ7J.js → php-D-AthX_E.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{pug-B3xDUzl0.js → pug-DuKcQxFj.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{qml-B9iDahKk.js → qml-C16b4SYx.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{r-B7M5ZSBC.js → r-B1ZldnJf.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{razor-BlfV6bjQ.js → razor-TYmslaAB.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{regexp-BVT0NBj6.js → regexp-dWCffmDD.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{rst-Cq-Mcher.js → rst-DEkLr2YR.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ruby-5uCK_s01.js → ruby-BJnJzr4u.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sas-m4dYluKN.js → sas-DeRsDbUE.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{scss-DFiJcBQH.js → scss-SGV_CwKm.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellscript-DCtSkJJQ.js → shellscript-BI7khmmR.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellsession-_DntbpLM.js → shellsession-Nupw_Vvw.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{soy-Dd1fWsG8.js → soy-B96cBzxv.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sql-Bygp5F-5.js → sql-CsIdKfaO.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{stata-CqIA1VQD.js → stata-Dnq48cE6.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{surrealql-C2-2C-z3.js → surrealql-D6lw4TiD.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{svelte-CrTy7VSb.js → svelte-ChVoq9tB.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{templ-B_h9AHFJ.js → templ-Dh1EXuHD.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tex-AwlGuBDG.js → tex-KTYusNFe.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ts-tags--oqU6stH.js → ts-tags-DC2RU1_R.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tsx-Cx-oUPFA.js → tsx-DtIM39Jy.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{twig-DMQw3R9O.js → twig-C6D_TA3n.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typescript-BCtu9W7E.js → typescript-BGAE5iuw.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typst-jGrqJHSo.js → typst-nWoGZ22y.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-html-DTMalvg7.js → vue-html-prNdIjLu.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-GFZcsvXd.js → vue-iyHf-l4z.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-vine-BwDeqLrM.js → vue-vine-KSSlnVeg.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xml-CoXyuOzf.js → xml-DdCC83Xd.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xsl-BQFm34CN.js → xsl-DSqZxsez.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{yaml-CbO2A_pF.js → yaml-CZcBUWvf.js} +1 -1
- package/dist/diff_tool/app/dist/index.html +1 -1
- package/dist/diff_tool/http_server.js +2 -9
- package/dist/diff_tool/http_server.js.map +1 -1
- package/dist/diff_tool/index.js +2 -2
- package/dist/diff_tool/index.js.map +1 -1
- package/dist/diff_tool/launcher.js +14 -8
- package/dist/diff_tool/launcher.js.map +1 -1
- package/dist/diff_tool/protocol_client.js +0 -7
- package/dist/diff_tool/protocol_client.js.map +1 -1
- package/dist/diff_tool/review_state.js +4 -10
- package/dist/diff_tool/review_state.js.map +1 -1
- package/dist/diff_tool/review_state_persistence.js +12 -7
- package/dist/diff_tool/review_state_persistence.js.map +1 -1
- package/dist/diff_tool/shared_types.js +0 -48
- package/dist/diff_tool/shared_types.js.map +1 -1
- package/dist/host/client_tool_broker.js +1 -1
- package/dist/host/client_tool_broker.js.map +1 -1
- package/dist/host/execution_runtime.js +1 -1
- package/dist/host/execution_runtime.js.map +1 -1
- package/dist/host/hosted_ephemeral_agent_session.js +1 -1
- package/dist/host/hosted_ephemeral_agent_session.js.map +1 -1
- package/dist/host/local_session_host.js +19 -19
- package/dist/host/local_session_host.js.map +1 -1
- package/dist/host/session_host.js.map +1 -1
- package/dist/main.js +2 -15
- 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 +14 -15
- package/dist/protocol/session_protocol.js +30 -12
- package/dist/protocol/session_protocol.js.map +1 -1
- package/dist/sdk/client_tool_command.d.ts +12 -11
- package/dist/sdk/client_tool_command.js +8 -8
- package/dist/sdk/client_tool_command.js.map +1 -1
- package/dist/sdk/code_mode.js +1 -1
- package/dist/sdk/code_mode.js.map +1 -1
- package/dist/sdk/local_client.js +1 -0
- package/dist/sdk/local_client.js.map +1 -1
- package/dist/sdk/session.js +1 -1
- package/dist/sdk/session.js.map +1 -1
- package/dist/sdk/types.d.ts +2 -1
- package/dist/store/session_snapshot_migrations.js +32 -1
- package/dist/store/session_snapshot_migrations.js.map +1 -1
- package/dist/tui/chat_controller/diff_review_service.js +0 -15
- package/dist/tui/chat_controller/diff_review_service.js.map +1 -1
- package/dist/tui/chat_view.js +8 -2
- package/dist/tui/chat_view.js.map +1 -1
- package/dist/tui/session_chat_app.js +1 -2
- package/dist/tui/session_chat_app.js.map +1 -1
- package/dist/tui/session_chat_controller.js +141 -42
- package/dist/tui/session_chat_controller.js.map +1 -1
- package/dist/tui/ui/custom_editor.js +70 -25
- package/dist/tui/ui/custom_editor.js.map +1 -1
- package/dist/tui/ui/footer.js +4 -2
- package/dist/tui/ui/footer.js.map +1 -1
- package/dist/tui/ui/slash_autocomplete.js +6 -9
- package/dist/tui/ui/slash_autocomplete.js.map +1 -1
- package/dist/tui/ui/subagent_panel.js +1 -12
- package/dist/tui/ui/subagent_panel.js.map +1 -1
- package/package.json +7 -6
- package/dist/core/config/diff_tool.js +0 -51
- package/dist/core/config/diff_tool.js.map +0 -1
- package/dist/core/subagents/default.js +0 -8
- package/dist/core/subagents/default.js.map +0 -1
- package/dist/diff_tool/app/dist/assets/index-DyaXBald.js +0 -340
- /package/dist/core/static/prompts/{default-subagent-wrapper.md → subagent-wrapper.md} +0 -0
|
@@ -36,7 +36,7 @@ Only one logical turn runs at a time. Input sent during active work has two usef
|
|
|
36
36
|
- A queued message waits for the session to become idle, then starts an independent turn.
|
|
37
37
|
- Steering joins the active logical turn at a safe continuation boundary.
|
|
38
38
|
|
|
39
|
-
In the TUI, Enter
|
|
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.
|
|
40
40
|
|
|
41
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.
|
|
42
42
|
|
|
@@ -107,7 +107,7 @@ Compaction replaces older model-visible conversation context with a synthetic su
|
|
|
107
107
|
|
|
108
108
|
### Automatic compaction
|
|
109
109
|
|
|
110
|
-
Automatic compaction runs before a model subturn when fresh provider usage plus newly added estimated context exceeds the
|
|
110
|
+
Automatic compaction runs before a model subturn when fresh provider usage plus newly added estimated context exceeds the fixed threshold. The threshold is the model context window minus 16,384 tokens. Tau keeps a recent tail with a target budget of 20,000 tokens, capped by that threshold, summarizes older context, and can compact more than once during a long logical turn.
|
|
111
111
|
|
|
112
112
|
The summary model may copy important original user messages verbatim into the summary. Recent retained messages stay available to the model, although unusually large textual tool and recovery results may be truncated in retained context. Tau records the compaction as a new active context segment.
|
|
113
113
|
|
|
@@ -119,18 +119,6 @@ The continuation also requires the archive guide to be present in model context
|
|
|
119
119
|
|
|
120
120
|
These archives are temporary recovery aids, not backups. Archive failure does not block compaction, and execution-environment cleanup may remove them.
|
|
121
121
|
|
|
122
|
-
Configure the policy in [configuration](configuration.md):
|
|
123
|
-
|
|
124
|
-
```json
|
|
125
|
-
{
|
|
126
|
-
"autoCompact": {
|
|
127
|
-
"enabled": true,
|
|
128
|
-
"reserveTokens": 16384,
|
|
129
|
-
"keepRecentTokens": 20000
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
```
|
|
133
|
-
|
|
134
122
|
### Intermediate system instructions
|
|
135
123
|
|
|
136
124
|
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.
|
|
@@ -79,7 +79,7 @@ The frontmatter contract is:
|
|
|
79
79
|
| `metadata` | Optional map whose keys and values are strings. |
|
|
80
80
|
| `allowed-tools` | Optional non-empty string. It is accepted for skills-format compatibility but currently ignored by Tau. |
|
|
81
81
|
|
|
82
|
-
Unknown frontmatter fields are discarded. `allowed-tools` does not enable, disable, or restrict any tool. Tool availability comes from the active persona
|
|
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).
|
|
83
83
|
|
|
84
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.
|
|
85
85
|
|
|
@@ -1,87 +1,24 @@
|
|
|
1
1
|
# Subagents
|
|
2
2
|
|
|
3
|
-
Subagents are host-supervised background agent threads created by the main agent. They are useful when work can proceed independently
|
|
3
|
+
Subagents are host-supervised background agent threads created by the main agent. They are useful when work can proceed independently or needs a separate context. A subagent is not a second session and does not have its own persona file.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Background workers
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Subagents are general-purpose background workers with no named types. Multiple instances can run concurrently, each with its own task and conversation.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
The worker inherits the active main persona's model-facing behavior through Tau's maintained wrapper. Its instructions and description are not configuration surfaces. Supply task-specific instructions in the launch prompt, including any relevant skill guidance.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
Disable it explicitly when a persona should expose only named custom workers or no subagents:
|
|
14
|
-
|
|
15
|
-
```yaml
|
|
16
|
-
subagents:
|
|
17
|
-
default: false
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
If `subagents` is omitted by a persona that extends a built-in, Tau inherits the base persona's entire subagent map. If a persona supplies a `subagents` map, Tau builds a new map from it and adds `default` unless the map says `default: false`.
|
|
21
|
-
|
|
22
|
-
## Defining custom subagents
|
|
23
|
-
|
|
24
|
-
Custom definitions live under `subagents` in a [persona](personas.md):
|
|
25
|
-
|
|
26
|
-
```yaml
|
|
27
|
-
subagents:
|
|
28
|
-
default: false
|
|
29
|
-
dependency-auditor:
|
|
30
|
-
description: Audit dependency changes and report concrete risks. Trigger: explicit.
|
|
31
|
-
systemPrompt: >-
|
|
32
|
-
Inspect the requested dependency change. Verify lockfile and release implications,
|
|
33
|
-
then return prioritized findings with paths.
|
|
34
|
-
tools:
|
|
35
|
-
- bash
|
|
36
|
-
- history
|
|
37
|
-
launchModels:
|
|
38
|
-
- anthropic/claude-haiku-4-5:low
|
|
39
|
-
- openai/gpt-6.1-sol:high
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
A custom subagent name must:
|
|
43
|
-
|
|
44
|
-
- contain 1 to 64 characters;
|
|
45
|
-
- use lowercase letters and digits;
|
|
46
|
-
- use single dashes between segments; and
|
|
47
|
-
- begin and end with a letter or digit.
|
|
48
|
-
|
|
49
|
-
`dependency-auditor` and `review2` are valid. `DependencyAuditor`, `dependency_auditor`, and `-review` are not.
|
|
50
|
-
|
|
51
|
-
Each custom definition accepts:
|
|
52
|
-
|
|
53
|
-
| Field | Contract |
|
|
54
|
-
| --- | --- |
|
|
55
|
-
| `systemPrompt` | Required non-empty string containing the subagent's base instructions. |
|
|
56
|
-
| `description` | Optional non-empty catalog description. Include trigger sensitivity here when needed. |
|
|
57
|
-
| `tools` | Optional list of eligible subagent tools. Omission inherits eligible tools from the main persona. |
|
|
58
|
-
| `launchModels` | Optional allowlist of exact model overrides accepted by `spawn_agent`. |
|
|
59
|
-
|
|
60
|
-
Unknown fields are discarded. In particular, `provider`, `model`, `reasoning`, and `serviceTier` inside a subagent definition do not configure its runtime. Use `launchModels` for approved launch-time model changes.
|
|
61
|
-
|
|
62
|
-
A custom entry cannot be `false`; only `default: false` has disable semantics. Every custom entry requires `systemPrompt`.
|
|
11
|
+
Availability follows the main persona's tool list. Built-in personas and standalone custom personas that omit `tools` enable the five supervision tools. A custom persona can prevent launches by providing an explicit `tools` list without `spawn_agent`; omit all five supervision tools when no subagent interaction is wanted. There is no separate subagent enable or disable setting. See [personas](personas.md).
|
|
63
12
|
|
|
64
13
|
## Trigger sensitivity
|
|
65
14
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
- **eager**: use proactively whenever the capability would help;
|
|
69
|
-
- **balanced**: use when the request clearly matches, which is the default when no trigger is stated;
|
|
70
|
-
- **explicit**: use only when an active instruction names the subagent.
|
|
71
|
-
|
|
72
|
-
Use a clear phrase such as `Trigger: explicit.`. An exact user reference looks like:
|
|
73
|
-
|
|
74
|
-
```text
|
|
75
|
-
@@agent:dependency-auditor
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
An exact reference in the user request, an active `AGENTS.md` instruction, or the instructions of an already-active skill explicitly activates that subagent. A subagent reference tells the main agent which capability to use; it does not itself create a thread. The main agent still calls `spawn_agent`.
|
|
15
|
+
The main agent launches subagents only when the user or active instructions explicitly request delegation. Ask for a subagent in ordinary language; no named agent tag is needed. A request does not itself create a thread: the main agent still calls `spawn_agent`.
|
|
79
16
|
|
|
80
|
-
|
|
17
|
+
This is agent-facing policy. The host validates launches but does not infer whether a prompt semantically authorized delegation.
|
|
81
18
|
|
|
82
19
|
## Tool inheritance and restriction
|
|
83
20
|
|
|
84
|
-
The
|
|
21
|
+
The eligible inherited tools are:
|
|
85
22
|
|
|
86
23
|
- `bash`
|
|
87
24
|
- `write`
|
|
@@ -89,14 +26,14 @@ The persona-configurable subagent tool subset contains only:
|
|
|
89
26
|
- `view_image`
|
|
90
27
|
- `web`
|
|
91
28
|
- `history`
|
|
29
|
+
- `nook`, when Nook is configured
|
|
30
|
+
- `mcp`, when the host has enabled MCP servers
|
|
92
31
|
|
|
93
|
-
Tau then adds intrinsic `tau_docs` to every subagent registry, independently of this subset.
|
|
32
|
+
Tau then adds intrinsic `tau_docs` to every subagent registry, independently of this subset. A persona’s `tools` list cannot disable it. Apart from `tau_docs`, subagents do not receive goal controls, subagent supervision tools, client tools, or TUI-local tools.
|
|
94
33
|
|
|
95
|
-
|
|
34
|
+
The worker inherits the intersection of the main persona's tools and those eight eligible names. MCP uses the parent's shared host connections, independent of the child's working directory. For example, a main persona with `bash`, `edit`, `history`, and `spawn_agent` gives the child `bash`, `edit`, and `history`, plus intrinsic `tau_docs`. There is no separate child tool allowlist.
|
|
96
35
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
The main persona must itself expose the subagent supervision tools for the model to operate subagents. Defining a subagent while omitting `spawn_agent` from an explicit persona `tools` list leaves the definition present but not launchable by the main agent. See [tools](tools.md) for the broader availability contract.
|
|
36
|
+
Subagents cannot launch other subagents: supervision tools are never included in a child's registry. See [tools](tools.md) for the broader availability contract.
|
|
100
37
|
|
|
101
38
|
## Models and settings
|
|
102
39
|
|
|
@@ -110,18 +47,18 @@ A launch override must use exact form:
|
|
|
110
47
|
|
|
111
48
|
The provider is normalized to lowercase. The model ID remains exact and case-sensitive. Effort is one of `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, or `max`.
|
|
112
49
|
|
|
113
|
-
|
|
50
|
+
The configured launch-model list is an allowlist, not a default selection. The main agent should normally omit the `model` argument to `spawn_agent`; when omitted, the subagent inherits the active persona model and reasoning. When supplied, the normalized value must exactly match an entry in the configured allowlist. The override changes provider, model, and reasoning. Other inherited settings remain.
|
|
114
51
|
|
|
115
|
-
Model IDs may be unbundled when their provider is known, following the synthesis rules in [models](models.md). Invalid provider, model, effort, or format rejects the
|
|
52
|
+
Model IDs may be unbundled when their provider is known, following the synthesis rules in [models](models.md). Invalid provider, model, effort, or format rejects the configuration field. Duplicate normalized entries are removed.
|
|
116
53
|
|
|
117
|
-
### Allowing overrides
|
|
54
|
+
### Allowing model overrides
|
|
118
55
|
|
|
119
|
-
|
|
56
|
+
Configure the built-in worker’s launch allowlist through `subagents.launchModels` in `config.json`:
|
|
120
57
|
|
|
121
58
|
```json
|
|
122
59
|
{
|
|
123
60
|
"subagents": {
|
|
124
|
-
"
|
|
61
|
+
"launchModels": [
|
|
125
62
|
"anthropic/claude-haiku-4-5:low",
|
|
126
63
|
"openai/gpt-6.1-sol:high"
|
|
127
64
|
]
|
|
@@ -129,7 +66,7 @@ The built-in `default` definition cannot be edited in persona frontmatter. Confi
|
|
|
129
66
|
}
|
|
130
67
|
```
|
|
131
68
|
|
|
132
|
-
This list is layered configuration. The nearest defined `
|
|
69
|
+
This list is layered configuration. The nearest defined `launchModels` array replaces the broader array rather than appending to it. Tau applies the effective list to every persona that exposes `spawn_agent`.
|
|
133
70
|
|
|
134
71
|
## Working-directory context
|
|
135
72
|
|
|
@@ -137,7 +74,7 @@ This list is layered configuration. The nearest defined `defaultLaunchModels` ar
|
|
|
137
74
|
|
|
138
75
|
When the resolved path differs from the parent `cwd`, Tau rebuilds prompt context from that target directory. It discovers the target platform and repository metadata, reads applicable `AGENTS.md` and configured context files, discovers target skills, and filters those skills through the parent persona's skill selection.
|
|
139
76
|
|
|
140
|
-
The target directory does **not** select a different persona,
|
|
77
|
+
The target directory does **not** select a different persona, model catalog, runtime configuration, credential source, or tool policy for the child. Those remain under parent-session authority. Target configuration is consulted only where needed to rebuild target prompt context, such as target `agentContextFiles` and skill discovery.
|
|
141
78
|
|
|
142
79
|
This distinction matters in monorepos and hosted environments. `workingDirectory` is an execution-environment path. The host and attached client must not reinterpret it against their own filesystems.
|
|
143
80
|
|
|
@@ -145,11 +82,11 @@ A launch is blocked if Tau cannot build target context, the directory is invalid
|
|
|
145
82
|
|
|
146
83
|
## Lifecycle and supervision tools
|
|
147
84
|
|
|
148
|
-
Subagent threads are addressed by host-generated IDs.
|
|
85
|
+
Subagent threads are addressed by host-generated IDs. IDs identify individual live thread records.
|
|
149
86
|
|
|
150
87
|
### Spawn
|
|
151
88
|
|
|
152
|
-
`spawn_agent`
|
|
89
|
+
`spawn_agent` accepts a title, prompt, optional launch model, and optional working directory. The prompt is the child's only initial user input, so it should be self-contained. A successful call returns immediately with the new ID while the child continues in the background.
|
|
153
90
|
|
|
154
91
|
At most eight subagent runs may be active concurrently within one main session. Completed or interrupted idle threads do not consume active capacity.
|
|
155
92
|
|
|
@@ -165,7 +102,7 @@ The host also publishes bounded live subagent activity to observing clients. Tha
|
|
|
165
102
|
|
|
166
103
|
`send_input_to_agent` starts another run on an existing idle thread. The thread retains its conversation state, model, settings, tools, and working directory. It must finish or be interrupted before another input is accepted.
|
|
167
104
|
|
|
168
|
-
Starting a follow-up replaces the previously retained response in the thread's latest-run state. Read any needed result before sending the next input. Follow-ups do not reread a changed persona definition or adopt a newly reloaded launch
|
|
105
|
+
Starting a follow-up replaces the previously retained response in the thread's latest-run state. Read any needed result before sending the next input. Follow-ups do not reread a changed persona definition or adopt a newly reloaded launch allowlist.
|
|
169
106
|
|
|
170
107
|
### Interrupt
|
|
171
108
|
|
|
@@ -185,19 +122,10 @@ Plan durable work accordingly. Important conclusions should be returned to the m
|
|
|
185
122
|
|
|
186
123
|
## Reloading and validation
|
|
187
124
|
|
|
188
|
-
Persona and
|
|
189
|
-
|
|
190
|
-
An invalid subagent definition rejects its containing persona. Common content warnings include:
|
|
125
|
+
Persona tool selections and launch-policy changes take effect after `/reload` in an idle TUI session or in a newly created session. Reload updates new launches without reconfiguring already spawned threads. Follow-ups continue on their captured runtime.
|
|
191
126
|
|
|
192
|
-
|
|
193
|
-
- `subagents` that is not an object;
|
|
194
|
-
- `default` set to anything other than `false`;
|
|
195
|
-
- a custom entry set to `false` or missing `systemPrompt`;
|
|
196
|
-
- blank descriptions, prompts, or list entries;
|
|
197
|
-
- unknown subagent tools;
|
|
198
|
-
- `launchModels` or `defaultLaunchModels` that is not a string array; and
|
|
199
|
-
- an unknown provider or model, invalid effort, or malformed `<provider>/<model>:<effort>` value.
|
|
127
|
+
`subagents.launchModels` must be a string array of valid `<provider>/<model>:<effort>` values. Unknown providers, invalid efforts, and malformed entries produce configuration diagnostics.
|
|
200
128
|
|
|
201
|
-
At execution time, launches can
|
|
129
|
+
At execution time, launches can be blocked by invalid arguments, a model outside the allowlist, exhausted concurrency, missing prompt composition, or target-context failure. Follow-up, wait, and interrupt calls reject unknown IDs; follow-up also rejects a thread that is still running.
|
|
202
130
|
|
|
203
|
-
Use `tau --debug --persona <id>` before starting a local TUI to inspect effective
|
|
131
|
+
Use `tau --debug --persona <id>` before starting a local TUI to inspect effective tool availability, inherited model and settings, and the child tool list. In a running session, `/reload` reports file warnings and `list_agents` shows live thread state.
|
|
@@ -56,7 +56,6 @@ Unknown object fields are stripped, so a misspelled field can have no effect wit
|
|
|
56
56
|
| `projects` | Yes | Object keyed by project ID. Bots select from these definitions. |
|
|
57
57
|
| `workspaceRoot` | No | Base for managed workspaces; defaults to `.tau/telegram-workspaces` beside the Telegram config file. |
|
|
58
58
|
| `maxSessions` | No | Positive integer cap on active sessions across the whole runner. |
|
|
59
|
-
| `systemMessage` | No | Non-empty model-facing instruction prepended to every Telegram turn. |
|
|
60
59
|
|
|
61
60
|
A relative top-level `workspaceRoot` resolves from the Telegram config file's directory. Tau persists runner session records at `<workspaceRoot>-sessions.json` and per-chat preferences at `<workspaceRoot>-project-preferences.json`. These are runner-owned state files, not operator editing surfaces. Session snapshots remain in the normal host store under the runner user's Tau home.
|
|
62
61
|
|
|
@@ -74,8 +73,8 @@ Each `bots.<id>` object supports:
|
|
|
74
73
|
| `allowedChatIds` | No | Integer chat IDs allowed to interact with the bot; also opts groups in. |
|
|
75
74
|
| `defaultProjectId` | No | Initial project preference, and must be allowed for this bot. |
|
|
76
75
|
| `systemMessage` | No | Additional instruction for turns from this bot. |
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
|
|
77
|
+
The runner retries failed polling after 1,000 ms and uses a 30-second Telegram long-poll timeout.
|
|
79
78
|
|
|
80
79
|
An absent or empty `allowedUserIds` means no user restriction. An absent or empty `allowedChatIds` allows DMs but allows no groups. When `allowedChatIds` is non-empty, it restricts DMs to listed chat IDs and enables only listed groups. Group IDs are usually negative integers.
|
|
81
80
|
|
|
@@ -95,7 +94,7 @@ platform_api
|
|
|
95
94
|
release2026
|
|
96
95
|
```
|
|
97
96
|
|
|
98
|
-
Every project can have an optional non-empty `description`. Repository and persistent-directory projects can select `persona` as `<id>` or `<id>:<reasoning
|
|
97
|
+
Every project can have an optional non-empty `description`. Repository and persistent-directory projects can select `persona` as `<id>` or `<id>:<reasoning>`. Composite projects require their own persona. Sessions load applicable `AGENTS.md` instructions.
|
|
99
98
|
|
|
100
99
|
Each project must define exactly one workspace source: `repo`, `directory`, or `projectIds`.
|
|
101
100
|
|
|
@@ -110,9 +109,7 @@ A repository project clones one GitHub repository into a session-specific manage
|
|
|
110
109
|
"repo": "acme/ledger",
|
|
111
110
|
"ref": "main",
|
|
112
111
|
"workingDirectory": "packages/api",
|
|
113
|
-
"
|
|
114
|
-
"persona": "gpt-6.1-sol-coder",
|
|
115
|
-
"noAgentContextFiles": false
|
|
112
|
+
"persona": "gpt-6.1-sol-coder"
|
|
116
113
|
}
|
|
117
114
|
}
|
|
118
115
|
}
|
|
@@ -120,7 +117,7 @@ A repository project clones one GitHub repository into a session-specific manage
|
|
|
120
117
|
|
|
121
118
|
`repo` must use GitHub `owner/repo` syntax. Arbitrary Git URLs are not accepted. The runner needs `gh` and `git` on its login-shell `PATH`, and `gh` must already be authenticated for the repository.
|
|
122
119
|
|
|
123
|
-
|
|
120
|
+
All managed projects use the top-level `workspaceRoot`. A session workspace is:
|
|
124
121
|
|
|
125
122
|
```text
|
|
126
123
|
<effective-workspace-root>/<project-id>/<telegram-session-id>
|
|
@@ -179,7 +176,7 @@ A composite project creates a root containing multiple repositories:
|
|
|
179
176
|
"persona": "gpt-6.1-sol-coder:high",
|
|
180
177
|
"instructions": "Keep shared contracts synchronized.",
|
|
181
178
|
"subagents": {
|
|
182
|
-
"
|
|
179
|
+
"launchModels": ["openai/gpt-6.1-sol:high"]
|
|
183
180
|
}
|
|
184
181
|
}
|
|
185
182
|
}
|
|
@@ -190,11 +187,11 @@ A composite project creates a root containing multiple repositories:
|
|
|
190
187
|
|
|
191
188
|
Members live at `<composite-root>/<member-project-id>` and use each repository's cache, ref, and working directory. The root is the session `cwd`. At creation, Tau writes a root `AGENTS.md` listing the members and optional `instructions`, plus root `.tau/config.json` containing `subagents` or `{}`. These are workspace files, not synchronized mirrors of Telegram configuration, and are not regenerated when a preserved session reconnects.
|
|
192
189
|
|
|
193
|
-
`subagents.
|
|
190
|
+
`subagents.launchModels` sets the subagent launch override allowlist. Runtime config resolves and enforces entries. See [subagents](subagents.md) for model syntax and inheritance.
|
|
194
191
|
|
|
195
192
|
The composite owns the parent persona, subagents, model catalog, config, settings, and tools. Child `.tau/config.json` files are not merged. A subagent in a member directory rebuilds only target context: environment and repository metadata, applicable `AGENTS.md` and `agentContextFiles`, and skills filtered by the parent persona.
|
|
196
193
|
|
|
197
|
-
Composite preparation is all-or-nothing. If one member cannot be prepared, Tau removes the generated composite workspace.
|
|
194
|
+
Composite preparation is all-or-nothing. If one member cannot be prepared, Tau removes the generated composite workspace. Composite workspaces and member repository caches use the top-level `workspaceRoot`.
|
|
198
195
|
|
|
199
196
|
## Managed workspace lifecycle
|
|
200
197
|
|
|
@@ -218,11 +215,11 @@ New and reconstructed workspaces run their hooks; preserved workspaces and persi
|
|
|
218
215
|
|
|
219
216
|
After preparation, Tau creates an ordinary local session at the workspace `cwd`. Runtime discovery reads normal `~/.config/tau` and ancestor `.tau` content visible from that path: models, personas, prompts, skills, project context, host tools, and other session settings work as they do in the TUI.
|
|
220
217
|
|
|
221
|
-
A project `persona` overrides the normal default for that session.
|
|
218
|
+
A project `persona` overrides the normal default for that session. Sessions include applicable `AGENTS.md` instructions. Composite root context is generated deliberately and uses its required persona.
|
|
222
219
|
|
|
223
220
|
Every Telegram turn starts with hidden `<system>` guidance identifying Telegram as the source and reply destination. It favors direct simple answers and brief acknowledgements or meaningful progress updates for tool-driven or multi-step work, since users cannot see tool activity.
|
|
224
221
|
|
|
225
|
-
|
|
222
|
+
A per-bot `systemMessage` appears in a second hidden block after the default. Audio transcripts receive another warning that they may contain noise or errors. Unlike project context, hidden guidance is persisted with user turns and can appear in history, so never put credentials in configured messages.
|
|
226
223
|
|
|
227
224
|
The runner's speech credentials and `speech.voiceId` are loaded at startup from its environment and normal Tau config, based on the runner process's startup `cwd`. Restart the runner after changing those settings.
|
|
228
225
|
|
|
@@ -40,6 +40,7 @@ view_image
|
|
|
40
40
|
web
|
|
41
41
|
nook
|
|
42
42
|
history
|
|
43
|
+
mcp
|
|
43
44
|
spawn_agent
|
|
44
45
|
send_input_to_agent
|
|
45
46
|
wait_for_agents
|
|
@@ -47,7 +48,7 @@ list_agents
|
|
|
47
48
|
interrupt_agent
|
|
48
49
|
```
|
|
49
50
|
|
|
50
|
-
When a custom persona extends another persona and omits `tools`, it inherits the base persona's list. A non-extending custom persona that omits `tools` enables `bash`, `write`, `edit`, `view_image`, `web`, `nook`, and `
|
|
51
|
+
When a custom persona extends another persona and omits `tools`, it inherits the base persona's list. A non-extending custom persona that omits `tools` enables `bash`, `write`, `edit`, `view_image`, `web`, `nook`, `history`, and `mcp`. It also enables the five subagent-management tools. Built-in personas enable the same base and subagent tool sets.
|
|
51
52
|
|
|
52
53
|
An empty list disables every persona-controlled host tool:
|
|
53
54
|
|
|
@@ -131,7 +132,7 @@ Neither tool provides a general read operation. Use a scoped non-interactive Bas
|
|
|
131
132
|
|
|
132
133
|
`view_image` reads an image from the execution environment and returns it to a multimodal model. Tau's built-in instruction limits use to cases where the user explicitly asks to view or analyze an image.
|
|
133
134
|
|
|
134
|
-
The supported formats are JPEG, PNG, and WebP. Source reads are capped at 50 MiB. Images
|
|
135
|
+
The supported formats are JPEG, PNG, and WebP. Source reads are capped at 50 MiB. Images with both dimensions at most 4,096 pixels and a model payload at most 3.5 MiB are returned unchanged. Images exceeding the dimension limit are resized to fit within 4,096 pixels while preserving aspect ratio, without upscaling. Tau tries lossless encoding before lossy compression and reduces dimensions further only if needed to meet the payload limit. Transparency is preserved. If Tau cannot reduce a valid image below the model payload limit, the call fails. Relative paths resolve from the execution-environment working directory.
|
|
135
136
|
|
|
136
137
|
## Command-line tools
|
|
137
138
|
|
|
@@ -147,7 +148,7 @@ Each guide covers setup, input, examples, outputs, and failure behavior. Use `ta
|
|
|
147
148
|
|
|
148
149
|
## Code-mode service tools
|
|
149
150
|
|
|
150
|
-
`web`, `history`, and `
|
|
151
|
+
`web`, `history`, `nook`, and `mcp` each run a one-shot JavaScript program in Tau's restricted code-mode runtime. They intentionally disclose their exact API at use time rather than embedding signatures in this page.
|
|
151
152
|
|
|
152
153
|
Tau exposes each service tool with agent-facing guidance that requires its documentation to be visible before API use. When the documentation is absent, the first useful call is a documentation-only program:
|
|
153
154
|
|
|
@@ -155,9 +156,11 @@ Tau exposes each service tool with agent-facing guidance that requires its docum
|
|
|
155
156
|
console.log(docs);
|
|
156
157
|
```
|
|
157
158
|
|
|
158
|
-
|
|
159
|
+
The agent reuses visible documentation, without guessing or borrowing another tool's signatures. Shared examples show field selection and text-block extraction for concise plain-text output. Return values are ignored; only console text and images forwarded with `await image(block)` enter the result.
|
|
159
160
|
|
|
160
|
-
Code-mode programs have no direct process, environment, credential, import, timer, network, or `fetch` access. They can call only the named API and use agent-scoped scratch files exposed by the runtime.
|
|
161
|
+
Code-mode programs have no direct process, environment, credential, import, timer, network, or `fetch` access. They can call only the named API and use agent-scoped scratch files exposed by the runtime. Programs default to 60 seconds (MCP: 15 minutes), allow 128 API requests with eight unresolved at once, and limit each serialized payload to 16 MiB. Undefined object properties are omitted from API arguments; undefined arguments and array entries are invalid. Console output is middle-truncated above roughly 8,192 estimated tokens.
|
|
162
|
+
|
|
163
|
+
`await image({ type: "image", data, mimeType })` forwards a base64 image without files. Calls must be awaited before the program exits. JPEG, PNG, and WebP bytes must match the declared MIME type and fit the 16 MiB JSON bridge limit. Source images are limited to 40 megapixels; each program may forward 16 images. Images are resized or re-encoded to fit within 4,096 pixels per dimension and 3.5 MiB each. Adjacent console writes form one text block; awaited images separate the text before and after them. Text truncation keeps images in place. Invalid blocks reject and can be caught. Built-in tools retain valid images if the program later fails.
|
|
161
164
|
|
|
162
165
|
Scratch files are real UTF-8 files in an execution-environment temporary directory shared by code-mode tools for the same agent. Writes are limited to 128 regular files and 64 MiB total. Scratch state is not stored in the session snapshot. The progressively disclosed documentation gives the exact file API.
|
|
163
166
|
|
|
@@ -175,21 +178,33 @@ The effective history query may be machine-local or backed by a configured remot
|
|
|
175
178
|
|
|
176
179
|
### Nook
|
|
177
180
|
|
|
178
|
-
`nook` manages the configured Nook static mini-app platform. It is available
|
|
181
|
+
`nook` manages the configured Nook static mini-app platform. It is available when the main persona lists `nook` and Nook is configured. Subagents inherit it under the same conditions.
|
|
179
182
|
|
|
180
183
|
The tool is intended for explicit requests to inspect or manage Nook, publish a static artifact or mini-app, or work with Nook KV. Once the built-in documentation is visible, app-authoring work requires a second separate documentation-only call that prints the Nook authoring skill. The agent reads that guide before creating or modifying app files. Nook setup and platform behavior are covered in [Nook](nook.md).
|
|
181
184
|
|
|
185
|
+
### MCP
|
|
186
|
+
|
|
187
|
+
`mcp` discovers and calls tools and reads resources from host-configured Model Context Protocol servers. Personas must allow `mcp`, and the host must configure an enabled server. Subagents inherit access; ephemeral threads do not receive it.
|
|
188
|
+
|
|
189
|
+
Servers use stdio or streamable HTTP. Stdio commands run on the host with its environment; HTTP uses host credentials. Server files need not share the agent's workspace. Supported protocol revisions are `2025-11-25`, `2025-06-18`, `2025-03-26`, and `2024-11-05`, not `2026-07-28`.
|
|
190
|
+
|
|
191
|
+
`mcp` lists servers, tools, resources, and templates, inspects schemas, calls tools, and reads URIs. `searchTools` ranks tool metadata with BM25, returning matches and per-server errors. Resources return text or base64 data, without automatic context, file writes, or fetching. Only printed text and images enter context. Tools return `{ content, structuredContent?, isError }`; private MCP `_meta` is stripped. `isError: true` is data; protocol failures throw. Calls/reads default to five minutes, configurable to 15; startup/discovery defaults to 30 seconds. Messages are limited to 16 MiB; oversized results fail.
|
|
192
|
+
|
|
193
|
+
Connections are lazy, shared across sessions, and closed at shutdown. Later requests reconnect. Mutations are not retried. Tool-list changes invalidate cached discovery; resource listings refresh on each call. Restart does not recover connections or calls. Resource subscriptions, prompts, elicitation, and sampling are unsupported.
|
|
194
|
+
|
|
195
|
+
Servers merge by name from host launch-directory config layers. Restart the host to apply changes. See [configuration reference](config-reference.md#mcpservers) and [security](security.md#trust-mcp-servers).
|
|
196
|
+
|
|
182
197
|
## Subagent tool eligibility
|
|
183
198
|
|
|
184
199
|
A subagent can receive only:
|
|
185
200
|
|
|
186
201
|
```text
|
|
187
|
-
bash write edit view_image web history
|
|
202
|
+
bash write edit view_image web history nook mcp
|
|
188
203
|
```
|
|
189
204
|
|
|
190
|
-
|
|
205
|
+
Tau inherits the intersection of the main persona’s tools and those eight eligible names. `tau_docs` is then added intrinsically. There is no separate child tool selection. Nook and MCP require configuration; MCP uses the parent's host connections.
|
|
191
206
|
|
|
192
|
-
Subagents do not receive
|
|
207
|
+
Subagents do not receive goal tools, subagent-management tools, or client-provided tools. Their Bash and file tools are scoped to the subagent working directory, including an alternate directory selected at launch. See [subagents](subagents.md) for configuration and working-directory context rebuilding.
|
|
193
208
|
|
|
194
209
|
## Client-owned tools
|
|
195
210
|
|
|
@@ -116,12 +116,11 @@ Classify the missing capability before changing configuration.
|
|
|
116
116
|
|
|
117
117
|
For a persona-controlled host tool, inspect the active persona's exact `tools` list. An explicit list replaces defaults. Run `tau --debug --persona <id>` for a new local session or reload the current session while idle. Credentials can make a selected tool fail, but usually do not remove its schema. Nook is the exception: it also requires effective `nook` configuration.
|
|
118
118
|
|
|
119
|
-
For a subagent, check
|
|
119
|
+
For a subagent, check these three gates:
|
|
120
120
|
|
|
121
|
-
1. The
|
|
122
|
-
2.
|
|
123
|
-
3.
|
|
124
|
-
4. Fewer than eight subagent runs are currently active.
|
|
121
|
+
1. The main persona exposes `spawn_agent` and any other needed supervision tools.
|
|
122
|
+
2. A requested launch model exactly matches the configured subagent allowlist.
|
|
123
|
+
3. Fewer than eight subagent runs are currently active.
|
|
125
124
|
|
|
126
125
|
An already spawned thread keeps its captured model, tools, and working directory after reload. Recovery does not restore subagent threads, so old agent IDs cannot receive follow-ups after a host restart. Use `list_agents` to inspect live records. See [subagents](subagents.md).
|
|
127
126
|
|
|
@@ -25,7 +25,7 @@ Piped stdin becomes the first message in a local TUI session:
|
|
|
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,
|
|
28
|
+
Use `tau attach` for a session hosted elsewhere. The terminal, themes, clipboard, speech commands, built-in diff review tool, and command-backed client tools still belong to the attaching machine. Bash tools, file access, project configuration, and model work use the session’s execution environment. See [remote sessions](remote-sessions.md) for transport and creation examples.
|
|
29
29
|
|
|
30
30
|
## Work in the editor
|
|
31
31
|
|
|
@@ -35,9 +35,8 @@ Tau recognizes these mention forms and offers Tab completion:
|
|
|
35
35
|
|
|
36
36
|
- `@src/main.ts` mentions a file in the execution environment.
|
|
37
37
|
- `@@skill:code-review` explicitly activates an available skill.
|
|
38
|
-
- `@@agent:default` explicitly selects an available subagent.
|
|
39
38
|
|
|
40
|
-
The older `@file:`, `@skill:`, and `@agent:` forms are not mention syntax. Paths and available skill
|
|
39
|
+
The older `@file:`, `@skill:`, and `@agent:` forms are not mention syntax. Paths and available skill names come from the hosted session, not from the attaching TUI’s filesystem.
|
|
41
40
|
|
|
42
41
|
Typing `/` at the start of a line opens command completion. Slash commands are recognized only for single-line submissions. A multiline input beginning with `/`, or an unknown slash-prefixed input, is sent to the agent as an ordinary message.
|
|
43
42
|
|
|
@@ -45,8 +44,8 @@ Typing `/` at the start of a line opens command completion. Slash commands are r
|
|
|
45
44
|
|
|
46
45
|
When Tau is idle, Enter and Ctrl+Enter both start a normal turn. While a turn is active:
|
|
47
46
|
|
|
48
|
-
- Enter queues the text as a new turn to run when the session becomes idle.
|
|
49
|
-
-
|
|
47
|
+
- Ctrl+Enter queues the text as a new turn to run when the session becomes idle.
|
|
48
|
+
- Enter steers the active turn. Tau applies steering at a safe continuation boundary rather than injecting it into a model response or tool execution in progress.
|
|
50
49
|
- Alt+Up cancels all pending queued messages and steering that has not yet been applied, then restores their text to the editor. Multiple messages are separated with `---`. Hidden guidance, such as transcription warnings, stays hidden in the pending list and editor. Restoring messages preserves their guidance in order after any guidance already attached to the draft. Submission places all guidance at the beginning of the combined message. Editing a non-empty draft preserves it; clearing the draft clears it.
|
|
51
50
|
|
|
52
51
|
Pending input is session state shared by attached clients while the host remains alive. It is not durable across host restart or session recovery. A queued turn captures the persona, reasoning, tools, and model settings when that turn actually starts. Steering remains part of the active logical turn and keeps the settings captured when that turn began.
|
|
@@ -93,13 +92,14 @@ Then use Shift+Tab to select an allowed reasoning level. Newly added personas do
|
|
|
93
92
|
| `/reload` | Reload session-owned configuration and content from the execution environment. |
|
|
94
93
|
| `/listen [retry/discard]` | Record speech, retry a retained failed recording, or discard it on macOS. |
|
|
95
94
|
| `/speak` | Read the last assistant response aloud on macOS. |
|
|
95
|
+
| `/auto-speak [on | off]` | Toggle automatic reading of final responses, or explicitly enable or disable it. |
|
|
96
96
|
| `/copy-text` | Copy the last assistant response as plain text. |
|
|
97
97
|
| `/copy-code` | Copy code blocks from the last assistant response. |
|
|
98
98
|
| `/persona:<id>` | Switch persona while idle. |
|
|
99
99
|
| `/prompt:<id>` | Resolve a prompt from the execution environment and place it in the editor without submitting it. |
|
|
100
100
|
| `/theme:<id>` | Switch this TUI’s theme for the current run. |
|
|
101
101
|
|
|
102
|
-
Commands that mutate context, such as persona changes, compaction, rewind, and reload, should be run while idle. `/goal` display and clear, `/listen`, `/prompt:<id>`, and `/exit` have limited useful behavior during a running turn. Ordinary command submissions are otherwise held back until Tau is idle.
|
|
102
|
+
Commands that mutate context, such as persona changes, compaction, rewind, and reload, should be run while idle. `/goal` display and clear, `/auto-speak`, `/listen`, `/prompt:<id>`, and `/exit` have limited useful behavior during a running turn. Ordinary command submissions are otherwise held back until Tau is idle.
|
|
103
103
|
|
|
104
104
|
Compaction, rewind, goals, recovery, and retry are described in [sessions](sessions.md). Prompt discovery and insertion are covered in [prompts and project context](prompts-and-project-context.md).
|
|
105
105
|
|
|
@@ -111,8 +111,9 @@ Compaction, rewind, goals, recovery, and retry are described in [sessions](sessi
|
|
|
111
111
|
| Ctrl+P | Cycle persona while idle. |
|
|
112
112
|
| Ctrl+T | Toggle thought visibility in this TUI. |
|
|
113
113
|
| Ctrl+S | Copy the expanded editor contents to the local clipboard, then clear the editor. |
|
|
114
|
-
| Ctrl+Y | Start or stop voice recording. |
|
|
115
|
-
|
|
|
114
|
+
| Ctrl+Y | Start or stop voice recording without submitting. |
|
|
115
|
+
| Enter | Steer an active turn, or submit normally while idle. |
|
|
116
|
+
| Ctrl+Enter | Queue another turn, or submit normally while idle. |
|
|
116
117
|
| Alt+Up | Cancel pending input and restore it to the editor. |
|
|
117
118
|
| Alt+Down | Cycle the selected active subagent. |
|
|
118
119
|
| Ctrl+G | Interrupt the selected active subagent. |
|
|
@@ -155,7 +156,7 @@ Theme ids are exact and case-sensitive. `/theme` does not persist the selection.
|
|
|
155
156
|
|
|
156
157
|
## Review a diff
|
|
157
158
|
|
|
158
|
-
`/diff` captures a Git snapshot through the session execution environment, then launches a diff-tool process on the TUI machine. The built-in browser tool is the
|
|
159
|
+
`/diff` captures a Git snapshot through the session execution environment, then launches a diff-tool process on the TUI machine. The built-in browser tool is the review interface. `tau diff-tool` is its process entry point. `tau diff-tool --help` shows its help, while `/diff` supplies the environment required for normal reviews. Arguments are passed as Git diff arguments, for example:
|
|
159
160
|
|
|
160
161
|
```text
|
|
161
162
|
/diff --staged
|
|
@@ -163,17 +164,6 @@ Theme ids are exact and case-sensitive. `/theme` does not persist the selection.
|
|
|
163
164
|
|
|
164
165
|
Captured snapshot patches are limited to 16 MiB. Narrow the Git arguments when a larger scope is rejected. A plain working-tree snapshot includes non-binary untracked files up to 4 MiB each within that aggregate limit.
|
|
165
166
|
|
|
166
|
-
A `diffTool` entry in the attaching client’s configuration replaces the launcher. Relative commands resolve from the configuration level that defines them:
|
|
167
|
-
|
|
168
|
-
```json
|
|
169
|
-
{
|
|
170
|
-
"diffTool": {
|
|
171
|
-
"command": "/usr/local/bin/team-diff-review",
|
|
172
|
-
"args": ["--open"]
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
```
|
|
176
|
-
|
|
177
167
|
The built-in tool opens in Guide mode and starts preparing reviewer orientation, focused topics, and likely questions as soon as its shared review context is ready. Reviewers can comment on that guide, ask for another topic or question, or switch to Diff mode for file and line-level review threads. Guide comments and unresolved diff threads are included in self-contained returned Markdown that identifies the reviewed scope, gives change-level comments their relevant context, and explains the participants and roles in review discussions. Submit first opens the exact return-text preview, where included feedback can be excluded and the full review can be copied before submission. Approve returns immediately when no feedback remains; if feedback appears while approval is being checked, the preview opens instead.
|
|
178
168
|
|
|
179
169
|
The session host supplies ephemeral review agents, while the local tool owns its browser or interface process. Returned review feedback is recorded as a user entry in the session so it remains available, but Tau does not automatically start an assistant turn after the tool closes. Submit a follow-up message when the review should drive more work.
|
|
@@ -182,7 +172,11 @@ The TUI also advertises diff review as a client tool unless `--no-client-tools`
|
|
|
182
172
|
|
|
183
173
|
## Use speech
|
|
184
174
|
|
|
185
|
-
`/listen` and Ctrl+Y are currently macOS-only. Recording uses local `ffmpeg` with the AVFoundation audio input and stops when Ctrl+Y is pressed again, when Escape is pressed, or at the 9-minute recording limit. The Gemini limit leaves time for setup and finalization within its 10-minute live session. Startup fails if the microphone produces no audio within 15 seconds.
|
|
175
|
+
`/listen` and Ctrl+Y are currently macOS-only. Recording uses local `ffmpeg` with the AVFoundation audio input and stops when Ctrl+Y is pressed again, when Escape is pressed, or at the 9-minute recording limit. The Gemini limit leaves time for setup and finalization within its 10-minute live session. Startup fails if the microphone produces no audio within 15 seconds. Pressing Enter or Ctrl+Enter while recording stops capture, finishes transcription, and submits the finalized editor text. While a turn is active, Enter steers it and Ctrl+Enter queues another turn, just like normal editor submission. Pressing Ctrl+Y again or reaching the recording limit finishes transcription and inserts the transcript at the cursor for review without submitting it.
|
|
176
|
+
|
|
177
|
+
The recording shortcut is configurable with [`speech.recordingShortcut`](config-reference.md#speech), including single-press and double-tap printable keys such as `§`. The editor hint shows the configured gesture. Starting a recording stops speech playback.
|
|
178
|
+
|
|
179
|
+
`/auto-speak` toggles automatic reading of successful final answers. `/auto-speak on` and `/auto-speak off` explicitly select the mode; turning it off also stops current playback. It starts off and applies only to the current session in this TUI, including when attached remotely. `/new` resets it. It does not change other clients or replay historical answers. Commentary, tool activity, and failed or interrupted answers are not automatically spoken. Responses arriving while recording or playing speech are not queued for later playback. Escape stops playback without disabling the mode. Automatic playback uses the same voice, credentials, and rewriting as `/speak`; it does not open the microphone or automatically submit dictation.
|
|
186
180
|
|
|
187
181
|
Gemini displays a replaceable live preview in muted italic text at the original cursor position. Finalized dictation uses normal text once transcription settles. Its final transcript replaces the preview without duplication. Submitting a draft containing finalized dictation includes hidden guidance that some or all of the message may have been transcribed from speech and may contain transcription errors. The guidance remains after edits and clears when the draft is emptied. Editing stays disabled from recording startup through finalization, and failure restores the original draft. Recording and retries cannot start while another editor update is pending.
|
|
188
182
|
|
|
@@ -207,7 +201,7 @@ Restart the TUI instead after changing client-owned themes, the diff launcher, s
|
|
|
207
201
|
## Common mistakes
|
|
208
202
|
|
|
209
203
|
- `!` and `!!` run in the execution environment, not on the attaching client.
|
|
210
|
-
- Enter during a turn
|
|
204
|
+
- Enter during a turn steers it. Use Ctrl+Enter to queue another turn.
|
|
211
205
|
- Ctrl+T changes visibility only. Use Shift+Tab to change reasoning effort.
|
|
212
206
|
- `/prompt:<id>` fills the editor but does not submit it.
|
|
213
207
|
- `/diff` records returned feedback but does not automatically ask the assistant to act on it.
|